From 963ec1b2ead2d2382a8199e13055a2f4efb97441 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 22 Jun 2023 13:33:25 +0800 Subject: [PATCH] begin of thinksaas 3.68 Signed-off-by: kevin --- .gitignore | 13 + .user.ini | 1 + 404.html | 26 + Dockerfile | 48 + INSTALL.TXT | 22 + LICENSE.TXT | 18 + README.md | 78 + app/.ecoder_permissions_check.txt | 1 + app/article/.ecoder_permissions_check.txt | 1 + app/article/about.php | 17 + app/article/action/add.php | 213 + app/article/action/admin.php | 9 + app/article/action/admin/article.php | 143 + app/article/action/admin/cate.php | 127 + app/article/action/admin/comment.php | 2 + app/article/action/admin/options.php | 26 + app/article/action/admin/permissions.php | 39 + app/article/action/admin/post.php | 126 + app/article/action/admin/sitemap.php | 4 + app/article/action/ajax.php | 26 + app/article/action/api.php | 9 + app/article/action/api/index.php | 31 + app/article/action/api/list.php | 80 + app/article/action/cate.php | 99 + app/article/action/comment.php | 73 + app/article/action/common.php | 7 + app/article/action/delete.php | 32 + app/article/action/edit.php | 174 + app/article/action/index.php | 50 + app/article/action/my.php | 11 + app/article/action/my/common.php | 6 + app/article/action/my/index.php | 22 + app/article/action/recommend.php | 39 + app/article/action/score.php | 69 + app/article/action/show.php | 112 + app/article/action/tag.php | 64 + app/article/action/tags.php | 18 + app/article/class.article.php | 165 + app/article/config.php | 19 + app/article/html/add.html | 237 + app/article/html/admin/article_list.html | 76 + app/article/html/admin/cate_add.html | 28 + app/article/html/admin/cate_edit.html | 27 + app/article/html/admin/cate_list.html | 64 + app/article/html/admin/menu.html | 17 + app/article/html/admin/options.html | 29 + app/article/html/admin/permissions.html | 148 + app/article/html/admin/post_list.html | 52 + app/article/html/cate.html | 133 + app/article/html/edit.html | 163 + app/article/html/index.html | 237 + app/article/html/menu.html | 9 + app/article/html/my/index.html | 73 + app/article/html/show.html | 253 + app/article/html/tag.html | 155 + app/article/html/tags.html | 34 + app/article/icon.png | Bin 0 -> 1969 bytes app/article/js/admin.js | 0 app/article/js/extend.func.js | 16 + app/article/skin/style.css | 23 + app/article/skins/default/style.css | 23 + app/attach/about.php | 34 + app/attach/action/album.php | 192 + app/attach/action/comment.php | 92 + app/attach/action/down.php | 103 + app/attach/action/edit.php | 24 + app/attach/action/editdo.php | 31 + app/attach/action/editor.php | 36 + app/attach/action/index.php | 25 + app/attach/action/new.php | 65 + app/attach/action/show.php | 76 + app/attach/action/upload.php | 69 + app/attach/class.attach.php | 6 + app/attach/config.php | 19 + app/attach/html/add.html | 64 + app/attach/html/album.html | 114 + app/attach/html/album_edit.html | 68 + app/attach/html/create.html | 65 + app/attach/html/edit.html | 61 + app/attach/html/editor.html | 96 + app/attach/html/index.html | 49 + app/attach/html/show.html | 172 + app/attach/html/upload.html | 63 + app/attach/js/extend.func.js | 2 + app/attach/skins/default/attach_album.png | Bin 0 -> 192361 bytes app/attach/skins/default/style.css | 0 app/comment/about.php | 17 + app/comment/action/add.php | 145 + app/comment/action/admin.php | 9 + app/comment/action/admin/comment.php | 91 + app/comment/action/admin/options.php | 26 + app/comment/action/api.php | 9 + app/comment/action/delete.php | 26 + app/comment/action/my.php | 11 + app/comment/action/my/index.php | 22 + app/comment/action/recomment.php | 9 + app/comment/class.comment.php | 207 + app/comment/config.php | 4 + app/comment/html/admin/comment_list.html | 116 + app/comment/html/admin/menu.html | 11 + app/comment/html/admin/options.html | 38 + app/comment/html/my/index.html | 72 + app/comment/html/recomment.html | 55 + app/friendlinks/about.php | 1 + app/friendlinks/action/admin.php | 9 + app/friendlinks/action/admin/options.php | 27 + app/friendlinks/action/admin/topic.php | 20 + app/friendlinks/action/create.php | 10 + app/friendlinks/action/index.php | 3 + app/friendlinks/class.friendlinks.php | 12 + app/friendlinks/config.php | 19 + app/friendlinks/html/admin/menu.html | 8 + app/friendlinks/html/admin/options.html | 23 + app/friendlinks/html/admin/topic_list.html | 51 + app/friendlinks/html/create.html | 48 + app/friendlinks/html/index.html | 17 + app/friendlinks/js/admin.js | 0 app/friendlinks/js/extend.func.js | 166 + app/friendlinks/js/share.min.js | 1 + app/friendlinks/skins/default/group.jpg | Bin 0 -> 102676 bytes app/friendlinks/skins/default/share.min.css | 1 + app/friendlinks/skins/default/style.css | 298 + app/friendlinks/skins/fonts/iconfont.ttf | Bin 0 -> 9296 bytes app/friendlinks/skins/fonts/iconfont.woff | Bin 0 -> 6364 bytes app/group/about.php | 17 + app/group/action/add.php | 290 + app/group/action/admin.php | 9 + app/group/action/admin/album.php | 39 + app/group/action/admin/cate.php | 118 + app/group/action/admin/group.php | 156 + app/group/action/admin/options.php | 27 + app/group/action/admin/permissions.php | 39 + app/group/action/admin/topic.php | 133 + app/group/action/admin/upuser.php | 24 + app/group/action/ajax.php | 147 + app/group/action/all.php | 30 + app/group/action/api.php | 9 + app/group/action/api/index.php | 21 + app/group/action/audit.php | 99 + app/group/action/cate.php | 223 + app/group/action/comment.php | 192 + app/group/action/create.php | 169 + app/group/action/delete.php | 3 + app/group/action/do.php | 328 + app/group/action/edit.php | 602 + app/group/action/index.php | 65 + app/group/action/kicked.php | 34 + app/group/action/my.php | 11 + app/group/action/my/common.php | 6 + app/group/action/my/index.php | 30 + app/group/action/my/topic.php | 20 + app/group/action/plugin.php | 12 + app/group/action/show.php | 145 + app/group/action/tag.php | 30 + app/group/action/tags.php | 17 + app/group/action/topic.php | 5 + app/group/action/topiccollect.php | 28 + app/group/action/topicedit.php | 152 + app/group/action/topicmove.php | 87 + app/group/action/user.php | 89 + app/group/class.group.php | 212 + app/group/config.php | 6 + app/group/html/add.html | 141 + app/group/html/admin/album_list.html | 27 + app/group/html/admin/cate_add.html | 21 + app/group/html/admin/cate_edit.html | 32 + app/group/html/admin/cate_list.html | 58 + app/group/html/admin/group_list.html | 62 + app/group/html/admin/group_recommend.html | 74 + app/group/html/admin/menu.html | 18 + app/group/html/admin/options.html | 46 + app/group/html/admin/permissions.html | 148 + app/group/html/admin/topic_delete.html | 37 + app/group/html/admin/topic_edit.html | 45 + app/group/html/admin/topic_edit_view.html | 18 + app/group/html/admin/topic_list.html | 42 + app/group/html/ajax_topic.html | 45 + app/group/html/audit.html | 84 + app/group/html/create.html | 59 + app/group/html/edit_base.html | 115 + app/group/html/edit_cate.html | 127 + app/group/html/edit_icon.html | 87 + app/group/html/edit_isadmin.html | 66 + app/group/html/edit_transfer.html | 48 + app/group/html/edit_type.html | 81 + app/group/html/edit_user.html | 91 + app/group/html/edit_useraudit.html | 46 + app/group/html/edit_xbar.html | 20 + app/group/html/group_ajax.html | 49 + app/group/html/group_ajax_more.html | 26 + app/group/html/group_isopen.html | 37 + app/group/html/index.html | 101 + app/group/html/my/index.html | 89 + app/group/html/my/topic.html | 60 + app/group/html/show.html | 285 + app/group/html/tag.html | 67 + app/group/html/tags.html | 36 + app/group/html/topic.html | 505 + app/group/html/topic_collect.html | 6 + app/group/html/topic_edit.html | 117 + app/group/html/topic_isopen.html | 42 + app/group/html/topic_move.html | 30 + app/group/html/topic_xuqi.html | 35 + app/group/html/user.html | 134 + app/group/icon.png | Bin 0 -> 3424 bytes app/group/js/admin.js | 0 app/group/js/extend.func.js | 35 + app/group/skin/group.jpg | Bin 0 -> 102676 bytes app/group/skin/style.css | 263 + app/group/skins/default/group.jpg | Bin 0 -> 102676 bytes app/group/skins/default/style.css | 291 + app/home/about.php | 24 + app/home/action/admin.php | 10 + app/home/action/admin/info.php | 94 + app/home/action/admin/options.php | 11 + app/home/action/index.php | 5 + app/home/action/info.php | 24 + app/home/action/my.php | 0 app/home/action/plugin.php | 9 + app/home/action/report.php | 45 + app/home/action/theme.php | 15 + app/home/class.home.php | 17 + app/home/config.php | 6 + app/home/html/admin/info_add.html | 55 + app/home/html/admin/info_edit.html | 58 + app/home/html/admin/info_list.html | 42 + app/home/html/admin/menu.html | 14 + app/home/html/admin/options.html | 11 + app/home/html/index.html | 27 + app/home/html/info.html | 49 + app/home/html/menu.html | 9 + app/home/html/my.html | 72 + app/home/html/report.html | 41 + app/home/html/theme.html | 36 + app/home/icon.png | Bin 0 -> 2008 bytes app/home/js/admin.js | 0 app/home/js/extend.func.js | 8 + app/home/skin/style.css | 11 + app/home/skins/default/style.css | 11 + app/index.php | 17 + app/location/about.php | 17 + app/location/action/admin.php | 10 + app/location/action/admin/location.php | 136 + app/location/action/admin/options.php | 4 + app/location/action/ajax.php | 108 + app/location/action/all.php | 7 + app/location/action/index.php | 21 + app/location/action/my.php | 10 + app/location/action/my/common.php | 6 + app/location/action/my/index.php | 15 + app/location/action/show.php | 64 + app/location/class.location.php | 23 + app/location/config.php | 8 + app/location/html/admin/location_add.html | 23 + app/location/html/admin/location_edit.html | 28 + app/location/html/admin/location_list.html | 36 + app/location/html/admin/menu.html | 11 + app/location/html/admin/options.html | 11 + app/location/html/all.html | 33 + app/location/html/index.html | 33 + app/location/html/my/index.html | 64 + app/location/html/show.html | 207 + app/location/js/admin.js | 0 app/location/js/extend.func.js | 0 app/location/skins/default/style.css | 95 + app/mail/about.php | 17 + app/mail/action/admin.php | 10 + app/mail/action/admin/do.php | 67 + app/mail/action/admin/options.php | 31 + app/mail/class.mail.php | 227 + app/mail/config.php | 4 + app/mail/html/admin/menu.html | 13 + app/mail/html/admin/options.html | 43 + app/mail/html/admin/options_sms.html | 55 + app/message/about.php | 17 + app/message/action/admin.php | 10 + app/message/action/admin/msg.php | 34 + app/message/action/admin/options.php | 11 + app/message/action/api.php | 9 + app/message/action/api/index.php | 21 + app/message/action/common.php | 7 + app/message/action/friend.php | 31 + app/message/action/index.php | 2 + app/message/action/msgbox.php | 41 + app/message/action/my.php | 19 + app/message/action/newmsg.php | 19 + app/message/action/read.php | 18 + app/message/action/sendbox.php | 13 + app/message/action/sendmsg.php | 10 + app/message/action/system.php | 32 + app/message/action/user.php | 37 + app/message/class.message.php | 48 + app/message/config.php | 6 + app/message/html/admin/menu.html | 12 + app/message/html/admin/msg_list.html | 41 + app/message/html/admin/options.html | 11 + app/message/html/friend.html | 52 + app/message/html/menu.html | 7 + app/message/html/msgbox.html | 11 + app/message/html/my.html | 98 + app/message/html/sendbox.html | 8 + app/message/html/system.html | 85 + app/message/html/user.html | 56 + app/message/js/extend.func.js | 72 + app/message/skin/style.css | 35 + app/message/skins/default/loading.gif | Bin 0 -> 1160 bytes app/message/skins/default/style.css | 35 + app/message/skins/default/system.gif | Bin 0 -> 573 bytes app/my/about.php | 17 + app/my/action/admin.php | 10 + app/my/action/admin/options.php | 11 + app/my/action/common.php | 6 + app/my/action/index.php | 41 + app/my/action/invite.php | 10 + app/my/action/score.php | 20 + app/my/action/setting.php | 278 + app/my/class.my.php | 18 + app/my/config.php | 6 + app/my/html/admin/options.html | 9 + app/my/html/index.html | 104 + app/my/html/invite.html | 70 + app/my/html/score.html | 56 + app/my/html/setting_base.html | 85 + app/my/html/setting_city.html | 75 + app/my/html/setting_cut.html | 96 + app/my/html/setting_email.html | 177 + app/my/html/setting_face.html | 68 + app/my/html/setting_menu.html | 10 + app/my/html/setting_pwd.html | 64 + app/my/html/setting_tag.html | 85 + app/my/icon.png | Bin 0 -> 4522 bytes app/my/js/admin.js | 0 app/my/js/extend.func.js | 0 app/my/skin/style.css | 22 + app/my/skins/default/style.css | 22 + app/photo/about.php | 17 + app/photo/action/admin.php | 10 + app/photo/action/admin/album.php | 219 + app/photo/action/admin/comment.php | 73 + app/photo/action/admin/options.php | 26 + app/photo/action/admin/permissions.php | 39 + app/photo/action/admin/photo.php | 40 + app/photo/action/ajax.php | 157 + app/photo/action/album.php | 299 + app/photo/action/api.php | 9 + app/photo/action/api/index.php | 21 + app/photo/action/create.php | 66 + app/photo/action/delete.php | 40 + app/photo/action/do.php | 111 + app/photo/action/edit.php | 52 + app/photo/action/index.php | 25 + app/photo/action/my.php | 11 + app/photo/action/my/common.php | 6 + app/photo/action/my/index.php | 29 + app/photo/action/show.php | 92 + app/photo/action/upload.php | 129 + app/photo/action/user.php | 34 + app/photo/class.photo.php | 99 + app/photo/config.php | 6 + app/photo/html/admin/album_list.html | 74 + app/photo/html/admin/album_photo.html | 42 + app/photo/html/admin/comment_list.html | 89 + app/photo/html/admin/menu.html | 16 + app/photo/html/admin/options.html | 34 + app/photo/html/admin/permissions.html | 165 + app/photo/html/admin/photo_list.html | 60 + app/photo/html/album.html | 96 + app/photo/html/album_edit.html | 68 + app/photo/html/album_info.html | 79 + app/photo/html/create.html | 65 + app/photo/html/index.html | 48 + app/photo/html/menu.html | 9 + app/photo/html/my/index.html | 64 + app/photo/html/photo_edit.html | 62 + app/photo/html/show.html | 174 + app/photo/html/upload.html | 77 + app/photo/html/user.html | 47 + app/photo/js/admin.js | 0 app/photo/js/extend.func.js | 0 app/photo/skin/photo_album.png | Bin 0 -> 14311 bytes app/photo/skin/style.css | 272 + app/photo/skins/default/photo_album.png | Bin 0 -> 14311 bytes app/photo/skins/default/style.css | 272 + app/pubs/about.php | 17 + app/pubs/action/admin.php | 10 + app/pubs/action/admin/options.php | 23 + app/pubs/action/aliyun.php | 83 + app/pubs/action/api.php | 9 + app/pubs/action/code.php | 12 + app/pubs/action/download.php | 113 + app/pubs/action/draft.php | 37 + app/pubs/action/editor.php | 126 + app/pubs/action/email.php | 103 + app/pubs/action/file.php | 30 + app/pubs/action/home.php | 10 + app/pubs/action/index.php | 3 + app/pubs/action/phone.php | 121 + app/pubs/action/photo.php | 51 + app/pubs/action/plugin.php | 11 + app/pubs/action/signin.php | 17 + app/pubs/action/urltoid.php | 56 + app/pubs/class.pubs.php | 556 + app/pubs/config.php | 6 + app/pubs/html/admin/menu.html | 9 + app/pubs/html/admin/options.html | 25 + app/pubs/html/admin/plugin_menu.html | 5 + app/pubs/html/home.html | 228 + app/pubs/js/admin.js | 0 app/pubs/js/extend.func.js | 0 app/pubs/skins/default/style.css | 0 app/search/about.php | 17 + app/search/action/admin.php | 9 + app/search/action/admin/options.php | 36 + app/search/action/common.php | 4 + app/search/action/index.php | 30 + app/search/action/s.php | 91 + app/search/action/xs.php | 4 + app/search/class.search.php | 18 + app/search/config.php | 6 + app/search/html/admin/menu.html | 9 + app/search/html/admin/options.html | 40 + app/search/html/index.html | 73 + app/search/html/s_all.html | 60 + app/search/html/s_article.html | 29 + app/search/html/s_group.html | 26 + app/search/html/s_menu.html | 52 + app/search/html/s_topic.html | 30 + app/search/html/s_user.html | 26 + app/search/js/extend.func.js | 0 app/search/skin/style.css | 78 + app/search/skins/default/style.css | 78 + app/shop/about.php | 1 + app/shop/action/add.php | 10 + app/shop/action/buy.php | 105 + app/shop/action/comment.php | 92 + app/shop/action/do.php | 70 + app/shop/action/edit.php | 24 + app/shop/action/editdo.php | 62 + app/shop/action/index.php | 19 + app/shop/action/myorder.php | 25 + app/shop/action/order.php | 34 + app/shop/action/sellout.php | 25 + app/shop/action/show.php | 70 + app/shop/class.shop.php | 9 + app/shop/config.php | 1 + app/shop/html/add.html | 123 + app/shop/html/buy.html | 135 + app/shop/html/buyend.html | 3 + app/shop/html/edit.html | 125 + app/shop/html/index.html | 56 + app/shop/html/myorder.html | 76 + app/shop/html/order.html | 111 + app/shop/html/sellout.html | 72 + app/shop/html/show.html | 287 + app/shop/js/extend.func.js | 2 + app/shop/skins/default/photo_album.png | Bin 0 -> 69843 bytes app/shop/skins/default/style.css | 0 app/showerro/about.php | 17 + app/showerro/action/index.php | 15 + app/showerro/class.showerro.php | 9 + app/showerro/config.php | 1 + app/showerro/html/erro404.html | 62 + app/showerro/html/index.html | 3 + app/showerro/js/extend.func.js | 66 + app/showerro/skins/default/playing.png | Bin 0 -> 19917 bytes app/showerro/skins/default/style.css | 441 + app/system/about.php | 17 + app/system/action/anti.php | 360 + app/system/action/apps.php | 244 + app/system/action/cache.php | 45 + app/system/action/do.php | 45 + app/system/action/editor.php | 44 + app/system/action/index.php | 5 + app/system/action/login.php | 49 + app/system/action/logo.php | 45 + app/system/action/logs.php | 52 + app/system/action/main.php | 24 + app/system/action/options.php | 93 + app/system/action/phpinfo.php | 10 + app/system/action/plugin.php | 114 + app/system/action/redis.php | 16 + app/system/action/spam.php | 61 + app/system/action/sql.php | 6 + app/system/action/test.php | 25 + app/system/action/update.php | 209 + app/system/class.system.php | 187 + app/system/config.php | 6 + app/system/html/admincp.html | 93 + app/system/html/anti_cloud.html | 48 + app/system/html/anti_email.html | 37 + app/system/html/anti_ip.html | 33 + app/system/html/anti_menu.html | 29 + app/system/html/anti_phone.html | 35 + app/system/html/anti_report.html | 30 + app/system/html/anti_word.html | 43 + app/system/html/anti_wordadd.html | 24 + app/system/html/apps.html | 127 + app/system/html/apps_applist.html | 153 + app/system/html/apps_menu.html | 8 + app/system/html/apps_mylist.html | 154 + app/system/html/cache.html | 20 + app/system/html/editor_list.html | 53 + app/system/html/logs_list.html | 72 + app/system/html/logs_show.html | 31 + app/system/html/main.html | 134 + app/system/html/menu.html | 13 + app/system/html/options.html | 403 + app/system/html/plugin_list.html | 76 + app/system/html/spam.html | 83 + app/system/html/sql.html | 17 + app/system/html/test.html | 31 + app/system/html/update.html | 28 + app/system/html/update_hand.html | 45 + app/system/html/update_one.html | 47 + app/system/html/update_three.html | 44 + app/system/html/update_two.html | 42 + app/system/js/admin.js | 0 app/system/js/extend.func.js | 0 app/system/skin/loading.gif | Bin 0 -> 729 bytes app/system/skin/logo.png | Bin 0 -> 48758 bytes app/system/skin/style.css | 79 + app/system/skins/default/loading.gif | Bin 0 -> 729 bytes app/system/skins/default/logo.png | Bin 0 -> 48758 bytes app/system/skins/default/style.css | 62 + app/tag/about.php | 17 + app/tag/action/add.php | 25 + app/tag/action/add_ajax.php | 25 + app/tag/action/admin.php | 10 + app/tag/action/admin/do.php | 87 + app/tag/action/admin/list.php | 18 + app/tag/action/admin/options.php | 19 + app/tag/action/index.php | 0 app/tag/action/topic.php | 0 app/tag/class.tag.php | 201 + app/tag/config.php | 4 + app/tag/html/admin/list.html | 39 + app/tag/html/admin/menu.html | 10 + app/tag/html/admin/options.html | 30 + app/topic/about.php | 17 + app/topic/action/add.php | 337 + app/topic/action/admin.php | 9 + app/topic/action/admin/options.php | 26 + app/topic/action/admin/permissions.php | 39 + app/topic/action/admin/topic.php | 232 + app/topic/action/ajax.php | 204 + app/topic/action/api.php | 9 + app/topic/action/api/index .php | 21 + app/topic/action/delete.php | 42 + app/topic/action/edit.php | 164 + app/topic/action/group.php | 20 + app/topic/action/index.php | 41 + app/topic/action/move.php | 98 + app/topic/action/my.php | 11 + app/topic/action/my/index.php | 20 + app/topic/action/score.php | 63 + app/topic/action/show.php | 182 + app/topic/action/tag.php | 59 + app/topic/action/tags.php | 17 + app/topic/class.topic.php | 189 + app/topic/config.php | 6 + app/topic/html/add.html | 190 + app/topic/html/admin/menu.html | 18 + app/topic/html/admin/options.html | 29 + app/topic/html/admin/permissions.html | 130 + app/topic/html/admin/topic_delete.html | 37 + app/topic/html/admin/topic_edit.html | 45 + app/topic/html/admin/topic_edit_view.html | 18 + app/topic/html/admin/topic_list.html | 119 + app/topic/html/edit.html | 119 + app/topic/html/group.html | 42 + app/topic/html/index.html | 151 + app/topic/html/move.html | 52 + app/topic/html/my/index.html | 62 + app/topic/html/show.html | 289 + app/topic/html/tag.html | 90 + app/topic/html/tags.html | 36 + app/topic/html/topic_isopen.html | 42 + app/topic/html/topic_xuqi.html | 35 + app/topic/js/extend.func.js | 50 + app/topic/skin/style.css | 75 + app/user/about.php | 17 + app/user/action/admin.php | 10 + app/user/action/admin/group.php | 73 + app/user/action/admin/guestbook.php | 35 + app/user/action/admin/options.php | 28 + app/user/action/admin/permissions.php | 39 + app/user/action/admin/role.php | 49 + app/user/action/admin/score.php | 123 + app/user/action/admin/user.php | 403 + app/user/action/anti.php | 20 + app/user/action/api.php | 9 + app/user/action/api/index.php | 21 + app/user/action/article.php | 29 + app/user/action/collect.php | 24 + app/user/action/comment.php | 33 + app/user/action/follow.php | 123 + app/user/action/followed.php | 27 + app/user/action/forgetpwd.php | 143 + app/user/action/group.php | 17 + app/user/action/guestbook.php | 130 + app/user/action/index.php | 21 + app/user/action/invite.php | 66 + app/user/action/login.php | 134 + app/user/action/logout.php | 7 + app/user/action/message.php | 89 + app/user/action/my.php | 10 + app/user/action/my/common.php | 6 + app/user/action/my/index.php | 6 + app/user/action/phone.php | 462 + app/user/action/plogin.php | 63 + app/user/action/plugin.php | 13 + app/user/action/register.php | 190 + app/user/action/resetpwd.php | 81 + app/user/action/role.php | 7 + app/user/action/signin.php | 39 + app/user/action/space.php | 30 + app/user/action/system.php | 5 + app/user/action/topic.php | 20 + app/user/action/userinfo.php | 36 + app/user/action/verify.php | 189 + app/user/action/wxlogin.php | 181 + app/user/class.user.php | 828 ++ app/user/config.php | 19 + app/user/html/admin/footer.html | 2 + app/user/html/admin/group_list.html | 73 + app/user/html/admin/guestbook_list.html | 29 + app/user/html/admin/menu.html | 33 + app/user/html/admin/options.html | 30 + app/user/html/admin/permissions.html | 177 + app/user/html/admin/role_list.html | 36 + app/user/html/admin/score_list.html | 89 + app/user/html/admin/score_send.html | 19 + app/user/html/admin/user_add.html | 66 + app/user/html/admin/user_list.html | 157 + app/user/html/admin/user_pwd.html | 20 + app/user/html/admin/user_view.html | 35 + app/user/html/area.html | 3 + app/user/html/article.html | 123 + app/user/html/city.html | 3 + app/user/html/collect.html | 31 + app/user/html/comment.html | 35 + app/user/html/follow.html | 50 + app/user/html/followed.html | 52 + app/user/html/forgetpwd.html | 163 + app/user/html/forgetpwd_phone.html | 156 + app/user/html/group.html | 42 + app/user/html/guestbook.html | 102 + app/user/html/index.html | 112 + app/user/html/invite.html | 58 + app/user/html/login.html | 183 + app/user/html/menu.html | 93 + app/user/html/message_add.html | 75 + app/user/html/phone.html | 208 + app/user/html/phone_verify.html | 160 + app/user/html/plogin.html | 155 + app/user/html/register.html | 260 + app/user/html/resetpwd.html | 80 + app/user/html/role.html | 39 + app/user/html/signin_ajax.html | 9 + app/user/html/space.html | 50 + app/user/html/system.html | 117 + app/user/html/topic.html | 45 + app/user/html/userinfo.html | 2 + app/user/html/verify.html | 64 + app/user/html/verify_face.html | 75 + app/user/js/admin.js | 0 app/user/js/extend.func.js | 9 + app/user/skin/style.css | 486 + app/user/skins/default/style.css | 486 + app/weibo/about.php | 17 + app/weibo/action.weibo.php | 377 + app/weibo/action/add.php | 76 + app/weibo/action/admin.php | 9 + app/weibo/action/admin/options.php | 24 + app/weibo/action/admin/permissions.php | 39 + app/weibo/action/admin/weibo.php | 70 + app/weibo/action/api.php | 9 + app/weibo/action/api/index.php | 21 + app/weibo/action/delete.php | 23 + app/weibo/action/index.php | 36 + app/weibo/action/my.php | 11 + app/weibo/action/my/index.php | 25 + app/weibo/action/photo.php | 62 + app/weibo/action/show.php | 79 + app/weibo/admin.weibo.php | 124 + app/weibo/class.weibo.php | 108 + app/weibo/config.php | 19 + app/weibo/html/admin/menu.html | 14 + app/weibo/html/admin/options.html | 35 + app/weibo/html/admin/permissions.html | 121 + app/weibo/html/admin/weibo_list.html | 77 + app/weibo/html/ajax_list.html | 11 + app/weibo/html/index.html | 213 + app/weibo/html/menu.html | 4 + app/weibo/html/my/index.html | 108 + app/weibo/html/photo_list.html | 6 + app/weibo/html/show.html | 183 + app/weibo/js/extend.func.js | 0 app/weibo/my.weibo.php | 37 + app/weibo/skin/style.css | 77 + composer.json | 25 + composer.lock | 2670 ++++ favicon.ico | Bin 0 -> 1150 bytes index.html | 24 + index.php | 57 + install/action/index.php | 43 + install/action/next.php | 6 + install/action/result.php | 133 + install/html/error.html | 156 + install/html/footer.html | 6 + install/html/header.html | 21 + install/html/index.html | 170 + install/html/next.html | 262 + install/html/result.html | 159 + install/index.php | 16 + install/install.sql | 1285 ++ install/skin/logo.gif | Bin 0 -> 2395 bytes install/skin/style.css | 20 + plugins/home/article/about.php | 14 + plugins/home/article/article.html | 16 + plugins/home/article/article.php | 24 + plugins/home/friendlinks/about.php | 14 + plugins/home/friendlinks/friendlinks.html | 22 + plugins/home/friendlinks/friendlinks.php | 6 + plugins/home/hottopic/about.php | 14 + plugins/home/hottopic/hottopic.php | 24 + plugins/home/links/about.php | 14 + plugins/home/links/edit.php | 39 + plugins/home/links/edit_set.html | 27 + plugins/home/links/links.html | 10 + plugins/home/links/links.php | 16 + plugins/home/login/about.php | 14 + plugins/home/login/login.html | 186 + plugins/home/login/login.php | 22 + plugins/home/login/style.css | 47 + plugins/home/newgroup/about.php | 14 + plugins/home/newgroup/newgroup.html | 20 + plugins/home/newgroup/newgroup.php | 13 + plugins/home/newtopic/about.php | 14 + plugins/home/newtopic/newtopic.html | 56 + plugins/home/newtopic/newtopic.php | 35 + plugins/home/newtopic/style.css | 34 + plugins/home/photo/about.php | 14 + plugins/home/photo/photo.html | 32 + plugins/home/photo/photo.php | 24 + plugins/home/photo/style.css | 5 + plugins/home/recommendarticle/about.php | 14 + plugins/home/recommendarticle/edit.php | 30 + plugins/home/recommendarticle/edit_set.html | 24 + .../recommendarticle/recommendarticle.html | 104 + .../recommendarticle/recommendarticle.php | 44 + plugins/home/recommendgroup/about.php | 13 + .../home/recommendgroup/recommendgroup.html | 28 + .../home/recommendgroup/recommendgroup.php | 12 + plugins/home/recommendgroup/style.css | 26 + plugins/home/recommendtopic/about.php | 14 + plugins/home/recommendtopic/edit.php | 30 + plugins/home/recommendtopic/edit_set.html | 24 + .../home/recommendtopic/recommendtopic.html | 86 + .../home/recommendtopic/recommendtopic.php | 47 + plugins/home/recommendtopic/style.css | 34 + plugins/home/signuser/about.php | 14 + plugins/home/signuser/signuser.html | 17 + plugins/home/signuser/signuser.php | 9 + plugins/home/slide/about.php | 14 + plugins/home/slide/edit.php | 126 + plugins/home/slide/edit_edit.html | 57 + plugins/home/slide/edit_set.html | 63 + plugins/home/slide/slide.html | 34 + plugins/home/slide/slide.php | 21 + plugins/home/tag/about.php | 14 + plugins/home/tag/edit.php | 25 + plugins/home/tag/edit_set.html | 23 + plugins/home/tag/tag.html | 30 + plugins/home/tag/tag.php | 29 + plugins/home/topic/about.php | 14 + plugins/home/topic/topic.html | 16 + plugins/home/topic/topic.php | 13 + plugins/home/weibo/about.php | 14 + plugins/home/weibo/style.css | 76 + plugins/home/weibo/weibo.html | 48 + plugins/home/weibo/weibo.js | 32 + plugins/home/weibo/weibo.php | 28 + plugins/index.php | 17 + plugins/pubs/counter/about.php | 12 + plugins/pubs/counter/counter.php | 19 + plugins/pubs/counter/edit.php | 27 + plugins/pubs/counter/edit_set.html | 19 + plugins/pubs/feedback/about.php | 1 + plugins/pubs/feedback/edit.php | 29 + plugins/pubs/feedback/edit_set.html | 19 + plugins/pubs/feedback/feed-back.png | Bin 0 -> 200 bytes plugins/pubs/feedback/feedback.php | 39 + plugins/pubs/gobad/about.php | 1 + plugins/pubs/gobad/edit.php | 29 + plugins/pubs/gobad/edit_set.html | 43 + plugins/pubs/gobad/gobad.php | 16 + plugins/pubs/gonggao/about.php | 12 + plugins/pubs/gonggao/edit.php | 30 + plugins/pubs/gonggao/edit_set.html | 1 + plugins/pubs/gonggao/gonggao.php | 16 + plugins/pubs/gotop/about.php | 1 + plugins/pubs/gotop/fruitxiao.png | Bin 0 -> 490098 bytes plugins/pubs/gotop/gotop.php | 14 + plugins/pubs/gotop/jquery.goToTop.js | 37 + plugins/pubs/gotop/side-icon02.png | Bin 0 -> 490098 bytes plugins/pubs/gotop/style.css | 4 + plugins/pubs/highlight/about.php | 1 + plugins/pubs/highlight/highlight.html | 6 + plugins/pubs/highlight/highlight.php | 8 + plugins/pubs/highlight/js/highlight.pack.js | 2 + .../highlight/js/v9.15.9_highlight.pack.js | 2 + .../highlight/skins/default/a11y-dark.css | 99 + .../highlight/skins/default/a11y-light.css | 99 + .../pubs/highlight/skins/default/agate.css | 108 + .../highlight/skins/default/an-old-hope.css | 89 + .../highlight/skins/default/androidstudio.css | 66 + .../highlight/skins/default/arduino-light.css | 88 + plugins/pubs/highlight/skins/default/arta.css | 73 + .../pubs/highlight/skins/default/ascetic.css | 45 + .../skins/default/atelier-cave-dark.css | 83 + .../skins/default/atelier-cave-light.css | 85 + .../skins/default/atelier-dune-dark.css | 69 + .../skins/default/atelier-dune-light.css | 69 + .../skins/default/atelier-estuary-dark.css | 84 + .../skins/default/atelier-estuary-light.css | 84 + .../skins/default/atelier-forest-dark.css | 69 + .../skins/default/atelier-forest-light.css | 69 + .../skins/default/atelier-heath-dark.css | 69 + .../skins/default/atelier-heath-light.css | 69 + .../skins/default/atelier-lakeside-dark.css | 69 + .../skins/default/atelier-lakeside-light.css | 69 + .../skins/default/atelier-plateau-dark.css | 84 + .../skins/default/atelier-plateau-light.css | 84 + .../skins/default/atelier-savanna-dark.css | 84 + .../skins/default/atelier-savanna-light.css | 84 + .../skins/default/atelier-seaside-dark.css | 69 + .../skins/default/atelier-seaside-light.css | 69 + .../default/atelier-sulphurpool-dark.css | 69 + .../default/atelier-sulphurpool-light.css | 69 + .../default/atom-one-dark-reasonable.css | 77 + .../highlight/skins/default/atom-one-dark.css | 96 + .../skins/default/atom-one-light.css | 96 + .../highlight/skins/default/brown-paper.css | 64 + .../highlight/skins/default/brown-papersq.png | Bin 0 -> 18198 bytes .../highlight/skins/default/codepen-embed.css | 60 + .../highlight/skins/default/color-brewer.css | 71 + .../pubs/highlight/skins/default/darcula.css | 77 + plugins/pubs/highlight/skins/default/dark.css | 63 + .../pubs/highlight/skins/default/darkula.css | 6 + .../pubs/highlight/skins/default/default.css | 99 + .../pubs/highlight/skins/default/docco.css | 97 + .../pubs/highlight/skins/default/dracula.css | 76 + plugins/pubs/highlight/skins/default/far.css | 71 + .../highlight/skins/default/foundation.css | 88 + .../highlight/skins/default/github-gist.css | 71 + .../pubs/highlight/skins/default/github.css | 99 + plugins/pubs/highlight/skins/default/gml.css | 78 + .../highlight/skins/default/googlecode.css | 89 + .../highlight/skins/default/grayscale.css | 101 + .../highlight/skins/default/gruvbox-dark.css | 108 + .../highlight/skins/default/gruvbox-light.css | 108 + .../highlight/skins/default/hopscotch.css | 83 + .../pubs/highlight/skins/default/hybrid.css | 102 + plugins/pubs/highlight/skins/default/idea.css | 97 + .../pubs/highlight/skins/default/ir-black.css | 73 + .../skins/default/isbl-editor-dark.css | 112 + .../skins/default/isbl-editor-light.css | 112 + .../highlight/skins/default/kimbie.dark.css | 74 + .../highlight/skins/default/kimbie.light.css | 74 + .../highlight/skins/default/lightfair.css | 87 + .../pubs/highlight/skins/default/magula.css | 70 + .../highlight/skins/default/mono-blue.css | 59 + .../skins/default/monokai-sublime.css | 83 + .../pubs/highlight/skins/default/monokai.css | 70 + plugins/pubs/highlight/skins/default/nord.css | 309 + .../pubs/highlight/skins/default/obsidian.css | 88 + .../pubs/highlight/skins/default/ocean.css | 74 + .../highlight/skins/default/paraiso-dark.css | 72 + .../highlight/skins/default/paraiso-light.css | 72 + .../pubs/highlight/skins/default/pojoaque.css | 83 + .../pubs/highlight/skins/default/pojoaque.jpg | Bin 0 -> 1186 bytes .../highlight/skins/default/purebasic.css | 96 + .../skins/default/qtcreator_dark.css | 83 + .../skins/default/qtcreator_light.css | 83 + .../highlight/skins/default/railscasts.css | 106 + .../pubs/highlight/skins/default/rainbow.css | 85 + .../pubs/highlight/skins/default/routeros.css | 108 + .../highlight/skins/default/school-book.css | 69 + .../highlight/skins/default/school-book.png | Bin 0 -> 486 bytes .../skins/default/shades-of-purple.css | 97 + .../skins/default/solarized-dark.css | 84 + .../skins/default/solarized-light.css | 84 + .../pubs/highlight/skins/default/sunburst.css | 102 + .../skins/default/tomorrow-night-blue.css | 75 + .../skins/default/tomorrow-night-bright.css | 74 + .../skins/default/tomorrow-night-eighties.css | 74 + .../skins/default/tomorrow-night.css | 75 + .../pubs/highlight/skins/default/tomorrow.css | 72 + plugins/pubs/highlight/skins/default/vs.css | 68 + .../pubs/highlight/skins/default/vs2015.css | 115 + .../pubs/highlight/skins/default/xcode.css | 104 + .../pubs/highlight/skins/default/xt256.css | 92 + .../pubs/highlight/skins/default/zenburn.css | 80 + plugins/pubs/morenav/about.php | 12 + plugins/pubs/morenav/edit.php | 43 + plugins/pubs/morenav/edit_set.html | 38 + plugins/pubs/morenav/morenav.html | 10 + plugins/pubs/morenav/morenav.php | 11 + plugins/pubs/navs/about.php | 12 + plugins/pubs/navs/edit.php | 43 + plugins/pubs/navs/edit_set.html | 38 + plugins/pubs/navs/navs.php | 21 + plugins/pubs/share/about.php | 1 + plugins/pubs/share/js/share.min.js | 1 + plugins/pubs/share/share.html | 2 + plugins/pubs/share/share.php | 10 + .../pubs/share/skins/default/share.min.css | 1 + plugins/pubs/share/skins/fonts/iconfont.ttf | Bin 0 -> 9296 bytes plugins/pubs/share/skins/fonts/iconfont.woff | Bin 0 -> 6364 bytes plugins/pubs/summernote/about.php | 1 + plugins/pubs/summernote/config.js | 5 + plugins/pubs/summernote/font/summernote.eot | Bin 0 -> 12072 bytes plugins/pubs/summernote/font/summernote.ttf | Bin 0 -> 11896 bytes plugins/pubs/summernote/font/summernote.woff | Bin 0 -> 7428 bytes plugins/pubs/summernote/font/summernote.woff2 | Bin 0 -> 6156 bytes .../pubs/summernote/lang/summernote-zh-CN.js | 273 + .../summernote/lang/summernote-zh-CN.min.js | 2 + .../lang/summernote-zh-CN.min.js.LICENSE.txt | 1 + plugins/pubs/summernote/load.js | 92 + plugins/pubs/summernote/load_m.js | 60 + plugins/pubs/summernote/load_mini.js | 52 + plugins/pubs/summernote/load_mt.js | 9 + plugins/pubs/summernote/plugin/attach.zip | Bin 0 -> 1320 bytes .../pubs/summernote/plugin/attach/attach.js | 118 + plugins/pubs/summernote/plugin/audio/audio.js | 118 + .../databasic/summernote-ext-databasic.css | 16 + .../databasic/summernote-ext-databasic.js | 291 + plugins/pubs/summernote/plugin/emojis/1.png | Bin 0 -> 5550 bytes plugins/pubs/summernote/plugin/emojis/2.png | Bin 0 -> 5758 bytes plugins/pubs/summernote/plugin/emojis/3.png | Bin 0 -> 6339 bytes plugins/pubs/summernote/plugin/emojis/4.png | Bin 0 -> 5235 bytes plugins/pubs/summernote/plugin/emojis/5.png | Bin 0 -> 5709 bytes plugins/pubs/summernote/plugin/emojis/6.png | Bin 0 -> 5215 bytes .../summernote-ext-specialchars.js | 311 + .../summernote/plugin/summernote-cleaner.js | 182 + .../summernote/plugin/summernote-ext-emoji.js | 143 + .../plugin/summernote-ext-highlight.js | 197 + plugins/pubs/summernote/plugin/video/video.js | 118 + plugins/pubs/summernote/summernote-lite.css | 13 + plugins/pubs/summernote/summernote-lite.js | 10782 ++++++++++++++++ .../pubs/summernote/summernote-lite.js.map | 1 + .../pubs/summernote/summernote-lite.min.css | 1 + .../pubs/summernote/summernote-lite.min.js | 3 + .../summernote-lite.min.js.LICENSE.txt | 1 + .../summernote/summernote-lite.min.js.map | 1 + plugins/pubs/summernote/summernote.php | 34 + plugins/pubs/wangeditor/about.php | 1 + plugins/pubs/wangeditor/fonts/w-e-icon.woff | Bin 0 -> 6224 bytes plugins/pubs/wangeditor/load.js | 47 + plugins/pubs/wangeditor/load_m.js | 44 + plugins/pubs/wangeditor/load_mini.js | 39 + plugins/pubs/wangeditor/load_mt.js | 7 + plugins/pubs/wangeditor/wangEditor.css | 414 + plugins/pubs/wangeditor/wangEditor.js | 4744 +++++++ plugins/pubs/wangeditor/wangeditor.php | 22 + plugins/pubs/wordad/about.php | 1 + plugins/pubs/wordad/edit.html | 38 + plugins/pubs/wordad/edit.php | 37 + plugins/pubs/wordad/wordad.php | 17 + .../bootstrap-datetimepicker.css | 418 + .../bootstrap-datetimepicker.js | 1846 +++ .../bootstrap-datetimepicker.zh-CN.js | 16 + public/bootstrap-icons/bootstrap-icons.css | 1390 ++ public/bootstrap-icons/bootstrap-icons.json | 1372 ++ .../fonts/bootstrap-icons.woff | Bin 0 -> 120468 bytes .../fonts/bootstrap-icons.woff2 | Bin 0 -> 90528 bytes public/bootstrap-icons/index.html | 5527 ++++++++ public/bootstrap/css/bootstrap-grid.css | 3899 ++++++ public/bootstrap/css/bootstrap-grid.css.map | 1 + public/bootstrap/css/bootstrap-grid.min.css | 7 + .../bootstrap/css/bootstrap-grid.min.css.map | 1 + public/bootstrap/css/bootstrap-reboot.css | 327 + public/bootstrap/css/bootstrap-reboot.css.map | 1 + public/bootstrap/css/bootstrap-reboot.min.css | 8 + .../css/bootstrap-reboot.min.css.map | 1 + public/bootstrap/css/bootstrap.css | 10224 +++++++++++++++ public/bootstrap/css/bootstrap.css.map | 1 + public/bootstrap/css/bootstrap.min.css | 7 + public/bootstrap/css/bootstrap.min.css.map | 1 + public/bootstrap/js/bootstrap.bundle.js | 7134 ++++++++++ public/bootstrap/js/bootstrap.bundle.js.map | 1 + public/bootstrap/js/bootstrap.bundle.min.js | 7 + .../bootstrap/js/bootstrap.bundle.min.js.map | 1 + public/bootstrap/js/bootstrap.js | 4521 +++++++ public/bootstrap/js/bootstrap.js.map | 1 + public/bootstrap/js/bootstrap.min.js | 7 + public/bootstrap/js/bootstrap.min.js.map | 1 + public/fontawesome/css/fontawesome-all.css | 3205 +++++ public/fontawesome/webfonts/fa-brands-400.eot | Bin 0 -> 111620 bytes public/fontawesome/webfonts/fa-brands-400.svg | 1104 ++ public/fontawesome/webfonts/fa-brands-400.ttf | Bin 0 -> 111384 bytes .../fontawesome/webfonts/fa-brands-400.woff | Bin 0 -> 71560 bytes .../fontawesome/webfonts/fa-brands-400.woff2 | Bin 0 -> 61336 bytes .../fontawesome/webfonts/fa-regular-400.eot | Bin 0 -> 31272 bytes .../fontawesome/webfonts/fa-regular-400.svg | 372 + .../fontawesome/webfonts/fa-regular-400.ttf | Bin 0 -> 31044 bytes .../fontawesome/webfonts/fa-regular-400.woff | Bin 0 -> 14724 bytes .../fontawesome/webfonts/fa-regular-400.woff2 | Bin 0 -> 12188 bytes public/fontawesome/webfonts/fa-solid-900.eot | Bin 0 -> 133140 bytes public/fontawesome/webfonts/fa-solid-900.svg | 1896 +++ public/fontawesome/webfonts/fa-solid-900.ttf | Bin 0 -> 132920 bytes public/fontawesome/webfonts/fa-solid-900.woff | Bin 0 -> 63836 bytes .../fontawesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 50372 bytes public/html/404.html | 15 + public/html/comment.html | 139 + public/html/footer.html | 49 + public/html/footer_admin.html | 2 + public/html/header.html | 148 + public/html/header_admin.html | 16 + public/html/my.html | 56 + public/html/notice.html | 20 + public/html/plugin_menu.html | 8 + public/images/app.png | Bin 0 -> 3726 bytes public/images/bigload.gif | Bin 0 -> 3897 bytes public/images/ding.png | Bin 0 -> 749 bytes public/images/event.jpg | Bin 0 -> 30744 bytes public/images/group.jpg | Bin 0 -> 28873 bytes public/images/hot.png | Bin 0 -> 2868 bytes public/images/ios.jpg | Bin 0 -> 1053 bytes public/images/loading.gif | Bin 0 -> 729 bytes public/images/loadingg.gif | Bin 0 -> 12542 bytes public/images/location.jpg | Bin 0 -> 29801 bytes public/images/logo.png | Bin 0 -> 142482 bytes public/images/new.png | Bin 0 -> 2877 bytes public/images/nopic.jpg | Bin 0 -> 14319 bytes public/images/photo.jpg | Bin 0 -> 29088 bytes public/images/posts.gif | Bin 0 -> 350 bytes public/images/redeem.png | Bin 0 -> 29813 bytes public/images/renzheng.png | Bin 0 -> 76072 bytes public/images/renzheng1.png | Bin 0 -> 17589 bytes public/images/renzheng2.png | Bin 0 -> 12721 bytes public/images/rz1.gif | Bin 0 -> 1068 bytes public/images/rz1.png | Bin 0 -> 49084 bytes public/images/rz2.gif | Bin 0 -> 1057 bytes public/images/rz2.png | Bin 0 -> 4597 bytes public/images/score.gif | Bin 0 -> 403 bytes public/images/sy-video.png | Bin 0 -> 47239 bytes public/images/sy.png | Bin 0 -> 5829 bytes public/images/thinksaas2012.png | Bin 0 -> 145716 bytes public/images/topic.gif | Bin 0 -> 373 bytes public/images/user_large.jpg | Bin 0 -> 3627 bytes public/images/video.gif | Bin 0 -> 96 bytes public/images/vote.gif | Bin 0 -> 935 bytes public/images/watermark.gif | Bin 0 -> 373 bytes public/index.php | 17 + public/js/bootstrap3-validation.js | 333 + public/js/city/city.min.js | 1 + public/js/city/jquery.cityselect.js | 144 + public/js/clipboard.js | 973 ++ public/js/common.js | 339 + public/js/dropzone/basic.css | 39 + public/js/dropzone/dropzone-amd-module.js | 3545 +++++ public/js/dropzone/dropzone.css | 388 + public/js/dropzone/dropzone.js | 3530 +++++ public/js/dropzone/readme.md | 10 + public/js/html5shiv.js | 8 + public/js/imbox/imbox.js | 53 + public/js/jeditable/jeditable.js | 969 ++ public/js/jquery-migrate.js | 524 + public/js/jquery.min.js | 4 + public/js/jquery.nestable.js | 484 + public/js/jquery.ocupload.js | 252 + public/js/jquery.upload.js | 74 + public/js/jquery.upload.v2.js | 81 + public/js/jqueryTag-it/css/jquery.tagit.css | 69 + .../js/jqueryTag-it/css/tagit.ui-zendesk.css | 98 + public/js/jqueryTag-it/js/tag-it.js | 591 + public/js/jqueryTag-it/js/tag-it.min.js | 17 + public/js/oldie.css | 498 + public/js/raty/img/cancel-off.png | Bin 0 -> 699 bytes public/js/raty/img/cancel-on.png | Bin 0 -> 715 bytes public/js/raty/img/star-half.png | Bin 0 -> 667 bytes public/js/raty/img/star-off.png | Bin 0 -> 685 bytes public/js/raty/img/star-on.png | Bin 0 -> 631 bytes public/js/raty/js/jquery.raty.min.js | 12 + public/js/raty/readme.txt | 1 + public/js/respond.min.js | 6 + public/js/xss.js | 1608 +++ robots.txt | 2 + theme/fresh/body_bg.jpg | Bin 0 -> 29615 bytes theme/fresh/preview.jpg | Bin 0 -> 8339 bytes theme/fresh/style.css | 10 + theme/gloia/love.jpg | Bin 0 -> 1028065 bytes theme/gloia/preview.jpg | Bin 0 -> 27293 bytes theme/gloia/style.css | 7 + theme/huizi/love.jpg | Bin 0 -> 855755 bytes theme/huizi/preview.jpg | Bin 0 -> 18380 bytes theme/huizi/style.css | 6 + theme/index.php | 17 + theme/paper/body_bg.jpg | Bin 0 -> 29615 bytes theme/paper/preview.jpg | Bin 0 -> 8339 bytes theme/paper/style.css | 11 + theme/sample/about.php | 7 + theme/sample/base.css | 711 + theme/sample/bg-2.jpg | Bin 0 -> 229803 bytes theme/sample/bg-body.jpg | Bin 0 -> 3719 bytes theme/sample/bg-line.gif | Bin 0 -> 1096 bytes theme/sample/bg-lined.gif | Bin 0 -> 51 bytes theme/sample/error.png | Bin 0 -> 734 bytes theme/sample/header-bg.png | Bin 0 -> 2882 bytes theme/sample/hot.gif | Bin 0 -> 377 bytes theme/sample/logo.gif | Bin 0 -> 1827 bytes theme/sample/onLoad.gif | Bin 0 -> 781 bytes theme/sample/preview.jpg | Bin 0 -> 2161 bytes theme/sample/right.png | Bin 0 -> 725 bytes theme/sample/search.png | Bin 0 -> 23366 bytes theme/sample/style.css | 0 theme/sample/trumpet.gif | Bin 0 -> 1971 bytes theme/superhero/body_bg.jpg | Bin 0 -> 29615 bytes theme/superhero/preview.jpg | Bin 0 -> 8339 bytes theme/superhero/style.css | 11 + thinksaas/Image.class.php | 227 + thinksaas/app.php | 21 + thinksaas/class.crypt.php | 127 + thinksaas/common.php | 4 + thinksaas/config.php | 95 + thinksaas/index.php | 6 + thinksaas/mysqli.php | 218 + thinksaas/pclzip.lib.php | 5694 ++++++++ thinksaas/sql/mysqli.php | 224 + thinksaas/thinksaas.php | 362 + thinksaas/tsApp.php | 302 + thinksaas/tsDbLinker.php | 210 + thinksaas/tsFileCache.php | 85 + thinksaas/tsFunction.php | 3182 +++++ thinksaas/tsMySqlCache.php | 52 + thinksaas/tsTemplate.php | 139 + thinksaas/xsshtml.class.php | 199 + upgrade/index.php | 17 + upgrade/version.php | 3 + vendor/adbario/php-dot-notation/LICENSE.md | 21 + vendor/adbario/php-dot-notation/composer.json | 29 + vendor/adbario/php-dot-notation/src/Dot.php | 601 + .../adbario/php-dot-notation/src/helpers.php | 23 + vendor/alibabacloud/client/CHANGELOG.md | 300 + vendor/alibabacloud/client/CONTRIBUTING.md | 30 + vendor/alibabacloud/client/LICENSE.md | 13 + vendor/alibabacloud/client/NOTICE.md | 88 + vendor/alibabacloud/client/README-zh-CN.md | 166 + vendor/alibabacloud/client/README.md | 167 + vendor/alibabacloud/client/UPGRADING.md | 6 + vendor/alibabacloud/client/composer.json | 116 + vendor/alibabacloud/client/src/Accept.php | 53 + .../alibabacloud/client/src/AlibabaCloud.php | 62 + .../client/src/Clients/AccessKeyClient.php | 30 + .../client/src/Clients/BearerTokenClient.php | 29 + .../client/src/Clients/Client.php | 72 + .../client/src/Clients/EcsRamRoleClient.php | 26 + .../client/src/Clients/ManageTrait.php | 98 + .../client/src/Clients/RamRoleArnClient.php | 33 + .../client/src/Clients/RsaKeyPairClient.php | 30 + .../client/src/Clients/StsClient.php | 28 + .../alibabacloud/client/src/Config/Config.php | 62 + .../alibabacloud/client/src/Config/Data.php | 3800 ++++++ .../src/Credentials/AccessKeyCredential.php | 65 + .../src/Credentials/BearerTokenCredential.php | 66 + .../src/Credentials/CredentialsInterface.php | 18 + .../src/Credentials/EcsRamRoleCredential.php | 50 + .../src/Credentials/Ini/CreateTrait.php | 181 + .../src/Credentials/Ini/IniCredential.php | 209 + .../src/Credentials/Ini/OptionsTrait.php | 111 + .../Providers/CredentialsProvider.php | 170 + .../Providers/EcsRamRoleProvider.php | 128 + .../src/Credentials/Providers/Provider.php | 88 + .../Providers/RamRoleArnProvider.php | 84 + .../Providers/RsaKeyPairProvider.php | 86 + .../src/Credentials/RamRoleArnCredential.php | 110 + .../src/Credentials/Requests/AssumeRole.php | 47 + .../Requests/GenerateSessionAccessKey.php | 37 + .../src/Credentials/RsaKeyPairCredential.php | 75 + .../client/src/Credentials/StsCredential.php | 80 + .../client/src/DefaultAcsClient.php | 55 + vendor/alibabacloud/client/src/Encode.php | 68 + .../src/Exception/AlibabaCloudException.php | 70 + .../client/src/Exception/ClientException.php | 38 + .../client/src/Exception/ServerException.php | 158 + .../client/src/Filter/ApiFilter.php | 259 + .../client/src/Filter/ClientFilter.php | 146 + .../client/src/Filter/CredentialFilter.php | 152 + .../alibabacloud/client/src/Filter/Filter.php | 67 + .../client/src/Filter/HttpFilter.php | 166 + vendor/alibabacloud/client/src/Functions.php | 289 + .../client/src/Log/LogFormatter.php | 79 + .../client/src/Profile/DefaultProfile.php | 74 + .../client/src/Regions/EndpointProvider.php | 18 + .../client/src/Regions/LocationService.php | 160 + .../src/Regions/LocationServiceRequest.php | 46 + vendor/alibabacloud/client/src/Release.php | 112 + .../client/src/Request/Request.php | 445 + .../client/src/Request/RoaRequest.php | 335 + .../client/src/Request/RpcRequest.php | 203 + .../client/src/Request/Traits/AcsTrait.php | 259 + .../client/src/Request/Traits/ClientTrait.php | 98 + .../src/Request/Traits/DeprecatedRoaTrait.php | 55 + .../src/Request/Traits/DeprecatedTrait.php | 246 + .../client/src/Request/Traits/RetryTrait.php | 149 + .../client/src/Request/UserAgent.php | 142 + .../src/Resolver/ActionResolverTrait.php | 50 + .../client/src/Resolver/ApiResolver.php | 113 + .../client/src/Resolver/CallTrait.php | 67 + .../alibabacloud/client/src/Resolver/Roa.php | 43 + .../alibabacloud/client/src/Resolver/Rpc.php | 41 + .../client/src/Resolver/VersionResolver.php | 74 + .../alibabacloud/client/src/Result/Result.php | 151 + vendor/alibabacloud/client/src/SDK.php | 57 + .../src/Signature/BearerTokenSignature.php | 47 + .../src/Signature/ShaHmac1Signature.php | 47 + .../src/Signature/ShaHmac256Signature.php | 47 + .../Signature/ShaHmac256WithRsaSignature.php | 67 + .../client/src/Signature/Signature.php | 49 + .../src/Signature/SignatureInterface.php | 35 + .../client/src/Support/Arrays.php | 41 + .../alibabacloud/client/src/Support/Path.php | 28 + .../alibabacloud/client/src/Support/Sign.php | 143 + .../client/src/Traits/ArrayAccessTrait.php | 57 + .../client/src/Traits/ClientTrait.php | 273 + .../client/src/Traits/DefaultRegionTrait.php | 66 + .../client/src/Traits/EndpointTrait.php | 134 + .../client/src/Traits/HasDataTrait.php | 317 + .../client/src/Traits/HistoryTrait.php | 68 + .../client/src/Traits/HttpTrait.php | 141 + .../client/src/Traits/LogTrait.php | 97 + .../client/src/Traits/MockTrait.php | 97 + .../client/src/Traits/ObjectAccessTrait.php | 54 + .../client/src/Traits/RegionTrait.php | 33 + .../client/src/Traits/RequestTrait.php | 90 + vendor/aliyuncs/oss-sdk-php/.coveralls.yml | 2 + vendor/aliyuncs/oss-sdk-php/.gitignore | 8 + vendor/aliyuncs/oss-sdk-php/.travis.yml | 21 + vendor/aliyuncs/oss-sdk-php/CHANGELOG.md | 123 + vendor/aliyuncs/oss-sdk-php/LICENSE.md | 21 + vendor/aliyuncs/oss-sdk-php/README-CN.md | 149 + vendor/aliyuncs/oss-sdk-php/README.md | 150 + vendor/aliyuncs/oss-sdk-php/autoload.php | 11 + vendor/aliyuncs/oss-sdk-php/build-phar.sh | 13 + vendor/aliyuncs/oss-sdk-php/composer.json | 24 + vendor/aliyuncs/oss-sdk-php/example.jpg | Bin 0 -> 21839 bytes vendor/aliyuncs/oss-sdk-php/index.php | 3 + vendor/aliyuncs/oss-sdk-php/phpunit.xml | 19 + .../aliyuncs/oss-sdk-php/samples/Bucket.php | 168 + .../oss-sdk-php/samples/BucketCors.php | 108 + .../oss-sdk-php/samples/BucketLifecycle.php | 109 + .../oss-sdk-php/samples/BucketLogging.php | 95 + .../oss-sdk-php/samples/BucketReferer.php | 101 + .../oss-sdk-php/samples/BucketWebsite.php | 92 + .../aliyuncs/oss-sdk-php/samples/Callback.php | 83 + .../aliyuncs/oss-sdk-php/samples/Common.php | 84 + .../aliyuncs/oss-sdk-php/samples/Config.php | 15 + vendor/aliyuncs/oss-sdk-php/samples/Image.php | 87 + .../oss-sdk-php/samples/LiveChannel.php | 131 + .../oss-sdk-php/samples/MultipartUpload.php | 182 + .../aliyuncs/oss-sdk-php/samples/Object.php | 518 + .../aliyuncs/oss-sdk-php/samples/RunAll.php | 13 + .../oss-sdk-php/samples/Signature.php | 142 + .../oss-sdk-php/src/OSS/Core/MimeTypes.php | 263 + .../oss-sdk-php/src/OSS/Core/OssException.php | 54 + .../oss-sdk-php/src/OSS/Core/OssUtil.php | 529 + .../aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE | 25 + .../oss-sdk-php/src/OSS/Http/RequestCore.php | 897 ++ .../src/OSS/Http/RequestCore_Exception.php | 8 + .../oss-sdk-php/src/OSS/Http/ResponseCore.php | 56 + .../oss-sdk-php/src/OSS/Model/BucketInfo.php | 181 + .../src/OSS/Model/BucketListInfo.php | 39 + .../oss-sdk-php/src/OSS/Model/BucketStat.php | 85 + .../oss-sdk-php/src/OSS/Model/CnameConfig.php | 99 + .../oss-sdk-php/src/OSS/Model/CorsConfig.php | 113 + .../oss-sdk-php/src/OSS/Model/CorsRule.php | 150 + .../src/OSS/Model/DeleteMarkerInfo.php | 65 + .../src/OSS/Model/DeleteObjectInfo.php | 41 + .../src/OSS/Model/DeletedObjectInfo.php | 63 + .../src/OSS/Model/ExtendWormConfig.php | 64 + .../src/OSS/Model/GetLiveChannelHistory.php | 37 + .../src/OSS/Model/GetLiveChannelInfo.php | 68 + .../src/OSS/Model/GetLiveChannelStatus.php | 107 + .../src/OSS/Model/InitiateWormConfig.php | 64 + .../src/OSS/Model/LifecycleAction.php | 88 + .../src/OSS/Model/LifecycleConfig.php | 107 + .../src/OSS/Model/LifecycleRule.php | 126 + .../src/OSS/Model/ListMultipartUploadInfo.php | 134 + .../src/OSS/Model/ListPartsInfo.php | 97 + .../src/OSS/Model/LiveChannelConfig.php | 121 + .../src/OSS/Model/LiveChannelHistory.php | 59 + .../src/OSS/Model/LiveChannelInfo.php | 107 + .../src/OSS/Model/LiveChannelListInfo.php | 107 + .../src/OSS/Model/LoggingConfig.php | 86 + .../oss-sdk-php/src/OSS/Model/ObjectInfo.php | 93 + .../src/OSS/Model/ObjectListInfo.php | 126 + .../src/OSS/Model/ObjectVersionInfo.php | 114 + .../src/OSS/Model/ObjectVersionListInfo.php | 162 + .../oss-sdk-php/src/OSS/Model/PartInfo.php | 63 + .../oss-sdk-php/src/OSS/Model/PrefixInfo.php | 36 + .../src/OSS/Model/RefererConfig.php | 93 + .../src/OSS/Model/RequestPaymentConfig.php | 68 + .../src/OSS/Model/RestoreConfig.php | 77 + .../OSS/Model/ServerSideEncryptionConfig.php | 91 + .../src/OSS/Model/StorageCapacityConfig.php | 76 + .../oss-sdk-php/src/OSS/Model/Tag.php | 41 + .../src/OSS/Model/TaggingConfig.php | 89 + .../oss-sdk-php/src/OSS/Model/UploadInfo.php | 55 + .../src/OSS/Model/VersioningConfig.php | 67 + .../src/OSS/Model/WebsiteConfig.php | 76 + .../oss-sdk-php/src/OSS/Model/WormConfig.php | 90 + .../oss-sdk-php/src/OSS/Model/XmlConfig.php | 27 + .../oss-sdk-php/src/OSS/OssClient.php | 3529 +++++ .../oss-sdk-php/src/OSS/Result/AclResult.php | 31 + .../src/OSS/Result/AppendResult.php | 27 + .../oss-sdk-php/src/OSS/Result/BodyResult.php | 19 + .../src/OSS/Result/CallbackResult.php | 21 + .../src/OSS/Result/CopyObjectResult.php | 30 + .../OSS/Result/DeleteObjectVersionsResult.php | 39 + .../src/OSS/Result/DeleteObjectsResult.php | 27 + .../src/OSS/Result/ExistResult.php | 34 + .../OSS/Result/GetBucketEncryptionResult.php | 26 + .../src/OSS/Result/GetBucketInfoResult.php | 37 + .../Result/GetBucketRequestPaymentResult.php | 26 + .../src/OSS/Result/GetBucketStatResult.php | 26 + .../src/OSS/Result/GetBucketTagsResult.php | 26 + .../OSS/Result/GetBucketVersioningResult.php | 26 + .../src/OSS/Result/GetBucketWormResult.php | 26 + .../src/OSS/Result/GetCnameResult.php | 19 + .../src/OSS/Result/GetCorsResult.php | 34 + .../src/OSS/Result/GetLifecycleResult.php | 41 + .../Result/GetLiveChannelHistoryResult.php | 19 + .../OSS/Result/GetLiveChannelInfoResult.php | 19 + .../OSS/Result/GetLiveChannelStatusResult.php | 19 + .../src/OSS/Result/GetLocationResult.php | 30 + .../src/OSS/Result/GetLoggingResult.php | 41 + .../src/OSS/Result/GetRefererResult.php | 41 + .../OSS/Result/GetStorageCapacityResult.php | 34 + .../src/OSS/Result/GetWebsiteResult.php | 40 + .../src/OSS/Result/HeaderResult.php | 23 + .../OSS/Result/InitiateBucketWormResult.php | 27 + .../Result/InitiateMultipartUploadResult.php | 29 + .../src/OSS/Result/ListBucketsResult.php | 32 + .../src/OSS/Result/ListLiveChannelResult.php | 16 + .../OSS/Result/ListMultipartUploadResult.php | 55 + .../OSS/Result/ListObjectVersionsResult.php | 96 + .../src/OSS/Result/ListObjectsResult.php | 71 + .../src/OSS/Result/ListPartsResult.php | 42 + .../src/OSS/Result/PutLiveChannelResult.php | 16 + .../src/OSS/Result/PutSetDeleteResult.php | 20 + .../oss-sdk-php/src/OSS/Result/Result.php | 175 + .../src/OSS/Result/SymlinkResult.php | 24 + .../src/OSS/Result/UploadPartResult.php | 28 + .../tests/OSS/Tests/AclResultTest.php | 59 + .../tests/OSS/Tests/BodyResultTest.php | 26 + .../tests/OSS/Tests/BucketCnameTest.php | 77 + .../tests/OSS/Tests/BucketInfoTest.php | 21 + .../tests/OSS/Tests/BucketLiveChannelTest.php | 316 + .../tests/OSS/Tests/CallbackTest.php | 296 + .../tests/OSS/Tests/CnameConfigTest.php | 77 + .../oss-sdk-php/tests/OSS/Tests/Common.php | 80 + .../tests/OSS/Tests/ContentTypeTest.php | 133 + .../tests/OSS/Tests/CopyObjectResult.php | 52 + .../tests/OSS/Tests/CorsConfigTest.php | 140 + .../Tests/DeleteObjectVersionsResultTest.php | 187 + .../tests/OSS/Tests/ExistResultTest.php | 38 + .../Tests/GetBucketEncryptionResultTest.php | 95 + .../GetBucketRequestPaymentResultTest.php | 66 + .../OSS/Tests/GetBucketStatResultTest.php | 59 + .../OSS/Tests/GetBucketTagsResultTest.php | 77 + .../OSS/Tests/GetBucketWormResultTest.php | 84 + .../tests/OSS/Tests/GetCorsResultTest.php | 67 + .../OSS/Tests/GetLifecycleResultTest.php | 59 + .../tests/OSS/Tests/GetLoggingResultTest.php | 51 + .../tests/OSS/Tests/GetRefererResultTest.php | 51 + .../tests/OSS/Tests/GetWebsiteResultTest.php | 50 + .../tests/OSS/Tests/HeaderResultTest.php | 23 + .../oss-sdk-php/tests/OSS/Tests/HttpTest.php | 77 + .../InitiateMultipartUploadResultTest.php | 47 + .../tests/OSS/Tests/LifecycleConfigTest.php | 130 + .../tests/OSS/Tests/ListBucketsResultTest.php | 167 + .../Tests/ListMultipartUploadResultTest.php | 114 + .../Tests/ListObjectVersionsResultTest.php | 213 + .../tests/OSS/Tests/ListObjectsResultTest.php | 151 + .../tests/OSS/Tests/ListPartsResultTest.php | 62 + .../tests/OSS/Tests/LiveChannelXmlTest.php | 277 + .../tests/OSS/Tests/LoggingConfigTest.php | 47 + .../tests/OSS/Tests/MimeTypesTest.php | 13 + .../tests/OSS/Tests/ObjectAclTest.php | 28 + .../OSS/Tests/OssClientBucketCorsTest.php | 84 + .../Tests/OssClientBucketEncryptionTest.php | 63 + .../OSS/Tests/OssClientBucketInfoTest.php | 20 + .../Tests/OssClientBucketLifecycleTest.php | 57 + .../OSS/Tests/OssClientBucketLoggingTest.php | 43 + .../OSS/Tests/OssClientBucketPolicyTest.php | 47 + .../OSS/Tests/OssClientBucketRefererTest.php | 48 + .../OssClientBucketRequestPaymentTest.php | 51 + .../OSS/Tests/OssClientBucketStatTestTest.php | 34 + .../OssClientBucketStorageCapacityTest.php | 56 + .../OSS/Tests/OssClientBucketTagsTest.php | 76 + .../tests/OSS/Tests/OssClientBucketTest.php | 140 + .../Tests/OssClientBucketVersioningTest.php | 40 + .../OSS/Tests/OssClientBucketWebsiteTest.php | 46 + .../OSS/Tests/OssClientBucketWormTest.php | 36 + .../tests/OSS/Tests/OssClientImageTest.php | 147 + .../OSS/Tests/OssClientListObjectsTest.php | 184 + .../Tests/OssClientMultipartUploadTest.php | 423 + .../OssClientObjectRequestPaymentTest.php | 471 + .../OSS/Tests/OssClientObjectTaggingTest.php | 160 + .../tests/OSS/Tests/OssClientObjectTest.php | 672 + .../Tests/OssClientObjectVersioningTest.php | 610 + .../OSS/Tests/OssClientRestoreObjectTest.php | 174 + .../OSS/Tests/OssClientSignatureTest.php | 167 + .../tests/OSS/Tests/OssClientTest.php | 341 + .../tests/OSS/Tests/OssExceptionTest.php | 19 + .../tests/OSS/Tests/OssTrafficLimitTest.php | 96 + .../tests/OSS/Tests/OssUtilTest.php | 300 + .../OSS/Tests/PutSetDeleteResultTest.php | 66 + .../tests/OSS/Tests/RefererConfigTest.php | 54 + .../OSS/Tests/StorageCapacityConfigTest.php | 58 + .../tests/OSS/Tests/StorageCapacityTest.php | 59 + .../tests/OSS/Tests/SymlinkTest.php | 77 + .../tests/OSS/Tests/TestOssClientBase.php | 51 + .../tests/OSS/Tests/UploadPartResultTest.php | 33 + .../tests/OSS/Tests/WebsiteConfigTest.php | 56 + vendor/autoload.php | 7 + vendor/bin/jp.php | 14 + vendor/bin/jp.php.bat | 4 + .../.github/workflows/php.yml | 27 + .../weblibs-configmanager/.gitignore | 2 + .../weblibs-configmanager/.travis.yml | 17 + .../weblibs-configmanager/README.md | 130 + .../weblibs-configmanager/composer.json | 36 + .../weblibs-configmanager/composer.lock | 1235 ++ .../weblibs-configmanager/phpunit.xml | 19 + .../src/ConfigManager.php | 161 + .../tests/ConfigManagerTest.php | 113 + .../testsdata/sample_config_data.php | 23 + vendor/composer/ClassLoader.php | 572 + vendor/composer/InstalledVersions.php | 350 + vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 14 + vendor/composer/autoload_files.php | 22 + vendor/composer/autoload_namespaces.php | 10 + vendor/composer/autoload_psr4.php | 42 + vendor/composer/autoload_real.php | 80 + vendor/composer/autoload_static.php | 257 + vendor/composer/installed.json | 2701 ++++ vendor/composer/installed.php | 395 + vendor/composer/platform_check.php | 26 + vendor/danielstjules/stringy/CHANGELOG.md | 180 + vendor/danielstjules/stringy/LICENSE.txt | 19 + vendor/danielstjules/stringy/README.md | 1082 ++ vendor/danielstjules/stringy/composer.json | 35 + vendor/danielstjules/stringy/src/Create.php | 19 + .../stringy/src/StaticStringy.php | 161 + vendor/danielstjules/stringy/src/Stringy.php | 1986 +++ .../easywechat-composer/.gitignore | 5 + .../easywechat-composer/.php_cs | 29 + .../easywechat-composer/.travis.yml | 12 + .../easywechat-composer/LICENSE | 21 + .../easywechat-composer/README.md | 55 + .../easywechat-composer/composer.json | 35 + .../easywechat-composer/phpunit.xml | 20 + .../src/Commands/ExtensionsCommand.php | 63 + .../src/Commands/Provider.php | 31 + .../src/Contracts/Encrypter.php | 35 + .../src/Delegation/DelegationOptions.php | 80 + .../src/Delegation/DelegationTo.php | 83 + .../src/Delegation/Hydrate.php | 83 + .../easywechat-composer/src/EasyWeChat.php | 79 + .../src/Encryption/DefaultEncrypter.php | 89 + .../src/Exceptions/DecryptException.php | 21 + .../src/Exceptions/DelegationException.php | 42 + .../src/Exceptions/EncryptException.php | 21 + .../easywechat-composer/src/Extension.php | 143 + .../src/Http/DelegationResponse.php | 25 + .../easywechat-composer/src/Http/Response.php | 104 + .../Http/Controllers/DelegatesController.php | 49 + .../src/Laravel/ServiceProvider.php | 116 + .../src/Laravel/config.php | 29 + .../src/Laravel/routes.php | 16 + .../src/ManifestManager.php | 125 + .../easywechat-composer/src/Plugin.php | 107 + .../src/Traits/MakesHttpRequests.php | 110 + .../src/Traits/WithAggregator.php | 60 + .../tests/ManifestManagerTest.php | 37 + vendor/guzzlehttp/guzzle/CHANGELOG.md | 1450 +++ vendor/guzzlehttp/guzzle/LICENSE | 19 + vendor/guzzlehttp/guzzle/README.md | 79 + vendor/guzzlehttp/guzzle/UPGRADING.md | 1253 ++ vendor/guzzlehttp/guzzle/composer.json | 72 + .../guzzlehttp/guzzle/src/BodySummarizer.php | 28 + .../guzzle/src/BodySummarizerInterface.php | 13 + vendor/guzzlehttp/guzzle/src/Client.php | 474 + .../guzzlehttp/guzzle/src/ClientInterface.php | 84 + vendor/guzzlehttp/guzzle/src/ClientTrait.php | 241 + .../guzzle/src/Cookie/CookieJar.php | 313 + .../guzzle/src/Cookie/CookieJarInterface.php | 79 + .../guzzle/src/Cookie/FileCookieJar.php | 101 + .../guzzle/src/Cookie/SessionCookieJar.php | 77 + .../guzzle/src/Cookie/SetCookie.php | 410 + .../src/Exception/BadResponseException.php | 39 + .../guzzle/src/Exception/ClientException.php | 10 + .../guzzle/src/Exception/ConnectException.php | 56 + .../guzzle/src/Exception/GuzzleException.php | 9 + .../Exception/InvalidArgumentException.php | 7 + .../guzzle/src/Exception/RequestException.php | 166 + .../guzzle/src/Exception/ServerException.php | 10 + .../Exception/TooManyRedirectsException.php | 7 + .../src/Exception/TransferException.php | 7 + .../guzzle/src/Handler/CurlFactory.php | 586 + .../src/Handler/CurlFactoryInterface.php | 25 + .../guzzle/src/Handler/CurlHandler.php | 49 + .../guzzle/src/Handler/CurlMultiHandler.php | 253 + .../guzzle/src/Handler/EasyHandle.php | 118 + .../guzzle/src/Handler/MockHandler.php | 211 + .../guzzlehttp/guzzle/src/Handler/Proxy.php | 51 + .../guzzle/src/Handler/StreamHandler.php | 527 + vendor/guzzlehttp/guzzle/src/HandlerStack.php | 271 + .../guzzle/src/MessageFormatter.php | 198 + .../guzzle/src/MessageFormatterInterface.php | 18 + vendor/guzzlehttp/guzzle/src/Middleware.php | 260 + vendor/guzzlehttp/guzzle/src/Pool.php | 125 + .../guzzle/src/PrepareBodyMiddleware.php | 104 + .../guzzle/src/RedirectMiddleware.php | 216 + .../guzzlehttp/guzzle/src/RequestOptions.php | 264 + .../guzzlehttp/guzzle/src/RetryMiddleware.php | 116 + .../guzzlehttp/guzzle/src/TransferStats.php | 133 + vendor/guzzlehttp/guzzle/src/Utils.php | 387 + vendor/guzzlehttp/guzzle/src/functions.php | 167 + .../guzzle/src/functions_include.php | 6 + vendor/guzzlehttp/promises/.php_cs.dist | 88 + vendor/guzzlehttp/promises/CHANGELOG.md | 81 + vendor/guzzlehttp/promises/LICENSE | 19 + vendor/guzzlehttp/promises/Makefile | 13 + vendor/guzzlehttp/promises/README.md | 532 + vendor/guzzlehttp/promises/composer.json | 39 + .../guzzlehttp/promises/phpstan-baseline.neon | 7 + vendor/guzzlehttp/promises/phpstan.neon.dist | 10 + vendor/guzzlehttp/promises/psalm.xml | 15 + .../promises/src/AggregateException.php | 17 + .../promises/src/CancellationException.php | 10 + vendor/guzzlehttp/promises/src/Coroutine.php | 169 + vendor/guzzlehttp/promises/src/Create.php | 84 + vendor/guzzlehttp/promises/src/Each.php | 90 + .../guzzlehttp/promises/src/EachPromise.php | 253 + .../promises/src/FulfilledPromise.php | 84 + vendor/guzzlehttp/promises/src/Is.php | 46 + vendor/guzzlehttp/promises/src/Promise.php | 278 + .../promises/src/PromiseInterface.php | 97 + .../promises/src/PromisorInterface.php | 16 + .../promises/src/RejectedPromise.php | 91 + .../promises/src/RejectionException.php | 48 + vendor/guzzlehttp/promises/src/TaskQueue.php | 67 + .../promises/src/TaskQueueInterface.php | 24 + vendor/guzzlehttp/promises/src/Utils.php | 274 + vendor/guzzlehttp/promises/src/functions.php | 363 + .../promises/src/functions_include.php | 6 + vendor/guzzlehttp/psr7/CHANGELOG.md | 270 + vendor/guzzlehttp/psr7/LICENSE | 19 + vendor/guzzlehttp/psr7/README.md | 809 ++ vendor/guzzlehttp/psr7/composer.json | 49 + vendor/guzzlehttp/psr7/src/AppendStream.php | 244 + vendor/guzzlehttp/psr7/src/BufferStream.php | 140 + vendor/guzzlehttp/psr7/src/CachingStream.php | 139 + vendor/guzzlehttp/psr7/src/DroppingStream.php | 43 + vendor/guzzlehttp/psr7/src/FnStream.php | 160 + vendor/guzzlehttp/psr7/src/Header.php | 71 + vendor/guzzlehttp/psr7/src/InflateStream.php | 53 + vendor/guzzlehttp/psr7/src/LazyOpenStream.php | 40 + vendor/guzzlehttp/psr7/src/LimitStream.php | 156 + vendor/guzzlehttp/psr7/src/Message.php | 252 + vendor/guzzlehttp/psr7/src/MessageTrait.php | 214 + vendor/guzzlehttp/psr7/src/MimeType.php | 140 + .../guzzlehttp/psr7/src/MultipartStream.php | 154 + vendor/guzzlehttp/psr7/src/NoSeekStream.php | 23 + vendor/guzzlehttp/psr7/src/PumpStream.php | 168 + vendor/guzzlehttp/psr7/src/Query.php | 108 + vendor/guzzlehttp/psr7/src/Request.php | 152 + vendor/guzzlehttp/psr7/src/Response.php | 155 + vendor/guzzlehttp/psr7/src/Rfc7230.php | 18 + vendor/guzzlehttp/psr7/src/ServerRequest.php | 378 + vendor/guzzlehttp/psr7/src/Stream.php | 270 + .../psr7/src/StreamDecoratorTrait.php | 151 + vendor/guzzlehttp/psr7/src/StreamWrapper.php | 163 + vendor/guzzlehttp/psr7/src/UploadedFile.php | 325 + vendor/guzzlehttp/psr7/src/Uri.php | 761 ++ vendor/guzzlehttp/psr7/src/UriNormalizer.php | 217 + vendor/guzzlehttp/psr7/src/UriResolver.php | 220 + vendor/guzzlehttp/psr7/src/Utils.php | 398 + vendor/guzzlehttp/psr7/src/functions.php | 417 + .../guzzlehttp/psr7/src/functions_include.php | 6 + vendor/intervention/image/LICENSE | 9 + vendor/intervention/image/composer.json | 47 + vendor/intervention/image/provides.json | 11 + .../src/Intervention/Image/AbstractColor.php | 229 + .../Intervention/Image/AbstractDecoder.php | 359 + .../src/Intervention/Image/AbstractDriver.php | 136 + .../Intervention/Image/AbstractEncoder.php | 244 + .../src/Intervention/Image/AbstractFont.php | 267 + .../src/Intervention/Image/AbstractShape.php | 71 + .../Image/Commands/AbstractCommand.php | 81 + .../Intervention/Image/Commands/Argument.php | 225 + .../Image/Commands/ChecksumCommand.php | 29 + .../Image/Commands/CircleCommand.php | 35 + .../Image/Commands/EllipseCommand.php | 36 + .../Image/Commands/ExifCommand.php | 51 + .../Image/Commands/IptcCommand.php | 66 + .../Image/Commands/LineCommand.php | 36 + .../Image/Commands/OrientateCommand.php | 48 + .../Image/Commands/PolygonCommand.php | 49 + .../Image/Commands/PsrResponseCommand.php | 45 + .../Image/Commands/RectangleCommand.php | 36 + .../Image/Commands/ResponseCommand.php | 26 + .../Image/Commands/StreamCommand.php | 25 + .../Image/Commands/TextCommand.php | 34 + .../src/Intervention/Image/Constraint.php | 92 + .../Image/Exception/ImageException.php | 8 + .../Exception/InvalidArgumentException.php | 8 + .../Exception/MissingDependencyException.php | 8 + .../Image/Exception/NotFoundException.php | 8 + .../Image/Exception/NotReadableException.php | 8 + .../Image/Exception/NotSupportedException.php | 8 + .../Image/Exception/NotWritableException.php | 8 + .../Image/Exception/RuntimeException.php | 8 + .../src/Intervention/Image/Facades/Image.php | 19 + .../image/src/Intervention/Image/File.php | 92 + .../Intervention/Image/Filters/DemoFilter.php | 44 + .../Image/Filters/FilterInterface.php | 16 + .../image/src/Intervention/Image/Gd/Color.php | 227 + .../Image/Gd/Commands/BackupCommand.php | 25 + .../Image/Gd/Commands/BlurCommand.php | 25 + .../Image/Gd/Commands/BrightnessCommand.php | 21 + .../Image/Gd/Commands/ColorizeCommand.php | 29 + .../Image/Gd/Commands/ContrastCommand.php | 21 + .../Image/Gd/Commands/CropCommand.php | 40 + .../Image/Gd/Commands/DestroyCommand.php | 27 + .../Image/Gd/Commands/FillCommand.php | 69 + .../Image/Gd/Commands/FitCommand.php | 32 + .../Image/Gd/Commands/FlipCommand.php | 37 + .../Image/Gd/Commands/GammaCommand.php | 21 + .../Image/Gd/Commands/GetSizeCommand.php | 25 + .../Image/Gd/Commands/GreyscaleCommand.php | 19 + .../Image/Gd/Commands/HeightenCommand.php | 28 + .../Image/Gd/Commands/InsertCommand.php | 34 + .../Image/Gd/Commands/InterlaceCommand.php | 23 + .../Image/Gd/Commands/InvertCommand.php | 19 + .../Image/Gd/Commands/LimitColorsCommand.php | 53 + .../Image/Gd/Commands/MaskCommand.php | 83 + .../Image/Gd/Commands/OpacityCommand.php | 31 + .../Image/Gd/Commands/PickColorCommand.php | 37 + .../Image/Gd/Commands/PixelCommand.php | 25 + .../Image/Gd/Commands/PixelateCommand.php | 21 + .../Image/Gd/Commands/ResetCommand.php | 38 + .../Image/Gd/Commands/ResizeCanvasCommand.php | 83 + .../Image/Gd/Commands/ResizeCommand.php | 84 + .../Image/Gd/Commands/RotateCommand.php | 30 + .../Image/Gd/Commands/SharpenCommand.php | 34 + .../Image/Gd/Commands/TrimCommand.php | 176 + .../Image/Gd/Commands/WidenCommand.php | 28 + .../src/Intervention/Image/Gd/Decoder.php | 155 + .../src/Intervention/Image/Gd/Driver.php | 89 + .../src/Intervention/Image/Gd/Encoder.php | 124 + .../image/src/Intervention/Image/Gd/Font.php | 256 + .../Image/Gd/Shapes/CircleShape.php | 40 + .../Image/Gd/Shapes/EllipseShape.php | 65 + .../Image/Gd/Shapes/LineShape.php | 90 + .../Image/Gd/Shapes/PolygonShape.php | 49 + .../Image/Gd/Shapes/RectangleShape.php | 76 + .../image/src/Intervention/Image/Image.php | 370 + .../src/Intervention/Image/ImageManager.php | 142 + .../Intervention/Image/ImageManagerStatic.php | 88 + .../Image/ImageServiceProvider.php | 87 + .../Image/ImageServiceProviderLaravel4.php | 112 + .../ImageServiceProviderLaravelRecent.php | 106 + .../Image/ImageServiceProviderLeague.php | 42 + .../Image/ImageServiceProviderLumen.php | 34 + .../src/Intervention/Image/Imagick/Color.php | 279 + .../Image/Imagick/Commands/BackupCommand.php | 25 + .../Image/Imagick/Commands/BlurCommand.php | 21 + .../Imagick/Commands/BrightnessCommand.php | 21 + .../Imagick/Commands/ColorizeCommand.php | 44 + .../Imagick/Commands/ContrastCommand.php | 21 + .../Image/Imagick/Commands/CropCommand.php | 45 + .../Image/Imagick/Commands/DestroyCommand.php | 27 + .../Image/Imagick/Commands/ExifCommand.php | 63 + .../Image/Imagick/Commands/FillCommand.php | 105 + .../Image/Imagick/Commands/FitCommand.php | 42 + .../Image/Imagick/Commands/FlipCommand.php | 27 + .../Image/Imagick/Commands/GammaCommand.php | 21 + .../Image/Imagick/Commands/GetSizeCommand.php | 28 + .../Imagick/Commands/GreyscaleCommand.php | 19 + .../Imagick/Commands/HeightenCommand.php | 28 + .../Image/Imagick/Commands/InsertCommand.php | 33 + .../Imagick/Commands/InterlaceCommand.php | 29 + .../Image/Imagick/Commands/InvertCommand.php | 19 + .../Imagick/Commands/LimitColorsCommand.php | 59 + .../Image/Imagick/Commands/MaskCommand.php | 60 + .../Image/Imagick/Commands/OpacityCommand.php | 23 + .../Imagick/Commands/PickColorCommand.php | 30 + .../Image/Imagick/Commands/PixelCommand.php | 31 + .../Imagick/Commands/PixelateCommand.php | 27 + .../Image/Imagick/Commands/ResetCommand.php | 40 + .../Imagick/Commands/ResizeCanvasCommand.php | 91 + .../Image/Imagick/Commands/ResizeCommand.php | 29 + .../Image/Imagick/Commands/RotateCommand.php | 30 + .../Image/Imagick/Commands/SharpenCommand.php | 21 + .../Image/Imagick/Commands/TrimCommand.php | 121 + .../Image/Imagick/Commands/WidenCommand.php | 28 + .../Intervention/Image/Imagick/Decoder.php | 124 + .../src/Intervention/Image/Imagick/Driver.php | 74 + .../Intervention/Image/Imagick/Encoder.php | 173 + .../src/Intervention/Image/Imagick/Font.php | 121 + .../Image/Imagick/Shapes/CircleShape.php | 40 + .../Image/Imagick/Shapes/EllipseShape.php | 66 + .../Image/Imagick/Shapes/LineShape.php | 94 + .../Image/Imagick/Shapes/PolygonShape.php | 81 + .../Image/Imagick/Shapes/RectangleShape.php | 84 + .../image/src/Intervention/Image/Point.php | 64 + .../image/src/Intervention/Image/Response.php | 78 + .../image/src/Intervention/Image/Size.php | 374 + .../intervention/image/src/config/config.php | 20 + vendor/monolog/monolog/CHANGELOG.md | 522 + vendor/monolog/monolog/LICENSE | 19 + vendor/monolog/monolog/README.md | 109 + vendor/monolog/monolog/UPGRADE.md | 72 + vendor/monolog/monolog/composer.json | 72 + vendor/monolog/monolog/phpstan.neon.dist | 20 + .../monolog/src/Monolog/DateTimeImmutable.php | 49 + .../monolog/src/Monolog/ErrorHandler.php | 266 + .../Monolog/Formatter/ChromePHPFormatter.php | 81 + .../Monolog/Formatter/ElasticaFormatter.php | 85 + .../Formatter/ElasticsearchFormatter.php | 89 + .../Monolog/Formatter/FlowdockFormatter.php | 107 + .../Monolog/Formatter/FluentdFormatter.php | 88 + .../Monolog/Formatter/FormatterInterface.php | 36 + .../Formatter/GelfMessageFormatter.php | 147 + .../src/Monolog/Formatter/HtmlFormatter.php | 139 + .../src/Monolog/Formatter/JsonFormatter.php | 188 + .../src/Monolog/Formatter/LineFormatter.php | 196 + .../src/Monolog/Formatter/LogglyFormatter.php | 45 + .../Monolog/Formatter/LogmaticFormatter.php | 66 + .../Monolog/Formatter/LogstashFormatter.php | 101 + .../Monolog/Formatter/MongoDBFormatter.php | 141 + .../Monolog/Formatter/NormalizerFormatter.php | 271 + .../src/Monolog/Formatter/ScalarFormatter.php | 48 + .../Monolog/Formatter/WildfireFormatter.php | 129 + .../src/Monolog/Handler/AbstractHandler.php | 96 + .../Handler/AbstractProcessingHandler.php | 58 + .../Monolog/Handler/AbstractSyslogHandler.php | 102 + .../src/Monolog/Handler/AmqpHandler.php | 137 + .../Monolog/Handler/BrowserConsoleHandler.php | 243 + .../src/Monolog/Handler/BufferHandler.php | 161 + .../src/Monolog/Handler/ChromePHPHandler.php | 193 + .../src/Monolog/Handler/CouchDBHandler.php | 73 + .../src/Monolog/Handler/CubeHandler.php | 155 + .../monolog/src/Monolog/Handler/Curl/Util.php | 70 + .../Monolog/Handler/DeduplicationHandler.php | 173 + .../Handler/DoctrineCouchDBHandler.php | 46 + .../src/Monolog/Handler/DynamoDbHandler.php | 103 + .../src/Monolog/Handler/ElasticaHandler.php | 124 + .../Monolog/Handler/ElasticsearchHandler.php | 189 + .../src/Monolog/Handler/ErrorLogHandler.php | 86 + .../Monolog/Handler/FallbackGroupHandler.php | 60 + .../src/Monolog/Handler/FilterHandler.php | 189 + .../ActivationStrategyInterface.php | 25 + .../ChannelLevelActivationStrategy.php | 66 + .../ErrorLevelActivationStrategy.php | 40 + .../Monolog/Handler/FingersCrossedHandler.php | 228 + .../src/Monolog/Handler/FirePHPHandler.php | 166 + .../src/Monolog/Handler/FleepHookHandler.php | 116 + .../src/Monolog/Handler/FlowdockHandler.php | 116 + .../Handler/FormattableHandlerInterface.php | 37 + .../Handler/FormattableHandlerTrait.php | 60 + .../src/Monolog/Handler/GelfHandler.php | 59 + .../src/Monolog/Handler/GroupHandler.php | 127 + .../monolog/src/Monolog/Handler/Handler.php | 53 + .../src/Monolog/Handler/HandlerInterface.php | 76 + .../src/Monolog/Handler/HandlerWrapper.php | 136 + .../src/Monolog/Handler/IFTTTHandler.php | 70 + .../src/Monolog/Handler/InsightOpsHandler.php | 59 + .../src/Monolog/Handler/LogEntriesHandler.php | 53 + .../src/Monolog/Handler/LogglyHandler.php | 160 + .../src/Monolog/Handler/LogmaticHandler.php | 88 + .../src/Monolog/Handler/MailHandler.php | 85 + .../src/Monolog/Handler/MandrillHandler.php | 85 + .../Handler/MissingExtensionException.php | 21 + .../src/Monolog/Handler/MongoDBHandler.php | 85 + .../Monolog/Handler/NativeMailerHandler.php | 176 + .../src/Monolog/Handler/NewRelicHandler.php | 197 + .../src/Monolog/Handler/NoopHandler.php | 40 + .../src/Monolog/Handler/NullHandler.php | 54 + .../src/Monolog/Handler/OverflowHandler.php | 154 + .../src/Monolog/Handler/PHPConsoleHandler.php | 240 + .../src/Monolog/Handler/ProcessHandler.php | 193 + .../Handler/ProcessableHandlerInterface.php | 42 + .../Handler/ProcessableHandlerTrait.php | 70 + .../src/Monolog/Handler/PsrHandler.php | 97 + .../src/Monolog/Handler/PushoverHandler.php | 203 + .../src/Monolog/Handler/RedisHandler.php | 96 + .../Monolog/Handler/RedisPubSubHandler.php | 67 + .../src/Monolog/Handler/RollbarHandler.php | 130 + .../Monolog/Handler/RotatingFileHandler.php | 194 + .../src/Monolog/Handler/SamplingHandler.php | 125 + .../src/Monolog/Handler/SendGridHandler.php | 100 + .../src/Monolog/Handler/Slack/SlackRecord.php | 356 + .../src/Monolog/Handler/SlackHandler.php | 233 + .../Monolog/Handler/SlackWebhookHandler.php | 130 + .../src/Monolog/Handler/SocketHandler.php | 380 + .../src/Monolog/Handler/SqsHandler.php | 64 + .../src/Monolog/Handler/StreamHandler.php | 177 + .../Monolog/Handler/SwiftMailerHandler.php | 106 + .../src/Monolog/Handler/SyslogHandler.php | 67 + .../Monolog/Handler/SyslogUdp/UdpSocket.php | 69 + .../src/Monolog/Handler/SyslogUdpHandler.php | 127 + .../Monolog/Handler/TelegramBotHandler.php | 181 + .../src/Monolog/Handler/TestHandler.php | 193 + .../Handler/WebRequestRecognizerTrait.php | 24 + .../Handler/WhatFailureGroupHandler.php | 63 + .../Monolog/Handler/ZendMonitorHandler.php | 96 + vendor/monolog/monolog/src/Monolog/Logger.php | 611 + .../src/Monolog/Processor/GitProcessor.php | 63 + .../Monolog/Processor/HostnameProcessor.php | 32 + .../Processor/IntrospectionProcessor.php | 108 + .../Processor/MemoryPeakUsageProcessor.php | 34 + .../src/Monolog/Processor/MemoryProcessor.php | 61 + .../Processor/MemoryUsageProcessor.php | 34 + .../Monolog/Processor/MercurialProcessor.php | 63 + .../Monolog/Processor/ProcessIdProcessor.php | 27 + .../Monolog/Processor/ProcessorInterface.php | 25 + .../Processor/PsrLogMessageProcessor.php | 87 + .../src/Monolog/Processor/TagProcessor.php | 48 + .../src/Monolog/Processor/UidProcessor.php | 55 + .../src/Monolog/Processor/WebProcessor.php | 100 + .../monolog/monolog/src/Monolog/Registry.php | 133 + .../src/Monolog/ResettableInterface.php | 34 + .../monolog/src/Monolog/SignalHandler.php | 99 + .../monolog/src/Monolog/Test/TestCase.php | 63 + vendor/monolog/monolog/src/Monolog/Utils.php | 196 + vendor/mtdowling/jmespath.php/LICENSE | 19 + vendor/mtdowling/jmespath.php/README.rst | 123 + vendor/mtdowling/jmespath.php/bin/jp.php | 74 + vendor/mtdowling/jmespath.php/bin/perf.php | 68 + vendor/mtdowling/jmespath.php/composer.json | 39 + .../mtdowling/jmespath.php/src/AstRuntime.php | 47 + .../jmespath.php/src/CompilerRuntime.php | 83 + .../jmespath.php/src/DebugRuntime.php | 109 + vendor/mtdowling/jmespath.php/src/Env.php | 91 + .../jmespath.php/src/FnDispatcher.php | 407 + .../mtdowling/jmespath.php/src/JmesPath.php | 17 + vendor/mtdowling/jmespath.php/src/Lexer.php | 444 + vendor/mtdowling/jmespath.php/src/Parser.php | 519 + .../jmespath.php/src/SyntaxErrorException.php | 36 + .../jmespath.php/src/TreeCompiler.php | 419 + .../jmespath.php/src/TreeInterpreter.php | 235 + vendor/mtdowling/jmespath.php/src/Utils.php | 258 + vendor/overtrue/socialite/.github/FUNDING.yml | 9 + vendor/overtrue/socialite/.gitignore | 9 + vendor/overtrue/socialite/.php_cs | 28 + vendor/overtrue/socialite/.travis.yml | 13 + vendor/overtrue/socialite/LICENSE.txt | 21 + vendor/overtrue/socialite/README.md | 267 + vendor/overtrue/socialite/composer.json | 34 + vendor/overtrue/socialite/phpunit.xml | 18 + vendor/overtrue/socialite/src/AccessToken.php | 84 + .../socialite/src/AccessTokenInterface.php | 25 + .../src/AuthorizeFailedException.php | 35 + vendor/overtrue/socialite/src/Config.php | 180 + .../socialite/src/FactoryInterface.php | 27 + .../overtrue/socialite/src/HasAttributes.php | 135 + .../src/InvalidArgumentException.php | 16 + .../socialite/src/InvalidStateException.php | 16 + .../socialite/src/ProviderInterface.php | 31 + .../src/Providers/AbstractProvider.php | 585 + .../socialite/src/Providers/BaiduProvider.php | 134 + .../src/Providers/DouYinProvider.php | 169 + .../src/Providers/DoubanProvider.php | 88 + .../src/Providers/FacebookProvider.php | 168 + .../src/Providers/FeiShuProvider.php | 192 + .../src/Providers/GitHubProvider.php | 126 + .../src/Providers/GoogleProvider.php | 118 + .../src/Providers/LinkedinProvider.php | 181 + .../src/Providers/OutlookProvider.php | 89 + .../socialite/src/Providers/QQProvider.php | 206 + .../src/Providers/TaobaoProvider.php | 242 + .../src/Providers/WeChatProvider.php | 234 + .../src/Providers/WeWorkProvider.php | 214 + .../socialite/src/Providers/WeiboProvider.php | 126 + .../socialite/src/SocialiteManager.php | 251 + vendor/overtrue/socialite/src/User.php | 204 + .../overtrue/socialite/src/UserInterface.php | 53 + .../src/WeChatComponentInterface.php | 32 + vendor/overtrue/socialite/tests/OAuthTest.php | 243 + .../tests/Providers/WeWorkProviderTest.php | 60 + vendor/overtrue/socialite/tests/UserTest.php | 45 + .../socialite/tests/WechatProviderTest.php | 137 + vendor/overtrue/wechat/CHANGELOG.md | 1401 ++ vendor/overtrue/wechat/CONTRIBUTING.md | 67 + vendor/overtrue/wechat/LICENSE | 22 + vendor/overtrue/wechat/README.md | 92 + vendor/overtrue/wechat/composer.json | 62 + .../wechat/src/BasicService/Application.php | 39 + .../BasicService/ContentSecurity/Client.php | 112 + .../ContentSecurity/ServiceProvider.php | 31 + .../wechat/src/BasicService/Jssdk/Client.php | 198 + .../BasicService/Jssdk/ServiceProvider.php | 33 + .../wechat/src/BasicService/Media/Client.php | 197 + .../BasicService/Media/ServiceProvider.php | 44 + .../wechat/src/BasicService/QrCode/Client.php | 120 + .../BasicService/QrCode/ServiceProvider.php | 31 + .../wechat/src/BasicService/Url/Client.php | 45 + .../src/BasicService/Url/ServiceProvider.php | 31 + vendor/overtrue/wechat/src/Factory.php | 53 + .../wechat/src/Kernel/AccessToken.php | 248 + .../overtrue/wechat/src/Kernel/BaseClient.php | 243 + .../wechat/src/Kernel/Clauses/Clause.php | 64 + vendor/overtrue/wechat/src/Kernel/Config.php | 23 + .../Kernel/Contracts/AccessTokenInterface.php | 31 + .../wechat/src/Kernel/Contracts/Arrayable.php | 29 + .../Contracts/EventHandlerInterface.php | 25 + .../src/Kernel/Contracts/MediaInterface.php | 22 + .../src/Kernel/Contracts/MessageInterface.php | 26 + .../src/Kernel/Decorators/FinallyResult.php | 35 + .../src/Kernel/Decorators/TerminateResult.php | 35 + .../overtrue/wechat/src/Kernel/Encryptor.php | 198 + .../Kernel/Events/AccessTokenRefreshed.php | 32 + .../Kernel/Events/ApplicationInitialized.php | 32 + .../src/Kernel/Events/HttpResponseCreated.php | 32 + .../Events/ServerGuardResponseCreated.php | 32 + .../Kernel/Exceptions/BadRequestException.php | 21 + .../Kernel/Exceptions/DecryptException.php | 16 + .../src/Kernel/Exceptions/Exception.php | 23 + .../src/Kernel/Exceptions/HttpException.php | 51 + .../Exceptions/InvalidArgumentException.php | 21 + .../Exceptions/InvalidConfigException.php | 21 + .../Kernel/Exceptions/RuntimeException.php | 21 + .../Exceptions/UnboundServiceException.php | 21 + vendor/overtrue/wechat/src/Kernel/Helpers.php | 57 + .../wechat/src/Kernel/Http/Response.php | 117 + .../wechat/src/Kernel/Http/StreamResponse.php | 78 + .../wechat/src/Kernel/Log/LogManager.php | 580 + .../wechat/src/Kernel/Messages/Article.php | 58 + .../wechat/src/Kernel/Messages/Card.php | 50 + .../src/Kernel/Messages/DeviceEvent.php | 40 + .../wechat/src/Kernel/Messages/DeviceText.php | 50 + .../wechat/src/Kernel/Messages/File.php | 25 + .../wechat/src/Kernel/Messages/Image.php | 27 + .../wechat/src/Kernel/Messages/Link.php | 36 + .../wechat/src/Kernel/Messages/Location.php | 38 + .../wechat/src/Kernel/Messages/Media.php | 66 + .../wechat/src/Kernel/Messages/Message.php | 187 + .../src/Kernel/Messages/MiniProgramPage.php | 31 + .../src/Kernel/Messages/MiniprogramNotice.php | 22 + .../wechat/src/Kernel/Messages/Music.php | 73 + .../wechat/src/Kernel/Messages/News.php | 65 + .../wechat/src/Kernel/Messages/NewsItem.php | 57 + .../wechat/src/Kernel/Messages/Raw.php | 51 + .../wechat/src/Kernel/Messages/ShortVideo.php | 30 + .../wechat/src/Kernel/Messages/TaskCard.php | 44 + .../wechat/src/Kernel/Messages/Text.php | 52 + .../wechat/src/Kernel/Messages/TextCard.php | 40 + .../wechat/src/Kernel/Messages/Transfer.php | 54 + .../wechat/src/Kernel/Messages/Video.php | 62 + .../wechat/src/Kernel/Messages/Voice.php | 37 + .../Providers/ConfigServiceProvider.php | 39 + .../EventDispatcherServiceProvider.php | 47 + .../Providers/ExtensionServiceProvider.php | 39 + .../Providers/HttpClientServiceProvider.php | 39 + .../Kernel/Providers/LogServiceProvider.php | 80 + .../Providers/RequestServiceProvider.php | 39 + .../wechat/src/Kernel/ServerGuard.php | 352 + .../wechat/src/Kernel/ServiceContainer.php | 160 + .../wechat/src/Kernel/Support/AES.php | 66 + .../wechat/src/Kernel/Support/Arr.php | 439 + .../src/Kernel/Support/ArrayAccessible.php | 66 + .../wechat/src/Kernel/Support/Collection.php | 417 + .../wechat/src/Kernel/Support/File.php | 135 + .../wechat/src/Kernel/Support/Helpers.php | 127 + .../wechat/src/Kernel/Support/Str.php | 193 + .../wechat/src/Kernel/Support/XML.php | 166 + .../src/Kernel/Traits/HasAttributes.php | 245 + .../src/Kernel/Traits/HasHttpRequests.php | 211 + .../src/Kernel/Traits/InteractsWithCache.php | 102 + .../wechat/src/Kernel/Traits/Observable.php | 278 + .../src/Kernel/Traits/ResponseCastable.php | 92 + .../wechat/src/MicroMerchant/Application.php | 168 + .../wechat/src/MicroMerchant/Base/Client.php | 117 + .../MicroMerchant/Base/ServiceProvider.php | 33 + .../src/MicroMerchant/Certficates/Client.php | 89 + .../Certficates/ServiceProvider.php | 33 + .../src/MicroMerchant/Kernel/BaseClient.php | 241 + .../Kernel/Exceptions/EncryptException.php | 23 + .../Exceptions/InvalidExtensionException.php | 23 + .../Exceptions/InvalidSignException.php | 23 + .../src/MicroMerchant/Material/Client.php | 69 + .../Material/ServiceProvider.php | 33 + .../wechat/src/MicroMerchant/Media/Client.php | 47 + .../MicroMerchant/Media/ServiceProvider.php | 44 + .../MicroMerchant/MerchantConfig/Client.php | 116 + .../MerchantConfig/ServiceProvider.php | 33 + .../src/MicroMerchant/Withdraw/Client.php | 67 + .../Withdraw/ServiceProvider.php | 33 + .../MiniProgram/ActivityMessage/Client.php | 79 + .../ActivityMessage/ServiceProvider.php | 28 + .../wechat/src/MiniProgram/AppCode/Client.php | 80 + .../MiniProgram/AppCode/ServiceProvider.php | 33 + .../wechat/src/MiniProgram/Application.php | 91 + .../src/MiniProgram/Auth/AccessToken.php | 39 + .../wechat/src/MiniProgram/Auth/Client.php | 41 + .../src/MiniProgram/Auth/ServiceProvider.php | 32 + .../wechat/src/MiniProgram/Base/Client.php | 38 + .../src/MiniProgram/Base/ServiceProvider.php | 33 + .../src/MiniProgram/Broadcast/Client.php | 206 + .../MiniProgram/Broadcast/ServiceProvider.php | 33 + .../CustomerService/ServiceProvider.php | 34 + .../src/MiniProgram/DataCube/Client.php | 140 + .../MiniProgram/DataCube/ServiceProvider.php | 28 + .../wechat/src/MiniProgram/Encryptor.php | 46 + .../wechat/src/MiniProgram/Express/Client.php | 129 + .../MiniProgram/Express/ServiceProvider.php | 33 + .../wechat/src/MiniProgram/Live/Client.php | 58 + .../src/MiniProgram/Live/ServiceProvider.php | 33 + .../src/MiniProgram/Mall/CartClient.php | 87 + .../src/MiniProgram/Mall/ForwardsMall.php | 48 + .../src/MiniProgram/Mall/MediaClient.php | 37 + .../src/MiniProgram/Mall/OrderClient.php | 75 + .../src/MiniProgram/Mall/ProductClient.php | 68 + .../src/MiniProgram/Mall/ServiceProvider.php | 44 + .../src/MiniProgram/NearbyPoi/Client.php | 110 + .../MiniProgram/NearbyPoi/ServiceProvider.php | 33 + .../src/MiniProgram/OCR/ServiceProvider.php | 34 + .../src/MiniProgram/OpenData/Client.php | 86 + .../MiniProgram/OpenData/ServiceProvider.php | 28 + .../wechat/src/MiniProgram/Plugin/Client.php | 67 + .../src/MiniProgram/Plugin/DevClient.php | 86 + .../MiniProgram/Plugin/ServiceProvider.php | 40 + .../src/MiniProgram/RealtimeLog/Client.php | 41 + .../RealtimeLog/ServiceProvider.php | 33 + .../wechat/src/MiniProgram/Search/Client.php | 35 + .../MiniProgram/Search/ServiceProvider.php | 33 + .../MiniProgram/Server/ServiceProvider.php | 42 + .../wechat/src/MiniProgram/Soter/Client.php | 37 + .../src/MiniProgram/Soter/ServiceProvider.php | 33 + .../MiniProgram/SubscribeMessage/Client.php | 192 + .../SubscribeMessage/ServiceProvider.php | 28 + .../MiniProgram/TemplateMessage/Client.php | 101 + .../TemplateMessage/ServiceProvider.php | 28 + .../src/MiniProgram/UniformMessage/Client.php | 140 + .../UniformMessage/ServiceProvider.php | 28 + .../src/OfficialAccount/Application.php | 91 + .../src/OfficialAccount/Auth/AccessToken.php | 36 + .../OfficialAccount/Auth/ServiceProvider.php | 33 + .../src/OfficialAccount/AutoReply/Client.php | 34 + .../AutoReply/ServiceProvider.php | 33 + .../src/OfficialAccount/Base/Client.php | 81 + .../OfficialAccount/Base/ServiceProvider.php | 33 + .../OfficialAccount/Broadcasting/Client.php | 359 + .../Broadcasting/MessageBuilder.php | 143 + .../Broadcasting/ServiceProvider.php | 33 + .../Card/BoardingPassClient.php | 31 + .../wechat/src/OfficialAccount/Card/Card.php | 52 + .../src/OfficialAccount/Card/Client.php | 422 + .../src/OfficialAccount/Card/CodeClient.php | 169 + .../src/OfficialAccount/Card/CoinClient.php | 106 + .../Card/GeneralCardClient.php | 64 + .../OfficialAccount/Card/GiftCardClient.php | 66 + .../Card/GiftCardOrderClient.php | 68 + .../Card/GiftCardPageClient.php | 92 + .../OfficialAccount/Card/InvoiceClient.php | 101 + .../src/OfficialAccount/Card/JssdkClient.php | 77 + .../Card/MeetingTicketClient.php | 31 + .../OfficialAccount/Card/MemberCardClient.php | 113 + .../Card/MovieTicketClient.php | 31 + .../OfficialAccount/Card/ServiceProvider.php | 89 + .../Card/SubMerchantClient.php | 112 + .../src/OfficialAccount/Comment/Client.php | 175 + .../Comment/ServiceProvider.php | 44 + .../CustomerService/Client.php | 208 + .../CustomerService/Messenger.php | 159 + .../CustomerService/ServiceProvider.php | 37 + .../CustomerService/SessionClient.php | 94 + .../src/OfficialAccount/DataCube/Client.php | 271 + .../DataCube/ServiceProvider.php | 33 + .../src/OfficialAccount/Device/Client.php | 217 + .../Device/ServiceProvider.php | 33 + .../src/OfficialAccount/Goods/Client.php | 101 + .../OfficialAccount/Goods/ServiceProvider.php | 33 + .../src/OfficialAccount/Guide/Client.php | 992 ++ .../OfficialAccount/Guide/ServiceProvider.php | 33 + .../src/OfficialAccount/Material/Client.php | 275 + .../Material/ServiceProvider.php | 44 + .../src/OfficialAccount/Menu/Client.php | 98 + .../OfficialAccount/Menu/ServiceProvider.php | 33 + .../OfficialAccount/OAuth/ServiceProvider.php | 66 + .../wechat/src/OfficialAccount/OCR/Client.php | 78 + .../OfficialAccount/OCR/ServiceProvider.php | 33 + .../wechat/src/OfficialAccount/POI/Client.php | 131 + .../OfficialAccount/POI/ServiceProvider.php | 33 + .../src/OfficialAccount/Semantic/Client.php | 41 + .../Semantic/ServiceProvider.php | 31 + .../src/OfficialAccount/Server/Guard.php | 27 + .../Server/Handlers/EchoStrHandler.php | 49 + .../Server/ServiceProvider.php | 46 + .../OfficialAccount/ShakeAround/Client.php | 76 + .../ShakeAround/DeviceClient.php | 165 + .../ShakeAround/GroupClient.php | 147 + .../ShakeAround/MaterialClient.php | 41 + .../ShakeAround/PageClient.php | 98 + .../ShakeAround/RelationClient.php | 78 + .../ShakeAround/ServiceProvider.php | 57 + .../ShakeAround/ShakeAround.php | 44 + .../ShakeAround/StatsClient.php | 102 + .../src/OfficialAccount/Store/Client.php | 188 + .../OfficialAccount/Store/ServiceProvider.php | 33 + .../TemplateMessage/Client.php | 226 + .../TemplateMessage/ServiceProvider.php | 33 + .../OfficialAccount/User/ServiceProvider.php | 35 + .../src/OfficialAccount/User/TagClient.php | 157 + .../src/OfficialAccount/User/UserClient.php | 158 + .../src/OfficialAccount/WiFi/CardClient.php | 48 + .../src/OfficialAccount/WiFi/Client.php | 86 + .../src/OfficialAccount/WiFi/DeviceClient.php | 110 + .../OfficialAccount/WiFi/ServiceProvider.php | 45 + .../src/OfficialAccount/WiFi/ShopClient.php | 89 + .../wechat/src/OpenPlatform/Application.php | 199 + .../src/OpenPlatform/Auth/AccessToken.php | 46 + .../src/OpenPlatform/Auth/ServiceProvider.php | 37 + .../src/OpenPlatform/Auth/VerifyTicket.php | 83 + .../Authorizer/Aggregate/Account/Client.php | 96 + .../Aggregate/AggregateServiceProvider.php | 22 + .../Authorizer/Auth/AccessToken.php | 73 + .../Authorizer/MiniProgram/Account/Client.php | 79 + .../MiniProgram/Account/ServiceProvider.php | 25 + .../Authorizer/MiniProgram/Application.php | 50 + .../Authorizer/MiniProgram/Auth/Client.php | 59 + .../Authorizer/MiniProgram/Code/Client.php | 252 + .../MiniProgram/Code/ServiceProvider.php | 25 + .../Authorizer/MiniProgram/Domain/Client.php | 51 + .../MiniProgram/Domain/ServiceProvider.php | 25 + .../Authorizer/MiniProgram/Setting/Client.php | 247 + .../MiniProgram/Setting/ServiceProvider.php | 25 + .../Authorizer/MiniProgram/Tester/Client.php | 67 + .../MiniProgram/Tester/ServiceProvider.php | 25 + .../OfficialAccount/Account/Client.php | 71 + .../OfficialAccount/Application.php | 43 + .../OfficialAccount/MiniProgram/Client.php | 71 + .../MiniProgram/ServiceProvider.php | 25 + .../OAuth/ComponentDelegate.php | 52 + .../OpenPlatform/Authorizer/Server/Guard.php | 32 + .../wechat/src/OpenPlatform/Base/Client.php | 155 + .../src/OpenPlatform/Base/ServiceProvider.php | 33 + .../src/OpenPlatform/CodeTemplate/Client.php | 84 + .../CodeTemplate/ServiceProvider.php | 25 + .../src/OpenPlatform/Component/Client.php | 54 + .../Component/ServiceProvider.php | 25 + .../wechat/src/OpenPlatform/Server/Guard.php | 63 + .../Server/Handlers/Authorized.php | 30 + .../Server/Handlers/Unauthorized.php | 30 + .../Server/Handlers/UpdateAuthorized.php | 30 + .../Server/Handlers/VerifyTicketRefreshed.php | 50 + .../OpenPlatform/Server/ServiceProvider.php | 34 + .../wechat/src/OpenWork/Application.php | 81 + .../wechat/src/OpenWork/Auth/AccessToken.php | 50 + .../src/OpenWork/Auth/ServiceProvider.php | 33 + .../wechat/src/OpenWork/Corp/Client.php | 197 + .../src/OpenWork/Corp/ServiceProvider.php | 36 + .../src/OpenWork/MiniProgram/Client.php | 46 + .../OpenWork/MiniProgram/ServiceProvider.php | 31 + .../wechat/src/OpenWork/Provider/Client.php | 214 + .../src/OpenWork/Provider/ServiceProvider.php | 33 + .../wechat/src/OpenWork/Server/Guard.php | 63 + .../Server/Handlers/EchoStrHandler.php | 60 + .../src/OpenWork/Server/ServiceProvider.php | 56 + .../src/OpenWork/SuiteAuth/AccessToken.php | 54 + .../OpenWork/SuiteAuth/ServiceProvider.php | 37 + .../src/OpenWork/SuiteAuth/SuiteTicket.php | 76 + .../wechat/src/OpenWork/Work/Application.php | 36 + .../src/OpenWork/Work/Auth/AccessToken.php | 70 + .../wechat/src/Payment/Application.php | 190 + .../wechat/src/Payment/Base/Client.php | 50 + .../src/Payment/Base/ServiceProvider.php | 33 + .../wechat/src/Payment/Bill/Client.php | 44 + .../src/Payment/Bill/ServiceProvider.php | 33 + .../wechat/src/Payment/Contract/Client.php | 102 + .../src/Payment/Contract/ServiceProvider.php | 33 + .../wechat/src/Payment/Coupon/Client.php | 71 + .../src/Payment/Coupon/ServiceProvider.php | 33 + .../wechat/src/Payment/Fundflow/Client.php | 54 + .../src/Payment/Fundflow/ServiceProvider.php | 33 + .../wechat/src/Payment/Jssdk/Client.php | 136 + .../src/Payment/Jssdk/ServiceProvider.php | 33 + .../wechat/src/Payment/Kernel/BaseClient.php | 171 + .../Exceptions/InvalidSignException.php | 18 + .../Kernel/Exceptions/SandboxException.php | 18 + .../wechat/src/Payment/Merchant/Client.php | 85 + .../src/Payment/Merchant/ServiceProvider.php | 33 + .../wechat/src/Payment/Notify/Handler.php | 189 + .../wechat/src/Payment/Notify/Paid.php | 31 + .../wechat/src/Payment/Notify/Refunded.php | 46 + .../wechat/src/Payment/Notify/Scanned.php | 55 + .../wechat/src/Payment/Order/Client.php | 117 + .../src/Payment/Order/ServiceProvider.php | 33 + .../src/Payment/ProfitSharing/Client.php | 249 + .../Payment/ProfitSharing/ServiceProvider.php | 33 + .../wechat/src/Payment/Redpack/Client.php | 102 + .../src/Payment/Redpack/ServiceProvider.php | 33 + .../wechat/src/Payment/Refund/Client.php | 133 + .../src/Payment/Refund/ServiceProvider.php | 33 + .../wechat/src/Payment/Reverse/Client.php | 60 + .../src/Payment/Reverse/ServiceProvider.php | 33 + .../wechat/src/Payment/Sandbox/Client.php | 55 + .../src/Payment/Sandbox/ServiceProvider.php | 30 + .../wechat/src/Payment/Security/Client.php | 38 + .../src/Payment/Security/ServiceProvider.php | 33 + .../wechat/src/Payment/Transfer/Client.php | 114 + .../src/Payment/Transfer/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Agent/Client.php | 63 + .../wechat/src/Work/Agent/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Application.php | 105 + .../wechat/src/Work/Auth/AccessToken.php | 43 + .../wechat/src/Work/Auth/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Base/Client.php | 34 + .../wechat/src/Work/Base/ServiceProvider.php | 30 + .../wechat/src/Work/Calendar/Client.php | 78 + .../src/Work/Calendar/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Chat/Client.php | 73 + .../wechat/src/Work/Chat/ServiceProvider.php | 33 + .../wechat/src/Work/Department/Client.php | 76 + .../src/Work/Department/ServiceProvider.php | 33 + .../src/Work/ExternalContact/Client.php | 265 + .../Work/ExternalContact/ContactWayClient.php | 87 + .../Work/ExternalContact/MessageClient.php | 156 + .../src/Work/ExternalContact/SchoolClient.php | 442 + .../Work/ExternalContact/ServiceProvider.php | 49 + .../Work/ExternalContact/StatisticsClient.php | 43 + .../wechat/src/Work/GroupRobot/Client.php | 48 + .../src/Work/GroupRobot/Messages/Image.php | 38 + .../src/Work/GroupRobot/Messages/Markdown.php | 38 + .../src/Work/GroupRobot/Messages/Message.php | 23 + .../src/Work/GroupRobot/Messages/News.php | 47 + .../src/Work/GroupRobot/Messages/NewsItem.php | 45 + .../src/Work/GroupRobot/Messages/Text.php | 69 + .../wechat/src/Work/GroupRobot/Messenger.php | 125 + .../src/Work/GroupRobot/ServiceProvider.php | 37 + .../wechat/src/Work/Invoice/Client.php | 87 + .../src/Work/Invoice/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Jssdk/Client.php | 186 + .../wechat/src/Work/Jssdk/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Media/Client.php | 103 + .../wechat/src/Work/Media/ServiceProvider.php | 28 + .../overtrue/wechat/src/Work/Menu/Client.php | 59 + .../wechat/src/Work/Menu/ServiceProvider.php | 33 + .../wechat/src/Work/Message/Client.php | 46 + .../wechat/src/Work/Message/Messenger.php | 202 + .../src/Work/Message/ServiceProvider.php | 43 + .../src/Work/MiniProgram/Application.php | 41 + .../src/Work/MiniProgram/Auth/Client.php | 37 + .../wechat/src/Work/MsgAudit/Client.php | 82 + .../src/Work/MsgAudit/ServiceProvider.php | 33 + vendor/overtrue/wechat/src/Work/OA/Client.php | 149 + .../wechat/src/Work/OA/ServiceProvider.php | 33 + .../src/Work/OAuth/AccessTokenDelegate.php | 43 + .../wechat/src/Work/OAuth/ServiceProvider.php | 62 + .../wechat/src/Work/Schedule/Client.php | 93 + .../src/Work/Schedule/ServiceProvider.php | 33 + .../overtrue/wechat/src/Work/Server/Guard.php | 43 + .../Work/Server/Handlers/EchoStrHandler.php | 56 + .../src/Work/Server/ServiceProvider.php | 46 + .../overtrue/wechat/src/Work/User/Client.php | 223 + .../wechat/src/Work/User/ServiceProvider.php | 37 + .../wechat/src/Work/User/TagClient.php | 151 + vendor/phpmailer/phpmailer/COMMITMENT | 46 + vendor/phpmailer/phpmailer/LICENSE | 502 + vendor/phpmailer/phpmailer/README.md | 227 + vendor/phpmailer/phpmailer/SECURITY.md | 37 + vendor/phpmailer/phpmailer/VERSION | 1 + vendor/phpmailer/phpmailer/composer.json | 71 + .../phpmailer/phpmailer/get_oauth_token.php | 146 + .../phpmailer/language/phpmailer.lang-af.php | 26 + .../phpmailer/language/phpmailer.lang-ar.php | 27 + .../phpmailer/language/phpmailer.lang-az.php | 27 + .../phpmailer/language/phpmailer.lang-ba.php | 27 + .../phpmailer/language/phpmailer.lang-be.php | 27 + .../phpmailer/language/phpmailer.lang-bg.php | 27 + .../phpmailer/language/phpmailer.lang-ca.php | 27 + .../phpmailer/language/phpmailer.lang-ch.php | 27 + .../phpmailer/language/phpmailer.lang-cs.php | 28 + .../phpmailer/language/phpmailer.lang-da.php | 29 + .../phpmailer/language/phpmailer.lang-de.php | 28 + .../phpmailer/language/phpmailer.lang-el.php | 26 + .../phpmailer/language/phpmailer.lang-eo.php | 26 + .../phpmailer/language/phpmailer.lang-es.php | 27 + .../phpmailer/language/phpmailer.lang-et.php | 28 + .../phpmailer/language/phpmailer.lang-fa.php | 28 + .../phpmailer/language/phpmailer.lang-fi.php | 28 + .../phpmailer/language/phpmailer.lang-fo.php | 27 + .../phpmailer/language/phpmailer.lang-fr.php | 38 + .../phpmailer/language/phpmailer.lang-gl.php | 27 + .../phpmailer/language/phpmailer.lang-he.php | 27 + .../phpmailer/language/phpmailer.lang-hi.php | 27 + .../phpmailer/language/phpmailer.lang-hr.php | 27 + .../phpmailer/language/phpmailer.lang-hu.php | 27 + .../phpmailer/language/phpmailer.lang-hy.php | 27 + .../phpmailer/language/phpmailer.lang-id.php | 31 + .../phpmailer/language/phpmailer.lang-it.php | 28 + .../phpmailer/language/phpmailer.lang-ja.php | 29 + .../phpmailer/language/phpmailer.lang-ka.php | 27 + .../phpmailer/language/phpmailer.lang-ko.php | 27 + .../phpmailer/language/phpmailer.lang-lt.php | 27 + .../phpmailer/language/phpmailer.lang-lv.php | 27 + .../phpmailer/language/phpmailer.lang-mg.php | 27 + .../phpmailer/language/phpmailer.lang-ms.php | 27 + .../phpmailer/language/phpmailer.lang-nb.php | 26 + .../phpmailer/language/phpmailer.lang-nl.php | 34 + .../phpmailer/language/phpmailer.lang-pl.php | 27 + .../phpmailer/language/phpmailer.lang-pt.php | 27 + .../language/phpmailer.lang-pt_br.php | 38 + .../phpmailer/language/phpmailer.lang-ro.php | 33 + .../phpmailer/language/phpmailer.lang-ru.php | 28 + .../phpmailer/language/phpmailer.lang-sk.php | 30 + .../phpmailer/language/phpmailer.lang-sl.php | 36 + .../phpmailer/language/phpmailer.lang-sr.php | 28 + .../language/phpmailer.lang-sr_latn.php | 28 + .../phpmailer/language/phpmailer.lang-sv.php | 27 + .../phpmailer/language/phpmailer.lang-tl.php | 28 + .../phpmailer/language/phpmailer.lang-tr.php | 31 + .../phpmailer/language/phpmailer.lang-uk.php | 28 + .../phpmailer/language/phpmailer.lang-vi.php | 27 + .../phpmailer/language/phpmailer.lang-zh.php | 29 + .../language/phpmailer.lang-zh_cn.php | 29 + vendor/phpmailer/phpmailer/src/Exception.php | 40 + vendor/phpmailer/phpmailer/src/OAuth.php | 139 + vendor/phpmailer/phpmailer/src/PHPMailer.php | 5040 ++++++++ vendor/phpmailer/phpmailer/src/POP3.php | 462 + vendor/phpmailer/phpmailer/src/SMTP.php | 1455 +++ vendor/pimple/pimple/.gitignore | 3 + vendor/pimple/pimple/.php_cs.dist | 20 + vendor/pimple/pimple/.travis.yml | 18 + vendor/pimple/pimple/CHANGELOG | 64 + vendor/pimple/pimple/LICENSE | 19 + vendor/pimple/pimple/README.rst | 332 + vendor/pimple/pimple/composer.json | 29 + vendor/pimple/pimple/phpunit.xml.dist | 18 + vendor/pimple/pimple/src/Pimple/Container.php | 298 + .../Exception/ExpectedInvokableException.php | 38 + .../Exception/FrozenServiceException.php | 45 + .../InvalidServiceIdentifierException.php | 45 + .../Exception/UnknownIdentifierException.php | 45 + .../pimple/src/Pimple/Psr11/Container.php | 55 + .../src/Pimple/Psr11/ServiceLocator.php | 75 + .../pimple/src/Pimple/ServiceIterator.php | 69 + .../src/Pimple/ServiceProviderInterface.php | 46 + .../src/Pimple/Tests/Fixtures/Invokable.php | 38 + .../Pimple/Tests/Fixtures/NonInvokable.php | 34 + .../Tests/Fixtures/PimpleServiceProvider.php | 54 + .../src/Pimple/Tests/Fixtures/Service.php | 35 + .../PimpleServiceProviderInterfaceTest.php | 77 + .../pimple/src/Pimple/Tests/PimpleTest.php | 610 + .../src/Pimple/Tests/Psr11/ContainerTest.php | 76 + .../Pimple/Tests/Psr11/ServiceLocatorTest.php | 131 + .../src/Pimple/Tests/ServiceIteratorTest.php | 52 + vendor/psr/cache/CHANGELOG.md | 16 + vendor/psr/cache/LICENSE.txt | 19 + vendor/psr/cache/README.md | 9 + vendor/psr/cache/composer.json | 25 + vendor/psr/cache/src/CacheException.php | 10 + vendor/psr/cache/src/CacheItemInterface.php | 105 + .../psr/cache/src/CacheItemPoolInterface.php | 138 + .../cache/src/InvalidArgumentException.php | 13 + vendor/psr/container/.gitignore | 3 + vendor/psr/container/LICENSE | 21 + vendor/psr/container/README.md | 5 + vendor/psr/container/composer.json | 27 + .../src/ContainerExceptionInterface.php | 13 + .../psr/container/src/ContainerInterface.php | 37 + .../src/NotFoundExceptionInterface.php | 13 + vendor/psr/event-dispatcher/.editorconfig | 15 + vendor/psr/event-dispatcher/.gitignore | 2 + vendor/psr/event-dispatcher/LICENSE | 21 + vendor/psr/event-dispatcher/README.md | 6 + vendor/psr/event-dispatcher/composer.json | 26 + .../src/EventDispatcherInterface.php | 21 + .../src/ListenerProviderInterface.php | 19 + .../src/StoppableEventInterface.php | 26 + vendor/psr/http-client/CHANGELOG.md | 23 + vendor/psr/http-client/LICENSE | 19 + vendor/psr/http-client/README.md | 12 + vendor/psr/http-client/composer.json | 27 + .../src/ClientExceptionInterface.php | 10 + .../psr/http-client/src/ClientInterface.php | 20 + .../src/NetworkExceptionInterface.php | 24 + .../src/RequestExceptionInterface.php | 24 + vendor/psr/http-message/CHANGELOG.md | 36 + vendor/psr/http-message/LICENSE | 19 + vendor/psr/http-message/README.md | 13 + vendor/psr/http-message/composer.json | 26 + .../psr/http-message/src/MessageInterface.php | 187 + .../psr/http-message/src/RequestInterface.php | 129 + .../http-message/src/ResponseInterface.php | 68 + .../src/ServerRequestInterface.php | 261 + .../psr/http-message/src/StreamInterface.php | 158 + .../src/UploadedFileInterface.php | 123 + vendor/psr/http-message/src/UriInterface.php | 323 + vendor/psr/log/LICENSE | 19 + vendor/psr/log/Psr/Log/AbstractLogger.php | 128 + .../log/Psr/Log/InvalidArgumentException.php | 7 + vendor/psr/log/Psr/Log/LogLevel.php | 18 + .../psr/log/Psr/Log/LoggerAwareInterface.php | 18 + vendor/psr/log/Psr/Log/LoggerAwareTrait.php | 26 + vendor/psr/log/Psr/Log/LoggerInterface.php | 125 + vendor/psr/log/Psr/Log/LoggerTrait.php | 142 + vendor/psr/log/Psr/Log/NullLogger.php | 30 + vendor/psr/log/Psr/Log/Test/DummyTest.php | 18 + .../log/Psr/Log/Test/LoggerInterfaceTest.php | 138 + vendor/psr/log/Psr/Log/Test/TestLogger.php | 147 + vendor/psr/log/README.md | 58 + vendor/psr/log/composer.json | 26 + vendor/psr/simple-cache/.editorconfig | 12 + vendor/psr/simple-cache/LICENSE.md | 21 + vendor/psr/simple-cache/README.md | 8 + vendor/psr/simple-cache/composer.json | 25 + .../psr/simple-cache/src/CacheException.php | 10 + .../psr/simple-cache/src/CacheInterface.php | 114 + .../src/InvalidArgumentException.php | 13 + vendor/qcloudsms/qcloudsms_php/.gitignore | 5 + vendor/qcloudsms/qcloudsms_php/LICENSE | 21 + vendor/qcloudsms/qcloudsms_php/README.md | 338 + vendor/qcloudsms/qcloudsms_php/composer.json | 15 + vendor/qcloudsms/qcloudsms_php/demo/README.md | 12 + .../qcloudsms_php/demo/composer/README.md | 22 + .../qcloudsms_php/demo/composer/app.php | 202 + .../qcloudsms_php/demo/composer/composer.json | 16 + .../qcloudsms_php/demo/simple/app.php | 201 + .../qcloudsms_php/docs/PROJECT_VERSION | 1 + .../qcloudsms/qcloudsms_php/docs/Qcloud.html | 94 + .../qcloudsms_php/docs/Qcloud/Sms.html | 185 + .../docs/Qcloud/Sms/FileVoiceSender.html | 231 + .../Qcloud/Sms/SmsMobileStatusPuller.html | 301 + .../docs/Qcloud/Sms/SmsMultiSender.html | 317 + .../docs/Qcloud/Sms/SmsSenderUtil.html | 675 + .../docs/Qcloud/Sms/SmsSingleSender.html | 316 + .../docs/Qcloud/Sms/SmsStatusPuller.html | 261 + .../docs/Qcloud/Sms/SmsVoicePromptSender.html | 236 + .../Qcloud/Sms/SmsVoiceVerifyCodeSender.html | 231 + .../docs/Qcloud/Sms/TtsVoiceSender.html | 236 + .../docs/Qcloud/Sms/VoiceFileUploader.html | 235 + .../qcloudsms/qcloudsms_php/docs/SAMI_VERSION | 1 + .../qcloudsms/qcloudsms_php/docs/classes.html | 173 + .../docs/css/bootstrap-theme.min.css | 10 + .../qcloudsms_php/docs/css/bootstrap.min.css | 10 + .../qcloudsms/qcloudsms_php/docs/css/sami.css | 459 + .../qcloudsms_php/docs/doc-index.html | 161 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../qcloudsms_php/docs/images/image1.png | Bin 0 -> 36346 bytes .../qcloudsms_php/docs/images/image2.png | Bin 0 -> 9368 bytes .../qcloudsms_php/docs/images/image3.png | Bin 0 -> 3498 bytes .../qcloudsms_php/docs/images/image4.png | Bin 0 -> 27388 bytes .../qcloudsms_php/docs/images/image5.png | Bin 0 -> 28991 bytes .../qcloudsms_php/docs/images/image6.png | Bin 0 -> 37574 bytes .../qcloudsms_php/docs/images/image7.png | Bin 0 -> 58416 bytes .../qcloudsms_php/docs/images/image8.png | Bin 0 -> 89942 bytes .../qcloudsms_php/docs/images/image9.png | Bin 0 -> 4094 bytes .../qcloudsms/qcloudsms_php/docs/index.html | 90 + .../qcloudsms_php/docs/interfaces.html | 83 + .../qcloudsms_php/docs/js/bootstrap.min.js | 12 + .../docs/js/jquery-1.11.1.min.js | 4 + .../qcloudsms_php/docs/js/typeahead.min.js | 6 + .../qcloudsms_php/docs/namespaces.html | 90 + .../qcloudsms_php/docs/opensearch.xml | 0 .../qcloudsms_php/docs/renderer.index | 1 + vendor/qcloudsms/qcloudsms_php/docs/sami.js | 248 + .../qcloudsms/qcloudsms_php/docs/search.html | 154 + .../qcloudsms/qcloudsms_php/docs/traits.html | 82 + vendor/qcloudsms/qcloudsms_php/gendoc.sh | 4 + .../qcloudsms/qcloudsms_php/sami_config.php | 17 + .../qcloudsms_php/src/FileVoiceSender.php | 69 + .../src/SmsMobileStatusPuller.php | 91 + .../qcloudsms_php/src/SmsMultiSender.php | 99 + .../qcloudsms_php/src/SmsSenderUtil.php | 208 + .../qcloudsms_php/src/SmsSingleSender.php | 107 + .../qcloudsms_php/src/SmsStatusPuller.php | 75 + .../src/SmsVoicePromptSender.php | 72 + .../src/SmsVoiceVerifyCodeSender.php | 67 + .../qcloudsms_php/src/TtsVoiceSender.php | 71 + .../qcloudsms_php/src/VoiceFileUploader.php | 66 + vendor/qcloudsms/qcloudsms_php/src/index.php | 13 + vendor/ralouphie/getallheaders/LICENSE | 21 + vendor/ralouphie/getallheaders/README.md | 27 + vendor/ralouphie/getallheaders/composer.json | 26 + .../getallheaders/src/getallheaders.php | 46 + vendor/symfony/cache-contracts/.gitignore | 3 + vendor/symfony/cache-contracts/CHANGELOG.md | 5 + .../cache-contracts/CacheInterface.php | 57 + vendor/symfony/cache-contracts/CacheTrait.php | 78 + .../cache-contracts/CallbackInterface.php | 30 + .../symfony/cache-contracts/ItemInterface.php | 65 + vendor/symfony/cache-contracts/LICENSE | 19 + vendor/symfony/cache-contracts/README.md | 9 + .../TagAwareCacheInterface.php | 38 + vendor/symfony/cache-contracts/composer.json | 38 + .../symfony/cache/Adapter/AbstractAdapter.php | 200 + .../cache/Adapter/AbstractTagAwareAdapter.php | 324 + .../cache/Adapter/AdapterInterface.php | 47 + vendor/symfony/cache/Adapter/ApcuAdapter.php | 122 + vendor/symfony/cache/Adapter/ArrayAdapter.php | 398 + vendor/symfony/cache/Adapter/ChainAdapter.php | 330 + .../cache/Adapter/CouchbaseBucketAdapter.php | 252 + .../symfony/cache/Adapter/DoctrineAdapter.php | 105 + .../cache/Adapter/FilesystemAdapter.php | 29 + .../Adapter/FilesystemTagAwareAdapter.php | 239 + .../cache/Adapter/MemcachedAdapter.php | 354 + vendor/symfony/cache/Adapter/NullAdapter.php | 154 + .../cache/Adapter/ParameterNormalizer.php | 35 + vendor/symfony/cache/Adapter/PdoAdapter.php | 522 + .../symfony/cache/Adapter/PhpArrayAdapter.php | 437 + .../symfony/cache/Adapter/PhpFilesAdapter.php | 330 + vendor/symfony/cache/Adapter/ProxyAdapter.php | 266 + vendor/symfony/cache/Adapter/Psr16Adapter.php | 86 + vendor/symfony/cache/Adapter/RedisAdapter.php | 30 + .../cache/Adapter/RedisTagAwareAdapter.php | 294 + .../symfony/cache/Adapter/TagAwareAdapter.php | 423 + .../Adapter/TagAwareAdapterInterface.php | 33 + .../cache/Adapter/TraceableAdapter.php | 295 + .../Adapter/TraceableTagAwareAdapter.php | 38 + vendor/symfony/cache/CHANGELOG.md | 95 + vendor/symfony/cache/CacheItem.php | 192 + .../DataCollector/CacheDataCollector.php | 189 + .../CacheCollectorPass.php | 81 + .../CachePoolClearerPass.php | 48 + .../DependencyInjection/CachePoolPass.php | 259 + .../CachePoolPrunerPass.php | 60 + vendor/symfony/cache/DoctrineProvider.php | 114 + .../cache/Exception/CacheException.php | 25 + .../Exception/InvalidArgumentException.php | 25 + .../cache/Exception/LogicException.php | 25 + vendor/symfony/cache/LICENSE | 19 + vendor/symfony/cache/LockRegistry.php | 155 + .../cache/Marshaller/DefaultMarshaller.php | 99 + .../cache/Marshaller/DeflateMarshaller.php | 53 + .../cache/Marshaller/MarshallerInterface.php | 40 + .../cache/Marshaller/SodiumMarshaller.php | 80 + .../cache/Marshaller/TagAwareMarshaller.php | 89 + .../Messenger/EarlyExpirationDispatcher.php | 61 + .../Messenger/EarlyExpirationHandler.php | 80 + .../Messenger/EarlyExpirationMessage.php | 97 + vendor/symfony/cache/PruneableInterface.php | 23 + vendor/symfony/cache/Psr16Cache.php | 280 + vendor/symfony/cache/README.md | 19 + vendor/symfony/cache/ResettableInterface.php | 21 + .../cache/Traits/AbstractAdapterTrait.php | 401 + .../symfony/cache/Traits/ContractsTrait.php | 97 + .../cache/Traits/FilesystemCommonTrait.php | 196 + .../symfony/cache/Traits/FilesystemTrait.php | 124 + .../symfony/cache/Traits/MemcachedTrait.php | 343 + vendor/symfony/cache/Traits/ProxyTrait.php | 43 + .../cache/Traits/RedisClusterProxy.php | 63 + vendor/symfony/cache/Traits/RedisProxy.php | 65 + vendor/symfony/cache/Traits/RedisTrait.php | 531 + vendor/symfony/cache/composer.json | 58 + .../symfony/deprecation-contracts/.gitignore | 3 + .../deprecation-contracts/CHANGELOG.md | 5 + vendor/symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + .../event-dispatcher-contracts/.gitignore | 3 + .../event-dispatcher-contracts/CHANGELOG.md | 5 + .../event-dispatcher-contracts/Event.php | 54 + .../EventDispatcherInterface.php | 31 + .../event-dispatcher-contracts/LICENSE | 19 + .../event-dispatcher-contracts/README.md | 9 + .../event-dispatcher-contracts/composer.json | 38 + vendor/symfony/event-dispatcher/CHANGELOG.md | 81 + .../Debug/TraceableEventDispatcher.php | 363 + .../Debug/WrappedListener.php | 127 + .../AddEventAliasesPass.php | 42 + .../RegisterListenersPass.php | 226 + .../event-dispatcher/EventDispatcher.php | 280 + .../EventDispatcherInterface.php | 75 + .../EventSubscriberInterface.php | 49 + .../symfony/event-dispatcher/GenericEvent.php | 170 + .../ImmutableEventDispatcher.php | 91 + vendor/symfony/event-dispatcher/LICENSE | 19 + .../LegacyEventDispatcherProxy.php | 31 + vendor/symfony/event-dispatcher/README.md | 15 + vendor/symfony/event-dispatcher/composer.json | 52 + .../symfony/http-foundation/AcceptHeader.php | 168 + .../http-foundation/AcceptHeaderItem.php | 177 + .../http-foundation/BinaryFileResponse.php | 361 + vendor/symfony/http-foundation/CHANGELOG.md | 278 + vendor/symfony/http-foundation/Cookie.php | 424 + .../Exception/BadRequestException.php | 19 + .../Exception/ConflictingHeadersException.php | 21 + .../Exception/JsonException.php | 21 + .../Exception/RequestExceptionInterface.php | 21 + .../SuspiciousOperationException.php | 20 + .../ExpressionRequestMatcher.php | 47 + .../File/Exception/AccessDeniedException.php | 25 + .../Exception/CannotWriteFileException.php | 21 + .../File/Exception/ExtensionFileException.php | 21 + .../File/Exception/FileException.php | 21 + .../File/Exception/FileNotFoundException.php | 25 + .../File/Exception/FormSizeFileException.php | 21 + .../File/Exception/IniSizeFileException.php | 21 + .../File/Exception/NoFileException.php | 21 + .../File/Exception/NoTmpDirFileException.php | 21 + .../File/Exception/PartialFileException.php | 21 + .../Exception/UnexpectedTypeException.php | 20 + .../File/Exception/UploadException.php | 21 + vendor/symfony/http-foundation/File/File.php | 149 + .../symfony/http-foundation/File/Stream.php | 28 + .../http-foundation/File/UploadedFile.php | 287 + vendor/symfony/http-foundation/FileBag.php | 142 + vendor/symfony/http-foundation/HeaderBag.php | 288 + .../symfony/http-foundation/HeaderUtils.php | 295 + vendor/symfony/http-foundation/InputBag.php | 113 + vendor/symfony/http-foundation/IpUtils.php | 185 + .../symfony/http-foundation/JsonResponse.php | 221 + vendor/symfony/http-foundation/LICENSE | 19 + .../symfony/http-foundation/ParameterBag.php | 224 + vendor/symfony/http-foundation/README.md | 14 + .../AbstractRequestRateLimiter.php | 59 + .../RequestRateLimiterInterface.php | 32 + .../http-foundation/RedirectResponse.php | 109 + vendor/symfony/http-foundation/Request.php | 2143 +++ .../http-foundation/RequestMatcher.php | 192 + .../RequestMatcherInterface.php | 27 + .../symfony/http-foundation/RequestStack.php | 103 + vendor/symfony/http-foundation/Response.php | 1273 ++ .../http-foundation/ResponseHeaderBag.php | 291 + vendor/symfony/http-foundation/ServerBag.php | 99 + .../Session/Attribute/AttributeBag.php | 148 + .../Attribute/AttributeBagInterface.php | 61 + .../Attribute/NamespacedAttributeBag.php | 157 + .../Session/Flash/AutoExpireFlashBag.php | 161 + .../Session/Flash/FlashBag.php | 152 + .../Session/Flash/FlashBagInterface.php | 88 + .../http-foundation/Session/Session.php | 281 + .../Session/SessionBagInterface.php | 46 + .../Session/SessionBagProxy.php | 95 + .../Session/SessionInterface.php | 166 + .../http-foundation/Session/SessionUtils.php | 59 + .../Handler/AbstractSessionHandler.php | 150 + .../Storage/Handler/IdentityMarshaller.php | 42 + .../Handler/MarshallingSessionHandler.php | 100 + .../Handler/MemcachedSessionHandler.php | 119 + .../Handler/MigratingSessionHandler.php | 124 + .../Storage/Handler/MongoDbSessionHandler.php | 187 + .../Handler/NativeFileSessionHandler.php | 55 + .../Storage/Handler/NullSessionHandler.php | 76 + .../Storage/Handler/PdoSessionHandler.php | 899 ++ .../Storage/Handler/RedisSessionHandler.php | 132 + .../Storage/Handler/SessionHandlerFactory.php | 85 + .../Storage/Handler/StrictSessionHandler.php | 103 + .../Session/Storage/MetadataBag.php | 166 + .../Storage/MockArraySessionStorage.php | 252 + .../Storage/MockFileSessionStorage.php | 160 + .../Session/Storage/NativeSessionStorage.php | 467 + .../Storage/PhpBridgeSessionStorage.php | 64 + .../Session/Storage/Proxy/AbstractProxy.php | 118 + .../Storage/Proxy/SessionHandlerProxy.php | 101 + .../Storage/SessionStorageInterface.php | 131 + .../http-foundation/StreamedResponse.php | 139 + .../Constraint/RequestAttributeValueSame.php | 55 + .../Constraint/ResponseCookieValueSame.php | 85 + .../Test/Constraint/ResponseHasCookie.php | 77 + .../Test/Constraint/ResponseHasHeader.php | 53 + .../Test/Constraint/ResponseHeaderSame.php | 55 + .../Test/Constraint/ResponseIsRedirected.php | 56 + .../Test/Constraint/ResponseIsSuccessful.php | 56 + .../Constraint/ResponseStatusCodeSame.php | 63 + vendor/symfony/http-foundation/UrlHelper.php | 102 + vendor/symfony/http-foundation/composer.json | 40 + vendor/symfony/polyfill-mbstring/LICENSE | 19 + vendor/symfony/polyfill-mbstring/Mbstring.php | 869 ++ vendor/symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/lowerCase.php | 1397 ++ .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1414 ++ .../symfony/polyfill-mbstring/bootstrap.php | 147 + .../symfony/polyfill-mbstring/bootstrap80.php | 143 + .../symfony/polyfill-mbstring/composer.json | 38 + vendor/symfony/polyfill-php80/LICENSE | 19 + vendor/symfony/polyfill-php80/Php80.php | 105 + vendor/symfony/polyfill-php80/README.md | 24 + .../Resources/stubs/Attribute.php | 22 + .../Resources/stubs/Stringable.php | 11 + .../Resources/stubs/UnhandledMatchError.php | 5 + .../Resources/stubs/ValueError.php | 5 + vendor/symfony/polyfill-php80/bootstrap.php | 42 + vendor/symfony/polyfill-php80/composer.json | 40 + .../psr-http-message-bridge/.gitignore | 5 + .../psr-http-message-bridge/.php_cs.dist | 24 + .../psr-http-message-bridge/.travis.yml | 48 + .../psr-http-message-bridge/CHANGELOG.md | 56 + .../Factory/HttpFoundationFactory.php | 248 + .../Factory/PsrHttpFactory.php | 171 + .../Factory/UploadedFile.php | 73 + .../HttpFoundationFactoryInterface.php | 39 + .../HttpMessageFactoryInterface.php | 39 + .../symfony/psr-http-message-bridge/LICENSE | 19 + .../symfony/psr-http-message-bridge/README.md | 20 + .../AbstractHttpMessageFactoryTest.php | 234 + .../Factory/HttpFoundationFactoryTest.php | 272 + .../Tests/Factory/PsrHttpFactoryTest.php | 30 + .../Tests/Fixtures/Message.php | 93 + .../Tests/Fixtures/Response.php | 45 + .../Tests/Fixtures/ServerRequest.php | 141 + .../Tests/Fixtures/Stream.php | 100 + .../Tests/Fixtures/UploadedFile.php | 65 + .../Tests/Fixtures/Uri.php | 135 + .../Tests/Functional/CovertTest.php | 241 + .../psr-http-message-bridge/composer.json | 41 + .../psr-http-message-bridge/phpunit.xml.dist | 29 + vendor/symfony/service-contracts/.gitignore | 3 + .../service-contracts/Attribute/Required.php | 27 + vendor/symfony/service-contracts/CHANGELOG.md | 5 + vendor/symfony/service-contracts/LICENSE | 19 + vendor/symfony/service-contracts/README.md | 9 + .../service-contracts/ResetInterface.php | 30 + .../service-contracts/ServiceLocatorTrait.php | 126 + .../ServiceProviderInterface.php | 36 + .../ServiceSubscriberInterface.php | 53 + .../ServiceSubscriberTrait.php | 63 + .../Test/ServiceLocatorTest.php | 92 + .../symfony/service-contracts/composer.json | 38 + vendor/symfony/var-exporter/CHANGELOG.md | 12 + .../Exception/ClassNotFoundException.php | 20 + .../Exception/ExceptionInterface.php | 16 + .../NotInstantiableTypeException.php | 20 + vendor/symfony/var-exporter/Instantiator.php | 94 + .../var-exporter/Internal/Exporter.php | 405 + .../var-exporter/Internal/Hydrator.php | 151 + .../var-exporter/Internal/Reference.php | 30 + .../var-exporter/Internal/Registry.php | 146 + .../symfony/var-exporter/Internal/Values.php | 27 + vendor/symfony/var-exporter/LICENSE | 19 + vendor/symfony/var-exporter/README.md | 38 + vendor/symfony/var-exporter/VarExporter.php | 117 + vendor/symfony/var-exporter/composer.json | 32 + 2746 files changed, 331806 insertions(+) create mode 100644 .gitignore create mode 100644 .user.ini create mode 100644 404.html create mode 100644 Dockerfile create mode 100644 INSTALL.TXT create mode 100644 LICENSE.TXT create mode 100644 README.md create mode 100644 app/.ecoder_permissions_check.txt create mode 100644 app/article/.ecoder_permissions_check.txt create mode 100644 app/article/about.php create mode 100644 app/article/action/add.php create mode 100644 app/article/action/admin.php create mode 100644 app/article/action/admin/article.php create mode 100644 app/article/action/admin/cate.php create mode 100644 app/article/action/admin/comment.php create mode 100644 app/article/action/admin/options.php create mode 100644 app/article/action/admin/permissions.php create mode 100644 app/article/action/admin/post.php create mode 100644 app/article/action/admin/sitemap.php create mode 100644 app/article/action/ajax.php create mode 100644 app/article/action/api.php create mode 100644 app/article/action/api/index.php create mode 100644 app/article/action/api/list.php create mode 100644 app/article/action/cate.php create mode 100644 app/article/action/comment.php create mode 100644 app/article/action/common.php create mode 100644 app/article/action/delete.php create mode 100644 app/article/action/edit.php create mode 100644 app/article/action/index.php create mode 100644 app/article/action/my.php create mode 100644 app/article/action/my/common.php create mode 100644 app/article/action/my/index.php create mode 100644 app/article/action/recommend.php create mode 100644 app/article/action/score.php create mode 100644 app/article/action/show.php create mode 100644 app/article/action/tag.php create mode 100644 app/article/action/tags.php create mode 100644 app/article/class.article.php create mode 100644 app/article/config.php create mode 100644 app/article/html/add.html create mode 100644 app/article/html/admin/article_list.html create mode 100644 app/article/html/admin/cate_add.html create mode 100644 app/article/html/admin/cate_edit.html create mode 100644 app/article/html/admin/cate_list.html create mode 100644 app/article/html/admin/menu.html create mode 100644 app/article/html/admin/options.html create mode 100644 app/article/html/admin/permissions.html create mode 100644 app/article/html/admin/post_list.html create mode 100644 app/article/html/cate.html create mode 100644 app/article/html/edit.html create mode 100644 app/article/html/index.html create mode 100644 app/article/html/menu.html create mode 100644 app/article/html/my/index.html create mode 100644 app/article/html/show.html create mode 100644 app/article/html/tag.html create mode 100644 app/article/html/tags.html create mode 100644 app/article/icon.png create mode 100644 app/article/js/admin.js create mode 100644 app/article/js/extend.func.js create mode 100644 app/article/skin/style.css create mode 100644 app/article/skins/default/style.css create mode 100644 app/attach/about.php create mode 100644 app/attach/action/album.php create mode 100644 app/attach/action/comment.php create mode 100644 app/attach/action/down.php create mode 100644 app/attach/action/edit.php create mode 100644 app/attach/action/editdo.php create mode 100644 app/attach/action/editor.php create mode 100644 app/attach/action/index.php create mode 100644 app/attach/action/new.php create mode 100644 app/attach/action/show.php create mode 100644 app/attach/action/upload.php create mode 100644 app/attach/class.attach.php create mode 100644 app/attach/config.php create mode 100644 app/attach/html/add.html create mode 100644 app/attach/html/album.html create mode 100644 app/attach/html/album_edit.html create mode 100644 app/attach/html/create.html create mode 100644 app/attach/html/edit.html create mode 100644 app/attach/html/editor.html create mode 100644 app/attach/html/index.html create mode 100644 app/attach/html/show.html create mode 100644 app/attach/html/upload.html create mode 100644 app/attach/js/extend.func.js create mode 100644 app/attach/skins/default/attach_album.png create mode 100644 app/attach/skins/default/style.css create mode 100644 app/comment/about.php create mode 100644 app/comment/action/add.php create mode 100644 app/comment/action/admin.php create mode 100644 app/comment/action/admin/comment.php create mode 100644 app/comment/action/admin/options.php create mode 100644 app/comment/action/api.php create mode 100644 app/comment/action/delete.php create mode 100644 app/comment/action/my.php create mode 100644 app/comment/action/my/index.php create mode 100644 app/comment/action/recomment.php create mode 100644 app/comment/class.comment.php create mode 100644 app/comment/config.php create mode 100644 app/comment/html/admin/comment_list.html create mode 100644 app/comment/html/admin/menu.html create mode 100644 app/comment/html/admin/options.html create mode 100644 app/comment/html/my/index.html create mode 100644 app/comment/html/recomment.html create mode 100644 app/friendlinks/about.php create mode 100644 app/friendlinks/action/admin.php create mode 100644 app/friendlinks/action/admin/options.php create mode 100644 app/friendlinks/action/admin/topic.php create mode 100644 app/friendlinks/action/create.php create mode 100644 app/friendlinks/action/index.php create mode 100644 app/friendlinks/class.friendlinks.php create mode 100644 app/friendlinks/config.php create mode 100644 app/friendlinks/html/admin/menu.html create mode 100644 app/friendlinks/html/admin/options.html create mode 100644 app/friendlinks/html/admin/topic_list.html create mode 100644 app/friendlinks/html/create.html create mode 100644 app/friendlinks/html/index.html create mode 100644 app/friendlinks/js/admin.js create mode 100644 app/friendlinks/js/extend.func.js create mode 100644 app/friendlinks/js/share.min.js create mode 100644 app/friendlinks/skins/default/group.jpg create mode 100644 app/friendlinks/skins/default/share.min.css create mode 100644 app/friendlinks/skins/default/style.css create mode 100644 app/friendlinks/skins/fonts/iconfont.ttf create mode 100644 app/friendlinks/skins/fonts/iconfont.woff create mode 100644 app/group/about.php create mode 100644 app/group/action/add.php create mode 100644 app/group/action/admin.php create mode 100644 app/group/action/admin/album.php create mode 100644 app/group/action/admin/cate.php create mode 100644 app/group/action/admin/group.php create mode 100644 app/group/action/admin/options.php create mode 100644 app/group/action/admin/permissions.php create mode 100644 app/group/action/admin/topic.php create mode 100644 app/group/action/admin/upuser.php create mode 100644 app/group/action/ajax.php create mode 100644 app/group/action/all.php create mode 100644 app/group/action/api.php create mode 100644 app/group/action/api/index.php create mode 100644 app/group/action/audit.php create mode 100644 app/group/action/cate.php create mode 100644 app/group/action/comment.php create mode 100644 app/group/action/create.php create mode 100644 app/group/action/delete.php create mode 100644 app/group/action/do.php create mode 100644 app/group/action/edit.php create mode 100644 app/group/action/index.php create mode 100644 app/group/action/kicked.php create mode 100644 app/group/action/my.php create mode 100644 app/group/action/my/common.php create mode 100644 app/group/action/my/index.php create mode 100644 app/group/action/my/topic.php create mode 100644 app/group/action/plugin.php create mode 100644 app/group/action/show.php create mode 100644 app/group/action/tag.php create mode 100644 app/group/action/tags.php create mode 100644 app/group/action/topic.php create mode 100644 app/group/action/topiccollect.php create mode 100644 app/group/action/topicedit.php create mode 100644 app/group/action/topicmove.php create mode 100644 app/group/action/user.php create mode 100644 app/group/class.group.php create mode 100644 app/group/config.php create mode 100644 app/group/html/add.html create mode 100644 app/group/html/admin/album_list.html create mode 100644 app/group/html/admin/cate_add.html create mode 100644 app/group/html/admin/cate_edit.html create mode 100644 app/group/html/admin/cate_list.html create mode 100644 app/group/html/admin/group_list.html create mode 100644 app/group/html/admin/group_recommend.html create mode 100644 app/group/html/admin/menu.html create mode 100644 app/group/html/admin/options.html create mode 100644 app/group/html/admin/permissions.html create mode 100644 app/group/html/admin/topic_delete.html create mode 100644 app/group/html/admin/topic_edit.html create mode 100644 app/group/html/admin/topic_edit_view.html create mode 100644 app/group/html/admin/topic_list.html create mode 100644 app/group/html/ajax_topic.html create mode 100644 app/group/html/audit.html create mode 100644 app/group/html/create.html create mode 100644 app/group/html/edit_base.html create mode 100644 app/group/html/edit_cate.html create mode 100644 app/group/html/edit_icon.html create mode 100644 app/group/html/edit_isadmin.html create mode 100644 app/group/html/edit_transfer.html create mode 100644 app/group/html/edit_type.html create mode 100644 app/group/html/edit_user.html create mode 100644 app/group/html/edit_useraudit.html create mode 100644 app/group/html/edit_xbar.html create mode 100644 app/group/html/group_ajax.html create mode 100644 app/group/html/group_ajax_more.html create mode 100644 app/group/html/group_isopen.html create mode 100644 app/group/html/index.html create mode 100644 app/group/html/my/index.html create mode 100644 app/group/html/my/topic.html create mode 100644 app/group/html/show.html create mode 100644 app/group/html/tag.html create mode 100644 app/group/html/tags.html create mode 100644 app/group/html/topic.html create mode 100644 app/group/html/topic_collect.html create mode 100644 app/group/html/topic_edit.html create mode 100644 app/group/html/topic_isopen.html create mode 100644 app/group/html/topic_move.html create mode 100644 app/group/html/topic_xuqi.html create mode 100644 app/group/html/user.html create mode 100644 app/group/icon.png create mode 100644 app/group/js/admin.js create mode 100644 app/group/js/extend.func.js create mode 100644 app/group/skin/group.jpg create mode 100644 app/group/skin/style.css create mode 100644 app/group/skins/default/group.jpg create mode 100644 app/group/skins/default/style.css create mode 100644 app/home/about.php create mode 100644 app/home/action/admin.php create mode 100644 app/home/action/admin/info.php create mode 100644 app/home/action/admin/options.php create mode 100644 app/home/action/index.php create mode 100644 app/home/action/info.php create mode 100644 app/home/action/my.php create mode 100644 app/home/action/plugin.php create mode 100644 app/home/action/report.php create mode 100644 app/home/action/theme.php create mode 100644 app/home/class.home.php create mode 100644 app/home/config.php create mode 100644 app/home/html/admin/info_add.html create mode 100644 app/home/html/admin/info_edit.html create mode 100644 app/home/html/admin/info_list.html create mode 100644 app/home/html/admin/menu.html create mode 100644 app/home/html/admin/options.html create mode 100644 app/home/html/index.html create mode 100644 app/home/html/info.html create mode 100644 app/home/html/menu.html create mode 100644 app/home/html/my.html create mode 100644 app/home/html/report.html create mode 100644 app/home/html/theme.html create mode 100644 app/home/icon.png create mode 100644 app/home/js/admin.js create mode 100644 app/home/js/extend.func.js create mode 100644 app/home/skin/style.css create mode 100644 app/home/skins/default/style.css create mode 100644 app/index.php create mode 100644 app/location/about.php create mode 100644 app/location/action/admin.php create mode 100644 app/location/action/admin/location.php create mode 100644 app/location/action/admin/options.php create mode 100644 app/location/action/ajax.php create mode 100644 app/location/action/all.php create mode 100644 app/location/action/index.php create mode 100644 app/location/action/my.php create mode 100644 app/location/action/my/common.php create mode 100644 app/location/action/my/index.php create mode 100644 app/location/action/show.php create mode 100644 app/location/class.location.php create mode 100644 app/location/config.php create mode 100644 app/location/html/admin/location_add.html create mode 100644 app/location/html/admin/location_edit.html create mode 100644 app/location/html/admin/location_list.html create mode 100644 app/location/html/admin/menu.html create mode 100644 app/location/html/admin/options.html create mode 100644 app/location/html/all.html create mode 100644 app/location/html/index.html create mode 100644 app/location/html/my/index.html create mode 100644 app/location/html/show.html create mode 100644 app/location/js/admin.js create mode 100644 app/location/js/extend.func.js create mode 100644 app/location/skins/default/style.css create mode 100644 app/mail/about.php create mode 100644 app/mail/action/admin.php create mode 100644 app/mail/action/admin/do.php create mode 100644 app/mail/action/admin/options.php create mode 100644 app/mail/class.mail.php create mode 100644 app/mail/config.php create mode 100644 app/mail/html/admin/menu.html create mode 100644 app/mail/html/admin/options.html create mode 100644 app/mail/html/admin/options_sms.html create mode 100644 app/message/about.php create mode 100644 app/message/action/admin.php create mode 100644 app/message/action/admin/msg.php create mode 100644 app/message/action/admin/options.php create mode 100644 app/message/action/api.php create mode 100644 app/message/action/api/index.php create mode 100644 app/message/action/common.php create mode 100644 app/message/action/friend.php create mode 100644 app/message/action/index.php create mode 100644 app/message/action/msgbox.php create mode 100644 app/message/action/my.php create mode 100644 app/message/action/newmsg.php create mode 100644 app/message/action/read.php create mode 100644 app/message/action/sendbox.php create mode 100644 app/message/action/sendmsg.php create mode 100644 app/message/action/system.php create mode 100644 app/message/action/user.php create mode 100644 app/message/class.message.php create mode 100644 app/message/config.php create mode 100644 app/message/html/admin/menu.html create mode 100644 app/message/html/admin/msg_list.html create mode 100644 app/message/html/admin/options.html create mode 100644 app/message/html/friend.html create mode 100644 app/message/html/menu.html create mode 100644 app/message/html/msgbox.html create mode 100644 app/message/html/my.html create mode 100644 app/message/html/sendbox.html create mode 100644 app/message/html/system.html create mode 100644 app/message/html/user.html create mode 100644 app/message/js/extend.func.js create mode 100644 app/message/skin/style.css create mode 100644 app/message/skins/default/loading.gif create mode 100644 app/message/skins/default/style.css create mode 100644 app/message/skins/default/system.gif create mode 100644 app/my/about.php create mode 100644 app/my/action/admin.php create mode 100644 app/my/action/admin/options.php create mode 100644 app/my/action/common.php create mode 100644 app/my/action/index.php create mode 100644 app/my/action/invite.php create mode 100644 app/my/action/score.php create mode 100644 app/my/action/setting.php create mode 100644 app/my/class.my.php create mode 100644 app/my/config.php create mode 100644 app/my/html/admin/options.html create mode 100644 app/my/html/index.html create mode 100644 app/my/html/invite.html create mode 100644 app/my/html/score.html create mode 100644 app/my/html/setting_base.html create mode 100644 app/my/html/setting_city.html create mode 100644 app/my/html/setting_cut.html create mode 100644 app/my/html/setting_email.html create mode 100644 app/my/html/setting_face.html create mode 100644 app/my/html/setting_menu.html create mode 100644 app/my/html/setting_pwd.html create mode 100644 app/my/html/setting_tag.html create mode 100644 app/my/icon.png create mode 100644 app/my/js/admin.js create mode 100644 app/my/js/extend.func.js create mode 100644 app/my/skin/style.css create mode 100644 app/my/skins/default/style.css create mode 100644 app/photo/about.php create mode 100644 app/photo/action/admin.php create mode 100644 app/photo/action/admin/album.php create mode 100644 app/photo/action/admin/comment.php create mode 100644 app/photo/action/admin/options.php create mode 100644 app/photo/action/admin/permissions.php create mode 100644 app/photo/action/admin/photo.php create mode 100644 app/photo/action/ajax.php create mode 100644 app/photo/action/album.php create mode 100644 app/photo/action/api.php create mode 100644 app/photo/action/api/index.php create mode 100644 app/photo/action/create.php create mode 100644 app/photo/action/delete.php create mode 100644 app/photo/action/do.php create mode 100644 app/photo/action/edit.php create mode 100644 app/photo/action/index.php create mode 100644 app/photo/action/my.php create mode 100644 app/photo/action/my/common.php create mode 100644 app/photo/action/my/index.php create mode 100644 app/photo/action/show.php create mode 100644 app/photo/action/upload.php create mode 100644 app/photo/action/user.php create mode 100644 app/photo/class.photo.php create mode 100644 app/photo/config.php create mode 100644 app/photo/html/admin/album_list.html create mode 100644 app/photo/html/admin/album_photo.html create mode 100644 app/photo/html/admin/comment_list.html create mode 100644 app/photo/html/admin/menu.html create mode 100644 app/photo/html/admin/options.html create mode 100644 app/photo/html/admin/permissions.html create mode 100644 app/photo/html/admin/photo_list.html create mode 100644 app/photo/html/album.html create mode 100644 app/photo/html/album_edit.html create mode 100644 app/photo/html/album_info.html create mode 100644 app/photo/html/create.html create mode 100644 app/photo/html/index.html create mode 100644 app/photo/html/menu.html create mode 100644 app/photo/html/my/index.html create mode 100644 app/photo/html/photo_edit.html create mode 100644 app/photo/html/show.html create mode 100644 app/photo/html/upload.html create mode 100644 app/photo/html/user.html create mode 100644 app/photo/js/admin.js create mode 100644 app/photo/js/extend.func.js create mode 100644 app/photo/skin/photo_album.png create mode 100644 app/photo/skin/style.css create mode 100644 app/photo/skins/default/photo_album.png create mode 100644 app/photo/skins/default/style.css create mode 100644 app/pubs/about.php create mode 100644 app/pubs/action/admin.php create mode 100644 app/pubs/action/admin/options.php create mode 100644 app/pubs/action/aliyun.php create mode 100644 app/pubs/action/api.php create mode 100644 app/pubs/action/code.php create mode 100644 app/pubs/action/download.php create mode 100644 app/pubs/action/draft.php create mode 100644 app/pubs/action/editor.php create mode 100644 app/pubs/action/email.php create mode 100644 app/pubs/action/file.php create mode 100644 app/pubs/action/home.php create mode 100644 app/pubs/action/index.php create mode 100644 app/pubs/action/phone.php create mode 100644 app/pubs/action/photo.php create mode 100644 app/pubs/action/plugin.php create mode 100644 app/pubs/action/signin.php create mode 100644 app/pubs/action/urltoid.php create mode 100644 app/pubs/class.pubs.php create mode 100644 app/pubs/config.php create mode 100644 app/pubs/html/admin/menu.html create mode 100644 app/pubs/html/admin/options.html create mode 100644 app/pubs/html/admin/plugin_menu.html create mode 100644 app/pubs/html/home.html create mode 100644 app/pubs/js/admin.js create mode 100644 app/pubs/js/extend.func.js create mode 100644 app/pubs/skins/default/style.css create mode 100644 app/search/about.php create mode 100644 app/search/action/admin.php create mode 100644 app/search/action/admin/options.php create mode 100644 app/search/action/common.php create mode 100644 app/search/action/index.php create mode 100644 app/search/action/s.php create mode 100644 app/search/action/xs.php create mode 100644 app/search/class.search.php create mode 100644 app/search/config.php create mode 100644 app/search/html/admin/menu.html create mode 100644 app/search/html/admin/options.html create mode 100644 app/search/html/index.html create mode 100644 app/search/html/s_all.html create mode 100644 app/search/html/s_article.html create mode 100644 app/search/html/s_group.html create mode 100644 app/search/html/s_menu.html create mode 100644 app/search/html/s_topic.html create mode 100644 app/search/html/s_user.html create mode 100644 app/search/js/extend.func.js create mode 100644 app/search/skin/style.css create mode 100644 app/search/skins/default/style.css create mode 100644 app/shop/about.php create mode 100644 app/shop/action/add.php create mode 100644 app/shop/action/buy.php create mode 100644 app/shop/action/comment.php create mode 100644 app/shop/action/do.php create mode 100644 app/shop/action/edit.php create mode 100644 app/shop/action/editdo.php create mode 100644 app/shop/action/index.php create mode 100644 app/shop/action/myorder.php create mode 100644 app/shop/action/order.php create mode 100644 app/shop/action/sellout.php create mode 100644 app/shop/action/show.php create mode 100644 app/shop/class.shop.php create mode 100644 app/shop/config.php create mode 100644 app/shop/html/add.html create mode 100644 app/shop/html/buy.html create mode 100644 app/shop/html/buyend.html create mode 100644 app/shop/html/edit.html create mode 100644 app/shop/html/index.html create mode 100644 app/shop/html/myorder.html create mode 100644 app/shop/html/order.html create mode 100644 app/shop/html/sellout.html create mode 100644 app/shop/html/show.html create mode 100644 app/shop/js/extend.func.js create mode 100644 app/shop/skins/default/photo_album.png create mode 100644 app/shop/skins/default/style.css create mode 100644 app/showerro/about.php create mode 100644 app/showerro/action/index.php create mode 100644 app/showerro/class.showerro.php create mode 100644 app/showerro/config.php create mode 100644 app/showerro/html/erro404.html create mode 100644 app/showerro/html/index.html create mode 100644 app/showerro/js/extend.func.js create mode 100644 app/showerro/skins/default/playing.png create mode 100644 app/showerro/skins/default/style.css create mode 100644 app/system/about.php create mode 100644 app/system/action/anti.php create mode 100644 app/system/action/apps.php create mode 100644 app/system/action/cache.php create mode 100644 app/system/action/do.php create mode 100644 app/system/action/editor.php create mode 100644 app/system/action/index.php create mode 100644 app/system/action/login.php create mode 100644 app/system/action/logo.php create mode 100644 app/system/action/logs.php create mode 100644 app/system/action/main.php create mode 100644 app/system/action/options.php create mode 100644 app/system/action/phpinfo.php create mode 100644 app/system/action/plugin.php create mode 100644 app/system/action/redis.php create mode 100644 app/system/action/spam.php create mode 100644 app/system/action/sql.php create mode 100644 app/system/action/test.php create mode 100644 app/system/action/update.php create mode 100644 app/system/class.system.php create mode 100644 app/system/config.php create mode 100644 app/system/html/admincp.html create mode 100644 app/system/html/anti_cloud.html create mode 100644 app/system/html/anti_email.html create mode 100644 app/system/html/anti_ip.html create mode 100644 app/system/html/anti_menu.html create mode 100644 app/system/html/anti_phone.html create mode 100644 app/system/html/anti_report.html create mode 100644 app/system/html/anti_word.html create mode 100644 app/system/html/anti_wordadd.html create mode 100644 app/system/html/apps.html create mode 100644 app/system/html/apps_applist.html create mode 100644 app/system/html/apps_menu.html create mode 100644 app/system/html/apps_mylist.html create mode 100644 app/system/html/cache.html create mode 100644 app/system/html/editor_list.html create mode 100644 app/system/html/logs_list.html create mode 100644 app/system/html/logs_show.html create mode 100644 app/system/html/main.html create mode 100644 app/system/html/menu.html create mode 100644 app/system/html/options.html create mode 100644 app/system/html/plugin_list.html create mode 100644 app/system/html/spam.html create mode 100644 app/system/html/sql.html create mode 100644 app/system/html/test.html create mode 100644 app/system/html/update.html create mode 100644 app/system/html/update_hand.html create mode 100644 app/system/html/update_one.html create mode 100644 app/system/html/update_three.html create mode 100644 app/system/html/update_two.html create mode 100644 app/system/js/admin.js create mode 100644 app/system/js/extend.func.js create mode 100644 app/system/skin/loading.gif create mode 100644 app/system/skin/logo.png create mode 100644 app/system/skin/style.css create mode 100644 app/system/skins/default/loading.gif create mode 100644 app/system/skins/default/logo.png create mode 100644 app/system/skins/default/style.css create mode 100644 app/tag/about.php create mode 100644 app/tag/action/add.php create mode 100644 app/tag/action/add_ajax.php create mode 100644 app/tag/action/admin.php create mode 100644 app/tag/action/admin/do.php create mode 100644 app/tag/action/admin/list.php create mode 100644 app/tag/action/admin/options.php create mode 100644 app/tag/action/index.php create mode 100644 app/tag/action/topic.php create mode 100644 app/tag/class.tag.php create mode 100644 app/tag/config.php create mode 100644 app/tag/html/admin/list.html create mode 100644 app/tag/html/admin/menu.html create mode 100644 app/tag/html/admin/options.html create mode 100644 app/topic/about.php create mode 100644 app/topic/action/add.php create mode 100644 app/topic/action/admin.php create mode 100644 app/topic/action/admin/options.php create mode 100644 app/topic/action/admin/permissions.php create mode 100644 app/topic/action/admin/topic.php create mode 100644 app/topic/action/ajax.php create mode 100644 app/topic/action/api.php create mode 100644 app/topic/action/api/index .php create mode 100644 app/topic/action/delete.php create mode 100644 app/topic/action/edit.php create mode 100644 app/topic/action/group.php create mode 100644 app/topic/action/index.php create mode 100644 app/topic/action/move.php create mode 100644 app/topic/action/my.php create mode 100644 app/topic/action/my/index.php create mode 100644 app/topic/action/score.php create mode 100644 app/topic/action/show.php create mode 100644 app/topic/action/tag.php create mode 100644 app/topic/action/tags.php create mode 100644 app/topic/class.topic.php create mode 100644 app/topic/config.php create mode 100644 app/topic/html/add.html create mode 100644 app/topic/html/admin/menu.html create mode 100644 app/topic/html/admin/options.html create mode 100644 app/topic/html/admin/permissions.html create mode 100644 app/topic/html/admin/topic_delete.html create mode 100644 app/topic/html/admin/topic_edit.html create mode 100644 app/topic/html/admin/topic_edit_view.html create mode 100644 app/topic/html/admin/topic_list.html create mode 100644 app/topic/html/edit.html create mode 100644 app/topic/html/group.html create mode 100644 app/topic/html/index.html create mode 100644 app/topic/html/move.html create mode 100644 app/topic/html/my/index.html create mode 100644 app/topic/html/show.html create mode 100644 app/topic/html/tag.html create mode 100644 app/topic/html/tags.html create mode 100644 app/topic/html/topic_isopen.html create mode 100644 app/topic/html/topic_xuqi.html create mode 100644 app/topic/js/extend.func.js create mode 100644 app/topic/skin/style.css create mode 100644 app/user/about.php create mode 100644 app/user/action/admin.php create mode 100644 app/user/action/admin/group.php create mode 100644 app/user/action/admin/guestbook.php create mode 100644 app/user/action/admin/options.php create mode 100644 app/user/action/admin/permissions.php create mode 100644 app/user/action/admin/role.php create mode 100644 app/user/action/admin/score.php create mode 100644 app/user/action/admin/user.php create mode 100644 app/user/action/anti.php create mode 100644 app/user/action/api.php create mode 100644 app/user/action/api/index.php create mode 100644 app/user/action/article.php create mode 100644 app/user/action/collect.php create mode 100644 app/user/action/comment.php create mode 100644 app/user/action/follow.php create mode 100644 app/user/action/followed.php create mode 100644 app/user/action/forgetpwd.php create mode 100644 app/user/action/group.php create mode 100644 app/user/action/guestbook.php create mode 100644 app/user/action/index.php create mode 100644 app/user/action/invite.php create mode 100644 app/user/action/login.php create mode 100644 app/user/action/logout.php create mode 100644 app/user/action/message.php create mode 100644 app/user/action/my.php create mode 100644 app/user/action/my/common.php create mode 100644 app/user/action/my/index.php create mode 100644 app/user/action/phone.php create mode 100644 app/user/action/plogin.php create mode 100644 app/user/action/plugin.php create mode 100644 app/user/action/register.php create mode 100644 app/user/action/resetpwd.php create mode 100644 app/user/action/role.php create mode 100644 app/user/action/signin.php create mode 100644 app/user/action/space.php create mode 100644 app/user/action/system.php create mode 100644 app/user/action/topic.php create mode 100644 app/user/action/userinfo.php create mode 100644 app/user/action/verify.php create mode 100644 app/user/action/wxlogin.php create mode 100644 app/user/class.user.php create mode 100644 app/user/config.php create mode 100644 app/user/html/admin/footer.html create mode 100644 app/user/html/admin/group_list.html create mode 100644 app/user/html/admin/guestbook_list.html create mode 100644 app/user/html/admin/menu.html create mode 100644 app/user/html/admin/options.html create mode 100644 app/user/html/admin/permissions.html create mode 100644 app/user/html/admin/role_list.html create mode 100644 app/user/html/admin/score_list.html create mode 100644 app/user/html/admin/score_send.html create mode 100644 app/user/html/admin/user_add.html create mode 100644 app/user/html/admin/user_list.html create mode 100644 app/user/html/admin/user_pwd.html create mode 100644 app/user/html/admin/user_view.html create mode 100644 app/user/html/area.html create mode 100644 app/user/html/article.html create mode 100644 app/user/html/city.html create mode 100644 app/user/html/collect.html create mode 100644 app/user/html/comment.html create mode 100644 app/user/html/follow.html create mode 100644 app/user/html/followed.html create mode 100644 app/user/html/forgetpwd.html create mode 100644 app/user/html/forgetpwd_phone.html create mode 100644 app/user/html/group.html create mode 100644 app/user/html/guestbook.html create mode 100644 app/user/html/index.html create mode 100644 app/user/html/invite.html create mode 100644 app/user/html/login.html create mode 100644 app/user/html/menu.html create mode 100644 app/user/html/message_add.html create mode 100644 app/user/html/phone.html create mode 100644 app/user/html/phone_verify.html create mode 100644 app/user/html/plogin.html create mode 100644 app/user/html/register.html create mode 100644 app/user/html/resetpwd.html create mode 100644 app/user/html/role.html create mode 100644 app/user/html/signin_ajax.html create mode 100644 app/user/html/space.html create mode 100644 app/user/html/system.html create mode 100644 app/user/html/topic.html create mode 100644 app/user/html/userinfo.html create mode 100644 app/user/html/verify.html create mode 100644 app/user/html/verify_face.html create mode 100644 app/user/js/admin.js create mode 100644 app/user/js/extend.func.js create mode 100644 app/user/skin/style.css create mode 100644 app/user/skins/default/style.css create mode 100644 app/weibo/about.php create mode 100644 app/weibo/action.weibo.php create mode 100644 app/weibo/action/add.php create mode 100644 app/weibo/action/admin.php create mode 100644 app/weibo/action/admin/options.php create mode 100644 app/weibo/action/admin/permissions.php create mode 100644 app/weibo/action/admin/weibo.php create mode 100644 app/weibo/action/api.php create mode 100644 app/weibo/action/api/index.php create mode 100644 app/weibo/action/delete.php create mode 100644 app/weibo/action/index.php create mode 100644 app/weibo/action/my.php create mode 100644 app/weibo/action/my/index.php create mode 100644 app/weibo/action/photo.php create mode 100644 app/weibo/action/show.php create mode 100644 app/weibo/admin.weibo.php create mode 100644 app/weibo/class.weibo.php create mode 100644 app/weibo/config.php create mode 100644 app/weibo/html/admin/menu.html create mode 100644 app/weibo/html/admin/options.html create mode 100644 app/weibo/html/admin/permissions.html create mode 100644 app/weibo/html/admin/weibo_list.html create mode 100644 app/weibo/html/ajax_list.html create mode 100644 app/weibo/html/index.html create mode 100644 app/weibo/html/menu.html create mode 100644 app/weibo/html/my/index.html create mode 100644 app/weibo/html/photo_list.html create mode 100644 app/weibo/html/show.html create mode 100644 app/weibo/js/extend.func.js create mode 100644 app/weibo/my.weibo.php create mode 100644 app/weibo/skin/style.css create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 favicon.ico create mode 100644 index.html create mode 100644 index.php create mode 100644 install/action/index.php create mode 100644 install/action/next.php create mode 100644 install/action/result.php create mode 100644 install/html/error.html create mode 100644 install/html/footer.html create mode 100644 install/html/header.html create mode 100644 install/html/index.html create mode 100644 install/html/next.html create mode 100644 install/html/result.html create mode 100644 install/index.php create mode 100644 install/install.sql create mode 100644 install/skin/logo.gif create mode 100644 install/skin/style.css create mode 100644 plugins/home/article/about.php create mode 100644 plugins/home/article/article.html create mode 100644 plugins/home/article/article.php create mode 100644 plugins/home/friendlinks/about.php create mode 100644 plugins/home/friendlinks/friendlinks.html create mode 100644 plugins/home/friendlinks/friendlinks.php create mode 100644 plugins/home/hottopic/about.php create mode 100644 plugins/home/hottopic/hottopic.php create mode 100644 plugins/home/links/about.php create mode 100644 plugins/home/links/edit.php create mode 100644 plugins/home/links/edit_set.html create mode 100644 plugins/home/links/links.html create mode 100644 plugins/home/links/links.php create mode 100644 plugins/home/login/about.php create mode 100644 plugins/home/login/login.html create mode 100644 plugins/home/login/login.php create mode 100644 plugins/home/login/style.css create mode 100644 plugins/home/newgroup/about.php create mode 100644 plugins/home/newgroup/newgroup.html create mode 100644 plugins/home/newgroup/newgroup.php create mode 100644 plugins/home/newtopic/about.php create mode 100644 plugins/home/newtopic/newtopic.html create mode 100644 plugins/home/newtopic/newtopic.php create mode 100644 plugins/home/newtopic/style.css create mode 100644 plugins/home/photo/about.php create mode 100644 plugins/home/photo/photo.html create mode 100644 plugins/home/photo/photo.php create mode 100644 plugins/home/photo/style.css create mode 100644 plugins/home/recommendarticle/about.php create mode 100644 plugins/home/recommendarticle/edit.php create mode 100644 plugins/home/recommendarticle/edit_set.html create mode 100644 plugins/home/recommendarticle/recommendarticle.html create mode 100644 plugins/home/recommendarticle/recommendarticle.php create mode 100644 plugins/home/recommendgroup/about.php create mode 100644 plugins/home/recommendgroup/recommendgroup.html create mode 100644 plugins/home/recommendgroup/recommendgroup.php create mode 100644 plugins/home/recommendgroup/style.css create mode 100644 plugins/home/recommendtopic/about.php create mode 100644 plugins/home/recommendtopic/edit.php create mode 100644 plugins/home/recommendtopic/edit_set.html create mode 100644 plugins/home/recommendtopic/recommendtopic.html create mode 100644 plugins/home/recommendtopic/recommendtopic.php create mode 100644 plugins/home/recommendtopic/style.css create mode 100644 plugins/home/signuser/about.php create mode 100644 plugins/home/signuser/signuser.html create mode 100644 plugins/home/signuser/signuser.php create mode 100644 plugins/home/slide/about.php create mode 100644 plugins/home/slide/edit.php create mode 100644 plugins/home/slide/edit_edit.html create mode 100644 plugins/home/slide/edit_set.html create mode 100644 plugins/home/slide/slide.html create mode 100644 plugins/home/slide/slide.php create mode 100644 plugins/home/tag/about.php create mode 100644 plugins/home/tag/edit.php create mode 100644 plugins/home/tag/edit_set.html create mode 100644 plugins/home/tag/tag.html create mode 100644 plugins/home/tag/tag.php create mode 100644 plugins/home/topic/about.php create mode 100644 plugins/home/topic/topic.html create mode 100644 plugins/home/topic/topic.php create mode 100644 plugins/home/weibo/about.php create mode 100644 plugins/home/weibo/style.css create mode 100644 plugins/home/weibo/weibo.html create mode 100644 plugins/home/weibo/weibo.js create mode 100644 plugins/home/weibo/weibo.php create mode 100644 plugins/index.php create mode 100644 plugins/pubs/counter/about.php create mode 100644 plugins/pubs/counter/counter.php create mode 100644 plugins/pubs/counter/edit.php create mode 100644 plugins/pubs/counter/edit_set.html create mode 100644 plugins/pubs/feedback/about.php create mode 100644 plugins/pubs/feedback/edit.php create mode 100644 plugins/pubs/feedback/edit_set.html create mode 100644 plugins/pubs/feedback/feed-back.png create mode 100644 plugins/pubs/feedback/feedback.php create mode 100644 plugins/pubs/gobad/about.php create mode 100644 plugins/pubs/gobad/edit.php create mode 100644 plugins/pubs/gobad/edit_set.html create mode 100644 plugins/pubs/gobad/gobad.php create mode 100644 plugins/pubs/gonggao/about.php create mode 100644 plugins/pubs/gonggao/edit.php create mode 100644 plugins/pubs/gonggao/edit_set.html create mode 100644 plugins/pubs/gonggao/gonggao.php create mode 100644 plugins/pubs/gotop/about.php create mode 100644 plugins/pubs/gotop/fruitxiao.png create mode 100644 plugins/pubs/gotop/gotop.php create mode 100644 plugins/pubs/gotop/jquery.goToTop.js create mode 100644 plugins/pubs/gotop/side-icon02.png create mode 100644 plugins/pubs/gotop/style.css create mode 100644 plugins/pubs/highlight/about.php create mode 100644 plugins/pubs/highlight/highlight.html create mode 100644 plugins/pubs/highlight/highlight.php create mode 100644 plugins/pubs/highlight/js/highlight.pack.js create mode 100644 plugins/pubs/highlight/js/v9.15.9_highlight.pack.js create mode 100644 plugins/pubs/highlight/skins/default/a11y-dark.css create mode 100644 plugins/pubs/highlight/skins/default/a11y-light.css create mode 100644 plugins/pubs/highlight/skins/default/agate.css create mode 100644 plugins/pubs/highlight/skins/default/an-old-hope.css create mode 100644 plugins/pubs/highlight/skins/default/androidstudio.css create mode 100644 plugins/pubs/highlight/skins/default/arduino-light.css create mode 100644 plugins/pubs/highlight/skins/default/arta.css create mode 100644 plugins/pubs/highlight/skins/default/ascetic.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-cave-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-cave-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-dune-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-dune-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-estuary-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-estuary-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-forest-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-forest-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-heath-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-heath-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-lakeside-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-lakeside-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-plateau-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-plateau-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-savanna-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-savanna-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-seaside-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-seaside-light.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-sulphurpool-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atelier-sulphurpool-light.css create mode 100644 plugins/pubs/highlight/skins/default/atom-one-dark-reasonable.css create mode 100644 plugins/pubs/highlight/skins/default/atom-one-dark.css create mode 100644 plugins/pubs/highlight/skins/default/atom-one-light.css create mode 100644 plugins/pubs/highlight/skins/default/brown-paper.css create mode 100644 plugins/pubs/highlight/skins/default/brown-papersq.png create mode 100644 plugins/pubs/highlight/skins/default/codepen-embed.css create mode 100644 plugins/pubs/highlight/skins/default/color-brewer.css create mode 100644 plugins/pubs/highlight/skins/default/darcula.css create mode 100644 plugins/pubs/highlight/skins/default/dark.css create mode 100644 plugins/pubs/highlight/skins/default/darkula.css create mode 100644 plugins/pubs/highlight/skins/default/default.css create mode 100644 plugins/pubs/highlight/skins/default/docco.css create mode 100644 plugins/pubs/highlight/skins/default/dracula.css create mode 100644 plugins/pubs/highlight/skins/default/far.css create mode 100644 plugins/pubs/highlight/skins/default/foundation.css create mode 100644 plugins/pubs/highlight/skins/default/github-gist.css create mode 100644 plugins/pubs/highlight/skins/default/github.css create mode 100644 plugins/pubs/highlight/skins/default/gml.css create mode 100644 plugins/pubs/highlight/skins/default/googlecode.css create mode 100644 plugins/pubs/highlight/skins/default/grayscale.css create mode 100644 plugins/pubs/highlight/skins/default/gruvbox-dark.css create mode 100644 plugins/pubs/highlight/skins/default/gruvbox-light.css create mode 100644 plugins/pubs/highlight/skins/default/hopscotch.css create mode 100644 plugins/pubs/highlight/skins/default/hybrid.css create mode 100644 plugins/pubs/highlight/skins/default/idea.css create mode 100644 plugins/pubs/highlight/skins/default/ir-black.css create mode 100644 plugins/pubs/highlight/skins/default/isbl-editor-dark.css create mode 100644 plugins/pubs/highlight/skins/default/isbl-editor-light.css create mode 100644 plugins/pubs/highlight/skins/default/kimbie.dark.css create mode 100644 plugins/pubs/highlight/skins/default/kimbie.light.css create mode 100644 plugins/pubs/highlight/skins/default/lightfair.css create mode 100644 plugins/pubs/highlight/skins/default/magula.css create mode 100644 plugins/pubs/highlight/skins/default/mono-blue.css create mode 100644 plugins/pubs/highlight/skins/default/monokai-sublime.css create mode 100644 plugins/pubs/highlight/skins/default/monokai.css create mode 100644 plugins/pubs/highlight/skins/default/nord.css create mode 100644 plugins/pubs/highlight/skins/default/obsidian.css create mode 100644 plugins/pubs/highlight/skins/default/ocean.css create mode 100644 plugins/pubs/highlight/skins/default/paraiso-dark.css create mode 100644 plugins/pubs/highlight/skins/default/paraiso-light.css create mode 100644 plugins/pubs/highlight/skins/default/pojoaque.css create mode 100644 plugins/pubs/highlight/skins/default/pojoaque.jpg create mode 100644 plugins/pubs/highlight/skins/default/purebasic.css create mode 100644 plugins/pubs/highlight/skins/default/qtcreator_dark.css create mode 100644 plugins/pubs/highlight/skins/default/qtcreator_light.css create mode 100644 plugins/pubs/highlight/skins/default/railscasts.css create mode 100644 plugins/pubs/highlight/skins/default/rainbow.css create mode 100644 plugins/pubs/highlight/skins/default/routeros.css create mode 100644 plugins/pubs/highlight/skins/default/school-book.css create mode 100644 plugins/pubs/highlight/skins/default/school-book.png create mode 100644 plugins/pubs/highlight/skins/default/shades-of-purple.css create mode 100644 plugins/pubs/highlight/skins/default/solarized-dark.css create mode 100644 plugins/pubs/highlight/skins/default/solarized-light.css create mode 100644 plugins/pubs/highlight/skins/default/sunburst.css create mode 100644 plugins/pubs/highlight/skins/default/tomorrow-night-blue.css create mode 100644 plugins/pubs/highlight/skins/default/tomorrow-night-bright.css create mode 100644 plugins/pubs/highlight/skins/default/tomorrow-night-eighties.css create mode 100644 plugins/pubs/highlight/skins/default/tomorrow-night.css create mode 100644 plugins/pubs/highlight/skins/default/tomorrow.css create mode 100644 plugins/pubs/highlight/skins/default/vs.css create mode 100644 plugins/pubs/highlight/skins/default/vs2015.css create mode 100644 plugins/pubs/highlight/skins/default/xcode.css create mode 100644 plugins/pubs/highlight/skins/default/xt256.css create mode 100644 plugins/pubs/highlight/skins/default/zenburn.css create mode 100644 plugins/pubs/morenav/about.php create mode 100644 plugins/pubs/morenav/edit.php create mode 100644 plugins/pubs/morenav/edit_set.html create mode 100644 plugins/pubs/morenav/morenav.html create mode 100644 plugins/pubs/morenav/morenav.php create mode 100644 plugins/pubs/navs/about.php create mode 100644 plugins/pubs/navs/edit.php create mode 100644 plugins/pubs/navs/edit_set.html create mode 100644 plugins/pubs/navs/navs.php create mode 100644 plugins/pubs/share/about.php create mode 100644 plugins/pubs/share/js/share.min.js create mode 100644 plugins/pubs/share/share.html create mode 100644 plugins/pubs/share/share.php create mode 100644 plugins/pubs/share/skins/default/share.min.css create mode 100644 plugins/pubs/share/skins/fonts/iconfont.ttf create mode 100644 plugins/pubs/share/skins/fonts/iconfont.woff create mode 100644 plugins/pubs/summernote/about.php create mode 100644 plugins/pubs/summernote/config.js create mode 100644 plugins/pubs/summernote/font/summernote.eot create mode 100644 plugins/pubs/summernote/font/summernote.ttf create mode 100644 plugins/pubs/summernote/font/summernote.woff create mode 100644 plugins/pubs/summernote/font/summernote.woff2 create mode 100644 plugins/pubs/summernote/lang/summernote-zh-CN.js create mode 100644 plugins/pubs/summernote/lang/summernote-zh-CN.min.js create mode 100644 plugins/pubs/summernote/lang/summernote-zh-CN.min.js.LICENSE.txt create mode 100644 plugins/pubs/summernote/load.js create mode 100644 plugins/pubs/summernote/load_m.js create mode 100644 plugins/pubs/summernote/load_mini.js create mode 100644 plugins/pubs/summernote/load_mt.js create mode 100644 plugins/pubs/summernote/plugin/attach.zip create mode 100644 plugins/pubs/summernote/plugin/attach/attach.js create mode 100644 plugins/pubs/summernote/plugin/audio/audio.js create mode 100644 plugins/pubs/summernote/plugin/databasic/summernote-ext-databasic.css create mode 100644 plugins/pubs/summernote/plugin/databasic/summernote-ext-databasic.js create mode 100644 plugins/pubs/summernote/plugin/emojis/1.png create mode 100644 plugins/pubs/summernote/plugin/emojis/2.png create mode 100644 plugins/pubs/summernote/plugin/emojis/3.png create mode 100644 plugins/pubs/summernote/plugin/emojis/4.png create mode 100644 plugins/pubs/summernote/plugin/emojis/5.png create mode 100644 plugins/pubs/summernote/plugin/emojis/6.png create mode 100644 plugins/pubs/summernote/plugin/specialchars/summernote-ext-specialchars.js create mode 100644 plugins/pubs/summernote/plugin/summernote-cleaner.js create mode 100644 plugins/pubs/summernote/plugin/summernote-ext-emoji.js create mode 100644 plugins/pubs/summernote/plugin/summernote-ext-highlight.js create mode 100644 plugins/pubs/summernote/plugin/video/video.js create mode 100644 plugins/pubs/summernote/summernote-lite.css create mode 100644 plugins/pubs/summernote/summernote-lite.js create mode 100644 plugins/pubs/summernote/summernote-lite.js.map create mode 100644 plugins/pubs/summernote/summernote-lite.min.css create mode 100644 plugins/pubs/summernote/summernote-lite.min.js create mode 100644 plugins/pubs/summernote/summernote-lite.min.js.LICENSE.txt create mode 100644 plugins/pubs/summernote/summernote-lite.min.js.map create mode 100644 plugins/pubs/summernote/summernote.php create mode 100644 plugins/pubs/wangeditor/about.php create mode 100644 plugins/pubs/wangeditor/fonts/w-e-icon.woff create mode 100644 plugins/pubs/wangeditor/load.js create mode 100644 plugins/pubs/wangeditor/load_m.js create mode 100644 plugins/pubs/wangeditor/load_mini.js create mode 100644 plugins/pubs/wangeditor/load_mt.js create mode 100644 plugins/pubs/wangeditor/wangEditor.css create mode 100644 plugins/pubs/wangeditor/wangEditor.js create mode 100644 plugins/pubs/wangeditor/wangeditor.php create mode 100644 plugins/pubs/wordad/about.php create mode 100644 plugins/pubs/wordad/edit.html create mode 100644 plugins/pubs/wordad/edit.php create mode 100644 plugins/pubs/wordad/wordad.php create mode 100644 public/bootstrap-datetimepicker/bootstrap-datetimepicker.css create mode 100644 public/bootstrap-datetimepicker/bootstrap-datetimepicker.js create mode 100644 public/bootstrap-datetimepicker/bootstrap-datetimepicker.zh-CN.js create mode 100644 public/bootstrap-icons/bootstrap-icons.css create mode 100644 public/bootstrap-icons/bootstrap-icons.json create mode 100644 public/bootstrap-icons/fonts/bootstrap-icons.woff create mode 100644 public/bootstrap-icons/fonts/bootstrap-icons.woff2 create mode 100644 public/bootstrap-icons/index.html create mode 100644 public/bootstrap/css/bootstrap-grid.css create mode 100644 public/bootstrap/css/bootstrap-grid.css.map create mode 100644 public/bootstrap/css/bootstrap-grid.min.css create mode 100644 public/bootstrap/css/bootstrap-grid.min.css.map create mode 100644 public/bootstrap/css/bootstrap-reboot.css create mode 100644 public/bootstrap/css/bootstrap-reboot.css.map create mode 100644 public/bootstrap/css/bootstrap-reboot.min.css create mode 100644 public/bootstrap/css/bootstrap-reboot.min.css.map create mode 100644 public/bootstrap/css/bootstrap.css create mode 100644 public/bootstrap/css/bootstrap.css.map create mode 100644 public/bootstrap/css/bootstrap.min.css create mode 100644 public/bootstrap/css/bootstrap.min.css.map create mode 100644 public/bootstrap/js/bootstrap.bundle.js create mode 100644 public/bootstrap/js/bootstrap.bundle.js.map create mode 100644 public/bootstrap/js/bootstrap.bundle.min.js create mode 100644 public/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 public/bootstrap/js/bootstrap.js create mode 100644 public/bootstrap/js/bootstrap.js.map create mode 100644 public/bootstrap/js/bootstrap.min.js create mode 100644 public/bootstrap/js/bootstrap.min.js.map create mode 100644 public/fontawesome/css/fontawesome-all.css create mode 100644 public/fontawesome/webfonts/fa-brands-400.eot create mode 100644 public/fontawesome/webfonts/fa-brands-400.svg create mode 100644 public/fontawesome/webfonts/fa-brands-400.ttf create mode 100644 public/fontawesome/webfonts/fa-brands-400.woff create mode 100644 public/fontawesome/webfonts/fa-brands-400.woff2 create mode 100644 public/fontawesome/webfonts/fa-regular-400.eot create mode 100644 public/fontawesome/webfonts/fa-regular-400.svg create mode 100644 public/fontawesome/webfonts/fa-regular-400.ttf create mode 100644 public/fontawesome/webfonts/fa-regular-400.woff create mode 100644 public/fontawesome/webfonts/fa-regular-400.woff2 create mode 100644 public/fontawesome/webfonts/fa-solid-900.eot create mode 100644 public/fontawesome/webfonts/fa-solid-900.svg create mode 100644 public/fontawesome/webfonts/fa-solid-900.ttf create mode 100644 public/fontawesome/webfonts/fa-solid-900.woff create mode 100644 public/fontawesome/webfonts/fa-solid-900.woff2 create mode 100644 public/html/404.html create mode 100644 public/html/comment.html create mode 100644 public/html/footer.html create mode 100644 public/html/footer_admin.html create mode 100644 public/html/header.html create mode 100644 public/html/header_admin.html create mode 100644 public/html/my.html create mode 100644 public/html/notice.html create mode 100644 public/html/plugin_menu.html create mode 100644 public/images/app.png create mode 100644 public/images/bigload.gif create mode 100644 public/images/ding.png create mode 100644 public/images/event.jpg create mode 100644 public/images/group.jpg create mode 100644 public/images/hot.png create mode 100644 public/images/ios.jpg create mode 100644 public/images/loading.gif create mode 100644 public/images/loadingg.gif create mode 100644 public/images/location.jpg create mode 100644 public/images/logo.png create mode 100644 public/images/new.png create mode 100644 public/images/nopic.jpg create mode 100644 public/images/photo.jpg create mode 100644 public/images/posts.gif create mode 100644 public/images/redeem.png create mode 100644 public/images/renzheng.png create mode 100644 public/images/renzheng1.png create mode 100644 public/images/renzheng2.png create mode 100644 public/images/rz1.gif create mode 100644 public/images/rz1.png create mode 100644 public/images/rz2.gif create mode 100644 public/images/rz2.png create mode 100644 public/images/score.gif create mode 100644 public/images/sy-video.png create mode 100644 public/images/sy.png create mode 100644 public/images/thinksaas2012.png create mode 100644 public/images/topic.gif create mode 100644 public/images/user_large.jpg create mode 100644 public/images/video.gif create mode 100644 public/images/vote.gif create mode 100644 public/images/watermark.gif create mode 100644 public/index.php create mode 100644 public/js/bootstrap3-validation.js create mode 100644 public/js/city/city.min.js create mode 100644 public/js/city/jquery.cityselect.js create mode 100644 public/js/clipboard.js create mode 100644 public/js/common.js create mode 100644 public/js/dropzone/basic.css create mode 100644 public/js/dropzone/dropzone-amd-module.js create mode 100644 public/js/dropzone/dropzone.css create mode 100644 public/js/dropzone/dropzone.js create mode 100644 public/js/dropzone/readme.md create mode 100644 public/js/html5shiv.js create mode 100644 public/js/imbox/imbox.js create mode 100644 public/js/jeditable/jeditable.js create mode 100644 public/js/jquery-migrate.js create mode 100644 public/js/jquery.min.js create mode 100644 public/js/jquery.nestable.js create mode 100644 public/js/jquery.ocupload.js create mode 100644 public/js/jquery.upload.js create mode 100644 public/js/jquery.upload.v2.js create mode 100644 public/js/jqueryTag-it/css/jquery.tagit.css create mode 100644 public/js/jqueryTag-it/css/tagit.ui-zendesk.css create mode 100644 public/js/jqueryTag-it/js/tag-it.js create mode 100644 public/js/jqueryTag-it/js/tag-it.min.js create mode 100644 public/js/oldie.css create mode 100644 public/js/raty/img/cancel-off.png create mode 100644 public/js/raty/img/cancel-on.png create mode 100644 public/js/raty/img/star-half.png create mode 100644 public/js/raty/img/star-off.png create mode 100644 public/js/raty/img/star-on.png create mode 100644 public/js/raty/js/jquery.raty.min.js create mode 100644 public/js/raty/readme.txt create mode 100644 public/js/respond.min.js create mode 100644 public/js/xss.js create mode 100644 robots.txt create mode 100644 theme/fresh/body_bg.jpg create mode 100644 theme/fresh/preview.jpg create mode 100644 theme/fresh/style.css create mode 100644 theme/gloia/love.jpg create mode 100644 theme/gloia/preview.jpg create mode 100644 theme/gloia/style.css create mode 100644 theme/huizi/love.jpg create mode 100644 theme/huizi/preview.jpg create mode 100644 theme/huizi/style.css create mode 100644 theme/index.php create mode 100644 theme/paper/body_bg.jpg create mode 100644 theme/paper/preview.jpg create mode 100644 theme/paper/style.css create mode 100644 theme/sample/about.php create mode 100644 theme/sample/base.css create mode 100644 theme/sample/bg-2.jpg create mode 100644 theme/sample/bg-body.jpg create mode 100644 theme/sample/bg-line.gif create mode 100644 theme/sample/bg-lined.gif create mode 100644 theme/sample/error.png create mode 100644 theme/sample/header-bg.png create mode 100644 theme/sample/hot.gif create mode 100644 theme/sample/logo.gif create mode 100644 theme/sample/onLoad.gif create mode 100644 theme/sample/preview.jpg create mode 100644 theme/sample/right.png create mode 100644 theme/sample/search.png create mode 100644 theme/sample/style.css create mode 100644 theme/sample/trumpet.gif create mode 100644 theme/superhero/body_bg.jpg create mode 100644 theme/superhero/preview.jpg create mode 100644 theme/superhero/style.css create mode 100644 thinksaas/Image.class.php create mode 100644 thinksaas/app.php create mode 100644 thinksaas/class.crypt.php create mode 100644 thinksaas/common.php create mode 100644 thinksaas/config.php create mode 100644 thinksaas/index.php create mode 100644 thinksaas/mysqli.php create mode 100644 thinksaas/pclzip.lib.php create mode 100644 thinksaas/sql/mysqli.php create mode 100644 thinksaas/thinksaas.php create mode 100644 thinksaas/tsApp.php create mode 100644 thinksaas/tsDbLinker.php create mode 100644 thinksaas/tsFileCache.php create mode 100644 thinksaas/tsFunction.php create mode 100644 thinksaas/tsMySqlCache.php create mode 100644 thinksaas/tsTemplate.php create mode 100644 thinksaas/xsshtml.class.php create mode 100644 upgrade/index.php create mode 100644 upgrade/version.php create mode 100644 vendor/adbario/php-dot-notation/LICENSE.md create mode 100644 vendor/adbario/php-dot-notation/composer.json create mode 100644 vendor/adbario/php-dot-notation/src/Dot.php create mode 100644 vendor/adbario/php-dot-notation/src/helpers.php create mode 100644 vendor/alibabacloud/client/CHANGELOG.md create mode 100644 vendor/alibabacloud/client/CONTRIBUTING.md create mode 100644 vendor/alibabacloud/client/LICENSE.md create mode 100644 vendor/alibabacloud/client/NOTICE.md create mode 100644 vendor/alibabacloud/client/README-zh-CN.md create mode 100644 vendor/alibabacloud/client/README.md create mode 100644 vendor/alibabacloud/client/UPGRADING.md create mode 100644 vendor/alibabacloud/client/composer.json create mode 100644 vendor/alibabacloud/client/src/Accept.php create mode 100644 vendor/alibabacloud/client/src/AlibabaCloud.php create mode 100644 vendor/alibabacloud/client/src/Clients/AccessKeyClient.php create mode 100644 vendor/alibabacloud/client/src/Clients/BearerTokenClient.php create mode 100644 vendor/alibabacloud/client/src/Clients/Client.php create mode 100644 vendor/alibabacloud/client/src/Clients/EcsRamRoleClient.php create mode 100644 vendor/alibabacloud/client/src/Clients/ManageTrait.php create mode 100644 vendor/alibabacloud/client/src/Clients/RamRoleArnClient.php create mode 100644 vendor/alibabacloud/client/src/Clients/RsaKeyPairClient.php create mode 100644 vendor/alibabacloud/client/src/Clients/StsClient.php create mode 100644 vendor/alibabacloud/client/src/Config/Config.php create mode 100644 vendor/alibabacloud/client/src/Config/Data.php create mode 100644 vendor/alibabacloud/client/src/Credentials/AccessKeyCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/BearerTokenCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/CredentialsInterface.php create mode 100644 vendor/alibabacloud/client/src/Credentials/EcsRamRoleCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Ini/CreateTrait.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Ini/IniCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Ini/OptionsTrait.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Providers/CredentialsProvider.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Providers/EcsRamRoleProvider.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Providers/Provider.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Providers/RamRoleArnProvider.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Providers/RsaKeyPairProvider.php create mode 100644 vendor/alibabacloud/client/src/Credentials/RamRoleArnCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Requests/AssumeRole.php create mode 100644 vendor/alibabacloud/client/src/Credentials/Requests/GenerateSessionAccessKey.php create mode 100644 vendor/alibabacloud/client/src/Credentials/RsaKeyPairCredential.php create mode 100644 vendor/alibabacloud/client/src/Credentials/StsCredential.php create mode 100644 vendor/alibabacloud/client/src/DefaultAcsClient.php create mode 100644 vendor/alibabacloud/client/src/Encode.php create mode 100644 vendor/alibabacloud/client/src/Exception/AlibabaCloudException.php create mode 100644 vendor/alibabacloud/client/src/Exception/ClientException.php create mode 100644 vendor/alibabacloud/client/src/Exception/ServerException.php create mode 100644 vendor/alibabacloud/client/src/Filter/ApiFilter.php create mode 100644 vendor/alibabacloud/client/src/Filter/ClientFilter.php create mode 100644 vendor/alibabacloud/client/src/Filter/CredentialFilter.php create mode 100644 vendor/alibabacloud/client/src/Filter/Filter.php create mode 100644 vendor/alibabacloud/client/src/Filter/HttpFilter.php create mode 100644 vendor/alibabacloud/client/src/Functions.php create mode 100644 vendor/alibabacloud/client/src/Log/LogFormatter.php create mode 100644 vendor/alibabacloud/client/src/Profile/DefaultProfile.php create mode 100644 vendor/alibabacloud/client/src/Regions/EndpointProvider.php create mode 100644 vendor/alibabacloud/client/src/Regions/LocationService.php create mode 100644 vendor/alibabacloud/client/src/Regions/LocationServiceRequest.php create mode 100644 vendor/alibabacloud/client/src/Release.php create mode 100644 vendor/alibabacloud/client/src/Request/Request.php create mode 100644 vendor/alibabacloud/client/src/Request/RoaRequest.php create mode 100644 vendor/alibabacloud/client/src/Request/RpcRequest.php create mode 100644 vendor/alibabacloud/client/src/Request/Traits/AcsTrait.php create mode 100644 vendor/alibabacloud/client/src/Request/Traits/ClientTrait.php create mode 100644 vendor/alibabacloud/client/src/Request/Traits/DeprecatedRoaTrait.php create mode 100644 vendor/alibabacloud/client/src/Request/Traits/DeprecatedTrait.php create mode 100644 vendor/alibabacloud/client/src/Request/Traits/RetryTrait.php create mode 100644 vendor/alibabacloud/client/src/Request/UserAgent.php create mode 100644 vendor/alibabacloud/client/src/Resolver/ActionResolverTrait.php create mode 100644 vendor/alibabacloud/client/src/Resolver/ApiResolver.php create mode 100644 vendor/alibabacloud/client/src/Resolver/CallTrait.php create mode 100644 vendor/alibabacloud/client/src/Resolver/Roa.php create mode 100644 vendor/alibabacloud/client/src/Resolver/Rpc.php create mode 100644 vendor/alibabacloud/client/src/Resolver/VersionResolver.php create mode 100644 vendor/alibabacloud/client/src/Result/Result.php create mode 100644 vendor/alibabacloud/client/src/SDK.php create mode 100644 vendor/alibabacloud/client/src/Signature/BearerTokenSignature.php create mode 100644 vendor/alibabacloud/client/src/Signature/ShaHmac1Signature.php create mode 100644 vendor/alibabacloud/client/src/Signature/ShaHmac256Signature.php create mode 100644 vendor/alibabacloud/client/src/Signature/ShaHmac256WithRsaSignature.php create mode 100644 vendor/alibabacloud/client/src/Signature/Signature.php create mode 100644 vendor/alibabacloud/client/src/Signature/SignatureInterface.php create mode 100644 vendor/alibabacloud/client/src/Support/Arrays.php create mode 100644 vendor/alibabacloud/client/src/Support/Path.php create mode 100644 vendor/alibabacloud/client/src/Support/Sign.php create mode 100644 vendor/alibabacloud/client/src/Traits/ArrayAccessTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/ClientTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/DefaultRegionTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/EndpointTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/HasDataTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/HistoryTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/HttpTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/LogTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/MockTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/ObjectAccessTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/RegionTrait.php create mode 100644 vendor/alibabacloud/client/src/Traits/RequestTrait.php create mode 100644 vendor/aliyuncs/oss-sdk-php/.coveralls.yml create mode 100644 vendor/aliyuncs/oss-sdk-php/.gitignore create mode 100644 vendor/aliyuncs/oss-sdk-php/.travis.yml create mode 100644 vendor/aliyuncs/oss-sdk-php/CHANGELOG.md create mode 100644 vendor/aliyuncs/oss-sdk-php/LICENSE.md create mode 100644 vendor/aliyuncs/oss-sdk-php/README-CN.md create mode 100644 vendor/aliyuncs/oss-sdk-php/README.md create mode 100644 vendor/aliyuncs/oss-sdk-php/autoload.php create mode 100644 vendor/aliyuncs/oss-sdk-php/build-phar.sh create mode 100644 vendor/aliyuncs/oss-sdk-php/composer.json create mode 100644 vendor/aliyuncs/oss-sdk-php/example.jpg create mode 100644 vendor/aliyuncs/oss-sdk-php/index.php create mode 100644 vendor/aliyuncs/oss-sdk-php/phpunit.xml create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Bucket.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Callback.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Common.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Config.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Image.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Object.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/RunAll.php create mode 100644 vendor/aliyuncs/oss-sdk-php/samples/Signature.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketStat.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteMarkerInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteObjectInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeletedObjectInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ExtendWormConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/InitiateWormConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionListInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RequestPaymentConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RestoreConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ServerSideEncryptionConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/Tag.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TaggingConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/VersioningConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WormConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectVersionsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketEncryptionResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketInfoResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketRequestPaymentResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketStatResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTagsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketVersioningResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketWormResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateBucketWormResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/DeleteObjectVersionsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketEncryptionResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketRequestPaymentResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketStatResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTagsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketWormResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectVersionsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketEncryptionTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketInfoTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketPolicyTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRequestPaymentTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStatTestTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTagsTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketVersioningTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWormTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTaggingTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectVersioningTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssTrafficLimitTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityConfigTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php create mode 100644 vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php create mode 100644 vendor/autoload.php create mode 100644 vendor/bin/jp.php create mode 100644 vendor/bin/jp.php.bat create mode 100644 vendor/clagiordano/weblibs-configmanager/.github/workflows/php.yml create mode 100644 vendor/clagiordano/weblibs-configmanager/.gitignore create mode 100644 vendor/clagiordano/weblibs-configmanager/.travis.yml create mode 100644 vendor/clagiordano/weblibs-configmanager/README.md create mode 100644 vendor/clagiordano/weblibs-configmanager/composer.json create mode 100644 vendor/clagiordano/weblibs-configmanager/composer.lock create mode 100644 vendor/clagiordano/weblibs-configmanager/phpunit.xml create mode 100644 vendor/clagiordano/weblibs-configmanager/src/ConfigManager.php create mode 100644 vendor/clagiordano/weblibs-configmanager/tests/ConfigManagerTest.php create mode 100644 vendor/clagiordano/weblibs-configmanager/testsdata/sample_config_data.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php create mode 100644 vendor/danielstjules/stringy/CHANGELOG.md create mode 100644 vendor/danielstjules/stringy/LICENSE.txt create mode 100644 vendor/danielstjules/stringy/README.md create mode 100644 vendor/danielstjules/stringy/composer.json create mode 100644 vendor/danielstjules/stringy/src/Create.php create mode 100644 vendor/danielstjules/stringy/src/StaticStringy.php create mode 100644 vendor/danielstjules/stringy/src/Stringy.php create mode 100644 vendor/easywechat-composer/easywechat-composer/.gitignore create mode 100644 vendor/easywechat-composer/easywechat-composer/.php_cs create mode 100644 vendor/easywechat-composer/easywechat-composer/.travis.yml create mode 100644 vendor/easywechat-composer/easywechat-composer/LICENSE create mode 100644 vendor/easywechat-composer/easywechat-composer/README.md create mode 100644 vendor/easywechat-composer/easywechat-composer/composer.json create mode 100644 vendor/easywechat-composer/easywechat-composer/phpunit.xml create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Commands/ExtensionsCommand.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Commands/Provider.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Contracts/Encrypter.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Delegation/DelegationOptions.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Delegation/DelegationTo.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Delegation/Hydrate.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/EasyWeChat.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Encryption/DefaultEncrypter.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Exceptions/DecryptException.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Exceptions/DelegationException.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Exceptions/EncryptException.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Extension.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Http/DelegationResponse.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Http/Response.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Laravel/Http/Controllers/DelegatesController.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Laravel/ServiceProvider.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Laravel/config.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Laravel/routes.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/ManifestManager.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Plugin.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Traits/MakesHttpRequests.php create mode 100644 vendor/easywechat-composer/easywechat-composer/src/Traits/WithAggregator.php create mode 100644 vendor/easywechat-composer/easywechat-composer/tests/ManifestManagerTest.php create mode 100644 vendor/guzzlehttp/guzzle/CHANGELOG.md create mode 100644 vendor/guzzlehttp/guzzle/LICENSE create mode 100644 vendor/guzzlehttp/guzzle/README.md create mode 100644 vendor/guzzlehttp/guzzle/UPGRADING.md create mode 100644 vendor/guzzlehttp/guzzle/composer.json create mode 100644 vendor/guzzlehttp/guzzle/src/BodySummarizer.php create mode 100644 vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Client.php create mode 100644 vendor/guzzlehttp/guzzle/src/ClientInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/ClientTrait.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/HandlerStack.php create mode 100644 vendor/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100644 vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Middleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/Pool.php create mode 100644 vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/RequestOptions.php create mode 100644 vendor/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/TransferStats.php create mode 100644 vendor/guzzlehttp/guzzle/src/Utils.php create mode 100644 vendor/guzzlehttp/guzzle/src/functions.php create mode 100644 vendor/guzzlehttp/guzzle/src/functions_include.php create mode 100644 vendor/guzzlehttp/promises/.php_cs.dist create mode 100644 vendor/guzzlehttp/promises/CHANGELOG.md create mode 100644 vendor/guzzlehttp/promises/LICENSE create mode 100644 vendor/guzzlehttp/promises/Makefile create mode 100644 vendor/guzzlehttp/promises/README.md create mode 100644 vendor/guzzlehttp/promises/composer.json create mode 100644 vendor/guzzlehttp/promises/phpstan-baseline.neon create mode 100644 vendor/guzzlehttp/promises/phpstan.neon.dist create mode 100644 vendor/guzzlehttp/promises/psalm.xml create mode 100644 vendor/guzzlehttp/promises/src/AggregateException.php create mode 100644 vendor/guzzlehttp/promises/src/CancellationException.php create mode 100644 vendor/guzzlehttp/promises/src/Coroutine.php create mode 100644 vendor/guzzlehttp/promises/src/Create.php create mode 100644 vendor/guzzlehttp/promises/src/Each.php create mode 100644 vendor/guzzlehttp/promises/src/EachPromise.php create mode 100644 vendor/guzzlehttp/promises/src/FulfilledPromise.php create mode 100644 vendor/guzzlehttp/promises/src/Is.php create mode 100644 vendor/guzzlehttp/promises/src/Promise.php create mode 100644 vendor/guzzlehttp/promises/src/PromiseInterface.php create mode 100644 vendor/guzzlehttp/promises/src/PromisorInterface.php create mode 100644 vendor/guzzlehttp/promises/src/RejectedPromise.php create mode 100644 vendor/guzzlehttp/promises/src/RejectionException.php create mode 100644 vendor/guzzlehttp/promises/src/TaskQueue.php create mode 100644 vendor/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100644 vendor/guzzlehttp/promises/src/Utils.php create mode 100644 vendor/guzzlehttp/promises/src/functions.php create mode 100644 vendor/guzzlehttp/promises/src/functions_include.php create mode 100644 vendor/guzzlehttp/psr7/CHANGELOG.md create mode 100644 vendor/guzzlehttp/psr7/LICENSE create mode 100644 vendor/guzzlehttp/psr7/README.md create mode 100644 vendor/guzzlehttp/psr7/composer.json create mode 100644 vendor/guzzlehttp/psr7/src/AppendStream.php create mode 100644 vendor/guzzlehttp/psr7/src/BufferStream.php create mode 100644 vendor/guzzlehttp/psr7/src/CachingStream.php create mode 100644 vendor/guzzlehttp/psr7/src/DroppingStream.php create mode 100644 vendor/guzzlehttp/psr7/src/FnStream.php create mode 100644 vendor/guzzlehttp/psr7/src/Header.php create mode 100644 vendor/guzzlehttp/psr7/src/InflateStream.php create mode 100644 vendor/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100644 vendor/guzzlehttp/psr7/src/LimitStream.php create mode 100644 vendor/guzzlehttp/psr7/src/Message.php create mode 100644 vendor/guzzlehttp/psr7/src/MessageTrait.php create mode 100644 vendor/guzzlehttp/psr7/src/MimeType.php create mode 100644 vendor/guzzlehttp/psr7/src/MultipartStream.php create mode 100644 vendor/guzzlehttp/psr7/src/NoSeekStream.php create mode 100644 vendor/guzzlehttp/psr7/src/PumpStream.php create mode 100644 vendor/guzzlehttp/psr7/src/Query.php create mode 100644 vendor/guzzlehttp/psr7/src/Request.php create mode 100644 vendor/guzzlehttp/psr7/src/Response.php create mode 100644 vendor/guzzlehttp/psr7/src/Rfc7230.php create mode 100644 vendor/guzzlehttp/psr7/src/ServerRequest.php create mode 100644 vendor/guzzlehttp/psr7/src/Stream.php create mode 100644 vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100644 vendor/guzzlehttp/psr7/src/StreamWrapper.php create mode 100644 vendor/guzzlehttp/psr7/src/UploadedFile.php create mode 100644 vendor/guzzlehttp/psr7/src/Uri.php create mode 100644 vendor/guzzlehttp/psr7/src/UriNormalizer.php create mode 100644 vendor/guzzlehttp/psr7/src/UriResolver.php create mode 100644 vendor/guzzlehttp/psr7/src/Utils.php create mode 100644 vendor/guzzlehttp/psr7/src/functions.php create mode 100644 vendor/guzzlehttp/psr7/src/functions_include.php create mode 100644 vendor/intervention/image/LICENSE create mode 100644 vendor/intervention/image/composer.json create mode 100644 vendor/intervention/image/provides.json create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractColor.php create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractDecoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractDriver.php create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractEncoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractFont.php create mode 100644 vendor/intervention/image/src/Intervention/Image/AbstractShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/AbstractCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/Argument.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/ChecksumCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/CircleCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/EllipseCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/ExifCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/IptcCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/LineCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/OrientateCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/PolygonCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/PsrResponseCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/RectangleCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/ResponseCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/StreamCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Commands/TextCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Constraint.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/ImageException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/InvalidArgumentException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/MissingDependencyException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/NotFoundException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/NotReadableException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/NotSupportedException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/NotWritableException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Exception/RuntimeException.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Facades/Image.php create mode 100644 vendor/intervention/image/src/Intervention/Image/File.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Filters/DemoFilter.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Filters/FilterInterface.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Color.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BackupCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BlurCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BrightnessCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ColorizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ContrastCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/CropCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/DestroyCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FillCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FitCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FlipCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GammaCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GetSizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GreyscaleCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/HeightenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InsertCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InterlaceCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InvertCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/LimitColorsCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/MaskCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/OpacityCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PickColorCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelateCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResetCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCanvasCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/RotateCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/SharpenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/TrimCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Commands/WidenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Driver.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Encoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Font.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/CircleShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/EllipseShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/LineShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/PolygonShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/RectangleShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Image.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageManager.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageManagerStatic.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageServiceProvider.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravel4.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravelRecent.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLeague.php create mode 100644 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLumen.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Color.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BackupCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BlurCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BrightnessCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ColorizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ContrastCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/CropCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/DestroyCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ExifCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FillCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FitCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FlipCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GammaCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GetSizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GreyscaleCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/HeightenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InsertCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InterlaceCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InvertCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/LimitColorsCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/MaskCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/OpacityCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PickColorCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelateCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResetCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCanvasCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/RotateCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/SharpenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/TrimCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/WidenCommand.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Decoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Driver.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Encoder.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Font.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/CircleShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/EllipseShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/LineShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/PolygonShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/RectangleShape.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Point.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Response.php create mode 100644 vendor/intervention/image/src/Intervention/Image/Size.php create mode 100644 vendor/intervention/image/src/config/config.php create mode 100644 vendor/monolog/monolog/CHANGELOG.md create mode 100644 vendor/monolog/monolog/LICENSE create mode 100644 vendor/monolog/monolog/README.md create mode 100644 vendor/monolog/monolog/UPGRADE.md create mode 100644 vendor/monolog/monolog/composer.json create mode 100644 vendor/monolog/monolog/phpstan.neon.dist create mode 100644 vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php create mode 100644 vendor/monolog/monolog/src/Monolog/ErrorHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Handler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Logger.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Registry.php create mode 100644 vendor/monolog/monolog/src/Monolog/ResettableInterface.php create mode 100644 vendor/monolog/monolog/src/Monolog/SignalHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Test/TestCase.php create mode 100644 vendor/monolog/monolog/src/Monolog/Utils.php create mode 100644 vendor/mtdowling/jmespath.php/LICENSE create mode 100644 vendor/mtdowling/jmespath.php/README.rst create mode 100644 vendor/mtdowling/jmespath.php/bin/jp.php create mode 100644 vendor/mtdowling/jmespath.php/bin/perf.php create mode 100644 vendor/mtdowling/jmespath.php/composer.json create mode 100644 vendor/mtdowling/jmespath.php/src/AstRuntime.php create mode 100644 vendor/mtdowling/jmespath.php/src/CompilerRuntime.php create mode 100644 vendor/mtdowling/jmespath.php/src/DebugRuntime.php create mode 100644 vendor/mtdowling/jmespath.php/src/Env.php create mode 100644 vendor/mtdowling/jmespath.php/src/FnDispatcher.php create mode 100644 vendor/mtdowling/jmespath.php/src/JmesPath.php create mode 100644 vendor/mtdowling/jmespath.php/src/Lexer.php create mode 100644 vendor/mtdowling/jmespath.php/src/Parser.php create mode 100644 vendor/mtdowling/jmespath.php/src/SyntaxErrorException.php create mode 100644 vendor/mtdowling/jmespath.php/src/TreeCompiler.php create mode 100644 vendor/mtdowling/jmespath.php/src/TreeInterpreter.php create mode 100644 vendor/mtdowling/jmespath.php/src/Utils.php create mode 100644 vendor/overtrue/socialite/.github/FUNDING.yml create mode 100644 vendor/overtrue/socialite/.gitignore create mode 100644 vendor/overtrue/socialite/.php_cs create mode 100644 vendor/overtrue/socialite/.travis.yml create mode 100644 vendor/overtrue/socialite/LICENSE.txt create mode 100644 vendor/overtrue/socialite/README.md create mode 100644 vendor/overtrue/socialite/composer.json create mode 100644 vendor/overtrue/socialite/phpunit.xml create mode 100644 vendor/overtrue/socialite/src/AccessToken.php create mode 100644 vendor/overtrue/socialite/src/AccessTokenInterface.php create mode 100644 vendor/overtrue/socialite/src/AuthorizeFailedException.php create mode 100644 vendor/overtrue/socialite/src/Config.php create mode 100644 vendor/overtrue/socialite/src/FactoryInterface.php create mode 100644 vendor/overtrue/socialite/src/HasAttributes.php create mode 100644 vendor/overtrue/socialite/src/InvalidArgumentException.php create mode 100644 vendor/overtrue/socialite/src/InvalidStateException.php create mode 100644 vendor/overtrue/socialite/src/ProviderInterface.php create mode 100644 vendor/overtrue/socialite/src/Providers/AbstractProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/BaiduProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/DouYinProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/DoubanProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/FacebookProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/FeiShuProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/GitHubProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/GoogleProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/LinkedinProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/OutlookProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/QQProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/TaobaoProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/WeChatProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/WeWorkProvider.php create mode 100644 vendor/overtrue/socialite/src/Providers/WeiboProvider.php create mode 100644 vendor/overtrue/socialite/src/SocialiteManager.php create mode 100644 vendor/overtrue/socialite/src/User.php create mode 100644 vendor/overtrue/socialite/src/UserInterface.php create mode 100644 vendor/overtrue/socialite/src/WeChatComponentInterface.php create mode 100644 vendor/overtrue/socialite/tests/OAuthTest.php create mode 100644 vendor/overtrue/socialite/tests/Providers/WeWorkProviderTest.php create mode 100644 vendor/overtrue/socialite/tests/UserTest.php create mode 100644 vendor/overtrue/socialite/tests/WechatProviderTest.php create mode 100644 vendor/overtrue/wechat/CHANGELOG.md create mode 100644 vendor/overtrue/wechat/CONTRIBUTING.md create mode 100644 vendor/overtrue/wechat/LICENSE create mode 100644 vendor/overtrue/wechat/README.md create mode 100644 vendor/overtrue/wechat/composer.json create mode 100644 vendor/overtrue/wechat/src/BasicService/Application.php create mode 100644 vendor/overtrue/wechat/src/BasicService/ContentSecurity/Client.php create mode 100644 vendor/overtrue/wechat/src/BasicService/ContentSecurity/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Jssdk/Client.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Jssdk/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Media/Client.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Media/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/BasicService/QrCode/Client.php create mode 100644 vendor/overtrue/wechat/src/BasicService/QrCode/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Url/Client.php create mode 100644 vendor/overtrue/wechat/src/BasicService/Url/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Factory.php create mode 100644 vendor/overtrue/wechat/src/Kernel/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/Kernel/BaseClient.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Clauses/Clause.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Config.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Contracts/AccessTokenInterface.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Contracts/Arrayable.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Contracts/EventHandlerInterface.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Contracts/MediaInterface.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Contracts/MessageInterface.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Decorators/FinallyResult.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Decorators/TerminateResult.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Encryptor.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Events/AccessTokenRefreshed.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Events/ApplicationInitialized.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Events/HttpResponseCreated.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Events/ServerGuardResponseCreated.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/BadRequestException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/DecryptException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/Exception.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/HttpException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/InvalidArgumentException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/InvalidConfigException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/RuntimeException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Exceptions/UnboundServiceException.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Helpers.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Http/Response.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Http/StreamResponse.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Log/LogManager.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Article.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Card.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/DeviceEvent.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/DeviceText.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/File.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Image.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Link.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Location.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Media.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Message.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/MiniProgramPage.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/MiniprogramNotice.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Music.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/News.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/NewsItem.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Raw.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/ShortVideo.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/TaskCard.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Text.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/TextCard.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Transfer.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Video.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Messages/Voice.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/ConfigServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/EventDispatcherServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/ExtensionServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/HttpClientServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/LogServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Providers/RequestServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Kernel/ServerGuard.php create mode 100644 vendor/overtrue/wechat/src/Kernel/ServiceContainer.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/AES.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/Arr.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/ArrayAccessible.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/Collection.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/File.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/Helpers.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/Str.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Support/XML.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Traits/HasAttributes.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Traits/HasHttpRequests.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Traits/InteractsWithCache.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Traits/Observable.php create mode 100644 vendor/overtrue/wechat/src/Kernel/Traits/ResponseCastable.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Application.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Certficates/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Certficates/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Kernel/BaseClient.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Kernel/Exceptions/EncryptException.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Kernel/Exceptions/InvalidExtensionException.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Kernel/Exceptions/InvalidSignException.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Material/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Material/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Media/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Media/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/MerchantConfig/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/MerchantConfig/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Withdraw/Client.php create mode 100644 vendor/overtrue/wechat/src/MicroMerchant/Withdraw/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/ActivityMessage/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/ActivityMessage/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/AppCode/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/AppCode/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Application.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Auth/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Auth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Broadcast/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Broadcast/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/CustomerService/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/DataCube/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/DataCube/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Encryptor.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Express/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Express/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Live/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Live/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/CartClient.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/ForwardsMall.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/MediaClient.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/OrderClient.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/ProductClient.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Mall/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/NearbyPoi/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/NearbyPoi/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/OCR/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/OpenData/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/OpenData/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Plugin/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Plugin/DevClient.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Plugin/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/RealtimeLog/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/RealtimeLog/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Search/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Search/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Server/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Soter/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/Soter/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/SubscribeMessage/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/SubscribeMessage/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/TemplateMessage/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/TemplateMessage/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/UniformMessage/Client.php create mode 100644 vendor/overtrue/wechat/src/MiniProgram/UniformMessage/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Application.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Auth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/AutoReply/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/AutoReply/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Broadcasting/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Broadcasting/MessageBuilder.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Broadcasting/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/BoardingPassClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/Card.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/CodeClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/CoinClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/GeneralCardClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/GiftCardClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/GiftCardOrderClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/GiftCardPageClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/InvoiceClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/JssdkClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/MeetingTicketClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/MemberCardClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/MovieTicketClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Card/SubMerchantClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Comment/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Comment/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/CustomerService/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/CustomerService/Messenger.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/CustomerService/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/CustomerService/SessionClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/DataCube/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/DataCube/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Device/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Device/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Goods/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Goods/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Guide/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Guide/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Material/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Material/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Menu/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Menu/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/OAuth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/OCR/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/OCR/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/POI/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/POI/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Semantic/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Semantic/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Server/Guard.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Server/Handlers/EchoStrHandler.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Server/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/DeviceClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/GroupClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/MaterialClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/PageClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/RelationClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/ShakeAround.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/ShakeAround/StatsClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Store/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/Store/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/TemplateMessage/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/TemplateMessage/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/User/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/User/TagClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/User/UserClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/WiFi/CardClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/WiFi/Client.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/WiFi/DeviceClient.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/WiFi/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OfficialAccount/WiFi/ShopClient.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Application.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Auth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Auth/VerifyTicket.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/Aggregate/Account/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/Aggregate/AggregateServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Account/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Account/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Application.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Auth/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Code/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Code/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Domain/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Domain/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Setting/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Setting/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Tester/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/MiniProgram/Tester/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/OfficialAccount/Account/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/OfficialAccount/Application.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/OfficialAccount/MiniProgram/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/OfficialAccount/MiniProgram/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/OfficialAccount/OAuth/ComponentDelegate.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Authorizer/Server/Guard.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/CodeTemplate/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/CodeTemplate/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Component/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Component/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/Guard.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/Handlers/Authorized.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/Handlers/Unauthorized.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/Handlers/UpdateAuthorized.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/Handlers/VerifyTicketRefreshed.php create mode 100644 vendor/overtrue/wechat/src/OpenPlatform/Server/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Application.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Auth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Corp/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Corp/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/MiniProgram/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/MiniProgram/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Provider/Client.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Provider/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Server/Guard.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Server/Handlers/EchoStrHandler.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Server/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/SuiteAuth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/SuiteAuth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/SuiteAuth/SuiteTicket.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Work/Application.php create mode 100644 vendor/overtrue/wechat/src/OpenWork/Work/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/Payment/Application.php create mode 100644 vendor/overtrue/wechat/src/Payment/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Bill/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Bill/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Contract/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Contract/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Coupon/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Coupon/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Fundflow/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Fundflow/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Jssdk/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Jssdk/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Kernel/BaseClient.php create mode 100644 vendor/overtrue/wechat/src/Payment/Kernel/Exceptions/InvalidSignException.php create mode 100644 vendor/overtrue/wechat/src/Payment/Kernel/Exceptions/SandboxException.php create mode 100644 vendor/overtrue/wechat/src/Payment/Merchant/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Merchant/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Notify/Handler.php create mode 100644 vendor/overtrue/wechat/src/Payment/Notify/Paid.php create mode 100644 vendor/overtrue/wechat/src/Payment/Notify/Refunded.php create mode 100644 vendor/overtrue/wechat/src/Payment/Notify/Scanned.php create mode 100644 vendor/overtrue/wechat/src/Payment/Order/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Order/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/ProfitSharing/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/ProfitSharing/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Redpack/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Redpack/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Refund/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Refund/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Reverse/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Reverse/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Sandbox/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Sandbox/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Security/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Security/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Payment/Transfer/Client.php create mode 100644 vendor/overtrue/wechat/src/Payment/Transfer/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Agent/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Agent/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Application.php create mode 100644 vendor/overtrue/wechat/src/Work/Auth/AccessToken.php create mode 100644 vendor/overtrue/wechat/src/Work/Auth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Base/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Base/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Calendar/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Calendar/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Chat/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Chat/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Department/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Department/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/ContactWayClient.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/MessageClient.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/SchoolClient.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/ExternalContact/StatisticsClient.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/Image.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/Markdown.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/Message.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/News.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/NewsItem.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messages/Text.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/Messenger.php create mode 100644 vendor/overtrue/wechat/src/Work/GroupRobot/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Invoice/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Invoice/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Jssdk/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Jssdk/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Media/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Media/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Menu/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Menu/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Message/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Message/Messenger.php create mode 100644 vendor/overtrue/wechat/src/Work/Message/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/MiniProgram/Application.php create mode 100644 vendor/overtrue/wechat/src/Work/MiniProgram/Auth/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/MsgAudit/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/MsgAudit/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/OA/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/OA/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/OAuth/AccessTokenDelegate.php create mode 100644 vendor/overtrue/wechat/src/Work/OAuth/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Schedule/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/Schedule/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/Server/Guard.php create mode 100644 vendor/overtrue/wechat/src/Work/Server/Handlers/EchoStrHandler.php create mode 100644 vendor/overtrue/wechat/src/Work/Server/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/User/Client.php create mode 100644 vendor/overtrue/wechat/src/Work/User/ServiceProvider.php create mode 100644 vendor/overtrue/wechat/src/Work/User/TagClient.php create mode 100644 vendor/phpmailer/phpmailer/COMMITMENT create mode 100644 vendor/phpmailer/phpmailer/LICENSE create mode 100644 vendor/phpmailer/phpmailer/README.md create mode 100644 vendor/phpmailer/phpmailer/SECURITY.md create mode 100644 vendor/phpmailer/phpmailer/VERSION create mode 100644 vendor/phpmailer/phpmailer/composer.json create mode 100644 vendor/phpmailer/phpmailer/get_oauth_token.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php create mode 100644 vendor/phpmailer/phpmailer/src/Exception.php create mode 100644 vendor/phpmailer/phpmailer/src/OAuth.php create mode 100644 vendor/phpmailer/phpmailer/src/PHPMailer.php create mode 100644 vendor/phpmailer/phpmailer/src/POP3.php create mode 100644 vendor/phpmailer/phpmailer/src/SMTP.php create mode 100644 vendor/pimple/pimple/.gitignore create mode 100644 vendor/pimple/pimple/.php_cs.dist create mode 100644 vendor/pimple/pimple/.travis.yml create mode 100644 vendor/pimple/pimple/CHANGELOG create mode 100644 vendor/pimple/pimple/LICENSE create mode 100644 vendor/pimple/pimple/README.rst create mode 100644 vendor/pimple/pimple/composer.json create mode 100644 vendor/pimple/pimple/phpunit.xml.dist create mode 100644 vendor/pimple/pimple/src/Pimple/Container.php create mode 100644 vendor/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php create mode 100644 vendor/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php create mode 100644 vendor/pimple/pimple/src/Pimple/Exception/InvalidServiceIdentifierException.php create mode 100644 vendor/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php create mode 100644 vendor/pimple/pimple/src/Pimple/Psr11/Container.php create mode 100644 vendor/pimple/pimple/src/Pimple/Psr11/ServiceLocator.php create mode 100644 vendor/pimple/pimple/src/Pimple/ServiceIterator.php create mode 100644 vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php create mode 100644 vendor/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php create mode 100644 vendor/psr/cache/CHANGELOG.md create mode 100644 vendor/psr/cache/LICENSE.txt create mode 100644 vendor/psr/cache/README.md create mode 100644 vendor/psr/cache/composer.json create mode 100644 vendor/psr/cache/src/CacheException.php create mode 100644 vendor/psr/cache/src/CacheItemInterface.php create mode 100644 vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100644 vendor/psr/cache/src/InvalidArgumentException.php create mode 100644 vendor/psr/container/.gitignore create mode 100644 vendor/psr/container/LICENSE create mode 100644 vendor/psr/container/README.md create mode 100644 vendor/psr/container/composer.json create mode 100644 vendor/psr/container/src/ContainerExceptionInterface.php create mode 100644 vendor/psr/container/src/ContainerInterface.php create mode 100644 vendor/psr/container/src/NotFoundExceptionInterface.php create mode 100644 vendor/psr/event-dispatcher/.editorconfig create mode 100644 vendor/psr/event-dispatcher/.gitignore create mode 100644 vendor/psr/event-dispatcher/LICENSE create mode 100644 vendor/psr/event-dispatcher/README.md create mode 100644 vendor/psr/event-dispatcher/composer.json create mode 100644 vendor/psr/event-dispatcher/src/EventDispatcherInterface.php create mode 100644 vendor/psr/event-dispatcher/src/ListenerProviderInterface.php create mode 100644 vendor/psr/event-dispatcher/src/StoppableEventInterface.php create mode 100644 vendor/psr/http-client/CHANGELOG.md create mode 100644 vendor/psr/http-client/LICENSE create mode 100644 vendor/psr/http-client/README.md create mode 100644 vendor/psr/http-client/composer.json create mode 100644 vendor/psr/http-client/src/ClientExceptionInterface.php create mode 100644 vendor/psr/http-client/src/ClientInterface.php create mode 100644 vendor/psr/http-client/src/NetworkExceptionInterface.php create mode 100644 vendor/psr/http-client/src/RequestExceptionInterface.php create mode 100644 vendor/psr/http-message/CHANGELOG.md create mode 100644 vendor/psr/http-message/LICENSE create mode 100644 vendor/psr/http-message/README.md create mode 100644 vendor/psr/http-message/composer.json create mode 100644 vendor/psr/http-message/src/MessageInterface.php create mode 100644 vendor/psr/http-message/src/RequestInterface.php create mode 100644 vendor/psr/http-message/src/ResponseInterface.php create mode 100644 vendor/psr/http-message/src/ServerRequestInterface.php create mode 100644 vendor/psr/http-message/src/StreamInterface.php create mode 100644 vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 vendor/psr/http-message/src/UriInterface.php create mode 100644 vendor/psr/log/LICENSE create mode 100644 vendor/psr/log/Psr/Log/AbstractLogger.php create mode 100644 vendor/psr/log/Psr/Log/InvalidArgumentException.php create mode 100644 vendor/psr/log/Psr/Log/LogLevel.php create mode 100644 vendor/psr/log/Psr/Log/LoggerAwareInterface.php create mode 100644 vendor/psr/log/Psr/Log/LoggerAwareTrait.php create mode 100644 vendor/psr/log/Psr/Log/LoggerInterface.php create mode 100644 vendor/psr/log/Psr/Log/LoggerTrait.php create mode 100644 vendor/psr/log/Psr/Log/NullLogger.php create mode 100644 vendor/psr/log/Psr/Log/Test/DummyTest.php create mode 100644 vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php create mode 100644 vendor/psr/log/Psr/Log/Test/TestLogger.php create mode 100644 vendor/psr/log/README.md create mode 100644 vendor/psr/log/composer.json create mode 100644 vendor/psr/simple-cache/.editorconfig create mode 100644 vendor/psr/simple-cache/LICENSE.md create mode 100644 vendor/psr/simple-cache/README.md create mode 100644 vendor/psr/simple-cache/composer.json create mode 100644 vendor/psr/simple-cache/src/CacheException.php create mode 100644 vendor/psr/simple-cache/src/CacheInterface.php create mode 100644 vendor/psr/simple-cache/src/InvalidArgumentException.php create mode 100644 vendor/qcloudsms/qcloudsms_php/.gitignore create mode 100644 vendor/qcloudsms/qcloudsms_php/LICENSE create mode 100644 vendor/qcloudsms/qcloudsms_php/README.md create mode 100644 vendor/qcloudsms/qcloudsms_php/composer.json create mode 100644 vendor/qcloudsms/qcloudsms_php/demo/README.md create mode 100644 vendor/qcloudsms/qcloudsms_php/demo/composer/README.md create mode 100644 vendor/qcloudsms/qcloudsms_php/demo/composer/app.php create mode 100644 vendor/qcloudsms/qcloudsms_php/demo/composer/composer.json create mode 100644 vendor/qcloudsms/qcloudsms_php/demo/simple/app.php create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/PROJECT_VERSION create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/FileVoiceSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMobileStatusPuller.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMultiSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSenderUtil.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSingleSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsStatusPuller.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoicePromptSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoiceVerifyCodeSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/TtsVoiceSender.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/VoiceFileUploader.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/SAMI_VERSION create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/classes.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap-theme.min.css create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap.min.css create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/css/sami.css create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/doc-index.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.eot create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.svg create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.ttf create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.woff create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image1.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image2.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image3.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image4.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image5.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image6.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image7.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image8.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/images/image9.png create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/index.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/interfaces.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/js/bootstrap.min.js create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/js/jquery-1.11.1.min.js create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/js/typeahead.min.js create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/namespaces.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/opensearch.xml create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/renderer.index create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/sami.js create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/search.html create mode 100644 vendor/qcloudsms/qcloudsms_php/docs/traits.html create mode 100644 vendor/qcloudsms/qcloudsms_php/gendoc.sh create mode 100644 vendor/qcloudsms/qcloudsms_php/sami_config.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/FileVoiceSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsMobileStatusPuller.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsMultiSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsSenderUtil.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsSingleSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsStatusPuller.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsVoicePromptSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/SmsVoiceVerifyCodeSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/TtsVoiceSender.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/VoiceFileUploader.php create mode 100644 vendor/qcloudsms/qcloudsms_php/src/index.php create mode 100644 vendor/ralouphie/getallheaders/LICENSE create mode 100644 vendor/ralouphie/getallheaders/README.md create mode 100644 vendor/ralouphie/getallheaders/composer.json create mode 100644 vendor/ralouphie/getallheaders/src/getallheaders.php create mode 100644 vendor/symfony/cache-contracts/.gitignore create mode 100644 vendor/symfony/cache-contracts/CHANGELOG.md create mode 100644 vendor/symfony/cache-contracts/CacheInterface.php create mode 100644 vendor/symfony/cache-contracts/CacheTrait.php create mode 100644 vendor/symfony/cache-contracts/CallbackInterface.php create mode 100644 vendor/symfony/cache-contracts/ItemInterface.php create mode 100644 vendor/symfony/cache-contracts/LICENSE create mode 100644 vendor/symfony/cache-contracts/README.md create mode 100644 vendor/symfony/cache-contracts/TagAwareCacheInterface.php create mode 100644 vendor/symfony/cache-contracts/composer.json create mode 100644 vendor/symfony/cache/Adapter/AbstractAdapter.php create mode 100644 vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php create mode 100644 vendor/symfony/cache/Adapter/AdapterInterface.php create mode 100644 vendor/symfony/cache/Adapter/ApcuAdapter.php create mode 100644 vendor/symfony/cache/Adapter/ArrayAdapter.php create mode 100644 vendor/symfony/cache/Adapter/ChainAdapter.php create mode 100644 vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php create mode 100644 vendor/symfony/cache/Adapter/DoctrineAdapter.php create mode 100644 vendor/symfony/cache/Adapter/FilesystemAdapter.php create mode 100644 vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php create mode 100644 vendor/symfony/cache/Adapter/MemcachedAdapter.php create mode 100644 vendor/symfony/cache/Adapter/NullAdapter.php create mode 100644 vendor/symfony/cache/Adapter/ParameterNormalizer.php create mode 100644 vendor/symfony/cache/Adapter/PdoAdapter.php create mode 100644 vendor/symfony/cache/Adapter/PhpArrayAdapter.php create mode 100644 vendor/symfony/cache/Adapter/PhpFilesAdapter.php create mode 100644 vendor/symfony/cache/Adapter/ProxyAdapter.php create mode 100644 vendor/symfony/cache/Adapter/Psr16Adapter.php create mode 100644 vendor/symfony/cache/Adapter/RedisAdapter.php create mode 100644 vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php create mode 100644 vendor/symfony/cache/Adapter/TagAwareAdapter.php create mode 100644 vendor/symfony/cache/Adapter/TagAwareAdapterInterface.php create mode 100644 vendor/symfony/cache/Adapter/TraceableAdapter.php create mode 100644 vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php create mode 100644 vendor/symfony/cache/CHANGELOG.md create mode 100644 vendor/symfony/cache/CacheItem.php create mode 100644 vendor/symfony/cache/DataCollector/CacheDataCollector.php create mode 100644 vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php create mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolClearerPass.php create mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolPass.php create mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php create mode 100644 vendor/symfony/cache/DoctrineProvider.php create mode 100644 vendor/symfony/cache/Exception/CacheException.php create mode 100644 vendor/symfony/cache/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/cache/Exception/LogicException.php create mode 100644 vendor/symfony/cache/LICENSE create mode 100644 vendor/symfony/cache/LockRegistry.php create mode 100644 vendor/symfony/cache/Marshaller/DefaultMarshaller.php create mode 100644 vendor/symfony/cache/Marshaller/DeflateMarshaller.php create mode 100644 vendor/symfony/cache/Marshaller/MarshallerInterface.php create mode 100644 vendor/symfony/cache/Marshaller/SodiumMarshaller.php create mode 100644 vendor/symfony/cache/Marshaller/TagAwareMarshaller.php create mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php create mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationHandler.php create mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationMessage.php create mode 100644 vendor/symfony/cache/PruneableInterface.php create mode 100644 vendor/symfony/cache/Psr16Cache.php create mode 100644 vendor/symfony/cache/README.md create mode 100644 vendor/symfony/cache/ResettableInterface.php create mode 100644 vendor/symfony/cache/Traits/AbstractAdapterTrait.php create mode 100644 vendor/symfony/cache/Traits/ContractsTrait.php create mode 100644 vendor/symfony/cache/Traits/FilesystemCommonTrait.php create mode 100644 vendor/symfony/cache/Traits/FilesystemTrait.php create mode 100644 vendor/symfony/cache/Traits/MemcachedTrait.php create mode 100644 vendor/symfony/cache/Traits/ProxyTrait.php create mode 100644 vendor/symfony/cache/Traits/RedisClusterProxy.php create mode 100644 vendor/symfony/cache/Traits/RedisProxy.php create mode 100644 vendor/symfony/cache/Traits/RedisTrait.php create mode 100644 vendor/symfony/cache/composer.json create mode 100644 vendor/symfony/deprecation-contracts/.gitignore create mode 100644 vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 vendor/symfony/deprecation-contracts/LICENSE create mode 100644 vendor/symfony/deprecation-contracts/README.md create mode 100644 vendor/symfony/deprecation-contracts/composer.json create mode 100644 vendor/symfony/deprecation-contracts/function.php create mode 100644 vendor/symfony/event-dispatcher-contracts/.gitignore create mode 100644 vendor/symfony/event-dispatcher-contracts/CHANGELOG.md create mode 100644 vendor/symfony/event-dispatcher-contracts/Event.php create mode 100644 vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php create mode 100644 vendor/symfony/event-dispatcher-contracts/LICENSE create mode 100644 vendor/symfony/event-dispatcher-contracts/README.md create mode 100644 vendor/symfony/event-dispatcher-contracts/composer.json create mode 100644 vendor/symfony/event-dispatcher/CHANGELOG.md create mode 100644 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/Debug/WrappedListener.php create mode 100644 vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php create mode 100644 vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php create mode 100644 vendor/symfony/event-dispatcher/EventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/EventDispatcherInterface.php create mode 100644 vendor/symfony/event-dispatcher/EventSubscriberInterface.php create mode 100644 vendor/symfony/event-dispatcher/GenericEvent.php create mode 100644 vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/LICENSE create mode 100644 vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php create mode 100644 vendor/symfony/event-dispatcher/README.md create mode 100644 vendor/symfony/event-dispatcher/composer.json create mode 100644 vendor/symfony/http-foundation/AcceptHeader.php create mode 100644 vendor/symfony/http-foundation/AcceptHeaderItem.php create mode 100644 vendor/symfony/http-foundation/BinaryFileResponse.php create mode 100644 vendor/symfony/http-foundation/CHANGELOG.md create mode 100644 vendor/symfony/http-foundation/Cookie.php create mode 100644 vendor/symfony/http-foundation/Exception/BadRequestException.php create mode 100644 vendor/symfony/http-foundation/Exception/ConflictingHeadersException.php create mode 100644 vendor/symfony/http-foundation/Exception/JsonException.php create mode 100644 vendor/symfony/http-foundation/Exception/RequestExceptionInterface.php create mode 100644 vendor/symfony/http-foundation/Exception/SuspiciousOperationException.php create mode 100644 vendor/symfony/http-foundation/ExpressionRequestMatcher.php create mode 100644 vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/CannotWriteFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/ExtensionFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/FileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/FormSizeFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/IniSizeFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/NoFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/NoTmpDirFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/PartialFileException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php create mode 100644 vendor/symfony/http-foundation/File/Exception/UploadException.php create mode 100644 vendor/symfony/http-foundation/File/File.php create mode 100644 vendor/symfony/http-foundation/File/Stream.php create mode 100644 vendor/symfony/http-foundation/File/UploadedFile.php create mode 100644 vendor/symfony/http-foundation/FileBag.php create mode 100644 vendor/symfony/http-foundation/HeaderBag.php create mode 100644 vendor/symfony/http-foundation/HeaderUtils.php create mode 100644 vendor/symfony/http-foundation/InputBag.php create mode 100644 vendor/symfony/http-foundation/IpUtils.php create mode 100644 vendor/symfony/http-foundation/JsonResponse.php create mode 100644 vendor/symfony/http-foundation/LICENSE create mode 100644 vendor/symfony/http-foundation/ParameterBag.php create mode 100644 vendor/symfony/http-foundation/README.md create mode 100644 vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php create mode 100644 vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php create mode 100644 vendor/symfony/http-foundation/RedirectResponse.php create mode 100644 vendor/symfony/http-foundation/Request.php create mode 100644 vendor/symfony/http-foundation/RequestMatcher.php create mode 100644 vendor/symfony/http-foundation/RequestMatcherInterface.php create mode 100644 vendor/symfony/http-foundation/RequestStack.php create mode 100644 vendor/symfony/http-foundation/Response.php create mode 100644 vendor/symfony/http-foundation/ResponseHeaderBag.php create mode 100644 vendor/symfony/http-foundation/ServerBag.php create mode 100644 vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php create mode 100644 vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php create mode 100644 vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php create mode 100644 vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php create mode 100644 vendor/symfony/http-foundation/Session/Flash/FlashBag.php create mode 100644 vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php create mode 100644 vendor/symfony/http-foundation/Session/Session.php create mode 100644 vendor/symfony/http-foundation/Session/SessionBagInterface.php create mode 100644 vendor/symfony/http-foundation/Session/SessionBagProxy.php create mode 100644 vendor/symfony/http-foundation/Session/SessionInterface.php create mode 100644 vendor/symfony/http-foundation/Session/SessionUtils.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/MetadataBag.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php create mode 100644 vendor/symfony/http-foundation/StreamedResponse.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php create mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php create mode 100644 vendor/symfony/http-foundation/UrlHelper.php create mode 100644 vendor/symfony/http-foundation/composer.json create mode 100644 vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 vendor/symfony/polyfill-mbstring/README.md create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 vendor/symfony/polyfill-mbstring/composer.json create mode 100644 vendor/symfony/polyfill-php80/LICENSE create mode 100644 vendor/symfony/polyfill-php80/Php80.php create mode 100644 vendor/symfony/polyfill-php80/README.md create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100644 vendor/symfony/polyfill-php80/bootstrap.php create mode 100644 vendor/symfony/polyfill-php80/composer.json create mode 100644 vendor/symfony/psr-http-message-bridge/.gitignore create mode 100644 vendor/symfony/psr-http-message-bridge/.php_cs.dist create mode 100644 vendor/symfony/psr-http-message-bridge/.travis.yml create mode 100644 vendor/symfony/psr-http-message-bridge/CHANGELOG.md create mode 100644 vendor/symfony/psr-http-message-bridge/Factory/HttpFoundationFactory.php create mode 100644 vendor/symfony/psr-http-message-bridge/Factory/PsrHttpFactory.php create mode 100644 vendor/symfony/psr-http-message-bridge/Factory/UploadedFile.php create mode 100644 vendor/symfony/psr-http-message-bridge/HttpFoundationFactoryInterface.php create mode 100644 vendor/symfony/psr-http-message-bridge/HttpMessageFactoryInterface.php create mode 100644 vendor/symfony/psr-http-message-bridge/LICENSE create mode 100644 vendor/symfony/psr-http-message-bridge/README.md create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Factory/AbstractHttpMessageFactoryTest.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Factory/HttpFoundationFactoryTest.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Factory/PsrHttpFactoryTest.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/Message.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/Response.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/ServerRequest.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/Stream.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/UploadedFile.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Fixtures/Uri.php create mode 100644 vendor/symfony/psr-http-message-bridge/Tests/Functional/CovertTest.php create mode 100644 vendor/symfony/psr-http-message-bridge/composer.json create mode 100644 vendor/symfony/psr-http-message-bridge/phpunit.xml.dist create mode 100644 vendor/symfony/service-contracts/.gitignore create mode 100644 vendor/symfony/service-contracts/Attribute/Required.php create mode 100644 vendor/symfony/service-contracts/CHANGELOG.md create mode 100644 vendor/symfony/service-contracts/LICENSE create mode 100644 vendor/symfony/service-contracts/README.md create mode 100644 vendor/symfony/service-contracts/ResetInterface.php create mode 100644 vendor/symfony/service-contracts/ServiceLocatorTrait.php create mode 100644 vendor/symfony/service-contracts/ServiceProviderInterface.php create mode 100644 vendor/symfony/service-contracts/ServiceSubscriberInterface.php create mode 100644 vendor/symfony/service-contracts/ServiceSubscriberTrait.php create mode 100644 vendor/symfony/service-contracts/Test/ServiceLocatorTest.php create mode 100644 vendor/symfony/service-contracts/composer.json create mode 100644 vendor/symfony/var-exporter/CHANGELOG.md create mode 100644 vendor/symfony/var-exporter/Exception/ClassNotFoundException.php create mode 100644 vendor/symfony/var-exporter/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php create mode 100644 vendor/symfony/var-exporter/Instantiator.php create mode 100644 vendor/symfony/var-exporter/Internal/Exporter.php create mode 100644 vendor/symfony/var-exporter/Internal/Hydrator.php create mode 100644 vendor/symfony/var-exporter/Internal/Reference.php create mode 100644 vendor/symfony/var-exporter/Internal/Registry.php create mode 100644 vendor/symfony/var-exporter/Internal/Values.php create mode 100644 vendor/symfony/var-exporter/LICENSE create mode 100644 vendor/symfony/var-exporter/README.md create mode 100644 vendor/symfony/var-exporter/VarExporter.php create mode 100644 vendor/symfony/var-exporter/composer.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c9120f --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/cache +/data +/tslogs +/uploadfile +.git +.idea +.history +.vscode +.htaccess +.DS_Store +upgrade.sql +upgrade.txt +auto_install.json \ No newline at end of file diff --git a/.user.ini b/.user.ini new file mode 100644 index 0000000..053b273 --- /dev/null +++ b/.user.ini @@ -0,0 +1 @@ +open_basedir=/www/wwwroot/beta.lmve.net/:/tmp/ \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000..99ff94f --- /dev/null +++ b/404.html @@ -0,0 +1,26 @@ + + + + + + +404 + + + + +

404,您请求的文件ä¸å­˜åœ¨!

+ + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dfd7c40 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +FROM php:7.2-apache + +RUN apt-get update \ + # 相关ä¾èµ–必须手动安装 + && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev \ + # memcached 的相关ä¾èµ– + && apt-get install -y libmemcached-dev zlib1g-dev \ + # 安装扩展 + && docker-php-ext-install -j$(nproc) iconv \ + # 如果安装的扩展需è¦è‡ªå®šä¹‰é…置时 + && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ + && docker-php-ext-install -j$(nproc) gd \ + # pecl 安å“mcrypt php从7.2开始ä¸å†åœ¨æºç é‡Œæ”¯æŒmcrypt扩展而转到peclæ–¹å¼æ”¯æŒ + && pecl install mcrypt-1.0.1 \ + && docker-php-ext-enable mcrypt \ + # 其他扩展 + && docker-php-ext-install mysqli \ + && docker-php-ext-install pdo_mysql \ + # pecl安装phpçš„memcached扩展 + && pecl install memcached \ + # å¯ç”¨memcached 扩展 + && docker-php-ext-enable memcached \ + # pecl 安装phpçš„redis扩展 + && pecl install redis \ + # å¯ç”¨redis扩展 + && docker-php-ext-enable redis + +COPY . /var/www/html/ + +RUN chmod -R 755 /var/www/html/cache +RUN chmod -R 755 /var/www/html/data +RUN chmod -R 755 /var/www/html/tslogs +RUN chmod -R 755 /var/www/html/upgrade +RUN chmod -R 755 /var/www/html/uploadfile + +ENV APACHE_RUN_USER www-data +ENV APACHE_RUN_GROUP www-data +ENV APACHE_LOG_DIR /var/log/apache2 +ENV APACHE_PID_FILE /var/run/apache2.pid +ENV APACHE_RUN_DIR /var/run/apache2 +ENV APACHE_LOCK_DIR /var/lock/apache2 +ENV APACHE_SERVERADMIN admin@localhost +ENV APACHE_SERVERNAME localhost +ENV APACHE_SERVERALIAS docker.localhost +ENV APACHE_DOCUMENTROOT /var/www + +WORKDIR /var/www/html +ENTRYPOINT apache2 -D FOREGROUND \ No newline at end of file diff --git a/INSTALL.TXT b/INSTALL.TXT new file mode 100644 index 0000000..ec41237 --- /dev/null +++ b/INSTALL.TXT @@ -0,0 +1,22 @@ +++++ThinkSAAS安装说明 + +ã€æŽ¨èè¿è¡ŒçŽ¯å¢ƒã€‘ +PHP7.0åŠä»¥ä¸Šç‰ˆæœ¬(建议使用php7.2),MySQL5.5åŠä»¥ä¸Šç‰ˆæœ¬ï¼ˆå»ºè®®ä½¿ç”¨mysql5.6ï¼‰ï¼Œä¸æ”¯æŒMySQL8 +推è使用Linux + Apache或者Linux + Nginx环境的主机 +ã€å®‰è£…说明】 +1ã€ä¸Šä¼ ç›®å½•下所有文件到你的网站根目录下 +(Linux系统必须使用FTP二进制上传) +2ã€ç›´æŽ¥è¾“入你的网å€è¿›è¡Œå®‰è£… +(ä¸è¦å¸¦install) +3ã€æ ¹æ®å®‰è£…æç¤ºè¾“入数æ®åº“连接信æ¯ã€ç½‘站信æ¯å’Œç®¡ç†å‘˜ä¿¡æ¯ +(安装å‰è¯·ä¸ºThinkSAAS手动新建一个空数æ®åº“) +4ã€å®‰è£…æˆåŠŸã€‚ + +ã€æ³¨æ„】 + +请ä¿è¯ä»¥ä¸‹ç›®å½•和目录下所有文件的å¯å†™æƒé™(777) +cache +data +tslogs +upgrade +uploadfile \ No newline at end of file diff --git a/LICENSE.TXT b/LICENSE.TXT new file mode 100644 index 0000000..4f0df43 --- /dev/null +++ b/LICENSE.TXT @@ -0,0 +1,18 @@ +ã€ç”¨æˆ·æ¡æ¬¾ã€‘ +本å议适用ThinkSAASå‘布的所有程åºç‰ˆæœ¬å’Œä»£ç ï¼Œæ‰€æœ‰ç‰ˆæœ¬éƒ½å°†æŒ‰ç…§æœ€æ–°å‘布的ã€ç”¨æˆ·æ¡æ¬¾ã€‘执行。 +1ã€ThinkSAAS官方指:ThinkSAAS社区ã€thinksaas.cnå’ŒThinkSAAS社区系统开å‘者邱å›ã€‚ +2ã€ThinkSAASç¦æ­¢ç”¨æˆ·åœ¨ä½¿ç”¨ä¸­è§¦çŠ¯ä¸­å›½æ³•å¾‹èŒƒå›´å†…çš„ä»»ä½•æ³•å¾‹æ¡æ–‡ã€‚ +3ã€ThinkSAASã€åŠå…¶åˆ›å§‹äººé‚±å›æ‹¥æœ‰å¯¹ThinkSAAS的所有æƒï¼Œä»»ä½•个人,公å¸å’Œç»„织ä¸å¾—以任何形å¼å’Œç›®çš„侵犯ThinkSAAS的版æƒå’Œè‘—作æƒã€‚ +4ã€ThinkSAAS官方拥有对ThinkSAAS社区软件ç»å¯¹çš„版æƒå’Œè‘—作æƒã€‚ +5ã€ThinkSAAS程åºä»£ç å®Œå…¨å¼€æºï¼Œä¸åšä»»ä½•加密处ç†ã€‚ThinkSAASå…许ã€è‡ªèº«è¿è¥ã€‘用户对程åºä»£ç è¿›è¡ŒäºŒæ¬¡å¼€å‘,但必须éµå¾ªæœ¬æ¡æ¬¾ç¬¬6ã€7ã€8å’Œ9æ¡è§„定执行。 +6ã€æ‰€æœ‰ä½¿ç”¨ThinkSAAS的用户在ä¿ç•™åº•部Powered by ThinkSAAS 文字链接或者标识的情况下,å¯ä»¥å…费使用ThinkSAAS。 +7ã€ç”¨æˆ·åœ¨è´­ä¹°ThinkSAAS商业授æƒåŽæ‰å¯ä»¥åŽ»é™¤åº•éƒ¨Powered by ThinkSAAS 文字链接或者标识。 +8ã€ThinkSAASä¸ä¼šç›‘控用户网站信æ¯ï¼Œä½†æœ‰æƒé€šè¿‡é‚®ä»¶æˆ–者其他è”系方å¼èŽ·æ‚‰ç”¨æˆ·ä½¿ç”¨æƒ…å†µï¼Œæœ‰æƒæ‹¿ç”¨æˆ·ç½‘站用作案例展示。 +9ã€åœ¨æœªç»ThinkSAAS官方书é¢å…许的情况下,除ã€è‡ªèº«è¿è¥ã€‘外,任何个人ã€å…¬å¸å’Œç»„织ä¸èƒ½å•æ–¹é¢å‘布和出售以ThinkSAAS为基础开å‘的任何互è”网软件或者产å“,å¦åˆ™å°†è§†ä¸ºä¾µæƒè¡Œä¸ºï¼Œå°†ä¾ç…§ä¸­åŽäººæ°‘共和国法律追究其法律责任。 +10ã€å…¬å¸ä¼ä¸šç­‰ç»„织机构使用ThinkSAAS软件必须购买ThinkSAAS商业授æƒå议。 +11ã€ThinkSAAS官方拥有对此åè®®çš„ä¿®æ”¹å’Œä¸æ–­å®Œå–„。 + +ã€è‡ªèº«è¿è¥ã€‘解释:å³ç”¨æˆ·åœ¨ä½¿ç”¨ThinkSAAS中,ä¸é€šè¿‡å‡ºå”®ä»»ä½•以ThinkSAAS为基础开å‘的产å“,仅用作自身学习和自身商业è¿è¥çš„网站。 +ã€ç”¨æˆ·æ¡æ¬¾ã€‘网å€ï¼šhttps://www.thinksaas.cn/home/info/3/ +ã€å®˜æ–¹ç½‘站】网å€ï¼šhttps://www.thinksaas.cn/ +ã€æ¼”示网站】网å€ï¼šhttps://demo.thinksaas.cn/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a6b2e1 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +## ThinkSAAS简介 + +ThinkSAAS是一个轻é‡çº§çš„å¼€æºç¤¾åŒºç³»ç»Ÿï¼Œæ˜¯ä¸€ä¸ªå¯ä»¥ç”¨æ¥æ­å»ºåž‚直网络的社区系统。 +ThinkSAAS是一个简å•,高扩展的社区开å‘系统。 +ThinkSAASå¯ä»¥å¸®ä½ å¿«é€Ÿå¼€å‘å’Œæ­å»ºä¸Žä¼—ä¸åŒçš„交æµç¤¾åŒºã€‚ + +## å¼€å‘环境 + +php >= 7.0 (支æŒphp7+ã€php8+) +MySQL >= 5.5 (支æŒmysql5+,mysql8) +MariaDB >= 5.5(支æŒmariadb10) +Apache / Nginx +Windows / Linux +建议采用lnmp或者lamp环境 + +## 系统特点 + +å¼€å‘简å•,php新手也å¯ä»¥å¼€å‘强大功能 +å•ä¸€å…¥å£ +扩展强大,支æŒåº”用扩展和æ’件扩展,支æŒhttp apiæŽ¥å£æ‰©å±• +APPå¯å•独é…置独立数æ®åº“ +多端自适应,集æˆbootstrap +底层加载速度快,抗压和并å‘能力强 +支æŒcomposeræ–¹å¼å®‰è£…php第三方扩展库 +系统稳定ã€åŠŸèƒ½æ¨¡å—化ã€äºŒæ¬¡å¼€å‘简å•,æŒç»­å‡çº§ +适åˆä¸ªäººå’Œå›¢é˜Ÿåä½œå¼€å‘ + +## 系统基础功能 + +用户中心模å—(user) +ç³»ç»Ÿç®¡ç†æ¨¡å—(system) +å°ç»„模å—(group) +è¯é¢˜æ¨¡å—(topic) +文章模å—(article) +相册模å—(photo) +标签模å—(tag) +邮件模å—(mail) +æ¶ˆæ¯æ¨¡å—(message) +唠卿¨¡å—(weibo) +æœç´¢æ¨¡å—(search) +我的社区(my) +支æŒEmail注册登录 +æ”¯æŒæ‰‹æœºå·æ³¨å†Œ +支æŒçŸ­ä¿¡éªŒè¯ç ç™»å½• +支æŒé˜¿é‡Œäº‘对象存储OSS +支æŒå‘å¸ƒå†…å®¹äººæœºéªŒè¯ +æ”¯æŒæ•感è¯è¿‡æ»¤ +支æŒç”¨æˆ·è¡Œä¸ºæ—¥å¿—记录 +支æŒå¾®ä¿¡å…¬ä¼—å·ç½‘页授æƒç™»å½• +支æŒç”¨æˆ·ç§¯åˆ† +更多特点和功能期待您的å‘çŽ°ï¼ + +## 用户åè®® + +本å议适用ThinkSAASå‘布的所有程åºç‰ˆæœ¬å’Œä»£ç ï¼Œæ‰€æœ‰ç‰ˆæœ¬éƒ½å°†æŒ‰ç…§æœ€æ–°å‘布的ã€ç”¨æˆ·æ¡æ¬¾ã€‘执行。 +1ã€ThinkSAAS官方指:ThinkSAAS社区ã€thinksaas.cnå’ŒThinkSAAS社区系统开å‘者邱å›ã€‚ +2ã€ThinkSAASç¦æ­¢ç”¨æˆ·åœ¨ä½¿ç”¨ä¸­è§¦çŠ¯ä¸­å›½æ³•å¾‹èŒƒå›´å†…çš„ä»»ä½•æ³•å¾‹æ¡æ–‡ã€‚ +3ã€ä»»ä½•个人,公å¸å’Œç»„织ä¸å¾—以任何形å¼å’Œç›®çš„侵犯ThinkSAAS的版æƒå’Œè‘—作æƒã€‚ +4ã€ThinkSAAS官方拥有对ThinkSAAS社区软件ç»å¯¹çš„版æƒå’Œè‘—作æƒã€‚ +5ã€ThinkSAAS程åºä»£ç å®Œå…¨å¼€æºï¼Œä¸åšä»»ä½•加密处ç†ã€‚ThinkSAASå…许ã€è‡ªèº«è¿è¥ã€‘用户对程åºä»£ç è¿›è¡ŒäºŒæ¬¡å¼€å‘,但必须éµå¾ªæœ¬æ¡æ¬¾ç¬¬6ã€7ã€8å’Œ9æ¡è§„定执行。 +6ã€æ‰€æœ‰ä½¿ç”¨ThinkSAAS的用户在ä¿ç•™åº•部Powered by ThinkSAAS 文字链接或者标识的情况下,å¯ä»¥å…费使用ThinkSAAS。 +7ã€ç”¨æˆ·åœ¨è´­ä¹°ThinkSAAS商业授æƒåŽæ‰å¯ä»¥åŽ»é™¤åº•éƒ¨Powered by ThinkSAAS 文字链接或者标识。 +8ã€ThinkSAASä¸ä¼šç›‘控用户网站信æ¯ï¼Œä½†æœ‰æƒé€šè¿‡é‚®ä»¶æˆ–者其他è”系方å¼èŽ·æ‚‰ç”¨æˆ·ä½¿ç”¨æƒ…å†µï¼Œæœ‰æƒæ‹¿ç”¨æˆ·ç½‘站用作案例展示。 +9ã€åœ¨æœªç»ThinkSAAS官方书é¢å…许的情况下,除ã€è‡ªèº«è¿è¥ã€‘外,任何个人ã€å…¬å¸å’Œç»„织ä¸èƒ½å•æ–¹é¢å‘布和出售以ThinkSAAS为基础开å‘的任何互è”网软件或者产å“,å¦åˆ™å°†è§†ä¸ºä¾µæƒè¡Œä¸ºï¼Œå°†ä¾ç…§ä¸­åŽäººæ°‘共和国法律追究其法律责任。 +10ã€å…¬å¸ä¼ä¸šç­‰ç»„织机构使用ThinkSAAS软件必须购买ThinkSAAS商业授æƒå议。 +11ã€ThinkSAAS官方拥有对此åè®®çš„ä¿®æ”¹å’Œä¸æ–­å®Œå–„。 + +ã€è‡ªèº«è¿è¥ã€‘解释:å³ç”¨æˆ·åœ¨ä½¿ç”¨ThinkSAAS中,ä¸é€šè¿‡å‡ºå”®ä»»ä½•以ThinkSAAS为基础开å‘的产å“,仅用作自身学习和自身商业è¿è¥çš„网站。 +ã€ç”¨æˆ·æ¡æ¬¾ã€‘网å€ï¼šhttps://www.thinksaas.cn/home/info/3/ +ã€å®˜æ–¹ç½‘站】网å€ï¼šhttps://www.thinksaas.cn/ +ã€æ¼”示网站】网å€ï¼šhttps://demo.qiniao.com/ + +## 安装说明 + +1ã€ä¸Šä¼ ç›®å½•下所有文件到你的网站根目录下(Linux系统必须使用FTP二进制上传) +2ã€ç›´æŽ¥è¾“入你的网å€è¿›è¡Œå®‰è£…(ä¸è¦å¸¦install) +3ã€æ ¹æ®å®‰è£…æç¤ºè¾“入数æ®åº“连接信æ¯ã€ç½‘站信æ¯å’Œç®¡ç†å‘˜ä¿¡æ¯ï¼ˆå®‰è£…å‰è¯·ä¸ºThinkSAAS手动新建一个空数æ®åº“) +4ã€å®‰è£…æˆåŠŸã€‚ diff --git a/app/.ecoder_permissions_check.txt b/app/.ecoder_permissions_check.txt new file mode 100644 index 0000000..ea29cee --- /dev/null +++ b/app/.ecoder_permissions_check.txt @@ -0,0 +1 @@ +this file was created on Wed. 26th June 2019 at 13:38:22, after ecoder checked the permissions of the folder /www/wwwroot/lmve.net/app/. \ No newline at end of file diff --git a/app/article/.ecoder_permissions_check.txt b/app/article/.ecoder_permissions_check.txt new file mode 100644 index 0000000..81c508d --- /dev/null +++ b/app/article/.ecoder_permissions_check.txt @@ -0,0 +1 @@ +this file was created on Wed. 26th June 2019 at 13:38:28, after ecoder checked the permissions of the folder /www/wwwroot/lmve.net/app/article/. \ No newline at end of file diff --git a/app/article/about.php b/app/article/about.php new file mode 100644 index 0000000..26b4fa1 --- /dev/null +++ b/app/article/about.php @@ -0,0 +1,17 @@ + '文章', + 'version' => '1.2', + 'desc' => '文章', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1' +); \ No newline at end of file diff --git a/app/article/action/add.php b/app/article/action/add.php new file mode 100644 index 0000000..4a44435 --- /dev/null +++ b/app/article/action/add.php @@ -0,0 +1,213 @@ + isLogin(); + +//判断用户是å¦å­˜åœ¨ +if(aac('user')->isUser($userid)==false) tsNotice('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼'); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + +//å‘布时间间隔é™åˆ¶ +if($TS_SITE['timeblank']){ + $lastArticle = $new['article']->find('article',array( + 'userid'=>$userid, + ),'articleid,addtime','addtime desc'); + if($lastArticle){ + if((time()-strtotime($lastArticle['addtime']))<$TS_SITE['timeblank']){ + tsNotice('ä¸å¥½æ„æ€ï¼Œæ‚¨çš„内容å‘é€é¢‘率过高ï¼è¯·ç­‰ç­‰å†å‘布ï¼'); + } + } +} + +//å‘布内容扣除积分é™åˆ¶ +$strScoreOption = $new['article']->find('user_score',array( + 'app'=>'article', + 'action'=>'add', + 'ts'=>'do', +)); +if($strScoreOption && $strScoreOption['status']==1){ + #用户积分数 + $strUserScore = $new['article']->find('user_info',array( + 'userid'=>$userid, + ),'count_score'); + if($strUserScore['count_score']<$strScoreOption['score']){ + tsNotice('ä¸å¥½æ„æ€ï¼Œæ‚¨çš„积分ä¸è¶³ï¼'); + } +} + +switch ($ts) { + case "" : + if ($TS_APP['allowpost'] == 0 && $TS_USER['isadmin'] == 0) { + tsNotice('系统设置ä¸å…è®¸ä¼šå‘˜å‘æ–‡ç« ï¼'); + } + + $cateid = tsIntval($_GET['cateid']); + + + foreach ($arrCate as $key=>$item){ + $arrCate[$key]['two'] = $new['article']->findAll('article_cate',array( + 'referid'=>$item['cateid'], + )); + } + + + #加载è‰ç¨¿ç®± + $strDraft = $new['article']->find('draft',array( + 'userid'=>$userid, + 'types'=>'article', + )); + + + $title = 'å‘布文章'; + include template('add'); + break; + + case "do" : + + #验è¯ç éªŒè¯ + $authcode = strtolower($_POST ['authcode']); + if ($TS_SITE['isauthcode']){ + if ($authcode != $_SESSION['verify']){ + tsNotice("验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ); + } + } + + #äººæœºéªŒè¯ + $vaptcha_token = tsTrim($_POST['vaptcha_token']); + $vaptcha_server = tsTrim($_POST['vaptcha_server']); + if ($TS_SITE['is_vaptcha']){ + $strVt = vaptcha($vaptcha_token,0,$vaptcha_server); + if($strVt['success']==0){ + tsNotice('äººæœºéªŒè¯æœªé€šè¿‡ï¼'); + } + } + + + $cateid = tsIntval($_POST['cateid']); + $cateid2 = tsIntval($_POST['cateid2']); + + if($cateid2) $cateid = $cateid2; + + $title = tsTrim($_POST['title']); + $content = tsClean($_POST['content']); + $content2 = emptyText($_POST['content']); + $gaiyao = tsTrim($_POST['gaiyao']); + $tag = tsClean($_POST['tag']); + $addtime = date('Y-m-d H:i:s'); + + $score = tsIntval($_POST ['score']);#积分 + + + //匿å用户 + $isniming = tsIntval($_POST['isniming']); + if($TS_SITE['isniming']==1 && $isniming==1) $userid = aac('user')->getNimingId(); + + + + if (tsIntval($TS_USER['isadmin']) == 0) { + // 过滤内容开始 + $title = antiWord($title); + $content = antiWord($content); + $tag = antiWord($tag); + // è¿‡æ»¤å†…å®¹ç»“æŸ + } + + if ($title == '' || $content2 == '' || $content=='') + tsNotice("标题和内容都ä¸èƒ½ä¸ºç©ºï¼"); + + $isTitle = $new['article']->findCount('article',array( + 'title'=>$title, + )); + + if($isTitle){ + tsNotice("ç›¸åŒæ ‡é¢˜çš„æ–‡ç« å·²ç»å­˜åœ¨ï¼"); + } + + if($gaiyao){ + $gaiyao = cututf8($gaiyao,0,100); + }else{ + $gaiyao = cututf8(t(tsDecode($content)),0,100); + } + + if($score<0){ + tsNotice ( '积分填写有误ï¼' ); + } + + //1å®¡æ ¸åŽæ˜¾ç¤º0ä¸å®¡æ ¸ + if ($TS_APP['isaudit'] == 1) { + $isaudit = 1; + } else { + $isaudit = 0; + } + + $articleid = $new['article'] -> create('article', array( + 'userid' => $userid, + 'cateid' => $cateid, + 'title' => $title, + #'content' => $content, + 'gaiyao' => $gaiyao, + 'score'=>$score, + 'isaudit' => $isaudit, + 'addtime' => date('Y-m-d H:i:s') + )); + + if($articleid){ + + $new['article'] -> create('article_content', array( + 'articleid' => $articleid, + 'content' => $content, + )); + + + #清空è‰ç¨¿ç®± + $new['article']->delete('draft',array( + 'userid'=>$userid, + 'types'=>'article', + )); + + + // 上传图片开始 + $arrUpload = tsUpload($_FILES['photo'], $articleid, 'article', array('jpg', 'gif', 'png', 'jpeg')); + if ($arrUpload) { + $new['article'] -> update('article', array( + 'articleid' => $articleid + ), array( + 'path' => $arrUpload['path'], + 'photo' => $arrUpload['url'] + )); + + #生æˆä¸åŒå°ºå¯¸çš„图片 + tsXimg($arrUpload['url'],'article',320,180,$arrUpload['path'],'1'); + //tsXimg($arrUpload['url'],'article',640,'',$arrUpload['path']); + + } + // ä¸Šä¼ å›¾ç‰‡ç»“æŸ + + // å¤„ç†æ ‡ç­¾ + aac('tag') -> addTag('article', 'articleid', $articleid, $tag); + + + // å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + if($isaudit==0){ + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts']); + } + + #用户记录 + aac('pubs')->addLogs('article','articleid',$articleid,$userid,$title,$content,0); + + header("Location: " . tsUrl('article', 'show', array('id' => $articleid))); + + }else{ + + tsNotice ( '文章å‘布失败ï¼' ); + + } + + break; +} diff --git a/app/article/action/admin.php b/app/article/action/admin.php new file mode 100644 index 0000000..3f99995 --- /dev/null +++ b/app/article/action/admin.php @@ -0,0 +1,9 @@ +findAll('article',null,'addtime desc',null,$lstart.',20'); + + $articleNum = $new['article']->findCount('article'); + $pageUrl = pagination($articleNum, 20, $page, $url); + + include template('admin/article_list'); + break; + + //审核通过 + case "isaudit0": + + $articleid = tsIntval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isaudit'=>0, + )); + + #å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $strArticle['userid']; + $msg_content = 'ä½ å‘布的文章审核通过,快去看看å§^_^ '; + $msg_url = tsUrl('article','show',array('id'=>$articleid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_url); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strArticle['userid']); + + qiMsg('æ“作æˆåŠŸï¼'); + break; + + #审核ä¸é€šè¿‡ + case "isaudit1": + + $articleid = tsIntval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isaudit'=>1, + )); + + #å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $strArticle['userid']; + $msg_content = 'ä½ å‘布的文章审核未通过,快去看看å§^_^ '; + $msg_url = tsUrl('article','show',array('id'=>$articleid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_url); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strArticle['userid']); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //删除 + case "delete": + + $articleid = tsIntval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->deleteArticle($strArticle); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strArticle['userid']); + + #用户记录 + aac('pubs')->addLogs('article','articleid',$articleid,$TS_USER['userid'],$strArticle['title'],$strArticle['content'],2); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + //推è + case "isrecommend": + + $articleid = tsIntval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + if($strArticle['isrecommend']==0){ + $isrecommend = 1; + }else{ + $isrecommend = 0; + } + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isrecommend'=>$isrecommend, + )); + + #更新项目推è + aac('pubs')->upPtableRecommend('article','articleid',$articleid,$isrecommend); + + qiMsg('æ“作æˆåŠŸï¼'); + break; + + //置顶 + case "istop": + + $articleid = tsIntval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + if($strArticle['istop']==0){ + $istop = 1; + }else{ + $istop = 0; + } + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'istop'=>$istop, + )); + + qiMsg('æ“作æˆåŠŸï¼'); + break; + +} \ No newline at end of file diff --git a/app/article/action/admin/cate.php b/app/article/action/admin/cate.php new file mode 100644 index 0000000..6e6c844 --- /dev/null +++ b/app/article/action/admin/cate.php @@ -0,0 +1,127 @@ +findAll('article_cate',array( + 'referid'=>0, + ),'orderid asc'); + + foreach($arrCate as $key=>$item){ + $arrCate[$key]['twocate'] = $new['article']->findAll('article_cate',array( + 'referid'=>$item['cateid'], + ),'orderid asc'); + } + + include template("admin/cate_list"); + + break; + + //分类添加 + case "add": + + $referid = tsIntval($_GET['referid']); + + include template("admin/cate_add"); + + break; + + case "add_do": + + + + $new['article']->create('article_cate',array( + 'referid'=>tsIntval($_POST['referid']), + 'catename'=>tsTrim($_POST['catename']), + 'cateinfo'=>tsTrim($_POST['cateinfo']), + 'orderid'=>tsIntval($_POST['orderid']), + + )); + + + header("Location: ".SITE_URL."index.php?app=article&ac=admin&mg=cate&ts=list"); + + break; + + //分类删除 + case "del": + + $cateid = tsIntval($_GET['cateid']); + + + $strCate = $new['article']->find('article_cate',array( + 'cateid'=>$cateid, + )); + + if($strCate['referid']==0){ + $arrCate = $new['article']->findAll('article_cate',array( + 'referid'=>$strCate['cateid'], + )); + + foreach($arrCate as $key=>$item){ + $new['article']->update('article',array( + 'cateid'=>$item['cateid'] + ),array( + 'cateid'=>0, + )); + } + + $new['article']->delete('article_cate',array( + 'referid'=>$strCate['cateid'], + )); + + } + + + $new['article']->update('article',array( + 'cateid'=>$cateid + ),array( + 'cateid'=>0, + )); + + + $new['article']->delete('article_cate',array( + 'cateid'=>$cateid, + )); + + + + + qiMsg("分类删除æˆåŠŸï¼"); + + break; + + //分类修改 + case "edit": + + $cateid = tsIntval($_GET['cateid']); + + $strCate = $new['article']->find('article_cate',array( + 'cateid'=>$cateid, + )); + + + include template("admin/cate_edit"); + + break; + + //分类修改执行 + case "edit_do": + $cateid = tsIntval($_POST['cateid']); + $catename = tsTrim($_POST['catename']); + $cateinfo = tsTrim($_POST['cateinfo']); + + $new['article']->update('article_cate',array( + 'cateid'=>$cateid, + ),array( + 'catename'=>$catename, + 'cateinfo'=>$cateinfo, + 'orderid'=>tsIntval($_POST['orderid']), + )); + + header("Location: ".SITE_URL."index.php?app=article&ac=admin&mg=cate&ts=list"); + + break; +} \ No newline at end of file diff --git a/app/article/action/admin/comment.php b/app/article/action/admin/comment.php new file mode 100644 index 0000000..7489b2c --- /dev/null +++ b/app/article/action/admin/comment.php @@ -0,0 +1,2 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'article',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/article/action/admin/post.php b/app/article/action/admin/post.php new file mode 100644 index 0000000..e3a73cf --- /dev/null +++ b/app/article/action/admin/post.php @@ -0,0 +1,126 @@ +findAll('article',null,'addtime desc',null,$lstart.',20'); + + $articleNum = $new['article']->findCount('article'); + $pageUrl = pagination($articleNum, 20, $page, $url); + + include template('admin/post_list'); + break; + + //审核通过 + case "isaudit0": + + $articleid = intval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isaudit'=>0, + )); + + #å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $strArticle['userid']; + $msg_content = 'ä½ å‘布的文章审核通过,快去看看å§^_^ '; + $msg_url = tsUrl('article','show',array('id'=>$articleid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_url); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'], $TS_URL['ts'],$strArticle['userid'],$TS_URL['mg']); + + qiMsg('æ“作æˆåŠŸï¼'); + break; + + #审核ä¸é€šè¿‡ + case "isaudit1": + + $articleid = intval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isaudit'=>1, + )); + + #å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $strArticle['userid']; + $msg_content = 'ä½ å‘布的文章审核未通过,快去看看å§^_^ '; + $msg_url = tsUrl('article','show',array('id'=>$articleid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_url); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'], $TS_URL['ts'],$strArticle['userid'],$TS_URL['mg']); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //删除 + case "delete": + + $articleid = intval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + if($strArticle['photo']){ + unlink('uploadfile/article/'.$strArticle['photo']); + } + + $new['article']->delete('article',array( + 'articleid'=>$articleid, + )); + + $new['article']->delete('tag_article_index',array( + 'articleid'=>$articleid, + )); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'], $TS_URL['ts'],$strArticle['userid'],$TS_URL['mg']); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + //推è + case "isrecommend": + + $articleid = intval($_GET['articleid']); + $strArticle = $new['article']->find('article',array( + 'articleid'=>$articleid, + )); + + if($strArticle['isrecommend']==0){ + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isrecommend'=>1, + )); + }else{ + $new['article']->update('article',array( + 'articleid'=>$articleid, + ),array( + 'isrecommend'=>0, + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + break; + +} \ No newline at end of file diff --git a/app/article/action/admin/sitemap.php b/app/article/action/admin/sitemap.php new file mode 100644 index 0000000..959fb1d --- /dev/null +++ b/app/article/action/admin/sitemap.php @@ -0,0 +1,4 @@ +findAll(''); \ No newline at end of file diff --git a/app/article/action/ajax.php b/app/article/action/ajax.php new file mode 100644 index 0000000..2fecb5a --- /dev/null +++ b/app/article/action/ajax.php @@ -0,0 +1,26 @@ +findAll('article_cate',array( + 'referid'=>$referid, + )); + + echo ''; + + break; + +} \ No newline at end of file diff --git a/app/article/action/api.php b/app/article/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/article/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +article http api list +URL:https://demo.thinksaas.cn +----------------------------------------------- +/** + * 文章列表ã€api接å£ç¤ºä¾‹ã€‘ + * index.php?app=article&ac=api&api=list + * get + * + * @cateid 分类ID + * @page + * @limit + * + */ +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/article/action/api/list.php b/app/article/action/api/list.php new file mode 100644 index 0000000..d6f9129 --- /dev/null +++ b/app/article/action/api/list.php @@ -0,0 +1,80 @@ +findAll('article_cate',array( + 'referid'=>0, +)); +foreach($arrCate1 as $key=>$item){ + $arrCate[$item['cateid']] = $item['catename']; +} + +$cateid = tsIntval($_GET['cateid']); +$locationid = tsIntval($_GET['locationid']); + +$kw = tsTrim($_GET['kw']); + +$page = tsIntval($_GET['page'],1); +$limit = isset($_GET['limit']) ? $_GET['limit'] : '10'; + +$lstart = $limit*$page-$limit; + +$where = "`isaudit`='0'"; + +if($cateid){ + $where .= " and `cateid`='$cateid'"; +} + +$articleNum = $new['article']->findCount('article',$where); + +$arrArticle = $new['article']->findAll('article',$where,'addtime desc','articleid,cateid,title,gaiyao,photo,path,count_comment,count_view,count_love,addtime',$lstart.','.$limit); + +foreach($arrArticle as $key=>$item){ + + $arrArticle[$key]['title'] = tsTitle($item['title']); + $arrArticle[$key]['gaiyao'] = tsTitle($item['gaiyao']); + + if($item['photo']){ + $arrArticle[$key]['photourl'] = tsXimg($item['photo'],'article',320,180,$item['path'],'1'); + }else{ + $arrArticle[$key]['photourl'] = ''; + } + + if($item['cateid']){ + $arrArticle[$key]['catename'] = $arrCate[$item['cateid']]; + } + +} + +$jsonData = json_encode(array( + + 'status'=> 1, + 'msg'=> 'success', + 'data'=> array( + + 'previous'=>tsIntval($page-1), + 'page'=>tsIntval($page), + 'next'=>tsIntval($page+1), + 'total'=>tsIntval(ceil($articleNum/$limit)), + 'list'=>$arrArticle, + + ), + +)); + +if($_GET['callback']){ + echo $_GET['callback'].'('.$jsonData.')'; + exit; +}else{ + echo $jsonData; +} \ No newline at end of file diff --git a/app/article/action/cate.php b/app/article/action/cate.php new file mode 100644 index 0000000..df1f1e0 --- /dev/null +++ b/app/article/action/cate.php @@ -0,0 +1,99 @@ +find ( 'article_cate', array ( + 'cateid' => $cateid +)); + +if($strCate==''){ + ts404(); +} + +if($strCate['referid']==0){ + $arrTwoCate = $new['article']->findAll('article_cate',array( + 'referid'=>$strCate['cateid'], + ),'orderid asc'); + + if($arrTwoCate){ + + foreach($arrTwoCate as $key=>$item){ + $arrCateId[] = $item['cateid']; + } + + $cateids = $cateid.','.arr2str($arrCateId); + + $where = "`cateid` in ($cateids) and `isaudit`=0"; + + }else{ + + $where = array( + 'cateid'=>$cateid, + 'isaudit'=>0, + ); + + } + + + +}else{ + + $arrTwoCate = $new['article']->findAll('article_cate',array( + 'referid'=>$strCate['referid'], + ),'orderid asc'); + + $where = array( + 'cateid'=>$cateid, + 'isaudit'=>0, + ); +} + +// 列表 +$page = tsIntval($_GET['page'],1); +$url = tsUrl ( 'article', 'cate', array ('id' => $cateid, 'page' => '')); +$lstart = $page * 10 - 10; + +$arrArticle = $new ['article']->findAll ( 'article',$where, 'addtime desc', 'articleid,userid,cateid,title,gaiyao,score,path,photo,count_comment,count_love,count_view,addtime', $lstart . ',10' ); + +$articleNum = $new ['article']->findCount ( 'article',$where); + +$pageUrl = pagination ( $articleNum, 10, $page, $url ); + +foreach ( $arrArticle as $key => $item ) { + $arrArticle [$key]['title'] = tsTitle($item['title']); + $arrArticle [$key]['gaiyao'] = tsTitle($item['gaiyao']); + $arrArticle [$key] ['user'] = aac ( 'user' )->getSimpleUser ( $item ['userid'] ); + $arrArticle [$key] ['cate'] = array( + 'cateid'=>$strCate['cateid'], + 'catename'=>$strCate['catename'], + ); + + + #å°é¢å›¾ + if($item['photo']){ + $arrArticle[$key]['photo_url'] = $new['article']->getArticlePhoto($item); + } + +} + +// 推è阅读 +$arrRecommend = $new ['article']->getRecommendArticle (); + +// 一周热门 +$arrHot7 = $new ['article']->getHotArticle ( 7); +// 一月热门 +$arrHot30 = $new ['article']->getHotArticle ( 30 ); + +$title = $strCate ['catename']; + +// SEO优化 +$sitekey = $strCate ['catename']; +$sitedesc = $strCate ['catename'] . ' - 文章'; + +include template ( 'index' ); \ No newline at end of file diff --git a/app/article/action/comment.php b/app/article/action/comment.php new file mode 100644 index 0000000..451f12f --- /dev/null +++ b/app/article/action/comment.php @@ -0,0 +1,73 @@ +isLogin (); + +switch ($ts) { + + case "do" : + + $articleid = intval ( $_POST ['articleid'] ); + $content = tsClean ( $_POST ['content'] ); + $content2 = emptyText( $_POST ['content'] ); + + if ($content2 == '') tsNotice ( "内容ä¸èƒ½ä¸ºç©ºï¼" ); + + // 过滤内容开始 + aac ( 'system' )->antiWord ( $content ); + // è¿‡æ»¤å†…å®¹ç»“æŸ + + $new ['article']->create ( 'article_comment', array ( + 'articleid' => $articleid, + 'userid' => $userid, + 'content' => $content, + 'addtime' => time () + ) + ); + + // 统计 + $count_comment = $new ['article']->findCount ( 'article_comment', array ( + 'articleid' => $articleid + ) ); + + $new ['article']->update ( 'article', array ( + 'articleid' => $articleid + ), array ( + 'count_comment' => $count_comment + ) ); + + header ( "Location: " . tsUrl ( 'article', 'show', array ( + 'id' => $articleid + ) ) ); + + break; + + case "delete" : + + $commentid = intval ( $_GET ['commentid'] ); + + $strComment = $new ['article']->find ( 'article_comment', array ( + 'commentid' => $commentid + ) ); + + $strArticle = $new ['article']->find ( 'article', array ( + 'articleid' => $strComment ['articleid'] + ) ); + + if ($userid == $strArticle ['userid'] || $TS_USER ['isadmin'] == 1) { + + $new ['article']->delete ( 'article_comment', array ( + 'commentid' => $commentid + )); + + //处ç†ç§¯åˆ† + aac('user')->doScore($GLOBALS['TS_URL']['app'], $GLOBALS['TS_URL']['ac'], $GLOBALS['TS_URL']['ts'],$strComment['userid']); + + tsNotice ( '删除æˆåŠŸ' ); + } else { + + tsNotice ( 'éžæ³•æ“作' ); + } + + break; +} \ No newline at end of file diff --git a/app/article/action/common.php b/app/article/action/common.php new file mode 100644 index 0000000..9873ccd --- /dev/null +++ b/app/article/action/common.php @@ -0,0 +1,7 @@ +findAll ( 'article_cate',array( + 'referid'=>0, +),'orderid asc'); \ No newline at end of file diff --git a/app/article/action/delete.php b/app/article/action/delete.php new file mode 100644 index 0000000..45416b8 --- /dev/null +++ b/app/article/action/delete.php @@ -0,0 +1,32 @@ +isLogin (); + +$articleid = tsIntval ( $_GET ['articleid'] ); + +$strArticle = $new ['article']->find ( 'article', array ( + 'articleid' => $articleid +) ); + +//普通用户ä¸å…许删除内容 +if($TS_SITE['isallowdelete'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户删除内容,请è”系管ç†å‘˜åˆ é™¤ï¼'); + +if ($strArticle ['userid'] == $userid || $TS_USER ['isadmin'] == 1) { + + + #用户记录 + aac('pubs')->addLogs('article','articleid',$articleid,$userid,$strArticle['title'],$strArticle['content'],2); + + + #删除文章 + $new['article']->deleteArticle($strArticle); + + if($strArticle['isaudit']==0){ + #å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strArticle ['userid']); + } + +} + +tsNotice('删除æˆåŠŸ','点击返回文章首页',tsUrl ( 'article' )); \ No newline at end of file diff --git a/app/article/action/edit.php b/app/article/action/edit.php new file mode 100644 index 0000000..6c58809 --- /dev/null +++ b/app/article/action/edit.php @@ -0,0 +1,174 @@ +isLogin (); + +//普通ä¸ç”¨ä¸å…许编辑内容 +if($TS_SITE['isallowedit'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户编辑内容,请è”系管ç†å‘˜ç¼–辑ï¼'); + +switch ($ts) { + + case "" : + + $articleid = tsIntval ( $_GET ['articleid'] ); + + $cateid = tsIntval ( $_GET ['cateid'] ); + + $strArticle = $new ['article']->find ( 'article', array ( + 'articleid' => $articleid + ) ); + + if ($strArticle ['userid'] == $userid || $TS_USER ['isadmin'] == 1) { + + $strArticle['title'] = tsTitle($strArticle['title']); + + $articleContent = $new['article']->find('article_content',array( + 'articleid'=>$articleid, + )); + + $strArticle['content'] = $articleContent['content']; + + //$strArticle['content'] = tsDecode($strArticle['content']); //为有效防止xss攻击,如果å‰ç«¯é€šè¿‡textarea标签加载的编辑器,请注释掉本行;如果编辑器有其他的加载方å¼ï¼Œè¯·è§†æƒ…况解除本行注释。 + $strArticle['gaiyao'] = tsTitle($strArticle['gaiyao']); + + #å°é¢å›¾ + $strArticle['photo_url'] = $new['article']->getArticlePhoto($strArticle); + + // 找出TAG + $arrTags = aac ( 'tag' )->getObjTagByObjid ( 'article', 'articleid', $articleid ); + foreach ( $arrTags as $key => $item ) { + $arrTag [] = $item ['tagname']; + } + $strArticle ['tag'] = arr2str ( $arrTag ); + + foreach ($arrCate as $key=>$item){ + $arrCate[$key]['two'] = $new['article']->findAll('article_cate',array( + 'referid'=>$item['cateid'], + )); + } + + + $title = '修改文章'; + include template ( 'edit' ); + } else { + + tsNotice ( 'éžæ³•æ“作ï¼' ); + } + + break; + + case "do" : + + $articleid = tsIntval ( $_POST ['articleid'] ); + + $strArticle = $new ['article']->find ( 'article', array ( + 'articleid' => $articleid + ) ); + + if($strArticle['userid']!=$userid && $TS_USER['isadmin']==0){ + tsNotice('éžæ³•æ“作ï¼'); + } + + $cateid = tsIntval ( $_POST ['cateid'] ); + $cateid2 = tsIntval ( $_POST ['cateid2'] ); + + if($cateid2) $cateid = $cateid2; + + $title = trim ( $_POST ['title'] ); + $content = tsClean ( $_POST ['content'] ); + $content2 = emptyText ( $_POST ['content'] ); + $gaiyao = trim ( $_POST ['gaiyao'] ); + + $re_gaiyao = tsIntval ( $_POST ['re_gaiyao'] ); + + $score = tsIntval($_POST ['score']);#积分 + + if ($TS_USER ['isadmin'] == 0) { + // 过滤内容开始 + $title = antiWord ( $title ); + $content = antiWord ( $content ); + // è¿‡æ»¤å†…å®¹ç»“æŸ + } + + if ($title == '' || $content2 == '' || $content=='') + qiMsg ( "标题和内容都ä¸èƒ½ä¸ºç©ºï¼" ); + + if($score<0){ + tsNotice ( '积分填写有误ï¼' ); + } + + if($re_gaiyao==1){ + $gaiyao = cututf8(t(tsDecode($content)),0,100); + } + + $new ['article']->update ( 'article', array ( + 'articleid' => $articleid, + ), array ( + 'title' => $title, + 'gaiyao' => $gaiyao, + 'score'=>$score, + )); + + $new['article']->replace('article_content',array( + 'articleid'=>$articleid, + ),array( + 'articleid'=>$articleid, + 'content'=>$content, + )); + + #更新分类 + if($cateid){ + $new['article']->update('article',array( + 'articleid' => $articleid, + ),array( + 'cateid' => $cateid, + )); + } + + // å¤„ç†æ ‡ç­¾ + $tag = trim ( $_POST ['tag'] ); + if ($tag) { + aac ( 'tag' )->delIndextag ( 'article', 'articleid', $articleid ); + aac ( 'tag' )->addTag ( 'article', 'articleid', $articleid, $tag ); + } + + $pjson = ''; + if($strArticle['photo']){ + $pjson = json_encode(array( + tsXimg($strArticle['photo'],'article',320,180,$strArticle['path'],1) + )); + } + + // 上传å°é¢å›¾ç‰‡ + $arrUpload = tsUpload ( $_FILES ['photo'], $articleid, 'article', array ('jpg','gif','png','jpeg' ) ); + if ($arrUpload) { + $new ['article']->update ( 'article', array ( + 'articleid' => $articleid + ), array ( + 'path' => $arrUpload ['path'], + 'photo' => $arrUpload ['url'], + 'uptime'=>time(), + ) ); + + #生æˆä¸åŒå°ºå¯¸çš„图片 + tsDimg ($arrUpload ['url'], 'article', '320', '180', $arrUpload ['path']); + + $pjson = json_encode(array( + tsXimg($arrUpload['url'],'article',320,180,$arrUpload['path'],1) + )); + + } + + #æ›´æ–°ptable + aac('pubs')->editPtable('article','articleid',$articleid,$pjson,$title,$gaiyao); + + + #用户记录 + aac('pubs')->addLogs('article','articleid',$articleid,$userid,$title,$content,1); + + + header ("Location: " . tsUrl ( 'article', 'show', array ('id' => $articleid))); + + break; +} \ No newline at end of file diff --git a/app/article/action/index.php b/app/article/action/index.php new file mode 100644 index 0000000..700eb46 --- /dev/null +++ b/app/article/action/index.php @@ -0,0 +1,50 @@ + '') ); +$lstart = $page * 10 - 10; + +$arrArticle = $new ['article']->findAll ( 'article', array ( + 'isaudit' => '0' +), 'istop desc,addtime desc', 'articleid,userid,cateid,title,gaiyao,score,path,photo,count_comment,count_love,count_view,istop,addtime,uptime', $lstart . ',10' ); + +$articleNum = $new ['article']->findCount ( 'article', array ( + 'isaudit' => '0' +) ); + +$pageUrl = pagination ( $articleNum, 10, $page, $url ); + +foreach ( $arrArticle as $key => $item ) { + $arrArticle [$key]['title'] = tsTitle($item['title']); + $arrArticle [$key]['gaiyao'] = tsTitle($item['gaiyao']); + $arrArticle [$key] ['user'] = aac ( 'user' )->getSimpleUser( $item ['userid'] ); + $arrArticle [$key] ['cate'] = $new ['article']->find( 'article_cate', array ( + 'cateid' => $item ['cateid'] + ) ); + + #å°é¢å›¾ + if($item['photo']){ + $arrArticle[$key]['photo_url'] = $new['article']->getArticlePhoto($item); + } + + +} + +// 推è阅读 +$arrRecommend = $new ['article']->getRecommendArticle (); + +// 一周热门 +$arrHot7 = $new ['article']->getHotArticle ( 7 ); +// 一月热门 +$arrHot30 = $new ['article']->getHotArticle ( 30 ); + + +$sitekey = $TS_APP['appkey']; +$sitedesc = $TS_APP['appdesc']; +$title = '文章'; + +include template ( 'index' ); \ No newline at end of file diff --git a/app/article/action/my.php b/app/article/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/article/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/article/action/my/common.php b/app/article/action/my/common.php new file mode 100644 index 0000000..2fb16c1 --- /dev/null +++ b/app/article/action/my/common.php @@ -0,0 +1,6 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/article/action/my/index.php b/app/article/action/my/index.php new file mode 100644 index 0000000..6cc3e88 --- /dev/null +++ b/app/article/action/my/index.php @@ -0,0 +1,22 @@ +'index','page' => '' ) ); +$lstart = $page * 20 - 20; + +$arrArticle = $new ['article']->findAll ( 'article', array ( + 'userid' => $strUser['userid'], +), 'addtime desc', null, $lstart . ',20' ); + +$articleNum = $new ['article']->findCount ( 'article', array ( + 'userid' => $strUser['userid'], +) ); + +$pageUrl = pagination ( $articleNum, 20, $page, $url ); + + + +$title = '我的文章'; +include template('my/index'); \ No newline at end of file diff --git a/app/article/action/recommend.php b/app/article/action/recommend.php new file mode 100644 index 0000000..0e60173 --- /dev/null +++ b/app/article/action/recommend.php @@ -0,0 +1,39 @@ +findCount ( 'article_recommend', array ( + 'articleid' => $articleid, + 'userid' => $userid +) ); + +if ($isRecommend > 0) { + echo 1; + exit (); +} + +$new ['article']->create ( 'article_recommend', array ( + 'articleid' => $articleid, + 'userid' => $userid +) ); + +$count_recommend = $new ['article']->findCount ( 'article_recommend', array ( + 'articleid' => $articleid +) ); + +$new ['article']->update ( 'article', array ( + 'articleid' => $articleid +), array ( + 'count_recommend' => $count_recommend +) ); + +echo 2; +exit (); \ No newline at end of file diff --git a/app/article/action/score.php b/app/article/action/score.php new file mode 100644 index 0000000..080be7b --- /dev/null +++ b/app/article/action/score.php @@ -0,0 +1,69 @@ +find('article',array( + 'articleid'=>$articleid, + ),'articleid,userid,score'); + + if($strArticle==''){ + getJson('文章ä¸å­˜åœ¨ï¼',1,0); + } + + if($strArticle['userid']==$userid){ + getJson('自己无需支付阅读自己的文章ï¼',1,0); + } + + $isArticleUser = $new['article']->findCount('article_user',array( + 'articleid'=>$articleid, + 'userid'=>$userid, + )); + + if($isArticleUser>0){ + getJson('ä½ å·²ç»æ”¯ä»˜è¿‡ï¼Œæ— éœ€å†æ¬¡æ”¯ä»˜ï¼',1,0); + } + + $strUserScore = $new['article']->find('user_info',array( + 'userid'=>$userid, + ),'userid,count_score'); + + if($strUserScore['count_score']<$strArticle['score']){ + getJson('积分ä¸è¶³ï¼',1,0); + } + + aac('user')->addScore($strArticle['userid'],'文章收入'.$strArticle['articleid'],$strArticle['score'],1); + aac('user')->delScore($userid,'查看文章'.$strArticle['articleid'],$strArticle['score']); + + $new['article']->create('article_user',array( + 'articleid'=>$articleid, + 'userid'=>$userid, + 'addtime'=>time(), + )); + + + getJson('积分支付æˆåŠŸï¼',1,2,tsUrl('article','show',array('id'=>$articleid))); + + break; + +} \ No newline at end of file diff --git a/app/article/action/show.php b/app/article/action/show.php new file mode 100644 index 0000000..f60af49 --- /dev/null +++ b/app/article/action/show.php @@ -0,0 +1,112 @@ +find ( 'article', array ( + 'articleid' => $articleid +)); + +if ($strArticle == '') { + ts404(); +} + +// 是å¦å®¡æ ¸ +if ($strArticle ['isaudit'] == 1 && $TS_USER['isadmin']==0 && $TS_USER['userid']!=$strArticle['userid']) { + tsNotice ( '内容审核中...' ); +} + +$cateid = $strArticle['cateid']; + +$strArticle['title'] = tsTitle($strArticle['title']); + +$articleContent = $new['article']->find('article_content',array( + 'articleid'=>$articleid, +)); + +$strArticle['content'] = tsDecode($articleContent['content']); + +$strArticle ['tags'] = aac ( 'tag' )->getObjTagByObjid ( 'article', 'articleid', $articleid ); +$strArticle ['user'] = aac ( 'user' )->getSimpleUser ( $strArticle ['userid'] ); +$strArticle ['cate'] = $new ['article']->find ( 'article_cate', array ( + 'cateid' => $strArticle ['cateid'] +) ); + + +// 上一篇 +$strUp = $new['article']->find('article', "`articleid`< '$articleid' and `isaudit`='0'", 'articleid,title','articleid desc'); +if($strUp) $strUp['title'] = tsTitle($strUp['title']); +// 下一篇 +$strNext = $new['article']->find('article', "`articleid`> '$articleid' and `isaudit`='0'", 'articleid,title','articleid asc'); +if($strNext) $strNext['title'] = tsTitle($strNext['title']); + + + +// 获å–评论 +$page = tsIntval($_GET['page'],1); +$url = tsUrl ('article','show', array ('id' => $articleid,'page'=>'')); +$lstart = $page * 15 - 15; +$arrComment = aac('comment')->getCommentList('article','articleid',$strArticle['articleid'],$page,$lstart,$strArticle['userid']); +$commentNum = aac('comment')->getCommentNum('article','articleid',$strArticle['articleid']); +$pageUrl = pagination ( $commentNum, 15, $page, $url ); + +// 标签 +$strArticle ['tags'] = aac ( 'tag' )->getObjTagByObjid ( 'article', 'articleid', $strArticle ['articleid'] ); + +//最新文章 +$arrArticle = $new ['article']->findAll ( 'article', array( + 'isaudit'=>0, +), 'addtime desc', 'articleid,title', 10 ); + +// 推è阅读 +$arrRecommend = $new ['article']->getRecommendArticle (); + +// 一周热门 +$arrHot7 = $new ['article']->getHotArticle ( 7); +// 一月热门 +$arrHot30 = $new ['article']->getHotArticle ( 30); + + + +//判断用户å¯é˜…读文章:0å¯è¯»1ä¸å¯è¯» +$isread = 0; +if($strArticle['score']>0) $isread = 1; +if($TS_USER['userid'] && $strArticle['userid']==$TS_USER['userid']) $isread=0; +if($TS_USER['userid'] && $strArticle['userid']!=$TS_USER['userid'] && $strArticle['score']>0){ + $isArticleUser = $new['article']->findCount('article_user',array( + 'articleid'=>$articleid, + 'userid'=>$TS_USER['userid'], + )); + if($isArticleUser>0) $isread=0; +} +if($TS_USER['isadmin']==1) $isread=0; + + + + +//æŠŠæ ‡ç­¾ä½œä¸ºå…³é”®è¯ +if($strArticle['tags']){ + foreach($strArticle['tags'] as $key=>$item){ + $arrTag[] = $item['tagname']; + } + $sitekey = arr2str($arrTag); +}else{ + $sitekey = $strArticle['title']; +} + +$sitedesc = cututf8(t($strArticle['content']),0,100); + +$title = $strArticle ['title']; + +include template ( 'show' ); + +// 统计查看次数 +$count_view = $strArticle ['count_view'] + 1; +$new ['article']->update ('article', array( + 'articleid' => $strArticle ['articleid'] +), array ( + 'count_view' => $count_view, +)); + +#æ›´æ–°ptable +aac('pubs')->upPtableView('article','articleid',$articleid,$count_view); \ No newline at end of file diff --git a/app/article/action/tag.php b/app/article/action/tag.php new file mode 100644 index 0000000..7cc2c14 --- /dev/null +++ b/app/article/action/tag.php @@ -0,0 +1,64 @@ +getTagByName($name); + +$strTag ['tagname'] = htmlspecialchars ( $strTag ['tagname'] ); + +$page = tsIntval($_GET['page'],1); + +$url = tsUrl ( 'article', 'tag', array ( + 'id' => urlencode ( $name ), + 'page' => '' +) ); + +$lstart = $page * 30 - 30; + +$tagid = $strTag['tagid']; + +$arrTagId = $new ['article']->findAll ( 'tag_article_index', array ( + 'tagid' => $tagid +), null, null, $lstart . ',30' ); + +foreach ( $arrTagId as $item ) { + $strArticle = $new ['article']->find ( 'article', array ( + 'articleid' => $item ['articleid'] + ) ); + if ($strArticle == '') { + $new ['article']->delete ( 'tag_article_index', array ( + 'articleid' => $item ['articleid'], + 'tagid' => $item ['tagid'] + ) ); + } + + if ($strArticle && $strArticle['isaudit']==0) { + $arrArticle [] = $strArticle; + } +} + +aac ( 'tag' )->countObjTag ( 'article', $tagid ); + +$articleNum = $new ['article']->findCount ( 'tag_article_index', array ( + 'tagid' => $tagid +) ); + +$pageUrl = pagination ( $articleNum, 30, $page, $url ); + +foreach ( $arrArticle as $key => $item ) { + $arrArticle [$key] ['title'] = htmlspecialchars ( $item ['title'] ); + $arrArticle [$key] ['content'] = cututf8 ( t ( $item ['content'] ), 0, 150 ); + $arrArticle [$key] ['user'] = aac ( 'user' )->getSimpleUser ( $item ['userid'] ); + $arrArticle [$key] ['cate'] = $new ['article']->find ( 'article_cate', array ( + 'cateid' => $item ['cateid'] + ) ); +} + +// 热门tag +$arrTag = $new ['article']->findAll ( 'tag', "`count_article`>'0' and `isaudit`=0", 'count_article desc', null, 30 ); + +$sitekey = $strTag ['tagname']; +$title = $strTag ['tagname']; + +include template ( "tag" ); \ No newline at end of file diff --git a/app/article/action/tags.php b/app/article/action/tags.php new file mode 100644 index 0000000..15c5c53 --- /dev/null +++ b/app/article/action/tags.php @@ -0,0 +1,18 @@ + '' +) ); + +$lstart = $page * 200 - 200; + +$arrTag = $new ['article']->findAll ( 'tag', "`count_article`>'0' and `isaudit`=0", null, null, $lstart . ',200' ); + +$tagNum = $new ['article']->findCount ( 'tag', "`count_article`>'0' and `isaudit`=0" ); + +$pageUrl = pagination ( $tagNum, 200, $page, $url ); + +$title = '标签'; +include template ( 'tags' ); \ No newline at end of file diff --git a/app/article/class.article.php b/app/article/class.article.php new file mode 100644 index 0000000..106104d --- /dev/null +++ b/app/article/class.article.php @@ -0,0 +1,165 @@ +delete('article',array( + 'articleid' => $strArticle['articleid'], + )); + + #删除ts_article_content + $this->delete('article_content',array( + 'articleid' => $strArticle['articleid'], + )); + + #删除ts_article_user + $this->delete('article_user',array( + 'articleid' => $strArticle['articleid'], + )); + + #åˆ é™¤å…³è”æ ‡ç­¾ + $this->delete('tag_article_index',array( + 'articleid'=>$strArticle['articleid'], + )); + + #删除评论ts_comment + aac('comment')->delComment('article','articleid',$strArticle['articleid']); + + #删除点赞ts_love + aac('pubs')->delLove('article','articleid',$strArticle['articleid']); + + #删除ptable + aac('pubs')->delPtable('article','articleid',$strArticle['articleid']); + + } + + + //热门文章,1天,7天,30天 + /** + * @param $day + * @param int $cateid + * @return mixed + */ + public function getHotArticle($day, $cateid = 0) { + $startTime = time() - ($day * 3600 * 24); + $startTime = date('Y-m-d', $startTime); + + $endTime = date('Y-m-d'); + + if ($day == 30) { + $endTime = date('Y-m-d', time() - (7 * 3600 * 24)); + } + + if ($cateid) { + $arr = "`cateid`='$cateid' and `count_view`>'0' and `addtime`>'$startTime' and `addtime`<'$endTime' and `isaudit`='0'"; + } else { + $arr = "`addtime`>'$startTime' and `count_view`>'0' and `addtime`<'$endTime' and `isaudit`='0'"; + } + + $arrArticle = $this->findAll('article', $arr, 'addtime desc', 'articleid,title', 10); + foreach ($arrArticle as $key => $item) { + $arrArticle[$key]['title'] = tsTitle($item['title']); + } + + return $arrArticle; + } + + //æŽ¨èæ–‡ç«  $cateid + /** + * @param int $cateid + * @return mixed + */ + public function getRecommendArticle($cateid = 0) { + + if ($cateid) { + $arr = array( + 'cateid' => $cateid, + 'isrecommend' => 1, + ); + } else { + $arr = array( + 'isrecommend' => 1, + ); + } + + $arrArticle = $this->findAll('article', $arr, 'addtime desc', 'articleid,title', 10); + foreach ($arrArticle as $key => $item) { + $arrArticle[$key]['title'] = tsTitle($item['title']); + } + + return $arrArticle; + } + + /* + * æ˜¯å¦æ–‡ç« ä½œè€… + */ + public function isArticleUser($articleid,$userid){ + $isUser = $this->findCount('article',array( + 'articleid'=>$articleid, + 'userid'=>$userid, + )); + + if($isUser){ + return true; + }else{ + return false; + } + + } + +} diff --git a/app/article/config.php b/app/article/config.php new file mode 100644 index 0000000..2cec18d --- /dev/null +++ b/app/article/config.php @@ -0,0 +1,19 @@ + + $(document).ready(function() { + + //选择一级区域 + $('#cateid').change(function(){ + $("#select2").html(''); + var cateid = $(this).children('option:selected').val(); //弹出select的值 + + if(cateid==0){ + $("#select2").html(''); + + }else{ + + $.ajax({ + type: "GET", + url: "{SITE_URL}index.php?app=article&ac=ajax&ts=twocate&referid="+cateid, + success: function(msg){ + $("#select2").html(msg); + } + }); + + } + + }); + + }); + + + + +
+ + + + +
+
+ + +
+
+
+ + +
+ +
+ + +
+{if $arrCate} +
+ + +
+
+ + + +
+
+ + + +
+
+ + +
+{/if} + +
+ +
+ +
+
+ + +
+ + +
+ +
+ + +
+ +
+ + + + +
+ + +
+ + + +
+ + +
+ + 积分 +
+ + + + {if $TS_SITE['isniming']==1} +
+ + å¦ + 是 (匿åå‘布åŽç”¨æˆ·å°†æ— æ³•对内容进行管ç†) +
+ {/if} + + + + + {if $TS_SITE['isauthcode']} +
+ + +
+ + 点击刷新验è¯ç  + +
+ + +
+ {/if} + + + + {if $TS_SITE['is_vaptcha']} +
+ + +
+ +
+
+
+ + + + Vaptchaå¯åЍ䏭... +
+
+
+ + + +
+ +
+ +
+ {/if} + + + + + + + å–æ¶ˆå‘布 + +
+ + +
+
+
+ + + +
+
+ + + + + +
+{php doAction('tseditor')} + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/admin/article_list.html b/app/article/html/admin/article_list.html new file mode 100644 index 0000000..1fb9a34 --- /dev/null +++ b/app/article/html/admin/article_list.html @@ -0,0 +1,76 @@ +{php include pubTemplate("header_admin")} + + +
+ +{php include template("admin/menu");} + +
{$pageUrl}
+ + + + + + + + + + + + + + + + + + + +{loop $arrArticle $key $item} + + + + + + + +{/loop} + +
ID用户ID标题统计æ“作
{$item['articleid']}{$item['userid']}{tsTitle($item['title'])}æµè§ˆï¼š{$item['count_view']}
+ 评论:{$item['count_comment']} + +
+ + + + +{if $item['isaudit']==0} +å–æ¶ˆå®¡æ ¸ +{/if} + +{if $item['isaudit']==1} +审核 +{/if} + + + + + {if $item['istop']==1} + å–æ¶ˆç½®é¡¶ + {else} + 置顶 + {/if} + + + +{if $item['isrecommend']==1} +å–æ¶ˆæŽ¨è +{else} +推è +{/if} + +删除 +
+ +
+ +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/cate_add.html b/app/article/html/admin/cate_add.html new file mode 100644 index 0000000..30f6ee0 --- /dev/null +++ b/app/article/html/admin/cate_add.html @@ -0,0 +1,28 @@ +{php include pubTemplate("header_admin")} + +
+{php include template("admin/menu");} + +
+ + + + + + + + +
分类å称:
分类介ç»ï¼š + + + +
排åºID:
+ + + +
+
+ +
+ +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/cate_edit.html b/app/article/html/admin/cate_edit.html new file mode 100644 index 0000000..9e43dfc --- /dev/null +++ b/app/article/html/admin/cate_edit.html @@ -0,0 +1,27 @@ +{php include pubTemplate("header_admin")} + +
+{php include template("admin/menu");} + +
+ + + + + + + + +
分类å称:
分类介ç»ï¼š + + + +
排åºID:
+ + + +
+
+ +
+{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/cate_list.html b/app/article/html/admin/cate_list.html new file mode 100644 index 0000000..12cb279 --- /dev/null +++ b/app/article/html/admin/cate_list.html @@ -0,0 +1,64 @@ +{php include pubTemplate("header_admin")} + +
+ +{php include template("admin/menu");} + + + + + + + + + +{loop $arrCate $key $item} + + + + + + + + + + + +{loop $item['twocate'] $tkey $titem} + + + + + + + + + + + + + +{/loop} + + + +{/loop} + + + +
分类ID分类å字排åº(æŽ’åºæ•°å­—è¶Šå°è¶Šé å‰)æ“作
{$item[cateid]}Iã€{$item[catename]}{$item[orderid]} + +添加二级分类 + +修改 + 删除 + +
{$titem[cateid]}IIã€{$titem[catename]}{$titem[orderid]} + +修改 +删除 + +
+ +
+{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/menu.html b/app/article/html/admin/menu.html new file mode 100644 index 0000000..4630af3 --- /dev/null +++ b/app/article/html/admin/menu.html @@ -0,0 +1,17 @@ + + +
\ No newline at end of file diff --git a/app/article/html/admin/options.html b/app/article/html/admin/options.html new file mode 100644 index 0000000..dde731f --- /dev/null +++ b/app/article/html/admin/options.html @@ -0,0 +1,29 @@ +{php include pubTemplate("header_admin")} + +
+ +{php include template("admin/menu");} + +
+ + + + + + + + + + + + + + +
APPå称:
APP介ç»ï¼š
APP关键è¯ï¼š
会员å‘布:ä¸å…许 å…许
文章是å¦å®¡æ ¸ï¼šä¸å®¡æ ¸ 审核
+ +
+
+ +
+ +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/permissions.html b/app/article/html/admin/permissions.html new file mode 100644 index 0000000..d452f7a --- /dev/null +++ b/app/article/html/admin/permissions.html @@ -0,0 +1,148 @@ +{php include pubTemplate("header_admin")} + +
+ +{php include template("admin/menu");} + + + +
+ {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
+ + +
+ + +
å‰å°æƒé™
+ + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + + + + + + + + + + + {/if} + + + + +
查看文章: + +
å‘布文章: + +
修改文章: + +
删除文章: + +
+ + + + {if $ugid==1 || $ugid==2} +
åŽå°æƒé™
+ + + + + + + + + + + + + + + + + + + + +
文章é…置: + +
æƒé™é…置: + +
添加分类: + +
修改分类: + +
+ {/if} + + + +
APIæƒé™
+ + + + + + + + + + + +
查看文章: + +
+ + + + + + +
+ +
+ +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/admin/post_list.html b/app/article/html/admin/post_list.html new file mode 100644 index 0000000..d7af5d8 --- /dev/null +++ b/app/article/html/admin/post_list.html @@ -0,0 +1,52 @@ +{php include pubTemplate("header_admin")} + + +
+ +{php include template("admin/menu");} + +
{$pageUrl}
+ + + + + + + + + + + + + + +{loop $arrArticle $key $item} + +{/loop} + +
ID用户ID标题 æ“作
{$item['articleid']}{$item['userid']}{tsTitle($item['title'])} + + + + +{if $item['isaudit']==0} +å–æ¶ˆå®¡æ ¸ +{/if} + +{if $item['isaudit']==1} +审核 +{/if} + + +{if $item['isrecommend']==1} +å–æ¶ˆæŽ¨è +{else} +推è +{/if} + +删除 +
+ +
+ +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/article/html/cate.html b/app/article/html/cate.html new file mode 100644 index 0000000..4172f3b --- /dev/null +++ b/app/article/html/cate.html @@ -0,0 +1,133 @@ +{php include pubTemplate("header")} + +
+ + + + + +
+ + + +
+ + +
+
{$strCate['catename']}
+
+ +
+
    +{loop $arrArticle $key $item} +
  • +{if $item['photo']} + + + +{/if} + + + +
    {$item[user][username]} å‘表于 {$item[addtime]}
    + +
    {if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概è¦{/if} (查看全文)
    + +
    {$item['count_view']}阅读 | {$item['count_comment']}评论
    +
    +
  • +{/loop} +
+
+ +
{$pageUrl}
+
+
+ + +
+ + + +
+ + + + +
+
分类
+
+ + + {loop $arrCate $key $item} + {$item['catename']} + {/loop} + + +
+ +
+ + +
+
推è阅读
+
+
+ +
+
+
+ +
+
一周热门
+
+
+ +
+
+
+ +
+
一月热门
+
+
+ +
+
+
+ + + +{php doAction('gobad','300')} + + +
+ + + + + +
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/edit.html b/app/article/html/edit.html new file mode 100644 index 0000000..d72be2e --- /dev/null +++ b/app/article/html/edit.html @@ -0,0 +1,163 @@ +{php include pubTemplate("header")} + + + +
+ + + + + +
+
+ + +
+
+
+ + +
+ +
+ + +
+{if $arrCate} +
+ + + + +
+
+ + + +
+
+ + + +
+
+ + + +
+{/if} + +
+ + +
+ +
+ + +
+ + +
+ + +
+ 釿–°ç”Ÿæˆå†…å®¹æ¦‚è¦ +
+
+ +
+ + +
+ +
+ + + {if $strArticle['photo']} +

+ +

+ {/if} + +
+ + +
+ + + +
+ + +
+ + 积分 +
+ + + + + + + 返回文章 + +
+ + +
+
+
+ + + +
+
+ + + + + +
+{php doAction('tseditor')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/index.html b/app/article/html/index.html new file mode 100644 index 0000000..78be781 --- /dev/null +++ b/app/article/html/index.html @@ -0,0 +1,237 @@ +{php include pubTemplate("header")} +
+ + + + + +
+ 全部 + {loop $arrCate $key $item} + {$item['catename']} + {/loop} +
+ + +
+ + + +
+ + +
+
+

+ {if $strCate} + {$strCate['catename']} + {else} + {$TS_APP['appname']} + {/if} +

+ + {if $strCate && $strCate['cateinfo']} +
+ {tsTitle($strCate['cateinfo'])} +
+ {/if} + + + {if $ac=='index'} +
+ {$TS_APP['appdesc']} +
+ {/if} + +
+
+ + + + +{loop $arrArticle $key $item} + +
+
+ + + {if $item['photo']} +
+ +
+ + + +
+
+ +
+ {$item['title']} + {if $item['istop']=='1'} + [置顶] + {/if} +
+ +
{$item['user']['username']} å‘表于 {$item['addtime']}
+ +
{if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概è¦{/if} (查看全文)
+ + + + + +
+ +
+ 分类:{$item['cate']['catename']} +
+
+ + {$item['count_view']} + + {$item['count_comment']} + + +
+ +
+ + + + + + + +
+ +
+ + + {else} + +
+ {$item['title']} + {if $item['istop']=='1'} + [置顶] + {/if} +
+ +
{$item['user']['username']} å‘表于 {$item['addtime']}
+ + {if $item['score']==0} +
{if $item['gaiyao']}{$item['gaiyao']}{else}暂无概è¦{/if} (查看全文)
+ {/if} + + + + +
+ +
+ 分类:{$item['cate']['catename']} +
+
+ + {$item['count_view']} + {$item['count_comment']} + +
+ +
+ + + + {/if} + +
+
+ +{/loop} + + +
{$pageUrl}
+ + + +
+ + + +
+ + + {if $arrTwoCate} +
+
二级分类
+
+ {loop $arrTwoCate $key $item} + {$item['catename']} + {/loop} +
+
+ {/if} + + + +
+
推è阅读
+
+
+ +
+
+
+ +
+
一周热门
+
+
+ +
+
+
+ +
+
一月热门
+
+
+ +
+
+
+ + + +{php doAction('gobad','300')} + + +
+ + + + + +
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/menu.html b/app/article/html/menu.html new file mode 100644 index 0000000..3500aa6 --- /dev/null +++ b/app/article/html/menu.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/app/article/html/my/index.html b/app/article/html/my/index.html new file mode 100644 index 0000000..ef3c52d --- /dev/null +++ b/app/article/html/my/index.html @@ -0,0 +1,73 @@ +{php include pubTemplate("header")} +
+ + + +
+ + +
+
+ + {php include pubTemplate("my")} + +
+
+ + + +
+ + +
+
我的文章
+
+ + +
+ + å·²å‘布{$articleNum}篇文章 + + å‘布文章 +
+ + + + + + + + + {loop $arrArticle $key $item} + + {/loop} + +
标题时间æ“作
+ + {tsTitle($item['title'])}{$item['addtime']} + + 修改 | + + 删除 + +
+ +
+
{$pageUrl}
+ + + +
+
+ +
+
+ + + + + +
+ + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/show.html b/app/article/html/show.html new file mode 100644 index 0000000..323c5a5 --- /dev/null +++ b/app/article/html/show.html @@ -0,0 +1,253 @@ +{php include pubTemplate("header")} +
+ + +
+ 全部 + {loop $arrCate $key $item} + {$item['catename']} + {/loop} +
+ +
+ +
+ +
+
+ +

{$strArticle[title]}

+ +
+ + {$strArticle['user']['username']} + + +
+ +
å‘表于 {$strArticle['addtime']}
+
+
+ + {if $strArticle['tags']} +
+ {loop $strArticle['tags'] $key $item} + {$item['tagname']} + {/loop} +
+
+ {/if} + + + {if $isread==1} +
æŸ¥çœ‹æ–‡ç« éœ€è¦æ”¯ä»˜ {$strArticle['score']}积分 支付
+ {else} + +
+ + {$strArticle[content]} + + {$tpUrl} + +
+ {/if} + + + +
{php doAction('article_show_footer')}
+ + +
{php doAction('gobad','468')}
+ + +
+ + +
+ + {$strArticle['count_view']} + + {$strArticle['count_comment']} + +
+ + {if $TS_USER[isadmin]==1 || $TS_USER['userid']==$strArticle['userid']} + + {/if} + + +
+ +
+ + {if $strUp} +
上一篇:{$strUp['title']}
+ {/if} + {if $strNext} +
下一篇:{$strNext['title']}
+ {/if} + + + + +
+
+ + +
+
评论{if $strArticle['count_comment']} ({$strArticle['count_comment']}){/if}
+
+ + + + + + {php include pubTemplate("comment")} + + + + + +
+ + {if tsIntval($TS_USER[userid])==0} + + {else} + +
+
+ +
+ +
+
+ {if $TS_SITE['isauthcode']} + + 点击刷新验è¯ç  + {/if} +
+ +
是å¦å…¬å¼€ï¼šå…¬å¼€ ä¸å…¬å¼€
+ + +
+ + + + {if $TS_SITE['isniming']==1} +
+ 匿åå‘布: + å¦ + 是 +
+ {/if} + + +
+ + + + + +
+ +
+ {/if} + +
+ +
+
+ + + + + +
+
最新文章
+
+ +
+ +
+ +
+
+ + +
+ +
+ + +
+
推è阅读
+
+
+ +
+
+
+ + +
+
一周热门
+
+
+ +
+
+ +
+ +
+
一月热门
+
+
+ +
+
+ +
+ + + {php doAction('gobad','300')} +
+ +
+
+{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} diff --git a/app/article/html/tag.html b/app/article/html/tag.html new file mode 100644 index 0000000..80617c4 --- /dev/null +++ b/app/article/html/tag.html @@ -0,0 +1,155 @@ +{php include pubTemplate("header")} + +
+ + + + +
+ + +
+ + + + + + + + {loop $arrArticle $key $item} + + +
+
+ + + {if $item['photo']} +
+ +
+ + + +
+
+ + + +
{$item['user']['username']} å‘表于 {$item['addtime']}
+ +
{if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概è¦{/if} (查看全文)
+ + + + + +
+ +
+ 分类:{$item['cate']['catename']} +
+
+ + {$item['count_view']} + {$item['count_comment']} + + +
+ +
+ + + + + + + +
+ +
+ + + {else} + + + +
{$item['user']['username']} å‘表于 {$item['addtime']}
+ +
{if $item['gaiyao']}{$item['gaiyao']}{else}暂无概è¦{/if} (查看全文)
+ + + + +
+ +
+ 分类:{$item['cate']['catename']} +
+
+ + {$item['count_view']} + {$item['count_comment']} +
+ +
+ + + + {/if} + +
+
+ + + + + + + + + + {/loop} + + + + + + +
{$pageUrl}
+ +
+ + +
+ +
+
热门标签
+
+
+{loop $arrTag $key $item} +{$item['tagname']} +{/loop} + +
+
+
+ + +
+ + + + + + +
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/html/tags.html b/app/article/html/tags.html new file mode 100644 index 0000000..f35fa4b --- /dev/null +++ b/app/article/html/tags.html @@ -0,0 +1,34 @@ +{php include pubTemplate("header")} + +
+ + + +
+
+ +
+{loop $arrTag $key $item} +{$item[tagname]} +{/loop} + +
+
+
+
{$pageUrl}
+ + + + +
+
+
+ + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/article/icon.png b/app/article/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..03dd3569ff55e3718db37abfe9b4a4d334755307 GIT binary patch literal 1969 zcmbW2eLT~P9>>4GnHZ}~DpzFWS=ksVl$Fg>&Xndcxl<}_aXnR%Y1Cmt$w0wb0mzDiXJ?ar>>b&%Gv$r{(tWu-|zR2&+GgBzCM3^UhmAkG>?@UdKv(* z(#wcyqU@q4hD{g!Bw0D1~-D|tzHzT8q44vOjkPqTk z9_mvSMx<(Jo80_D&G&dMa26hH{xFT*ltOt%u}|J&a%H7nj@cbXhI*!19)s+Lb>5X@ z^V;X~t=)6FV^u|Ghh8rvNT#m4(yFn^A2nA0i^W(s{H0;KA^~3SJ~_3{4RBIESwsH6DX3{ z<>O~c{we!CcHT~Y!SACe_Rx)!)&7u%FOW!GQDV{YwfQ`kYBFOjh!oKY0xNfatZ z3s=IwRm}IbE}v-#+2`H*4G~NKVf@wvLWey%t0?m+-gX%kI7koaJKM^^)N11hwsObs z_>SIDGI*+!AD!h8v4Q=}20|J>Xbgo$aZI7C)`pCSAhcLj9SstAZ-7GZsxXI5g_@a0y z@#j}dp^N$q-9X-HFE$45eiO1Yx$cYiVuNm{F57@feN9-+@S8KQ39l+i@*(eAj_w#| zY#I^kIKXUJ?U8vkA;$rdhY9ni5ovbFq^s7ypWGO`98;{2q&mRG6b$!TWy23NY|Vbw zQTHoRo>Wdx@N!5QM2`Rnw|v||rVm^)aE@l(A94k;{=1?FP9wXFn?9y=(sv>ZAM;7Y z*S6wu1B6rf1nV%7V2)VK?-xs>9SXY^i)iDUAn~O(T8(@2Y<$iYx*d`|_~l$~q#oVs zYWriNe*3@{ZsH!^=FeuF50#vNDu-i9NlBTlDGDr=;t@5jt26xhdoMTfG7#Gkk-{B3 zCrNWz+{UI5QA(kzI*Pn{pg|^xBVE$&xtJgSgGYmjI5v~X3@`WFUU-VcjTB5K9(sV{ z_`n0TiKF7r-$mSl&e<9MqBfkMdmGS}h7+^b96`<75|T6`?+^7j#spjrzI(JtP*Bhq z>F|^@f+7d}F>X==xxctan7Tnn=c3^KT8Mkj6-KB-@b;2lno(q$-j%CZ1aCbapBD%n zUYqXZ89~HoGHp%+wjZYi*r7Q>LAO^Jf;Z3U@J@%^tMctntzkZrqJ_48OniBss~P{i zGS#kNF|=Nk&80o*SBfz{tnX(vTwAz9RoAsF%4f1S(3RFUS8WN8-7vsn=S3Ysk!LZv z3l)3Ud{;xn&kA?5hnID6C8Xz9=hLQ4%0#ifPtg2H~nZ;~rXDVB6xubvM3h zVSjtj*u^89|GMqhxdV^$=BKa47o0hncR#xWJrVvW>%e0eF~+^p=b0g;k~#^2o4tT` zI^A&z@8+CVFY8exr0ziz<(B32sndE&Cu~emr?lrDakA#30}|YqOnF%l5ts{%GL=>B zTA&|YjQN1#VAdO4GJsN4ONhFw>S=S|H<@;rv(0P|6#jDF~R0u^*B9vC<0(;quvLp>asF$+1zVxd8 znkZSM0mn003oR*FEM>XQ-Z{QhIw(!P#xJSvXI7qId8%@(sb5-_?LbKV*XTXXc>5oL z(q>=Fwe0k~&MQ_xvS!-rW%18MTltT<`wKvwWzhft literal 0 HcmV?d00001 diff --git a/app/article/js/admin.js b/app/article/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/article/js/extend.func.js b/app/article/js/extend.func.js new file mode 100644 index 0000000..adbfc53 --- /dev/null +++ b/app/article/js/extend.func.js @@ -0,0 +1,16 @@ +function recommend(articleid){ + $.post(siteUrl+'index.php?app=article&ac=recommend',{'articleid':articleid},function(rs){ + if(rs==0){ + + tsNotice('请登陆åŽå†æŽ¨è'); + + }else if(rs == 1){ + + tsNotice('ä½ å·²ç»æŽ¨è过'); + + }else if(rs == 2){ + + window.location.reload() + } + }) +} \ No newline at end of file diff --git a/app/article/skin/style.css b/app/article/skin/style.css new file mode 100644 index 0000000..bee8a55 --- /dev/null +++ b/app/article/skin/style.css @@ -0,0 +1,23 @@ + +.catelist{} +.catelist ul{} +.catelist ul li{font-size:12px;height:30px;line-height:30px; width:140px;} +.catelist .on{background:#999999;padding:5px 10px;color:#FFFFFF;} + +.article_show_content{font-size:16px;line-height:30px;overflow: hidden;word-wrap: break-word;word-break: normal;} +.article_show_content img{max-width: 100%;} + +.article_show_content p{font-size:16px;} +.article_show_content a{color:#49a5de} + + +.article_video{ + background-color: #FFFFFF; + border:dashed 2px #66afe9; + padding:10px; +} + +.article_video iframe{width: 100%;height:450px;} +@media (max-width: 575.98px) { + .article_video iframe{width: 100%;height:230px;} +} \ No newline at end of file diff --git a/app/article/skins/default/style.css b/app/article/skins/default/style.css new file mode 100644 index 0000000..bee8a55 --- /dev/null +++ b/app/article/skins/default/style.css @@ -0,0 +1,23 @@ + +.catelist{} +.catelist ul{} +.catelist ul li{font-size:12px;height:30px;line-height:30px; width:140px;} +.catelist .on{background:#999999;padding:5px 10px;color:#FFFFFF;} + +.article_show_content{font-size:16px;line-height:30px;overflow: hidden;word-wrap: break-word;word-break: normal;} +.article_show_content img{max-width: 100%;} + +.article_show_content p{font-size:16px;} +.article_show_content a{color:#49a5de} + + +.article_video{ + background-color: #FFFFFF; + border:dashed 2px #66afe9; + padding:10px; +} + +.article_video iframe{width: 100%;height:450px;} +@media (max-width: 575.98px) { + .article_video iframe{width: 100%;height:230px;} +} \ No newline at end of file diff --git a/app/attach/about.php b/app/attach/about.php new file mode 100644 index 0000000..8ffc2fc --- /dev/null +++ b/app/attach/about.php @@ -0,0 +1,34 @@ + '附件', + + 'version' => '1.0', + + 'desc' => '附件', + + 'url' => 'https://lmve.net', + + 'email' => '1337087466@qq.com', + + 'author' => '无闻风', + + 'author_url' => 'https://lmve.net', + + 'isoption' => '1', + + 'isinstall' => '1', + + 'issql' => '0', + + 'issystem' => '1', + + 'isappnav' => '1', + + 'ismy'=>'1', + +); \ No newline at end of file diff --git a/app/attach/action/album.php b/app/attach/action/album.php new file mode 100644 index 0000000..a30e47f --- /dev/null +++ b/app/attach/action/album.php @@ -0,0 +1,192 @@ +find('attach_album',array( + 'albumid'=>$albumid, + )); + //404 + if($albumid!=0) + { + + if($strAlbum==''){ + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; + if($strAlbum['isaudit']==1){ + tsNotice('内容审核中...'); + } + } + } + + + + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + + $page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + + $url = tsUrl('attach','album',array('id'=>$albumid,'page'=>'')); + + $lstart = $page*24-24; + + $strUser = aac('user')->getSimpleUser($strAlbum['userid']); + if($albumid!=0) + { + $arrattach = $new['attach']->findAll('attach',array( + 'albumid'=>$albumid, + ),'attachid desc',null,$lstart.',24'); + + $attachNum = $new['attach']->findCount('attach',array( + 'albumid'=>$albumid, + )); + + }else + { + $userid = aac('user')->isLogin(); + $arrattach = $new['attach']->findAll('attach',array( + 'userid'=>$userid, + 'albumid'=>0, + ),'attachid desc',null,$lstart.',24'); + + $attachNum = $new['attach']->findCount('attach',array( + 'userid'=>$userid, + )); + $strAlbum['albumname']="个人附件库"; + $strAlbum['userid']=$userid; + + } + + + foreach($arrattach as $key=>$item){ + $arrattach[$key]['attachdesc'] = tsTitle($item['attachdesc']); + } + + $pageUrl = pagination($attachNum, 24, $page, $url); + + + $title = $strAlbum['albumname']; + + + include template("album"); + + $new['attach']->update('attach_album',array( + 'albumid'=>$strAlbum['albumid'], + ),array( + 'count_view'=>$strAlbum['count_view']+1, + )); + + + break; + + + //修改attach + case "edit": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = intval($_GET['albumid']); + + $strAlbum = $new['attach']->find('attach_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid'] == $userid || $TS_USER['isadmin']==1) { + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + $title = '修改attach属性-'.$strAlbum['albumname']; + include template("album_edit"); + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + break; + + case "editdo": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = intval($_POST['albumid']); + + $strAlbum = $new['attach']->find('attach_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid']==$userid || $TS_USER['isadmin']==1){ + + $albumname = trim($_POST['albumname']); + if($albumname == '') qiMsg("attachåç§°ä¸èƒ½ä¸ºç©ºï¼"); + + $albumdesc = trim($_POST['albumdesc']); + + + if($TS_USER['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($albumname); + aac('system')->antiWord($albumdesc); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $new['attach']->update('attach_album',array( + 'userid'=>$strAlbum['userid'], + 'albumid'=>$strAlbum['albumid'], + ),array( + 'albumname'=>$albumname, + 'albumdesc'=>$albumdesc, + )); + + header("Location: ".tsUrl('attach','album',array('id'=>$albumid))); + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + break; + + + + + + //删除attach + case "del": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = intval($_GET['albumid']); + + $strAlbum = $new['attach']->find('attach_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid'] == $userid || $TS_USER['isadmin'] == 1) { + + $new['attach']->delete('attach_album',array( + 'albumid'=>$albumid, + )); + + $new['attach']->delete('attach',array( + 'albumid'=>$albumid, + )); + + + } + + + header("Location: ".tsUrl('attach')); + + break; +} \ No newline at end of file diff --git a/app/attach/action/comment.php b/app/attach/action/comment.php new file mode 100644 index 0000000..5ce3376 --- /dev/null +++ b/app/attach/action/comment.php @@ -0,0 +1,92 @@ +isLogin($js,$userkey); +switch($ts){ + + case "do": + + $authcode = strtolower($_POST['authcode']); + + if ($TS_SITE ['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + getJson ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ,$js,0); + } + } + + $attachid = intval($_POST['attachid']); + $content = tsClean($_POST['content'],$js); + $content2 = emptyText($_POST['content']);//测试空内容 + $ispublic = intval($_POST['ispublic']); + + //过滤内容开始 + if($TS_USER['isadmin']==0){ + aac('system')->antiWord($content,$js); + } + //è¿‡æ»¤å†…å®¹ç»“æŸ + + if($content2==''){ + getJson('没有任何内容是ä¸å…许你通过滴^_^',$js); + }else{ + $commentid = $new['attach']->create('attach_comment',array( + 'attachid' => $attachid, + 'userid' => $userid, + 'content' => $content, + 'addtime'=> time(), + )); + + + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(通知楼主有人回å¤ä»–的帖å­å•¦) + $strattach = $new['attach']->find('attach',array( + 'attachid'=>$attachid, + )); + + if($strattach['userid'] != $TS_USER['userid']){ + + $msg_userid = '0'; + $msg_touserid = $strattach['userid']; + $msg_content = '你的附件:《'.$strattach['attachname'].'》新增一æ¡è¯„论,快去看看给个回å¤å§^_^ '; + $msg_tourl = tsUrl('attach','show',array('id'=>$attachid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + } + + header("Location: ".tsUrl('attach','show',array('id'=>$attachid))); + + } + + break; + + //删除评论 + case "delete": + + $commentid = intval($_GET['commentid']); + + $strComment = $new['attach']->find('attach_comment',array( + 'commentid'=>$commentid, + )); + + $strattach = $new['attach']->find('attach',array( + 'attachid'=>$strComment['attachid'], + )); + + + + if($strattach['userid']==$userid || $TS_USER['isadmin']==1 || $strComment['userid']==$userid){ + + $new['attach']->delete('attach_comment',array( + 'commentid'=>$commentid, + )); + + + + + + } + + //跳转回到帖å­é¡µ + header("Location: ".tsUrl('attach','show',array('id'=>$strComment['attachid']))); + + break; +} \ No newline at end of file diff --git a/app/attach/action/down.php b/app/attach/action/down.php new file mode 100644 index 0000000..05b0225 --- /dev/null +++ b/app/attach/action/down.php @@ -0,0 +1,103 @@ +isLogin(); + if(aac('user')->isPublisher()==false) {tsNotice('ä½ å¯èƒ½è¢«é™åˆ¶æˆ–没有验è¯é‚®ç®±ï¼Œæ£€æŸ¥é‚®ç®±æ˜¯å¦è®¤è¯ã€‚','->点击认è¯<-',tsUrl('user','verify'));} + + $attachid=intval($_GET['id']); + + $the_file=$new['attach']->find('attach',array( + 'attachid'=>$attachid, + + )); + if($the_file) //检查数æ®è¡¨ + { + $file_dir = "uploadfile/attach/".$the_file['attachurl']; + if (!file_exists($file_dir)) { //检查文件是å¦å­˜åœ¨ + echo "文件已删除"; + exit; + }else{ + if($the_file['userid']==$userid) + { + $new['attach']->update('attach',array( + 'attachid'=>$attachid, + ),array( + 'count_view'=>$the_file['count_view']+1, + )); + download($file_dir,$the_file['attachname']); + exit; + }else + { + if($the_file['pay']==0)//å…费的 + { + $new['attach']->update('attach',array( + 'attachid'=>$attachid, + ),array( + 'count_view'=>$the_file['count_view']+1, + )); + download($file_dir,$the_file['attachname']); + exit; + + }else + { + if(aac('user')->delScore($userid,"download file:" . $the_file['attachname'],$the_file['pay'])) + { + $new['attach']->update('attach',array( + 'attachid'=>$attachid, + ),array( + 'count_view'=>$the_file['count_view']+1, + )); + download($file_dir,$the_file['attachname']); + aac('user')->addScore($the_file['userid'],$userme['username']."download:" . $the_file['attachname'],$the_file['pay'],1); + exit; + }else + { + tsNotice('ä¸‹è½½æ–‡ä»¶éœ€è¦æ”¯ä»˜'.$the_file['pay'].'积分,你似乎ä¸å¤Ÿï¼'); + } + + } + } + + + + } + + }else + { + echo "文件已删除"; + exit; + + } + + \ No newline at end of file diff --git a/app/attach/action/edit.php b/app/attach/action/edit.php new file mode 100644 index 0000000..e6d70d7 --- /dev/null +++ b/app/attach/action/edit.php @@ -0,0 +1,24 @@ + + +isLogin(); + +$attachid = intval ( $_GET ['id'] ); + +$stredit = $new ['attach']->find ( 'attach', array ('attachid' => $attachid ) ); +$stredit['content'] = tsDecode($stredit['content']); +if($stredit=='') +{ + + tsNotice('NO!'); +} +if($userid!=$stredit['userid']) +{ + tsNotice('NO'); + +} +include template ( "edit" ); + +?> \ No newline at end of file diff --git a/app/attach/action/editdo.php b/app/attach/action/editdo.php new file mode 100644 index 0000000..0f70897 --- /dev/null +++ b/app/attach/action/editdo.php @@ -0,0 +1,31 @@ +isLogin(); + +$attachid = intval ( $_POST ['attachid'] ); + +$stredit = $new ['attach']->find ( 'attach', array ('attachid' => $attachid ) ); + +if($stredit=='') +{ + + tsNotice('NO!'); +} +if($userid!=$stredit['userid']) +{ + tsNotice('NO'); + +} + + +$attachname = trim($_POST['attachname']); + +$pay=intval($_POST['pay']); + +$new['attach'] -> update('attach', array('attachid' => $attachid), array( + 'attachname' => $attachname, + 'pay' => $pay, + )); +header("Location: " . tsUrl('attach', 'show', array('id' => $attachid))); +?> \ No newline at end of file diff --git a/app/attach/action/editor.php b/app/attach/action/editor.php new file mode 100644 index 0000000..cd88e5e --- /dev/null +++ b/app/attach/action/editor.php @@ -0,0 +1,36 @@ +isLogin(); + +switch($ts){ + case "list": + + $kw=urldecode(tsFilter($_GET['kw'])); + + $page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + + $url = tsUrl('attach','editor',array('ts'=>'list','page'=>'')); + + $lstart = $page*10-10; + + if($kw=='') + { + $attachlist = $new['attach']->findAll('attach',array('userid'=>$userid),'addtime desc',null,$lstart.',10'); + $albumNum = $new['attach']->findCount('attach'); + }else + { + $kw = t($kw); + $attachlist = $db->fetch_all_assoc("select * from ".dbprefix."attach WHERE `userid` = '$userid' AND `attachname` like '%$kw%' order by addtime desc limit $lstart,10"); + $albumNum = $db->once_num_rows("select * from ".dbprefix."attach WHERE `userid` = '$userid' AND attachname like '%$kw%'"); + } + + $pageUrl = pagination($albumNum, 10, $page, $url); + + include template("editor"); + break; + case "upload": + $albumid=0; + include template("upload"); + break; +} \ No newline at end of file diff --git a/app/attach/action/index.php b/app/attach/action/index.php new file mode 100644 index 0000000..f2bc6ed --- /dev/null +++ b/app/attach/action/index.php @@ -0,0 +1,25 @@ +'')); + +$lstart = $page*30-30; + +$arrAlbum = $new['attach']->findAll('attach_album',"`isaudit`=0",'albumid desc',null,$lstart.',30'); + +foreach($arrAlbum as $key=>$item){ + $arrAlbum[$key]['albumname'] = tstitle($item['albumname']); + $arrAlbum[$key]['albumdesc'] = tstitle($item['albumdesc']); +} + +$albumNum = $new['attach']->findCount('attach_album'); + +$pageUrl = pagination($albumNum, 30, $page, $url); + +$title = '最新专辑'; + +$sitekey = $TS_APP['appkey']; +$sitedesc = $TS_APP['appdesc']; +include template("index"); \ No newline at end of file diff --git a/app/attach/action/new.php b/app/attach/action/new.php new file mode 100644 index 0000000..93682cd --- /dev/null +++ b/app/attach/action/new.php @@ -0,0 +1,65 @@ +isLogin(); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + + +switch($ts){ + + + case "": + + $title = '新建库'; + include template("create"); + + break; + + case "do": + + + $albumname = trim($_POST['albumname']); + $albumdesc = trim($_POST['albumdesc']); + + if($albumname == '') { + tsNotice("库åç§°ä¸èƒ½ä¸ºç©ºï¼"); + } + + //1å®¡æ ¸åŽæ˜¾ç¤º0ä¸å®¡æ ¸ + if ($TS_APP['isaudit']==1) { + $isaudit = 1; + } else { + $isaudit = 0; + } + + if($TS_USER['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($albumname); + aac('system')->antiWord($albumdesc); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $albumid = $new['attach']->create('attach_album',array( + + 'userid'=>$userid, + 'albumname'=>$albumname, + 'albumdesc'=>$albumdesc, + 'isaudit'=>$isaudit, + 'addtime'=>date('Y-m-d H:i:s'), + 'uptime'=>date('Y-m-d H:i:s'), + + )); + + header("Location: ".tsUrl('attach','album',array('id'=>$albumid))); + + + break; + + +} \ No newline at end of file diff --git a/app/attach/action/show.php b/app/attach/action/show.php new file mode 100644 index 0000000..1e7e91b --- /dev/null +++ b/app/attach/action/show.php @@ -0,0 +1,76 @@ +find('attach',array( + 'attachid'=>$attachid, + )); + +if ($strattach == '') { + header ( "HTTP/1.1 404 Not Found" ); + header ( "Status: 404 Not Found" ); + $title = '404'; + include pubTemplate ( "404" ); + exit (); +} + +$arrattachuser = aac ( 'user' )->getSimpleUser ( $strattach ['userid'] ); + + +//是å¦å…³æ³¨ +if($TS_USER['userid'] != '' && $TS_USER['userid'] != $arrattachuser['userid']){ + $userid=$arrattachuser['userid']; + $followNum = $db->once_num_rows("select * from ".dbprefix."user_follow where userid='".$TS_USER['userid']."' and userid_follow='$userid'"); + if($followNum > '0'){ + $arrattachuser['isfollow'] = true; + }else{ + $arrattachuser['isfollow'] = false; + } +}else{ + $arrattachuser['isfollow'] = false; +} + +// 是å¦å®¡æ ¸ +if ($strattach ['isaudit'] == 1 && $TS_USER['isadmin']==0 && $TS_USER['userid']!=$strattach['userid']) { + tsNotice ( '内容审核中...' ); +} + +$file_dir = "uploadfile/attach/".$strattach['attachurl']; +$filemd5=md5_file($file_dir); +if($filemd5) +{ + +}else +{ + $filemd5="File_Erro!"; + +} + +// 获å–评论 +$page = isset ( $_GET ['page'] ) ? intval ( $_GET ['page'] ) : 1; +$url = tsUrl ( 'attach', 'show', array ( + 'id' => $attachid, + 'page' => '' +) ); +$lstart = $page * 10 - 10; + +$arrComments = $new ['attach']->findAll ( 'attach_comment', array ( + 'attachid' => $attachid +), 'addtime desc', null, $lstart . ',10' ); + +foreach ( $arrComments as $key => $item ) { + $arrComment [] = $item; + $arrComment[$key]['content'] = tsDecode($item['content']); + $arrComment [$key] ['user'] = aac ( 'user' )->getSimpleUser ( $item ['userid'] ); +} + +$commentNum = $new ['attach']->findCount ( 'attach_comment', array ( + 'attachid' => $attachid +) ); + +$pageUrl = pagination ( $commentNum, 10, $page, $url ); + +// 标签 +//$strattach ['tags'] = aac ( 'tag' )->getObjTagByObjid ( 'attach', 'attachid', $strattach ['attachid'] ); +$title = $strattach['attachname']; +include template ( "show" ); diff --git a/app/attach/action/upload.php b/app/attach/action/upload.php new file mode 100644 index 0000000..9daf537 --- /dev/null +++ b/app/attach/action/upload.php @@ -0,0 +1,69 @@ +isLogin(); + +switch($ts){ + case "": + $albumid=intval($_GET['albumid']); + include template("upload"); + break; + case "add": + $albumid=intval($_GET['albumid']); + include template("add"); + break; + case "do": + $albumid = intval($_POST['albumid']); + + + $strAlbum = $new['attach']->find('attach_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum!=''){ + if($strAlbum['userid']!=$userid){ + getJson('éžæ³•æ“作3ï¼'); + + } + } + + + + if($_FILES['file']==''){ts404();} + //上传 + $attachid = $new['attach']->create('attach',array( + 'userid'=>$userid, + 'albumid'=>$albumid, + 'locationid'=>aac('user')->getLocationId($userid), + 'addtime' => date('Y-m-d H:i:s',time()), + )); + //上传 + $arrUpload = tsUpload($_FILES['file'],$attachid,'attach',array('zip','rar','doc','txt','ppt','pdf','docx','mp4')); + + if($arrUpload && $arrUpload['path'] && $arrUpload['url']){ + $new['attach']->update('attach',array( + 'attachid'=>$attachid, + ),array( + 'attachname'=>$arrUpload['name'], + 'attachtype'=>$arrUpload['type'], + 'path'=>$arrUpload['path'], + 'attachurl'=>$arrUpload['url'], + 'attachsize'=>$arrUpload['size'], + )); + } + + + $count_attach = $new['attach']->findCount('attach',array( + 'albumid'=>$albumid, + )); + + $new['attach']->update('attach_album',array( + 'albumid'=>$albumid, + ),array( + 'count_attach'=>$count_attach + )); + + + break; + +} \ No newline at end of file diff --git a/app/attach/class.attach.php b/app/attach/class.attach.php new file mode 100644 index 0000000..745b084 --- /dev/null +++ b/app/attach/class.attach.php @@ -0,0 +1,6 @@ + + + + + + +
+ +
+
+ + +
ä¸Šä¼ æ–‡ä»¶åªæ”¯æŒï¼šzip,rar,doc,txt,ppt,pdf,docxæ ¼å¼ (上传格å¼è¯·åœ¨åŽå°é…ç½®)
+ + + +
+ +
+ + + + + +
+ + + + + +
+
+ + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/album.html b/app/attach/html/album.html new file mode 100644 index 0000000..14fa07d --- /dev/null +++ b/app/attach/html/album.html @@ -0,0 +1,114 @@ +{php include pubTemplate("header")} + +
+ + + + + +
+
+ + +

{$title}

+ +
+ +
+ + {$strAlbum[count_view]} 人æµè§ˆ + + {$strAlbum[count_attach]} æ–‡ä»¶ +  {$strAlbum[addtime]} åˆ›å»º + + +
+ + + +
+ + +{if $arrattach} +
{$pageUrl}
+ + + + + + + + + + + + +{loop $arrattach $key $item} + + + + + + + + + + + + +{/loop} + +
file idåç§°Sizeç§¯åˆ†ä¸‹è½½é‡æ“作
{$item[attachid]}{$item[attachname]}{$item[attachsize]}{if $item[pay]==0}Free{else}{$item[pay]}{/if}{$item[count_view]} + 下载 + 修改 +
+{else} +
+
这个附件库现在还没有文件 +{if $strAlbum[userid] == $TS_USER[userid]}, ä½ å¯ä»¥æ·»åŠ æ–‡ä»¶{/if} +
+
+{/if} +
+ + +
{$pageUrl}
+ +
{$strAlbum[albumdesc]}
+ + +
+ +
+ + {if $strAlbum[userid] == $TS_USER[userid] || $TS_USER[isadmin]==1}   + {if $albumid!=0} + > ä¿®æ”¹é™„件库 + {/if} +  > æ·»åŠ æ–‡ä»¶ + {/if} + + + {if $strAlbum[userid] == $TS_USER[userid] || $TS_USER[isadmin]==1} + {if $albumid!=0} +  > åˆ é™¤é™„件库 + {/if} + {/if} + + {if $albumid!=0} +  > {$strUser['username']}的附件库 + {/if} +
+ + +
+
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/album_edit.html b/app/attach/html/album_edit.html new file mode 100644 index 0000000..e1d8c68 --- /dev/null +++ b/app/attach/html/album_edit.html @@ -0,0 +1,68 @@ +{php include pubTemplate("header")} + +
+ + + + + + +
+
+ + + + + + + +
+ +
+
+ +
+
+ + +
+ +
+ + +
+ + + + + + + 返回附件 +
+ + +
+
+ +
+ + + + + + +
+ +
+ +
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/create.html b/app/attach/html/create.html new file mode 100644 index 0000000..544d761 --- /dev/null +++ b/app/attach/html/create.html @@ -0,0 +1,65 @@ +{php include pubTemplate("header")} + +
+ + + + + + +
+
+ +{template menu} + + + + + +
+
+
+ +
+
+ + +
+ +
+ + +
+ + + + + 返回我的库 +
+ +

+ +

+
+
+
+ + + + + + + +
+
+ + +
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/edit.html b/app/attach/html/edit.html new file mode 100644 index 0000000..06d315b --- /dev/null +++ b/app/attach/html/edit.html @@ -0,0 +1,61 @@ +{php include pubTemplate("header")} + +
+ + +
+
+ + +
+
+
+ + + +
+ +
+ + +
+ + +
+ + +
+ + + + + + + +

+ +
+ + + + +
+
+
+ + + +
+
+ +
+ + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/editor.html b/app/attach/html/editor.html new file mode 100644 index 0000000..92aac31 --- /dev/null +++ b/app/attach/html/editor.html @@ -0,0 +1,96 @@ + + + + + Title + + + + + + + + + + + +
+
+
+ +
+ + + +
+ +
+ +
+
+
+ +
+ +
+
+ + +
+ + +
{$pageUrl}
+ + + + + + + + + + + + + {loop $attachlist $key $item} + + + + + + + {/loop} + + +
åç§°Size积分æ“作
{$item[attachname]}{$item[attachsize]}{if $item[pay]==0}Free{else}{$item[pay]}{/if} + æ’å…¥ +
+ + + +
+
+ + +
+ + + + + + \ No newline at end of file diff --git a/app/attach/html/index.html b/app/attach/html/index.html new file mode 100644 index 0000000..b4f46e8 --- /dev/null +++ b/app/attach/html/index.html @@ -0,0 +1,49 @@ +{php include pubTemplate("header")} + +
+ + + + +
+
+ +{template menu} + + +
+{loop $arrAlbum $key $item} +
+ + {$item[albumname]} + + +
+
{$item[albumname]}
+
{$item[count_attach]}个附件
+
{php echo date('Y-m-d',strtotime($item['addtime']))} 创建
+
+ +
+{/loop} +
+ + + +
+
{$pageUrl}
+ +
+
+
+ +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/show.html b/app/attach/html/show.html new file mode 100644 index 0000000..d8c5d60 --- /dev/null +++ b/app/attach/html/show.html @@ -0,0 +1,172 @@ +{php include pubTemplate("header")} +
+ + + +
+
+
+
+ {if $strattach['tags']} +
+ {loop $strattach[tags] $key $strattach} + {$strattach[tagname]} + {/loop} +
+
+ {/if} +
+

{$strattach[attachname]}

+ + + + + + + + + + + + + + + + + + + +
file idMD5值Size下载需è¦ç§¯åˆ†ä¸‹è½½é‡
{$strattach[attachid]}{$filemd5}{$strattach[attachsize]}{if $strattach[pay]==0}Free{else}{$strattach[pay]}{/if}{$strattach[count_view]}
+ 下载{if $strattach[pay]>0}-{$strattach[pay]}积分{/if} +
+
+
{php doAction('group_topic_footer')}
+
+ + + + + + +
+
+
up主
+
+
+
+ {$arrattachuser[username]} +
+
+ {$arrattachuser[username]} + +
+
+ +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    评论
    +
    + + {if $arrComment} +
    +
      + {loop $arrComment $key $strattach} +
    • +
      + {$strattach[user][username]} +
      +
      +

      + + {$strattach[user][username]} +

      +

      {$strattach[content]}

      +

      {php echo date('Y-m-d H:i:s',$strattach[addtime])}

      + {if $TS_USER[userid] == $strattach[userid] || + $TS_USER['isadmin']==1} + + {/if} +
      +
    • {/loop} +
    +
    +
    {$pageUrl}
    + {/if} + + +
    + {if intval($TS_USER[userid])==0} + + {else} +
    + + +
    + +
    + + + +
    + + +
    + {if $TS_SITE['isauthcode']} + 验è¯ç ï¼š + 点击刷新验è¯ç  + {/if} + +
    + + +
    + + + + +
    + +
    + +
    + {/if} +
    + + +
    +
    +
    + +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/attach/html/upload.html b/app/attach/html/upload.html new file mode 100644 index 0000000..5cea83e --- /dev/null +++ b/app/attach/html/upload.html @@ -0,0 +1,63 @@ + + + + + + Title + + + + + + + + + + + + + + + + + +
    + + +
    ä¸Šä¼ æ–‡ä»¶åªæ”¯æŒï¼šzip,rar,doc,txt,ppt,pdf,docxæ ¼å¼ (上传格å¼è¯·åœ¨åŽå°é…ç½®)
    + +
    + +
    + + + + + +
    + + + + + \ No newline at end of file diff --git a/app/attach/js/extend.func.js b/app/attach/js/extend.func.js new file mode 100644 index 0000000..139597f --- /dev/null +++ b/app/attach/js/extend.func.js @@ -0,0 +1,2 @@ + + diff --git a/app/attach/skins/default/attach_album.png b/app/attach/skins/default/attach_album.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d1f74fbc830db2a74fce02ca9166a40baf714f GIT binary patch literal 192361 zcmeFYg;z3cr0?#E}X%w#5?GUuFqWS>1z@3d5Ku_&>gJb8kvrmCp>UemGf%=7{ zPYHN)Bj(@oXL^T`u@tH%TFmrRkvlP3>_ zYKn4tpUwB~kU^#@*_XI7K?A2PLCuF-?VDdQqkwa%EWD5xB>K0 zK()3;W>>W@uTnz?t1!qftRnWJZ6ua`=H?qy|LnTd&n%lYh*0o##S6=L zB|l)I5^HBrU}F%v?#=Y{J%^`*uLm9lQiMT`B+pNX0-OOs@^GG{rtqYsGH(#D351nX zmsf7|fLWQs!pN;WRwENN9fd=BOqI>qIV~(Ya*cd@jZOo0O1b>&n~@sBYg08m|5Oc+ z;h;8A86R_VF}BJ#8KVn_J_i^!Iaw(y#{bSYEle6I??6UKDLZB(B$xe0>kLrqU~9c7 z(PmvjK&GejA+_` zuKSy~*YWqIj6c8bGPCjg8XWGJ5Ba$9E`CxJ3!zBI85dxNT&+xcer6&CfMgcKPB;~PvTb6Bni01u5a zFlcK!t?QHCIfvP9kQEM&z%mL>Pc8|ZMt9;7&=+qDdMcFowl9Cw>W`L&={LHbNX74I;)pC+DkYBa}ZKr(d-7wY z2R{4{rlM=3u#=r2XI{24cdjC9nxb$nzuFiefnY*&Y-8invT_18#3PWD zF3&B-BC{q4n8F;fOI+%$Uf&wnIz5qsaVPqmwoY|~NCKXNi~|jj$W5#aI=r@{ zfH|k}{qt>*SxZSxApW(8$2|a4a4Is{5&QerY(0ACaLUy0jeEu1%w;U?Ucr$$-^rT^ zvun_G3k*IXy7FT==Ry3@)l{;NuJ#Ct{E_~Fy4aYKB&l%X?&3*3_11;FSAM^kbiv8m z%LF1429*ZEI5)9-!3S^Z5t=)YR$WoumA?K7^)V5FAit>5K$ES8xgcxQH}`NB0%Tqd zmljB|z1YgP_=gjnNoE;!8urp>!X@EBb7W?~N&O4p2qJF&kdJMpG;nOw51uQRFQYBz zr8!o0yGO}%b1ea0`Fne)8c6ch1=10Pbq3{?kovRf)1a5EpXkXd?lrGf0-)nc{V=NQ z!0m6;{9`3#Z{l#+Kb{gvxv3Z}S)n~%-iPcSet-5Ha%kv-u<8wRXp?#nLiLFWB44^R zP=SH*j#KB{jk);s&#h`by*@00SRDuU)Srkb#|-7?!!P6S1?Z4Dr01$ba6u22v4Lp% zO+m(JN~U;5@T&|6(Q!7(?~&4v-`oHg%#7b_JtS6mZb0iQz%(9z%yd!w9&I$Rjch;N zmj(-TvOqKl64ULLeWdN0X5BoHFoUck?5GmYdOht0sofRXjiz!?J6)UhL2qZHxlDD@ z)5@#~IwUXhCWQQ9jX^`|&Ta&HM6O#Y8N3H(0|)K<4dnV`HQmZ|rmPHJBH6y*7=3@R zqd()|_19~E5a>*fyr_%3i%|`fXX=P3U}ot^tGf*Z*k&cJ=obd(RwZI-pfNe z4x!B@uNM%}G&%uNYBQqprTwMrj+&FVGllF2gMT8IehF$4Ga3WmzUv<|g`1F#>3rGBXboA%x&qJ%WYtcX5KVQs8?^0?Q;9`Zuc*%qO#_gp+9xU!va2 zbPxPHWIS7J9KYPET$|K3cKg>K2zdx3(z=JEi(bc${oAMvq~wu4iT{l3jBsacqOnKM za-V6$w7(^EmD2JRSxs)mW0Ue0-3KptSTuqj3Y^fjnpiaJMd$QFgngvuv&>}-DR<39 zfU)(W3w3z*rink#MK_FjDlIrGEuw8|q&QZ(OJlu7_vT{q+xJD6Jw&uqg6qugk5Y$6eP2Tzi_$e)Wsn+~dx2-TMI3Ro_!SvPVspt*oNX{*$E>93ywTyK5 zeQrbEerv4gO)Ssfk^J0Vr*gXfsMPpxSAowek%zyXmho4A*^`-j0{g3fay7kbdS647 zcDLXzRz(85FK^miu%0|vh;#`O0^O!;CoK*%NW6=xuz1z-fWu#Wo!(_p8H<@N2)r zy0#g1q)FjfPZ%KT10r*r13sSw1l0dy%0UMwI<@O4JC?mjAPj)28Rc`XJ?6>?^{gV}YKjgzp0kuZ9 z{1ik26nb)|b(OOO0@qJP zA7(?Eu0~l+L0utNbh$kRs@}T;V_!~#o`Tk0g+a9GgvDB3WDRX6BDBe&>#5O=my_U*-y=@mxc^7y)(G82_#cBEG5(UiwwT4M6mk?Y1$J4Y6M7ji~>3+#JFuM zj@sWqSs&Xr<^OS9&yJdb+)NIjZU4KJpSycpx^sQRhZjwx7HK8l5=TZDI0v(Y(t5P` zYeX`-_Ufpmilt)Je7lnOsFD;}@(Hs?N-WH)u(ty-o32d$9$oU@Eky9%-eJ_qT#SiM zU0Xpn=fXWlef~jIj~osG5aNH+3}Z!$RBkh^1Y}TeRC=N%%PespGz$?P1J&I)p~7ED z`xN6$2yV^$F4oFIC>)C5-818SYRaBy#NbgT51k*d@8Mz;=lMCTu}YYtzdx~mIY+zH z*fO1CNn%X0P=)AgAV~YU*t3^Lu9li>W1cJ}L`Y&ARitG*tNa|KS0J^SlsjnqoRO82 zZ`UG<0E|qqx05TtCfsM|vBd?gJDCDaBT8}W!x&b*n$&Lp;Gi4Mxo zURSgYB&NUA-QpXeLE`2;oQk&Gb4FrY_&(XfyXA~)IsAPbZYEl9&j~wR`pS7wzI_br zmUU~jHOOsOD@(#k&h4T8)z5LnxVvLEbDix!cqvXe~IK| zapGOKkjk~n1r(~y8Uogg0BdbD1o4{<$e7QDGU6CuHL0mP>wn##s;Pes)Z6_ z6F%;^eN6)$;Y4RpGMQp?f6)SH&LV{2kOPS{Al3~B%X@VI#_O@rUFNQbMh`WDg8q>r z=gScUDJwglJ#l}2olbvQCPHyqsiM)K(=pK0fdSscCC8nyR(#<0u;>89`v;j-aF~9Y z{yV)yb>y)o4Bc(R?!OGev8TJknZNhM7Y`(t?bpUfGt5D2!9!=D*$sG3eh9vdGnXkR zs@qA}bpZc;ri%wTuI7ug- zTD)N`)+9jrGDOwQoJEw4GEeHuJkc-sk6ocs&|L{$HO=AkaPB8*7QfFXRxH=YWO|M& z+k*vONJnFr=k_#r_PfvA5J1isLr!z>^G0vv>TV9Y#_#?3W}(>V%UtAcK;qz1xq*6G zh1hBGkEYQd)oB>Z>&bz|a!p1TH>K;dLfa%02$wfR4yHEYG!i;U&q*HZS%d|9URzfI z+Xvy?<;@gUDY+%rDYky%BDN|lDaLS6tXq8LMR)@Tl7TZc`pOB8yi1f0~{uRPf`p8fI>L!{@tcrR%WoUK}W^4C9%exc;UXGobcy?bR8> zW11KfKIl>Z9sjo{Kes#O(2wAL$q+1kVe@x4S1~Vs=;kf6u?kcAMlIvXa?)kiH!sHU z#XrBGG)25wYMD-1@0+2K^-!8PQjW%+_NTf z*bDzv>$9_OBc{F>QHD8PJ-KxK8>g(or!mRg4ycoHTohd30nD*WjOg>UD!9Rbya4LZ#hS8KZqmsa$SYwPp)LEp5CD?eG?Rk-ivy@ zi!&v)>=7D*;HCT!U9||uxq)XQzSZ0NcAB{y4hQa!QXdTkp_iP zf!ZM_SKm$Am38D9!!v`Ce_$$?_=BFxdVgH$InKrR<}{vuLZ4W9pWCt6r-9M%DqEv$ z#X`7a8nesUAU)K-g-f6#3++L?xl#rpAMSr50p31*m)|kQutIrygEPFsz!(%VvFQk2 zbVU07Nk79-%wvfwC>@bV3ilp76<(uI$cB5Z|V&Q_;;Fv+q7pC&so6%7Lw2~wtLNOEyDfv7ZITM zBJfGR-*UvizDuU{Yd?bg1w~UCdff&M#Ung|$&Eyk?c*}pMxW;`ig?}>h3%vS0JV5k zlQf^$6e}7RuGMKcv&Z(N6?{WEQ~yA(q0Fs3D_-lYkb^$)^N>~efGf=%$LZ5Y&ma%;}r&>!< zQeo{FQ4z6tBH@kr z$$V%2t!Fbr&A2$`rpXD!;F!b8lpB6?oGWRzO~o3|TB!Mg!cd^RHXObwT0GOs%AI36 zB)Ig58Gy$NSICv=EL&8Zlb`=#Sf7ieJp`B@yZjbg(Sp|b5aGR$jwG@`3UWVuM+*tM zB}^;|#KDo|d>SCPyk_OwG3@96spggMSk`&w#+^)&p;+lV#F_WC(Ue2q-j>E?`jm>g zj9%u`LfT3A>o^#m1!T3KROhpWRdyIg^*M*c-l)$201917W7v((6RuQy7 z%kv^@AO{I#fX(+(3OE?ZHzaoHN{AoV;qhw@O#QUq;?2$yYOF6l^p7ocr@X@;*?>@I zfDP56d4JItDa8<>GZOF1ZohOp78#Ja5en_Nc`{FTPYy#iu9giPBbCh@RpFN;avV6* z(;xBkX-dijs!{t$8oaECx;zVjXAz)@!Gw&nv|i-HUqiGyc)KdSKk{rHi??* zc4i&+Xi(>Wt$PKk9)njt9P}V*QsPb}-rQ%;zq!rXa7R*TtY4TQea}AM-R!O)xq2%V z=JuWcU7zpWbhZDi4OrX0bal;|>)f(`2JeXC&bEsfL>wL8&v0!!R`lBiWoHQ8L9~|} zgGZYdTWGduTga9=&TOscTMiSi$uge+Pq*_r@k}2C z@Fl_0(;5ey9M8O!pq|AP>qToPv5`0h{bkHW;lZj|Mm!=XS(QJwB)B0mSMH{c?Nn(? z=S`FE94f?UoZkq*%i>;??Ga9vPrkM&52=Ab)9 zS}0~V-QiHEn5F&ML$@IalC>?wEECS^d@C&^;YDP@vOA}i>Efa4b2I~Bun|ary$=m z#hV1}cm@dxro^ne49$!WRw-jY=Ii{0H4SUECd#{I1Y6ouxbezsxO^(3POWk~n&}rf zrsF;=gq+u!*LgF~^@#OF?Q#5HR{0_g+BUc@NEa%@0ddwA-cPYQPCv(q#VrB2BLv-OnIvxRS{p(h5aH40vjp_4sC z1`@2-KFmd`uUtvOf_9QbCr+%W&zBuiPsKJCqOgOrn+O-9gvVIDu7&e>-o?MGqE+~f zOO998pWu_7Odn;R3*ZRh+D{|Ywl-x)8Z`w z1amQB?LMe;a3-j4+Evhcw=q6i_5t%{ZVJ9#y#K+v0Dv*K5gPZ09E|^w*pu+aH(9$l z@ZH8KNb@YD-2H&Z|2t6b-Rx{l=Y>2O{z^mJxcWpuB^fI5iTt-^ad`q9aJ*>{ov-4m z^L)OIcJJzj9 zp-&1g8m!O$Ws{55(cE#J1GttsaY?p6mMNyuu9@4XJ{U!+);6bJ8jD$_U&?>;OZFyj z=mP_?|Gt@g7yh{$tH)bv=cj(8u)gJ=Hd37x3`GI|IXtKVzj`a@Rq(wKua};*kKuX(qG|S4ggYSS!%KzVdTUn; zl7$*EU7m{;we3N*jss!|Y<+cT26y~%mt=~_l(x<&ZBaEF_jCu1ejdZC?Q4&dO#f_d zN0bfzLn(ND>P9*=`sPsBX}+P+xtC-Nqi)|Ur20;X{Jc`}VHy8B;{GA_;KluNnNyhn z6XMNO^__QQ-3-H`X|!BWY{t7{L&cWjq47JJEx_b+zYEoRobg)`>A{e z>=AV159K#}$E6X$`7#(F^QYEiUy5BMVodBa(#CEf6%UeGUA6{^$=cPV1jd%c{l`X{ zU^K*Nq0zM-n|i#-_p4qZRKl)!@n3Cyq7^a?wp9US-w4CjrCJPI{2S0!(wP)f*foSG_H5c_rv}JQmq;6>xTUYXw1W-hF1jBDmf8 z4T3ndV{f4^xJ{Tulpc5kDCo22J~LP0Ra>(3K^d`@7wlSb*6vAA^Ke&s2M*H#3Hiql z;Rj1Ts;T*Yt`s23;fceFuN5ki#EX$u1ejO?p0&#Ma|ixM0o%YoETgGRle%%$cPWu- zUO+c9B2zdzKGM)ew5hKQQ<}Vtcj4a*N6f*>myf5Up^_$U-acGf5B=iQH>((sGyhj) z?Prxux9jHXW4DCOrDK-dUXw8K%Ha=k>vLsj<#1`lx&?MFGHk5v?`*|d0}QPS|Kbwws&t8#5S9wAXCX}6z`L3IksOlKu;7|9*i*3i+HxZ14=0S2VQ`$S~atIW%%- z-m&Pj66bQre|D9cGtddkJ^47SSO zS`q}c(vN6C6d0rJ&~h$%GJH0a!tf z^WSQ@THVyBc7B(mvU|)$C&25foEd@B*+N@hOIpK?CbY_~GP`e^vS<;;;2K3dqxxxP zz)aO@$t23Gwz2LP?}(pN3$2&ocdY%JqVBEb=L?f2J+f1` z!KYF~ViQhgPGU^PLPFey0{r z;08B%)sbNJZBn89-b=xW$;bWaDEF^!ux9W%MVMb z>$dvsInK&fdm8y1&26bGIq2uV=F~xsB8)0IPcU**yZ*%_qZ<~wy$Xg!e4)sebk-Om z=MvicMa(6l7vpUtR;$n}lBO)4BFmpr9k1rg#0}K$Bf+Z`?RvBEpCY4z>c5QkYW^rW zybKJOgV~Lo_s#jk1V7ZjFtTs>^vo!$XnuA&cwuJ*$3wt9{T%EKT=!CBj9oj%`@V0a zcz-L}l6$f`Jrn=e7LnaF+d{L?b-wLT0S^Dn0+QO;_T=i1EW)uG`=F4hX5n4#=2fl;Z@#MzrXa(ce7Pv%yYM$j7=p<|iNC6PNZ@jB5|K5k04537p%Mp8OIT3ZJtdRXT{`=7W1`hO!u)b|0henS-f zGBo?O89-0wEe+Gl%NUQ z{?25AboO-~6zxZ3@w zv<-3c6<~k>#4k!voir3_OkkCs#dOmC32r^0&sNOi3{*C)5Bo#ESeG#1U&5mQvXx__ z_Iqx`>g-r};639#ss=~V-xy?uhLrNoL+3SkNgY!AGvQftTN0)Sw?J2tIFXsZif(K$ z$!m6q-$`Ih`xTdl=~eyJ2|K$A28+1E2MuP?I1O|AemD_OH`SK4Kyo7E^8D+oY&JRC zp3 zD94ZOH6C{OLLV05)h+ID;;s(*)cr*MeV786;y9~pweP>AnT-oh#Rb&lwfEVP&-zg* zQ@SW?AT^VrZ2=|E@vT0EI@J`*-6!0QsM^RK*A&99*tl~#az z(mW=vy8hXrN~Yh!R&$31pM%`3W2e)J2eaqjvoE}j5z%8@{@^g<5!bZ$G3KLFeTIH3 zypfWoon-rE@{cxOmWqZl*`gpZjElwKi9Y?vL3^%w-3U}0YPVB^E_H3Ualg(dR7aA!U)u%tEDpypW z^Ek1KPsI@d!QwR#vS656w-8GWBvBby@*=(I<(W*xoMA`UJ>6a}GUBlN-wXKK`to_x z_FU*eYWDU@2lie0!uWCx`~hs zju!(-wC`b0IquoFm)yC7_;ml4D8n{LKMP-ADnOvll z--rER!E7yg<(e>7pjxZ!s*+Wr_|to!A>d9LxpzKf|E|*Ez}YAoHp5{GG>cXrb#m*i zC9IYe>s#a`aQVP+0;O(a90TP!TCM=jWc=B<8xK0w9)zLm^P%=j3vOqqy~<4l?f`Wl z^~VSFS7MxY!{3vI2slT@)n=XFHc;4l7(E*3Htdn|9l*`Yfusp17`z1hxEk;BpqzhlWiE;~<>Eizx8 zgB+01K{$14C4o!onBA!{Qkr98-#9j|ZR4cPx%114xy{nfeB_0)nu1iz(t=XUp~59k zdrYulP_XT#yCqcH^t1d>ZUMojA|v0*u*M_B(D(wCwLDJq$~(hSEp^a!ie`)lZW&<5 z^ICsIrMfm@U8mk-lWzpY&p*uNk4^oUZLU+KDi)|A(a{PIp4F%KA~Xzy(vjtSe!_;o z7(ukm)%17ni`E0k;aO#pGKeMIl(BqLbOu42?;(RCXmtqeNY?J9?35E3cWm7D`!h!ZZGlj)1LMItn zGVUz7xUqQEv^dVmV}lrHf>E-EX7-balI|~i*w4L5_fr_RN;Se2yCOD(BJP|9^% zkr!nOJ?}%(7tCd(=9_3I`iy<=KS8%!h{ouy?IE|Qk@sN}p$fUlPnI&=+n_s@f{FLb z|4RfTzmBaEN1TdEK)S!-RUt;4JWe0P?5y2U&8{l}Dqz<)6;14C;xyN^4jq$txqNgz zID^aPc1^2Wg6=;%NWgePA%g<}1ZHN7dbDF|UShA!upCVZd7RHnWTh6NanMc(H(CmL z$`=0MlHAnFYRmnNn+UhyN?5~RVJ{@25Y3Ej)hI;H;TDesuw37r zUp~U!gSTZ$30&t{DyiZ=W98A5!}(@y;j{y<6}aYJ>bPnyG|#OWS?oC$OXDK8fLYoA z+EV-97LHX`r}4jeBXWM7#xKeqpr&wqsY5(>=zpLo3CF{P!^e{h+D5a+DP}{l4`M~v zmSQUUrNioAbxRji>`<6`^B**31>MgMYJdm_iQW}O@#v8~2#Hydzt>F9l!q?1FEp`VZa60l|Xq$*-}P_4fKJIurV8!bPI{mFXvp9Omy{yMBTEKe(E zVR^iz^kJWZCSm+ogez>u^N?;T${$4Yj%}_#Nd8O`i&4jZXJ}yHkmJ>W6l1PYa}eDn z)Fnzxho%b3Pfe2Jw#A%H9OhrL1w#DJa@}ft$zY#%-3IGnXZ#K}MpSJ-(>}NV=B(Lc zcN7%B>4t`FtCj1FImRGo=vTQ!^7UJ&4D!0oqH+Qj#_zTRUOxOHsO@jZ?-@g*NZAyf zoU&16O*)l+!$SAdJ~2HrQ_cY1{T}Q+q#sLNU}qDkrLN2MK1sI$7AZQGUgKT-hKCRk zo7(zFS~ROY<}?@M3Sfvsh-Q}SJhkaZLKxlOx;03jr9q}|hTw@&E3w{>fR8geIT`@I z?6*uwB*i)Ji)R?(tSnn-$R)#@IfE4Y@zI-ZugKh2JNu7yr-Y$3e&{g4>AWIu0Y-dR zBBRv4^0A%YTsWTGXY?t%XaMr?=4G6w;ZYVUAr=j`lcm&Xg}1d>o`;%+w$8CDF_t(z-!}6 z68g9v2~}(asYS~*YMqgMt3678k0a5`gDP!r9v7%0Eb~V-n*3Yh8}i*FrY5G5!Y3LE zl}DjneGXL_5vO^xiO+5Ag`?&u9Nz6Ri;JU|kEfn!1>Mztp7UnY zYWegJ;z~CEv=tSHUtNN@K!p?YTjpj>tW6^tD7i!0*&Jr5vsa}3PB?Ej??_hRSSzX2 z0TvOLdbr7qjcpJYhOy%~Oi$Hnf}xj`&uK z2hZuz5Dq`qpvEi!Cwh!G$ws0jc46%lFtb!kJTpWjYe6GZ}B|h5ww*O8_rNM>ew~ z62=M>GQLHT#}A#_l`4?GUy@ya=C)Zxez$~HCxi5b1a6yCAG>yg`^3E(7sJp9Hr`pX z$=_>|U$|5$RGO9Y?s?3pHPjyM7RZZdyz{Bjux2BibYfH&3Z)3QT7JDbzimkadRh-i z?BJe*BaCc@h_fX%>=$WKyZG^7@w0lDp6A*^<_oQ){bu!|9f#be*Vi3ZXU%MU0ml^X zo9c{E-DL*G4XYm0LI^QXOVy!xqhJR&)q0vVlQ8=a1B3gJ!PedyR1oo-QY9HkQ9i*h z!Ng-b>?{?I+7{mYzn-6+3{SgnR80p;0OeB88ywQ+{>_8R0#c>5Gd<=6Pbg?SxXNX- zjSQ50YjC%NFr&z5Ro2PO>w@-^ME|YCjoIY2-B-2T==hm$I&p z@1I-eU}?M!@h&MOBpBllZEK9?U2zF*X8Rb{T$<4}!aEYH!gh@~DpRm`L%+@}l*BT~ z63V?nbtaQU-oYs^Ul{(dKLj>icixO6I26t-X;$N%yJd$lAYgvPuS;6U{YgjurTq)A z=s7k$$av`8zBg@Zj2fmGgPraCxAGkQKPP%h%^%Y1oxSt=iCbbv)l}z-tJ{XKYaR>l zqVxZG{vq}5VP!vltXLjkF^R~k;7@`gkvec{@>+dw(R)zT>mtR(A`Cl;C(IJDueGI5 zg}iRJw%jGFaEsdNMG+;PN`_+M-olHU=j6+VAxG`vq3Bev&ed*(B0+G5UGord9|`$l z0M&INxTFg@-tC-LGO=uDmZ=Q)*hp{=w{l_T7}VUK7-Q}eh5o{ z>G|teSVOQ<`TB>W=Tq0Jf1kXT9y<7Do2YdN_7hxRRO~IqtzEkQCV(%AK8!xdo*`Y) zest@aUVJ0=Q3H!v538};kG^xVe-{6fzW>{DU7~Y7KB9gc+vt^j?1lLIN7!Tk2ZwJY zmPJ|J4rO9MF<`-t!R6ei?B%KGL%n3B#4W~244lC!76%9FPtqX=7Imvf_wlPFm#h#1 zf`gCCUvmD6<6Lo$UjGsw(TR|_@KgLuHO%|Bq>exbPtEIYH8Kd-dh#QUQ^o5tpmRQ) z2jL+E+V_Zu=7j&}e8u6o;2CkI;idNa?c)l9D041CD3;aXTTe07Kdsc=jH5r64!c#? zXd-V6Z5TfU|FUNZzbNZGLf6%5-YtO6Gi*$Lf_MVE-5-`jPq*#e{=Ja4Tqo!Kfe^=6 z^DTypFH~%Zv77C`bCPmsZW@{19@t+MwX5ce-}fg?rLSl)K+P*ws+CeV}QDwPyghP z%q3SolU4Y`BW{~l)P8{Uu_hA~*L{WGu@1{SxR`jK$a?H(pJ=4zt9##VfjM-;|(z0<-oIn$vKsT=|CmaIdB(cwVWDpp0!jEp%81m2ahfAr&2-;*dSLSC4e@YOv?L!6;RV+YOHl~NZ(XIv?pcTW;Z144Sa+3K`sQ1$Swq3UfQ}xhQ-a0S)`AHoiroq*X zVg^_r)!5Bq6Bve!_N^)Vzns?rr>bLiO371+6dJ6G30rxSve?7!ce0n92OKseXRHVRW1<*Sv9wdv!f! z8Z+qT+snGQo@qPo75x2~eZ?xzn(2q;$)`U!{NxqD@kA#un&B@NjiZ;yH#!T=roqf- zyK)>!^g)rNNpatk^~;CHr>_Igp1Udx1W7P5j?N<_m)`|{RuHN&9@R~_a_X{3zPz-uusBW zo-$~k>+)|&WF?H7%CX|NrDb{Kz9UYPf#nCvIB|CvqtT32{7*DTs$802N~QrImp*Gl z5sGIp4xPJ@HL*&Cn=_9HE4b{tKU&~)Cg0jQ+(3P_gC{c9yv1bQ?g)|%C8@uwjzZn#0y6)_L0=mrhyiU%|uQ`V17a$W7{}%-O zIE%U(tI-eAS1Sf82P}KzR2MO~Q(xU(N!EYR*fuPT-CY9=UnGp5 zsndzAs>Z)4(X*EH2|Lbh0fp$PCw-uf zZL`JD-J_8gZmvC+!>m1YbHUXSjd?Ovq(J;-7e6~n!|2zQU8sqiX-t8! z_wGPw8yvtfAZ(DnFBIajkYQQ0EiN~DyLLKO>wd8?yEQ*>$AW7WZj~+)O#o$>)E28G>OUvT!oW?VOn8bL9sD#keumEN;vaqT>TPY4X3|I8Gj-!+SGe_@cn zgS!0CLWd};sSCzd&krjPJTPah*WgP z6k!n^=#$Uipq+_8=|b-9B58m1L<+uAY11daDC@4$j=O|gb~e&39iTL6f9#B%6(--h z%EblPF-~)ioR8`lW;AbV=eO|_z`Hc+48E6>U*34Dv1`udy-TMEZ?4wM7?zYjFiw(- zPonfK`zSBRWmC7uUu!R62j?fSX0N4mB3Njp0QZ4Hvvw7s=gke!_dgDBEBGj0RtPys z;@@mIwai#sx{6^OSVV<3VqlJ8__}a$-=X$F$aq}Q=@T`ayH(BsNPuwrTvuU1!0JAs1hT*|00~D|et3 zzaf~UfC2jG2x=0hf36L>A3V5bMI~xNF2lYs0fs@16N0x=s7h9ha z;ra|ngBLqJ9ApEZv{iKU%TB$;X_>JcZzH`s;5c)HiXW#5%4dmi695)&Rt3eqv!~Ku z)|#c-$)(rZ_r0wp*(>Z?By$V(O#zOWPrX8oLB6$bUY;@;TAMr;;HcI#ns zB<)g*<*yz#><&qDLD4{KbZhFF9#U&_kG6&E{XYtbW`;W4JR&^=KO^id!%s8aMb!z^ zj8seo{JXwB3o&XHVB;GzK#msjiHO)!%3K?Zd&83#C(b2Cr?%F^&YD66n|@w@p-@}p z(AAa+{rzw&sP#g4ExDA`(EohlK$flHtxHH)*3>&njhjJVvTQ-x za99$xWA@9;zJVbeG8}5(!7|ngp?@&(E1x0Us(m@*J`4Z*h*)a6>e=E$POfzhlRNsyQHappiIXP@E|dKJ-Z@KRYG8BCV<1LMBe!$` zDXz+iQ|@yHyESl0C#txn?43YIQ7@xE9tY}|z_gD{O8J`jz_j#itvar}i3LD@8z#qy zk;6rSU1==cpeY8@6l=#B1Ji*#!&_p5AiylZ(Gi5zd{xz^ELL7?ZXthLc(~dHzsC)D z@#%Y`gOK-e%$)PZ#-&1r|4n-2tjmgNo<@TL3#$sT;n{*e+jRD;Ky31i4j&i8OQ zUJe~NY5IdbrJJ;U5)8+xEfzcr@6*#b`I^bn<*YrnOU8tHTPEVM%aGfv+Ev2ES4oY2 z-??Ko6CQWL=XAn2ys5t~3Y;qN@Km)|ED@-YVJc_Iw$o>eLn*jaU~ntbZ<=vH@2~d{YCKbh&*n zyzRbniO$y%@St8If?q5}{4Ro~gO2@Vuf8T9>o!C`v-zYubgi~tFfvv|l%7>9;OMlU zcK}K86W95`m_{fz5I0kzjmpi-ow2WeI- z8?%LBsPWCyR~scD#HP;FvVZ{L_&PzCM5BpqXVO|2HRnS?)s}&$DlQ=<8gWP_k*(f1Bs1IqPZpb9SkrDYbSFo!#8CW# zF|Q}7iYRn0$2RtY8L=UbSq!LKt~!sMkqXKd&R(ffkyFaf5_v*+238Fds@Eu!8qL(j{m*Ip{bigMAFz$L zqQ=$mH5W@q)*}ckQZn9Ew>r?YK(ofDpxD_r2fqtDmqhpHquy5lMOQ#P*X?&o1^6;} ziWaFH>m`41+jK2L`C?zMrY8g?ktZ4VfB_`SWd;n!@gt)Ho?d$m%DarQV#gfbu}s6d zW51}K_VX1wg5(TmtcsCE_FEcDiDXmR z)8G1HToOSxGhje5(2L}G`FpH$aGo`^&O8s5RF<(GYg+7&F36N>w_-%Q8bX1Je*Tp^ ztIfnV5cquryOu)O@YQ}#lj=#qVjS8U&4B3@Iw;WnWhKq^vz!%^=nHg-af&jfO6`ct z^1ctA&sRrF362-zg4-IcW-Y9q&4F!W1q552T<3)T$E7?eC3)t6R?1)$TEcwAx|W3^ zpTTYPhTP5CzAxx=O`3+7`v|T6_D-xP$0_R-^F83q@fN+` z7uW2YBW1I*d`Z0I=AS_C&xvoVv1$Yy2UTnOW|SzU^z!}cT|DwG&)rdUB<+7lR4}2^ zy6MRo5E02Pl>UjOW7S}Ps$WviW<)7!qy{k75VuwogI~M>1>TWR`(9Zb`A-=@yx{qz zc0?`SV#EX+IuCCZ{W%qr)2#jkM9eAsbMkE)0mIEDq=uGoIY$$mQvmxw?xg`6auhw~ z0x7&aYvAUozY^cnCwDbt>w;3=#oCd(rDgH^7I>q}k5Y|9es@bsUaOGcEwl6WBoV)u z{{ljY=YcfC)vt9?+(~@tNUM zJx2DI#K+WW{@){ZJ7lYReKs|i=K@t&JV&kK;P4n*?|D)w#Y~R>ho-NLimH9TR+J72 z>5^7*=mw=rP&$VO>23j$?vgHP5r%FUYG{Uzp^+X*C8giP^Z&hTvG~BJ!#Vd=``UZo zZd2})G?qD6A{@2Z-}==qO?&VEk;MgG8UKxXa0G}tL^=kI1#BOJ!8t;5;ox#AQo@Uh zgfQIL%Nbd~ZsfuJO z$R<)qujjZ^$z{&<5Bv3@pE*I$nFh zY8PM2H`6|gJe?~T*D?2HRN~(O4q|#IxB{e8z}B4LNU(Ec(vrC2F+U>hA$B8TnY1Oemifqc01&K1cvzSf( zWt~GgDE=7IbLN;ew6YJHY<}wUpk2n&xSr%iq zLgke(wLDJ_=sYRvq{rD__W6R!%aWu~x&?r-`(JB9HxtjI@y3lQ-Nn)&qNqeB4m-K7 zNb0Q=1@B>?+&@xu=Og93Uc384q0P0B5ss{hw(;SU2)+WT+!UmfejHsIR6>s>%B50c zF5g!>wH(e~PQfrzyIl>SnCV_DzSJi@9z%_#-gIMkp#!6T)mKFkyi5Ce9?)A`2Dk{L z=%Qwjw>fG*C2PW3CwU>R-NaR>B{KE!ZTSr4P18m};4`qzPuLLG9b0SQ1<3hct!qZB z#=OkUolk=`>P$tGmB}x*jwo1L`@jDCKR}1B9+Hm;Ek02!N=n}GA(ZYA`bqZ< z?i*sWSO-lbfOYfueP{^4IcicY`#h&ggZ{hRhyI*#ZtX-jVv(hb7K09o%q zrjSo?C{#k+*4K!SKX%2U>T5+wdpomaAC0zf(1tpv?Z4- zbSUj`a2q?%$}u?D5kYZwgE0S5Oq0J8d)iZh0*S3e)oYC9|6ho4_%-0*wL#bcre5y6 zdr^zfX*}t$3)D)lP`akUOE26u%PuQRC%@2=*!Kk_MZ^MEbMJ}lQ2CM|4)$fX0DdaCIVSk^|_W!A(?O9Hdgu(L?;}x|87*bLXZRYkfwDQjv zt)jsL_U39R1{rgk*>-vSr&{@|6EIR%DXBq@C!rY$S!9r^oZ-(dE6@oH-E7n|@6wOI z_;5(T(($8o{17(QrCniT<@i}N^r;iw0?KruXJ=xuTX`KZ*e@O!@FaDkd2#7mIkK>! zutvciaD0Uw+y2xCk(lGf{Ld6QfOsf7AJGSW`OWe%Cb=4^8d*5gcFyCCBN)cV{2|yR z#zcoj-rh}+7jPa;nw*zYm75jgv-|l=&&~n0%SAh;c;;EfhOG@TrD;0EUW}k|l{WCvR98yy!>GT;!Pjf?nB!OoAIP+4z`=D<@N} zSkotJYX~jwb^QibGQO)afQfH0_a!bR6&RrGrf-m837&aqhDN7tC=^+93$maiaptdz z>S_AFl;Pt;QE;fFk>L{V0awXFzgMG(+UzEFDq(Nk#L@2Pd*6Ge+F3W+J)S?DQ_{!_ zIZ~_TIlDZE`f&Z-jvsRJ-|=>Dvs`-Ho^jQGewh|P)@487w$Xn_4~3;Ge-kZ#02q*{amTHub`o}NbR)RG#ICH+Wg1N#a?5+t z_uHb}M837JoY5}HEJT>I96BU|?Wuy7&@Z?3vOm`!rIhxD3Orv&ZVg?UaQh=oCg%Ra zH%l;o35o{=GyzCf6|_2;bdS;Z|2?@|;YV)Ixu7`+-V$d=yZkvK4xI_-6W8U&7e?h1L($x<jWE@o#f(QOO>OOw9x!sGnpJwsvdhpT&^?U>yZi*H8YvNzd)f5aJ zSRt9(FEQ(Q3mb-A`9m{+^W3uj1LPHf(S&X{2{2Kc*5+7P;Ucwf4#1&9+GTbZ%W>t# z-jdfwXRbRkWFd|Kjc{Xi6sP^8BlOyH3=PSG7z21Wl z(R0(oo-M3WgAjldnUF;RsU~GTG&AK)HD?(!r+{T^Udv_5rk}csvMg1|Sa;3sr)V%l zblhrC1^ioco^QZ5y78pDpYZH;-1)a-ks!SmEKo zZu`uA(`CO=o6eEfQk!b)#WjyiJoH_fw)$`+q0eP8{qQ|{@BI5UyQ?6 z6N|`zNj~XeDL$h7)(Q$+SQcU?6j5u0^4SDTacOib`DZ0BYVyhhQK=2cAO_!$eg%oL zbgwC-=9sfzw^tk_SasV=;Snm1^#)mxr5~X(S8YsPX1QD|=XF2!dd^NSg)8NLxbXM* z9lw<+(xs%KThqsBMnt@>5`b01z%~iqBLsh|I0qlQBw{NgjmK3q4s7{T{Sop4@zOUf z=eief$kR8S=%$?8`Qc{r?&^WmB``F?jf1|@73Vt}KF?fTU zh&7GGX!B_K5o%djpSW@Mn#c&tDGIAQuc>o60Gax7g`J+SiEP>@Z|8yCny#R26?@3 zQx@(t#V129!p=Af(d@=oydoWK=qz7FT^f9n$#)u^`@sxNE7-Adp<#+P9~)~wLqK+1 zyq1rl;3GPz>`zjVcCTQh!DrAIJ0qC%PA%5n&ccB0T!+8Es4~iD7(m(64DDP*s)4YXqnjo2f}rXkinVU%UEti&t?Ji$&sQR9>3D$-%e3 z@Bn71lShtYLg&+{(1k=xXx``^K98am%2m4R)+|d?@dhH_>hEcKz`dg3zrBZU-WQHN zikDVrw9Ap}bGT%#DW;l?!aI#0_2v{cHQgJmTSlBh7jWFzYQ<}}TYh}-RL z2wSZ&XT_!-L%trD6&hq4B#!_)!8a_(hKEA7CD7WX!a!g~sLUt5=UQ--*P05bnh zp(pO0Pb~b3Ra36r1^V(4AI5J#jTeEq;wpk4S8EvX& zuR+l?Zfp~UnhEawhMmu`0rablWHMC*$9s-s=ucL0iSq@x(Q4>*8$3K2)ds+}c|QZv z93TeT&ylqs7%FWOcWmosTlnpbwlV64T|);?SP8ay61RxSPB^6J{X~IHKWO6(>`NyY zFgID)>op0^omJ=JNZWKA`0xww3|;$`do_g-`ko71D>}_+$z}WRO`_y2g9);I1~T0a z&PXtL0)+Z{57gbzBU) zmzRwCd*?y6a`zNx^&y~6b$jMMmJG8(+6zYEu0-|Jb7Qay%;E{5pzVQ8-{Bgf$?Fw+%QgpV5j>lDBhbiM3}v2xuFfqDE1tA83DQxe8o7C5zXi zTG+;c)$ColjfV9;?rwdf+%BzNda%r<7@}+-2d?4DLbp`~$Ym0|h#_y&N}8oOqO==T z;rVrgr9`fREMB__iT-*Ehnh2Wkv0o-8Aw#syB8vP|6XLz*Wo$5;FO2A5k_hoF%RpZ z*#2cN9K*Mj_l&M{V(VPG&6J9XY@QbxU#T_>fqn-`UI4zl>B#%w1iB{ zlZ?z8FRo5nL(Ta`LJacO080azWgT-)*(v2DfaT|WUh~kkY}ffDDMwwlTr6JUE-O1v zRx~-$SC`E)c3Dn@iJ&`oc0aGQI8$}xuke-A+|0>NLIF^ioVN5(_4fUtyqy}rmO&n% zTAoyz!JA&A3U@Gv4&?BTjIE!jai+Z!$q^Wl->!4DS4~RW6X3->%aQ&UueJe~&g&h*Is|aZCF;`SIIQ(sv^^9Q#RHhuOI3&hv8bo2hczxeK;P^+9R^Oszr4Q zEcWXvN5%Sj*q7Y<^%kXAm$zOf%*H7CFGnv#kAL4EfC#z#+7!Aq;o#(l415|vlkvC1 zw`r%IEZLsmPgdqf1CA6~*c)o-GBT+R&HA%}^K};#c?)K!Ep2FO(FxJs`*nb`Q~R^M zaabT%G)rD2M~1U}ihWMBG;w$tXBHeWcjenoRJxeAn@Js#&?)fWV}Uyh+*Rp~HEi}I zeVgr*GlaKJT&3AoZ~5Sh!-;O`0qdO;7qJh)o2!S-zaa8z)if|j*2FHrtY5K2I{kcm z+tr_h`}Fa-Ou>>ODs2xY;%J@iL=KQ87w>VoY{@el3*%b}kSFm3jYU~NS~jIGCtUg?fl5|%07kfgr;T7=*!z=e;@-B z9UMr9)vs)^`=g9+iYcA}r4|SFEv}`p#RFI5Guz~`ad_gK1M=dahiM#&AvudxFV0eF zS7jGxU6B6Lh~#~vG^E&dTxBHIOi+LrdYhakTIc#LL&m-&p=jpZ7wV?Hh}v@17-WMD zkRb^G=(#=XWiO&dkA0+X(*M*tJzhMLPp8u0Qo+~!21L-h9DT9Qfi za#MW$#|U=FeU#MkYI-WvW?yFFg(P@Ac|4xX`kTbI;w#?>cMvI-;*{b7uWSb3Ll50{ z@%Oat)lGPS!O;-2jx%`z*Vxw-zj!1=i?ElUI zi%4|i4PLLo2sgp&fj@V&U4KY*ULCDOd>B#9{(IQbpb?43jT77;np2tI<2!}4pX8Tr^n04*4keWx6zxoC7_*`}r4p3gMN2fH~=Yx!t??0wPwzhjYSQqw{B zCwPyLfDvPIQdG@{{n23o4*mk|sLYDxylDz8mZw7{U%p|~R+d*3hzW$WjD-K)yASML zNNsb@_d#F$YA{LgLpI)+abCxCE)&O3`_)F{BvX-`SUDU%ufMS5@mg8%f5{*xfpKF> z^VLD>wYE<7>xz}--73(zbCxwV=f9?3GQT*pZ}vLre9q9-k;Bh}K&f&a8fW z{h#X4)Hf_i**MCUqU^QHLF?9mU#-99^~(}$I|jx^R$?z~BKDK`wUC#>#BC6`R;pHJ zG-~G5V|@oXaY!El&514Gp)aPsd(AdU%r38U%6j%(o7^R?e#T_pIJ~l7B->#=#4TJR z?vE253T#{%x*DtEh@xTEAwr%$Rsa}P2YHKx4%zRVa}BtT{TP>gi{ZoanE5$*SW>_O z;?eFRcH?AOITU4p2T+M7RfPM~NQt(N&0pMx_i?m=7l6E_+b@PHKH{GUv|prGzprJ< zSd&Q9QL`{^Vt8ov|9>5O7E}hj-$tWD{W?p%MlUM)U1IH)b7T9T{63-5V%@ z{8Fe>ee%-*4X7x9heU!`vJ`6i_!xbbim3p{?54fCXN)qc2#!i){wB-KpL#nM&ZACB zSp0#^?&>!3s%Oo#wV2TKl9gdNlP(@yUXkpxFubgZ+|l1bsQnIm@>owmRiqHfwmXr` z@)G$I6-u)uy;;ejBY>tF9tZDM$;8tjr4iUW!RJzI$1~C5fk!M?6IA zG8RvtmxsSLs#Ir&mvNA7qs>lYA|JOMRGh(~P)DQAI3As=is7RHcr3%(5_69 z2kSvgg~DGP!XY8`y6F=`akuRL`51-TT#npWy0ueQk-&}@)}3cAhM0~5JmuoO+&UQ< zLNaW+DckS7sISEgCK;q0{8FnR@W*cy=Hn#Cm6z!bAv6WYMU+#~t%(>CW(3S?1S2|J zX*nNeP-AG*JY_mi8tv#a*|j%#DBu7wFgTJ{NJV$ z5RwwBs@l>~vlcJOrle`SiR2sKIT^H?9^9>~Wn&qzOw3R=wPI%H2b;Q9Rq8nZF0*PU z`-eaF-0OR1G0n3hS6~{4H}o*lpV(LFRSNK$*v(7-SH%Q%;DcOcYc~{WrW17(up8Tn zCH3&SBU>sLhpzQsM#w80{N@uJxGi}L_bcu=LuR{03K7h7WOa)_M2IW)fRk8i(BrYA z2}_Iu92OQG8?I~56Eq?%x5hMi7!-#B#K9px0!%34Oz6Eqnq0L50bft!CBGo_k6^`f zFACaxDADftFMKU8vFgCJj<8%}j4SO7I+K+krN}XNqgI~Bu@eyaW&{|cwxX1~%o>E@ zttsKuSHdRl_0Q1vCy16~fW_FKsbGVNi&6A1)2-mTl%19tA;PjZ(~Ga;7)GPT<`>ov z*gK9782(SrtojmG4bsLQbEmu9&>H`qkNWrifw}QHDIKhVs!kG zbwxb|U{wGI`FQl~AKRoSF#jA@_0Ia+0kkHx;11Ui3LWzz8;*hwUmWko&9ftjkROs) zq2o;2q{Lv65`f>CtqV$w^2JA0o$C69^^Dmk5X~+_IRKmPD^R9l3wpANOvirr$!MoH zB&olfD}HshxTC;qtcxeb+K_=MY@yDB7UOC5Pi;+ZsU!Y7qK-iPJwHYZ;E7t9ilxCi z8m2|&0^#E|iucxuV6OtzF4O9Ub^PKvOaJ!q|1u17bR41Rw0@);I$~qEoAs=r^4(w^ z$~v@(p~H`S!%v4H-z|f0c600Ky^znZJkZG*QP;eWiKnjq%gv;N_Sc=@sBIq_pc8i@ z2Yv}gsg~sLGg~wHP$xlv?KftZdx{JTCc*w^xieulVnY%3+Rx;{ojxez0?V;9#?*4+ zb~14Y69B5FUu}pGM7-K4mpWeMaT|3VG>Ch*#(H)moA3;KYMG_!JjT6jIQ?-_O9!yA zq@TR+5_j(C;Ww<4l!md@PQuJ$BcRPzYTj5clY@7WUOD7Gp2H2e@)v!{4>dkKc#!m!-Mn{k3233h`$OYABAMw6pXzem(v z2xL`S}WMFHiQ*NSilxe_R?z5(v zeRk9}(&0C8Q~0HxDL1WAUS^SIY9oD`z;SU=mwl{n3a}BNjxFIMa)myEx*zK=60fbS zc%m~hgf+N-|Jm1d#GB0Kq~ed3VPzgrY47FCuQ@A_>$`9(SF* zgI0A4+b332AFV~yA5Y4or+{G8j6`y>@Rnt{)_DDl%BGE9E`psmC05y=u{QfaW^YT) z`MzfSSCJpD)Q#t>RsHz;6?KB^G*ggs8@cTY>4Z{^I_spZ`;{G&N0KkF9T=TB3~=I* z%C#lfQ3_chCL{PyZUJ;$N1}z=jGIe0N zZM2Wqk^3J}H*Y;)#0B~bmWT4AJPDP~FgW!I(WawfF->MtCM&(D2p6osD;u8guxP_s+xR8vuRv${XGW%NMe>m8jqH1-@2cVEm9GozJD&1(Uc&{mL7 z$~yf(egQy6QlgVj;^0^XjfR=+R!+ATaTl6z0`Eo~khTrK9XnRwIt7K}XTl7X6d{!R zv3#8q00o2gj;i1Ip8$U6s|_&>3-j8X1c3-Xh2HdroQ+=k*pvnK9V-tNDxkCcFA8uA ztnC{FeWdnsB4x(lPfLgsGnVaYUyyai{Gsg((|8exRdrDI&f1y5>}DTSf9Z)M`KJ@) zXaxlaRqklXrM7)dvGPvEs+)!_AC~h%NBqG{u!HQxIj|J~;r$m4m7ngYf%aXqfThc$ zUboXYEgEM8*xsTJU}x(0tj|+jOEDO)I;Ry?}>7(UX*RJ)5=~G7`h76j}c|$2m74oGF2K=>G?XRWdaDU zEV$Ye?eymrGP3^_PPm_-Z>@n}s#a=F@|u3t<#X1e_aA~Pe@VIL&0Q`AfTk+aEQZ|V z^#uyN)=09?XEwcm1(V(7g?~Z%B<`5nWXHVJ{*#azKS+yyXcj{dQBYS#b;y~xGly&CeIB8F(dMqJ4Mc&GVrUT+Fq_19y9?NtkrjWP zQS5FFE}xjJ#X3xi+i?|b+xZ+i@?UT7CqAa=EdJEdLf1l%tA)ZH@XP<17r%OZxu;Oa z>Q({nnVnP*yYD)TXj==PKk9`2u;vfDa2j~CrYg31kHLBOkL~R-s)-2aRQB^)w{$nF zJJ+HG!1?R(U)ds&v&H2#*y@>JglI(Vr}PcXPuI5^J7okW!)ggWs(L+h2z-02A(4$0 zK(UY3(~-WL|4G7Nt>bye5n|x*!=Woc zFcY2+F`oMKG)6#4w7V)f)N$ZDc}U+o1|#(;PHubiMuCME%I3lK$d?N%NBJ ze>U*ZlF`<%T6E!@Uv^5YMZfF1uJYD53Ln0b9#_3HaHb4y9WmBbc0 zF@H?j?HeNJ=|>IESW0+IaSQKveu>aWId8DCwRJl2oQ@6wmi zpJP~64~={)%nWeiE-OGMc7AD)*O$I?>450=+85Q7GfqMWRrsLs6Mt z`nQ-&^ytvThU!;<6*Wq;U?+kZ6{^>UMItxj{n0!ue)p3saI z=98vNglWBpXsefwNtagWBp@}%tAHuk;c|*K<4A`$0!f$IefVbkCq@JKLE@DwCBXtU zcI7*vYBUD=&TC*Z2qA0%JJ2A8wxhP2n@P>-#uENy3PuoH-hs7}qU9y$3Gj;pIREee z=jilk_T-RqOxX!N(W6Ctv?qmn2+`o%1f20kbTUqftuP#>aSy$8Eh8@~wkc$-s6D9n z;%TW*+0m0v;#Z9x#Hs@{K1@JjNwsq6t}?U#iMzGks7?RZ-L|7iI4w6d9N1VByz(U; zf=Tu#c0rr*=Og3h+9sx3u@3<`#e#;TRc~Cw%sgGCa>xSQThY{tu_STRD1J2zE5u-* zd!qg0s`M;Uyq<_Ot7${QoFlG9a9zb2eevQ@260af*a=Igl@n68rBUk9{QYJ+51o=( zvxb31iEh4IH~5d2@r@ud(=1N!r!}+I{Z=}z3+6pK{XRGBi2s}tTdQNQT8~Mexb*nz zmkE>)9~Se_1*KCn(>YhYk$;{KXlIh1v|!xN_~XYnjLhIWC!3l2XUWf|eq{983k1RK zR~a)#(|_>o7HJhNnF%)@GL}B;#-wY)duio5Qb1V2Q&E!=1ZaxhWhUO(0Gluzov7^{ z{2Wyi0SI)M+vF!vnWSXgW{2P74tMd^V1jr#3a_l$_pSlsxExj;$kBS#IXVa&hd0Fj zk}*+mJiZEiQ%?D<{G8^4ssT)dT#Ur|6T(2DkkhqWG4Rb)>0h%y4Bm54Y_7JZjiSIT za$7`GU^(A6R?xC$7@ZDz&+2Rh+MJmt4|`RW_$an`*R@1ltvx+qg*ZO-{pi$>MP>t^ z2c_1}S(8j_!AhsmF;?Ip_jD-0`YfJ?*WH9@ zj8A*r-5LFH4L#m)&pzjUVlHAGBoWpz%#u+#4Vl^(eUkfQ& zjVqreu+b3w@Fe?|0OX5<^uvtQ=#(1ZqV1lnT8rPk@JAU(Kk6RoXmjpqLlqCgB}=%} z?p&(;ElxO7JThlK$aTz7Hy(8&MbgpH@t_&E6w4m{n$$wiF9X89?|cYwicarDq-&!6 z(n%jwfMg3dmIO4i5wAF^NYkeE1(d(;JGYdfkor@)m_Dp{^E;D*{g8k^)-|_@%wC%N zyG(0qP*$!Kr*){FC;@XV2q7fu){4AGHBA-YX|;MRP~Snx1|-B*;(mLYXcss?@di`@ zpMBFYGgnT!%i^7MV!b#+*?)+&E}OM*7mrIcm4l_A{9kgs-H7jj@}{|Xl1?jJq`cPZbn%LM>vW5ekCOM%^BY@o_#srApP^OTKv$a zk{>!6$7oQ~IKb75cUq@6Z@jnrNO-t!opfCROEC1Sxw9sONrrX4+2D{355L zjeBP;E^#FVxl%_Vea|{wzTDOX$Ek`%W#cBn&;O*aov^);U+yWy9-1+E*^gX(&?&mY z!)d4-2;HIf7I=+v8_rVPFcm#H=B6+ptsr}yh}UH9sJSKVN=_z%>JCN8exR-t3y|dW z|E(cJ&`v5ZF6unoM6??$Iyz;gbC(52qNkX$^f3RSM=J5Z|5h=%Ao&LWiGvlg- zj2Q?clONC34>1y{#(i=_pW#?wmlGDZ(>8g$5VIbp53GN%Muc?BblEAGLSUNi*gfw| zI~od)Zwq`%O#cauA2fFYfnlIP|mk<+A}8pHT$ z7#9kI^_P)xliLiI$qQ<(IEk|=Z`q<7-Cs1>c&m|as~n$B9c9w^exL>Kb1xc(Mg%sr zI~5Z&T;5qhcO&-kdi^caF%)ju@Gm)~>wn|L2n?AY5%1j0Tvi8+U*{fPAR;1^rQi2l zasja?O3Mc4FQF3XF?<~jI45gZ`DS`}H|G91IMpc_s8Uwd+EhQa5(8v+iIV=f5xK++ zBsQwDU)q0iC}hM`q7Ilr`eqJ34TxLZH?cP!vejjb~|Sy%+V!6lOeR-8C?Jnf!qR9PEhK`cX#QZ z=2E$G3~26Cs6@Sv_mN4UTnnER4-6k%eTc0o=@i_c`peD>oxGNq(`#%9vZ`FTL}Wp* z+{^M}feLuF--l5bQ3cJm$``Kz=?~gO>)Hrx92hWd*l)K0Dy!ttHh4DK%EJm^x-JJ7 zdae@tikD!PBuUScl`d6`2`rY8D4?zyZeGr~RO8(qma(k#_zI)P&OTKxWu&?qGYVHp z*POHeJQ!CBB@m6ipcRZ{Uke_2zrAz4_3>CgWQCsEG11Zqs;P=C4v*IOJX+dchQ#VI zRB%BZT-KjNivhzbq%Y5}w*gBQDsiscmkTv?DymG}FV##e=uL}!#AskM^REeO2(mu) zGEObU{-#UZ`CDCYPd`;ljwZMCMU{`hri=zIXOxgvlVks2 zK5*xcvh+{jgz+h5N|;oZ&K=vZHWN;Bl*fXW@|S?U9KjE1zwfK||FJHQKi7+SrlQX{ z)PS;x3Q!dTpr4#hwaUD}4iy7`{b}DFG{rxGR?RnLCQsc@jy)$ZgIbKX*uPK99Nyub zl5_0^tZ^Nwfxc-@Hq=KuM9(_%rH$%n%+MIHuSb_Eowyr$1|X->%?C!|N6-<_o_^d9 zC)_aEOh4d9oU-Wa)KFq&in)9Osmwy8wykQaME|nVBoP~6F?rUavnh4T*?uy(n}8IG zgIiGj{f&b*kR+F0DBB}O6m7yv0<*A3*)#{>U?o#^T3YJ9e-p2)!hAuZthl+}c@F=2 zIiDDf)4Of?kzM;>a|WKe3Aq5h#ZVnC*KrwlA#;726iX$g<0ReE?BjU;7IujA`Ez#) zB|7b4AJ}uYPqAFFm4?iW_XDHHtw*7ytIH1U^c6Fsr@H}N2dds&uJuakh{*-*j1O1i zrq(g1`&}3ISv#Op_wc@`P&lnPRGeF%XB}f5Z3VkIY8L}6u*W$qG^6jpUdr|<@eXDg zX3^IPOA@p=y0h|NA;1=?v5T2tQ>jiyQ-(GBBlXypUa;e(J}xsafW5aX2bk96L}x^FgS)@98^4E*;H~ec{diT*x9k)A++|-f{St7Jy1Uv0ie-|R|#ZKOBe>3`->spvW{(3qr^*h zcd!ruHfjfO7n<1h=XYf?r$yNP91V{YP$w@5(E_))f!iNj_9yl$BIb^hZG9pvhDiLDiAzOB5k?CGff~`TfaIeX`(BX zt6FIqQmDaOaicI~9Tf--(=E%3{4X!{e;e}UnU3U0YiRdWwHJXkyk9E%02Xz4!2n-P z!Qh90>OO_z+4t!^Xt!^4QbHwH(9dW{*l3=da1ZghE`+p%>D^@ID0XRn$86F1ubmRt z5aCeV_Yk_mm2xcoV49fkY;Pzdm_U8w3 zn_>&UW%!&*k15NBbM33q#va#77qI42o+iU0%d%1MP}p+2F%366fsdqJjLxo;yBKs z3CaqYK<9>KV;k1*X55^_)6a}FKMGrWzkvrDyt!`^K~#zc-h>VYFyt*Z6VQ1$b*1=U z7Hle}wd1ypZW#fdIWg~x@X52dU9)3=nnum77=gdvFtXSt#zPm`PY@|f5ZlL1lK0l$ zYzo8OewbNIz_ftZFK#QL&H`)6o2XwG84csNMkGwhp zXWO8Zx4rPI+0DfUGHzZ^q95S<_@FhUX)_BC7(07j;$ zE&V@gQpbH6a-M6(@M>6on!#g-D)sK*=4Ns_0o_HzAB7 zbh=`k8#k?qo7f-oIah7_WlOY%OJ#B!E=8!x-vwy)`V@^+oMuD+@X@OUV(-#+(sBXv z9yY&yXC=nYLXYSSOHsm#{zvrkGS$@i7z;-bl5}H-k6R(jt{eIRxP6D(w{miPruugE zEJU-n39qJKsh6oWwwaZH^Yg08=D0DZtK&40t|bvWFE@kO8MjZ)MzTh6?U|b{`&nP0 zGVpn_Sk+a>N~@1!Rq0725xLbfK7947u9bF;QxIj<-y)*}C`$y_Wu!oX0 z_eGc^qG5SXUHnZ?g{v5wL1JR03Zct_gH>Vz! z(KHwO5KVAJj_x7VzQQ(n5xNATz|ZGoJgDLssm)0K@ctx&FcA=7r^^@;%cYJUzn8S` zIFaqKFGzd)a_Sg?gs-$Seg)t)xdIQ(8lkM#a!_z%TuIwhEvEI0)!^>DtDsfVVsYZ6 z-UMYe3dF2H8p9X`H8d^7pw6nQv6speV6iRArSqc#E^5hHz%^MH&4h zLMip$G&RJ?sYab-zx*Xku)F;HWP#hHgp^wHPr>2DfOAg+DiD&7j-+4!#POLkRgf9{ z&0hrKRn}mK`-TOUfwJiO=@X&!Bh;0w?!I#cEUyaY+Rc8jD)rqqlj=RN3D^z&Xm`e$3276faX;%p7Uy< zjZ(X?)RYM=6SxT@K<9Bg;qyZ~zzG$TQ=ul&grUcCuwmNGjKYI{hayMg6?>J<4#`9^ z;k6(r`B2#4%20&p$Odlh{x1ET|Ge&z%)T=h#~}^)5S{iIS^-XE#e(91n}M@AKiKyE z6`Fg_PCn7p53J~exDn5Oc%o^hPH6hbicH+8TdTHPqLQdMJnr>=(BkK5PYOCgOdu6a z7g$14+bE)QYi7RcHC_BITGq-@wK!2wT{uroj5hK7^V~P!QY%~RpG)?+BW$6>*YG@& zUC@b#XZbi)t`%|vmp|6_9MlT*qRNlVdZa?Vnq!$ zQVOeLNjB$Z=o@p@8oM5&0Cc%D$Phg2v;o5Pr&re^ZJsYcb8IK7cFXsika-?>IG+iS&0kAbxmnUqQu1VhP+(1GvAn5EpKnHY_ZH zt(N9o=2j6zX;6-a=5{BxI5f{+Dbjgw*Nz{%#~Sg`p^sbBm=;#M2`T-lctdminGRVh zjZ-9busZBX&kQ`6Cxt_67LaM^fk~l6c0^x1yo@{D&cc1Z;koDNTPWB^9WQ&>)|6u} zJN7Az1-Qo(CbW3_F8jq%ujLxxBq=}+$Y{8Lg_Fa~i#8onR^T!KHwWPScA%f#t>ZYb zrCKpWxEiD}P~r^Vby1voYyYZfqo9_=K#?Zp7MzN6|BNvmiFqb3N1$d+zzr)bO^DIe z({`Dou@?QUgTjzJ?WCNpmEcjvniI67SF7ZgdVcOP@5Ptf)$2~OsX-nS{ar0i&6HKb zF&;bql`!Lpm^k~!GUi#H?8WVAMEn0E>MPi)YM8ER>FzE8$wPNY92!wdy1P52yAkOI z>28qjI<$avhje$m+xz*h>pQ;y_MSa!X3fl6=QIs32T*$7cHTBL@50W%%%XE19Tslz zTpuroPQ8vJa*vry`x5BdF^y_y0XG>uzmL!AX0B<&q>|NsNb58bI?bg8>)Zg#A1D&Y z1YXg$HgOFv8O$$j{9BMomOfCk({VUy%!#SnVO5BpSx2zN`R0j*U=0deOVh@=#9R0< zr+$jSQ8-sSLSb4G2(8vfBu;@YC{w0>yYClVl3imK&)I;Ngw*25Gi-4CT^^8$@L8<0 zK8iM}x&>`BURr=L=NcEk9dDuwx8lKciP_PiZ_TGHrQe~m-w)Vc=r-!`jlq`jTrFKIJQ;r-rS zVnmi$K7lMUjwR3~?24aV#i9h;NN>7_+WFR1vqG#a_&e=YSL#6lNe5v?#nEyk5W-NO8iGs~iezd9)Zt zOd&fqfn~Ogp^!*S#67Lqpz&~A6jvMubS>+Z=j=3T%e7$t+q0|A%WaSc0B09+2K0J2 zwtcc>i&!PRTgzu^MDuz(#55z*U=k+CrQqCT>2quwi~yD*9&6*Fy5HGC_DY>*ym|d~ zq)*k!dIja!)dG+H6EBdK9<<|<{hG)McB|#CdTWkr5bNcx!n;Vb6vw8ic8jxjgeWR_ z7r2_g?HY%_{T&lKfQiSpoS6JG5t*r5Aemu2(ms)HE67Fa*mS~$1n^?P0J}3T@7Pn0 z<&vT&T2NOplc@kUF-J}P+j|aJkl{RuMn+|Ol_FY=M|VhcHvXGog-fQiAw@CAJ&t0r zFBDi6)_U+YSvtt?iW{174fGyMuG0YL&;fG4J765Kc1!${j`btl78rHVDx@b<&cuhB zyBM4nBO>zjXfkGJk*?8)K!oy?$*Fw~E;GaBa>vobmkOH##!0KSE$A7(-n}+ehOsfJ zn}2{EWjHTjw15>+jESvH{{6&3$k;1Qk&c5fYl?iInL3dl%N*-q7_PU#I9wXcPDTQz z;|X6ZQNo{xj@HEsNDiIbzyi28xs3XH8&92%hqYO$bnV*3o^fSCpEjIJF>OH!Ue6x%qI$c_1=*5- zzugc{uNPNi!~Rn#(~MY~H$7N!e-;XvFQSiEG*Jks&|s71^i(Kx0UwwAxl*Im zdq7y~yfkcpFEl!@=3HP1)3L@v`YmUiE+LRc63s;pJnHE$> zTbB~h)95rgpp=$;(sF*|2mPog#<~=8@6j()ax#banMXG5iLuZTYwzNofsUKHS=~b| zc|99MAT6cQ6&CX6+hZ!tta_Cz*fwbs%XwX{KFL~l%gRP4r+B@Z=AmiGla5&2ia8i^ z52~wE4E9bSYJpRblaTM{zqoFmzOof%6}sflMDs=6&p7Q35!MF%_98%dc0I5JZa?}s zTzJ2UiFh{~mw2WLH4$e~53im!0%u#&Ev@(o$v1>(72E}q$Jifu+J6G2Kahq&1SvsF z6OKy~C^I^Q*}Ak7T4$~@Pk(<0#BH~}yhWF$dxa_a{EHb_V>2WyQcZ3$ja-&cT5RQu z6{`MzS&y8O;r<_|=Cz}rAV@uv8Goshl9`Sq|D-@~(D)tD!uLY~GPfe6;yEW-T!Xr~ zxTpv+gRtl8gqY^sHDLYjj8nqEmErTSYgqW0lO*hy5BKHMt3UCAD{1iorDMF|896W$ zKD|7Jv0dSTw-gDw*|?mgkjs-bB>G4osGclYH(2tzK)s*C4>5MViZ0_%Ymc0%7x0051mxfo9Q7q;N&cFBLLg}v@;8K zj7Zfn2Ugc*M%<=8sTjjYr0nz6)-iLi)`_z7$NcH1rM{2_e7uRt6Dx-w4t7xUsb^_6 zq5G+YQzI}8?5vH2KYbQ2iKRgH_244dV_8h*@m-H8QL zoZZgn-fgV%%_zquz7vJkd1Q${Oh$$M>u4FZh}5n6gL^P8%5?FVa%T^aak0~Cs8BSW zsmqdL%@G%&f_JeKN484Xo$UfIR(VVK35=5(NsG+E{Dmp7qE3j1T{YfJI<;7FtqP>S+{YY;7pxiP zPhyGxAsZOpZDnFQ>J7(xu8@{5h?avg7F_kbVc4-uzMcFDj=XAUonO>B6H532p-jjc z_;XDwULbLR;YuU467ZKjVNViq7#*53t9yeTLiR>9=zC#$?N<+d^7Mw6vO+Pi7~1Ag z=O{Sw1-TPsw_j^Qo zco+7n_t@0mWq;=YGQNl5Vs`gazn^G445s%oc@lk1b3jfu`?rRql)`Bw^-()jwJKvf62s$*C zk`s_vPi<8w=GPwhQZQ+_3+%7vN&hwP(m7djNp(i;|->J))<_as_rh~H@Mr;&~ zmv~CD_>u<2r6deH=Zr%<(-MHtT!xkEJuU^VOl;>3$!9dBfCY-v+DU4^U4GAPbmG6i z^^EZhIqMs$nn}~dom}La+_FqM>^wiFhT)?)b5S`x-qO9)b@aFqHYVvOZ7dKORl*4A zSrOhfI_inyN2H(p?*BQ`f1m0({`Z3KJN0B@5O9pAU}VG)P@4ePJN*ImlZ=@e=zIFd zoac7f?LNdfw2XBrFQMr6m25IH&}F9Ao~*(fb9jKg4+23@n}gSxm(B{4A4;<>>jckf zl`ZBM;M|}!$#{uf&s%o7ad*2HE?G%6``vr3YD+*r$r$5VRLq)a@Mr81AkQ)vCK_%2 zOfk6mb`4!%J42U|Jebxnu0T===!dQR1afuTSbm@ify%tKUgigCq*92!7bzmS=7{$)Q&k_2Ke~xaVtVi1572i*ALvXHF@3lg?qPP-D>t zxKWO!7VuwIYUU#cBI@H>Z}R>8PIQ|VK;om8+e`#V9jbmxb|ImGYt;O z;7+hiNvnwGZ<(LK{4Fuf;$x~*+0Bxvbj90uVF(@khbB$tQDUawvCL7lM+$3ZUmJDh z6589aEFaBXRGveo5T$J%a z2ukEU$jJsXWc7*}5yK`r2Jbu=K4cr!#l%S^s9BPqL5WL48l4vjUU4?xZVR@p-vT+u z-M1uFSgMBiJ83BWa2}Tb;21@TPCoLw1bbN~`wnL9kEft4dHi@$ii>jgxp2nMKI-ob zO)MM&E{fZ6rkzHAxK`6Zcw#}zmr5av*F5rqavA~M(4Li(uYT+vZ%>%3&CvU+jUKI* zD0)wqU7H7fUMEvFx>i=|3v8bqv$O2G{?0!almm9JZM}owxH%q!&-mmGR6AtBy$Wl> z4c#hiO}izn>|sP76pF{y0ZGGOgLS05OhbRak7-Q-W+5v1Bc8gFRz>=dRsurdh|Zjb z4Yj+hmV>oWhcR@?ZzNb)hOsS@Ig=u~#*2Z0v@Kmg^!h0+}Y?rQ?IgX4x0i_2&BJ`SV=>!rN8iW^d!WH=sY~6T=eEmZtNyMIrO)o0Rzk_q7@5p z8o+IUHnal5?eVBj@ep}gIH!-sxxEB`dxWJ~YA^VoUI80J^JLjpIydua32?%%F_-RD zT*55GZP9aqHrATP>om8&EOpx&wAW~W|G4)u1Q?t$O(2O#CuiX{`(-l!VjdT2#-=%q z6yNETX_#2eqmNk*Tz2@iOYZX44IdmQOQJZsFZ&^DAe_Jttm#{A4_dYb}R$yOw78&QItyD7ZL7nDsLAFmaaMxY{n7k;D-U5{}|qFK7b3xpLdA?)eHUdq5jDFj`7PdV2Z-69?wk`_an}ZMV_Evb8I+PS|l_t z$HRY9qi_>n+{y_t;V+Vc42hi%i96#ck>&I*AU^bD_c6iwGG|S0>EMvwt9^Dv+>q`J zIJ&$%HAIGpEA$i>=Ay5Dwp1FmV*%}E4?BG^)r?I`yyVD8AoH?Su!ED)8HCL04@@V= zZ8^-k=~#AX6F0i&PpSk3bnJ$=Fw)j>cZg1;x8m8uA zh~X{0keruUqZoBPAWyjy6Os(}mv9jes!;pl?lmU@Oiuq07%L(eD*`=ZIii$($IPhv zcgb_r)6ZHrqyque%ohrX&>bIw-+u@0p?zp1j_fsf8a}QqhviZ!&t%@PMfYg#0&wj}Wrz`>S!;i85eHa6A*s^@OU zCeFvZq;YxffA>0gc*bO9fWWBKB4WKz(Nkmb1K`K3hqe}U@4Sx9eu|HRZVVnZBYR)M zXaoOM%QJ*0x9N`5aKb>{%{rqd7<6>uln7)RS)lmQ9r)q?7}r{>%y;Mt(PBO9@BpKH z(gxGf6`Sk_BL# zK;&3R@Id9<{!B|}l$ss>`nLEqIn)x%v`X^w>GbLE+Fhpc81?`ubYPllvJHQUJvIc^7B1DpE`S#a`$4T;QQ$Sj- zjlp7r;1nt-!)=IoNDw{jhZVD^GH$iwIj#^`0sLh`M(NT--M~}afS(O~exotHcJ1iG zBNE#w5y$k^EOe_gy^;`L`Sw>6Ly#&_`9NccfXCKL( z-o_6q7DKDd$%h(KUWv|izHB7p#Ybr}7yjVwerE0GUK^>=SO{0r8m)&guhbGIDMtnu zgopOZz`e-4>qxEZH;9Vd%KrnJ@+052?FzW-((k=F^MSVw6Aj?m-)`CB^CyX2br5xi z>Xc|xJ>apn#Q8zvdPk$xg^aZ?aAR*z5_6UN3|=z@lUbbAU4Tf4h*-=WqqjYZlc`5) zU(g#)n3ZVn=F|-~TIn6;FF+F_Z=X_I9_VY=S9-fYvLEKdbS92sHk=5PB-_4=_?2rT z&R>4I+bJ>`V_EdVk^yZtd-`?T-vT3^k%W4?(zA}wd-!7_^pfLeD>LL-PMu+!zDvjJ zu4~g37oot-&@j;aef%Z!-GW`8@(T}{lWsG*9dV;k1!F3$N9dOEzX!<<6+-CSv z=W2uNq0!sfVDOkK59p}S)&umpBOFMRE2aU+x++LfB*l`MT0tN3VRRcJ8G)~0Rf#?-{+ zJRr^j;}Wy-Kr>hf_zX;(OmtgqxL7vVtzewL-iVWumi0iA11}Hyz-vU!7O*E`HlNQx_{?Q;Qx@S*~~ol}vrP&KVro zEJKX_*6U#wC&F?GTJyW}RLj?lOftz&E;DRd@4bf`$zZANY|o+-5)!7Ju-6^0S`A#d zVi3$;&{Y$|IreVUNAK@ewh#O^3r1&!?ze-wbK5blV8&+~PFvJHu|QETycm!lUxTC! zikw5545t;i#v8gc|My^tQ|Xg_N1Dd^-pUNiN-feB6)DFb&GzqUvYSbqAif@Iu2lG7 ziwwQPs#-~9}=RA;~~)~prfS$`JUWqef$7^ zJTz-Z(F94lL#tQ=7Hv&OWK;=$KU*G$gverM#!*11vK>cuJmDjV8JAKH?6fyrR_%okz*xp%aW@VWNT-{>&~UcWWG;D=f);PQ! ze^Krmbvf!VW-Tx53_NGByB2aPeDXSKY7qAkR=oGOn_WVu9|grtFfTC}-7k%CM)%VC z_}=!ovk-dr1hwmou}C!;o}v%K7Ph?{J(^j+L#a-{u#lqF2s3{GsOI_3@pk+?U){}M zaBx(->S_-R2d}vXRX!5o!6(x{Vu@Vot~@`A=C!?kzPBb9&n)yRYbp~MV7JvFzW1Szx3XDWhOdEi446NUdT;}IB9|V zN#pkn1cLu&yoIPI(>oj|K|ey@qo0b^*)?CXN?ToT*i>h1c2~}$k5Y=zHx8PSr`iIa zgcol<7G}vZb!d+l+4phH+d+AyuK3>pCXGH1G5C^_!3yu&AftYwaTn{~D zn3%OP{BAqu;-+hSw$Pmh|JuNH3*{YYkwdjD5qXvAqYBf$yY??1ymEFYqrS=vcWKfQ zcS~}h?tGnRMW+S(*D}fIJisEnUEAtBeP)>uxsxR=_e31(Y)5;U6b_!2Xq)?zV6lxr zn^hiP@}eIua`P5&hVq6nnBA!nzz&_ZVIwc9t!?MM77hGP5wKEQSAy4e`3>-&qTC3x z2vl>mZ0dh0hVwO3^|xbiOrWVb!#KhU9Npy>{w)w2vW6Kq7I>f*9)}rkZJ=bg{6lBd zICrgJFn=KAx5zd7ivQmeu5pCQ?EejE>ArlXDFcmswu0lFif+SwVzZi|CnYJNC(4_m$uajZC2pUsvE|?vs9JcA$CJ7 zsgtn*XzWS%`DWSz^A(LZR7vUhPxKqjMu_icVIZ=SaP8O^H84$I5V^dLW~kre`xi;4dOd7niG{F2GfeEns{iOrdeD_^2CWI}42!y|OH(LkbwF)~2V*(I#f(GNBtiFX~` z3eiFxzJjW3xPK2+UHAiDZN`@~7(6EdaYu@+$*qP=;N8XcO&_Qf{YQfC)!0Q7%u)qn z5$HN)jvxyTD*rtR@$Q)JCR|kF4!r3o1+k|0xum*?V{Z4{d1;Fcv&|o(f26leZ75j8 z(#{~KKG>TUB8LMzOeRAKqcP>6M-zd)xTxCpD1YPkiMc%HvJacn$=l%j(_J&bGTNu$LC42-v+`eV za2#L!ymXu1+_h)RTK&gjEj{Ma_s0`l@(1{NR(?AM>4T6VhsX6MgL6TBD53oUDBO%{ zO5=lLKDq%OTHM(P@oEkl?2{(UpNgC(_Ot(bgneS^_76mGA<6WTBO@PZO)WB^jO&cW znlNa(N(RP%!JhxNll~%RavVh=mg^?G#dbX4Z{ymFBs@FPqm8j7u#!H~!65jog|^`o zC(Kl422Sz9A|&d7$4ZqxWWuyqLTT=f(e~$G`5OAVRN1olOeoa#O`UvOB${449MK0J zt`p`ORBSX%>jUFzjF7rsI0G}RwbJ~)MhDL9)z@}WS*RE;Kr84WO;D#zaVg1mF~0Dckvh#%2`+ru->ows+)%$ZCag{gnUZ%a* zM*xHUKB5khS1m)^&x%B=+xctc^3Ui5RE;Vgyd17W^ZLH)4@*FPhl#s^Y(|fzV2X*O z%=Ghl7%a_Q!U7!#_S1AzKU$%_APq=6N+G(eqU6IOIGCeUm~;fC1tlqzt^4up>BEgr zw?5HalBsjSj3Ji_Oit&LL`)HWp?YYp7eWm4K@1K=41p1l)b7q~%%lH~rO+?I5WJFF z+b%{;c?tbWMcc+|d=4omd>(IRe|`?bWx$F3;FW>|L7i<{-~f6yqE*}UJBA~W&5{P3 zaZZ7aQqN-+M`zO5i?;-A64C(KnHu^t=3GD}sqRk;ti9ic!IOjMP|U z%DAz&uj)UhAn&~qfCpax?}4ASEE>=EHqwgsK+L{EEG()8)9i2A&k}62fi()jB6D_r z-T1SSQErqqrmmiZK8m56$9GsF4HVNsB=J6vz6xZl1oyfzRn_ej0R(Pq=nxKr^0aYk zuH|(3b2T`#tct+3y=8qkFxXxSZttTs{2;Nrp`<|=SmOFzX{C%&`fV)dT`%wM?pYWf zA~m5Rbvg?JVu3kliWvhaQHcoSN^njHGqzknAnjG04NrWRPqOQ-wa4jWOOt zl@STPab*0kp7C9j=7Sh1Mn2{h)lk2olL(D}W~}t@12!@NZ?@4EjKfk2P z?ZXvuUb;sc&ohN?4&)d=HqQ}0Ev;{YUqp1u7b95r^{%;3`^5UlQTg4=mc}cN#?!}1 ztAD4y-%j;Hn5*;WxM6n63H?x*l4DUY&ttQnQWbu)RN#_t(~<43ytw=Ow7D>dCT-~3i>py3VwNsPMIwPxWK_cu0) z))VEk?~_R-*Jl@CqYiUgpyV#+u>G_y6u2=>k+(hM%D4QC;qmepwq@xV&W=lj60?Kk z1#Umo_MFQmU~)tmj74uve2c7n_Qh2xtQ~ zDy@1n=vZB&eckHyfY_8b=xttKD)1&$5i*UDanXQQCK%u^_ysiom{7pi(u8>7-Lp~} ztVsway6v~i)mtBd&c4T`nk{Kt0AG{$P)zO^t?q9iTq${I&dVh&0A%iwiwYtLNXy=F zmH^q#Ch?Aq3mQFagwAw_G5!VppavTxXZDMi6e`5OU2&I2JUuTb>Sgz$mWNx#1} zpa(Vf!^`^m=Xi&AnyIfy#3N!PfI-C7A{%FXszuOvZcP&f6r> z%A;-$xoMZRNmAwWJo7HB`#4;^yFeTq9FOu_gxGF2(k)FogG@^v8Ph5q=*{VF-A_l= z2Kh&LwG`6q+_qHQN$PGzmmHj4j&iYx<8Wpq$@Z{&viyZoZLX`|^tyq3Wl}uq6!APW~+GK--@X!@+T-LN7j=vVgqEa17-ERpkY|J)gxWvk@4$=Mf_zOTvHAQ7bQxu(<9ljsQMww{ zl)l=s<^Tm7c1Lr)LjF~8dBe40=%9z2(A$c;Jqczcc09awRF$6~RDol2qQsa6e8^)Y zlRdjR$U1bm)sCH|p#EPxrtGxtA=v1rO zOFq@dZ9RVKWH8H*4uWT+D^`(O{;V)S1Z@CQPdeMQ!=I7T=t5h7HdfeOA)-&cW}j|p z-}tX5C*wuuxwXk6_lWFqHgY5xeWu6)v7y3f~#m@+Svr5rw)j`rwyILpc8_#k6e=ukAD5)=C zD(-_B-TS$l;Pz~Oi!&#yENqpL&dh*Juk|#rv6uoZXbZD3s=Qf;>)8!G*-41;4e*WG z*VxW|U>$N`f4xROFH#sBYp^!>-Q+k-)M7L<@*34x#mE)m*sRcl&o5M%9 z<_xn6-h%%R8$k-CMc=<6Arcs-1*M~nxgGG_dBz42nh}NCj==L?61<`8=e)qN&Y$)T z=fR$HpT_qzd@T|)k+{lC0MppZN=yzP*cVn3mM$VxJHHDp<1zea_A==Qcz+`Q6bcW4 zMSP!XAlJ>8t(prt*QP6xlj4LK0Nz z+=)@ag%uEf_5X!m^8=Bv_Yi_vFUPwNC!gsU_9JJ=&3Ibf=?V>qI;ywl-9_R!le|Hf z$9;sZNdUHRrw_Z!uH-QZOHw%%=x#P->NSd3OGc8}PN~bDt+Z>o7Yu5&Qq5 z@F(4By4w*WRK=uD2fq4=fF%Fx@1(JZZx-b~P#x>#{rxdCMnYOfLS`WL1abB5#isWJ zeV1RlEAlC94fG6J(g9qt|A#AgifAIJLjZM0{IkJ*G1Ro^eoJJs6wG#Qf=kGU@K$X# zy~pPt`)d`Ebd4T%-z(bZ?@RccJ+6dZ5XaUJ_f|sWk`9tV1I}NwOUU}R@Zd7|R1%8b z7zv8O<0O4#$TcMvsTg&RKU)^QDO@<*_pM(_4r`G#6iVf&O9-hNRjTu+4gOAE*wZ`x zq+DSIAA)y@kiuxfwXkS+(hOVNMDT_r83V+b15LWag3W=1i$zI|N%j}|d4YY^m9%p~ zf3UFnjVV@LB)p2?m3&n(j?sd=Bw@eN7p1p~r6%)8P2IiREXYD7f~SOCBc=_VMNmI@ zg2>TZv#jtb^k0ii66Hopql*9#Ps!{f8g1kWWsTt)C|nwxeQ$0=^|#wvFNuV&p7nns zE0@eN zyw0M!D>nGD=hjR^Pm3?*YE951Oz>s#vf@MWWJ_))*jq)hCMnYtXtHIfs3+s_Vkqt4 z6XM`0anXXk0;oLE?O%~rMTNqvQbb}%(Bd|dqier$YpY(e#X;3JTcL?_XCzf@&EN7Y zzkhC+$7?hTcy_f;z83k{GrYW?jy?KOYmr+@`nu=Doj_2o8K=4{@DsyM?05tJYpn1= znUH@**c(=!=(l%>ZsC<5rkK@DIVkYFo$}}b47Geq{4W<)jiZT?Mjsf`aXB}Ag5~(Q z$OxgNzdI+TyX>8X8Ed69s;u6)%)=;XHmpV-%e#>J8arPhu7g{tSt&%W(+8=jU}gt^ zJf_yng}zZOTQSsF)ITZ~qxbHqdhF^%LcxGP0lkj|gDO6j$Y>?CGbN* z5|y}fDdLd*&v1XI(iV}mjPy`JVKjX!m^>4(uyJb%#q4~%zjJYK>G@1q3XS5mqe+O#gC< z=5M0fV3Za^)$)4*6NPE?(c~Uib`o@!d2f`rPI{!q0EJBgA_VZ~VzwoqJ1*uu$N1|C6|0j-Lep~$y zj~Mw2u40}sf2GusC~OR>07*;W)vM7hP%|%+o2em(9PLAh1quY|v;6G{1P&=azD=e> z*%N&EC_3|igz6z2Zk`xU+ZP@|JyHT=1`}U30-3UrzamB!sVTkGIhp7bUC z-NC?yPg~@|@2i2yk^SxG2}(K@d@~g)$^i#kc8*Fz$fFlK{|xkXw)8=g#QEFC*n#IM zg+t-#=Y|E+?(xTWAdh>j7JU!YtU2vz?Kb!zblvL3v!!6=ZMt9*o{~yvGoX!erxpA4ZogLlX_f9D+R>02hAJ|4 zW);RMA(130I}Wx31<`thJ${R9*uDG?E1;`vo(9OR+tYNjovm(XK~UVJlCcrTyPbTe zUYM;_#Fx`@3s<24^aUD1r&IMcV|WNR$q$XR8psqWUaW2#o?e*06PbL0g@GAglbiqz zFc5MnmNXzQTc*mr02vj(N#xSPF_B7h@kUYUW0v}8bxSo-2S%d_F~3iW(HfTOC62}q z_%S^ik6;#P`!)MrM`K~$;>?r|ZckdyEELO=Q*6$*vx#4Ju7W`H7oVhSNZl9QfaG+zy~@HHsWJsQLLPe&J(oKs(#48>^XEAVM47(r_uxcQ)ikhlO|2K0j z>UjCDU0;w3Xhj?+PHjvLHw>&1de0b5?S3e2Vef<8Tz1#(e(*71BMSzytoDZ+XIv8Q z`(I77LG=lqN2}&B*WODdHTfT#e@HFT90qB#*ncH%)&F6dJe`yH1oN^FN(-mVOdtH} zgB&1(oaXYSlD-g;9nLIt#z~%V#=ykib3o320b$#7@{&Y;T@+)=$Cr*-w1~O7Y%w$L zJ|PBvSL-V@X902G2wY$(mv|aX@1krl=d6g!J<52?50ENK1X|*6-4a zm<}YBKTf}BK>8~=!lTiBm2}tV?SS{4ZP>%vgKa{?PHIS=LShec*WF*sfXF;MNSbnC zBf#c%5L_o{={I9(95p30In=cIubk}oFLwfg7e#|*m{vFY%qa<;)6PbP5*~60$@BYU zD=mY{Izc<*ETrD7;+b%gCe_Q)tRTMadT@jipo!5y_cwYv3wL4GU2qrvt)2}UIHsn? z7w0#aO8+P%Trf|MW5NJ~^>Il42)(qt+D))`?PpeDp=oQr_YvRsP>g=Z%k}THNzZMi6t|wFRX z5T4tW;cKS$aEQ4jUtni$gAtJ?3WOP#<2GGtJH}K_KI*$^yMYuyaRPhVtBmje)j)DS zJ$Ix_Xgc>*P+$zBTDZX-M~Vp8Qq+_ftyFYxDRR6(MFTT4W3T6yD*gnZtNz|-VCy7K zA5z~}*@)kJ1>>)7{R2Lo#&M^jWvS@5`{5ZibJ!P0)CXY)X^9#R*`GsK!^mRA^+cZP z#)x0B)GpZ=lTAP$CJTL}`+-sT1Bk>Ow)SH!k15G7WS3{GG@SL1=Xms9T`z1c2VSWA zojN=zHPgex!v`nB`pxLmOWv4{D+S35Xk$+e&4#?chyilcvAJqm=bLCn5n4F+8ixJc zTaU#}2QcR~EOC4{p+54h>xE|qb|EC;?+>i66Z9sMv)wwWX{oSgB8eq&^=YEAQRS*uL7|pVr~^JgZzonlxa#mDZ_?b{OF(Zb94FAN2wFS zsmLy9a0mxYYV`eEwG|PmmXP3<0wxwPg>PY_U&3&B)5%qgz2atk)u^X#F>6&R>5~ZY z`rC1IDdkb9&^IjE@~m!~IG+3wJK`id+1mU4JOaK`kqvU11V zxd6N!d+OUanG?pZ=qL9ZUx7$3HE3-%EQT>_mOpi_Qk%d!iNJTLT8C*w z8gM?MA6d#zCrR34LKjVh_nqZfXyoz>@pt-uxYV2A0B`gn;BwwRTO+nixU ztc(^RQAC5QXb+W<$R??${-fmur46u+WI{6G)1)fiDo~ZirZP#fF!c_->SK{3N#MIP zjn7z}ONxXQD~LxAz&h#%xrfpVjHNr9nG+041g>}j?M$ns3FmeV%tsR%0UVA^Fl;=U zloX;C%+F}`*u5Trs9Y^J5oK!@798Pc2|gKM^sQpZp7pOZ?GxxqoGiaIknXdxy>1DY zM=4^Cvp}7t4u&i8o}_eqG;g^m5FoXGg^T^|i)fxj(H~=;-M@iCF_TUGS3{!lXaj$n zk9N?p;S^SeZ>_kOUHYde8b71z2PW3Zi->0@QimVqGBm8?hIUc8gbT=Z@J-)ttbZJv zd?X&W#e+@Yv(=)lB{d)iEXeT9Z@zF#fs(v9QV^t{;jzdSCVMDTTpSQDN+l`|y%r{L8PJP}NU-!#t<&rfi%rIbhmqiEgTv+<5K?(5LU* z5wkM6=KVaK%lb`o)_g1->WrW>g!uUU8tbRnK84IRguWuwwZM<&{0XMU_ek-l*0ph+2pN#2M4*IkYBkyYWjmdaQ6MBP? zqxGkmVQ&rgUk@F(E9A^1`LN=HMRtG%UH%`xJg!%snKOdI;QWd{tbhv|??*{gAfJtz z)}PONYQ@+}Mzx`V8O;l2LHunSJVXUn4gx0Rf(-1*@&TIC9ICiDQ$Sxe_N_MkriO8$ z`|kHkO@GTB*Qu1oI4kP&#s|p#Q-WNL>L-9_Qh??(4BY>I(Qg}XXmYKGB|PQ%hG-Tj z0W)48u-r7Du)LqpagUrY-4$}A|AxAh^8i{pyxrRBv2FR>0Uv~hhbYqZuC)3@gM3?T z{N+K9-(dY@rA;YB@-IMT4OwVP^zmHvXoxFu87?Iq7cy z1`U$7=B3tYL||`qzh)}OvRDgBD0=76=!L-{-8lf!Lykon9c-pKH%8T_<@1ry)qw_Q-V z)Z9Almy4}bLoFhQa7*HDrtL?EEgp1Kp%yS1u_wWc5FnK|P9z%g7QqIk-nhaN@x~i$ z)%+h(Ul~FPWySt=2Hz`Or_w~Ey+&cz; z_{VrzYpyw;n#WyTmOt5_P$W9tVWFLWr80_r(H5*4a`o4dxqY6aRFq=a4GuONahQ> z57DR2I@HFr7qNjvIjsISKRc<#)zaL~AO~2nIJI?IcM= zJ1QKz&92R@KG`E^C-;Z57a97R_FeTO0I3b)YAm2Ir_H}Dj6Z+u0VC3ce&P7JgS?A_ zjEBR4mq(pQ#|kCw!INmn&lgqQs*OH2ZNvFA>2)5m&TLQLC1 zw!ycN6h7cBLQ1xMyeYXmqO@_BF@+b?4-Bxg#EpbyA2g@Ry50ZsoBz}Hjq1biPYgI- zacdgnIFiyR#^e+^QVw*yB2YOg!nmsw@s*yaaj3n6)Vht5LAZ!h0BZ62f2hSp#>pCf zqU20?0~cDir^lv?Ipxh7g2AKpNK?nl`eoN+$Ym~}zbmBM_9=e;+6W1>X5+hAC{GPAN0^ebpJ(>S z)S%QqaN#+lpv~W70XZd?l0At7!=G6Vc}ueZ+j`B^ z&(+97SKPQsgq2o2oF0_`aMJ)Eo6pp@O{|eOvQCeXqc%)tkYNcu)Jfe;PD3QqGSGQnK&s5+_xBKhTZqXgM^S- z?TflIu?0fi&n`0vqTv3iKqWG+j4nFG%=zLcPlGEx>K9Y3ICMJE8?$^tL_#11#2;KC zeq&FIXubO#h^Ex$|66eFmd(t~Ik>p;8?0BeGXOEy?;koD1M2>A9g+#4F=LyihfMao zxoZewwkOeZbkv9}a=3~_Z?GQB#2s#YYFE%dh~T{iMas2@9BGOW(t=T)2W?vj=4Ros zSccsbq{Vj{j2Emz)EcJ4?M5m~L|l${*fRMhydaTVaAkz*0?}yAalKcrC`_HKc9_Zl z9j3#oOBPjH&r*8hn@CZTm`?d>^h7{9hfXU3EL2kqeMWzee8+GOA#Spn*dOt*^)3D7 z3QSCw%g`Grxz$!h2W1usNAd9j?ZK+w$F(nRRtv?q)2ciE05Gst?k=EeJ>*f%mRY)4 zsb3&Jaoy^g-+tfgr#}!k9Jp9E8>$H6t2RWQX#NTO0va3W|KI0&R$4SGD@(Jbd|bhZ z2R8v$4)0KUvp(73*($qlJlOldT%5gr!kQxKnx6}u!6S#uY6#HVB?cQG*T)B%B8<%) zZsa;zkmbludIk4~N)!$>%J5`^}=#lPEcB-9JtO z339UR-?40SP_i8OlBP)H49VRkaBs98u!y?h3?b#Ao~c8q9#CYSVJhos0+2^yHhl+2 z?e(RaGuMi4tzKp~-P^8Xo$__)^K}f(ZBerS$I8WD?mr9Z;|OXKyUJF_B4>I2UlTJc zJ;`a9N@3blyY^$yod$DPT(mm^Fi(oE)V_vBOT-uzJ1{(8u2-7YI|k$gjHRYU|oR55JscI&aupXW>fQ^(S3%xW7%(r)}2l^{iWRK zTB`KHW?-T0>pyB|e#k#d9fVx1?hpxH!2r}x&dwn^KvMPYFb8bBfzhoc=vDTG$yaWt z^iR_WZMjnd4z)=gnUp7|dcIRsWb?d1lS88DWjjhr0ISreT1wrDPPn(vdYim~hf8=y zJ979*<$2Yp1HHg`vHDkRW*d0%JdKRRyK7N~Cm8(y`Y{vEyzVg9sh>$?I}v)Jul)9i zFScseGp4T^gH`I5!%jk`C&`J5{F6Zds_m+2vv`hH1kX7#btB##HyZS5_>*2gPR-oW zA^N^5y8jW9MUaV=vyf#(00T-0I`mP^Fan9oHg4X@hy_#?)Py)cW|>67y*wWi<1dFz zluV;VKQJD5J+Km{A@nrVc;Y@|O`ceMH@NV6mg0l&U(unYBH>)`Vsh$lsCB*xMgG|j z;h6G*=~eXHv@PpO>G~^s{UuU!o#CuV<15VqOl{os1>UJlsab-Da!m8QVUr=cG>IlE zq!K%JJ<{M>N$2%RDbPm`(`}_M6y4w}e{@Nz1Hu@W`#&75{omX4-liaTF>p`kZBfI> zieM@%PCNJ+*wFCa2Wzdun<(CYM86ghc>z)Kc>Y&+Bpj(kl}wY_(%Y4M`9N#n)p3?F zRo-sHh9K#zOzGAWXNFMrrtWu2+zgb8Qim23oll#{`}?6I0VhZ)1L6_E9AwVS<|o8- zE?|QIF}zp7f=r+Y78x7T;S$7`Fmg6?8AROW}{^|#SkelMCa7}uRgx*n)o9;KTTI^(^cd2X4TMPDcX$Z#u z3e5#JL+kIKu50{FnWPXJ9%zd7=ft2h2eYw1mB8>FEQ9?#dudd;i*A%VjI#jkNUYb{TPnpf$LnVlVK5!- zwEzdJk*;D-7>c_F#K!C{>QBZ=Xh{FoVnLVJIi(VetjX}_xTw0VbTYOP!}|j*y?b22uM1U z4Rb1V<_sGa_}JgQ1%Sl0Jsil*T%}44*ZQOs2LbJ%SCoMLH4EwV^+`fkfj$fZF?-?6 zkn;G^!`O2CyYafl-~V9jLd76GLelne9@dzc7+UCQ|M;2aPT?iCv&N?`c4^r@K!bQ-;Fd83bQX%QL-C0S zw4IB^td*x@olsjal6r41I$?#1Ojko`S$N7KsXT;gfi|z-%+LMJ`eUtshF% zyl);8j@(pVxH$OA&$1~7-3(wfkI(FPM;{>%C&rxir+rhirE#{)-_?6P_DrMSTgUk; z7QGaGb6@W*!+l4DSv$Q(CB#ymjEa?ZZ!P_GzWbLh!$Ms}20R*~L+2D3& zN$ylqLLvx-S$<+kP}f-GB5JO?rNR7^b){3ZmZc;OLZ1s7F*)V7A`g4*@3waZvoU+y`aP8jtq8k-1zr z^}K&+)h)uDDF2F(KOf^i#mvnf_5wZHT!q-tF{VM)FSO*&Hq?9C z4Y(THu?e%d3}!qV-8Ji#WIc0F{rA=GHcN#2>}d_((_r@#SHYcERLZpzHCZ;bsI74B zDu_F1tx5hgvRC3XgfmGLN za_j~EVW$yqrF{tKd+lslH<|fN3rVnN;!clRE0)`J$WV+kl}!*Ni#@cOLXrntFLu-7 zO}JjqxBP;RS&MrMittqI)+@Ke$3*bB)8J)&dgAZfAHQ}V!@F!42xh%wa5cYpWf9F} z{ztVpU2G4KN=1x`P)H2W-oSfaP8oPSE zD5AGpl{&ODza50}c~=tMalSw}3Uw95rRrISPE`W$wp*S4x^}ynnbdvn+r#Sx_4lIp zyNoj54$&uq6{JF^nP|OD>XOdeC>t{{^PlgPshnPljMi_$Pmc)^C&I}E%kPrk(kyop zb3{1N*dXD??~Oz*c5p3gX6=~6jk8n`8|V$6vcYhfZx@;}$|(*D31*_f9KxctUon{q zp7*!^HZU`BZj8X?Q6TC$jdfx`%*c3JD!~b+gHPF+vx4k14%QD~(mHM_4^L$dH)D=CYN)n zeg6Cu0f-%mCPdoR=Dz*;wH(mB?0w-QK!tcq5jlUN-X*xd4D1S6BeGnN+A7qo>7+D9 zfBfwp6G@$6aJgWk7VM#AkSyIQZ$C^Yi9wo@TJ2e6-DpMYi>x)@r2}uQ4ZoLH7xGX1 zHj;>FR?flj7^SyAcu-~Wu8|b0!j!L>6RqVYxAu@)N9ai`^7$7E(VY-vofgp!zBU0t zK}lIGR;%2~tjSfWZ->tytFSgS-k4+vFL$X9e+~^&xhoB7K!RC<2G?4Xr10rPjvmU< zIWeJ+-v5Bq5iW6wsOi1$2?BtpJ!brYHv`Q2b+p&`fGB?wGfLYd`F{JfayfeX%md*u9Jb}cqy;|hoB<7d$F4GFweR|;&IcMEtQBQQDLAq74 z4pT{V=)Zgo7T}@zh33Xan&D#6cmr9{+jqayg&%tJ1#OU-zcl4wXb8ADU1NKAv`XYz zgkMlJ6M$_8EOC0nQFvoY%EQ8#Oz0C_^1$L31%+WO&P=2lSc5urD2Z_J zmU&++Z*gyVGRYWVw{czSQefv=putINUeDS}@LHPbIxSuf>pROr5`Rt^|7jo9lIbHRXmJid={{4n_jRY$gEcBuG-#}M)`HChxV6P< zBi{v@MGF+DLL*eWtUHbI@hl)!fJ@cljg|0rk59IhMPX6uRCsNDBBtli;;3mowJjTVJ)Y^^jO)}lY7#{j|_u>OO>-voNe?R$cD&i+a9hRkZxJN20FtMaewPB@1j| zcRrB<(Nrrw@WfIe8smOOKjv`@kbG5DpBx|3{Hb9=?%&7@{1N!AUCzUKt4Ave5q(%I5_rwR;L-7*+@yC4 zZn657U)iEynPWyO4ekLomu*nkvZ@WV-gsDA2Iw&`swOzQfQDRJ>%+r(lP*|sliE>Y zrIh9~+5V6k@O;TtjU%rgi)4E))0A;P&$PY8Z*YFD6qk)5z|cnC>|+{N*`W?QqDwrOiILTS+UYGt?^-1&w&A0?$f)O@k{f`<^-p9z_c{U&KV zM9)f;9{!_onHUQ&jMl04cZdsc)1kZt?Q$3&f@Mst{O)xv|L5ban|LHOPug39 zxD$LzuE(ypA3;O#y+cyCL-e?yNe8WAMi4UU%g>-)b;N3Gv@KbfZa<_jQ7re-o-!|r zzp)sHCm!VYxFUU1lVnXd+pkjEy$Ma~uaJs)kR=r`JTQ^@5Mv`PeddClf;_5u?OLyqdax&m>*v4; zAa!mXXu3!nl}8+p=?w-yRUcIMfPE6okT0D`zE4j|@OqxavbUBN6v;k9YR=S(ldBj5 zH4>9GKzq0Zyrr817?cyoV}8td0t|2iX#RXL&W1P%Wax#19Ii*5Q%6r!h-9Wi+_n-| zo8ITXrsziK0%#CYHf<)%S|{2kq%)~9AE7plTiPl0=2kXyRcR%N5QBO7weB<*C_<+vX_gy<0q7*|^Isdm`ILQsHdOR0Zibnp+Qc zSuv8%Ze{4)M~~rQscz9}R}* zd7)sQL0CXmt05O6o$iWqXWMH(?tv!alKthF%uxDec`h_eh4P!dr--=5S;*PuBUVK# z<;%m|`R{U#s*|MK%Eylg(io>*va}0)>0owXt|;(Jgi}d&NMI;Xda7|39+hUo8xhUX}Vy zyJS(=2O(TpxNa1Kbw#Alm4Y!W?=EU8^>anBl%h4CppyQ}=ni=t}T|Eh{;06DUV#t3(kk*WhdB?1cEgf?I@ zMR@P(DnObe?*vKzR2Av0b@zGGy{D(k*BAAD#|tsw6$@#V*V_gWWFTXz+lh8n1I*ua zO_GNX%L4UV_W6%%9sq6CjSlqzR7%Mz2SO1{RtjjxRYWuMI-1tvoQ6O{jJU5w6Kx?_ zh^LJ5R0yAEN*X5R(EN;|l))b+(s{!ioyi+L-+boC7kQRBf%_DF=j zWNZsHoLmBBK%GhDEsoTBI1OnSE%_YuUQk9d31xDAn`5#xEN9ysx0>6inyg2K7_|qv zPh7>M3~Yv@Ld9@4`MphM2d>M4rSNSh=ooX-_#8>U@7i4W`{g@N`#&Gje+(|IFrG~Z zmxFn1#flvgP`X_|tq0_?zp}f1)$HEU3aD<0BC3FTjB#GgCFcVX9s&OqgL17UDE)F)VxmK%8Ya z>(RQze=R*wh9*DPC>WB}GM{FnVeJqbLh)j+Vb%s64)2w>GOzaj$;mO zt7m0#c@zZ(G(kz@TC}X?D3la{E;%h(_8YB0;<#%i^p_Q>x#FFcCHP1W0Z_Ag$}m!c zhV~&82z)ftcSq&~&GQpXMEflxQl%{6Alkv`?Ym*zuh}r(M`MSTBY3$fdb=~;nZ?7ZR5q0|x<_ZGCRg))9qH0EfN;y~1C`bT_hWtZk5GBvg#^=+ z$171Mg`D3wQ6{jtcXU0~4uLd>eD+Giwb_^+5L^n_GHT)v9{!sy2IqM6>`$PM4dH+n zN-x+?B$VAQPzs&Om7wSclq)A2Q#FLA@jY-jct&r5faB%8vFJca$FK2&(zW2+fwgmr zb#uQZ3xp5m!#4}IpS0c#12}dANka#B=>DiE-7_y!ZeRz^&5Y1X_PVvk_qk zb%o#UABP=O8!gKm8*9d=0IX2}jis?urxdB?-tk%B9plvM=VsW2EO*eBQztwptSPs4 zSRH4EC4`GReSKd`Fh9q=0FKKPt`{%fdR;6HfIlVJz ze|1gE>wSUuwq95LT##SzdyYsI6`uC<=bBEf0$)Pf{6>}=-FJWcv5wtftF^@Z_=;fo z@fDe4oOp0Fa#v1nn~U{#@wEv0g;28Y$piOI9CZ>)^5T(oC;2P^lxxUboI)W)NYolF z6ccV*xXTxns13_&9A?};-BQ!1qlrB_mT`h4r@y|NCDmg)w zvj<9W863739Wn%cKy2m{+ZX*G4w~Fiy@lGrcTXdwV|4mE_aJ(dosn7v12gxWf)~Ai z4qB2FE@oB9Yg7NdA6<_8@zN9WG|KgeLP9ki8p)A%D?0? zj8ggTCw_XFGpEW>i@cev5UkWB;^-ul>(qA7Dq>|fqfy|*BZ&PYm3zzm-Tal@yOKNq z8Nkonp%NDEUrCoSZKa^y;|G=NG-s=vfh6C;ujsN{T@M|`0s2W+*&~?=I}Le+UqL%L zJx_g@DX!h?qxm$T*wPQsx_-niX(yyuaMf`V@=E|<@VmVYR9fws_X%CBTu*?Z4?lOQ zDfyEL&{)Q=ux{~IQn`x{fKYI`hHmPN4;T`gUarg}Gmc}OS0k#JZK{z2CLFIuM?EYs z((EYvA|sOm?&8UvPb4?b;lRHuLKdp^f+VGV)QTb()dkCNp6^tHXdqk(6-f7?`osfQ zoR!W7^o)b>@y!EVW3kr$rWCj6=-WU1{w~d5S~O3Eb3rG!;Dttul(u<$YfQ7dybfpH z)MW`&wv7!&ll8|f=zY=_zgn6#w?7_GymGzm65=m}N!?mP8*E7M1>~-ze~I^#tm2!a z`50maDWZ*Oe!in1uqP723R+VZsy0i3DaJsYGNerosbsLz}fePlCBGCD_e@~SGF7?#LQb~gbJno3aZ{S7N zL7tQNGy4j$mK$%d*Ve1pQGdII=U3Eay*rsYuStK)Nw(@BVe&g^{sg3na8g&}% z-<%_<%-sHgpH2QYASqjIe`FH^)}0cF%)-1I>2rN!rx;9F) z=s091i&iQZ5`JcYA;nZ90fdsQl!@W;`Z0&`j@{~r9nMPrTny8NM#2jHa48B>DzYor z8N>jof4xk5D5q6|{Kiv+Y_yks<1lPstI;TQNUQfOEvnW30LZ&TbejY+1frg-*bR19 zvbz-*dYeACqPDwu0%0a0fGXf!GzX`2#4-12m74a4C~q&j<(GASc4;hAD{R)an&D1te5vCaTlsFbKX@|Im#3yBN3?YTVh z`9}|qqGn6KQg#CNI6?`2>YHlx@rF1Bi-udvPw5S+z|gz5ibwt-gl&ccGxa)6j1KR% zs6cJ<*Te)@pz#u3e~bfTiqRm{BdU&&NH8Ql$`?r)NZUmv;t~VZx*mz2r|+9x67A#Q zUU{o@CyoR`Z~8zo1B z_W~uD{pDmUH0UFD9u;4l9E%&pwa1jtP79(Dtg-mTbOOWq!(U^R9CrmjVW$p_Xyws& zJ(qkL!r#Ou>X{ri2rB_PMH?39-P_fUZkyY#3ma|vO0>P%`4 zVZ?E&%Xdg7TBKa}fu-4NqoKC>^umU*@B6d4Tduf8aqJE#{mTA}7wKv*b9m6+Ni1Hz z5D&_o0A$u1XDdOZKPvn8j_eM@Ih0+!7;!i&S@npa}OO! zS_(Nek#EyP87CQuh~3H9$bR$zd>=VMlhc|A{dPZBglQ+al8xN6Ixt^I++9gWHN@LT z=L9(Jdf5%0MtsAtPvKNyO$C&dlnuPh#1)`S?i*T;(LD9QlmifC>`>`*Hdr&;#UNBE zhir&o>5aT!s<%$xeRW++e1bnUyrclugWS8-DCL|pCo6oc%YG<<76pOUei@nmFETII zW`dIWVZ0N605IhXLnJ?D_x!bx-|G5)nIubcb124Nl(Mjiha($-*Jsoq1WpF0{qDmNx{aj#XJEw;e9`vCVeFUn|S(GZFN<_CNH@%qea73>R<${dv(%7JCL}7j~)NcIs{?tv|5r% z+w^E&w48HrR7lOiU1YE=<>r=VWh3}tZXuTcQSD0Pmb!`5)v(D{0I`3O(&5LjfJZCH z^84T7wru1som=a7pQua7UIi5IIVybNihTglLWc_}TJLf^Nt zDb#tY`PCMHBzX4d75<+sz^G zmXUw<> z4Gq`2J@*mU?^UA@{2oq1b*kx3z3p&)!i%O52-;!TZJn&!6kmC>+BO%q6~__SgN-nL zC9HPSae=W6V{_;$;;GBsK908_!&O3LX!>^&P**R^Xv6N?LjnWwC8;TrIOKBp*v=07 zQiv{|MP(!Jb8AyN&RLp#U5E(v@6eR^gaeb(WTy09!7b^O1B;h2J!@?;?r}1un!Qdy zTcF_$!!d{yYhOX|Q7gi)3$$0NTlvcXs}LEZd%(uYz75N*o;Uc{Nw2GF0iW`E8$qB4 zVdrQ?L@9uAA1H-QTBLqA+lLFSA!redk$6YyuvU#*j;?Ib_S|Sh_aU1!#@K_I-SrYp zH7Ig%N-ZU;Ajk$FSKq;njdsX|yn+2d3%^38;GnN>R5VZCikH-^A-1F@Mzs{By&)1x zdJX7YzB1%hpt$Fbz-((3=~)Aw%&4g^jpIk@qeB7T`HHgX$eYc>qvz2+=IjTifrm4C@$NZMP z2L;(b$AEiUk(W>`>ct;|SPTq9#~kuFRA2Fp%Fbw1c5e&@gse%;KcA=zg9y(kh?E@__n0acQMbG zyWxo3Z{%S2%YhIFtcuT%h+Sn15H$etNGi1$Ltn7%KG+JG`f^ECIPoIs*Zd)J((or7 ztbfrDqDo?f@rJ>W*kaLY@Wcn=9u}!5Av&C}=8YiqaUR~;$CJPA9Ne6d(G^O2E)83s z=L`s%>K9m7j+2z@!FbtxMf1$Kp*DY0w%@IDH4fY>M1b~d*`SGT3Ne?*GSOR;l^qqE z_cMF0&d#pJCclNC?)1D+R9uwE5BL!Wa#%fF?Gq8cX8#ySAPw~(9nOg}QSJB?Uq@RE zeLRVDcAkhn4;CIyr7HN!O>BK{_M&H!fn)DX;%V6-Q2Ci`O{7!?+W3mFfFTlG8hv_D zyc`Pa5wClU{T0ukyoJ*L=-rW!Nar8-%rAwUnu^8sgQKc3)w0$w;(zU*ZPDh=<^YG_ zVDGhnMy3TmfgWfq(604`P09igfH@cSnJ0W8@&b*)^4+LcsA3cOKU|-aF9+#WqfRts z`MDg)h<3w84*I1!m`cbvE#;xxEX)7vJ{^qBO+$x%SgfbBMhP^iEhS~l-cG{RqO4A! zflAVOFP|8ukKAC4Lny?5S~7r;7N}U+)jDMF7QyAq{o8{*+>F`ks;!a^>*%4 zPV1qHbK8}r!6y9XF$|4xAHr2UXoMuiMvJGbO{+xxYXt_^0+-Y1jyio*BoY29PLBIJ zB^u-8<#@EVMXNKm`DA^uiC%;T$`FrawxFkvoQ1IaQRGa?tT{elCpQ+qtlnXmOX7F9 zr~@6boGwhwu3*M2RQA-|-!c%b6#P2z77+9-$zB>dsLWM0*iRZ1tfcuI9>=ySZOkMT zhg*%uU5oKV$92PCT&1dZ-dDsyFw%ubi3TWHbp9 zBBa3?37YpuXNhsAe;TELTHDTQN&@3sB&h&PcQSeMRGHvF8K#UVJ@Lx6WiwDT*k0bl z(%Dh_Jf-t$c*1y33WZ}YU`VDn(0+8M%yYSdRI0G^OyH~-YI&(lRDSy60mR3&tVppB zZEnd-eR;&n^L4{MZ;W_=5Z_Q0e0_NfZw3VNc9lgg-#f8rh6TnyWI_a68MA03rJH$b zo3fR-xLiO0psiO)*qcw=WPi{6<*kmYsDhRmy)}p{=0p30AUz|y<|rSmIjm_904>Qx zQ+(=Dm~>p}A4Q2ro^G44TAiUCw+b{*D!zCO_$tKp8l}NwgUw|zsT|){o%EFXFR85^ z-=M+BQZkQ81t%`_s@z_7&Z96dm#RmTOiVAqv-vkwvSNO0>{Oq?q@h{Q|R$sK}&*;0$~sx4*`2*Cip4 z(OrtIx6|Mm;rEX4^cC%HNO|%b^Vm0qGx4Dkb6U#)m#8r$#BkU#nNid%xT`* zO^JWnpjxibQ8Q35phv^~VPnS?<364Q=*NvgT-~X$)^OZHBWU;g^Bo~M)}FcUS?6Br zRB0~RcB@T*MVG_>KJ@8Xl^HFGIcTS#?)O>W&_Q`IUP^P)5~7*#r;ML!&A8iqlDK0J z6ONXjuN63P#Jyz%!=2?H60Gy%sJ1n+hPA+{O+h+>fnKbBCFJp=$saoYTGqW64*PJ8xg*`1e;|BCKD2>yn z6J`Q}LJ73BdeS+cs$2zft|$94GdStp)Xu4Mcz)k)n1NkWqNDymUrGLOqGAH{nG-VB zV@~lKehIj-2JqmSv}-CuD;l0eL2HYr#(nYiefP)O zg4+xJMjr0VEUu!-o!@e>Cp#BwH8!pG2)dcx=S^^-TFARj2}5QBad;NfxQrKq;Gv&t z?k2VO%^z*)QMHe5dyiddID+RKM~yXJ`DiDXaI!hR5O2HXCHQ>qe>a8-6st67Z>>h% z=&BQA*Z9;)@h2wI{3qE#DaS1N{$BYqa!TdUU9N@!T0P=pLCzc9F3Dqdj;B#Go%>~T zhl(v)i*irAWHO{F-#d;ye+pO4Vuh6qL36XySmSp+^|#%(S3+R*wE+9;b`)-!`dgZ# zCd}#<4O!k)9cvftG^h>bzFp#>I5#+$1rJybM-=!<)8mk{e2`(zYRogXcHgxn_Zx!UD7D%{a z9rSy`qUV1lUBK|h3aIb~jpBdJtXXJAe0k6S^9ob7C^JAAVa?FTGv4g`)n17LN`}Vb zx}@StpNQq7diQjW-_9`Rq$0u7BEFblSLQQE;reVedKj43D>+Fq^#d_6KY9XeS*87c zKgCk(B}-TVlKR!J7W30c)+G2A^({&b+D}D6henbtGd zr9rU)0P;lhsq53po!!|-`&`HOwtTn6$kMM{Yv=E616s}4g0nm*jnI$P-I+m->IQr| z*S=VScbz}P6VKGT6zuBI$41f_s>%`qPctrcNQs}z0nA>&@6LK=VsAGZeH_Re>6LE6 zJnb_bwAHyk5}|R5Gc6QfjxIDFX-fH|{@fJ1rQZo3LfU+o-MUzXvqCX+}zyzN>}XEU4Defx01 zl%OxWL{sxbs@@?%0WJe^O?kf+RGS^SX+vE3jA~%jC$I<9irhZWmoUQoaeq<*i(YU= z&t&Ct%%;TJkB4(ch2=7>lZWzV5{$M|+9rC`BKWNz=Uc-MhR-H&T#d`KWn#+&65R~A z914T9DNzUzt0)jGtofNDxdWFo$r(3! zFkYO=h<2rnHsxIdCKa|DNbL!brg!$Qca)LRo+pU;kek|N-8|pDP>0@*F5pmM#{Sm# z_=700sw5m;(ITtBe55XM20%D=%;0J#+}NB2Kb$%0l`h8JZ zOsn3)1RvdWeX3Oib}&Yt>LBR%dV?lzBX&)-I&*oOh9VTZzWCRI_7#_Dbvf^dfZRVNBZm-^Mf+aj0NQfE!J#Dbn7coao1KINTk)d&< zZ|JP@=U^^d)ec+CE1dQ{%*AWi=uz_BC@VQWYw7D#R_J#|e@K2iKBq?yUdb}Hbyr9M zL{(py$+RW7Z?*A=aI+>G?8%*1GQcx~${F3qG6(I#1r-}jOF?le?B8>XyDBl7eQ4Qk z=q@wRCwMGK%dOea$3Dm@Pc7lPTybiLaf@@BsU%%thXdhU8OVTD3qOzicG5lH1^f+b z`Xf5pq(&3GV~AHw9^B#p~WkHe5Eh?`fIWHWaBGxGNzD!M7`&g z>e~g3$R_4Zhr>7QFAq`Y3uP*%9^9;UjL5_5(b&Ppgj`<%@lFe=vjBIc%G62uliwn$ z5gg@m(1*DdhlZ`*u5uALl|#y);*_nzv9eAn?jE9IBVaN)@#U zu{Iyr3q?(1fIC9qJ}E>TM@-Sp%Teuf&p95lY<` zWDq+7Ewd6PHG-alKLoJNzelYjj#Dbt&jN3UV!FnX6IkEipHpYE6_?djo4^`IWQmeT z>!OTV!j1X9TSD%(wyVuV8`EUOQ@ynpNf>5y$cDO=H`&Dz7hM7sSCP*~0A5iD5pElzO+ZOFO#nH{-{RQwy`GoeM=&yxHR=^~3PS z!6vv#Hj`X2Oe?7Ezt4ItOiS^y?2^gX@*3fxK!CCVXHlOwh`YC3L-(r5&mI}#+s)zK#R<0V#RPx#z0X+UEg!R7zfm6VPv=RlE^;W}81-Us&07moh#1(PT3MlkgR#6fY&wo7{U6sbwCV-068))878yTQYrrU`<Bf~-#2Q0v%++sTHy61GZ8A=fYNnUh1e8FqXj zA8ZI60FDRk29s*@vNW45eS(qwVjE(;a%`QmBpagPgf_hsiazLMl^(Hevi9`Fyxnw$ zy@vxx(>EnedIuTJ&dvGkJD>z(76H*sNt0$4L1xMN&WQ^%=S3ac#EvKgH7gIk<%c!=Tu(QvST) z1Su)^2gl-DnUYg5+^F<7C6aLB=PqW5Hpe!rTG&BwrUy;PD0cH0)q0bPb?Dqd`Ff~c zHF30HJ!aDdN-XjGbVgx$3eaNmz4tdk7}e=0Q-?P**_~;6vO~1wlMh#4Y|u$R;S2k7 z=0ov`WfXym*+9catjrNtydGH1;67GQ(mM_sRkY%uf$JY41zqwtf6D~e=+-Y|kv8W2 z81Ir;l(}Nc_fh(MFDm`!g2cIV1X;?QzV_G1?wMhS@5Apqj>Nv}dK#!{*E^GZ66{_G zHYT})xAd{r$_+22 zkOKk01l5N1q__)-*)c+G}7CAQokptfyKfGKUCO-3*FiC!3Urmp5@U*K@)yziz^a!5e=W-RzsWBfF_FsQRZBKkiTDxfzl8JV~X9M@}E6p(Jz8?y}Q7E%^|aki9c( zm3W_lGsV8xi6N&9MXH2o+H5df0uvQacu5CpXnouF>WwxaT(HxRrDD)wYjh8Y<<(d> z>8akJ-f>{FL1+7O{KN?4RC_MznS>9rW)Da@|B#2LZ?I|dAuoHVKUZI8nfyzC_5O5l znEg!j>^2(|JOQWXECUeR0MBE(O5m2#%msALGydkaj=a$sFtu$H28#9s3Kfdd*dC{z z7Ito+0GB=Rh#wX|BNa7@I&R8B_gWP}z9Oi199VU+Uf83y@0W_OuA!B9^B>mrr|xds z*dh_5GTuC)w*TTHUwpikLx*Y7dC$9w(ty--oQ5cT@($b<9&cP>Vi_w*_2$ zUZ3Yh%M4q~^aS+DHhtKuu-TE`vW^d3PlCsyxD(2m-POhb$#g8^pw`vi*honcqx{nG zMC@DxxxTG^nMu>gzir{&U#yu-^hkjYWae4N)OOHsk{N$y3f4ZR(?iKXZhX@vh%^cs z?luu)ip}_FxT@lB=8>P8n)S@c>f6!32S2lr7kS61K$A60OQzh-ev4Jrtj8Ze_C4%u zI~NOO%TKhH@eql|TlDO+iP9^4uKxR6z(0Cm;f2>;@hpWkJ=y}E;#c?Vh^}pao!2<3 zF4W~@?|@tFm#4s^-LsxX7Cr1MxM{a5D_G|PtleJ0C+}_q>FKO6xsp-w$R*}(dp`l9 zxdckvx5?&B;!?_FkK%kNY$6&w^gaD%%qD&M*Sw~;OMfmm z-1jAN72tdMvOJV&J*u%9D|)Lc`8N5`Px3alhZh`oZ+LICOv^+j+&)^-DLu&pg%8ue}29z(pARZAY)kYM%CsC#K`L6~yfv z?!f+3dh{|I)I*+9)ixrkJK|R#rG@Ucd}$nzg}9f9KKd;JjA&P9%E;ZFmbJdMW$3(q z^f9$TnL@<>lfE~(!ja4N7+=O$OAUT^O+PKFhl61*lu-B6#gf{i6m5!2ibuglJ9;0& zM)QfrEu%*l=c_B@-=rU@t5Q$yR=K1dF8tOl!jH2~ozT|yCsj!1$GtTMnB&ytFSYuh zT*HqMH4F^vvNyNHYq~S9!Z#_GH$Qu-A~t%34Ps1}SIRzUST5~kcyFktQKFtcLPZ$1 z`*N-CZ}&`$gmDIbM3#UtVY_V&4nQ+d->{eLh3#!F%3g#)VL(X~wO%OnOGkOCo_MRJ z9=vdHp{DuF4=5T8`GB;EPO&!_ml~D9m99b{7t%R85vifSb0ZB63U#_RE?1-rvd8ts zv`WECw*6IBEWso^#yJjL59vI^+2wQWgJ`{T$C?{j5#7yr%O5tRq(_wtUZV>V=x#c1 zw|%YnW3831>I)fQ^aWxYe-yd9(o|9{%Hyj`nlsDD;2WmKW!ES(*}r{gltfHR{_i-D z3g{~R>?vP*M490ml$z!0w?83nR;qNuk!^{)f4-g4ein24#e!wCj-tHQ&WUxf^bWAn zGb&wSrQ{pgOMSIASP!FE$Une|;y&ru+WTUndrP%-w?R~{9WV--ZS;B8pxRQ=OI4Ma zJ7|9sEP~65oD%r)d#$IlLXg7k)fFQA@$mof^c8GXbzQV@=q~A!4(V=?E>V&0?(WV*NuzXk zcX#(8m2Qw0K@OdF`+oP{=h?qt?G?ISmI0vVSe!AhUOKUZTxkYWjab04+}e@ zg)Z3K;V{_S*V#~x-no+~!#)D`)uBbs@9*Q7)qYv2u{f?=56#S78qqEgO|@r(tG17c z%k3vQSBC*vDfl;q{SWK$5IX*9Qz;6ewrFSIpQLACC{4SxWrlalmR)kql?hysI(qJc z8B%)WIB1*kii%BXce64qk4U#Yc*w?L#^Uat`cuI>R^M{h|H>{)+PZtWGn&wIPh#;c zzcEwK-`=l;Qm7s~mbXn58h#JeQ4rZDikT9MIX z_bMr&OACI#uvEwC*Dr0lKTxvZ$IIl(qobp~v9U;<%&F#8y_u;CSKl)}QUBu8E~ZBc z(h~bTw&(V<+zkNrG7#Dwxe;;Y3OBV~7Y~;-LXJe{8GS^^5e}MjP3yQJeWTJH^WykK z^MENHY#S%q=2u6yRMAp6+KdGF;80%;ND2<8v;3(ORZ4dRz8Q~CfJ>tO@^(x?b=oLu=PR2 z_lBbItgNj+yB9ldbcE&SQ^AM6M;LyyWN+CB{4%_>dryW7b_5`pE)b3LY0W@ssu~rk zHNTyxqMB=Xve|7mR?i8ZJEhOn4qiSg$zNg%WqX$$=Xo%iIdOj9Qal(sJ?d0rL&+wh zAN+C~(X)H;L)q9t3*)J8)fA9t0PYqo-2xny)ueSi59{Btl!^hpbzk32cS7ocXIcsZc$%iZF zx0PmAR~+1?0>SCnAG9pEnuf(ItLJln00%^pOgP;sCVvS);!*d2xR>D@4o2hf3t z!l9%pp}bTX+N!rn`7jMHoY{;qFyu!d#MOk(E4jAUiw}CQ(?6{2UwpGXMM69drH&l@ zU*iXH0i?YOo~@D?Lo-+!c|^Pk&@0L9{nRi#ZcU7AATt+vt;vah13N zYy%DX`}=@if&FyEVSEULehpJ1^E*!&ene&BQg!T>%6*qE>vfkNK1+C~dOZ?Ijyz2z!=F94XPz=++ack@yfT9Xh8qxt|#Cko2dA54WSWmb)p3I zilP7dI)}%-r%VIRTHb3Kw)fRz%{Keer+4L)-ct3i&fg%~?H6(q5~dWUi%&z28BL2b zZrQs%dL9{_(^W^;7HvbN+SgB+-fYwL-bo=r|EDbcyOLd-Ip#t~l5}=qXQ7V)MCVjG z7cx`1bO#`fy!?QLuX#%eEhj0o5j~=onmy{K5mwMBSA_ji4aWwoc$({RhOv(;^uB9# zKJ)b2XKrgN{&cB!Z(R`9u*Q`wc&}LPMBPB~2{YUSZ%CUv!@yQ}J(J@DW2@BQ8k@n$ zlx{Zab|{q+Y|rH?{xG&y%2GqJ@=4t?|Ci(Q3BaQ9s2avqfIC#ehv4NWdRG*amnj}< z&NE7TN|rP|R?!!{OMh$HYR1d_wy=nVQ$|`TZL%+5N*t?KsBi(Trf+${%3M_^u_Q(Tj*~YH z6}*#5!LHQ#+sg#;_sYvuGamL<28~h$-pXDSWMo;oqffF8qT?-Iae00Z>j=qFYnW#( z@6&fS!B*im(2Q)iDmQZ8a~cuDZjU{T;Bk{&Pg4Ec!r+AS)m~NCZ zcSpBQ&vFZGUUzszWxnV=CvX=FzavsBHqcs4OJP`Tk6pAexy>ClqWauSIOvgexm!2W zPqXYfG&Ya;VGf7;Af8yjf|^$zz5_A}o(9`AS}6y`y>*biVdP_A_lV8EtpR5nfZg!Y z(vf2X!+{&9^ndWh?zq_}SXU1}Np}_I8NVAmCZjg|vnfj4G{(^VHp0KFuZ1mHoa%Wy z>y?Pl#fTu9!cKjg@Fi`kKE3=F7PNw(m3qWEz_ev?Gg@N5yDn!f3=OGuXF@5L0PeSt z%L~O29zlqV+@DD(Zty`!tBaIVS^o>htiVZ4_oDJI&5g$PhaJg9E(o9 zWc`M(I_O)`!zA;8FF$ay#N09Y9o_o(Fd4NJN-yQj=Y+8 zc?Q%)nWM_zWs`IGxtNo)uarVv>Ji;Ik5lze)3=pZM*YOj#z`o2|AquzgI8sD1@TL& zCsbt+Mi2%@X#)PS>Aj?BFUa0_S@>H{_~OqQibc$}=16)Dif^Cvk2*JB;$OaA; z5;^!F(?nnz)#Zcy<6;XIh{~3t2G;*UIj7iGo2V&`E=zXU+na#(k*qX)4QqWOsJRlK zXA2SH4&FD3LkGxa8t6Z;CK|c5nkoKRQoh&Spy_MgLMHA^PEF@fW^crRG)*0U0m5#~ zzjxUH=+b}ZV=h{Rjr@y{fw3%pf@Jt}{Gn-KWY+^%2ML85l>*MFXr#~!VTk)}h4#XZ zPk2K{f*nAyCwT|{1^5ACK!)q=NCf|xAemeNQ<#zVRiwG++=w7~_W2!7&SiL7T%Pq5 zKEzm!a00lCwPf>gS2aDjDb^(syc}J2J+;}V6I;3OnrRfKA>5)P#raDuhw1Kl<--O? z!$5s|IBhtz!VOwwKp2rB)L}2&)4-CI>q1Q_z5mLn{7xcHHVHYxL=kMYpB^_hLlva_ zu}j}0x|eXE0iTO^B6hRG4!cBgW{u-Roy9VrIRna<*{m@ptwkeI!%6Mr5?rTgSyqIZ zE3;ER)Y|0`S9a{>TLG3!yJL1TVFd=Z~O*Nhje$`1%2ho1TfsLy;+=uFP}twNASr z@8alhjQ_Olyx)!MYV^F*X?krDRrULd!d4^|VH?iO4>S%58iLdBBX}e;TSWeQI*RrH zKPu|X?+*N-zaavbc-BTj!ReW!PS+O<>fYqx_}U;ye#dP&Jh5Kq;6oD)XsUx{W*#o& zUwLKWU0Rw>wc?@Gf&sw+HM-&noqF#4&X1?@Iqv;8LuaNS7-Wf28v&%snj#Nz!wQ6A z;vQ{$!@P6o`#1M~%nF1{!i{=wxDC0}m+DQS=0(U0(V~-JBS~&sk=}qO_S(df)O&ba zVM>#pw=tRDAz<#z?o78}H+WY&U{bWPaKi z3@8!`A2nxo2Q!290f(~9#3cWSz!ux0DD%fVQ_8y~i$6>kntyh_j zUExIY#bVW$ePqB1s~d2%@0sA07wsg~H#CR_lEc>h{+LS4P&TIu;(g-lI5Tev)=myK zZ!iF!jDOw})3LH~CTsXFG=4BOqGr&7;g-{M3v=#N6>m%6AqV6EWG6bAGoUsH7hVk+Bb-uqePX>%7 z%D*tf@pVHgn!X2Jt}I3iEO`LBT{b2!dY)c^X)`T)pEeItTnTr%x0$peD4JWNs@1V-qbY&+)DF#Kg#18^FX1B4T**!2o>{ z-rQ!D#=|2`)cvf3QjWe)k(3%2M(&f~W*Sz1n&v~s6R`qp@-jA% zBHzYNy>{s;9q>r@(DS0*q$&P&(r`VhrWEiT^F!XT6px$(OvCOjXh1)(n4KtGz60TM z860MU?oCOE2lsV$DziYEuxheE1^?RsD?pmwg&0~R+NRY=3gB=s&fYJmAP8u-9bH6Qx9*MQ4T7kw?wvaW+H}extHr zxL1ukTLd;Ti#~px9BQHnvPzsP-Rc-3P$PNDlskmw9T#A&rU76hPv?$s+Gw9Sw@u26 zf@0<9UYL1*#%Sc(nLd*%$}qmci&!CUO}7SCFQ}y!N;2~U3c>wM$Zn8@HZJBGmZqyI=ZXjHR;^yX zkn(o|oeW|tLy#L6_u+>U0HmljrWawq7v|`b0G~vmfQEm3wZm%JE*9y@etMNc}BkX1P9g?-znlB0#ptKU8;e*%I(bYQt}f&b77y!Pp>OvjF92TTXsnaQa` zUWAghqS1>psZ^^MdCapjE@*=_9{^*2aL&O8(3Foy%%OYQKQ}GB;51uk`dC~(a9ic%+tXgHw;ryJ(q-VmG{R1EkPhm8zg! zsKXX1zr*^Jowu6y{~N8#e#*%r823<|GW1S7_CZ+cy}v!GT|udAAp5I${F7IgbG8mY zJEEmP>L+_2B;+}fBt==v<}C+T$D@o?c=}dh^ZA#Z6_Paf7CRCF@R2T%LHBCSi~UdM#N*#8?FL^+Zm-r3TrzGK0ZUCr;6y*sR#b})V-AM-G9zOloKUnQi z>*CQqK}80eot{2o{yWBdmqZlv)-0Hs|A))d2yDm72^LG9no-G{v- z_n9kdTLA+`(yT*u)P>;}hOP7uu{6Y_5%|i~+s)XQ;W${M2_G#1!MK#hwjl8}H4e#p z5gxFz8T=j-e~GKXTkgoHlw6~y+X$Sym)?T&3%sMUjj*0om$vME(EGK0(E*=nG$kd# zrhh&u&{rc9*iEMDTm%fjGb-?9k0uW|UT zOs(#io=-Y#Y7I7DblY3;3x54DQA~yY+Cy<@+e-61KtuGBdP}2IELHnR$~?OQgq|L7 zq4UZk)#^uBHLFw%|+S0rXqeQj>7&a-A(oWaCi z9%!#HkuVl?^ysBIJH}JQN|$6#ACKy0b9r$BCbe~eoS_K0-}dpYr0cP3v!A;uL?do@ ze)W?_KHb|640&kX{34^~eqX!FZC;$B&)w%YN*b(n?rf^Wi!d=?ZgHu@j4!&Q70M-J zMe(t;SUfx^-?Z)L9f!!wpVYW6*#3!YsXMVkK^X%mfzg`A?Swa<>_$gzX94o%yfhQf!!(T0GEsa zo9Kbq47p%HNt#-WdDW&?YOTJU+(&lVZm|VV)pn8jd(iH&_pWxFI}-XP+@>k>47oeZVTABVzlnT5tRqzb`}01WVGlHH$IBKg^_qbGZWku z7S$wg_q=R|sBJM?!kYVGVi5-F0#Me^-M)~^dXlW!`U!JbMw=uBDY$PST3r8CXissa zasQQB@rO%EW|*|4{QE5sv;ia|o0J9gGIR3MUqIex^eLZb{S$dJTli3xuf>11DEXeM z(c~dIkbGPI>1-z)H7nJYKVUOR;ha?+kCO0Uo+4z4Db!v#CsVE65T%Ad>%Xy10EDpIGuJmjlp)2zp5^q;o%Vek|J=Ci z;jGJFYPPMm;F@6Aw$S&LoEk#Ykho@_2x@RV9etek*o7RL)7tOmSKztcr^tz^5 z)}b&@Dn-4MV@KJMZ>JP;6GSqp-oY)^X6mtwRhvK-r5_Bw|v?kdQe| z9qkNjS-)QD(gz-cfj0d2Z+y9pG&T4Ey*C4ah8AG%7+DZuEB(RF03Jm)FQoy zwHiQDvUaxT!^`62$+qn{b6-Q3vFz2&dSlOYzOy!u+sh89^(&Nx%9Fq{)W*^U@4ZV{ zesMc1n-@xqfC>sF>U38$k3>V#(ZoZqNeMf89RF0OiLla@tDG>x4{mSujtx1;Il#DN zQOk>15X^bxH#%w{`pv2Jxpn*U`y~${m!71;yUqW5IIL)}*XAwT>WgcYN~w9?IU7D3 z_BYtH!*k$B9xY=zR~#6}h(hy7s_<%J=M$GIRHhPs?>uZMDr@9(nF%j4{?n2)`O)?L zUS1 zYjnWwZb7#_5bIBG5be-|+t}idiJKPF>v54vPHbp2$BRryd7Nsr$W=35il%B;vjo_b z496!_`qsyUST0zVPPR^oINAZAw@C`G@^F1)@-$W%fl&41#h<& z%KY~iSiA%7FpW&=l(`BTZAXiGWkMo#-xm$Q7KJ(h0L~?*GaOU!p%y#GYIu2Npv1#( zthtwsneEFZ@es5K%J-SBlr>9dGP$O?8Dkhf&twz6wezkm%nPiVP>d49pnk$ybks00 znJC_}m-XztJGWMMWJeh{hQhBv8wmR~t)2WvWctHN@BlT0Cc zC}I5uR1R@`q$z~cJS)#fu@Cd>ya5heh_pa6*&Ns(w)zZsT$EDXO`gjY1cYWxT?uLB zdX&OIRS+P*f7^VB9h-i#GHZHj!r#nrfj{*CSZa$^5es$rp(fwm$b5(jdn*ujv(sWb zjl)7OWOpM=TO!DXH^UyZ1TCap$rzw{PKrVNM%L zgvd-OS@wbgKBas=<_^;nzCmP4Tu|cT#%KRNRbnyHwfr_?&Lv@{9zXvC71oj-ycUx` z;!b3v6T36A;IuT^TfMy2dO{)d2+d8lEcv4BSHHj+2f2c$9}dd(p@G|K>TDr4>e-9U zvx94__GT<$XjemfSazcr>*Vx47I&^Xp>pFFM|Xs(NSnQ-cpi9-ZnBeV&is0s_D&56 z5E1g)0s47BsLecRb!{Q7e>q>FgO$tpQ!CCvPSD5jK>+nI5H$4gscwBj>sIau@<=1{ z=#SMsb99HoPQ4b*l^Ygd?7N~;ksN8MR&u5$6c4~H@;oTD?BL-3&u;Fwg=Z$hI$AUL zL&WN`Co{Da>N(~ET&EoD2;;@nZzu(wRbjc}Q6@`gQ0$`H0#9PH#GNJ0S4z^HJFBZP z_#HQ;KYqmW6Uz-TyWwBVvl!!hpWde&sUd!7f*c^se6J6fDUjo&jp7lY{(bB67dxpw z;g9B=KtU9X$+0uIKoD%|EokvNL6Z%kqB)OOqYZbH&Le(r)L;nnAXE}DL%nok3l4mA zM-PNrU-9_iW+RD5{wbxDzU}Wm!fiXLdM76*MJ$9hDSVRd0w6M4O_k5QF;10zX-~qK z{8fYUgUoIEmD`nuG`Duc%R8e^m*q$aHqRfuRX`>ur3n+}>fYs9L|5VI{|3f>qnQ}v zU<+Mt*E$G|2ixP<6Qd`r?#VAGeV)YrTdxI|Y*;*$32_}58XJgU%*|-CZaaJqZWiCp z5DO5u5;Y`MoCCPWL}ZNUX&FdbD~H|zu{Jw^;V0>JC+Ec=J4|6|uv6{?c!J~iCmXU& zE7>4z^qcPnSRLP~%mFFD*bO6I3d)p6iM2uD(#jzQ6&dcu8>eYNX)*Jm!afNxkS8p^ zpYzHMYuo1WLzcKFPHEcJ=^b&Fn(-RThh`qeHEN<zTYE!h%HzE^uO>^~G$vlDiAo20vyR4r~JSt10`4OD*=k=y|A?lUMo`Uq`DS%vq;P*P( z*E78D7%Zf$rsbBVe-o{bkaT(1*MIfZiAL*g5$NOyh5gpMHEn_>6bs@YkXoNjx8H6v*U~ZewD6eqq>QgWi-X46=!CNJvmLC zkuC`&A%9{CHR35Bur&>XuPW>Fa6%vN<0z3D4B~~C*4n!-Q6vcewk7?mGTpfAY0;4BTx`Tk1{w$#PkFd>96Gvd&LoH7l~ESp zgY{~H)R+tDzlu=gR{T}&qdUU2i6;|{D;!l}#Ny0P?X!jBoLK?PyuQe(WR1*y16xY+ z7-txqx`Gz3lx_c}EqPN8o2E2Tt8trUPSOz-OgY&D_LXT8EZE5FDLhqbB68=QtiII2 z=kfzs&3CuJS?yGOi0&dZ`HN2N+{55vQ(3%4+;JmN{75nL#jjKv*E%ulBRDb6mjj3V zjnf|($yE59893Ihq2vkj3v!{Lxe1I&f!1=y^5RY4mGAv7s^9uW!8>!9!WiREUY|?Z zABtx3%67`0!N*wxSC~|Tr>f=O2Fd=}Eq*30tAOke@C-dSqIuIesLT#yLCtk*sa8tO zXc?`WOlzcgq%nEdELqf{oioXxUAVtXTW*69w$);5E5h_AX-d=ox8(Q(sy`t zdUny6|E$B@ez_gk(h7em=>{@EgK8)#;h!`)@J?jdPBcd_Fi3#j5H4Z_6Qj5ogArhf zQLW7e(%{6Uf5?1PHj~CF@D?MBD}#y!VsD80TXlMA_jBZ@102p4(UB|6FY649YdL$3 z)r8Imewm2t>VFcsL>XW}@(I9!dlHr#0sr&{h-UT%J>W!p8syphD2-AW88@zAYW|o$~DQNt63i#Hdm96D1 zD!g|&^8tR+t;_nv6kbMVdmo0YujWT zr`UENF5`4tOUD1+biWd9u_?`Nl0PG;fOq0B@e)#^(5oxwCn4bW!pEXX!ggW=HJ&kX z)Y&!RnlT_X%H;j>PL@|r4w_)D9*M@NATCsYWp^iXZnW+q@9~P?C-rFzXtXe zq0fLa&jxVOIBuH0a2@tE7J(S@sZ#qX-|-SGqhksbS-raaKapa2m1 zldh$cFzh=UXK|s@2VFKmjz?|>Z$W=mU}0}0TY^0G1r@OKWIFyL*zRp(qSK~RQyLMx z^To>c0sA3acpK-fg}*qcv9?D~$W9Ohn(go4;tf?WVhgkI`Io-T>d9%XKh$nu?n~*U zz8zvpIo*3_-RFzam>-OL?xF+hYR%|TVTI1hR{-Q5D>dMOalWI>c;Ir9vUD5tf<8*R ziiy_@v>XQ?-0$psZfZ4@(p{rN7?+Eu7(K0}9Oi`8Lzn_VigQfYeC-Cgx@U^(?4%kn zrbG-g7^{9(e(>sHoSnX&2LIEd2)+yKb)zrsOOF~P7;JcU{hRgN2t>5d^&laSLG!W_ zp(H8y0eMLG7{-DpI7XP%lqxi&ISGdjAdM~)LToyHiNSFLLPU{#VWdZ1ItWr3IVJl#wr+=fy(9pOBD z?c4`Q+q{~p4c$`H|C==mFB8QXGhEI0vE+$lCb0_77j>wB<0de`HoU~i7pS6G02D$B z2*Fs%U6GzZ-7gQUs441vc5;Fu&HERN4qs4uc{m(D?b;CrdoMR@j|0Gl3x06=_0V(8 zhYGz>z@hBu&NJ057w4DMpv@WAQgT=l)E2_SA~%d|VwL^R#6y&ol=1As3}ntEg7>|B zBs~E#Yyb5TxS_eFTK#)q5D~+jo*zCmp^nY}Q1%M=u$^w?2LSn5DlK|_f4L8xuhh`u zvff0Bu^O?A{)}p@R$SLSL;&^-fLo^7TUji(cK2l1mLGcqbpB9rY}`HtW-CA~C$4!s zV-YQ$>pwMi47s73Y$-Qbf*r-#uI?eU%_nD?m_*quP(1%^O<7&f7icSQ;7t(RHGmYZpGrZasq|T za!~#VFHy}a%s}kv&g%q;7qjQK&$X$1&rO5VW!dsW3ei>5%m3f~CN&>`1Uu+&5e}%1 zj>k`tpD|DTLew2mJ*nc+nb(~=wv2LZ0eGP4>I-B*=Vtb^9*(BDp_=szT`@A`J;-&V zgPOw;TMNi-_|HOyyS?W`{es`VpV#}de!w5o$n3{N5ScTBynF&{CeV8Bvi;f}X|99b-gzEthFD(y`sa}|! z>r2!U!?Au&if@C#8+gq*Z9Vf&J6}<~*o;O6yDbq|qY_`Q(C)wiZjP$=5Tccg* zbL@9)Mio>67x52uEI9e|=UCHpuMPhc6IKTq7Lr_eVRLH`<+b%oy|>r{X=~BZnhx7f z#gzj7F9jjSq<~iK(xkSL^|6DzWQx|PxM3#OwzH~h8UA!BE?aF^Y^K?uEwZOa3>^!z z|NPoI-di#t4%f-x#M8n|y8feCao{h4s6%AP$wpqEK%5q}0VFJ+Cgn~Ar9PK--$yc( z=X~Guph|##fB^dn6l@G1{{$*Md4=WA5dYdU;!jkjgH>q_=f_L=>9eX*_Zm?60mk^G znVb8cu2t^&@z-?iE^>fGHS10AT!}kTbqCT)#&x7P5Iy!t6sPmjmGdNGxU6)_ zan%LL$T>H9r$4A1-;iOy`>?M)E%bpYZ(7Cr+=YtaC@TuZIKJS}*YLeB5QDjx-2bH$ z7GP9Vyl_cLtzQdsoU9|n_ce_+OSxNwgrSbt=$0Z{fuNBvjoO2DZllBV7A?QhaB$w_ z>VBOmO<@b=d+oYx-(;D26@t&*3RQ~hK6-4I5}F`V-4p}txgr&E=XRE_@}d%H5o0kM z@$kEmQJDc_lJdK!p7e&RuK7lmM|ex!6RjXYb-fY^33>r;_)H1A2tYfi)IGC44~0Ol zge)88M+;EUW7_5d3QZk08oEo;iJJf?sz$riWL1Ox-3$v~(Z*_3FZwrMo-hO0hfOyJ z&jkW@V}OCm!;y!AI?mG3-i)3GB}yn||% zoN69muM|tsdFDc^MD07^@HnnAP%&n}m>c!#cg*LeNbDgI!RCd+%wiELvLaQ9&lspd z&&}pGJgNSsUZ!$g_i2W=xrFqa7cAmaZJ0aC;NQeSs#};F2p!8S~ zMZJG>{mxmGB=#*}lu;U!rAjjagtywu_oX|1@S>OhVY;!zpO+MtEglFv8lS6Xn=_MT z{aL$}i5}f_(Ow^_-S=RI7MF`_B*qHUEq`)<82bBJp#pqS?qbpl#3@R)D3)rnzf8cbyN~osk?fsG8^Sc(gQd(vRDUJqU=G z^^|_t>c^~ZX>EO7yAT~X4BNJg9zAw?vj>`w@*>EWCrAXGTII>U8P_l1hNiV&aH9wA zQO(#Gj_2CyIHw*kI44H}HzO95KjCYCOaT**hu#L%oszS$r(LMz$e;u>Eo0ws zDmM{fXs)kz{UfnuMKIvJ0|)W!05HVDSS<1P>9dgOJmKIoeU0oeh6Zcc14itwIJBw2 z_&+6b>K=BUQx9~)<-mWKCF6L91*K1(^T$j}j_|I$WW?gH!mIwg>jHW-s5R}BxN^`d z4}>W<-9i-6>?)Lr(iLiFQd9^`}%-rJh0VB5( zRM)Y$(kSX+kN;g|vVdy?$Ge%e1I9-7Ag!1~d)M8@Jd%O4YnLnS%vKU)_-zlUhy$+q z>VYlM=7FimmGI-aBqPgRsN6iEWS^|PctVJ{2xcXB(W)plX5K4mM(?vilQy5xY#p+g z&rG`_K?Qsj%|YxDs{zfxQ{*0_ZsiHp;MZ}}t|{D&0AqHeS}JZ2Q|goaxSo_FelDRJ z7t#-iQw?F-f}uiX%uHAH#-Tgnf-@B88uhhjKdw<0f@rc>V!wx_1N5B zg6+1j@3}&4IoMgj;3SJb%Vo5N>DS!eg4j8ZB{MR6@;|QP65b+n(+F2ovF{IsK#nGb zoQL=*VyOtCDr^xSk!IJI!HP-CSX`IB{8~lVXUCV2hU{$h%)$vhsF)I$T+Tg_W1~p# z{i3j9nc&H~N2OHt-z?UCq16jrjAyMIcRxL_wvllh(x6kEK$$%)PE4HX(4Y6zWN%N2 zWt(oW+B90QSVyRrStoaRSwqescuwD0LI)d&pXr|B@Qee#8*^H`KN!1|_{)WFy-3$l z<3$6~3`C*LmiYMrwU2Y(8H{I5H%Vr_2u|O4tCZFbEaP|Tfu~utEttIwQanE;D}EGw zvE)b)6XmwO+=gclxZ@J;h-oYQ4_sZ5Nm3M?6o|_%Vg0AZ9;lGzhIjGneRtOk4hAZeS_?6)ks zUDl)s?e=0ia~uK2uiZ#8X_V$#->>ZnEK)29EHc}XSw~o{?u*5HAu4_G^1 zjJs=U05W$V&4QWB51+b*RXG)wv-zHew-7{Spb4EB~ZVj<|deV97rh{{N7&D zJQ>T`L=X^7om3*oVRyRYV2D4Uo-lh9t~C)jKv8iI=;{LYodsqRIdu7=I0%th#?a+5 zwezk8r^wCME^3Y$abq1p3h&&X{B3xSm#q}v%g}gX=hlA~Hjv6l-&ntSaW9x6pDbF7Ct0kB}0Ylk*C*J{Jhr#H2m?11( zn2%*bgeS9bs;lcwZTayyOS!8Y1F*=%iR9|j1m-G5`*kah->g;2hIuLXij4d=_pkcT z(P&5%s0lvIbrbhrB#^UCot4#8j82jAws|z;rm`hH_4uNkcYVNpo|fVLo*7?Hb{bMO z_z3J(tnmX=mMNAove*NAfd5XL`1dO9Dqe@hfgMTFUZ)j#x*j8t_@Mv@Sn?lTJ&OsdW@c85Tb;uoULA2`;suB zR}r2yDFfvJ5zZQovG!CBOBH$VAQ|vI6+!pZX`*>fBL@>?&&{=nMk0iwFZ(?2p?L4e z%bId^x<-xoCZx7X?p2e5(3s$WT?Bn?OreX%crnFfn~u1NZtji@t+CN9c)(asnw>IE zwsyY3H1%BS>?8A0$=?cd5o(ImjNacUw4A@cmaWQ>JN;R|m{(<))NAB$MM_IlseJon z3%CvtnC5g=$)#K$aeeb=4XnGolw(UZ9B&*Y|1?jA!hjuLypV8qqq|X7Z9Rmqf_Os_ z#WBw1XxOX4n@*fbrd;T^}p?T2AFIeN|5#J0?`#Ij(MUQt7_{9EN3 zf*e+;n5CW9xbMlQ{3`tB0PE@8(zPAu1A{^uoYUWq$>8^W3o$#rfpF(p-Xx;zXOf4} z(VSNU-;ig0r!_ms9B{2ljmZ&b8YH4P#3$;AZgX`jXa$AmA&249;<1W*4nO_&TqU;X zfNVuroTP(#c-8T?OBnL0*haASgcK7s1gqYu^CRsK#WXx=@E>#n3wLo^6SqFtA)mQd zw89Da^}rqLD`E|ku*jna>aR&Piv>(fqI|lrKR>e|6!75 zpRFepi-Wa+_Bj5Q^*t6+)4`;6Kg9(-lOqe;MXFlzkx?mN7VlgR8+$^@_91n)NoEuo zQ_Z*sL55V>8t=WlF1o$hy`If#HXPW)BdP&mtg5XDv}4-w+wX?ulZMH;U%!V8J0!L+ z=tfd&ce<4{|4t*N{=IojebW{A_XI<)!{dv6ukYWlLNlWkrpcss|BxQ-X7^?p`W|3cN)}* zgc`9!M;3^Dypc#0`Sb7Ba!2nzy_3WgmZYE@=)n#NCi3ft7kNq3iB1pGj;DpLo2Qu9 zG(WGCQ@zKgK>vZ@Ewtn0h70WT!$cg?hX=&jg@r=uK9(_`rnDV#_#6u^;0E zCgfrzi(d5aE%FbbEc1@to}aTV6MH`E%U!PLEqZzgkSQi;#|c^!Eh(1B$7HJ<{_?X@ zp&hvpB(OAq6FS^dkOeN{?EyKwm+h01K+TAmFsHt#rcR`brUB1mhO&Tb0iB7KcTBst zz@c5MBXWr2N#d|=U>VRGyO8gQo1d~`TZ@i6e`YYM1todB-K9p6kKzb~k4A<{vEkvZ zGTVxfWflug&u8Uzx8-7@Q~6&rv|TqBwyAgF)S3+Od8Hi`i^tA;%mZcPggz4cZbCu#XzuTL5aKi7vdBUVn@W3>uP1Ms3VH zuO2RU4ew`jare4~hR-|b{o|1h;q=q(LXshG{oH0F98VR7uZ*{{%&Y;xOn;->%FZVJ z&9C2(l@6lQ&*u7hf?U<%`rm-K97f>d_W21EEB?CQPNNlFEB(t+WhthfrQUIl?4f((_TeDQSqOxom27Kvm>JGl{5iOKp3 z1(C3mNk>?J%g`A*=hshb#u|Eh+4Cc(hJ>NF#=guqTd{9^y{XL}IBGWh)EkH#=?oSO zuCK3O1K;y~BybL31g_ou)W745+;XXSZk{ppyG=XAq@_rqy&}={Pz|>neR#ur#kLPh z@@a%+qz)3IUI@kkChv-G^aflzyeOcGbmRK_wsY_6cq)y7?r2r>zHxnSIVc#~>9qHo z;AfWy=y;?T<~`v+KD>LLLV`kyl)*_PS1^Zr4GnYtto^(Q(=;_CQ2OFxx z@tsm;ui0zBQwdg;hGw~7AHmHj^-|WC02iv zZL?Dt#RjR@g3rgn&6XE`I`^aG|Ij(7(*S$(7315SIo;$)@yQ@ZAo9VSTFliJD&ZgK zomZz9eg~`Y+}$ce(4R?K2%Afgz{q?dPzu)rH|i%eG*^;iX{~1e9wt@m2lo)LAW!7Q zwP8Vr9hQ*5+)_Kk_B(%2zz>sU45e91t!gfWNjS~4+By#3=u~DmV~1Ks$u;i}X^$*F zTaHO0f={?*>Qc{TzFA{AXpqTlhf>1y=w1kCJ9(Sh5P5)y1XOUdF1)dCZM5s#O$S4M z|CRgMF`2>hQ6|0AGX(zq-BBJ^?{r+tWlKQTQr|W9360jq(x7lo1;c|A&lkWaf z-@b}8azOPC1G}#IHhX#K#)UdqxLGFra$2{1UN31C(-d0R^*iGxHES8Ifoi<-ytmXS z*y2v_|M2vcVNrHb*McA*Ie>IXqk?pIcd5kC1H#atbazR2gMa+i8LRb>OB$~ zT}j$oVHdw~IZO}wL}~nMc-(m*{xyp4xbv28_m(h)WspZww6sH-+}ipdJpNbI{d?HN zmeJ$?#r1;gc{E`T&I+4aab>TT%IPXElG#)^9yD_NdauenS0kS^$I@B z7T%f`)*5Q(bU8c8D6BdQGwc90eYr0auYY>JcE>S}62x)E3NfW$?rLF$cLfn|h0T?( zyJwuUlo+Jv$)sC@tYxmsh}sDK0{7I{kjf6+OanJ!(ZGZjxB@+8ePavg>!UsL^r%faQe@y*yd{7ISv{iS^)3 zML+>YcEU+(v+&K`p_o@j*o}`ai=o&ek3(}gln6R%t)mx6o|W+APDVNdxf5sxQ^F#% z=IVSOf<{kN3kyVPmH8Zy*l;d|LUwanmE(1bYB(Tt{Py$_-hV)9d`da4oz&q<^mP72 z9AIp%6GprYXF2yBQ~rl>?3Q-rXGIj$GsJ;FN^|=Hq%=;qH|qUt;UWT(g%OwL9P+X* zm`543rIAN^^J6Le6lAb~!%sfgT#<2n&oe4ZBkSZdF=;z#m%%7~2PZbqS-+7!IfYE` za{SPyuFu_8B5kkrUi%D}xkA9t+ikOm?en|E-5^q{z7R30zz^tGMm&c*@9jHpu3NfQFQf_a_T`KS9oZ_-AD@&2Vi}}y)a?H|jTKe?pSAdZxsUOOvk%axk9pQ} z=t`FYbp>oU^_F#hv#fXjyo+p9}ADO+oe$gqVD$y zi<)<^WhhwXNX${>SGi}4wsINGTjt@>zrSiToMl5HZ>rM^o+#RtNnCU1PtICcL-O4= zaR};ovix5WHvFTHWSe0IsZr$|3%O_Z916F#Y|jFmW!#5+e15-;>{FI4j6k^*VJCmw z^hw6nWG$?MJ{!Dte|^1TG$5zk)D@aq zjP>*DtnEhp&oAtslz4yC7kk-P z9B`!;PIyy1bF#~XhrXFq#qMs}llt+x<C3Gl?xm3Q@Z2EDn z1|TI^Mg;`iZH~6zsaad$c8!s1-{z~IFEgo&}uzFXsY;=CGhJF2YC`-#3p$=pwN$tnsv*OKO+K*E*ht7UYXP= zVzhCdNxt!ZH}t8-ic|ED;47~jB#)R{V*ssI&G5M?Ih}tC{WNr;@-yhp=iE6gVLr4+?C#|x;e-*qq9KLExL(PRzXEmf}IQqsY&dyFWZ zi!W+-YxJr0!NcttCc&cuXEv8*N0wW2y?;si+LOS2b|TVbZ+qClCdt~rpxbSffXRu>O`n@kAK?X13t2xN?-7R8&Az+ht{!4~s4{%{Si|_i?@MTahL2O%Sl+XLu zvR`YuIY`MkM)JSv5An`rbJ(AMOa;gB{+7>lhgdVijE`%%>zT_1l0?w-`FUGCc-fFt zKfx0|Kk(i0&s$_e;6oi=IIpTjNCcs)U7yccb)tuve`ma1dx_Si_*ZQ%S)8vU(6c)E zrG5nvNV6YL#)N>^>bq0;LbJ1;UU6fUNfqA+uyFa_*xbW>bE>%}%wBW}H}&d@SvX|K zc7;rZO!rb;J}I%%uq>&D6F$b>cp@ImK%1!oF*IUCDwLwu^DFYQrto6Ra{H@i#!4N{ z#pL%7wU)m-#J_W+L=Kl!!dhK6zRGla^ED>nQ;1xWc5Dq#sQBM3qS`lV?j&&PwZI|S z?czzZA+~TEs?AL|!?5dM@_%ch$io9t;(bw+W089pO0j}z>UOtbRQ7r$7~<1%dZ+0; zgidVP)yogD{<&T_Z^(!PLcmy?ImR$Fe7v1rurX!PiXVB+9#2vYIBtJ$T7@nv?Dv@O zc*IgP_2|^mjV3dC#qM#tIdQhBHWiP4MlbWnttGGs5#<6wjr~vN#6sSY>y6}@zIc&M z;BMWD8eZ1TZObuwI$oyO)&bUu%BbsFF&TGs zH0Q8*dl=2>(vzbn+y-&>X7?Oaqx3HsObP9G7>U0E;oh(;EGtFdBh67dLxIGaGMSV6 zwU>;)4_&&WL^~1PF3EY8-sWW1xy|i}nsn~soN(l%*PQ^{(@|`c7nQAOYH~T8u;YKS z6)cunAiz}bwTfpDeQk5$X?J(*qN~w*Nn}m87Y}+aMbKOkr-@cw2adnB=7mC$Ls2B> zoQRWRq4saizW1&Gaz8|rR54l4wf>cjml*X$~LsQy%b`#eMPPdC;jrK(tYMa6UNzq49EUSYASmOdzMXw47iyQqZn}BBa`{%{boDmllz;Be&D9Jw38cr)v>@vUr7U^UHtyS}Svxd#VbAZEZntxV(7J`bZNyCQMUW`n>`?Nfw=4xm zbpQ45lWfr2A244q^l|14I@ljv=Y3o9K-rD-B0xnfA-SnVTrVteyh!;K*8Sv}A_QKa zWDGW-Gg-^$B6IKD+pCc5~X+a2Cq$b$9bol3p3!6B+ zpgZU?gL4)`aLi}CXlC(l^Uhv?W2r?!rEb6@d5iN5eF5Xm5O3g1DnUp2b_g!jaDmLR z^BQ_?^OM1s$*V6r2oEp zO318Y;jy*@XIrIY*Uy)?@21HnFh_?SxcsU2)l^WdxhZe(F?Cooc!%-@Q7-1vci7oZAkZu!=2<^IgX*o=QCUMpj8 zeI1;lZBynAPmyQUan03bGblI`XMx|0J7{hf?}~{|$TAeByD;|V#=?m?CTObS6pMFh zj!-^BH-3<=^aLeFkUW#h%tIxUrkndkVOKTfT#fF=Uo8ET)%J`J{#?QqaF7+5xk;3F z4p0htu3BBs5{LYJiTdRKTaey&bEH{!1eKSQZKONxZ8NX>SS4NqcD{VS?RsfNAk`Nb za8KDwPt>u?l$(r*<@UYfX}N#JSY@{gg&?4VneF5@*J6fUKF>$eX}34-s5vCR;jTAx zgj8MOungP<07`LEuwmT@!L3hkhz@UUjwSEOaKC$=m-QUAQUdnhKxABSY!pC;@@R)=#QmT< z7A^R2#+e0e*LL+7-P=R)ZX9>6BZU!9DWy7NjZ0-L*?hFCVwrgn^z}J~Xp&}S6R$=( zl~Fgp^C%s`U1LQ8Rx7YlNo(SeX7)EidxT+}@$oh30^iZ_Ex6QirT^V8`_x3_TICEiE5;Ro&LI5h7DrV248D3Bc&e%WqiVOu z%A)Jyv0VkTlGt~zzv8&gBTKXMaT~@g_6hpe@k&UY0%bd$uV@k+LSjB55M!Uthnf43 z&BaT#=yJbsXSDZ^uV2*W`@U015-BS@bwB>yqXHT2kgH!^kcIT#^Ev-|hS%AG@lYqg zJgUZRAnSjV;kka(%Gq*r`l@FRJM8v%qQrkVC+dkBB-V;y|A)8+%6r*(sOr&n7_KC* z7*_8mS-s4pf)BaghIYHrb|Ak*>Ar@+L;8fWss6q%e(FRwdgVL6avjFH|qiAVPOZ*=sR!d4H_TJj{r&~+3N`?=)D#*G8n!qFdZ zZKi}9pmOtj3e$Uf$1d(*S_fM=KTt2_B1byAWS+Jsg(@D z25O|`C1#5nzjUk~EMCDlmg!lVIYyWZJcg-+hi73jjd_WJ8*89D&*R?BXQXdvL7?73o=dRKo*VogW(FuFv)KG68u&GVvnkANL~;VXCSeRcE_#ZdlaBaqxP zh{Q_+#}&TG+F=(jB*iD*D{Q=habqHhQG^pFhZeRUD%}(Dv*~jDbW#Q{y=t)5J5KQL zmsO}oAF)MJ#f<2%TkfrGGj6@IYayVnAJkQH-nQzEcsg^gg>RVUKi!{^{!^YD$TFY= zP&pzztgySFe|iNcGu(3etk~l#N`t@Khx9%@jzYX0Blt^PZ8>Cq??sAP(e%4_;+|mN zC&O~hwHpi*3+e>t@3?l-DA>VY0(_zgsr1YIN5@6X4TA&hgcoR&EkmOBm$0!fuIJ-zDV z!RVWgE{u55W}Bi!%R${FNkOzc6}srcyJr#Nl3~i}p&kEG;M7a5f!$NV zi3*wFSQu=pf6o&wlgdI8z>!MhGZWFJrK|#%nJih~u11;_2As8}s6x zA~J_PY7<}nH_dYoW8k=Ehly;+9*@lFn6**r@vW$H`O);^?(t}M$W~1al-20CxtG!-6vg94reijcVnY>dh%6jeEaW?M?o6iK*H;s+2(_Y#wM5k?uwFh*zBl6F>r zzte6HK@#&NNobT;Rg_mQGn_6&UI7R7A*5DCM7yYx3C7{)Y=+#I$64E%sYh0nb}eCtQq;c#Iu?xiK=O0zt;wnr9~srfC?{X;|8TBJsE%EMO0jZ&jBBb<{#ocI$_s+MOXnOb2zVNoJ1OW2-Eh>VPN5u zyoKMPia^4YZWE0J^Y6Q~=t$`CNZ*820t6(^5~JIn#fPiajS~)&m2gvY#jQ6yI@vm> z=#nPf{4(=e$5?;ixm$r*cvr@p`TC4Niex@pEeAO z8pGpO#!;(4$-AO@(AnmITk&v9B7L+ZT}l25D(3#t2XslufS{Cy*$=Y2-ziFb+5oZa z#InDuE@M21e|2U2hy10?A)C%2W1GOIi`bX@9xt~&NFLgs^C^9&1X*wNF;gL0VKM?^ z`CD24MAob(|LKUCQw0uZO(CD#XWB+{UyFVR-rh=`Tn2U&MwkLoEq7~A=ye)Ly}={u zz>^oIeoF}mFJk0eCi?u-&9JRACNhoClr0fjNw4LO{SOe_`n(5xgKTdvLBd~}N!$sO z-A`lq2!}l;+%KL;F#SdI5|=yU*e!W5B(z8i?2SXQO;{R#$L}rmlXZd z`o1k&wfWv1-}J$2)Q& zO6KDz4AH+w$DYh-c%VAzE||X=6m3g zpl(8&69hh^;`sIH=Hc5|)b%Lq%-U~ zPH2s3s9Gj)4I2>b88?{y+@!oD7#5KXf5YFv#XT2PVSqFjws61(zOaaWcmU^${Dnt9 zTaocml;2q!`6iKKUNhK3-yN+w#lSL9J!z$ySyd`P!R;(xU`yf?_aQ}nulPx$CqEa< zH-+p*_Ihkr8M*rg5Xz!a9V#^Rx!Ef8PwD7{Rn3Nq7as07Se@W_1ew^S;Gg&L1Lvz3 zERGbkYUUQX-@swlGXHorut6r%Cxgca>gn929~kT(Za!Uod89YsjG53i4NFHEjT`<{ zSW)JHKO|#f=NeV=Ld8@7HKIIMsQCCd9}8TZP|<8IX-)|t5S#JCz0H?nc>MiObP48y zd$VHlt3c<7^INUHhvK~2M>jExK#8E=YZt3&^HLXUDce$)Os50;$KBr8O+pF17qdEE zYx6P3Qu&IfN7ST0yPd-y3w%Kx7vS+g;gAC}xfW!56yY6Fz@p}5XS~axn#5ad2a<8gPNI`ZFIg0w1kDv9e=C#m6+5sMbB`C7g0+Rly+Jc;H@sAwk=zc3-%Ed=_+~QwQB5B)8iy`a zY!&lV=^ohudys$^wyXtP)@{n4mp)J=K}Zi-PR|9>^i4Zun~KK9ci&Se52kS|O^WC6 zg-1`Y9{_djZ=kN_;#~G}ZxEQQYwa8tu>8~`6k@c-sj#_FwJlapF@&pT?!WOEj1pJT zyrycIkIrmq@r8 z&V#B7;cDHlZKk$2WW}3z77b!kc~>cbR-nqN*8)3X=QeS9oY{6gIrqKKQb__C2{#2%teJFc#`#K z-3a=K0M|D`<N59??_(yj6G-mv6GXd><6hVt$p>Lt=B*E|r(6ZugT^ff zo^}NF=}+RqvzUg}jWv+iu))5@Vwo#B&8x~P=>}X&{O&<36oZ@TywcGoqX2VGhB*y4 zY2jE){*7G@k3rLmzAdBaar*$MJuH_JvvhSM`RvEKj(^v;*DVt!O?nDh-sjXmqHnGu z2BQWcd{xr*R#;8}mmG=5WiO4yd!N=16^J}0rD7S%XCe(*9RW~BT_;Ex7;{okQ2NAPv3OrfcafQ zQ%yOpI`M8Dx$m53J%Jm>mhK%g#C>qRMhY!(MFoEmVcC0A+~7~zHP9!^ zFzG^iIAGbY(n77-XY%;U%U+7m^B}O-#GjzLf;aZ!o@*fD@mWhXda#~)*iF)Nu&(t% zP$W`B3CFS18o23~N#+8R)&;AopIe+EXHkE`Cf!O4528<{gAA(>upM1tAP>vx8GgS~ zrH9j3hJdUjDa(&U6JVh4woL7O*b_5D{zl!Bv(0%S98EW~63n{%UikYzJ#*!em(}r7 zes;eaWEd*44Ta?29I>lkJ*8l~JN*Ihny#4__gxgr4;VP^RMpCO9)sMIU8XOmgPQ0A z(W+_=j^yFhSe{LJD%yv^ccMH0KWeC^?>So;5VfD?&ze%Kf+w=_b$BAWLeMn%ger8&jo zXZ!lw>GDJ`+IrPVeCAOr7vRs*PQitvDv~9dMV@1k7s%_(3B=x0lpT`v=0kJjX_8$(bG?2CD zmoRVjF!0s*24u+?MYFBUUfG{j@3^PZf0f&3t>o-Um`$Cd?Y+tR*53u>+UPa18}FoUds;uCad*o*cXEOtvE4+CR?#ryun4E20;>L?pY2R0VY>lx*QQ z_+2tPnHb0&{bkvu&EH#ji_I4t%H*@IrtxiaJ=zLXiNLJQBI|K7Ed5M9li?tDbAOb= z7n>*wXlo@QSRd_wTK^9~9%}>yj7DtNWCGXX_$2y--74Q${r8(2^HsI?>nYm-5Qdx4 zw>mJm{moByu|Kn~KjjC6;v^8A)y+hFsOPXB#x0w8nuX2B=jYV;-;{XwLjA&y z&S~XjhQ;OH?#*4`ssiCuvGfdEaOoI&T!CW613yf_@JuhoN+VP5oMRXuPl|icFsMD5 zrfW%(ZdRVNz}>NwGs_R=@*{2$-_2|82n~LyaZg@7r=fj(x^_$tI_Ze{SWC9K5m16I zNDTd9nEv`dci53@d09Rc;~t^b-|zAKYV~w!e+fLR<6BjBIze&)haaVu zdiBwMgBbU`RFF}XqiSl6N$VG&IYqUsUcuV7v_j zGr}>SNW26m3+Rmg{`_jpGutQeG?HZ0YX#hx9Z*NkmRg(ky0Z@h<`$n`E6S)CeOR3Qxve(r_?3cHrOh>FGrRaq)$?rr<6=!5}* z>iwXSwM;#U9$QK}rT5 zl~;aUVXUKQWWXd+=7r}1grc5MVL zYu6IyhGbbu)g=hALA==HAl+_7UJcl1m>NI+@%Tog143Y#%4a^lP#{O(yt9lT%_6kI zbrn~5UKKKqBML%G*7T~mr#kXMbb00>qO@AM<2pF+9<1jy+V~ z71|%yw03yR_#b=5?luZ0snwukv&*L$n&?7O(I+`$4DKkfd=0JK@gK-l4Y3d*leX)} z&-u=80jyO{1Xz=J>?+WjogEj^)Od&MSVyv@2aV!iP6P7%fMu;fZjZ~o?U|7O^ZStk zrY>}?xjpQQdt#N_rJxK^reL(#o8>6cK5PR^?AGl>YGx|iU1g=|aR)OSj4l_h2`!lV zsh<&+G0}tjM_j()YE{y7kwu3Izg`mjv=86`x|3tc(v z>Dd#CUIV1n^3^WexK{vHoBA;1yJtPHS&iHv)?Q{f^;GE^_u{*#1@#!fhuPx|A#tK? z`kTG+1U46-RO-OAqWr2xdzWD=_yq_N2p%Fv;0Ri3WDcdI@v|wm+D@H(%p~wa^TYzg z3p$NbPSsR!=5^^t8E+p>er4%Q^NKmF7*mQnkLAa7_M-6~49*3Ke|?$8sr2K^YcAQf zX8peVJ;$i-b3E4S0=Ce8^Kz)mB3KiCfX8Vw#2xC)tT)6E9Q9adqp!+%QvVqTp-e z-jl2PUVwBYvoMLT57b=CU|8VzeRfIoJ2A;hD`-8zvSDNaJ{an>TXPP(Ue)^4`Ip@( zZ!J1t^SQ8mX1EA&m89-pt{A}tz?It$0U5v8o6u={A%Fk|ASht2AF&o5r)bsk+E+7d z^#b-z5wcnHgExc%#smzg#XrVVGLm%P%`&HjkCH^$l+!o+0DHQz_j!s9pQ9eEa+t@t zo&z=R0758Hr(335nKH)OlUZxtd>cA_=ay#{J35zctFzTj+q0bp<O=Rlt%ZOyGO~YWYFfyC(fkW?3!s+%<%|+Z-a9^gh$l9VoP# znGEW);++-BPHZuZRC1jULXKwXycREDE1!v)vWsi=1D{tf)+B0ohiDJhB+_&!|6LBo zsiFR)Po(3C$Dk!^HM*rKpjIzd$%64-O>=8I3K!NLVqBCP_jVxnNv!?qT)42W*e$gF z^87#+Ko|)jhxXyDaE@U=4fp{@hg^>fli|a6(ni2mr39-i9ZBNXvieOHc4rPjNYeK$ zObb9tyQEb3pnsYu$?bn2NV)p7uRZt;E{ad>3)nncp7rnlHw;O}OaH(8R#=PfN}6SV z9`hFNr|oLpZzHC-Wc$KBek%S2_T`f*=k(HZhBPVpq%=ZGcEDOi0n(+ zY_S+e#J2P22?D1)yr`OcO_T0s(zB}79NI&;CX*n+#UPZQP z50P1Wa+f86th;JNGGrDN>h`xWe5yAFhR2Ez?$Ge^0;!%N(_u~qtU%j9wpiH0hm!Pk z3m_HNa=@KTUu?x_^_=h0@l$%P+g;<7>^`8&-vou_FozD-sCsKFgn1K$hi7&l)zWJ% z^3nf}P0jpji4)>#f#Q8HjU9FI-ttI#a7s z-8fIxw>>ZJA`3HF!EVpPz9w0J755*FOWQ!2G;%i<7qC1ll2{*=aEpaPWN(QEkk@ix zyKORIzMltUYyFLr_uG=)grNiYwNtlCrtmjLQQWxoas|m5oN#|KMI(zps+0S#O`iD< zJr{o6R5;RtFYrQX;&hXkIL7p)Ez^*4vcB^FJ}m{n5({Wop<1j{8E@gsCEn$)V%vuD zRWc*rZqDu%C>4JqztJ$12eXS$lMnn&bIBk}60ea@fS`$T;BsHBDPZ3PkP{!#%e0*` z6VD7PrzRw`Yel0$pIwlw4)nPQ(E?zjDa!%eWs+P!5sZj%m3+l5WAYgos7+ zxmPP$9MA70(qnsBdb;&v0$ycTE(n2d=d=kmS|u~QPZyXIj#Gi(KCa*OH1wPOI&U=@ zkR|1txLr&4jbZ!z9N{_f?SBLdi@lhDi`FNU51;G_5XV5w#Wg(`wq$^mBSPx&F`iEA zIiK?}+WmS9RahR#`bI#8aQ%aj_IbArN8qz&RlzBZI!WXRv-r*NQ`fL=x@^7TZa0u& z487dZTsp%k(!XZ}$z$rOI`V#20h|$P9@-Sa>wHT^*t-OnC5FYJU=kdY*mIkPQCgVH z#{%-O>rmFA)^Wr(y=+6eNTsB(g7;|PNHiYXOhAbbJxrh-RGp_vgs`74K76G#Ws9d5 z7+i8qO@Zpb#4rMR#`Q?4(>hTTp}uhA!u%p!iEJj}SwFoiFp;mYe{9TeR?DR23b^0T z*#sQ$XUA$;);he2PO?MojTnA#q5PH(pgrS_Xaq8O6k{6`j(o3o>w!vuX!F<55~a*e;p~< zSE3l&K%ZCCWg+JEl>>?1uYBOR6R2HcuYjMJBpC$&6QWdf*rNKe|K0G!N5u>)`~!-Z zQ#bG|lPw3{jUfG8K+P*4pW@Fd{6T%fNC#@>~pr?H4lm|XBH{t<+feQf>0z4Rr+p1uoYN$+ZX1xF^z&d~e6g4I;WF1Ge6%jFjQ=nKrDY{ul)}s``~No)83LnM)=vl$ zuR$;rKl#gF`YYMJ)D8OLm_yi7oz>@w&xOb97-oG|ZzgPgzI^niyz5>JJ|WaJzeBtd zz{|19`ZhbK{7ya3Gq9LU*P3BGBEt>@)hKD)G@LAcW$_vYL`d;3+P-Wu@zW^dkB;n3 ztP@!%ao*6B;2GNYlQiWLg@y82Ujg#qll)%7OVvxQ1_)tM+!DxXF+v+9cx9wqw3N`N z_ek^XbvL&Cls<_1j(YtEn@`f`gqQoS$isg@C@JC}&~vRyPdOc2zi<`2tIh7lQzGa7 z5IuY3hc*Kh`ti|B5M>yf$ZdrGra^Sj*M!I#mIv#||Cj}i3E=Za;{tnFqrqO-ufH}8 zhP1_h$C%D;D!#=kz`Q%7qry!x`M)rv#eePgl8{Z; zSZr&ba$+vzUWW*+lq$67{(N#lUyZdYK>#piJJ}@IAM9j@b>7mFS(|*ZY|JJ?J-C4p zuJ38y)$-TNZ^J5;z5zPlHIRHMr|%O*zJCOhSeqsolR)t~cPpd$xdsP@>lCQs8E3r` z!@TtsvzwWw8=eNIhaL;iMs_~bGmkO6MD5m z_84S5gpMMASRFaS0K-z5h`dcQyiXfU(ZHEd_REB@H*~ZmapYxjdkEYv~^9tA*;dGX{T zbSZ@8+!wNQkKAQ4aYVuwI?z^_NAAUwgU6`TVXjU%Kk>SFMa|j>Opu-%iaUB&Qde)e zU&HQR0wOfc7dnWZYvy3|KEp!s0#b=5-(~!#q}yX1hLD-@cPApPq0ecw-Zyc~aJIUL z>6`}lR7!!|i1-t^q{x-MV;;$|x@Ds-(kd<~oTH=W6b>oE4+XM!2vC@Pfli(;bcK!u z9!rc+hnkUF$I}3*U}j-rYw2Sai}_-r13;rEpf4J4y*m4Sn#v6=r5o=o?wz7iPM^tz zc6sJ2)L!t1xU-c>%AU)F*%x{d*NH#rE$cpiwBHY$NAvaD1S^sKZ@1Ir z!DE9s-HfmQRuTs+P-|bGkF8q|k>MH7hdlgMpb)+#6({rY>~0}CMAgBfxqVxlf4ip8 zJ~IIV{a8o-x?@$%HqXShYYcEMBcy*Rp5+2}c%qhE?uXw%?&E_0gQ*<${^hB#@W{0X zO6l`qjOd{-V0?nk5UG1osvn?;(R^8z)@|R!7evN#pjed(o>u&vlp#ap|FH2t5OK?D zvg_lFjhP`T*bz$RHXEmNOJQ^{jh7jI_bVzIDO44<)IiY3RT=c-?z`oihinUZsuv3XC1PmMv}^|6p6qOg z^d27-r}!Ha(J44NBNvs}?(-)i9rudz_Cya%MJm&CPp2ey0j`vOqvBB<-DC|GhU6t` zL}P}5?9m}}7$IHE%XIYOG8r)Pbxo0>1~$caw1x3L+U~Oo*_ay;ki2*{%)H>mtKC}6 z5T2I2xBZ<=b_Z5-SW?n6YPS=5KV>?nXa_L+fi9p7>(y%-O!$rYTWs$l^w)On*mBH6 z@3)cO&x0ZYXk*;FZ6&h*T%ySdNQ*wvd`M%YBuI>NS>0F8?FgN*ObwviWT^4u*Mv@G z*VGCDy}czOHHTv#wo#yTFRgx7aWxP~eK~mEjlA?hV6$0_PFJt(VWj+}M!0H2+A-#3U(SMv%nqOY2666@dn&y?Hd3Sy2-k zH_`lSVfy6z$tPho@*ZpB3O%8Tbc`1eGCBgvRB87%(@z!pJhzz4)haCKD4DAPX}W532Ys&-cSyGW+9?ggxM>NA1E-Bh9@us zRL-2wIo7fr4mBNmg+gXy;X{-c4H z(T(K9a-&Y)Gs0atfj9emnEHQ2)(_Pwe;J5)?8Y|&+yX9Xs74Rv3qCPDQ>l*NR7xhr6WH?Z$CX_t+0nW7giH4XC$1?>(!k-K z2=5V34+H?dT_BJPjN;?)&Dw<(WqFvgaAaAHAjV+(W9TqK&gRXUrbUNpH1EI0$v}#u zdeU--0RVIM6%BXLYOLKccDmju^BXH`hNZcB4W+YvyCQ&S+9M5& ziIpOy%;17%8e8$ob%It^U{XfPzwP~0lN3?@z|nF3i0O&y?sMP6l#l2RKN+W%$0~AS zgB?=H(v5bg(YhsXNt?^7@Et{VK!9Zi;z3Wbltb5(yAx(b2fY%QX^#-zywL>e2X2dA z9o7oMaaZDq!=y68(nuplx3;*wGAdJblo^|l$|)z!>U&UE4l|=>tOf>%33;5zj06}h ziw|Mmn*SmAvLYUBzWIH_Q6#?bCe)=Nkj{22Vf&|9bb}{0k0*tWzHEwRH}%6;jp+Jx z8KdFsydQjA*sw@kTom@qgFFoZ5<5A7dY!)CpwGzWW;XC^p&R*4oY4nX%jV$ltncHT z3I$dyZGU30|M>_e>{mlnH~FHBA6TvjvArY7aflOpgt2zZY6Acs8lX-^02N*&^%Vr6 zSg!lrE{w*3PIqyi#r06`atv=Ky9UGTa} zS89bEA{%#zI#!U04fk{;U3w+PPW^d5WBE~^-_zK7KoJ7<{K!K%kZ3nxmupdDxMsYn zmxZ)ANdog%w0>~Fph1E$me4fUUa0oKnd zG}$5f>!mqV43IT^9%UE zs#WD=5jaE76H4Ts5~wO=Tff_}UcY&zJ}nU=PvYJplC4gAtULwM^%efB4x`zUH*auSg}9mWzTMNaMcV`*QJL+1#kl@9yHE z5GN>v)hhsXCK>!v9Q#Itdfa+3^iPIniltk!Jstz`rA=>}1HH~3zv~UeBy%VgoT~7D z2S1w|YRDoa>6DuVA*j$fb=jX__=@CQW|s((oN@{?U5pv!634v!kuw4AkPq|DFRqGH z`WTjF<^3)bU%@4{GV*+%YCd+)Wp5w-%-@k^(pfz8EDf4iDN!`5JURm+2X+R2%>+&P zTAXs9W*C(R(|j#GprX16NMeaW$Ey7?EjyM|$24P^EOLUz(iO)GWV!c4m!LrA3X8F^ffX4-7>7@bltl<4G1T%UH4Er55+MbM+*E+X zt!Tx!8|p!qZlnHLQBb&8iz_$q9mL^F_0-G|Z*JIV+}@Z0I2&11@gsGWKv)=@4PUUG z587~Lh9k~x-k3(MI#(&4uJkD{dp$dW(`*^%eUc%PTy*&;GFeMIadW^tdJC!$t3(Lg z?rH&|G3ET;D8uaSo02N`X-Yzd1B{Rh9Iw1jUiWXko-)Hbra#1wb^y5ktvD@g$CZKf z^OJ{w9v#9Xv+jt}I_S9leCg^+{$E|yOm73h8Xq3z5TF^!HB;n-{0O;A4nz|C8ca#; zHcDM+lSL7NT)IU=1nX9rKX*LLK;?v;RxO!ha7UjE5nB_*jWhuSTWz5Cjd-X0neZ#P z!QD4jkqq%vH5*eV)47&gN(0vMev2_`I#<370PA5j56mhkI=)*Hvz^0KKI0~Ob%1;Z)!j^H*OcYVgk}>)E z`7)O=3NDnhHhn*FzC*tGe6N4`gXNoY_ALi9=VTxW9hCx50g_ey%HcWn`Bu)%kz2onu)O^|5ZzVRwO&(vG!PEcJQ-gc5zAky&q#TX~XW z?`p&~m0L?80~l&`J^pNTvxJB>I%U7c@v5)bnsoX`QIEoErU#z z^gT}|Lsz_s-KpnfP)%&a4=FU?5u~}Z7fw>X(6$M8P_#J_!*?uGavaz3a?t~k|G_gY zye<@&7&J}+5V!2T%0yc!mR9IH?b*5k-m>l6w zQEiZ5w57&#HRVq6Llh86gG>Ff1py)yb{B@^PT`-Um2S9TS3%)ufvwI5wrTrh)5$dNf^Um7%--h<84q}Bf4}xKpi)F;tZ)o%bgQ$_7Q=uLb=+KP5%Wn$U z8PzhEBBm*xp_Q9LYgwd-{f&8Gx^-?uoZUQ7j-u4K&rtXjRT9CnasL+h{VoBC z5{LmDKkm_RL1fX06?Gpqd!SGT;X;qYg4Fmwn~fOjUAuHI>2PMCwUdJ%$@h%VdV(Xt zM0C#}HRQH6SheTqCUe^N=VOIG{e;?Le{8gBWBBgK&c}A7PJiYs$^}`|J^!JYm}b}4 z;CcaAXypbV2GP<(yuuoLF5f8UnG<|4Ofg3`r~Cs;xOqT84OH`aI!f8y z*m>%?WyjkK$xPmfW!@AGC!)F{*QqhIfjW9L4v#M0VM7PvipAI61IDCZio4dLnIB1i zt`Ow?674!KAD>|A2U}p2SQA!^f!=g_xAXo6w5s#oAs1cB&3R*#{7cTvNaX$@u{c?; z18gJA>-y!saXuIm7mVrkD16eoLlwyXVfZ=FowE9fUCt6|J3m0%@+tF@ix8Asbel>D z&%md3mU&vX`xdd)$oj+U6;Jv+^KH7I(lo@kGO<{3)#+gQg`urhQEbkyEUA>{Jp(#& zxC+aQNI&7NcST>O0yl4Ld9}~qXQD|7Ss#mJ(3mzvH@PT0(-@^DvHto*xr>dn@9yaR z^;!3ks0WEj(AQst%@BkD+QB+ejN$?xKOs4t8r@V+_Z6=M&}+l-b)rldd-@2r0<D=(* z{G$&iph*ooz_V!>yXOBL|BUC+nkL0wVmZY3lVJhliZaWL@}p|5{+w$fX~~#rP8D*Z zi)jxMD8*pH#NM=_wgd`caF>VQH9oDX%xoI7%SKdD5Zt_~#?DHhN&&y2%0c^fIpid0 ztbI@3<@0{wDau{Ey@{l2Oo~BLsL)@!qpx)Cr$8TlhO|$;jDLp`xq?*yM`1@?a70@{ zU(@Ay;dS<(2UJP49Kzb{FS3jjQdsIaJ}}P2k|QtV$_jDjg1SJdN_;*SY=m^a=( z`R)HCKp5%C*lEn7r+^x%xU{d8))PaRAnK^m^~&d#1C9cC+YF(4JCeLGt)~{P$5AfR zUFmsRg_q5x50ZE}jyqfrwaZ~*H^k-xsUX-GH`qV|G!{e?FmwrT4%bXv)67fTz)m@m zS1BfV&iX*^hEaCD8f3LPRXsbBY}@F0YFUw$QFS$CScax9tfohsGpfDQ}(GG}u39BDU%gJM|vx zhyBzEI3M8OX;k`EFkqRPRB5 z78dy&YS}lQ*I&c*usVzq@;3P?!R;u{5Us|~Z`E?Z&wLC1Nf%X)hhEQ)k z7ne&9h2b~+Ow1pwrISnrudZ6@v}BiWnoY_tl*O>)BIt;NpL|U~j2z=6w#lrNhao@t z68%y<+QmF0HyUWe*GSTmFCWu&&q{#O2Ru{uV2@m$iMfrHd4^SLrjtd!{aWxG;lWKi zzFM?#UCn%n8cVt!1XXwyNKo01N6LslWU3ov){tiWqTw760=Y~}h8HS@^7UX9jr+u4 ztNJ5Wov&8@V8pLJw@`s@&{k3)I(BYSpwFNy8-?zJ{|>SR;Rr!OS3hOkNWEU{Y814{ z0`)~QekgrlCPS!PQXzk7iKCwm=5PnVDS(;>i+NyIM>H6<2Xr(o?PiEZDd0lqcoJzL zfJP6`rmuflBx8w)j^~HoYKi-LURl)N&%)p-$YV2pR2&&BEO4;)Vue z0|PAkk{D0;7hIG-KUDp&UO3Pm3!lVy{6y>s#gkQ|1cQA^P;M<8D^flVL{1((cOYs; zS92(>iR?->cJN?%t_0PYR&EKC=bK_I4&tNtyx7RKbGn6flCPtDhas)WnSY++(+4$b zBe~lp8qlYucH0;E3FI=H$I2@`<*;c!AHS;haF*bM8tAm(>b=4z=QpLX{pwgy z>-on^o|&faovr*baX=r~e0g5Jk5$RKBPBas>gNFs@$t~4d?F@USI-^gX$Brn4x0kiWm?z*e zQK6O>a<*tsl3!3_o<*y%t*MlCP&E37#(frBT?`5o!x0eYCO2x?NZJpIo(m;r1?lwG zwpYARs7z2tY7&9QHW`(B5Li7w$N|G7%Bx0QUw-v9!E*jkzV{P^{5L-1J=C`UK@5A?=o*a3dXma+lSKsDn3gf4p$*~;0v`l4wI!ct=_cJ6t{l&|!H zfC^e3rA8Ae9jv5#)^Umhb@C~x6bj;xa=?ds#^b$=K)FK~JNqF}k?qlyq%xVfYlJ>U z8<M?gi&lA{4%&%4d_v+wY^E2@`a16A2TFR*$Z6-yUJJRa4KfH|NbyGA4Wnu|^cy z=w}?Z--G!PjBMSa>Hig9o~XMu>0EkaaYZqI<;&=@gvYI06~wh^3$8jZB+N1XM>^{_ z!ZM*W<#vCI-zXH?L_SEzv`an2z~Oxp{Vrx!sppCk--qV~AIy;31nY67+>z!F{$1~Q zclpR2C&r~Er1q|eTts?k)XFzOS{`fV+BOJN1cS7cd#KVXYK_NQ03~0Itc2>02rCD0 z7{zpm>M>1-+8O3^o@E#mZIGu(^u*Xb8?9p*swW#bva6BGRc<=>r`>O0TV&Gs(AD?N zOdId=A{mMEh+Zw@4(BggVX>E%Tm*~8QR>Ll!0i-Q0l*j&saE|Gobwaf%5LWw*}Xu_ zMeds-FnanlnSSSdPoA&8^|meAd8n|@94MvBlVlz_BIU&ry8{g^hqY+pU6{|3ykz&OFF~BRr*cg5)f7O7Fo8#&Xo^k01rRtrX6amkhgX zNbclDwEnoxp?MY~VkmZNj)?>B9fV5x{DL-~W`-RH32+1#u^PYa7{#Vsf8c5&lz3Ug`& zzO5Hegs>VUx$}6I+a_Btp1@7xd)fg8dIG_^;d;5mZ#$jD^*U;y zsnW-?LmzzXbfi#rHkZSCmvl0k!{@osKuqy<5~%ZNfV2o6b_tQ1qY+VmBorvvV&2ZPuPUCz9vuW8PRXziO28yylioEQM*-`%qT>IXNeB)e2? zc4hif5r;PwIft5$FM%R)7iz|N3TQiD?4p9CSF0UQvek#|_bGjSrGF38Sq*v;WWD1> z=GiYqmq1|ZL5W@bwk`e8c!`1dBL1DS!xijuof~|ji6A_sM=K-uHfh#R;r)!a4+zB^ z9XL8O{MaGbOF%7<$8G1?cKy<%YQy!myFPxEovxx+ToPD}f|M#J86S@45N}L%d5#BD z_nvvM+n*A5%kOF(U!mAeg&g2{9;$j?dHN?1sjNY|Ux+&ri*;d(B^@bs0 ziiBzt_D!H!7wbj!?)603qn8rnb7uKM3ck$lnIOua{$N<-=y`_7 zQF~ucj^F*L?0m&BJX!Mheaibdo-Xi2c66m0(y|H~9Y*YWSCZWxQ%MOis(0Amu=<$D zejA8~^?p|W8|Q{JYdIr-g3fL#h*XwR%^n?m zb&qwbDK_CDH*AjBW0Zzsd0|Wg zlnxyh2A?q`?>Bw%DYz-`gsJtJ=Bg(K-e63-lUnO0Q8C!o7ud{0YOq!evJ+}^Ko4V5 zaM5bCk9FzW7`gN;UGT{*hP4}M;Po#hMP__(D|-O0G?vMS=L zqQ5Se6)~;69`b66J>GP)HaN)lP|_TexFmoM)UJ~pJNEOo z=7#KR3i8{}#VM@Vw!{%rRGPs%h0i-^d8eQ7vA>HJI!nmnsA@w*B6rQ2pHGbd+*$hP zo%k$G_T_WD)nF!fgReWD$6$P17lL0heg4?@f~QWp`~ziin_hV1h4wQgj7ILN1CTF1 z@hBx0Bb&&`hfXMfm_RZdSbJVoKNMi#VGfO!LgKdMPAil^ac68FW9bb`s;D0b*&?l1X6Ji%Rl@0C$& z%Sza{HcC$yFGT6L-s7Llg9jc3SyL^^8GFmeYlpW#MGww!^|&@T`BAg=qugMLH8j=X zr!z!f<6;+iZ1oJ@K(fa+*Ft|mABWz%z?MZfr(Y#{(LjH#P`2|osvt|p*;tWR>`#Al zY=)eJ?PQYc2SM8e?0lncS-|Gv@nQdRY4moU7rw+sgUc^GL&DNfTRpZ0EAbh$J~9l><%kaAJ5nDtqg#TXbQdoJK~%`*E+!%G1Kh zSI61uJlPgFc)4Wu0%d9$*6v=Fb(8r?rdFC_9sVy@KOfW7u5NRTsDY%-3i`Sp5vpu$*PPB1B ztAYZsWF=VYQ3MFZKsXGdqQHm2(vt15F8Z@9|EQRhOmT>o+>yNom-_xxZUJbzsG#)VR~Cu)yO`-YoEwwHTVINc zF$V4pO9+hK(!H4rw7sI5dX$^SJl%347D%FCWa{_Gq8CX5DR#)%e{5X9tE4^b>vIbJ z^~BoPJn&NuNe&Z4vwm^K{mhKSgQ#e`i3ul}5_AJfmF z?>b~y@Swr12}s(BnoOyR?US+wk0FK7DLcC4a3l)VW*T&L>_!e3TK++h;>;Jz1&>)` z!&Ml`c#ei)zf4n0=yUiIy$1dbt*9Uh*1)Sr(OR?>5Q3W=R0^Q!BOT%=h|-Jbq;R-y z&!v3#zJ4wGK)WJDImJO4;Yd&>s2L*JaOVANs#SP_Q+qE};CK)m$Q&3K9(}W)g7O~xYcIh(tZ*z*B6lf4W-y+2l;lZ5wDEFN2l19flJp71COF38V0NI48P#wg zau7#++np{Gwq7xm8o7NO#;5&ty@t`Sbg-7Mu2Q|s=g$l9JRea7xYZ^G)Ly-bQZTfr#HPNJ z^jo5?9hSAyE8Fj)9{6;-aiT%VSq!8J)C4fUtU^)TjOiRtpe z4zlFE(Jk?i%lJ}?WI@?<`R%!O@p5mzaOrgGR5(2}u77++t&#@l0rN=HCF9!Dy;_Hs2= zt4BqtfaY!cFw=SlBN$~-Jw zk%8QVSfCwQn2KV2t&m@UKFNYitSdJq=g{a!FSyEHb)4mGS^*6tlS`;#QJJ7 z=W1e+lpjeq!)vIX9o~+(oe~=pcQ4850c0rjy=p`HcO?92-Bn$|-IG^`U4}Y@^*vG= zp4oSqW2AX$2OmcHLzc@?yB=pWuLhYlqXTJn`^MRBy`dPW(;bt`m|r>~Uk!EvjL{Br zN4{j5LhBySc_lkO5yWSIl}8()kt{RJ?oSg^c0E(=Jd+Y4o9F84i^-A(M736JB zMCA(Bv*C<9{|qQnICIJ|DS!TWkAQtUMS(KO!nppA>XZ|Q#tBSd$ z$3;@}8OQFE!x&ys75$F4mxVbqNcSmx)iOYQd5E@YV-mtTnDsq>0o{M8aMg11)>lD> zA@de|LEE2tle0>n<2eX@t}Sg9-_K~{5d9`#-wp0if_lT-H{?URlCMBDa-uDR{x{{9 zyyNG;7J;Qe#B^a*H#q@9iM%?0&e7M|y$-SOw;L})%4m!P(+;=bf3Rtg6muLH|4M9o z>MYH`x6r=p^WpORd-&_iTVxk(Vh%7-Nmb0&?c*(=i1+SIb1t8ayuZeU?!UQui5{`qweIHLle&qT73q*beheRLst zQ9WSp|58Xj-I?yOmU~d&@)X#jA#DrK$GSrGn)t@MoGmm*tl*2^emqZ3xn9Fy+6A*9 zH9VA+)~>0HvZs~Rj4=4BlZJA(%D+(>stg$=m3MiWHA5E>D1#5&akzY>dDH{qh&(Y~w44~KLRk2t4^qMmVb>6?h1h4;K`}ai z)pp~~x!ciW^urP6TEjAS8WJ~ou2vg-9Wr*YoqC0x;>;oL5`E0$0{0Xz#m!N#F#cgK z2sY*Rg5OBE!z}6!H0w-Io4{w+bHL1*&?Hlh}@UFo0bt^q%jCcz}H3|rDu+nUExHJIXvVNL|S)v z5wGZJCN*sb-9yKGEh8h0V*@i>91pJgv;%W9uxF$yhmg~$9emq2Hm|)H!l?@rGkV%^ z4TeZh7ky~tjqan7_MpNv_`1J?VA~uTQ3Bc>1j>0qiv0KG4+V@=>&&wfUj?H14o$f} zGgi*W@br4u!}w3p247#3q0G;<4=g(3j7;g+-pwlk{g5sH5VEIE2|dTdU0EEUHSWxqXF52){w1pcd53HIrYtr%9^tW zVwXefsYB)q+h@b7HG(FomZ3MpEjbf;Wwncr`=~q5Msxyftnpvl6EfQKF9_HYwmQ?f zamK;~xx$6aL1`MD+%WcbCL(`C(1KEi6P?%v3%=Fdo#ci8YH%Zbzmgf0RFj#ouLIGY z!|0^7dIA2If9Mi8tZ zK9pMTCRxA@hmS?ljz!I(Qg5treX5Z7wzaX)Zv-=>gPnKx=}7K`T|Rx8tGpR+2+P~6 z1G=v*8&tIST@)i1GY0QB9nFi}#s)re%R9UFWl$UE>C4ymCeGxxnQ6<0XUPe`lnQ_IQDydrm&?fO!vfni@}gfVnl(vPEDaz}zK>?HP6sWn>pN4$Hew zw@XZ&`jtFNowg*SbbTB85TMLGqmDXXhRcKvdggQu{4PEQOG_^5Oa^MEL4H@FLidT1 z=-H&MvM8TR@uKZ^Vj(^@z(9o}C&U=IVSD}st3QPchMSnW0C|RcjGQr3h8^8as*|IJ zV3q)i{mO`&ZR52O50FTqfh?KK^vqk|DmXH#XXRwX<%~K=&yKRUh6e*y6W?3N&dkt6UDxaGmfQ$IK({#R~4pGyo&a_YG_ScwZCrPs zpPOReN~Jx1b(O{J9W!qWjRwP2_QyU_DH1{9X^zmlt;{j69LcL?pR4`Y&U(~>;ke~n z9XFn%(vrZ@oB(e=a45 z+evHsfX6ZbY?1AcEe44b4m=Z!1sepo*#~?{34M|{Sk$ups2wG&EYmSZv(F^fjHjm> zqJKFivVIL<%*U`p8gAl;VVMXr{CQOL<;H&B9zJ^d?03c>$Hd~}mb4@bu;L(EJE@EG zN|`>k)^%#c^;O8INVd|h`@w5J=Z864R`beu?`UGUT1=O3Fjj_XoGKWfz4IQ+&rpSs zTU~MeWf9>TLhx*#{#}m;qgufcPw$Sl-dKvXX-@aSm(=%H22qC{nIc>3cbsI-IWqK^ zH36IAabJ2t$9+y9cv2Rs`Zu5q#EY9fZiP;x6O*A~BxjU4JyvjoKAW*nEb;fx4><%B zC^59(c2*CTX$N_(!v^Ybh5MrL;S2XFKNkO1ZMxG)QC0iHGflnjUq(}Oc&Sj7vx$_IoS(kx0vTTQik8Hzm_#d~%f$2S zDTM~F_z*3rRI}6t4TfI|&LIgKktPtyo6%0wr3)Sb)J!dj^1H_imDA~Un1;bq{VNns z@?|cHv#IUf_^&YKisi^J2a8iaqy*pzFPFbOi-o zqRN1wf#lfgvl`_y68zKjt-ITjkICKPg;{F7H7x9C4r7jwB&C5r(T@cBe&$THrP`&D;3C^_$^e#Du-NkdOEn8RCGCm?KMLCZA>j^0dtHJ=&&7Ws6= zDq(8q=`PFT&>Cve zYWYZul+3x>9~K>*MV+Ta57#kwUY+L^GMlJ2iA}6b5JwX3%N@s04>_`d1#g?bph8c2 zwm43*%m!+RX4A3*R%e9tcHWV3T!Bhbe4qsi{D-v=pR+#>FxsvsXz}Q$YgtPT*~6c? z8i|1tF`L*LtkhR;j-RCA;L=#yVsR*Kzw|qW;^izSiyN z^2slZ<_=>D`5Q8i44paX4V?DPzff?j=6(!Va{j=V_2}w)ek^gVkrVXY?=z`7qJN5_@h7 zZA5F|IG7>AtHQn(F{(}a9@D|%65pEJfoETYjC{@<$~J&SniJLGf&)3hVlvl=R*H>3 zdALPNz?4BflV-&sPurcK#m633W;$l0!Y52$@8-$r8-}Nb%k-;z8s~Oe)<%7Z=5%_Q z;=q(I&54dxM-VgaJqLZkOZ&<%}b7#B*471UXM5^kpJx~u|Og`xmy^qo^Ao`gc{WfRNy}rYaZ0qo?-CNjTW>ewFW}ZRIO%AvZqs?J4phNf5z$+& z4Gq46E%B>EMtkBy*3u*guJsVC8Dk8fL-WQ#d_wg09NpRwQ|fQyX{?cNUPy$ z2wUscE}D~zc)#gi9@r1a^0!5yIV;7xbYdvI`yX7_yn((a5l!V_c|O>?sg`PAWsV5a zLRb!NzCSLxsWjiJ1jLoZBi?m$vzNIkX!xua?FaI z%O%p8fUE8E8%jN<>3ORs-*}x%6rxjpq%?4-O_5u<^6o2p@9M)mt4m5?ngqeD)g zUVzIlv(bwO8DuEaFe5?Dm+tbH#uO93whq1rtURZXKxK`La*s}9hcq^7%(q>g4AA`` z)dva#MEi1&U`)^|)%m_woWi|`_jQiwCkPXyw>Xd$&T<5qq%z%&8~ttkS`Z(br#N)UQeg0+qrba${cgVD zq`I@4e{4mTq(qiAAI|V`dT3vlU8e5|(ayystpr`T%seQZJQcM@aO=)QZZL-up3?Z` z_tiudm1}AL_UtWi2KrQD0MR}E&Wjf1u*6+jA|`8uwP4Uo=rMgmyAmA7tVx_J3PmaI z*?sR}7z%|^$i@*v?^#@Ib*@ZtaP6fBkE20j$JsNv{zQ|_=scB9$UJiKd8x6FJHt`f zFN-zgf;LjhXCv3>I5;=L4PDgj@Mf?>+`T;Qm$F)y8aGV^Yi`uzt|0-c`Q zlwZvXw35KO7GId(3!%H(qkFOKk zFV&p{Lnu$FDGO>Pz!Vf>oSA}%Fzta&Zsy{{O0t$)yULGXjn}K6%(l@zs#Qxf{_CF;V_Ph zi!-sw_nTp)5;yt9^kWCrUCDscJfaf^x#W&k>U{JF`ZbvQFa zsn)(^DIEm_okunAC?&c>Xr)by+P_Pa_APP(-E$%1X#sr!6MrHxi3dw;V43!xra0~a zPo9k>Uz@mLqz0)JevhiyB|d07p9(EvlXY}`Z1dBs z6a~|x4KDO4btTznnUojMba$n&UsrE4T*cErX9=Y1G@FVxK2oH>oPeYzgh(^p9MS9m z8~+IfTNu8sDk!~#kzF3FjCjh9{@Ax5WP@i27D1xfi}^RMIoLd~f*(>S|9f{Q_gD?a zoIbb!MlTHX#8+t!sy4rjJ60VMbSp|+Hgf&8~pBrHBlK9whHeH-197uR5RUOrj zR{5yP`JBr*-rD}n=%;o-U({%X()3#)Tyv>Fc^~Hm)k%A+`Xe5g$BMevuDQy?m9WMH z^a-8*OLRrA4e`I^K3)20IrQL&Hp&L`ByNY5n8urECCIxn%GU8WTlw18BbhGx10gri z$K$J~_J~+N4-mvC+>;Ndm5B%OxOgEF>Bv!sk8OE?2FrkZG`f7HqogIOcy17FeYEqH z{|cEHJjcITva5r5DQ?1!DK7T)1+Dcv4!mfwjJB+5WcW&Ly4*P20j!Rs#vlvq9Mwc47N9p+UqjZC-U)A9Z18hEujj* z`@->`aM#(PdlsyIhqjhqtkwsIHaW;m*2`1k*kOsPgA18Z4%VF@FP zUtd76y|*FDhuj&T8}*5>zRm+V69V#phKGX>5l~{SG@u;Hi3SpB@(@D+b|kX%e0q{w zKnZh~x9H64!VQ|7u{83}lQ=I_8##$oMFiUCbdE^S3YcHbbiUL=^4iFxJ$L3u!Ebt- zLron32$4f@nev5oIk?Pq^#}vcv^7Z3Bhd@KCzl$c9s$G&HgvX#uL8(*QYQAd!E^MR z;?MiIM){T)JN6izb+CE?uRnUR2rOWV=}vt%FRy_*k?)?Di8%8RpaQq~1+?zkPjZZM zDi^xTfzqK%R2qo5w)#p`(dAs8n&aq=x#xR34i`W4zEe7^(@K#_s3OAW3wLV@o52kLlFWPbM z!U($Nt<_O&z81M^JlBA3##!lT%?o%S1tFGg#ovLj&c2e;!SPUMCn?cNM)PzK(~yn8wW>AdfKifM)0|KYUEA6(n#ww%OpWS8tX!fJ-eZPt4xf?!UfQURW6QQf= zy*j>pk#TVt9*O+PJI@N}SbQsJ!p^3788@rTrgXcygVkL>XvSFsu@g$@O2Q<19e(=~ zb-4K#j&3Tjpx~uUrVd}lK%|}XBl+Yaeo7&Z`QytggMy~Kvpy0I`Q%BglYfmis_;24 zYyfQsv{n-zzz^vtG3>OJvR7~4B%zZ`^6^wu*T_`bH{bE{onDJj3zCVlIT^5gl((vgZ;@c`7y2Cbp zEPnmL2(!V9wvVC2WIB#_o$vWSd1e9+q%O{jM8=NWm?bX3xzH5@0zE5Mq6Ki7oD8F$ z+cDD%Cml3HkMA-ZCE*_731FUsQ~+`amfa3QfU-TfDD6?au&d%sYE64ADGi!XV;{V6 z+bT|2s1BjnzGewA7=F0EI9%}TD5nJ~Y^qwDT^w6>LqI+Ehab!@gBo@B4ZXxihI{8- zua&+kPpQs{DUbYVZ<+Vownsxt3l=2$QhZ~c%VIm1A(z8;=zL!Ym=wHd6#?rd{~77` zXdyIuHZqV5_4aD#Y>g?QPt69)w?~8b+V&6-pUy(UI*_o;($c(Fp5Eom z96BAPq;y~))VF}k41yO=jQwB@M?Rn{6e;>8`qCtUEb7YecE97W{w=UI@Y6r%ki?v| zwdxKUt+Uk_5l7;>j>8Lt*iaxyr@5K{{_ZxuT)BPCZ_K= zRcBE{WpNeK(fr{a%^M;D-F-9=slmKq$%MNFzrLt0OJU_BtVqpyNd7~TiO0m)Ip8yt zC~v%0)ItRluy^oL!i1bQIMJ_%tR*?o<0*;!Fn2Kz)i18OfJAA}>k0D8+UGaK3SAQI zk*@lPUk6T9oD-;ODL+DjUP<+g*N`e zO;cmrM&frR5*#`L`pxupTg$0}Xmv3f%+$~SfDFEV30dbL7MYoN3*_rZ?9av+mD~1c zyH|2PeyRp@hD`92z3@d)$8ih6d5+X z61V-y0_2oBFk&o$1j0*lu_y&bZ66}tSTg8b)ZOr-2=7EBimVi0sYlKUh?9bJLM!3N>>=HfHJf z>M|cNvB)vG)K>&03E{uK*2SIs(6~-hoYl*lbU^!%OhEHSNhe9ik8nx5(TADWe zDh4UbOFZV3Y)gcM)Hpow#lY4!t#uxzr!++C%Nf&d_d^#iPwHY2-gz#R5Z7^>QsO>+ z@eF+%@$}B%j0vJy5u}KlYt@j%Yv!mK&04UE94Iy9PX_CE1oA(QTh&6OcfrgcuLCc+ z=uel&zXQ5a8vsfeQo!01!6t2ooJI7{Zs|LIpQAs0vCXUUm3+Qip2XL91VCJ z4*EhcA?wgg=svwv;e0KH!IG$SEX{kEc_d$#LxB6qOE{OoM&V?_3*>d}qhh$Z?%E?M zn1O+lF~&C~R6l4jXj2o%+2zoJHz(m}A>cQ#hB@%z64$1uaZobjeiWJqCMm!PD+%S< zHEh)ZL)O7{ln$EPRGxP#Q2lkTu#N*)Z{#zGPmVfVMi;kn7>-=}+@=X;KC6ED$ZOnP zkHYqQ6gCFj)DRF2Yp(fM{S7z~`N6N_GkCd=ZK8Yw(K5}vg zH_C%^sNjRwkbv;SG3{bi6=gTQJfC}9ydI@bTNPkIg%M+ZdVZoab3(ama=xv4D=W{N znO97h4GlzoW45n#bD3puFU!iRqGk?>sip+R$m9EN7xqsgBJuA1@7PHT8f)V`Fq?{_ z%&aHU=}>?Aw|Rs0+V-FPvX7nq)tB&7~B*1 z13NL7#Y8dyRN^;4Wfi^d9+P)?^zc5xx}sdP-_qm9EP`O;l+*u8^TE0nSmQEaCt>6w zkw=9kyBz507tkP`^!Gk{b`Ue_yt;ab{<(=BYK^lLHkd3r3UW|#g1MVs zkg{ou-k@XXgZMO&RVp4B)~8p1B7hmZIq(0mb;LjsG?RLk3*C|mTt(th(b>1KQTXA^ zE%DI(j!*WN#X{L}7zRldXb+cBp3z72^!!>5xCZgfKMXogu>9D!h=T=^|GkVvoV@Xd zAiCaTDoGWQ%L22BJMuWcLcRv#6zFXklHbNAtzGM^MNdCYTiYg7kTpmjMh-&>v4ZuX zKY?BY|00VFh)EAXnAiFD9yVfepV^eyyUOn)RIF^Gf%xL3U|Yn7e%Bp8#yxwX+FnMU zlR0|6mf-DxkSaDT?CO?(%9`5CbuFYhh+rk6$*@`{yqn3%PSj41WR*$z*YO!8%EH#o zeJz2$;fwD)uP+iuf|O_!-=zd)b)5D00$qb15@U@iF`$5>Qj*x5HN^J$6?4X~*xw4V zb=^7v0{n}7mN9cF*O!H+pSNJIT=XX;Gjcq(Ovg4 zfIIh)e)T9=Y*<>B^ythpX3~o67x+tDg+v$)0W?q-X^*f+9wWzZ0eQ058OJ5T1I8`4 z)$_9*T1wnVWl3F!jN9?`e;i-vd2}oL!gTx#I>7QG@dsl5y`bi9@c!|QN7al#m;-{N zf#ML|8SwVtRt+`fLVcLW{>)MN4>j*$<%WTyud)5xYjkX?hH|rKKohN0*ZVYw?5DEm zj*G$f?1Un^wz)?}jXg0(b@F1Aqd%7%-wk@GJivn-LCT*4cAugKz?7U_XN=0@3pmIEBB? z#jyk>(5FK<+RKR^O@B!VJDb4S6EOC(|DdTN?i;}V^eqtGoX-hwnIt2Oebf z|L_0(x&NSi84S{77O)d?&=+O{RubYY5*31r+I=seqaBaZpgtk3P~l!y^t3v{(HJ~E z@GMKdR)ju$I;b_!BVg*gOOizX!{w7oJ~*NOjpOp4^x7g4Q=rT=Flta>TY2g-0yJNk z{gHP8lk0M;SETH`vsrY)@9d^PKz#tl36j(-m?UnqjS9&81pdAN9w!_VyI@xYv^-Ga#o8oRtj)zRQsW&fVoa?-zy5E{C+J!sMc2pKl!?fLDjvpmJ{yzZ= zJdM3pW1g2H41=9S$-CJ+O&E!Hs{Z;kQvh8VM)k+-IW}cNxu0pn3}m0|Nxg*jF*+<7 z{C80Q-}@E74BL?IpaBZ3;f)=!e-D4g6e07=R0C0MxyK6|Z~y+?9j(F&Uhdy({^yt_ z!3@p}e1Q1a$o}i4nWN~xk)Uf9E~BkS(O+2T462vr`krm=pP|^Zq-(d${uxrGohx zcZ^!J5ZulAY0!=WGCRN0DKRz`Zd25Yw*5l(luH-J@1taGLxD*e0d zz&hfbQ1ZT)zR=_t`&b2rwxKlWm40j|+g78x!5M&6_K`X{YbE?Eg8e zV{iZy1N9f67G2+hyS^ULf>Xe2b*Xxz0A-@hS%u&@BNBVJ4};~ zbv!1ynO6BK9D}U<`nv=WiXpN>lzvAneP%SqSWqpCKja`xkR6q<^G)mMh685k z6@WcBlqIpE$(RT(OGK=L5V~RTKYyCq0cGZdDF~qicwm0C^`V$N=bN}xD$%U`yf?&% zXz1-De6n8n@*?0G{fC04{QWbRztv%<5;oaoGt+&8mMJ$WOHsLl2$~pG|c}urFUv* zpZ5+}n4ai-{Uq%YgibL^=~vINmmlX;sMCcAKX3Xy0KCCzi(SKP8_RySwJX4H+FcS} zq?S+t{_21Hz2f1YG){a&2p#(Z>H|N#3X_x%AMknYwHmF#viA3?4jLhPMhY{aJ<&tk zsWihbd?W4OpFwG$qyJTTB0O;kPHn{t=#33KupyLzP^>jZ2tDhYoj9dkvokLa6XHcx zGH3SM13!UdkslLcrL%KsdzN{uDr6NEqI@$F zYUN8SmQRW=K1?J1-=+_|LmKNO$`@SZ;@683f=}kRXxqTQuMVGK)1MSUa70o%j&6>A zTpy?i?dcY0$ntSj_YIVLefg-EqVflWh*OHdWMscvuX`Hf>qEj#N*^bx&Q|qkjG$y1qM* z>h}G=vR4^dSy>qw$4ZEhJ+rdMF%Gh_H<3+bAA4sL$H*>w93n+_8OK499m4OX=lOo0 z=kxvi{_t0Fzu))!y07bXy{^}F-FI&!IfO(X7sf8KeTDGKuB6pJGd-&W8QSIGss&Ye z6C-FTXodv`tn6A8xZPWkTJGi5u$YZG<0oajDCPd47lSXrLuUn}2Fj`suuXHlL~ec< zvnX<)Ys1U%rY?&Xejm8R%OaHdNiResNAoM#5@dR2YYRj@2GGi`Pq|TbHwMxd@~Z5` zj=4a3VE<242%zb#lpI`yra^+`!~@DBonuP?ScW7>ixP!-p&OVQYe-TWm>2@43<4{C%Zpl>_i8E-~{2yh| zTj2};J$90LN?{VNPxE8&QB4*L@;b(i0n_OCsN%5zSSTqhyKmOnQ6wFdN$vx6l!!cl z+!EkuYA}_CCYSzrR-`D9v&0Lrjk&W(?T$9Ydo0p$;h4}Th6}mjdJiz~VCaGJU-bZx zeP6Vs-E)wBC=&7VtgYVC)Lr_SqEXKV-1j1~jvQN61RNHw zoj%E};hC|$0)fH@^kyo6=>(Hsw>ZIlp=p+BY`t1ti(dfIIljb#9H7?=G>Mr&fPW`Q zU;877zhGP+3XsF}pD4lAB*4uMJnt2}NdUDr3OeLLY8M;-^VOG27dFCjI>?Q5iw*Vm zyQwJpzB7}G6{@!1b>62t_L~V0;r!^rSpSFDxPA^0EWKd#Yf zKM#bLDixtWZ#v2STvP`$9pH){0Kjo#@gg~+kgqcVL=}0B4IOWC zQ^9i;EW&fWzgCp^M8)V-WZm?O+)JI1rf2^jYRw3A1dj8$j~K~JR)&{I5H8j-8k<+l7M za4jGZSk-U=e9WZTL}-&|I^>3qefNq$2A|2H^=(CyuJUDoC;?-g3`t}{u!8yzvJVVn zPSNbD(}#CiaE&_Vu3~&5-;%0!F7UZ;C2Tpr8V;9el=0I3m!1d6ec{|dZqg}~3IT#M z3e@}BeRP3qn>D4`awp74q7e(-BGXBWx}Tf$05A_g4u-hX`^n{(9k?>0{syn#gKLF~ zujCV-^2&v##~{?qS*M*TslN7l07u)y z0tGU9`K&4Yzlh-w>C0D0hq#(o8+En@g?N)4b8C;+xAiEG>ek@ZujX70E7x|s18UX) zPk`H3y!gQkhm8-oyHvI=qCxEXf&{J#L?hR)9LTx(?`xqs=St}Hnm{Kq-#3lFB`Lo_ z9z0a5+3Ds;2`1PfqrqKpjzf3$3?}YEH}C2zozRRP53ddwuj>#$i!r(^po*x25kdPE z!$0ewzkE&G%OU@$L|wpb3JO?u2lDg-U?py3Z3$FLbvR>9D^{EY>@hrVNi$-rOo65( zfZBI^F~qf#H@i=zQw68Xt-G2D>Bcomw7|=a=9&t5PfA*Zd=wp@2MG=S8!G(`Xn@+J zb#uo7jNwuCA3uNSd;V>H!hOYe>3nd@dw$h(p-GWeKVL>8Nl$j4r)faVT+D%=J2FEi zAES^Z^?uuYlHwib=|c5pGF^8i?c(lh9;9YlGJS`}b_}!$`L-FXx`H8FJAPi*ufG%X zWY27yT>aiQIUlhxLKzmq#JFBnm!8dXD+E;e6L;|uLRV)fU|NiZR0;$7 z1|z+}5x;ki!0^nuXH&@2gv1s+d;!J~VrhySp=n&np}4LEEjPK_H3yWVou@QHzM1|C ziZ{H8V#St+_ay9>oHO$xh5L_5ts0V*)CN=UKJ87eS2}p?H<*AfCGI`@sXF`2Udr&Z zkK28nq{8@}D8U&UW)x>Lk#gbXx?&i9Po3U?&TedpTe=Z}$tX|V zsk7q3MQQt_iBmed`Z0U1ptTTSq;0+ditv7D8hEe)Cq|Rt8DSvA|dwy-a}?jQCY&>)U>BXh5UFMlUkW zf+^3np%R{+-l@HWW#qCcmE%j+xw-#Qp%hXrWV(3In!Z__Mm9k?hAX_BlbEzQbAnO? z%?o)9N2IZWtH|Maj3KWw!#Y(`fLyfLDcP%+b59I^RF_qxWTqp5Rd ztP2%G_2pA^QigE_LXUWYwQ9j~#I;`FK(+V3m@*^eSCL4$Ditl&PPcRg3+baFl9^qwe86J z1F2uK6Dm7rxjQRNjgs$X#SU{!O^p~qQv$)&6Boue9~z1;(3s5R1f_>ga7-aWy|rg8 zf7vjmmq$4t^>i%`Iz_eZF{UUnG2uUgnixHXQ&MsEmukb>5Oj&+HfK9*qfDBg@;i;R zEMJ1JbNIwbM*g!8GjeW(Ki(=U7Lb1Nca`D097uhl%P-6r9S$}XSs{dM#6wX0-Wh0G zE@Y0CCKQQ!R$fNf*nXyH)~eQR^)5*?HfjVcMtKwEi6@Zo+k=Eb^6)TQrl1`2r6_mH z>zkFaLOWI_;aB5V4+j01k)lL1{k7$@{mD-n?8x+=up_4k|60#FuM^2JWy!OC-J!i6 zy;mh0sFRmFsf=tN8V<0FG&5bn-fI~ec9eL(^$?4NM%D=XC41lf&Q^3Tq(d29vNIcR z@X$~4HjBRf%GtU7g^uLaCm79X+t;wDTQmoelqd?2AFWNJ|4 zC4?Z|wZTgmAPFXPV&W1BjTT7hvKvF;s3YZo82U zf9#-BO3-_76vZxC?H7L{PDA{0a0(S&sqSAh;2k9aliGxweMja*usqqOJn)z)LAN8v^QPv>k9+$UPb<#iaJ zMUWKKM2#gpsCQvWsPBm&7~}DMfys24X)lU>UzvGgW7;f4Z;}hgUlzvLE^(>>eWJhV zVQ4P2Ff3VnRc+wT#a=HymU<0IEXp^@Q_GV#gm-f7a(j8v@*3XW+{onf7Go+V$=Jx42hKLxY#YrSX<1GYarQ5%}JYy12 zl`c}U5?KZ>D$I2(3wHHY&*e*|dafU6_OE`+l)M)f6vLLKYY@9<~G zUkW5wZR1lUx)TZ%)~=yMGR`3L;_S$w$WQDLXKHuT)B7V{9(j2_Y(A~zXirBObiV(kuH;AZbu&2wfIQe*k_+Kw(}puoI`87BFADYDo88$W)!?Lr z&Rd3fkFuG5kAW;y%-f9i{Az%NXMsV%zzhD*TUr^w#jWJv^0M%gEN|eWD4-^G*l5S5 z#>M=ND~^7XSSk$>b%dakJP55F+}Rp(v6kkNWF7rnM|p4gNLC3YbhCuB=T$jXoBRZ{ zU%P9f9y0|pIf=wY4A!dUpkZApJ^y$^;0;mvowHwgS2lYR)N)-5*K1nVN^K83i<*_zBq z&Th`fFN36+hXgt^`!PI~tQ7BP5i9=fZ;MRtP3Y`{ zfGeuq@H{5#oy+-y=*w*O53J8u5KkC zO=P)VeN$yUcC)1EB)wY`0Y8YessE0&QQXMp*rqwHh&OgZVRTypdjm~RKD0Bb?KCbi zU>!SM!{gR`5M;?8TZoR9w!Mf%V8`G3;o$_uXT1IS()w8gDqt7O(Ou6ji38~=22AJD zY7t&gRFb_ppKr(%1&VR?1l&BHoi^;l`0Pr(Y2Ym?2fm9E1QX*tsd_OxQW+Qc0jA2% z2ZS+=x!>6OoJF5Ktn$5AP{hyBR<#dPI%vT|IEwx8GZd#xmwraS1mbGQ!B45hI)m$) zwjDuz5k|dXcxc-XCYXW8T#zZADt^ZheI0OL0(fR(uva1Yt}>xbba@ZY8CprauIL(N zj2Y>eh3J=?b!0*8_#pVM4Zx*b{`I^IA4Wg+ivl_!ggk^FD;&?;>G(o^?lcBPUcW68 ztL>-BA`)6EBNHMb3pKI4*pxL)hzR?~*%t~ws(;GucfI{S6$R_V-isnWY?+{jZn|i| zx77Z&cLH)4@RzO{aW)jiqw$vecv)eUwX<7BR9Nw=w_RQCpQ3@4VMn38f|E26)G~M zUj_*T7A3!aUDY!IycBNJ33#g&vn_Bgl0UO*!*xecOMY1VVPSf zbQj04$I13`Tz-{W>Go#>@cP)MElxH6vmECl7;n0G4{jvx;r$6D2`qXh#Ct?lvNrNR zqMZixo|xHq26 zVdbm~4|b$N=4eKDzw>0eZgvkdcm?Gd!XEQdQ#VfVvK2(Ub|Z3?#_BC0w19%eV1+vA zONn4}ZBAEKpDDE$s%8)4oYH}ra z?QA`|&7~Rc%=_V0)6GR1X1nZRD-pX?07XMyJg2}Qn8!XRtV+55!ISxwJ+!nFnQsa{ zmjcg4cq_&g55lk0HW1JcZw*D0ucA`|4`07iYyCDG9zSWyFB_=?x8O^*^iGS4+!dt|8-p^%G>Q)YUH^7n;Mx}mCkIHzGW&|LGio;CJ4o?n<%Rg ziORH(1p%vzU6Q|;cpjYKR*5LBL>om_6+9WMJ_^-u|9KO|1(4_8fov$RPxt8#a&yof z?TRWe-F>XfSLNlgIP1!QA)VT-iXDVzSzJq^{+gj63+#^&f0ti6)Z3`t31;A7eiPjh z)!_6nXh>d}cqg@W2p8e^4dC1B|HhjV&2v4tzR|wPL1F|f!EzfwIT!S+z>}+{k?|{|WA13OMw>FO&X?rMK|+Ee zaRvr+A0XNbJh`#q+!Q42^2lPpBl0YQU1qDAb#zdh{F9 zHA_D(`3YYez((P_GX8nBEqq{o;S*&<=yD!`o_6VEZ#g(knbNZ#zq)YG4~ES9LG*AY zft7#NRl)QY6y+QtO`UW`4Bxc)c42=uW7Pw1aS_>tE78JJIG;LVw1Q5?K%jaxKCNI> zq~DnQ^uSRTVa+x@OTIJTyEe9Z_hZ4B{Sh_^8EaCdC5C#fpKuD*G%E;7r z4p~q4Cg+z|CvUkuKwwt}(Rp?4;y(K!bX(NwCAyTdycnJs((f{8bT5^P06;vjyY?DK z6KO)oTQ$zPOV>vHHkaO(8Y)NLC%UfB&PT*=Fq#ru9V}rlD2oO-r zD6b*%Od=geIPsm0K$ZUn$0r?%ybd2NSP0m?3@0*JEC7=K5v=k$XTNg`yT|*`mh&wp zwvIQ^6U`gHJ=o_odox4|b5FFjZ3xj1eA;9GXAPtR%lL$Xt4eq}v&+X92j>z&pvq_*5@zl)smxHF^+w=2v1lJlL8ORtLSV_w+Y^T`Wge7 z0l|bEoGrNrX%N%q(g?rP1nG(!%+&!m*y2+11Rlq{vHMX6!6^=Hx&}VH1iov^-)H$E zXqn^f!t6q((yUXSH;6_*d*4LkA9#G7n7RRFtWJRVt0oo^M$CAwi>Bi%D&11jOzgiS@{0;iI9)9W13UPMKKYOaGu59)Q3TL zN6h2d$l2@+OLOIm)gQyR=ulL?Up`sYQ~kcG3`k8sZA0 zXu0!yMn|*qK@$eIC7>Kp@heC)f2g-Uu=FSBM!r}XKm3{)UJDm0DkrI~!|Yz!RaiXx zoYNF33~>YDTb^mBBW7pFL0*33h@C*hr3n{jD7-w`z_3$fmox^1PJ3`qg!80EoF=~a z)K~l8qQZ}&j3%8i$se!LNg3DL0k(Cqdv}+WOOk73)5DpaWroKyF(F@qYdZYrDl8ng zDfBxt(X{J5CNGnSGePLG`%U`v@w>=Gm5+k1Xsw&?K7o&7duB0ei^ZFPK7s9W;J_`Qo!ZspTi;U>#QUwlWkH9cI?6> zrXf*TL+~ad7pOvO*-qQfn|5huc)SLdmHx8OkHgTkZ))jA?igF}gE&aJN~qCAN+R0< zJUPgMEO~GFci=D0v*QV7mmi%FE`aQq6JGtibCqG|!R{{X-I#pb$ z9`TFDC?0vNBQl_s(^Ym@VO2{zsS-gMXZXxo6r96Wa&KZFVnrGmt9NcsUHgYmcPQ#N z66_;fGt0DS!*vy@@^1J#n0ihfff-NBz`v2?ep5fLS5b3`0D{vyR(A4mg9dpiVIF83I#t+&~2bI4p$50ST`caJsZW7 znTdzr5~!_s;lFVo+h zDiHrP$F4Tcm+jkB8^xuh|0p?M440K&4|&3je38#4I%xkAvZ0<8TbWL~DsdUXYo&8O zpeZ3w+x?CO<#QI`Y@)VDF1^9%Uy)?RfQdj);n&f(O;(7E@_HE-^(Qq-xBuca-d!MG zZX2)n)9^g^{iTw3l{uo_&tE90xG`p_Fy@n)$;#doN)9>V<*8mF zszh|_xm|p;VWz91189Gjb zm7Shqh&8YBO%Nk4@gJbjxX6cj<>`vhZuY%2^Tsy5N6L$ISqgBg{QPceUbUengD4+G z8J_N##{P`v&o_H6bKxhgI&kX=!hUxWn9(`;x*Dx?Vh1hs{0>5)V_d^bF4d5>=g&%r z(6qm(NXQ>5lB+pOmTKQ#s%yOHzU%h@nW}T?-;JuX7PC|ln?81adLdKu=Ib8NhKKL; zY%br<3P_J8Fu&-m!9tpFaC2l%QyKcKBnvJ}V=CI1*3WtBpg2j*&7)R;-zl+O;E=|OvXrHxh^;Ai;$uwGpB_yYQz##N*t zb7IfFA*^h?2N(yPF-jvSe%FRfsSG@UQmAS?)X++!fF)bu@8$!}tHO&7nsRsGs#)39 zG2Mj5*8<2~o8m8A%)lZ}W&Z}7z$qfP|@ck6dDi$(;jW>?yl-w4U( zuN}ViTD)qs>+}dwd=ms4<{@#DSRQL(WpY%U3c;?zT;7^m!o{9>J_Kllw$A2fWr3LU z=`Rb(r5srigB~&L?uU0sqNC$Wk}T!m+z->ZkuLFd0{48JST`=<12(;%lI0daTMSQM$=0Ydfj8m9@5-UsRlG|Ef-MoDJ^O=$Ms_GZ> zbS3WM!QVQ5Ux{#!a3VD05)W3~PAK8-;$)SR)09iv?cbz<5aO+?>1VN%ae=s#>a@~^`%m0_@8!AwH zQxz6!YFFYR5D$WS(-T6T30g_lT; za~D>~C{yQH+`uQ|-tGt3Jz}4vUWc+UBW)2Gaj}BRXx7lqKTIK@i9{OZ(j06XUR(7A zm73h1jz#6p}ZHDC& zOHmdCoe$6PAtJYT#Dd2@vCDPeU;g}~GxPDoF|xT~HY*W;o)iIkQlnDLj<dY8@0cm?%FG_;n->y9U^=fU=SXMy68MxUkLuSClEUHy9Yuu< zV|V9nHx?w^%Q%vFv`Od+B-DRWRnO4Q%o%h;?ZHHC`lAs!|J*K)qrw8o*ya@dGk@_S zG_Jku>bCLQ{mz1SUThyv8JDQYq;nv5s(Tj|3rWqHngjH4eteRO;c`_vaJfiE-t_1( ze9~Kx$in4I7BNU(XA0K;K%4ez2pZFNhS9n<8-%?o=XQTbrVKwua7LcIlA2#Q$*$pc zw9Nu`k@pH5sD=qZ_gCLv+&-YzBtSzfE+}D1x}Lo9dX9=rS8h@?4yt0+4s>}^fLAN!+kN5IwHAiP)(ipWA*P{CQ2G)0Xdk_6 z56xyCtg1zdgnF;&K8)<5vKyhv4&9j-|rG=-Mwi z>Fm?kT8JHy+^!Q`;29LCec<|{G;^4F?mWm)@g5=aVp}n3cri|s}A9LQR;Fi+LW+|HWXXVbXI89 z&WNW!q=BD9YW5w^eK=<=6fyY`cxuMeRtYUiL`#<=c9rytwJcYX}bE=5)m ztk;uf4Z3Jo>C1Mw5h2uO=;`R{!R@akXg`d4-Um_2*$%iqvJEko+&b{pfY@1)ia?yd z{7u(o?A?+8PHN&^nmW8|#82wO(Af8>NP_tj=WXTltAc07-TBIOkNp3I0RyR*Xy8+@9zD2&?Wjqx>Z@{?AhMa82Xv840R`&T}1eH^A`|gNO;xO!hNMTd(--W#qV-WY2z)z6C-9Ro$&lR5#!H&Hj zolS$rUQ1JPkzz)ei{j=K28@P(*;wWqD}6d|gOo~T*HDpU!g^nDLU!aarZv75A4Be)BG_K#EAYGtX*k*zXIkhmPehy^{TWe zt6@mfjBymjf+Hg9)61=s=VRC!M9#QcjFEp#EfZ49m5_NeMzBLCW&c5%S_EX{DU1a5 zi=CJb^N!Ex{(9WAUId0zAm6lXx*-PB5Ns?kp4#DwZ8imr&KY!AfZ$XFcx(ik5~Q68 zLyzIEG|5)t21f;<#y{^C_OzGX%N^H=#onUNbXkb25jG_aM^mIyJrdM1f;+E*9# zVt<7wF7pvnO~9kDp-50O#pZTx_8Z7s(1|Dy4H-81WrT}=KGD8u0Bveq)uW-B zVVj@iOFk>2c2NzpGE%lzfCoxp&%pNqF71CSfFlm`s&HS{Mtk?9rCJM0N53Cm=BWFS;?dxpc}}DOonhQqQg%=YlZ?J8)Z-6%9TeG-M7NLwA1b`#FOCA zj%Gr>-PaQQH8e`hE>+NhxgSe}_71>tjFM?Qj#|Yj&@Jt*=%*JBCCiC-}~e~BwArdcCJ7->&fYFZ)>+0?rLy=f#c*-(A+gCu+A4|sGs z6pFE`dWOmaI7>_ua&YFIWQLC5<5h;v;dKWayd*}nL0r(PaKV`ky}|Dun~|GW$7u#A zR$kqG2!qB_9WHv3n$>qK2}* zXMeL`kwnz`vlr%4ETG?;pj#dGC_TgQDZRXV4gwqEJt&T|KD8#)ZZF=+QKNIwCXJ*&3XP zguI1)J^aX_)o1g&kZB_qi?>gpUyjt7`s{{P-NfI_<*Mgs!}ss-3n#c1kie9uQBBkX zbY_vApx6V_AC}@g$SM!4w}kCR)_gtFkQIndx6#}JO-n#eXP8;^_VFo%Nq2$xq1tWw z4>6n@$j?ba7Ri@KF(EH5YH=s@Mt$y@oqFC>8}&ElLo?*5RGn_6R7MA(@Tnn@1C!+e zu4|5KWjvqq7k1>`KG2AhWDk}N;fm=Y0M(cUZh*>{qotf+AyWmNtz-SQYD4V@dv^w? zvlelMxuF!skfp&Ij@zaC@$5)Xe()!#Ig!n*pS^hRoc+`>a(9&Kuet7@Tt2#F6sP7y zo!({`iZ2jcx{=aVRga73(^V?-p$%^!%d+Y(k0U*w1%9D1x%p(2R>Sp(XMob3(__>Q z4}nTHC|2k>noX2_SH6JF1ielFNILU<()HMAuHrfg($FI{>`-skN1-CDroSRhzM^uT z4YW{RlvuKlZ-@C=p*>Rb=X8SZd4{G1(0v^APNPwY#sHlm36axQFtlSjbaQ7XeL zncCAIm2oxV`BZIf?0qN57Js+DaBWP2&uY$piWFrj8YCEc6brboQ06S9D;A7qX#Dh! zBPW~k`N)*wT|R?0az=T)X1W!$OG?Jh&fG`b^*a0H+FW%<_8?#m|HAVAhj}9TYAq8% z5IW-V2b!V!8s1fhTQW1A5*Th-_deH*M{)?z8M2wP$tESjG7Ru{vp|UkU!I9v-luHA zUV+|!CFAYaFR?u59)!mYjDB^P-^%zyWHTQD6gTM8{G?&3x}*SXBu8sxuk<-~G(NY6zEz1iUlf07*GtraR!pBag2_)9AimtyU_(6ipNf@(#sVW+&qoF2DH=6 z$cf`HeuQ-ftMw5~b=Oarsfp~(Wz4=1S&F1`NcVS83qN$N#s&9>0l2fCxG}nS6uy19 zDskP-6g#0{5zl~TMh=jtc5p0URYdr^QF8bkT5CM9rKNZq9Gdo5Qaf}VD1L8@zm~9W zSJ*WW@PA~Q(Kamu7Zb<&cv};$OYsj{Xhvzyzs@&m^v6Q5p?a0nmp1w?APkMG=;~R* zabA-bTI}^-#5@qSqSMWeht*@N4Ycoq%^e#}`03o8PZqIO8gNn^2J!jk>GipZMk-LG zdCrc+V+9;i9c*CDxR(dIzv9c zZ@T$7UE_8sKvWoSMW?N7XqTpw2c#1BfP1>-LRPp0zeRJ;G{BWChUi+Cu=Bx@{NpWN z*kQp zD9nPUh3`w!VQ7o;o@5;7nE22_MnX!5Xq7s5G|uW3;Rf%Yv0F2&*_cMM>P1B@8p?= zh*-V0ln2{!Yn_loc7$AMmkwCCQWy#9?JS9fi{p=)d!?(#Dz;^Gc^&>Z)lCO^B5!bv ztC$G;Uw+oAr*M$&t8tknWgNGq+ntM9Rs+rig?k|)O&AAi9!kTo;qM)K-xY!WfbI);2+ew5h$tTx`@+6ZmrwH}*i4qh`E@w0gMSu-x^ z&}i%J3zg>HvzbeJ-)AFYiD7GYyFhRlL7+`TZZ(@*}w zqvV+$W0Eoi=R8}&td#_g8%fzsqFxw7 zRsvC{{PmGRE}a8;mju{A43hGp1i2JTyr6KHqZYk78h7^!u>%&*={0LwUky|JSU_W= zKS`T14XNtbjT(2YeYs2US2ZfUGjk3}zSsjLKYc3RPFZYx@=D_L(d~~sq!2=GY=89tPmq6i z)LT|RAC!=k{%Gx}!05nnA)J$D?!mbrQbFC7g3ruHW~vH(3_4JbQ%eKGf<=+G)rOPLvv&rU0qFgwys}K=DyXSv9 zW$yXmPM)5OqB-U6-*!Riu?lklV(ecb_@WKpYzRO|h?><=h5u)$VqjBYE#W2 zWtWRv4=QMfb4n~NJn!t8X{ftDeR%^rd$L}=A-FG-hIpCepXPjl01}{%m_5HCyw=Ky zSkYo87gl~OmFs5c4-0+e@`rh)FkVqVno(V2pvTnshgiVz?*6<*1J?((;dC;OaHb3Hh`E;z;7p~kChBE5g|(Mvj$}=EnsO;WN~aXt9xzrjElF<3wyvGy-pUpaDOaC; z@t%yyz9OM5_-||rRO!*&NXFtGzs}ipP_eeKve|Z&NmSnHN+%UO!gubfp-9aUyW*CU z!V)N%=rePN)SjE5*gWO7s z+i)~P+Aa{P9iS32_B%)76GI2X>iLpCE>@vNA*A~Dzk+qgAz%&>MfwYqnGm#|QZjPiC2x@dm7U+F{JrV3{pCLgmo+_>1dbj3kc}tunt-ME4@a5{Dy!?F3C9khJi>Py%3I*GX=b|sP3ySLfvK8 zx^YR`iqWTio6+o-kXZ$mVz+F77FDDyABS!G>yzfNsfg#t+uyA+sG+D^sAM4H!Ve3W z+UJN5*d8WGUJNlBD`=fiKKS&#?zc*;XMgmQ+)Z7tac^AJ&p0tL?)3UEfg5x?RvKNu z+r!=DoUt7C$*l|{h8saFt=>R&b%2Xt^}C5G5-_|_L|lLe0*k-EgGwyhkz4Ar@164ukl&20 z@F!Z_z>XUG{psnh$;K|u&u}(QV(-(IccVmRWjIfMFv&GsJQCoOjS*(jlbkI4om{J; z=m(jPp(z$FMkeY5`&XOBM4!J-yl)Do<%%2feZ4E?lzY>`1*5T9IB%F&xXP3HR(T;` zedrWu(kU3)5gFWh7~J%i@DkVC^HSu$E*?=zRCtuV><{`6170QHDC63AmxS*+K3+by zz7Qk&;X2Tp^X2|))!JqJ>(w~D9KQvhRt&uE^!0z?|}DXOv$l;QF#HXg~+(r1Yo zcSYGdMhRjX^OlO1-nzIUW?N-(aR!G)@seS_g@|Fqh)UlRXv5?90?7H&|E3lQ+ISdH zR2=2xPiiMUs=5}E)!eS{B7Jm-H}SpOG>5C_Yfd|M%EHhZA!ZEsMp3DptOi=<@@q#P0Y;lAR{Z5v~O zDl}u%`V*iS&ov|bAk^FYZ%+y~CNtr5-V&yJ%bR<#qP8M`cGbuZU1q@M?JeSn>9Iuq zK`M8}{r1Nfd%tomcav7^f&2$Qj2kH`G!r7>@Ns9Gb7beWxRoy?{vMDoWiL55<%eEl za_QP%knC&Bk$eLaUN4VQ4gLN&mx?a-ft#4FMTy*`905fz7%V~ka z9rFkSTM6c9K!gS72}dh!*FiFBx0#S(K%kv9sxm*3+uHfSE}_9>()J7I z@V(>MeQi!22C6H)PPuCtIlU|CFW#;#TnNgwns|S8pLZ&lwXq@{>5LnqNs%fH-)weW z{sZS6-JL7)w93bd^0y* z1J$~oHH(3K>IdzI&$oro2;laK%l?EwXv|gfsaXd62OuZF?=^y|(I|o{-pjhyJQjg3 zo%T8t*$HviuQ*t1oFso(%sjth@Y`_A#f|$;9A&|3KaMPXcX+rG-0+@~R=|p6a=#Yp zE%Fa8!dC-y!c2kGc39(i6{m4yX82W437^&sBp10`br^ytKC@q3N@v#yrU zg1KGoM7X+Zw_qgqNyLn;^Ms#`;v(+7o@hsMdh7~eTQdIROwB%7Zwqe=YZ}mxNh#Qf zfs}I{DpyT@yDLyI6j(kTeb#ZtaC-tvC5+WBE`u*D?tm0B2Gg)G2D5m$ zGKt!%fk;0-^;j$gQcO(t(e_AEy0B@5izjd&@pgGSmd8}YAg8rY!L?uCCWME*)*jrH zeP!cdnQ?i9tVSy@yF=>s7WV(9I&FYcXklrb_&riXFFvx5PV@txie_%5#C_|18s$SQ zx9kt!TOI^?nJeuagiu?@z80Faw$uXf6au2R z^}DiblL#hfUB2vp(G@i9i<`F)sOqxI!xApaszIq3tFCmG4e<`(s+?-6-%E(6yClu- zBA;kfzikDABS38v8N!p1s|7n@6xXT9kmrwTpkD{ib9Xm#q!HyejgvR{ScIJ$wH%)| z#_~AH7B~UvTuK)Y{_f5{{4pgt%ArCbQrFDacf&2Z}NIG;?LfEGw)~z9uJ$oT$q`{tYxrG+|oa8_FkbDtS1g#-! z4hp;-( ziujE?C8LGdKl=d&I9*5z*j$xe(0}VD?!XzHgWdW~^Q^0FB=eAACal+5Y4rQU2xT^U zoN4vQ8;1&E64$dLDiKmb*1`jR4;YK9(0i0H_1V6(CQ? zsh>}!9WSMVP+#kHyjmI9m7&uz=4bzK`gCUW2RB*JOazauo){gIYn3}pxzusX2WX)F zPWZAfs}>!)qXv@PoI?p)LQVL@dk#`RyD_{9cCI|z{V);pVegGTqGE`RjbEe%K!{9^ zo2UwWd{>Ha9w+)q93510CR!9_qqm8at2=ua6g}?`d)g3Xtl)??ITU>an9Vu*cT}pJ>Y9ncdJQ=p3C-L$nskA z)2Um=6Pa_ku9}wmilAwggB__)i)tsUQ_(XRawuNhF{h=ny?V=}SMmJC+r<(|kiq+p zJRtO)Fzauj_n#+1|8$ftH-AmJL0d*N>en zW4LnboWjqD(to%g;Qhre-p5n;@cE?&gs!|A^(jJrJd_rbiB+Mcw9k4)3LR?BxV zGgN*iFA;CQQNQ48pt%FPO)bZNkKbZYw6CsY`g6SDE51sE7hco`YmPxZO+W~uGx}b%Db4WFtAF+Mx_wuSf?tfJ$e802I z)$OGtfnA3GtV<`>Zs8YZSk-Tp+Mhg7TC!~pJK~`o3jzT)G1l;qqYu;M;g|M~f}9A( zVbo{^nqff2LpKrx6GscatBP8FaFr9x z5=ie6B0!>O3%y#7pW`S{bkdd7x)TrOdghfqeE z>Lzr;Zx$D!R2yr~K@E+?Cwbrcp+6mb0#_t6@=>r7qKS9E?WcE0pdV&xS)tTEWnNd? z)ygU&8#1V)n|`fuOVI7;pud!|_qAVvoYcWy>dD@gJwe@>!%UVedUs1^E-_>51o71D zjatH{l#0?pr7zE2xrqI6YN(o`c@^^@Cvw8$&1Fb;y%&y;=;zm*FuN z`#-FJf;1A+9ny=Gq)0a+-CfcxARq$LAl{h_U!g@cdjB)c4YPxv@%fk$7Ppt&@cx#x!J*Q%AT3)HwSTW2s+C+R&Yb?q& zE?k|8@wkVm`nlpBw_I+4uK%Wf7{}y;s$5VwkePX)hw=aLc!z!z*CJo|wg+l*wrv50 z_y$qcEUP@xV|J@KiH2!;tcdw!<@*GzwAY0;%;bS+d zmIO`F%E5+sGb66j0*=>?pY`N2SMwB_CCx^@fFJJ%Pg&cnUOhWHaxhXd)AW@rjy}rU zDQ0o0R4lek&0inTXYgbT09BJDxjvQW2@&}tKKc#T1Zb!L(S;DP<2KCM(b5h5yrrpj zs8P%Ao6(JRHZ}1Y%HioFA(^zYNSU-Kn@5KNN@=511^+PYD*_I#)QzT(V3CJ2y0RHHiw=zr_1z44&+>gLlL;HNR-qGh_ss%%no*f-U5I|muF86dHsIx_ z=EQ5Z5XSF|^Ui9dK4sziMM4m(Iz-3y1R(ywrG|yqt*wK{3kR@h!vH3u_IZWidLx7` zfl|;uU24CU6-^+Y_@Zc~DBHHLchvv!lia7W0}T(%_DDQhln4?&ns?}YFeYAQvkNgg z-w@J{%&Wpcv^_(U`D!3)Rm7uC_Q!pVfn((W!!uRshGgXN%Ufoz<+2(>Q-L}>5dnI} zu7y>6vlEi#NE@8yTYL0Zmpsuqskqg#HFwyZ75aM8xH8gh+k;T4hg6NHC(*H3O3zLD{^v(0!Oz-_Hu&2>)Z2{5sqpBQhGaJ^J22)I!1ywVZ{pV_g zTv%XYxZ5LgnLAo|QFA>f{5tmCOSuwv-L%k8Q0bMK$JW;dB^>N*!)9`09A;d-#0^)i z(rFXxFPw^WaV8N<5s&YNCA+-|tLQlO5Va}lXC-{we_%IJ=n%K-mmy3#q|H~KFb>Up zZV5iyzlf})amt5qqXONK;!r)Are0{5Azc-J6;LK!gI=fm;h#84KgME&rAS#8fx zfP5&@ejsOPi2I6e0|HvGz@9AcQ2AZ;6lp%g`Wk4_!EP8%0dZlf zIPvh2`vy8d5>c%!s3zUDxV#0UfKw&bso7Zq6C9xBLYw?jAerwhVf3gTD!VY(#fM`!9KC5#@wspcLG+(x-{JvUH8K}}^W-Th?f z3tyRyUU+nu$;NV&;g|6lJb0j)CX-TUX!4rfW|+9CyoNG9)wQ+36LZid>gqLq#9ZoU zg6HokVi6#q@z;yx9Ah*cVw)}bYV7ODr5k)>ngC*2QT!QSKD_lqO;VcaDwksiiT@s1`Be^E8@WWVM$7S$R1p@GL2$JNigjUf%*``jZRz^;ZQ+YBj z&fq$K|SA^(3YaGyvKh4ELg{F?3cS9RJ|J>uEnhmkGGKpSXs26dRBHd3x%^G z>LCUn&ZZtdO$B}bX5v(F)2~2;C6Inc<~+M&8ZoARJv9grF{6HL zM%{9eH)|Z(brsk9kMlX)RL0`yipxBnF8F^gT^|$z{z;@G5AYNC#|YwieCA@Z6@cuXd(p* zJi}*}P9wD8G{e0$#Uft-yk7qu999_wuF!-4H zAJv9c{o5N%+?W4OT~Mb3%I?Ixc_A&F)pG(XsGDCh&xHhVV)?>c3VmBgdV(UZi_&#rOGwLJl zyyL-RjB~-|lq*hyHhr|Lo2QSTyoequs!Lav-pq!Wnf@H%T)M#5@xLy|92NSHBncTksecxXk5(dX!SwhXk4Q=O) zzdhR@FwZeXP)o5TLwH5%(zrr}8bGK&&X+;g3^*>a=CD*PR)>*rbOKtm^V>sS@QVK= z>07!|yUKTa;?(Mb5!3dJArSO&c{zKzcC8|Q?ZBt;S0A5rqfVUpVvX%`LdF4NvyYicbND>OT*bC;l5)Ep(Dt%Z&DO12SFz)^7LT-e6K;ZyM%pT#Mf; zs2xpss4O&6-Rp;-E|GArw_f)>3WuCFYNhE|NQ5*^H#~aj&FZAJ*U7GR$#XM@_kLen zAr<{oY)q!8zWav4V8wA(JP?2x*+PnF6W|EQH65wSZxHerq$OTlj$_b{q1LuWU@cv7 zY~{4l=!mV_9;VX%;l2|HlLk-*k$Q+d)BbsgkcYJ8tQKe~{s8ZuiEh}y5;aO?05;SH zFGJO>?SEf|#hC>jf7pNpz~FJ;#c9vG{L_3jLYhu^7)=83r@_#Yga))y_;f0yp5`gx zukPvkaCf!gY#b5)^3`G;X*tcmnb(q7mnlQ)SP~6N!&i{{2kaTDb9Vd;a^RCp(skJv znP45fI9U`~9`IG~PpYF$Gv7fts3E2-gbPEvKED5D5I%X0!V>o){BQ(ey|n6*_kG~t z&koeua@JQ;u;Km?{~g3QXEyx4^8?>^tJWdsa}krI7YOQ~L;oi#b>P%hzMaOx6$vr< zzAQy5?0GLf5f5dZruT1^*Kb9{CHMv}ZPc5mq4PTLar@uY>MTZma)y!_wY{o)P<(~Q z;J+Ctog|e2QKJ>-=OTk83-%`x3|8_NPf=$6d!E-`U8)S=P&|pgw&t=z5?I=|uyU&9 zZ8RPLR?Kh8xVS+Bv4ePn#{Fy-m$7#AX{z4w65UJA?H?X&?;GNtX{3Q^mIn3?6=>O| ziDdWMCT#1(Ek&Ksq|j?!(*2i11anBIvD86k&acy&k07$DRMNlU-5r~9$n)Gxm*bgB za4mqffK}6c3+_&=)`r{a;I<0$Y3s_1_kDXpj4V#6Xg<0J%dFBC5y}~yU$S2L#9|Pw z8G?R|Kv+iAP))%ad)4vB`bghRrq)ia1Qw8PMM-S$S&5hJ$$B`i)$(EL-zz@}v%T4p zbFKS=Rzd$RFNcNcFt;xLrMH}lN5f#W#Nof$eZ89pg@*R~_qAUeAVuhgAJ@~ZCA^^pDa_gVzr>$KEh4EN`>O%-y|vrXi! z0fS47#jPHegda?zjeZ9+P+wzCsaMW?liY!Kf3M1>hZ%1AirB_P95{xWHtxCqvlfVgW>gN_#8UF3O zS&yn%NQ8bFENe0TO~0MlqdLTq4cEq=F8oI9u9;<$yPs^pzE^|p9En`b2z}RwePHSK3;_^Q zo4d>zP#oWbv332JuYOcr{X?!38nM%{4ln!F%9xmN6`jPQ&t}30llj$R856?$`Qu_U zP)sS!Mk?+a6qY^S8G6MezP#+dW$Y*0${S%lUni=G=oRelX=Z2yOZag%2kOR5+*XsJ z-iU2f8ph$;Y3j?Ikbf(4ooK-YJtSDe*U2+DpLtWbK$pNt-Dclh)1w`&(1X)N*?FB1 z=2KsdS+@f}^!I|d#87%f@DrM^!XsFx=|i&?>v*PD3-^_?76lJ$n*-v`aLz`a(nPYku z!}Ke4Cu}0}4+#dF4((1hWRkJZLa2n17M!f#gL1r_+k6^LSLQf<%3xjZn78!8+D30) zY?KbkDIKdCir(NG`|q0s-PlXi>LgfDxhSRwJ+%^Us@Jd+vsnQmOYTBP)^Uoww1PKD z-$<1YhUW zOI0OnU*wA3=DiHnt19KdGZqdB8b(K`Kk&U;pyQ>$v7tu2xxnZ$;q2j@zLm8x&5rME z5|XRT4D0MkF`_Zg5n(w$Qj8qA+c>qK z@Z#YyjaI^)HXK`zh2WfZfdZ+}^9}u@GsShsfdOo~z`-LQpfWSy4qB_%{Q?#%^DXb$ zZ$FxCLM~Nz`gM2w*X#}&F%Hs5E=mZ4+VX13dppa;GIv-FQ#fb@P{djY|B*HPD1hWg z7qwBn<*ejraiw_luSE1u!iQ!*kK}kx#&P+k$|ZxhQ8zHl8;U4KhXmb#iqx8fI63MA zTON8tdV0gyPx7#W;YSs$vr`zbfqxWmA{U$-GIYyaFa0;t8#ZpEttwl5w)E|D1qmGgXF>$5`S7yOt{7UQ= zu?p)#Zol4pl%wO!rIUY#@#8^&3QolvAvdb0j#e`|!%tWjH?J_d8RRnDZ=;FHncN7h{7zn*#@Wf5r5V z@sQ^d4Yl(qT4n^L6hN3^n4qVHerP-7d;I@4vBdVQJe+&Xg5P~hcFwr`6~yQ`x2RNy6U zvPs2FmV*bc7K2Hv#G*Hv@EClyc$BYi?$^HaA*^f^e_toLZJ=4ndV6)7W9;p4|n zZGT5?%NIiL%RP8VMS)yyezGV|WmW`fCuAF9>-Tk{0X<66qsso6EkESVPE7dCCcevw zde7*K55HhxNRt+tU>)52)2)DDMOZA~HfRY>l!tcI`qt}Re$M6w2SBn0mB57_1HF4_gSb=ad1~wcl@W8fTv=SrP08Wqd%TJm06Pf{^V-@M&1=AiE~?M{q526 zpLXYNmpTjs1PPz`vD$`6rG^n`m3~z1&JiOvs7kMc|3Kl>sp_j(-|g(cYq(cTjlLxw z8#H~&;Niy2>?HP~jU9cR*t*46;J={G1!_$dbsIC)rdIZlCq8uj#Ow-g9G#ua@ZXPQ(@g8G^TQWzCq#X6 zYH@WSl~yhiUCoO}?{(4L(WF+ejczb@QTKX5SpB`hZXGzp_(B}App$77t0Dwg(yjjV z@W`Bo2#BB`J91<3&1b#P^EHhJq@wl2RB}`KYCrZ)9C|8jq-%2LKSmwgq;p@RCo~wt zKnM?C=_x5)huVF`CAS(kdz1_)(hl7N0OGgqqHCYFJPxr85n{!WEK+%;N3AtZ(8OFN zT!mV7O{DW>R}NW+>Ui^5sFD|`X4=CCP(HOAd3(}jh?c4E8HG-9KQaI9jUF@?2hx2D zQjyzF9_4uEuNd{le$y_e?nm}6S5?B+j4qkMpHD1tOsO^F!Tm~uS z)<(X&zQ8AMfBM0jo<^{B8@XZ}hr7od;%|lFH^ga|!(BB%;PJh2v~)XudT1&CRY;R` zNYlb&>zBngr*DUlT6*Ee>&)j@vbDld$e&!Y*%pMVI(t&1OSgoi4kWzPDOcW@rIriw zHI}W-!eh}~6x;$e9D5sBLWPiZ>$`wgtLUYifo^Z_MQ1fzQxEL6(;x-C9hxQREj>BG z8&|Pd>#={NxAzyv-#Ix-N5oMIF_c@a`Q zhYoqWd++0j(z?F)3v(T6$=cofFq8j**=PGrcLHG3Zl6IXI{O>mmjyDS~>%UUmsq~E~@DGTg)1XaWabs9Gk+43<>IO&!u>cS@RntM@{D>SJ2gz4G zdecwisFq^a0^8Ap0oz?TYIU!~zSH}cR=>63<&Q*(J*H}Nz(gTZ+-w{El%;!M!n0~? z{dXW_Fb1glQ^=}52o(yG+ViHeQl0N|_OB@*---nTg_9!+THitpxHe|Ypwm^Bl$QXI`vkf%h7?oQy7r%LU4wcaA6c(cep%@AI``}5TlZ(!*hZc9ZFs*jZu2l;+H_g%FB$ftF%L~mS(;;$ z@~`E2e6NXRGcr9eQv&(*+dsvXn(WFPtfB|G)4bIG>;tkoY=F=krnefvwmTazVzPAd6gHgcQ0vio>z(iWqfcV0DvN&sYr9Ns#5HI#0|dHtO0#ss$B zyHlUWt`yKI0Hv{r+zVL-9hRYoA9(MtKmmWYjYa&u2g2GzEIm#e=&fKZ#JQVXav%d< zAN-&;(><7b`na@_OO!8tuW{uYgF2N&0+I#@mi@?PfM*bBq`9--CG);}_U!pP@2|oY z+zAL-Rm(_=S8?o!Yb%f+%^=Be&57N_B|Dj;z1xVQb!tJYt91|qTP9Z7UbZ{4NNNGm zywk=Zm6vgq9kO;uhsd9o_vYHO;{FCEoBxix#1}aRZXxk=VGxh8F9j97Qfu4McNyNn z56gm+my9C;q#A*K7>h4{d?@4o5fydg=Tat&=g3bn_A6PmQ|oEMw?}mAvO-(u(U7or z!b2IuGCEPn)ugKlJL0qP(it{5XB&!#-vM&ZFs75`#rrfH2H!ZR9t1Kn=#hNwK<`2F;P<}mc!HUqho1d;2_HpJy_-3ZKe_ABuD&vxYBBEB zHSSUFjwdtI)|l$I9j8~8)hK#%;^Ou=K8^1gfF?W0412dW?k?G2a@3}m&Q5)&{3`PKUSF=~F&de0cXGb*>Gh_=P!(z{W@XG((W(c&f@IjwrqThlpI<2`mNM?v((EF zCwefz5ZC1PU2z&#eWAbY&pA+9LOQRUlS>z{X2y7Pf|1c){b>E$ZHRsURNnEqB;WZI z17Lx>b{SvuS^i5nDmMIz-rum?4zUmFhkYVaucEL$tqmo5^j(K)W@ zCRqA~=*1DOW#MAFbA|obVMC<17#HeQbG?x=0;<4ZWuyk6r^F6!ah(wS_OS zPE{M!pHXH3GLI3fs!@ZNHWcV z6%1!4USg4AE4>57bBem@q@OAFs7{*11+!XgfvE`QVsZ~+^O|Oi?jN4E?iGFM#nXA` zEx9PZqw@43(Z8xO`j~p_-1HHC6{6k(%<#c0q5UHpQXxVj>%MUYp4hiL&ifgM;&x|y zf)u@YXVS5^*MaxBouuZAZwHkDyM@eSC>l(WtdY1ct(t}tS#YxIm?XFgvU6|zYlol( z>l0lZwLT952|fg=0D&@Ti(_Uqlc#bU6n;E6-C;cE21e6YtjfkdL>8VjU9T!I4#_q< zMk)E8iMXEMhv7_0XM6kre&@dnu6~3XeT={oS!wK#=8KzDFsCi3=yz2>>*H2H&lQ@R zUKfcqPU!hPj*9Z%DHr`=B$vGQa+6_ccgD}GYM@5`AX$pEmCfI=XmpZbrPLjd*7xG& z=MhnqEI-4u=YKDtq}RvBeE$AoTsrMb@&^mw-g96h7(4^F3=Rapf2$eR3HquLaxTv! zIa)5)_zY+O({086h}t$0eP0SQL6>!w|1E4K8{f|#Iw_jcsSCJAWJ+->A^iN8?eCuJ z)!|Wbi_+rgJ-RU3=K0MkaW>Fe^rt=D_YapK6h4(i7B8vR#)N1xtd)GFP_M3+!w%UZ0HErljHMPR5!{- z5EA~KP4DTkfx}g)2{|e)>L#~bPojjFIC`&T0)o{rc*(&)X)q~a(GMcMDS}n~%|tb^ z$TJg~E+n^C{&Gt%5H@^cD10Ms=yvN2By1sFe})pTO7Iu?3pe(YXf?H>|Blg{G0c@= zj%~1Z>FMx%y!m;*Zv-V?yLx4Cvvhh2gEzSPYaWC*g}PbLy%v4rdBoh47ZJ@J_tE?f zAO{Nq3s>K7gU{Rz;6(>)L2To~E56_>08W7JxS$|6 zEtb?YTLYRv-rvs}IJQ+h-&=_8+q362TGRfB(tI}_ z?k0+`n~Vm6)#=qoNJ)%DI@)nu!)q#IFDi+N!_(!9i3irX9b*y%7b_)DxGaW|49WP6 z-h<9R1*T0=oP)4iTx&;F*)$Ok#d;5H#4e6)%81sgo?Mn^hF78>jY^Im!O>#W)Uy59 ze$z2VU@MUY_YTU<8RT#C(4kzs_#x@*bsD*EC+f;ZXBd54;vas^b(4zU(taGJ#y=sG z9ofm1ofcq+RUyJ+4euti-V}*X_IQ;Ikya`s%XRdFA4V1;+k8l$UzZH*vxKM(p7%>9 z&~*I_+>_k6ByK!D_bhoL)MgCBJm$AYdWh0+vS8wiwo$(fY>RK3J-?^-{GwsIWHw}E z3unWtN~Xk(|KXPdo)uQv;sz8QBN3Nf(A_XTT}psPa`gN5eCiK<{(CH~jw8KOSNiS_ z;#H87Qrv&+FTocc)Ep5`)`JGms>G#HsTMyR{Z@OVm${g4n`R`kfemss z(MozV84!KFe_y%n0;9l&TJF#9{zAfYw8yF9kpoTL;o;BwM_yQBCT;L|{rWm^Z04Tj z@4q|7>>3MlyQY>7rbQOLk_jd?8p$swW{jgW0({7G8e?*%Z0z?vhK7rRQ*v%&u=rzy-wx&yo;xay%r&}+(PjyVq%qk zDnV81xyd#^%IBgrD*bJ55l`L^lEg2oE34uvj=z~~h*gUn;?GV~vHvGR9BmaMAmDnQ zYqq_)s7a_AxSQB`b7fYmxhK0kaX$W*nB1&BjR~P@U+V+5EcNT^+j_>)K11&(vMG@6j5OC;p`-^6UGLj5#Dp<-hPpZXTN}5o?vcynP#7<~U#m*VyY@3cGGzNM zRpFVPor3?=@M!lh!s6d9LtZ<})Bj!TUP}``#~61OH;;u?jf%0o&A!{I%kZ0HeELA4 z@WB@#veBHF9|d|@oHdB>9A#3G-mE&+211Dtxl7>`{66#pdve)_*NwZQQuE+-52)_? z;|ADB;UwPo^|Q7KJj&%-j^^i1y%loB1ZilaB;?j*(hSP9^ZTnYp_30t4@mM#-NY(& z_Ii(<#UFSW-%GHt#ypYMU(mxcDqhtBE{$wHWw;j*QY-+vu^7zXeo@;*MnS`;_7^gT zZFq}1B7REB)##N6^-Ya82jr8&*)I<(Y7EVhtw(E)*zWHe5?5yVv?`^_l!SFn2%1}` zmcB@xHl`fjNRV|UH;3xb`O0MYt$aJ&@Fmzp@fh6m(s}}&ZTO*?@NLT|MtHBaaf1-0 z%ymEQn|K@fvsF7SyyxltEf_sI`+9Wg1fcp;79ot(h|{%C5PSHG}fe7p06&WnhAoj}@0TeN+B zeGvKrQRb$tR~(`84vGhpuBM`lI=@l=7wai6zB`E~3lO6Rl^Ei?QkTn3@3n=%Cd1TC zz}e2_=#a=m37)eHhs2=?P?$L-Y>WNCv^#qWFZ!zU&>-np%<5#_rpjB}1O!Y}sosT|XA3c46nGitDPy zCkDZ&i>g?QEYDY-@~&rDHHhl7Pt&c;hu>Hnc;h-qw_2cXU5P->`kyc{IX>Zu&A9T= zBqd-D{XDCtSNSsY~8^F%{TQue-N3rgv@>|aJ zZCHa;RBS7u@PQccG5)_-dT?x)Vd+MfQSN$SXXg4V=is6$@d_D`Z6ozvSt{L37Y&Kk zqSZADn$F>pURTSxe=!nH<*i_y@$9@56K3wnRH*a_bXb8*{{LHf!JuqLae`})MWUOl z;UA&s@5wKg|E!CLvQM5uJ7GAEm9J~55OSBi+sJkHehGvCn&+E@P17}JZ1?*Hy2sBm zn{qQbhXs6F5gN}B@OmTg8xEyg(9GlrF1{#+&>!h+jrq1K3IA=7qH*{}m9KZy{B|W? zj@oBse^*G~+#YLp0Xo?~vg`b02)+jfvQlxy*gHSm_|6-Cmb>$Ez1wH#K$t|KH$+mM zW?BWa4HABc<=VD&pTmF|#~V&^uvtP#NIe2Mn^{DZWNGofEZyTV+Up!uhu=)JIh0k3t&r{hb{Wbg}J~QO{WA|*TEr%nC zzE+#W>?kVCwbG5(*lSOwcDFwvS|Ae7TV9r&KUg>;lP#lc%U&rB0a06H``*7)+Ij-ei79mvLO-_p^pDwk%MMT|B66r!@pyi0^{FwwnAZPQ9;cK$H~U~v zlC*VRUHoQrH+2VkGCk)!I$fL?N*~xg^sIK0vO{4#VBw!aSRu+42|h?T0;ZKog39ykO}`3hfa zH+x30>bzXjecEne#;A`RRra2NVGJ$(*!p_x{=iwO!DH7sY&WRH13Xl8-eitHK6rO* znXJ2I(qf&A5b0~p&*c|%{CSDi(IN|j>n?A!UVHGtf%{r8H{9Y!5sUv&65wL3h5 z4b?NjC&qyl%Vo**@u3$@Zj|nMWR6lmG0Gp-cu^*e9!+<#^GmNL{`P7}lgip5u=;v_ z{GAK*E4C$;v=oFdKS_TN|LR0q$S?pvKA#Az{ndDNVj;XFcQq%_K>w9)$DJPLQ}kdQ z+CVJpi?bwz!FP$sHo;e=ls2xSk~E%^O9>DsI}w%G+qN zX2)p=Q%}5)Tu@;6l3*kFSzo#PkC15DK0?+SNC>{m^%E&ysus>}xV&znx-fKTGRD;I zlDI=Ylek~bdG9(Odt1{iU9>cXta19^HH|=I`r;~t|0qlGij{!QwT4l)hJ4mzEu?x7m!AID{T|^Y#^3?E$E2H>i1h? zpA8WR*N`}ln?4lNz7NsJ`|<`FN;35~mF%Uqo)byFb}hjqOZ-I}fwhK*#m&Pz!~2defsD0UAyx+C?5%<*(RdRA3xwRAw zW1;SM>3$$h57wrs7~(TTNfv!ead+W`G}CqxuGd02;gNQ**Yt4LqnP?(A6;Vsi=TTY zFCCBX^9c(=hczO-2v%{aj8gj4A2b%bF-U3wGagpl%Zf2eDlll$+i22G%c2Gozq?u? z#1cms0A5IF`RqfQW?@E_J}p_PnG03d1FdPo`ST`~vWJ9wavL++X!c&v{iZOUzn4|= zm8FSQ74po9@{I7mF%cda%l*-T4tL2u?y&{ufmMi}6caGgg1<}M-w4UtD*kMy;@ zyG-vo!*q;FNdBMci_gpX7f&SQBWC%fi{Iecs(&3i#?W$pIZ?g%cA^POuovltL`wxgcm7_7sZFyjEP)_%Qg5_V7Rw|Kc!rDUsM6* z#e-_1V`KvV--rHm%II~U&)$!#?0rTon?1qT0J$JDq>&|Nhrqel&u=z(s;z$?F;?Eb zJWv{>>t{?=?nh`k$UM-C6Rv@8&iwx;&_>|Bjv0xPD(1;k7=5utqFvAD>v3idasH>% zA@U*@YB%^g#&1bgg0g{-0JOCRE&q!-wy>bt04q+BJ(Z+WMR;16z>>Za&^Y?HcY0Bn zu-2UvOxOtXcYXxm3}9=mTI7AfN6mRw+gzVFQb+Mb{8S;tby} zu(|vOaoBygG5^v(X98>fl_W&~4eu{rDU5yA?;++sccscF{2{)R#HXF=cqss-f?NCp z^DQ->wpQLwI( z!oQ`-2Jk9lxeEjJw(UY{&mu3$&w82M6dD*Dljzt+5|`dNJ)1+>jhl;MB>md)D+tnx zS%;H_?GvE&^rp59a_O0r{tsJMaUVL z()@U9{e(Q=C#o>F;=xRq?mKM41Sz%*>u3MeeZkRJtH_U}A8oq#S)^8UpUVP`cw3;yVPMh+r2&0@j&>sdC#hfi2MAsSV2`YAXjTnqU zz)dzlWh$vkpd8hB-)Yf{A#{kmIBMPSdIG)d0dAc=)`r(ZHUuq4atfT6jKx_!p#0#K z19J=4|F;@UnD{S^BT+{zSiCiX`E~*8RpCU<@gh)POiR$NGBQRZcyZ{SC48d(y&0EI z*Z-ahFpFJP8UM7l#0+;dR!Xz6{J(wS1mtfKfxOAqM^w8w8~Y^mf0jauhCCb9^+F6r zf5ZvC5sw~Ad=XDst&}j}I!H!Hs>T!pQNyG(vt9sj3Eq?^^+cIclHpiidedzJFFrQI zD1nf@Tt=d7c_G2~q1j*@QlHhZw}?ZG5uF{`>BCc~o~7<|eXXBNl2!`fPvBHIy)gYx zh!$gzIuhyOf%-7kS*F2;@I$iwnBO~I;aKNxAvq!A{XhLkid)vEUn+xiVFWSJWG|<# zTshLaEUlG4b~b9<1$ge-2NScCkDKd~Dpgc5e3eJyt%I|+mHb)gZZ~ZTmV*x@@$GPL z&h&scX*h5S!_aoFo?^c|D6VdxLAG8H{l{sQ7f`o!YYghp_7D=tN6&ycj7ANYmV@x|SX=73_m|qD4SpW6wuI~gyF}14B|AifyC@#(kk_#SF-ZY{ zNc+Mu?^aQ@x)|~eS;{Xw7hQW5eS}hBD2_( z3^{l&1-8!(D9rEP82kfcY4?VgOC%oD@szs*vLW{Mzf-EPs|I|o@x)P&veAA!$`{E& zxX$xc2L#-oXecl;9IzF3l|Nz%zSDt)>-v_QS*LIq7-v0Jj~xoscqrB|#Xp=`51}~f zb`?@Fdu2>+H+7v^{4m7pXICKfR}@Wm%$AYuQ7VvdUONFq7qWi{20F$lI6WJo* z@XhE&?rs4GRMy^O?iV3Fg?kDkZ?Oj7vdAVdkS0>9^K7RO@|^Q9`K*Vm#Ald*V+(kQ z(S`j6fEUH*l%!_`C~^P+vgic_vL6_*Q=JSAvtC;*CcL5Ns4&NJx#>UKj(2R-Ze0YG zP6JZ&^&c(j~1^BpTXu5WDboNJIX=8%3ui=g!q~uMG3=pDZPN#72Vf zqP<>Rr174Yqx6h=$juk}BhjY&!If^<)Jrk!BW_uhKccDy+nJxeld?^wbVXq(Wn~yD z7$8j_&rN_7G2_!bQWz;Y|G(`sCLOC&<=6b+xuP2vX*IMKqnBG(Ww240mZjR4V14K# zj~cPNO)7S6akW3-g=X^Hl+8j=?D&4P<`WB~Nn{br6dka{4Q{6tM76R#(K{%Q@sbY_ zURkhx)wz2_lu9P z*nCeX^rJ zU#UOPW3k?Tr6ij}7A-;qQdG>3x^9N#Vs>bC>RCxNb7&b4-QM7D#zxs*Rnru=w!GS7 zlfB({s}-%o(u2Bx06YtFSjsOe8#uYXYE{Eocw$lbI?{c-30{og#wk)+!sucv-SxMV{5V>pzGqG%^S?kWRnXyfoJq1M{H03$lZRxC3~I1SKN=jD#hUTBRF0# zAhKNu@0a8x3AR|f0l6uG)u~w5<=CDffcQ~A`~tWh!+NnmzFE%#3W#X-sh&joa?lmil5WF6%#Xw*UhC0(@qFMKbRLRI>O)!%??z5^#p94ZuHHRy=JDe+`J22PV{r-b zT(gmIZsmt0P)hL$I5F#QKR@efma>USP*{f9_F4HPmR|;tP%OKT>XzzXc?HAOkX4K#KTjF zF?pAP5;oZIe4Jcyh3~SjDU=v`)$K$Xq{g{aRRp6o=)YT7&?EMFO#dt;6DqOCo^TI0Ls(!;7c+66uaD3!x>qKJX`MHIDu`$h ziyvrf0={Wx7rb!-qzmP`Kw*enjQ3bJqvLxcts8)a`S~*Iz*98BWu%LwB)08I-)=rt z4G_i?8%@dRYnrcq=<1`KOV9N0svDzaW7t$eK` zaz1JEvDY5-Z5Ehf_fcWqod8J+5ef#l^>vMEf67M!)(P5J>$FdJg|(8p??_3TBaSv{ z3JzOtV-K~)U!e=+L!056rVij`FxE-`N>(8!kj^@zKR8yI;JDNIpVKS`of5F1`^U%H zPBnPfY#)K?F5WeQf~`qnHq%7qIO@<{SnO5sD^rc$|5_)Z-zZtMY7skXBVbrj`jweB zS-qR2OtDqj({1D+kS=<~zUKbFm0ET4MFRT^f!I0AH?!#5kAA0_3Kk81=8IRbdv4(` zvGL61JoWkIf`6miJHbly`sE_|n%Jjdtp>>9*QhM4Pqv!EHyNl=|EnNs zT$HJqYRYY`9Fna$&k8rh;THijtq(fc;#V13)Ng;c)BA4qC$v9c%G{P_{K5Gl%QuQc zEsl$VV(NjP@cRT{W7gv_@)Sbq4FQoiIcoExTCqhL1k2i_HOY>zZvQ(9{s~dGrR0eD z^7zNtA&TpcSEwJC&PXZ)b`swrs!?@NFOf_ri@RSWF2`a>k5UyZDsj9!m4hqisckK| z=_}wnX#eV*0TGK6LjheM?S}c3RY_iG)nq%?I(x(N!Mb=*sbC;l^pAv|O10PD%mz1^ zr4xW!GJiiX*2%z|v&$neZ~eknQ3HhIoG-Eem#lSuB2kO-C#yY%&Ao7>CuTr2SI&xB zeXrwCXM`ro_ZG;rtR5=FuiN4;atGp6Wxd5_@egy^o}mL6;{1uGN5O3X=3-Caww~@e z0(ASy?0(qpP(0lr+Bp|S`Ik&Sdok5EEIedrT4Z`EbW{@jSjP55`=`UIwc%Bl#m4Pr z!~6K{1SHPAcmiqW;%CA1uE9>kR+4xZAE{%ow|Nv5)Q}VjCs1 zQ8!zd9+c;_7lviZ#5)Y;p1Tr@l{UeurF+@j7QvLRb^B zl1?i|BO%+S3f9;%FS<<^0Q{9#o2&M{l({0g1gJ{q6|!@n&j9lz={Y!Z8gG9K$H)x_ z7Q$_$6IFP=CRO^Vehk{h0yffzjqiR-VQBBkJbxAGM6edH=r(jL9{LS+%S z!_M7bXM?G^&(zI1c$=PJAEo5Y7DM6sMDVVR9LEaBHk?h$H4=2*iRRGR>3?UuCNsOL$3zBm!9Y*-Xb}+5r$R?pmY2|GC)1OK zH9HM0Po*cevC_jT{A`u#U!_tg_vtjoPxYy&nxuXW7NC2xuJ13tqG6&uh;ixy+;xE9 zE0-DC`9!UL!SZS&dP=1e7hrh|+8vbXgiz{MXcfs-2#9L4P3fDj>y%mTWp1*i9Zu^9#&h2+ z{M94Ocz$JPJ;x}^v^)oW)0*^0~}^j3w$=0W_)UQJFM6Uog?08 zF9+c{yb_G9mY!_JY(%;K-B{%P;i8Hu|2}iw!Z)!XMnSX;l2VmD=21=WK|hp4F+psS zbTnjg)sAF$9m@6N?aiLxAaw`E%%dxD?AXg_Fcp=tM>1qx3Q?2z?mv->eeNNT&9O>C z7v5irzAM8*+-rz>G0ztcz*qK3JQRSokeuAAo_!VqK%=7Ri=tpqqP0f4D>>5v;EaAy zF8iNMi#cT@ri*kcAmw0zlsKVjuSR`#UfCMYOw~K?jX0aRkLmz)a6R2{?+oh+(mM7Y z>5j{@@xH~(tQKj2eowWaTsH>6IDi%I<5mVJ3dU6p)b6o+n^D|;jj(QUY0hXTrdDI3i_wk~>G?;oNj5pAiX z4tUgxA&q)N&MA-(>D&kbA6ZmIS4}MeB7T7#V@-tLV@~pb5fRr;VxhxCVa2pbYqb4F zJa8-y7Yy)nir#;2?Kr*gEK5hwsgLG%isoY2lL4d=cAAp6w)6-0=a-{LnFd0W8!OST zv^fL~fT?D~F#Ej2iAwLMx{zd|X=?Lz54Q89+2$Oahn<$?HNiaDf5~?K7A6nl`2Z3z z2FaxIxZAjr6sR>X zGHR+?ElX&d7u80ga=hYtn}%5Kfk0A^4IvNsCSJBMj3}nVV7q!H(mr7` z_lpnQJ-?9r5Q2xbH&lLh3O%2JcrQ#Xl~w;Q!UzPvRQ4+q>17^R&o{ii5Fn(~_kAutHtTjQg0{1r?)LYmUXT%s4UtMx%E(k%@0_v>Oi>9~-Kmkq46LUOcsA-ee$9#^L3VD5WM}|+@g(TDY ziuMM*PPK_LZ&9zaTX+KNr2_3!CO28%MLD2*x5EH~rl*P(mjB%tiAtn^hM=6N#<`XW zFUeoYyz4DCT2K@8=?EI${NMg|0BU*#-xZr4PnWPr7nP|{Nr2(k5JkQ9sec9Z z+4WT>ZIxyecmq$60`gdMhtHrz^6w+vf8qH(m1krF!A_SG(cEP%pUS-y+m4m8k16^x z7={t|H$mHke-3=;sSHxkwx1{Gw|Ws|8bBt0=*P_2=w-8-%#HWqgO_c-ME^I9U)lT8 zge?zH-tDX`8UZX3_O^ASMO$a1-x-PNhL@TNInlkQSPeTg`b+mSv5kqEOk1tY7;;{6 za#NW+nt1@|HFz!G$f~B3A<2NFa~{guA!qGKBru=0z_0R*X>>T4dloNRwv}ay!U0Wi zweNdgXJEyIXl&BGYGn29^7e5u&BuDYF->hd*9tAM>@|+wP1hdKOl$yd4j|ew5gsY963|6amcPgZIAfqbtQ%=pE;8cWn*_*hSl)KNs^QCT(KE zOkMv#Ad+a(U*=Mc1Uy8^+eHuhwWi#JupjiJGZN}eBAlM7(vD>eV)H|`>k;M}!2;kI zPBZMC_52&Pn)=$i-_N=4zXGaIV!`UwtWCP@)3Po>t)#3|Ca0QdnSms_B6@Ld423xg zt&3hv3jh6mZUvr-rGU2a+~dbW6NrGv?XR%+yDU~k+kSOWvEJVb$bHW23%rgeO}rTz z-GDo@V?lmPTrk&8RCQxx5hPnk6JtEAtRSXNt5@q(uGIR|Ss^hB*IuUjWX_`jP>8B{ zi2z%k@|)0rzn>>j>uxcB8VNbVyl|BTnLil83915Etz3wT^cu6K?cwTs0RS*rQ4U?szV8eXoWel&o5pRPd^t5pq8uU#!#1=<5Gy#OgwNl z;%(r5;Eo5U9_|y~eY{Of@v_Ij^FqQ#aKn1wQx|Sdwxc1{57w`gl>zp6RmxOy;aKaZ z;N%_2(oHuP;HI-kh_Y9W3}TZh2b_TLHUVQLy=%PPZ?|I|H1DIb_aMtfA2OCP$NK$L z8b4=Vd;a?m(P*3dZ1>xG3b%PT*{G)V>DPzz44nb8A`kHe$>%HNB;fcWX4MPjX$~6A zL6=9|x?&Q&`^yAw1$SBw&*TIXa)r!Qrjg7%i~qm!y7pOgy{xsJhI#J3DgH&-_jV-c z(-TZ?dQ~dYMNDHYk2SyGZVQLa8MTE^2jCVRZYx7C&ogblx6AMW!Z)W5AT+>hboVltjTft>` zeUyyo0$q*Oi7xJ`UfUI@)BGjtK99N!o%#<2^XB`(`)|SS&!uk?2Q-NC4|njhPhLqL zkla1D1P00_n-#L%Kj1SgTk3FCWn@F>k6_1@?!Xm)2W*KmZ{5%NvSL&OW}hj|SWB7l zfE4%bJV&;hFd(ZWvi;{syas4qnaY4_ZWQ#^quX@|KSA|u+AyN+(Fe(-b9wVvnj^v0 zAdFk4F|_|clm$mGy&d8}0M0o(SMIT$@R&~6aGJ1z-VEI1vZ^cxyiY&S_{9Keq#doN=njbKpKOK*78019j5g;!zg?zT%Q!ZP~_b;+3D@RK(;Fd zzV%8-J|qgtJ+;F>U)0UK|7uIi@OT`xjKpv9pvF1!;-aEH6f) zS@!&f@PWq8a88+6vSuRSfQ^Up-k4!77wM4S@q>`;VUHp0$|G4%@AvtYwGMiv2HcjM z9i#yHM}s@lgiTi~_iE`d2KH$kBJ&SAxlyxnjBX5NIhkX6g5v)I)m`EwY-h=g9)n}_ za^J3Sziu+@ZxdXsqH1KrY~ihySW1FUlI zQ_C{hx>wrbZqw-W$|%9AwZJ&k+#$j0-a*D74V08C`>YvP8DVWyx<;ajwXYp4HydaPFN-GA(39Zr2BC+pZjF{$9CD5K;cn+jWmNIC04vqBK@70TBGWV1?7U1 z#=L?4EvjCk3H!Pz?u+ITL=LhHx#BD@L=RzA?Fe@k4ZI_(JOieLZM7%rJbDXx& zoH(pzkuuW6yQ0u_n%b>|3c4+_=-A_Ylu^giE7m~+EVq!e|6>buC}>7#I^Y#Xz$oSj zjCF!(_$mW10}IT3#_iqsOYMg!_sxZNyltxu(cj288j+>2;`R4}M0yZkikmbGbrB_MUe zpEO4ds*qR&-+nWIu=zgp8P6h#1k=Srr}hDTfhkKaXFkO^$5zlDpo2bAlu@KLsmvf# zY=#*jhY>KB6n^t(uj#T!Z0$yU5#e$p$}OrMd{rhHimEs1+lKPI`s}lNr8K1eu+bI} z7F37Dfb^ydfjX%Z{6AC(%7|r!ReG~b5P=~YI=_hv07Z51y<1(|?|d>%Q38*rMV+3+ zq%GKeVRZKiqXVy$$BosBbiO<26ksMj4|T1@K7uVE%V#BgJAs z0+2S}h-8=hVY`m|es;H$0X#qh11PPCtnD$A3x?p2pN|W3iRjI9SFr3s?JB%VptejS zU{=IU4)p_G4f?d@fEHU_>%4h?eM|5GI)4i9{!(W{sk+LyL}Ty7{3xH!%Ck+=@d^V* z31$5r)o&*NP@nzxf7PAkotbM2g{S9FRnm@mWhe4Y+03+T%xHk~Ha|nTMYKVGHWm1H z{9nw+F30H&9QE?7DleVdN=0>|0CU<;4EAE)K&U|nT`Zi7V(H3p|0VMMfXJ0*Y!wr- zfrX^7UoRNl2(5a4zgKRRy6qfzRKMMFKs6gn?A@NrpdRwZce{eW`5&6Qo8`WGSAsOm zDe6-Lu72%5n2=(DOuVgfH^sJdJN^49hCdgyi%#8*BryZ$KXolIU&a!f{_yBOC1mu@ z10T%PaY0V(xzl6qbI0Q!xN&n)Zubw?_UcaKPvN5Zjpm-TFMTbnyzX8bx*zrp0V6XJ z@O!&iQ#ot}9IjBPe%O;0!9-!B??*`530{W_PxLi=fGVPG>^;N;b1|ruKS>;FY9o?i zqLdOArLU37Rc9JI3-7p7%J%=s(Wcu>kS5ZKhrOSm4B-;2sN6-)y$S~s^3uqL#uwtN z(y0HvheVm^rjG@=?}@ju-NKHeXl5{&etTJv0UWS;y6{P&W)Ph~v^f+%=}%pTQdtm+ z1CbHs>-4BIvfKUr$043mbm(i<&!2GxnMA=j8}npG;-FKB;O6|C(PWB&l2+MouFRoe z<9%VrJB+5wS%2{=J@d;x>eIP!et)+dr1S7X834a}J|R};4%}9jd`6c4@RE}XXlCS^ z1qbV#L`nN&R%<%+kFoobHvRT}?X0l`=g=OkpcOeHY2t$53~wJ={h_;+ZQ;CzZ|x$yQ%8ov1pNE+Vu3 zHfvP)XD_dtTt(x@u6h;+^yZO7ENnD)L`xj!U?y;(01Y4&=Ya?J3exY3nq#?_(WaVR zGbfj#3jc~(UM}@7T+?4R7WA$!7a@7yX-76syzIPQy5VK|T71T}?cdlH;rG6I{Q9qq z@!v=uA|ZiDN#RJjTEk^DbIHU^vK>uEtz)hHRAqH5Y+KG%_t>< zyprW-^@cI67s`+kMxeB<99I__k5{VbU(R9mLphpDS1dG3^ zvV^Uo;O8Mjh0I0e!V~Sh-iq97#}zmRA8PBQDtt__$i@@QBN*#5`Lw1y-|k#_Cc#`U z*|n9?J2N$8c}RK0<-fWk(RVags`f zl&UnuGUmm&!9=*+IjVOzglyBc(6I8tL`gI$Q&YO|2u_%+w zm6(k*a$-A?<9@(s7)Ht(;4b?5SA~@L7^8?lgIwjuAfhk!p7_q-EbHq+`^Wg$+1& z-_+iFQTTom62OU8(WOjqlf~T0#2uFp`h94r>x|@N=^^V0St?1oqE6qTf3^~6YYd791q-hdh#zPC|uF8 zpQGn%1#GPnSO3^{8Rx$M27k7z8M{X`>HaRBgmGwI`*Qr+>q=Md$B{qeV7rv1P!*U) zDdBB7fzgdKdag2ohmHTuAE29+7xb`*eDHaeo|r3Fp<)wOOgSB#{anR$Nay29TY&6A zoZ|s=-n(Ul^Uhm7vmVXJ-uDE!1_U`PPX{J`0ViYC2?qkj=$Lt-w{t*P@Wwu~cT26u3FF#c4n-PsoH<$YkOgILh? z;k9Gc)$5l&OdT{mhI*M&sUnx#ZV+)0R#m1o$p!3*UYX@yvhBZoDAAWNf;26EQ714S z{?ueZIsvRuSk{<%N>sG7jlSfZT3G9a%jW66mhCQf<*$JWbS%oT3*wRQ#jkx`f2p1x z9c#*om*LLTU^q=-Aq^;CVSh6PvN&TFfjW2umX>z07m$v~3(`(&b-vLyowDmk4`Iu1 z#8K+Jf9bd7`G`-*Z1g+)jgWTHyeB*GviDp|%1$r4s%%2=mu;1Q zZVlH%P!D?J9rR}D>mh!v#NOAmUpU6?zn$*5PdjSqIC{?Voq$KKh(B{b7_(IYd|{zu zIL99?v6af*9T3fd-e#P{@l`UY)+sw1?mR9~0Y5zQ{L-Q;llf{Q`can7;i`V4^2Lse zGUUx!`Blyr^;ycL(7SiF2^$>ux{80bN1W?3l#19{T!UH;_z93fYZzkD<9V-8GK~^! zWa2bwTwgGERu30YuGVRp>Lnitsc4JlyB(&C(+V6! ztUbm4l+w)ik7+wD(l66m_v9U^VFV1geouWLSYj{DUHl@ogLoEMsb1Z$I=k=P5r!47 z1?0|cgV4&O(r=*vn@!D!6_OE8R8%$WH4$&PF(&V#`|LH51?>?20d7irUsgmJp31j% z6E&@Vi$y=|&T}RGn_-6EWnY}LpK0cwbt%^c^A=X^E|X$c4r87aaxXHzMZeL?WE{ut z1!22*ONCt87?Wfc9!Y60FK@@#zVCD(K!?nkes6sFzTj*-g7BB(EOEByX&&fuYP#!V z&t*Ry+za8;f&R4?%-d_}yw7jTFAqQz_hX!16>Q^rW!vmbT zea{HOsr;nBkW{HPlD;=}!&g7SRBxXoHm7aBq&bV(lXjmev6p$;47jK~goD#e=$SIL zfqY$7Qga})3SEW{|2w&1R9VGlmG`PC>sRQG~E z8NTmEs7hdy)Mw$U#arK^*K9;g>GjG$;}u4!14Fe0W=Db-*)N;{%V5k)7e}->zGgMX zkdP2=&J04e4DKl`!JMG8t;+Yb971d*E5S|YuR)G4mplDX91i`(aORT>sr7B8$LDrR zpk3@rKw-WUNjcfw!T*Eg;s0B*N7Twn`#=!4KUycX;g4zK4!dW6E8pyNn^K6JI-TBa zR;V%XGo(BzCzqw9rp)W|@fojU+50@d_Q$;XmB|;%$O`|a>tv-y2njsIWJokPJ}a@7QGb}#Q&TUW0A|q>Ya<{g#%%Phl3T^# z+u%`WFjt)4i!BKvtJq|TE$apsE_P+sSt6F7Z;}6El3dz5D#qvVzWcP}o&;W>#o_G8 zz$WRow%r|BvX+_a#3)c>$V#uE_UmmfeR~2FLHo*4}E=T+1>b3n_Kc zd(=JH;ciB+7JhDw_VPw(a(|VcMnBXLXiPrRiz(Qh-TZRava#$iIop&714;C za||h73U}-1$p+%uB)xH1Z}laQhEeq459zwO%J*d~-ZW~WVSEZY?U)7#=TnNC*Re-{ zO?}0o%r(6JU2lcj-Gv;Qsl+atle#}3QM3MJeue~=FaTc07j})&XKAV80|F=v2p}Q3 z!@I(|o$4I9DDJY&;^1TyF43paMp9c29iiGZR9y*x)XJ=;abd#~GfnsWivs_5+W8c$ z-8oiRw(pHTQ@mI6z`f=*{%k`e&2-e~G4?V#y}M`soyh{tGTS0gm^-O;L)GXdmiNQ) zG&z>?_SiX4ZE#NmU-D9RoNdPu7j`NS>!etCE-~OQw{|{Ja&7(n3)S24rWS+aDs1c1 zp-aQ4iqdN?vDge`g#I3k%}#|o;_9egX(TwllM~pR71ezrW4kD2IVfpdU2JYn?&CyS zHIH*t+AYx4@x0SjMBI;L2Xeu}4bpP<{`{woDw+Xu?i*gG8r8j@9B8F`^+1)&unH{a zX_e+4gH{I!mW$qJ6uX~l4WNI~!}@J$fsln~qdc|3>km>6-pcdEX!uvdZoO5tE}*}4 z|AQAgn^K@Uyq?5U!hbP~0lGQ92q<7acVpq2UFV;Qu!@?f3<8Hxo{v&p&f$4j6?#`#t5iA46*?B3>e)f+B zw~LeHE*l+VK#)dTUKWDm@pmTl>y#2$BHnR{!_Lx#p44gSj3C$Jr;Ng8?P|Ji@|gkE zX^6k=FWV?Oa4n1TU&YwI*mPW(dLtOvnJ7c^GJb;Nb6_OmVYyPQr_g6itk{}yTW{dV z5@m8c_o?ic=!s0@lwI2b*mpa6{9eEF5FeXyL~!p^PPIEQXn&$a&)7>jSYa*P=uPgs z^w>%vnMbse8AtxDv_fY;u`0+CZ22|*%q{gKK65k=3?(T0vW@n*@43QcpoI7_{;Zn8letdivWnS>CKPc-5JsB-ioYPt5{ zCX#84Y1q*Ekdi9NuC6JXRSH-U<{7*B6RuQt3%-7WmU`U?X zFg6wSmwqs^l{?>Dc=qVu70pM$D&v|dBQ#qi56c-xDF3wba+*E**8kg{0&6KO%IFgJ z4bJ_$H_e*nI;}<*5iD^g=+o(GQ=$cF1Jh2U17_eUY_s0P{T^ul+(*v_l0~2!tIhWz zW(OSAm3JJC8eT(L$JnF`lgQM=GX=7_oLCf}KUPOQE*x|@!6Lm(z-6Gl_+@Lwms$MD zJ`tsDwh^IdjUdsF3+VE~zB-s9+Pq|b^e;@8-s;Bg=4Zal2{C=0&!zhPSd(3MkA*O; z$bHS@@2!aS*j3+4yk zhv8YU#23eI|2DoiC0Lh}%}}aAJD#LyLaF<+5%i?aM{Z%&T7PTTxIXO1Nzgbx44>j{-jk` zd8AlN5kuSb(Q`xvH4RTF#jCKtdhLyzMoSr>rrThCXEr9y zEyd(`HVJUtf8rjK_&vuqLjP4n)9zG^j}2kLWe)GFrF8NjQE&w#D=vB*;-a73_aUJ& zS|&gKh**8^B&pG~e}C=H6tKbN)BMG8J~wb03PN9QXj@DlODJ&-&JFyPnM z3{(%hBXg+{MvKnD_$AV%*vV3otW3v|_pvKGd2!)OEzB6>Bes{uGK^>Zh{-=f^Vb>Km^CJ zKjr0F1>kXMB;hOOB=*6IIa;QoIou(&%aZ#7tWr+8&vw?E(xL2=o`moHJ)SYVy5?U2 zMru;tF`}Pq8}sXi=kC^n#|Jl3o;)n>(p$yf9HN}szIW!SP={T1z8aUddrvkdwt|bD zhew{u>E1w9J7mIIohA$OY>Ss<5@DBWmwd%;Ei#_^XJlicwUc>ox#9oL$cq)vbk}N& z97CJh(>7kWE5>ErX9hzk#gqNmFUX}#?Fn~g+8AZHj_ERzY4>IilG{WPq2+vj;hPR3 z!6UBj1w%&Re)odW!C0f*q$`pCA!k+$%br>*xb-?iGZh08h48atSN7Xk1v%X?&A(QADbGM(3VZh74Md?7aBuv#opcv0heDxGHOPf*zpCo;AuMrqLGG4EAR9c2xSBak8GpJ<)_pRs1M1QcwN_Y;0#+$7;&AOb)%~(Yk#TR z-mvVcs1;w$sqqKS8K3 ztj3m);$w*T&^t#WuilDDBAuY~ZQZ)LY8mxqbnbaw>v2u1heNzcUnn8OVlfr2GW=2p zM;;x8Tyei&m-(AkES-sW_Z$n|W}#i(ld1q3s8vnHpq4uD63v?ls}j>NMjy1r8rh3m z31PlI>fW1eb!s}yhWZFBX))4uY{qqxc)}Z?R+4W(Q2&wt)hQbbAH}A5fQMR`0 zt*Ax%RxIjuyN8EiCfNMMGIph=qa7e>#E9-AMS5zN8W|;% z9^@VlT1_C>Yyk9wHULsT3*gUyGAOdJYWNbc?LgM^ZE?WdZTsJj>F4J1`xiJ51)g?ACm~sq6GAo>O)NZhwys-#;eGFDmUy zwp$K!`>CIgG7#wP_>(#B+q!}Z>aFFckL>ZJshm*BXZozxnAHBb!0pg%&|Cn5U~nKd zp%i2}Sk8v#0`#y-)Fi+K&R1hiJ3ygRY9emek^e@N!ms#A%uh~i%D25A59p&q=Zv`> z8KiG2qPZ`2e=u~j(hSjAVWkyn5+DX%;%(d3_53`<<-*GtPouk#{Z~vVf#t|(cl2|A zg9&Q57ws3^Y-12s)K@-xc2O{j8a}nib6K+LU}i_&7804li=xX`(I2~1#cg%dQWnyJ zFQ|5Em%l2pvq=oDKAbgsZTr`w%9$<~LYAg9!-9{#7n{pJ^N$%{tX!@m2OSSM{OU8K z>gNCqt$X@Ot5*YSf9po0X-9C^@EWXmp=3=GvkIvJbxySrqR*)((9*IrK&v@n^p(TR*mXbZgDCKZ8d)+lwVw%;Q&y zWU1hgV$LuosN$m5=rmPnFgS(j`4&;KpOi@wF?VPo`1a#T)V5bO zzNG|FlYToMYP}u@#Y%WVd^@|MUdUn~9nFZ4WUN#;AmjQ9`C0+bns)41w|Hi-4sUl7 zCt;IvJ6S$_Wp8PZec;pJv2o1G3Gnj&0F@$4eM}>pG*vqr>%{`hqsplwiMCRn9H@6n z+i7;K^_ocSP%}*;{^t8UpbfO>W7BWF+FxvV8z$RNzi0eqN!&>$E73jDpR*EBczSvL z>EUb-PsEBVAkPfJyA^H@JWKvS4L3ZbH@a8PFCO zcA3P*kKH6(<6m*BC|BbVc({=)Dl`H-k&-?u$>q9Qv7-YVgbJC~xd1zNbNi5@xbj}UyE7n9tA3-kMWm8z+GF)kwrLk@qhkSH%cf#|^9gJs5vdAJ-&4yPV zRIvahNM3-Ozjj^!ZjD)u^!)o`^5!?ZyoBQqlg?1-$oU9!T}!ow4e+qr7=7@K@4v62 zWA0E$H1G&Pk{i@GEjArmw9IUQE21?p)x7*qzRo<;eIa&EkbS=Zcu;S$Wmh9Z8y0f5 zD=ND3HH1s05-oizK&s8pP;uMIMR04xjmE&IkUf{a*jziBiRITu_E7ajDK>wL@Q2H| zn#4}(Fjn4%FJDOQ(_uUgP(H-5T;Eho>RjT2Q!#Q5#7DC1DZfrJs2xl{W>7%jFGsEV z+4GJ2PRGsc7@@9>sgcTOlm(fMD^XL%WjL#iC^-mNkH}Lhs~b@V-?abxnr{)XsI7t| zGlt<7s8bEn+Hu3af+ZU%*km`8`z+A}q?W9?UF#kydcza`bJz zLo@xv0pD{aP<0iIy{A7KP^G5oRAjvOw6q~`P5SM@kTTCk>7$1aNzaN+rmO-eAfd0% zP!VUO)r+4H3upAS2o!9YxuW)C9OztS*!ccrK_g*EV-aH=rS{FD6N@9&H^VD7Fnc?C zbOY)T=1??Y;K}A39V_`s#BtyOJSFB}R_f{H5$*#JkXa6}mA*52$@=%Kq$DwWd5Q3D zVTi>-Ql~X@%%W&EAQ}0w0l{WNOH%82s&neUC9WTS*qt#^)hl`6hOHTaE%p_?9hbzI zMk8`)ffGBDyHUi$vVlCiJ#JL~*b5p`fUOv1JDe%1mO`=4sQSKN+{$*|v4EzTH?m}%b?F2m6lr25 zX+nYtV-0oYV5(6P*Ru0A8P+3806JqlptE~63puLW1t&!O5a!`%6Liw-VmSC zc&d?phJ*sGIoCdl9epr^x-Gqc@ifrc;(M#VH!_a3HW<3MLX+gkpq1asb(;3#(?Jk~ zropFLtJ>xo&(~jxeY@+opI4ndg}-U*ZV=om|G%@+BW&16)?468GfXqc<6c;{i38PI z4PaXpWVCE3^uEW@kFXtZT2-dNS&2F^x^h>%IfuL(*z3|yOSV?4W_?rpHJ&%fbeErs zgYoHB@!$+>l6eH+yhKNyouKFegt+&=)J1XJk5czjYoLK%oWW^xnWOvl&h0Rnrn%l< z2wL~za3!MRKz4{Dv2e1Mnq!C8_*8h(owVv+C+H+hG_<#)ou6PSXzunxmd+xr*+{3g zryPVE398^;6z{g>v&}hP%M{>zc*+5Cw4O@!SLa%*5r;6TuXB@{OOTd#veDTpwHhkzYsU*K}vEo{8d@k)J$d2hk>f0cHJlt(#JE zV=DiIgQ7)4M5WB!|3LifE@cldYeFUsXkq%=fj_UD>(C<|JHEVNuo-p|zB1(YslbOj z+&v;~dTTNNnJ@$pdLLMtF>lb;M2C~*_;CbWLh&&fv8HMI&cXDoZyEc8UjW2WBM(!P zXU(Tpdo#Au>vY*#Lo#jaaZI={XfL&&f;LEz9#F&!6=-i{hQ}xEAWuBbUd0G&ucvz z!8=h3=EzHzrV)sNdTB*|v(2!U7hxoZBaY`%;-fa$sMkA%9uA9{K6S@OMssQET#Oo^H0kaiYg1}z7!)-u03 z{6^iH&Gz1zxA|uR5jPPb(CC#qzn*#0JRV_-5y-vuW9f1+cTwoQE^JsZX>YI}Y#J#VRt zE51s|O>XHAXOYTgAP0Hvm+{{o*xYacSt#aeh(diU!qXVTi$;xl!5!o3ydCR(w=4L` zbb~CJ?)!c#T#`beHnLljazeEEtOVtQPbOYRE)8mQDP`yJ`vgofdQCH0Qxa~!LG27J z%f%mJt&8GZ4az9s%q&E8@f3Vb#HfNsWjK_+<=9qrd8k1m=peGR4 z`uH^lDg;FF(IT~FCAV{fg4MZl>vU6AAhVY!k+Ml&JsRwfDHz!AOuZ7M3eKV`Yp3QP-|Pt*98aLs^M~qPXPO z*{``%`+aSnQu~VmsX8??eL^H{iX2Ts_IqKrsmhD@mZhJX{fY&Z^Y`L_Y^sc^N8zrW zU(FyowFOAiS$Ne0pqlMilmXAT39S#8jY3xz@S%}incjJ{dLZX_bL^N^t*pz4q1U?t?V82SJo@&9sIp%q8)t0A%T}fc*!n&m5J!jb77jGxDcw=> z8@TX|&-gwK5)*g?ZKn@W%OZ6WGfg^BlNgJnP#{aWwcJwe&IGhr$9QI*RYGksz3DG{cTv%$UsOCh{tK8VQM1+>etTeJ7j^^_DSX1(G?RixbBu-}G1#l30HHDA zOpyQ-ytOJT?37>5R^)6?m>hYS7Ny+e=*oNQnD#_~ZdvdPj!sJ7#qc9e>$zu{&)^l6 z$Y;6@oT({b+Qo;PKV2_QD9;Oxk9q8{ZI4aAAw)qDdj4cFP~Rpu%RAXZNCX#>W+ze> z_g7o)5QJz>!6+n0XlqA)b0kxqOaArI5tq&9&dkaOOqIChhmM_-99Z^#IMZ+_U-l%P zP|Pg6-%^omKgdo4<% zf^LqqK4i@jx}?p%ose()2qz$6#+oGm7*=p)dMX)(*j@}&;1T@z9S17nCYIUL3iLcw zhv<|Q>#~j7$65--M-%;k9F@bTe3Y<4HGWr@Kjj1xX9qHov<3S)-gyErEszW>Kt407 z1%z(n5cpP-h@UN0qI&FH`e?lI?73i5yu2%8x#y!VJU87g$yDOkRS%`T2CO`{P|}6& z2#kLu6H3qwy%3LerRANE3qfnw7O);J-MI`FPE$IK&`##j{h$gQ%toM+djX@Vt4@d? zmQm!)Bcw_#A+V&><4%>QO;V<*a^aiU`D84JrrBAHF%;WNdNs|5I9~6}FL2{iK3t5P zP6@G!wU=2fXy2}0jU~RfkqqbIwa^&94ivvmiV2`|^%K~KGjwW1D9nz5sAO-IY5I7v^qJEMdqDX*1sFeKDP%F5WiM$1;6Nqp9|P!Yz9Abz z%Swb>Ui6wiRhXTJh=jA8OEce4TJG3D%&A^1U}fel+ITl=GyrcRs%55^YCDiuG9wN7trE04$N)(L>D z1V^?wCr^-EA1LsRv{WiXNgV={a7;>%F|D+$-Z7D3g7%kN>Q3%Z|RPc7_bXQF|_;@ghV7yPa~DQd16C_JsO zGAsB@VSZTOd>5ot^e7Iy!c{PK5{J{qTgj&E7l=w>B`GW>Ztj%z=k<_cmNM_Jj=Ln=m-cjQQf@zc-dAwE zT#l}d$H8uxtD}KLNxRE#*{+1fI+9)WNRd9Z<49auTl`cF7{*mIzN_)4z3SC7_hufC z3bbu?hm3?Cl(yHQ3_j#{{9bo6T4p2+V@yNMNCpC`@ls=!eF16h!R0q6m&HmvhO-c;ZnL|*pA@;mJzgBNO30&1_6(W;XeXVaR z&m;*~s&m$nn}Er(V5*^Reo1K=Ai+D8~J}rvr*A=TV2|sKUCFirS z!{!PmEX(k?x3;YW*fdDiwrMx`UAAerZ~F;k4LtBjtx)LEiytAdDjJqR7E-+SU*2Bx z>n(l0wpo&Hj;R-(!eClFf!S!qmSm)DwdB5#u*ZIY5s6|NQ*!|}T-QU36mW!=ayI{# z4adUsaV=YYv;jI=W;H>Zbb-0H83_HSX3_i$?9J61(S^>f0mSci{uT%3OsPbfR~223 z?cpx7Hq)-HNbT^sPi{NRoF}fkw-fCq?*2J^)vztfr?%E~@eh2WQzgi|EWAZ4-4d6G zOzzNQooce-h|0Xvm9&ys(gDh>8z{x!QS;PtZ#8V(vI0-+_&weR*7;2yLd$&7t8%&8 zbswTsO@~ZjE`5~1?|uI5%ttrgxqn}PJ?jA)nS&nA9W`=zFz^|iC5EL{R;sUGL%vR{ zC_!_xf=*P3wxXmV$$%`5fkRA)p>YaCz(g)7FtZ z6K5qR^wt~kv6Wy9VP{pt`d+4(^q@P&im3b$GlC_o4RxZa+j9RA_a)OmK#56e{r#DQ z1`e~GfS=zi?62Cg*)&kLVOa*Y{w@m}`2(aQR{mfrupz!`ZW|N*l8HmVTsR8@cvK@; zPT-<~V#2dx`ZqR=O;*g75)=|ZAn58>FEnf#Q^CXH%oWs|FVho8H^ zJ%gBhm3^%Jqpp*JBxplAQ)qV>Q97-5DcqB-6c<5cnX>8g-#(!aJ%d4%<~%Hr&}q>o zk}V0LKf@iAf6d0)`R__FK&RIZs5t}upS=5Z>aXjw4>Xh4;F~?=spPuc>o223{t#1! zS};Qk7Ii4+uK!DQo0pkKuPIFy1QFMatHzGp-ZGBhE4%# zm?5Qx?vfIRVc@y&e%|LVct74A2gl*pxz2s=bMLj+S{v$=>bW{&ncIQ^XvBA9E1-Pb zrv}^BxrNm>#l&@Ms~Z`~vl{AWx_(Eerx4 zkCs&P!dlnmI}hZ>?zrF(lm>RZL>+W(s#9e$&uh0*O2PcqvUOIpQfIf!i|3*RiZg(K z(!5#@aFA`?S?ZH|M16V%aW}`6J8~8_Nk>n%MZxfB87oP0ryym z(rVJXx-#{0?VDmSnWad-->1P%6gy~N?%`;ZD*iKEa?BF=s_2g(5y7gFCOb24 znmgNu|Eavp0fkD?f%|Jo8o$foG{CPeUarrtLV;6e-W)*`D`LL)cii+Nn#?li(-Qarb*$7?pmjR2v=Ls*?s4m%!R0-LH>4o!OZ~ zI+VsDuMOX6-E)CF&Fl};ct?9uomA2N-IOySn2u3r{lUDpL3S+f_{3W-;Kd)68&`o) z?5Fk*9j(br2GG|gIa;tZ*FFfFCZoKt8{*e$C&Nm~;#1fDaFcmKndD&_A~zPcdLP(0 z{aVRa%7E#iZP`L>)m5c!WgrnYQx<=qZ7Y@U$!}(PQCdGi`b@_wVwgDOJt7{H-nfO^`oYI8^;wkqlC3VhVfUv+|61RG# zqVbqZ-o}%?rCGv4k)sYpArH*CouZcxEO=xa?Vjb-2Evjyu4c z;0C8tfGQx|l8}$k^0qA#pu}tL`*b5|CR{lzWVKU`WaH?02^;XxW{j{GHv8517$AFj z9=A@$dM@o6#&xuCQ~Db<1R3?mJn!|BQj_k$NeePOxe9UYLUcKMO6g)jQB-_^-6p+L z0bjh}V71}z((d`yB(lyFch_Sf)AB`J?+E_q0pw*W?Zd6sq6u$oywZ@5$ZclPhT9-t zW6n<$_Kk(>C%^?zj~JeQXnW!!pH(FAoh%GiOevurj}Wg^ta>%PedE&r`$cGLQ6x4y zWMo@FHtW#m~Uz3_`=r!UjY3w;LWdbX`$D7Aw z!7I0m;nw(rHT7P8wN;co?u7e5S+yXY&1TOm?ywQK%lq2Hmx54NXXU(*p}R|ssY}0I z0VVll|A{{ReskY$`=Hd}@;)bXs-m;80T*`a4 z^F2)P_AVnx)EURh1TWwDFh&#;p0GB(;!I0;_%r;fmGAejr5#9WexWtPmH}burEk3t}k!=`KGS2=o`xd`LhMwc3;W6 zUNY|T2b4~?+XQNuQ(Ws9Zoqp3Q)tZNXnD8cgJsY|gCLuW%K6&HlMnzHC%=Q;3rlj@q6g zF(b1a3BQgUU}gE@$=%?%g2ms&jbh93z{6(@(d1OgvT&B#Zd=MdK?5h|ei=}yVsnV? zIqj6{l{G5)M?BJ9DeviMD6Y}PVJ`sk2!4|J&|Q6l^BdCt!9wO?iNxljILr3D+n{Ab zT0%}@nks=+sh4{}MRjXpH9$4{ynuCgI~(Lc=5yaDwu-zv_8|g&5SEf zd~4{T+E-+54Yo7P4~F2bD*!BgQYec0 z+YkR;!Jrx0iGvSK^(awvuhkvP$I?qr-Tau1tDfQqHu6XxR z-5{S)jgVGc!L|?a4AbjzS48XD%Tl6LZ8QKau#lq-1RC?M(jeO;PP8Vosm$|#h{{Z* zjc(Z3Y3bW7t1oa!F5dvKk45wIK#NxWfL6l*o}rB9?P}7Xc6Vm%K-L{1oxHwA0*Y@9 ztIF?rc_dFB8)3Z3TvyX{zGyP_XPAlA#G88uD~>gKxFc0EJgUcXC6f&XjGH_QDm*~@ z9_%B#4lP#u8neW}gh%?{?}Ff-ytOD1N9b(#7Dd&KZE_);Bj^9h0BdYmU5+8xYhmYuH61u4sh=A zI4*_y1q*(IkKwkbbLhM??K^o3l9O||Bt>sb3ai5lSU~Vzv<(sKyaWJ6@tN8?75Wgu zWrO-bv2U;CT0l(bnISQS2`cVH4+M`<*<7dqx?#QkmcBmlLLmJXGy9=IcLVy1Z5vFy zdHxm3WwQaL63Hxg>T&&KCX2+TT zXk}YA!J$*}BtcI2eStIS&w_n^5~H}#%*(vSQ)9|6vsxwE=@MbJ?T_38ik==K-0Npk zGqzEjJ$HB(nbW(RSmz&}hiuAn!sg!r4JAV`k@)3OXa^h|OUJ2TF-=Xp&U7x-f<=cj zt$qsTP#fqDxPJ&y~FCDnPmOx0PV<#iS^C8y-7gzoOsUT<%QM(qjlG(@RiY zw)dP~v@^(z{ISnR&C&JVmiy}UKAeJw@5dr1*;1-2zd->YoCM4_BFuE2l5JH*BEv(! zN!;-^i4!+oiS>J;Me;@)iQ}014=>1?C^`E$Liop~k7Um%WTH~511Yx|f*5X|Hd9FP zhLFA94(8l$Ds)GZz8O1Lj9?{oH>Yjfo;-Nt@v7kU>z%F`>LBNmI0N;voWv${5=Gx! zPS_@Ev~H@grxfF-MZ$kMi^G6wGA2U{J`$LVefSCIghKA?exe_uXQ+hrxFA+hV;EW5$39z9zauI2&>IY^ zHIJr~w$8hw1jm;lo^?^M?5g6yPAZk|N?QW5IwgR$3X1U_%=yOqf_s?z_M{X3x2tuu z-dE~kbLUqlDFIBvji(K7n{X*XAmN78q&i5(w0M^{4hqEoWEtiJ9(x8pmZ5?)NGjbv1FYMko*LIm7#Rw_|jA zYhjH>!>6ZuW`Dq~c=J4AOvAPNP|4p%W}F_iWrQTwTTiFEyUoQ{;#8GbQ-)FAdACpD zznNNcfHSb6@1E_gA834QBT&5YGynE$zzJb*inOpwooI$ftYu^e zH^qW|ASZpsZVn-*vxx^BFx$Ta=GXb?BGepeQ#6tKrZ`d6`g4t%M^yNwc)F*!WpsQv8BYN|T-EE5| zg)$H&(bXjuP@^`kAN?*G+WA5tT}{m#d^0-KtkU0}lO~Ycsv=LO*RD4nzSaA+RM~^| zot$2w$I`HW&|u$t`ld67KSkdLtA?xwRRRD1Mqt?c#NBXh&rsD>$ax8-@2KycXpnm# z2s{AHupYbQ@ZPqmhnhe?|0Eg9KHN=*kWW$~a!_tjQf;tCGb^u+M63XD|NWX>HJB7qaLEo3~a`7PRv8o^H;JJ0L#bE!~9gErL)G9f&}(jHfHwYmIh1amw52RBM6>z40D;^mMDc)7PSls9v)R<6fG5tBM!wgDo}X5g1EXGtcMU(T{~P+OWL zVwhdj=*W{iWn6QImS|!Gl@epV~Vp-=ec~2Kn~ABdnq6K ziU@IsP@cvOmA+ z@in(q2Zi4#C;S!{PGTHcGB0FXWf+!v1+%SQ{!pGmgD}u^{IgG}oA+9}->I9V9{Vlp zl^73Lp&nRVTRn*oLgBehH&Ts;R*IU2F!0=-5AR5xknpj5baW;~oRC|VwVP-qd8t<^ z{|R0@XgU&OuPi~3(`FpS(WFtA9M(7Np0hYAHma?xyY-{W- zS42V&OYsJc%nsFpL4eCwOTAmADM{kTs^12rDeK73a&r2U6iHT!Gn(lcKF>|eW*~1- zMROOQ^qyLQI;d0LlbMrQxOirZaE`RsR)R0x-aQs^r(I+$`~EmZ3Cc%NFvnZKb-b+K z`gjRvBS5-|SPEyOSBo|n85#TStSvaYOs%du@geoK z_%27F{@wWi{@>Z-_gw-X+TJq1V5W=es}Gv3{r>%f9Fti=V=CYmgBrf;jz5zX#IelR zt~vR*@e@23A8PQvP>m5~kC4l3{ZPjCexo1*?YV<8@Vwm)YdY^$aFui?ivR1g>gn4U zb#A=ldrprZcw=(T@GIIm(VT2MK2o=^)SVzA5OP+PiQB$B*7!{W9B zUke%5DQf>L+ETYl_P9fWU)_&A;+w8TZzDMdee^P9)Bt}d;5@RPrXgihDN#yPH$cXu zteFNF%em}a4_c&)U0dXxXp6Z((>xTjplVT`yletzX>Pp!N91c+qm-iQcRSpNsS&fZ@P9q}bLSfXcrAw7xnL@NZ#JOV1y z%`3w7at**!PdLdWq-7XOzl`lE>CO%=o{*t7iZr{WPVVk9Af6M_cx4)gq}IoF0%a!d z8CA%Y9}r&Q@*8P>5ee()GeY}6#(I^{-4?8WCt2uh6cm@JP4QXf?Afm<_SaZ9v{} z5)=g9xMtiYrh}PEd>?qso~_K7p`7{kdBEV#_glb^;D+h0fUsn>#b{OjiiEbl6CNMEfy+j7=bkDvJnZIz z@{zAaYi4HZI+QOh9pC@O%H)^KbJS2;@%{E2jYM)>fipsIuU7GN>qy!rQzc?t%}{Sc zRD+2_NU5Dpc9MLCivg=kfG@4LEyTC7UFDUFE}wo@t735_@{p(!tTqjfjTqw7ZpEwf zYUQVz56%BZ;we@8kU8>C0jz=6rX1p0(1M@FfVNS-Ui%Nul2n1^vn$q(KToE>2KzuI zHXEx1p6n`u+N`-F2ibpej^9NVYWQwr)8~}Di+Ah*dApctpKOcDPm*yVu2_Rosh^J< zP*ubo#+II?XVSh31atOA>(9MY*q!NTf}a^{2z1~Jc1HcmS_Ut8OpCg$Fr4_0dec_% z^zU|g8>PPW^>Jmsve(J4_Kzc8uNkn8RcL%KSYcc`yZnrEbpEgfUQh0DbuHX}Lz0~H zA<9pkL0^Sytj$9{O4Jv>nPa%}D;5yw%L-G1@ z2#ws(H~X*a#pG9fK_5BSXuhEPO9rX4~l0k|KU(fzP~h8;K9|V(IiD(DP1J) z>4iZSU@&y;_kTkx+q0PuLhE3x&G3y+Z79r6-(Fs~P*ZC(hBKkGgkMr5(aA4$X;aD3 znSM}=?wO;JH+>5A>1VFu3CYR-&grqMZe|8N#>e+uugY&DL<%nf#0?FnuY6gjb(IBJ zxe@coyEsw#GdEn!62w{_zn(#az%J&%3=R}d0+dOL;cOz5dVfrmovi9EZR|l%r)YiMu)S)bKWtlKEO<-c4lxz&AL5ViY-6rp80VsAVRUd`C$33@QQ(?1a!>;3*YHY2p% z+Wd|3@Z;D0t3H#WyKRI1)wN)GeH`=zI_>U@THQ_S2HvWhd5duGYb29d2kjVSz}(Ag zB`s3DPdP*i8gzoS3%qEgVx1_G01s`jY^%9-Y3bWPLuWj5HLtm@U%>xRYuMx{Oo}kb z^-xI1Pr{CSqPvVm$ri)#R@<9skwTo@0`EU2Jn`| zL!C;Y8t;BVl{B5qggFu3y-wA=fJC1xAhaL1j%E|%|DytM>2?8(+NsOlEgO*1eRBBK z>5CWUT{)9jv*f9<<-wTbSZY>x2}+20wvQQD*Zwnu4P0G?QD?Z}bNk~S2-3< z-`C%~QilQsH7}ssdIHdP=4*89>-fhHL1V=L*%eZLy=Sqc)Th5`u-*V$P%QR)Wn%m} z=H%npVMU5V%1(tMJFKmSVK zi9OqY?J(NXaV1-i#)EGz+lI5$KMY!x1vot?xOhF+tm~h|L@!sN6%JAkIqbdqS zvR2!nqLOZWQ7Kphy5!s8++_ zTXV}u18#;M$C!RC7-tnxRF~MVnrVFc_|HdL8~&V1*r}ud%LEq!onsNyrHJKvL8jbs zgN1+l2LvGcYU}6SMC)2R^w4i}@pv6hw)i@E%(bsAeQCty#Kk}EBk1+mCybumZ+{%- zm8F7hFaIdeC&sp-PkjkH_GtN2;#C}FRE2;nLO&={v5(CYhrEz!oostE3Gg|ou{2Cv z8kju_wq3^T~t#VSop{C-Wz)l0Uu?VuCx!70u@J z*1o!lz=Kz>KNwi{HjU#dw=_-(Bn)I)KBW?;`4zT)!O#Vu0`bFYH>RF9d>?mbbMDQX z+%Mt9B2Drw4V>9Li{?jNt3FGlN)w0}avwUE)DIqx(9OI!a~Wg4dp!IU{$1Y~^-z_V zm7i9-waQS6wj{1`FJ~>6b1zNC248voKK+IPuS0J{>hrj&+=Twm2s`U~JR1W}co~%+ zn%^&#a%8=JiwLx4rK*p{z2|vjcO2@D0_I%IHCjVWVP0K_p6;=#r@Q2((EcZ3K z&C)w9>xW@)>!NB^NmGtZuH#q82X*RkHjX9qV#gGz{P%s{?;zSK{mdy^3Lfq}ss`5` zFEtrmbh_Csx59S}4ObPM)?NwxN?Uq=v&j=+#lUW*1-g(~=;Z`FQ?v;F?cRT` zHwsz!>dc^J1E_c0v-_(afZ|eLtXD^V(3aZ{O_7rV^qA6W%-wDVc0| zIqrS0QsIL|XV<`)>5olbnUAEf+^)faNVoi>9^1v+aZycJk8;?gk!C3Jw|DH+ac}QU zHf1$;zpE{%rP|}R*1@d<>`uAG`?Q^|Ys3edefcZKqhT5lcxAsMwpKB2&N$XHjLBl& zw8c-$=YKwqC4pF5j*i%)6Xg|KUk>wt9ryQ*-{SE|U;L*UjCm!9x#m~S#bo&YwnIq{ z+B|2@rJ?%{VpUQeuu<*ROX_-Rp25K)FnP-1c?#ObqI;+=GjSE_&EPW0DA!?2;V?IA zay7vfoHW{TIvqd{_xJ$V2i$FkxxVbEx#r)c`oeLN0<`KktIM%L;WIp#`4D$n3S`lEWqvw9@D0&%Z*1LcZE!X6yAbqr{H z`enjAOs@r1>Ha>sQ%Aic-qxHhZlax!NFDGdPIM@^)D*l|^vHdf=CqrHL-o(_Hn>$ML5Xd%uJ|Ku8VkReNa$QIR5EGY@Q+6sg9RpY zsOZoFRWSLJm9$osR$pgf-vT?uo_&xysLCxD)2A6G(dj!ba>oW6Fl7MdfuAb=b7B1h zM&MRCP`PVc1UYiHRe=xI0IKhXlWwSYfZe8ng<;`~sKI&4Edh^ol~HqPp~&8k-bAxQ ztx`~=bhaW-x^14%)B8FRb;;Q z&Q*ty^ym7@Aipj^3U5d}XIzGt$}2uD?k;>LwPGK~KbwsLoW8M#RFl0c`Fy5R3%CvJ zKcU{bf_R2b&5LMt_kC8b3y+<+zA%zRpljQ(90`s( zKVw2jaFCp?YMcl$IIg#yqB5g0xO&fftYj>reX%`iPaI!F+tqARq5c~i#B-*-f85+< z{ClEl+?g=Qz5TAqFTW!x0ZsmewkE(+7JGHUB~(RnkYc5)FMMH)F{igo+p5ul8#@`9 zw>ZZ<-ydjV(@CFX8nV-$@9sapv0Io(c?wchj6=3}PA#aM+io>msv;FyJ=KOR4xfJ8 zKaY0|0>l9QKa8paX_yGhoabufJ9e?>{<6UT1jN#!)I5PK!V|LEV=L(k7!i1{SA@`v zp@!Tz@~~JAWw%3(0V!-IT0!EqJfspq0umM%`bZNe_Qs#vZGy$a?&hY8E4|yX^JA4(Bh$E}uHyM6(WB*fQUHnH zLJ$?~?vB4d@3arKSiV26{W)PU*S{`Mar0QRvU1?GF^4vl=v$P#yFrePy#A&x#T8W& zk-Cxe0O!cn>cmOgh!pWv=vc7UsDff@wBCIE^Vab^^!2{cfk3UbhRGnHSgAZ(SADz{ z+UnG^_=C}~sfK7o1Q`5oRNsNnvN!lfeZtG`ezg||Mo8*P{D4BTjZOVPW5bxk7qte%>mXawm$}^Y$9A>F<;@t;BEs zJ0;g-eyb}$D@`kJD5!B~o(H(&fVY?h)2nqD)5N<(sA2}N7bq$?&dP(Eq#g*w{45@|UB@Usa! zAL)F5u#~TH9;0=k5QCsG;MEU9c2N`8P45s^fYVIlvs5BoU~gL6kiRBZjo)``vY+y#B?M@@ zP|~QZX|a)uW4+s)c8WZ~tHvrsX8;NC?2M0tyP6)UM5 z-obwR&?(YW?#LY);!CP}-7jtwy%SWl;KtKLKp`Jk1#ZYMZnzK79pGf#6ocG?OKq+4 zwP^V~t$OyJ%s5H{h_Zq_rBJQvB=h}WbPXhP?=(LE!ZZBo6f-_1Cc4EK`de~O9YZ&l zaw9we^)HVy32Ci1=Sp~4esEM1OgRhfCXf%+$RjtTJfChk6NBU4ZVlCGGfmJx4K;nG zb*=rj{oUi~rc3pEV=&~`Tv^2 z(gW5xR!(_Ckv&~g+Ru>O!>ao6gUjCwFQ$sbN=Yg8AWtnN90LJo{j};rVcv;A!T%Ern&; z%y&o-Q8suGcGM6FA@37sy3JK2#_q}DrzLkIa2Y6;see8dbb7WoK2)Kknu$3Tc$z_< zoO|}wQuz-}8m7O1=8hbnC{FCX?2l@;bGT;ncm*_%FHChm-C#~bmQ5pW6fX15R!kvSXj(PicGo3_t7ve2$j76)$+=0@ACj_Nwi}q%X2(D$Qk&%2%i>7ydx6!ms@c!?Y zs1qyVb)7enlr_jOt`MISMwH=~&eu*V!Xdd0^1=%~Ke$xFxB)YfiC9t-vANdR)j`PlKHDE*6E*=6i`y@An=0pSB;s&+jKGH zLYguj%*4o5cdL7nf|;^npW5r1l1VxtXiuY!AR`wLqd%X#Ej1a@&H}r*U$W|F^#G&I zqYFc`Bcjx3K8PTM&*y7wM1uiGdtY%wf&Fl$cLM!sW$R|~(E{;e3_0-%xl?mW{g(MQ zl{4OcP&>~b>19Gm{u){nS6I-+eV{+}J4RM99N*>gNB70msYsZ_JdC?49>Jlwo~3Qi6Ko9SVlzMJ5EmRh&>A)5S;S{RkZ|0g4*-DhIz1-{ffTx+6S_U*vumWSv_zk(}^C)GtDN zyzke!LRc59JJq}bmEBSo#XD8JIJ2t*Jv43w z)}XNnkgMCRiJ;_(NqsOX%+~ibIsNZsBY*H;zuxhV_oZ&sqAuZjR-#DW5S;c?5vJ3u zCn%M@zEloSw|M{G#Rn57lxrtVfYk9NXYt|Bm~ClO51G^2qD@}iQp4c}@jIhv7htO% zP$hF0VtpEoX&Wgi9jVtjD;PK{fSQa8*OL}{quDiW`kzfl*c4zF`YS{pezSz*wmQtv zkGMkrHh3?hI<*v*?B%m=dCmikKj<#|?F_{|?8?YvQIEfK6Z*R3e4J5L{@L+$0@p={ zAz2?FHHpsVR60JnK$2D%cSOFXCSE49qKlC0Si<~hq+XhBzg5?Z-()JNSeg);Z#R(F zpJd*563#O`HYId^y2>rvI^Y}t7a*mx`wY3ww|XhMxAAQhc7kVXz2e!)s@bW7mdeAmDOT-HFOw20ll^xi?gp3}Kkp!H zpo1ZPQrP#c>sv2%kTi&zIM0hS8vtz;3JuFv(gX66-I5<>AL|r@kE3V0 zdp)17*RyaKvTK#d*Trc$C>65g8@tFiS=S30$oaRtn_yY~sZG2O=^F4G$wdp5s7WRu zW^?7o@ze@-QT?ueS{Z3WzLAu6o>Lj&cT$WB1;F*%v2^Kq`ipTI)_&LsuV0tqx*lmd zAdHRUbM`dOXTK=M@IN0WHsuFnSSbm2Fyjv)OILsG8ftAcHH;L&oLif1^C+IEhI_9T4bsyR9e3CKHldAMj3Wi0 zhh&`F$2Ron=VL*urmnjVxvzRe=wD7Y(#x)g=vZ8Dx|kinZ1@AN{fc;Q$ZZ2gO$I1i zEkh_uwm0~aa7X>Hw66L7tboZqiQG>$LjpQk0OxoEHcv4ulr2(nA|CPAASb3yw4V&p z2{%aNAkO`?^G?}vI4S{Bp*uJeP_lj+G(s@kQL8+7X?^4|ovKXSfHLu`RO(P6J{)6y zdBzZ`#1z0Da=-15@yeyC!k(__%WIoRzTf9PJ0W`>JD8!)!gah{x#3Wvb^AlKo0u=d z7|x#wdiGUzuRj0Z9GIx>O+LhpZs+kvvbVaGqCAjk`mJ!>=M%e?51m) zypzk9`=FQO@A#)YPCXpH+^Yy#LQZU>QKGVyT;Rw&cG1r>FS4ZL!ICvHQxJ0^7kh>m%?gWqZ)7v z8Y~k`$=xK0@S((W!34JItHJlmJUV|~59V6z4J7dYxw_;(1-^Q~$-)i_BZ9bSb;-lb zsugT@c6^N3?)(6f@w=}ZeEpn9h612neQdgN6g@s2@_B7N_qY9dW(cMHLIPktgTmUm znzPus?%PJ(lvk&(dw2d8yt@61A7O%){)xQiV2j7llCp-9 zaJfhK1Aij&F{+bt*J&8c;4_#|rjXiR`;;nv_}2JXV0=lTA~81sTuL&T^WWBGB4+84 zs`o|dk({o)PRPVO373o+X;9U|9Jg^QeGi?&dT^(|@+I24y4lItGsNX?%ZLolzYsT6 zP+?*ISa=!96WxIHTRSv4jB_lFR9`*Ws@$+4UeG9eQL?saKylHmo0mqfX~;vd{HAkH zn$xAKyor98Zk%4BSkj_l#`|RI2W?V@9m|Bksp)7#$yQ5L!muh+s`VG^#F071)^qUe zW|jMy#ZUaG64~-ITpQELARD=j?b`mVwDo;VryEMz)3xHub;7yy3YESH zXn%`+(<^bY==!)m1=vWNjk&qFH7`I93YTQn-{hS8lqN10Hoq+Bbcx=kSfk$?*9$38 zwLgolMYi%RM@Lsp25r!M=DIO))Pg!G)m{EQlJYFu9})1m*T>pg9ml%tc5nmKkpCkQ zebj6P4g6YAv>6SyIpDARV>_jr%C*@|Qj@w}i+mibYuVOJF12FbXdD!hR@@H+t>NXj zn2c{wh*SQbD#W&GJw?JgN_vs>EF_6{zET(Gv%!SWHCrJCv8QXfKH2U*3nNMS{euEo zC`3|(yUqWdY`8E8Mje!sc#K@aJBYps9!Zd{G!>i+8d*R11IgMBCcF|r_=bSVgIIt8 z`O*q95JK_0&W>>B9qieu*gR~)C% zFOWE_Zwx$&cKj}vM|Sxa+{^^WX%bWbp#>#{{iuQa1JAB0B3WS2T?x zceZlIj;9iGr~QW=>S6P3lA-@?fV(H@vD*0HQNi!M<1RF2cf6Z!b>0@QlP%jgGw8IB zRuhTfP79=%vu*UB#Du)T zh%!!!hVq+2*X;Nq zMY;;dI${Eq(8ljt&67v)Q_*Ddn$fRqF|u3wY{_p}GzJ|~!T$2GY1cAmtYX=59i=SA z#}YP$6WmS9ahE=uz~3H|f^c;P`R?Ml(M*dK&*|+bx-RXwhwEay<(iHaiARiF4n^JC z*Y=CZgv4D+U3e{xW8Mu;I<|#`9Ub3oYicIG8`dy_endqD>XYa<8Y$OO*R!-3kJ(jG zEDdC_4q$`Rr4ZXlU#nrunv_Xtitd(TE{U9&YNfZw1Y1j%HO*1xGP`YPBrC*95wqGjxr(Fd5P|VN8n#+vMA2^#`-;PV!`5yIyG5F z1w8#LoGa#=cRvivb?|0S_>Yx?*_e+}m4$G#_L0}P_fbCm7~MQ9#y-`PLzrfWhC5`L zh84|rMek30Nk5!+)j4}PwRt)#^r!Um&mXckR$SygfR8&5{_p!t@#h5puDky#n+yI@G8^Z$B8tX36O{(=m#tEzOWrxKc zwWIK!pgt&5v(9vWE '评论', + 'version' => '1.2', + 'desc' => '评论管ç†', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'1' +); \ No newline at end of file diff --git a/app/comment/action/add.php b/app/comment/action/add.php new file mode 100644 index 0000000..583bb6c --- /dev/null +++ b/app/comment/action/add.php @@ -0,0 +1,145 @@ +isLogin($js,$userkey); + +$authcode = strtolower((string) $_POST['authcode']); + +if ($TS_SITE ['isauthcode'] && $authcode) { + if ($authcode != $_SESSION ['verify']) { + getJson ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ,$js,0); + } +} + +$ptable = tsTrim($_POST['ptable']); +if(!preg_match("/^[a-z_]*$/i", $ptable)){ + getJson('éžæ³•æ“作ï¼',$js); +} + +$pkey = tsTrim($_POST['pkey']); +if(!preg_match("/^[a-z_]*$/i", $pkey)){ + getJson('éžæ³•æ“作ï¼',$js); +} + +$pid = tsIntval($_POST['pid']); + + +$referid = tsIntval($_POST['referid']); +$touserid = tsIntval($_POST['touserid']); + + +$content = tsClean($_POST['content'],$js); +$content2 = emptyText($_POST['content']);//测试空内容 +$ispublic = tsIntval($_POST['ispublic']); + + +//匿å用户 +$isniming = tsIntval($_POST['isniming']); +if($TS_SITE['isniming']==1 && $isniming==1) $userid = aac('user')->getNimingId(); + + +//过滤内容开始 +if($TS_USER['isadmin']==0){ + $content = antiWord($content); +} +//è¿‡æ»¤å†…å®¹ç»“æŸ + +if($ptable=='' || $pkey=='' || $pid=='' || $content2=='' || $content==''){ + getJson('没有任何内容是ä¸å…许你通过滴^_^',$js); +}else{ + + + $isaudit = 0; + if($TS_APP['comment_isaudit']==1 && $TS_USER['isadmin']==0) $isaudit=1; + + $commentid = $new['comment']->create('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + + 'referid'=>$referid, + 'userid'=>$userid, + 'touserid'=>$touserid, + + 'content' => $content, + 'ispublic'=>$ispublic, + 'isaudit'=>$isaudit, + 'addtime'=> time(), + )); + + //统计评论数 + $count_comment = $new['comment']->findCount('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + + //更新项目最åŽå›žåº”时间和评论数 + $new['comment']->update($ptable,array( + $pkey=>$pid, + ),array( + 'count_comment'=>$count_comment, + 'uptime'=>time(), + )); + + #æ›´æ–°ptable评论数 + aac('pubs')->upPtableComment($ptable,$pkey,$pid,$count_comment); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(通知楼主有人回å¤ä»–的帖å­å•¦) + $strProject = $new['comment']->find($ptable,array( + $pkey=>$pid, + )); + + if($referid){ + + $strComment = $new['comment']->find('comment',array( + 'commentid'=>$referid, + )); + + //åˆ›å»ºæ¶ˆæ¯ + if($strComment['userid'] != $userid){ + $msg_userid = $userid; + $msg_touserid = $strComment['userid']; + $msg_content = '回å¤äº†ä½ ï¼š'.t($content); + $msg_tourl = getProjectUrl($ptable,$pid); + $msg_extend = json_encode(array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl,$msg_extend); + } + + #上级评论用户加分 + aac ( 'user' )->doScore ( $TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'],$strComment['userid']); + + + }else{ + + //åˆ›å»ºæ¶ˆæ¯ + if($strProject['userid'] != $userid){ + $msg_userid = $userid; + $msg_touserid = $strProject['userid']; + $msg_content = '评论了你å‘布的:《'.$strProject['title'].'》'; + $msg_tourl = getProjectUrl($ptable,$pid); + $msg_extend = json_encode(array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl,$msg_extend); + } + + } + + $daytime = strtotime(date('Y-m-d 00:00:01')); + $count_comment = $new['comment']->findCount('comment',"`userid`='$userid' and `addtime`>'$daytime'"); + + #æ¯æ—¥å‰1æ¡ç»™ç§¯åˆ† + if($count_comment<2){ + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']); + } + + getJson('评论æˆåŠŸ',$js,2,getProjectUrl($ptable,$pid)); + +} \ No newline at end of file diff --git a/app/comment/action/admin.php b/app/comment/action/admin.php new file mode 100644 index 0000000..3f99995 --- /dev/null +++ b/app/comment/action/admin.php @@ -0,0 +1,9 @@ +findAll('comment',$where,'addtime desc',null,$lstart.',10'); + + $commentNum = $new['comment']->findCount('comment',$where); + + $pageUrl = pagination($commentNum, 10, $page, $url); + + include template("admin/comment_list"); + + break; + + + case "delete": + + $commentid = tsIntval($_GET['commentid']); + + $strComment = $new['comment']->find('comment',array( + 'commentid'=>$commentid, + )); + + $ptable = $strComment['ptable']; + $pkey = $strComment['pkey']; + $pid = $strComment['pid']; + + $new['comment']->delete('comment',array( + 'commentid'=>$commentid, + )); + + $new['comment']->delComment($ptable,$pkey,$pid,$commentid); + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'],$strComment['userid']); + + qiMsg('删除æˆåŠŸ'); + + break; + + case "isaudit": + + $commentid = tsIntval($_GET['commentid']); + + $strComment = $new['comment']->find('comment',array( + 'commentid'=>$commentid, + )); + + if($strComment['isaudit']==1){ + $isaudit = 0; + }else{ + $isaudit = 1; + } + + $new['comment']->update('comment',array( + 'commentid'=>$commentid, + ),array( + 'isaudit'=>$isaudit, + )); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + +} \ No newline at end of file diff --git a/app/comment/action/admin/options.php b/app/comment/action/admin/options.php new file mode 100644 index 0000000..189d53e --- /dev/null +++ b/app/comment/action/admin/options.php @@ -0,0 +1,26 @@ +isLogin($js,$userkey); + +$commentid = tsIntval($_GET['commentid']); + +$strComment = $new['comment']->find('comment',array( + 'commentid'=>$commentid, +)); + +$ptable = $strComment['ptable']; +$pkey = $strComment['pkey']; +$pid = $strComment['pid']; + +if($TS_USER['isadmin']==1 || $strComment['userid']==$userid){ + + $new['comment']->delComment($ptable,$pkey,$pid,$commentid); + + //处ç†ç§¯åˆ† + aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'],$strComment['userid']); + +} + +//跳转回到详情页 +header("Location: ".getProjectUrl($ptable,$pid)); \ No newline at end of file diff --git a/app/comment/action/my.php b/app/comment/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/comment/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/comment/action/my/index.php b/app/comment/action/my/index.php new file mode 100644 index 0000000..9965fb1 --- /dev/null +++ b/app/comment/action/my/index.php @@ -0,0 +1,22 @@ +'index','page' => '' ) ); +$lstart = $page * 20 - 20; + +$arrComment = $new ['comment']->findAll ( 'comment', array ( + 'userid' => $strUser['userid'], +), 'addtime desc', null, $lstart . ',20' ); + +$commentNum = $new ['comment']->findCount ( 'comment', array ( + 'userid' => $strUser['userid'], +) ); + +$pageUrl = pagination ( $commentNum, 20, $page, $url ); + + + +$title = '我的评论'; +include template('my/index'); \ No newline at end of file diff --git a/app/comment/action/recomment.php b/app/comment/action/recomment.php new file mode 100644 index 0000000..e3b4a48 --- /dev/null +++ b/app/comment/action/recomment.php @@ -0,0 +1,9 @@ +recomment($referid,$userid); + +include template('recomment'); \ No newline at end of file diff --git a/app/comment/class.comment.php b/app/comment/class.comment.php new file mode 100644 index 0000000..7f01c85 --- /dev/null +++ b/app/comment/class.comment.php @@ -0,0 +1,207 @@ +findAll('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + 'referid'=>0, + ),'addtime desc',null,$lstart.',15'); + + foreach($arrComment as $key => $item){ + $arrComment[$key]['l'] = (($page-1) * 15) + $key + 1; + //$arrComment[$key]['l'] = (($page-1) * 15) - $key + $commentNum;//盖楼 + $arrComment[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrComment[$key]['content'] = tsDecode($item['content']); + if($ismb){ + $arrComment[$key]['content'] = mobileHtml($arrComment[$key]['content']); + } + $arrComment[$key]['recomment'] = $this->recomment($item['commentid'],$puid,3,$uid,$ismb); + $arrComment[$key]['recomment_num'] = $this->recommentNum($item['commentid']); + + $arrComment[$key]['zzuid'] = $puid;//作者ID + + $arrComment[$key]['iszz'] = 0;#作者1是0å¦ + if($item['userid']==$puid){ + $arrComment[$key]['iszz'] = 1;#作者1是0å¦ + } + + $arrComment[$key]['isdelete'] = 0;#删除æƒé™1有0æ—  + if($uid && $uid==$item['userid']){ + $arrComment[$key]['isdelete'] = 1;#删除æƒé™1有0æ—  + } + + $arrComment[$key]['iscomment'] = 0;#å›žå¤æƒé™1有0æ—  + if($uid && $uid!=$item['userid']){ + $arrComment[$key]['iscomment'] = 1;#å›žå¤æƒé™1有0æ—  + } + + + $arrComment[$key]['datetime'] = date('m-d H:i',$item['addtime']); + + } + + return $arrComment; + } + + /** + * 获å–评论数 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @return void + */ + public function getCommentNum($ptable,$pkey,$pid){ + $commentNum = $this->findCount('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + 'referid'=>0, + )); + return $commentNum; + } + + + /** + * 获å–评论下的回å¤åˆ—表 + * + * @param [type] $referid 上级评论ID + * @param [type] $puid 当å‰é¡¹ç›®ç”¨æˆ·ID + * @param integer $num è°ƒç”¨æ¡æ•° + * @param integer $uid 当å‰ç™»å½•的用户ID + * @param integer $ismb æ˜¯å¦æ‰‹æœºæµè§ˆ + * @return void + */ + function recomment($referid,$puid,$num=0,$uid=0,$ismb=0){ + + if($num){ + $limit = $num; + }else{ + $limit = null; + } + + $arrComment = $this->findAll('comment',array( + 'referid'=>$referid, + ),'addtime desc',null,$limit); + + foreach($arrComment as $key=>$item){ + $html = tsDecode($item['content']); + if($ismb==1){ + $html = mobileHtml($html); + } + + $arrComment[$key]['content'] = $html; + + $arrComment[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrComment[$key]['datetime'] = date('m-d H:i',$item['addtime']); + + if($item['touserid']){ + $arrComment[$key]['touser'] = aac('user')->getSimpleUser($item['touserid']); + } + + $arrComment[$key]['iszz'] = 0;#作者1是0å¦ + if($item['userid']==$puid){ + $arrComment[$key]['iszz'] = 1;#作者1是0å¦ + } + + $arrComment[$key]['isdelete'] = 0;#删除æƒé™1有0æ—  + if($uid && $uid==$item['userid']){ + $arrComment[$key]['isdelete'] = 1;#删除æƒé™1有0æ—  + } + + $arrComment[$key]['iscomment'] = 0;#å›žå¤æƒé™1有0æ—  + if($uid && $uid!=$item['userid']){ + $arrComment[$key]['iscomment'] = 1;#å›žå¤æƒé™1有0æ—  + } + + + } + + return $arrComment; + } + + function recommentNum($referid){ + $num = $this->findCount('comment',array( + 'referid'=>$referid, + )); + + return $num; + } + + + /** + * 删除评论 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param integer $commentid + * @return void + */ + public function delComment($ptable,$pkey,$pid,$commentid=0){ + + if($commentid){ + $this->delete('comment',array( + 'commentid'=>$commentid, + )); + #åˆ é™¤å›žå¤ + $this->delete('comment',array( + 'referid'=>$commentid, + )); + }else{ + $this->delete('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + } + + #统计评论数 + $count_comment = $this->findCount('comment',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + + //更新评论数 + $this->update($ptable,array( + $pkey=>$pid, + ),array( + 'count_comment'=>$count_comment, + )); + + return true; + } + + +} \ No newline at end of file diff --git a/app/comment/config.php b/app/comment/config.php new file mode 100644 index 0000000..cacce7b --- /dev/null +++ b/app/comment/config.php @@ -0,0 +1,4 @@ + +
    + + {php include template("admin/menu");} + +
    {$pageUrl}
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + {loop $arrComment $key $item} + + + + + + + + + + + + + + + {/loop} + + + +
    IDUserIDPID内容时间æ“作
    {$item['commentid']}{$item['userid']}{$item['pid']} [查看内容] + +
    {php echo tsDecode($item['content'])}
    + +
    {php echo date('Y-m-d H:i:s',$item['addtime'])} + + + + + + {if $item['isaudit']==1} + 审核 + {else} + å–æ¶ˆå®¡æ ¸ + {/if} + + + + + 删除 + +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/comment/html/admin/menu.html b/app/comment/html/admin/menu.html new file mode 100644 index 0000000..57d65a2 --- /dev/null +++ b/app/comment/html/admin/menu.html @@ -0,0 +1,11 @@ + +
    +
    评论管ç†
    + +
    +
    \ No newline at end of file diff --git a/app/comment/html/admin/options.html b/app/comment/html/admin/options.html new file mode 100644 index 0000000..3ae8864 --- /dev/null +++ b/app/comment/html/admin/options.html @@ -0,0 +1,38 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + + + + + + + + + +
    APPå称:
    APP介ç»ï¼š
    APP关键è¯ï¼š
    评论是å¦å®¡æ ¸åŽæ˜¾ç¤ºï¼š + + ä¸å®¡æ ¸ + 审核 + +
    + +
    +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/comment/html/my/index.html b/app/comment/html/my/index.html new file mode 100644 index 0000000..19ef477 --- /dev/null +++ b/app/comment/html/my/index.html @@ -0,0 +1,72 @@ +{php include pubTemplate("header")} +
    + + + +
    + + +
    +
    + + {php include pubTemplate("my")} + +
    +
    + + + +
    + + +
    +
    我的评论
    +
    + + + + + + + + + {loop $arrComment $key $item} + + + + + + + + + {/loop} + +
    评论内容时间æ“作
    + + {php echo tsDecode($item['content'])}{php echo date('Y-m-d H:i:s',$item['addtime'])} + + + + 删除 + +
    + +
    +
    {$pageUrl}
    + + + +
    +
    + +
    +
    + + + + + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/comment/html/recomment.html b/app/comment/html/recomment.html new file mode 100644 index 0000000..033ea3c --- /dev/null +++ b/app/comment/html/recomment.html @@ -0,0 +1,55 @@ +{loop $arrRecomment $rkey $ritem} +
    + +
    + + {$ritem[user][username]} + + {if $ritem['iszz']} + 作者 + {/if} + + {$ritem['datetime']} + + + + {if $TS_USER['userid'] && $ritem['userid']!=$TS_USER['userid']} + å›žå¤ + {/if} + + {if $TS_USER['userid'] && $ritem['userid']==$TS_USER['userid']} + 删除 + {/if} + + + + + +
    + +
    + + {if $ritem['touserid']} + å›žå¤ @{$ritem['touser']['username']} : + {/if} + {$ritem[content]} + +
    + + + + + + + + + +
    +{/loop} \ No newline at end of file diff --git a/app/friendlinks/about.php b/app/friendlinks/about.php new file mode 100644 index 0000000..0c616ce --- /dev/null +++ b/app/friendlinks/about.php @@ -0,0 +1 @@ + 'å‹é“¾', 'version' => '1.0', 'desc' => '勿ƒ…链接', 'url' => 'https://lmve.net', 'email' => '1337087466@qq.com', 'author' => '无闻风', 'author_url' => 'https://lmve.net', 'isoption' => '1', 'isinstall' => '1', 'issql' => '0', 'issystem' => '0', 'isappnav' => '0', 'ismy'=>'0', ); \ No newline at end of file diff --git a/app/friendlinks/action/admin.php b/app/friendlinks/action/admin.php new file mode 100644 index 0000000..e6922c0 --- /dev/null +++ b/app/friendlinks/action/admin.php @@ -0,0 +1,9 @@ +'.$path.'
    '.$name.'
    '.$face.'
    '.$about.'
    '.getIp(); /* $ispath = $new['friendlinks']->findCount('friendlinks',array( 'path'=>$path, )); if($ispath > 0){ getJson('你以æäº¤è¿‡äº†',$js); }else */ $id = $new ['friendlinks']->create ( 'friendlinks',array( 'name'=>$name, 'email'=>$email, 'path'=>$path, 'face'=>$face, 'about'=>$about, 'ip'=>getIp(), 'addtime'=>time(), )); getJson('æäº¤æˆåŠŸï¼ï¼æ„Ÿè°¢ï¼',$js); break; +} \ No newline at end of file diff --git a/app/friendlinks/action/index.php b/app/friendlinks/action/index.php new file mode 100644 index 0000000..9fcc9f3 --- /dev/null +++ b/app/friendlinks/action/index.php @@ -0,0 +1,3 @@ +findAll('friendlinks',array('isenable'=>0,),'addtime asc','id,name,face,path,addtime',$num); + +return $friends; } + + + + +} \ No newline at end of file diff --git a/app/friendlinks/config.php b/app/friendlinks/config.php new file mode 100644 index 0000000..16cfbdc --- /dev/null +++ b/app/friendlinks/config.php @@ -0,0 +1,19 @@ +å°ç»„ç®¡ç† + \ No newline at end of file diff --git a/app/friendlinks/html/admin/options.html b/app/friendlinks/html/admin/options.html new file mode 100644 index 0000000..00eda69 --- /dev/null +++ b/app/friendlinks/html/admin/options.html @@ -0,0 +1,23 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + + +
    APPå称:
    APP介ç»ï¼š
    APP关键è¯ï¼š
    +
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/friendlinks/html/admin/topic_list.html b/app/friendlinks/html/admin/topic_list.html new file mode 100644 index 0000000..664b386 --- /dev/null +++ b/app/friendlinks/html/admin/topic_list.html @@ -0,0 +1,51 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + +{loop $arrTopic $key $item} + +{/loop} + + + +
    IDUserID标题时间æ“作
    {$item['topicid']}{$item['userid']}{tsTitle($item['title'])}{php echo date('Y-m-d H:i:s',$item['addtime'])} + + + + + + +{if $item['isaudit']==0} +已审核 +{else} +未审核 +{/if} + + + | + + + + + +删除 + +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/friendlinks/html/create.html b/app/friendlinks/html/create.html new file mode 100644 index 0000000..a2986eb --- /dev/null +++ b/app/friendlinks/html/create.html @@ -0,0 +1,48 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    + + +
    +
    +
    + + +
    点击刷新验è¯ç 
    + + +
    +
    +
    +
    + + +
    +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/friendlinks/html/index.html b/app/friendlinks/html/index.html new file mode 100644 index 0000000..62a2fe3 --- /dev/null +++ b/app/friendlinks/html/index.html @@ -0,0 +1,17 @@ +{php include pubTemplate("header")} +
    + + + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/friendlinks/js/admin.js b/app/friendlinks/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/friendlinks/js/extend.func.js b/app/friendlinks/js/extend.func.js new file mode 100644 index 0000000..25fae19 --- /dev/null +++ b/app/friendlinks/js/extend.func.js @@ -0,0 +1,166 @@ +/*显示éšè—回å¤*/ +function commentOpen(id,gid) +{ + $('#rcomment_'+id).toggle('fast'); +} + +//æ”¶è—帖å­(1.8改为喜欢) +function loveTopic(tid){ + + var url = siteUrl+'index.php?app=group&ac=do&ts=topic_collect'; + $.post(url,{topicid:tid},function(rs){ + if(rs == 0){ + + tsNotice('请登录åŽå†å–œæ¬¢'); + + }else if(rs == 1){ + + tsNotice('自己ä¸èƒ½å–œæ¬¢è‡ªå·±çš„帖å­å“¦') + + }else if(rs == 2){ + + tsNotice('ä½ å·²ç»å–œæ¬¢è¿‡æœ¬å¸–啦,请ä¸è¦å†æ¬¡å–œæ¬¢'); + + }else{ + window.location.reload(); + } + }); +} + +//淘帖å­,加专辑 +function taoalbum(topicid){ + $.post(siteUrl+'index.php?app=group&ac=album&ts=topic',{'topicid':topicid},function(rs){ + if(rs==0){ + + tsNotice('请登陆åŽå†è¿›è¡Œæ·˜å¸–'); + + }else if(rs == 1){ + + tsNotice('请创建专辑åŽå†è¿›è¡Œæ·˜è´´'); + + }else { + + + tsNotice(rs); + + + } + }) +} + +//Ctrl+Enter 回å¤è¯„论 + +function keyRecomment(rid,tid,event) +{ + if(event.ctrlKey == true) + { + if(event.keyCode == 13) + recomment(rid,tid); + return false; + } +} + +//回å¤è¯„论 +function recomment(rid,tid,token){ + + c = $('#recontent_'+rid).val(); + if(c==''){alert('回å¤å†…容ä¸èƒ½ä¸ºç©º');return false;} + var url = siteUrl+'index.php?app=group&ac=comment&ts=recomment'; + $('#recomm_btn_'+rid).hide(); + $.post(url,{referid:rid,topicid:tid,content:c,'token':token} ,function(rs){ + if(rs == 0) + { + //alert('å›žå¤æˆåŠŸ'); + window.location.reload(); + }else{ + $('#recomm_btn_'+rid).show(); + } + }) +} + + + +//å‘ä¸‹åŠ è½½æ›´å¤šå¸–å­ +function loadTopic(userid,page){ + var num = parseInt(page)+1; + $("#viewmore").html(''); + $.get(siteUrl+'index.php?app=group&ac=ajax&ts=topic',{'userid':userid,'page':page},function(rs){ + if(rs==''){ + $("#viewmore").html('没有å¯ä»¥åŠ è½½çš„å†…å®¹å•¦...'); + }else{ + $("#before").before(rs); + $("#viewmore").html('查看更多内容......'); + } + }) +} + +//帖å­å®¡æ ¸ +function topicAudit(topicid,token){ + $.post(siteUrl+'index.php?app=group&ac=ajax&ts=topicaudit',{'topicid':topicid,'token':token},function(rs){ + if(rs==0){ + + window.location.reload(); + return false; + }else if(rs==1){ + + window.location.reload(); + return false; + + }else if(rs==2){ + + tsNotice('éžæ³•æ“作ï¼'); + + } + }) +} + +//踢出å°ç»„ +function kickedGroup(groupid,userid){ + $.post(siteUrl+'index.php?app=group&ac=kicked',{'groupid':groupid,'userid':userid},function(rs){ + if(rs=='0'){ + + tsNotice('éžæ³•æ“作ï¼') + + }else if(rs=='1'){ + + tsNotice('éžæ³•æ“作ï¼') + + }else{ + window.location.reload(); + } + }) + +} + +//加入å°ç»„ +function joinGroup(groupid){ + tsPost('index.php?app=group&ac=ajax&ts=joingroup',{'groupid':groupid}); +} +function exitGroup(groupid){ + tsPost('index.php?app=group&ac=ajax&ts=exitgroup',{'groupid':groupid}); +} + + +//续期 +function openXuqi(userid) { + $("#xuqi_userid").val(userid); + var html = $("#xuqi_html").html(); + tsNotice(html); +} + + +//标注 +function toBook(topicid){ + var book = $('#book-text').val(); + if(topicid && book){ + $.post(siteUrl+'index.php?app=group&ac=ajax&ts=book',{'topicid':topicid,'book':book},function (rs) { + if(rs==1){ + window.location.reload() + }else{ + $('#book-alert').html('标注ä¸èƒ½ä¸ºç©º'); + } + }) + }else{ + $('#book-alert').html('标注ä¸èƒ½ä¸ºç©º'); + } +} \ No newline at end of file diff --git a/app/friendlinks/js/share.min.js b/app/friendlinks/js/share.min.js new file mode 100644 index 0000000..0f9bb42 --- /dev/null +++ b/app/friendlinks/js/share.min.js @@ -0,0 +1 @@ +!function(r){"use strict";function t(t,e,n,o){function i(r,t){return r-=o,t-=o,0>r||r>=u||0>t||t>=u?!1:a.isDark(r,t)}var a=r(n,e);a.addData(t),a.make(),o=o||0;var u=a.getModuleCount(),f=a.getModuleCount()+2*o,c=function(r,t,e,n){var o=this.isDark,i=1/f;this.isDark=function(a,u){var f=u*i,c=a*i,s=f+i,l=c+i;return o(a,u)&&(r>s||f>e||t>l||c>n)}};this.text=t,this.level=e,this.version=n,this.moduleCount=f,this.isDark=i,this.addBlank=c}function e(r,e,n,o,i){n=Math.max(1,n||1),o=Math.min(40,o||40);for(var a=n;o>=a;a+=1)try{return new t(r,e,a,i)}catch(u){}}function n(r,t,e){var n=e.size,o="bold "+e.mSize*n+"px "+e.fontname,i=w("")[0].getContext("2d");i.font=o;var a=i.measureText(e.label).width,u=e.mSize,f=a/n,c=(1-f)*e.mPosX,s=(1-u)*e.mPosY,l=c+f,d=s+u,h=.01;1===e.mode?r.addBlank(0,s-h,n,d+h):r.addBlank(c-h,s-h,l+h,d+h),t.fillStyle=e.fontcolor,t.font=o,t.fillText(e.label,c*n,s*n+.75*e.mSize*n)}function o(r,t,e){var n=e.size,o=e.image.naturalWidth||1,i=e.image.naturalHeight||1,a=e.mSize,u=a*o/i,f=(1-u)*e.mPosX,c=(1-a)*e.mPosY,s=f+u,l=c+a,d=.01;3===e.mode?r.addBlank(0,c-d,n,l+d):r.addBlank(f-d,c-d,s+d,l+d),t.drawImage(e.image,f*n,c*n,u*n,a*n)}function i(r,t,e){w(e.background).is("img")?t.drawImage(e.background,0,0,e.size,e.size):e.background&&(t.fillStyle=e.background,t.fillRect(e.left,e.top,e.size,e.size));var i=e.mode;1===i||2===i?n(r,t,e):(3===i||4===i)&&o(r,t,e)}function a(r,t,e,n,o,i,a,u){r.isDark(a,u)&&t.rect(n,o,i,i)}function u(r,t,e,n,o,i,a,u,f,c){a?r.moveTo(t+i,e):r.moveTo(t,e),u?(r.lineTo(n-i,e),r.arcTo(n,e,n,o,i)):r.lineTo(n,e),f?(r.lineTo(n,o-i),r.arcTo(n,o,t,o,i)):r.lineTo(n,o),c?(r.lineTo(t+i,o),r.arcTo(t,o,t,e,i)):r.lineTo(t,o),a?(r.lineTo(t,e+i),r.arcTo(t,e,n,e,i)):r.lineTo(t,e)}function f(r,t,e,n,o,i,a,u,f,c){a&&(r.moveTo(t+i,e),r.lineTo(t,e),r.lineTo(t,e+i),r.arcTo(t,e,t+i,e,i)),u&&(r.moveTo(n-i,e),r.lineTo(n,e),r.lineTo(n,e+i),r.arcTo(n,e,n-i,e,i)),f&&(r.moveTo(n-i,o),r.lineTo(n,o),r.lineTo(n,o-i),r.arcTo(n,o,n-i,o,i)),c&&(r.moveTo(t+i,o),r.lineTo(t,o),r.lineTo(t,o-i),r.arcTo(t,o,t+i,o,i))}function c(r,t,e,n,o,i,a,c){var s=r.isDark,l=n+i,d=o+i,h=e.radius*i,g=a-1,v=a+1,w=c-1,p=c+1,m=s(a,c),T=s(g,w),y=s(g,c),E=s(g,p),A=s(a,p),B=s(v,p),k=s(v,c),C=s(v,w),b=s(a,w);m?u(t,n,o,l,d,h,!y&&!b,!y&&!A,!k&&!A,!k&&!b):f(t,n,o,l,d,h,y&&b&&T,y&&A&&E,k&&A&&B,k&&b&&C)}function s(r,t,e){var n,o,i=r.moduleCount,u=e.size/i,f=a;for(m&&e.radius>0&&e.radius<=.5&&(f=c),t.beginPath(),n=0;i>n;n+=1)for(o=0;i>o;o+=1){var s=e.left+o*u,l=e.top+n*u,d=u;f(r,t,e,s,l,d,n,o)}if(w(e.fill).is("img")){t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=2,t.stroke();var h=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",t.fill(),t.globalCompositeOperation=h,t.clip(),t.drawImage(e.fill,0,0,e.size,e.size),t.restore()}else t.fillStyle=e.fill,t.fill()}function l(r,t){var n=e(t.text,t.ecLevel,t.minVersion,t.maxVersion,t.quiet);if(!n)return null;var o=w(r).data("qrcode",n),a=o[0].getContext("2d");return i(n,a,t),s(n,a,t),o}function d(r){var t=w("").attr("width",r.size).attr("height",r.size);return l(t,r)}function h(r){return w("").attr("src",d(r)[0].toDataURL("image/png"))}function g(r){var t=e(r.text,r.ecLevel,r.minVersion,r.maxVersion,r.quiet);if(!t)return null;var n,o,i=r.size,a=r.background,u=Math.floor,f=t.moduleCount,c=u(i/f),s=u(.5*(i-c*f)),l={position:"relative",left:0,top:0,padding:0,margin:0,width:i,height:i},d={position:"absolute",padding:0,margin:0,width:c,height:c,"background-color":r.fill},h=w("
    ").data("qrcode",t).css(l);for(a&&h.css("background-color",a),n=0;f>n;n+=1)for(o=0;f>o;o+=1)t.isDark(n,o)&&w("
    ").css(d).css({left:s+o*c,top:s+n*c}).appendTo(h);return h}function v(r){return p&&"canvas"===r.render?d(r):p&&"image"===r.render?h(r):g(r)}var w=jQuery,p=function(){var r=document.createElement("canvas");return Boolean(r.getContext&&r.getContext("2d"))}(),m="[object Opera]"!==Object.prototype.toString.call(window.opera),T={render:"canvas",minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:0,quiet:0,mode:0,mSize:.1,mPosX:.5,mPosY:.5,label:"no label",fontname:"sans",fontcolor:"#000",image:null};w.fn.qrcode=function(r){var t=w.extend({},T,r);return this.each(function(){"canvas"===this.nodeName.toLowerCase()?l(this,t):w(this).append(v(t))})}}(function(){var r=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;re;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),T(0,0),T(h-7,0),T(0,h-7),A(),E(),k(r,t),s>=7&&B(r),null==v&&(v=M(s,l,w)),C(v,t)},T=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?d[r+e][t+n]=!0:d[r+e][t+n]=!1)},y=function(){for(var r=0,t=0,e=0;8>e;e+=1){m(!0,e);var n=i.getLostPoint(p);(0==e||r>n)&&(r=n,t=e)}return t},E=function(){for(var r=8;h-8>r;r+=1)null==d[r][6]&&(d[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==d[6][t]&&(d[6][t]=t%2==0)},A=function(){for(var r=i.getPatternPosition(s),t=0;t=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?d[n+a][o+u]=!0:d[n+a][o+u]=!1}},B=function(r){for(var t=i.getBCHTypeNumber(s),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);d[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);d[e%3+h-8-3][Math.floor(e/3)]=n}},k=function(r,t){for(var e=l<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?d[o][8]=a:8>o?d[o+1][8]=a:d[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?d[8][h-o-1]=a:9>o?d[8][15-o-1+1]=a:d[8][15-o-1]=a}d[h-8][8]=!r},C=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==d[n][f-c]){var s=!1;a>>o&1));var l=u(n,f-c);l&&(s=!s),d[n][f-c]=s,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},b=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c=0?v.getAt(w):0}}for(var p=0,d=0;dd;d+=1)for(var c=0;cd;d+=1)for(var c=0;c8*d)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*d+")");for(c.getLengthInBits()+4<=8*d&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;!(c.getLengthInBits()>=8*d)&&(c.put(o,8),!(c.getLengthInBits()>=8*d));)c.put(a,8);return b(c,n)};return p.addData=function(r){var t=c(r);w.push(t),v=null},p.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return d[r][t]},p.getModuleCount=function(){return h},p.make=function(){m(!1,y())},p.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='";for(var o=0;o';e+=""}return e+="",e+="
    "},p.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=p.getModuleCount()*r+2*t,n=t,o=e-t;return g(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return p.isDark(a,i)?0:1}return 1})},p};t.stringToBytes=function(r){for(var t=new Array,e=0;ei)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<=0;)t^=i<n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||(0!=u||0!=f)&&a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),(0==c||4==c)&&(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var s=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(s+=1);var l=Math.abs(100*s/t/t-50)/5;return e+=10*l},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],s=n[3*u+2],l=0;f>l;l+=1)a.push(t(c,s));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e0&&(t+=","),t+=r[e];return t+="]"},t},l=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},d=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<>>=8-e,n=0,e=0;n=r<0&&t.writeByte(n)},o},u=function(r){for(var t=1<u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=s(),l=a(c);l.write(t,n);var d=0,h=String.fromCharCode(o[d]);for(d+=1;di;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=s();o.write(u);for(var f=l(),c=u.toByteArray(),d=0;dn?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(r),r}()),function(r){r.fn.share=function(t){function e(t,e){var n=o(e);for(var a in"prepend"==e.mode?n.reverse():n){var u=n[a],f=i(u,e),c=e.initialized?t.find(".icon-"+u):r('');c.length&&(c.attr("href",f),e.initialized||("prepend"==e.mode?t.prepend(c):t.append(c)))}}function n(r,t){var e=r.find("a.icon-wechat");e.append('

    '+t.wechatQrcodeTitle+'

    '+t.wechatQrcodeHelper+"
    "),e.find(".qrcode").qrcode({render:"image",size:100,text:t.url})}function o(r){r.mobileSites.length<1&&(r.mobileSites=r.sites);var t=u()?r.mobileSites:r.sites,e=r.disabled;return"string"==typeof t&&(t=t.split(",")),"string"==typeof e&&(e=e.split(",")),a()&&e.push("wechat"),t.filter(function(r){return!(e.indexOf(r)>-1)})}function i(r,t){var e=l[r];t.summary=t.description;for(var n in t){var o=r+n.replace(/^[a-z]/,function(r){return r.toUpperCase()}),i=encodeURIComponent(t[o]||t[n]);e=e.replace(new RegExp("{{"+n.toUpperCase()+"}}","g"),i)}return e}function a(){var r=navigator.userAgent.toLowerCase();return"micromessenger"==r.match(/MicroMessenger/i)}function u(){return r(window).width()<=768}var f=r(document).find("img:first").prop("src"),c={url:window.location.href,site_url:window.location.origin,source:r(document.head).find('[name="site"]').attr("content")||r(document.head).find('[name="Site"]').attr("content")||document.title,title:r(document.head).find('[name="title"]').attr("content")||r(document.head).find('[name="Title"]').attr("content")||document.title,description:r(document.head).find('[name="description"]').attr("content")||r(document.head).find('[name="Description"]').attr("content"),image:f?f:"",wechatQrcodeTitle:"微信扫一扫:分享",wechatQrcodeHelper:"

    微信里点“å‘现â€ï¼Œæ‰«ä¸€ä¸‹

    二维ç ä¾¿å¯å°†æœ¬æ–‡åˆ†äº«è‡³æœ‹å‹åœˆã€‚

    ",mobileSites:[],sites:["weibo","qq","wechat","tencent","douban","qzone","linkedin","diandian","facebook","twitter","google"],disabled:[],initialized:!1},s=r.extend(!0,c,t),l={qzone:"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={{URL}}&title={{TITLE}}&desc={{DESCRIPTION}}&summary={{SUMMARY}}&site={{SOURCE}}",qq:"http://connect.qq.com/widget/shareqq/index.html?url={{URL}}&title={{TITLE}}&source={{SOURCE}}&desc={{DESCRIPTION}}",tencent:"http://share.v.t.qq.com/index.php?c=share&a=index&title={{TITLE}}&url={{URL}}&pic={{IMAGE}}",weibo:"http://service.weibo.com/share/share.php?url={{URL}}&title={{TITLE}}&pic={{IMAGE}}",wechat:"javascript:;",douban:"http://shuo.douban.com/!service/share?href={{URL}}&name={{TITLE}}&text={{DESCRIPTION}}&image={{IMAGE}}&starid=0&aid=0&style=11",diandian:"http://www.diandian.com/share?lo={{URL}}&ti={{TITLE}}&type=link",linkedin:"http://www.linkedin.com/shareArticle?mini=true&ro=true&title={{TITLE}}&url={{URL}}&summary={{SUMMARY}}&source={{SOURCE}}&armin=armin",facebook:"https://www.facebook.com/sharer/sharer.php?u={{URL}}",twitter:"https://twitter.com/intent/tweet?text={{TITLE}}&url={{URL}}&via={{SITE_URL}}",google:"https://plus.google.com/share?url={{URL}}"};this.each(function(){var t=r.extend({},s,r(this).data()||{}),o=r(this).addClass("share-component").addClass("social-share");e(o,t),n(o,t)})},r(function(){r(".share-component,.social-share").share()})}(jQuery); \ No newline at end of file diff --git a/app/friendlinks/skins/default/group.jpg b/app/friendlinks/skins/default/group.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4cdf15d289b74c9a0100e6dc260c573b74d4b75 GIT binary patch literal 102676 zcmeFYbyQSe`!{?j2?dl8L}ci0X@NnI77(Na0ci%LOL8z#QgS2&>5?wVQ7HlGlJ16~ zbLu&M@89qKz3W-eTF<-Qf8Tr0I%oF4uIt+ST>Eo-Y@B1Fyfo|M|Xe=Wb)qss{72_jmVl@n%(dEXB&J zV{Hp_^Ktif;seA*#bo3}rQ}4#S;ZveL}lb8!~uZ#Bk{j`nE68RKO_A@_}{$|`+On# z?>qqm*xUc!l9ZgdG$=X6RVN=G4>=JLH*aC@*BJHp%)*!P-{?5r?51$Glj9Z?+*6?-R`MxdAd<3L?Q+dvmvSvz*9BCGrhxfiY; zuJ%6GtS?-jyLrpKP+EXoen_Of%3 zGkBo(Uv3he(iNPmBSVgI|r?p}@}VzRQbBBJ6V;^IPJ2_f$QHy`U4LT=t1|J}j^ zdv9AWn1>I{-Hr8ci`F*ozCH@tRoBcn^{@(@dZ2w)(!`JKiKb_mzir7E5 zceQu(@douI_E#KN4>=Vtdut#22jHc^{&(JlM5Tm8#SQcUar=ld@xsQM|%-x4|_*;5m1*R|E0{o*?-T9 zBI|$Be>CtP4g5y~|IxsIH1Hn{{Qpk_|AXu7-9Rws527{zzYEwsa&rHRJKa54?+S|o zGRm4d#DC!{00=S@m;pq$xzw3Km`ex{G7~BSWPd@9sFbKUGa(eXDkdQ+B`z%>3Z{SR zas5;8`Z3NTEACnsK_}#jrIzM`2mU*7gN%TI*oTPV20(a&fanGRz8!#okeGzvpY%^P z@J2vLL`-spl#HC>Dp;WQIzUK3L_|nTL_+d+NCY9^{{i9~Bs6Sd_pi|ETa&VT(uu!} z%Oc}YuKYo7FtpEk*T(A=ImJx|##>BW+&sK|{1TE<(lWAgDi2iE)HO7<9vd1No0vW^ zv$eB#aCCw>d;9qM`M(GVeEsI_yYTlPBH|MgladjiQc|;Xa`W;F3X6)Xs%vWN>c2HK z{%mXS=XL4$BX?bOJZGB^N>)`O{_~i8L{NnPjTp&3AmssHaUy}WA za)C-9AS5OxA}0MS7XhLFU%_t>ldy?hp}DV5YVAqOF8-2?PB|{C@&`G`U4wmk8?PaX zo17AhTnB$e`$w|>cY?k8|0LPJ1^XYlrU4aznCNc;@5ChF;7R_Do`jU_$`#TpSI8*H z{z(*M6ckq}D99)&si-I^Y5pd#NwxbYeWR#Vj{W$K!L+WtHSETpQiBf0(9HOXa!?nW)aS3{JYE}!Vx9;N8j&i zkP<0ED1ip)AYp_P;{mP|4=h0Y6RrZcz9=t5 z0G6;XcT@ZJhh7g7o*lB}?urM#CMkfhM? zi&Q6KQi(sG7B!Ryi3)))q^~2KNcn!bf5F)#%n()3iHXgA|DuA(14LRR2xHAit(~~C zOv+a=o4}!m-soT$L7ymd0iBqrd<^;H$%*2)U)CtHK7sdxW1ilEX2peuW7h}xMIJP% zUG;g5BmJOW9nqh#+6+gi;_fV;J7GqoipxeXHKp)CM@{S5o(La%4<5*UVde|nmY6l; ztK7Uf-$__%xy=*jXNoo8W5kuH z3E|d4N-wh(3{Ll5E|9#Hb(m@M%u5I4B^h))y`Iib1&ubiVpdTl7ro+_;Z*5)notBBw=>*;McT=Ox1CQ(djx_`7&!09LUaTa~ng^*0Je*i;k%spY;rxPHKVS6u13L( z(bD~GQJ^I*IS?1B?noWxdsW-Lu8qFQS@Y;?J+VT|C(Gbrz*=zo&$Hr;mzk&wJTP@V z@#|jiYIAe>Ff`M|Za@z$?inktoz`@2eTX*LZM3YbPkHfbfjCpQQoJ;>du{INL+YtL zM+3dj9$p$i!m9eOhw=WJh;m12hTOaZpZYfXDQL;|Bxl@$Ox$fX;wM1CZlS0dG6q>V~=g`EuXp7WnR9F%s@+-y<;#hx&tv>pJ zhca|KQKRVGu|>`hn{MdtS06Hqn(wQlFAjRrFx9=\yzXsl{B*pYR=gHR=L?Pa9W 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,wXCEx$cnXw*-5I| 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 'å°ç»„', + 'version' => '1.2', + 'desc' => 'å°ç»„,群组,BBS,社区讨论,创建å°ç»„,å‘表帖å­', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1', +); \ No newline at end of file diff --git a/app/group/action/add.php b/app/group/action/add.php new file mode 100644 index 0000000..ce823d0 --- /dev/null +++ b/app/group/action/add.php @@ -0,0 +1,290 @@ +isLogin (); + +//判断用户是å¦å­˜åœ¨ +if(aac('user')->isUser($userid)==false) tsNotice('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼'); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('你还ä¸èƒ½å‘布内容,检查邮箱是å¦è®¤è¯ã€‚','->点击认è¯<-',tsUrl('user','verify')); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + + +switch ($ts) { + // å‘å¸ƒå¸–å­ + case "" : + + $groupid = intval ( $_GET ['id'] ); + // å°ç»„æ•°ç›® + $groupNum = $new ['group']->findCount ( 'group', array ( + 'groupid' => $groupid + ) ); + + if ($groupNum == 0) { + header ( "Location: " . SITE_URL ); + exit (); + } + + // å°ç»„会员 + $isGroupUser = $new ['group']->findCount ( 'group_user', array ( + 'userid' => $userid, + 'groupid' => $groupid + ) ); + + + + //å°ç»„ä¿¡æ¯ + $strGroup = $new ['group']->find ( 'group', array ( + 'groupid' => $groupid + )); + $strGroup ['groupname'] = tsTitle( $strGroup ['groupname'] ); + $strGroup ['groupdesc'] = tsTitle( $strGroup ['groupdesc'] ); + + + + if ($strGroup ['isaudit'] == 1) { + tsNotice ( 'å°ç»„还未审核通过,ä¸å…许å‘帖ï¼' ); + } + + // å…许å°ç»„æˆå‘˜å‘帖 + if ($strGroup ['ispost'] == 0 && $isGroupUser == 0 && $userid != $strGroup ['userid']) { + tsNotice ( "本å°ç»„åªå…许å°ç»„æˆå‘˜å‘贴,请加入å°ç»„åŽå†å‘帖ï¼" ); + } + // ä¸å…许å°ç»„æˆå‘˜å‘帖 + if ($strGroup ['ispost'] == 1 && $userid != $strGroup ['userid']) { + tsNotice ( "本å°ç»„åªå…许å°ç»„组长å‘帖ï¼" ); + } + // 帖å­ç±»åž‹ + $arrGroupType = $new ['group']->findAll ( 'group_topic_type', array ( + 'groupid' => $strGroup ['groupid'] + ) ); + + + + #加载è‰ç¨¿ç®± + $strDraft = $new['group']->find('draft',array( + 'userid'=>$userid, + 'types'=>'topic', + )); + + + + $title = 'å‘布帖å­'; + // åŒ…å«æ¨¡ç‰ˆ + include template ( "add" ); + + break; + + // 执行å‘å¸ƒå¸–å­ + case "do" : + + + $authcode = strtolower ( $_POST ['authcode'] ); + + if ($TS_SITE['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + tsNotice ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ); + } + } + + $groupid = intval ( $_POST ['groupid'] ); + $title = trim( $_POST ['title'] ); + + $content = tsClean( $_POST ['content'] ); + $content2 = emptyText( $_POST ['content'] ); + + $typeid = intval ( $_POST ['typeid'] ); + $tag = $_POST ['tag']; + + // 判断一下Title是å¦é‡å¤ + $isTitle = $new ['group']->findCount ( 'group_topic', array ( + 'title' => $title + ) ); + + if ($isTitle > 0) { + tsNotice ( '有é‡å¤æ ‡é¢˜å‡ºçް哦^_^' ); + } + + // å°ç»„ + $strGroup = $new ['group']->find ( 'group', array ( + 'groupid' => $groupid + ) ); + + if ($strGroup ['isaudit'] == 1) { + tsNotice ( 'å°ç»„还未审核通过,ä¸å…许å‘帖ï¼' ); + } + + if ($TS_USER ['isadmin'] == 0) { + aac ( 'system' )->antiWord ( $title ); + aac ( 'system' )->antiWord ( $content ); + aac ( 'system' )->antiWord ( $tag ); + } + + $iscomment = intval ( $_POST ['iscomment'] ); + $iscommentshow = intval ( $_POST ['iscommentshow'] ); + + // 取孿˜¯å¦éœ€è¦å®¡æ ¸ + if ($strGroup ['ispostaudit'] == 1) { + $isaudit = 1; + } else { + $isaudit = 0; + } + + if ($title == '' || $content2 == '') { + tsNotice ( '???' ); + } + + /** + * ****************** + */ + // 防止用户å‘布é‡å¤å†…容,调出用户上一次å‘表的内容 + $strPreTopic = $new ['group']->find ( 'group_topic', array ( + 'userid' => $userid + ), 'topicid,title,addtime', 'addtime desc' ); + + // print_r($strPreTopic);exit; + + + // å‘帖间隔时间 + /* + $IntervalTime = time () - $strPreTopic ['addtime']; + // if($strPreTopic && $IntervalTime<3600){ + if ($strPreTopic) { + similar_text ( $strPreTopic ['title'], $title, $percent ); + if ($percent >= 90) { + $new ['group']->update ( 'group_topic', array ( + 'topicid' => $strPreTopic ['topicid'] + ), array ( + 'isaudit' => 1 + ) ); + $isaudit = 1; + } + } + */ + + + + /** + * ***************** + */ + + $gaiyao = cututf8(t(tsDecode($content)),0,100); + + + $topicid = $new ['group']->create ( 'group_topic', array ( + 'groupid' => $groupid, + 'typeid' => $typeid, + 'userid' => $userid, + 'locationid'=>aac('user')->getLocationId($userid), + 'title' => $title, + 'content' => $content, + 'gaiyao'=>$gaiyao, + 'iscomment' => $iscomment, + 'iscommentshow' => $iscommentshow, + 'isaudit' => $isaudit, + 'addtime' => time (), + 'uptime' => time () + ) ); + + + #清空è‰ç¨¿ç®± + $new['group']->delete('draft',array( + 'userid'=>$userid, + 'types'=>'topic', + )); + + + // 统计用户å‘帖数 + $countUserTopic = $new ['group']->findCount ( 'group_topic', array ( + 'userid' => $userid + ) ); + + $new ['group']->update ( 'user_info', array ( + 'userid' => $userid + ), array ( + 'count_topic' => $countUserTopic + ) ); + + // 处ç†@用户å + /* + if (preg_match_all ( '/@/', $content, $at )) { + preg_match_all ( "/@(.+?)([\s|:]|$)/is", $content, $matches ); + + $unames = $matches [1]; + + $ns = "'" . implode ( "','", $unames ) . "'"; + + $csql = "username IN($ns)"; + + if ($unames) { + + $query = $db->fetch_all_assoc ( "select userid,username from " . dbprefix . "user_info where $csql" ); + + foreach ( $query as $v ) { + $content = str_replace ( '@' . $v ['username'] . '', '[@' . $v ['username'] . ':' . $v ['userid'] . ']', $content ); + $msg_content = '我在帖å­ä¸­æåˆ°äº†ä½ 
    去看看:' . tsUrl ( 'group', 'topic', array ( + 'id' => $topicid + ) ); + aac ( 'message' )->sendmsg ( $userid, $v ['userid'], $msg_content ); + } + $new ['group']->update ( 'group_topic', array ( + 'topicid' => $topicid + ), array ( + 'content' => $content + ) ); + } + } + */ + + // 统计帖å­ç±»åž‹ + if ($typeid) { + $topicTypeNum = $new ['group']->findCount ( 'group_topic', array ( + 'typeid' => $typeid + ) ); + + $new ['group']->update ( 'group_topic_type', array ( + 'typeid' => $typeid + ), array ( + 'count_topic' => $topicTypeNum + ) ); + } + // å¤„ç†æ ‡ç­¾ + aac ( 'tag' )->addTag ( 'topic', 'topicid', $topicid, $tag ); + + // 统计需è¦å®¡æ ¸çš„å¸–å­ + $count_topic_audit = $new ['group']->findCount ( 'group_topic', array ( + 'groupid' => $groupid, + 'isaudit' => '1' + ) ); + + // 统计å°ç»„䏋取孿•°å¹¶æ›´æ–° + $count_topic = $new ['group']->findCount ( 'group_topic', array ( + 'groupid' => $groupid + ) ); + + // 统计今天å‘å¸ƒå¸–å­æ•° + $today_start = strtotime ( date ( 'Y-m-d 00:00:00' ) ); + $today_end = strtotime ( date ( 'Y-m-d 23:59:59' ) ); + + $count_topic_today = $new ['group']->findCount ( 'group_topic', "`groupid`='$groupid' and `addtime`>'$today_start' and `addtime`<'$today_end'" ); + + $new ['group']->update ( 'group', array ( + 'groupid' => $groupid + ), array ( + 'count_topic' => $count_topic, + 'count_topic_audit' => $count_topic_audit, + 'count_topic_today' => $count_topic_today, + 'uptime' => time () + ) ); + + // å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac ( 'user' )->doScore ( $TS_URL['app'], $TS_URL['ac'], $TS_URL['ts'] ); + + + header ( "Location: " . tsUrl('group', 'topic', array ('id' => $topicid))); + break; +} diff --git a/app/group/action/admin.php b/app/group/action/admin.php new file mode 100644 index 0000000..e6922c0 --- /dev/null +++ b/app/group/action/admin.php @@ -0,0 +1,9 @@ +findAll('group_album',null,'addtime desc',null,$lstart.',10'); + + $albumNum = $new['group']->findCount('group_album'); + + $pageUrl = pagination($albumNum, 10, $page, $url); + + include template("admin/album_list"); + + break; + + //分类删除 + case "delete": + + $albumid = intval($_GET['albumid']); + + $new['group']->delete('group_album',array( + 'albumid'=>$albumid, + )); + + $new['group']->delete('group_album_topic',array( + 'albumid'=>$albumid, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/group/action/admin/cate.php b/app/group/action/admin/cate.php new file mode 100644 index 0000000..6b0bb86 --- /dev/null +++ b/app/group/action/admin/cate.php @@ -0,0 +1,118 @@ +findAll('group_cate',array( + 'referid'=>'0', + )); + + foreach($arrCate as $key=>$item){ + + $arrCates[] = $item; + $arrCates[$key]['two'] = $new['group']->findAll('group_cate',array( + 'referid'=>$item['cateid'], + )); + + } + + foreach($arrCates as $key=>$item){ + + $arrCatess[] = $item; + foreach($item['two'] as $tkey=>$titem){ + + $arrCatess[$key]['two'][$tkey]['three'] = $new['group']->findAll('group_cate',array( + 'referid'=>$titem['cateid'], + )); + + } + + } + + //print_r($arrCatess); + + include template("admin/cate_list"); + + break; + + //分类添加 + case "add": + + $referid = tsIntval($_GET['referid']); + + include template("admin/cate_add"); + + break; + + case "add_do": + + $new['group']->create('group_cate',array( + + 'catename'=>t($_POST['catename']), + 'referid'=>tsIntval($_POST['referid']), + + )); + + + header("Location: ".SITE_URL."index.php?app=group&ac=admin&mg=cate&ts=list"); + + break; + + //分类删除 + case "del": + + $cateid = tsIntval($_GET['cateid']); + + $groupNum = $db->once_fetch_assoc("select count(*) from ".dbprefix."group where `cateid`='$cateid'"); + + if($groupNum['count(*)'] > 0){ + qiMsg("此分类有å°ç»„存在,ä¸å…许删除ï¼"); + } + + $db->query("delete from ".dbprefix."group_cate where cateid='$cateid'"); + + + qiMsg("分类删除æˆåŠŸï¼"); + + break; + + //分类修改 + case "edit": + + $cateid = tsIntval($_GET['cateid']); + + $referid = tsIntval($_GET['referid']); + + $strCate = $db->once_fetch_assoc("select * from ".dbprefix."group_cate where cateid='$cateid'"); + + //调出顶级分类 + if($referid){ + $arrOneCate = $new['group']->findAll('group_cate',array( + 'referid'=>0, + )); + } + + include template("admin/cate_edit"); + + break; + + //分类修改执行 + case "edit_do": + $cateid = tsIntval($_POST['cateid']); + $catename = t($_POST['catename']); + + $referid = tsIntval($_POST['referid']); + + $refer = ''; + if($referid){ + $refer = ", `referid`='$referid'"; + } + + $db->query("update ".dbprefix."group_cate set `catename`='".$catename."'".$refer." where cateid='$cateid'"); + + header("Location: ".SITE_URL."index.php?app=group&ac=admin&mg=cate&ts=list"); + + break; +} \ No newline at end of file diff --git a/app/group/action/admin/group.php b/app/group/action/admin/group.php new file mode 100644 index 0000000..26ae19a --- /dev/null +++ b/app/group/action/admin/group.php @@ -0,0 +1,156 @@ +fetch_all_assoc("select * from ".dbprefix."group order by addtime desc limit $lstart,10"); + $groupNum = $db->once_num_rows("select * from ".dbprefix."group"); + if(is_array($arrGroup)){ + foreach($arrGroup as $key=>$item){ + $arrAllGroup[] = $item; + $arrAllGroup[$key]['groupdesc'] = cututf8($item['groupdesc'],0,40); + } + } + $pageUrl = pagination($groupNum, 10, $page, $url); + + include template("admin/group_list"); + + break; + + + //推èçš„å°ç»„ + case "recommend": + + $arrGroup = $new['group']->findAll('group',array( + 'isrecommend'=>1, + ),'orderid asc','groupid,orderid,groupname,isrecommend'); + + + include template("admin/group_recommend"); + + break; + + + case "orderid": + + $arrGroupid = $_POST['groupid']; + $arrOrderid = $_POST['orderid']; + + foreach($arrGroupid as $key=>$item){ + $new['group']->update('group',array( + 'groupid'=>tsIntval($item) + ),array( + 'orderid'=>tsIntval($arrOrderid[$key]) + )); + } + + qiMsg('修改æˆåŠŸï¼'); + + break; + + + //å°ç»„编辑 + case "edit": + $groupid = tsIntval($_GET['groupid']); + $arrGroup = $db->once_fetch_assoc("select * from ".dbprefix."group where groupid='$groupid'"); + include template("admin/group_edit"); + break; + + //å°ç»„编辑执行 + case "editdo": + $groupid = tsIntval($_POST['groupid']); + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'userid' => tsIntval($_POST['userid']), + )); + + qiMsg("å°ç»„ä¿¡æ¯ä¿®æ”¹æˆåŠŸï¼"); + break; + + //å°ç»„删除 + case "del": + $groupid = tsIntval($_GET['groupid']); + + if($groupid == 1){ + qiMsg("默认å°ç»„ä¸èƒ½åˆ é™¤ï¼"); + } + + $topicNum = $db->once_fetch_assoc("select count(*) from ".dbprefix."topic where `groupid`='$groupid'"); + + if($topicNum['count(*)'] > 0){ + qiMsg("本å°ç»„还有帖å­ï¼Œä¸å…许删除。"); + } + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$groupid, + )); + + $new['group']->deleteGroup($strGroup); + + qiMsg("å°ç»„删除æˆåŠŸï¼"); + + break; + + //审核å°ç»„ + case "isaudit": + + $groupid = tsIntval($_GET['groupid']); + + $strGroup = $db->once_fetch_assoc("select groupid,userid,groupname,isaudit from ".dbprefix."group where groupid='$groupid'"); + + if($strGroup['isaudit']){ + + $db->query("update ".dbprefix."group set `isaudit`='0' where groupid='$groupid'"); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(审核通过) + $msg_userid = '0'; + $msg_touserid = $strGroup['userid']; + $msg_content = 'æ­å–œä½ ï¼Œä½ ç”³è¯·çš„å°ç»„《'.$strGroup['groupname'].'》审核通过ï¼å¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + }else{ + + $db->query("update ".dbprefix."group set `isaudit`='1' where groupid='$groupid'"); + + } + + + + qiMsg("æ“作æˆåŠŸï¼"); + + break; + + //推èå°ç»„ + case "isrecommend": + $groupid = tsIntval($_GET['groupid']); + + $strGroup = $db->once_fetch_assoc("select groupid,userid,groupname,isrecommend from ".dbprefix."group where groupid='$groupid'"); + + if($strGroup['isrecommend'] == 0){ + $db->query("update ".dbprefix."group set `isrecommend`='1' where groupid='$groupid'"); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(审核通过) + $msg_userid = '0'; + $msg_touserid = $strGroup['userid']; + $msg_content = 'æ­å–œä½ ï¼Œä½ çš„å°ç»„《'.$strGroup['groupname'].'》被推è啦ï¼å¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + }else{ + + $db->query("update ".dbprefix."group set `isrecommend`='0' where groupid='$groupid'"); + + } + + qiMsg("æ“作æˆåŠŸï¼"); + + break; +} \ No newline at end of file diff --git a/app/group/action/admin/options.php b/app/group/action/admin/options.php new file mode 100644 index 0000000..9b6718a --- /dev/null +++ b/app/group/action/admin/options.php @@ -0,0 +1,27 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'group',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/group/action/admin/topic.php b/app/group/action/admin/topic.php new file mode 100644 index 0000000..b60e9ed --- /dev/null +++ b/app/group/action/admin/topic.php @@ -0,0 +1,133 @@ +findAll('group_topic',null,'addtime desc',null,$lstart.',10'); + + $topicNum = $new['group']->findCount('group_topic'); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_list"); + + break; + + case "delete": + $topicid = intval($_GET['topicid']); + $groupid = intval($_GET['groupid']); + + $new['group']->delTopic($topicid,$groupid); + + qiMsg('删除æˆåŠŸ'); + break; + + //帖å­å®¡æ ¸ + case "isaudit": + + $topicid = intval($_GET['topicid']); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['isaudit']==0){ + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>1, + )); + } + + if($strTopic['isaudit']==1){ + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>0, + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //åˆ é™¤çš„å¸–å­ + case "deletetopic": + + $page = isset($_GET['page']) ? intval($_GET['page']) : 1; + $url = SITE_URL.'index.php?app=group&ac=admin&mg=topic&ts=deletetopic&page='; + $lstart = $page*10-10; + + $arrTopic = $new['group']->findAll('group_topic',array('isdelete'=>'1'),'addtime desc',null,$lstart.',10'); + + $topicNum = $new['group']->findCount('group_topic',array( + 'isdelete'=>'1', + )); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_delete"); + + break; + + //ç¼–è¾‘çš„å¸–å­ + case "edittopic": + + $page = isset($_GET['page']) ? intval($_GET['page']) : 1; + $url = SITE_URL.'index.php?app=group&ac=admin&mg=topic&ts=edittopic&page='; + $lstart = $page*10-10; + + $arrTopic = $new['group']->findAll('group_topic_edit',null,'addtime desc',null,$lstart.',10'); + + $topicNum = $new['group']->findCount('group_topic_edit'); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_edit"); + + break; + + //æ‰§è¡Œæ›´æ–°å¸–å­ + case "update": + + $topicid = intval($_GET['topicid']); + + $strTopic = $new['group']->find('group_topic_edit',array( + 'topicid'=>$topicid, + )); + + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'title'=>$strTopic['title'], + 'content'=>$strTopic['content'], + )); + + $new['group']->update('group_topic_edit',array( + 'topicid'=>$topicid, + ),array( + 'isupdate'=>1, + )); + + qiMsg('æ›´æ–°æˆåŠŸï¼'); + + break; + + //查看å•独æŸä¸ªä¿®æ”¹çš„å¸–å­ + case "editview": + $topicid = intval($_GET['topicid']); + + $strTopic = $new['group']->find('group_topic_edit',array( + 'topicid'=>$topicid, + )); + + include template('admin/topic_edit_view'); + break; + +} \ No newline at end of file diff --git a/app/group/action/admin/upuser.php b/app/group/action/admin/upuser.php new file mode 100644 index 0000000..5292bf2 --- /dev/null +++ b/app/group/action/admin/upuser.php @@ -0,0 +1,24 @@ +fetch_all_assoc("select userid from ".dbprefix."user order by userid desc"); + +foreach($arrUser as $item){ + $groupusernum = $db->once_num_rows("select * from ".dbprefix."group_user where userid='".$item['userid']."' and groupid='".$groupid."'"); + + if($groupusernum == '0'){ + $db->query("insert into ".dbprefix."group_user (`userid`,`groupid`,`addtime`) values ('".$item['userid']."','".$groupid."','".time()."')"); + } + +} + +$userNum = $db->once_num_rows("select * from ".dbprefix."group_user where groupid='".$groupid."'"); + +$db->query("update ".dbprefix."group set `count_user`='".$userNum."' where groupid='".$groupid."'"); + +qiMsg("ä¼šå‘˜æŠ•é€æˆåŠŸï¼"); \ No newline at end of file diff --git a/app/group/action/ajax.php b/app/group/action/ajax.php new file mode 100644 index 0000000..024930c --- /dev/null +++ b/app/group/action/ajax.php @@ -0,0 +1,147 @@ +find('group',array( + 'groupid'=>$groupid + )); + + if($userid==0 || $groupid==0 || $strGroup==''){ + getJson('请登录åŽå†åŠ å…¥å°ç»„',1,2,tsUrl('user','login')); + } + + //管ç†å‘˜å¯ä»¥åР入任何å°ç»„ + if($TS_USER['isadmin'] != 1){ + + //除管ç†å‘˜å¤–其他用户都è¦ç»è¿‡è¿™ä¸€å…³å®¡æ ¸ + if($strGroup['joinway'] == 1) getJson('本å°ç»„ç¦æ­¢åŠ å…¥ï¼'); + + //处ç†ç”³è¯·åŠ å…¥,æˆå‘˜å®¡æ ¸ + if($strGroup['joinway'] == 2){ + $new['group']->replace('group_user_isaudit',array( + 'userid'=>$userid, + 'groupid'=>$strGroup['groupid'], + ),array( + 'userid'=>$userid, + 'groupid'=>$strGroup['groupid'], + )); + + getJson('加入å°ç»„申请æäº¤æˆåŠŸï¼Œè¯·ç­‰å¾…ç®¡ç†å‘˜å®¡æ ¸åŽåŠ å…¥ã€‚'); + + } + + + //先统计用户有多少个å°ç»„了,50个å°é¡¶ + $userGroupNum = $new['group']->findCount('group_user',array('userid'=>$userid)); + + if($userGroupNum >= $TS_APP['joinnum']) getJson('你加入的å°ç»„总数已ç»åˆ°è¾¾'.$TS_APP['joinnum'].'个,ä¸èƒ½å†åŠ å…¥å°ç»„ï¼'); + + $groupUserNum = $new['group']->findCount('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + )); + + if($groupUserNum > 0) getJson('ä½ å·²ç»åŠ å…¥å°ç»„ï¼'); + + + + #付费加入å°ç»„ + if($TS_APP['ispayjoin']==1 && $strGroup['joinway']==3){ + //å¯åŠ¨æ”¯ä»˜å¸å· + $strUserPay = aac('pay')->getUserPay($userid); + if($strUserPay['over']<$strGroup['price']){ + getJson('支付å¸å·èµ„金ä¸è¶³ï¼Œè¯·å……值åŽå†åŠ å…¥å°ç»„ï¼'); + } + //用户加入付款消费 + aac('pay')->updatePay($userid,$strGroup['price'],1,'加入收费å°ç»„'.$strGroup['groupid']); + + #组长获å–加入收费收入 + aac('pay')->updatePay($strGroup['userid'],$strGroup['price'],0,'æ”¶è´¹å°ç»„获å–'.$strGroup['groupid']); + } + + + + } + + $new['group']->create('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + 'addtime'=>time(), + )); + + //æ›´æ–° + $count_group = $new['group']->findCount('group_user',array( + 'userid'=>$userid, + )); + $new['group']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'count_group'=>$count_group, + )); + + //计算å°ç»„会员数 + $count_user = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + )); + + //æ›´æ–°å°ç»„æˆå‘˜ç»Ÿè®¡ + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_user'=>$count_user, + )); + + getJson('加入æˆåŠŸï¼',1,1,tsUrl('group','show',array('id'=>$groupid))); + + break; + + //退出å°ç»„ + case "exitgroup": + + $userid = tsIntval($TS_USER['userid']); + + $groupid = tsIntval($_POST['groupid']); + + //åˆ¤æ–­æ˜¯å¦æ˜¯ç»„长,是组长ä¸èƒ½é€€å‡ºå°ç»„ + $strGroup = $new['group']->find('group',array( + 'groupid'=>$groupid + )); + + if($userid==0 || $groupid==0 || $strGroup==''){ + getJson('éžæ³•æ“作'); + } + + if($strGroup['userid'] == $userid) getJson('ç»„é•¿ä»»åŠ¡è‰°å·¨ï¼Œè¯·åšæŒåˆ°åº•ï¼'); + + $new['group']->delete('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + )); + + //计算å°ç»„会员数 + $count_user = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + )); + + //æ›´æ–°å°ç»„æˆå‘˜ç»Ÿè®¡ + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_user'=>$count_user, + )); + + getJson('加入æˆåŠŸï¼',1,1,tsUrl('group','show',array('id'=>$groupid))); + + break; + + + +} \ No newline at end of file diff --git a/app/group/action/all.php b/app/group/action/all.php new file mode 100644 index 0000000..c1b91a9 --- /dev/null +++ b/app/group/action/all.php @@ -0,0 +1,30 @@ +'')); +$lstart = $page*20-20; +$arrGroups = $db->fetch_all_assoc("select groupid from ".dbprefix."group order by isrecommend desc limit $lstart,20"); +foreach($arrGroups as $key=>$item){ + $arrData[] = $new['group']->getOneGroup($item['groupid']); +} +foreach($arrData as $key=>$item){ + $arrGroup[] = $item; + $arrGroup[$key]['groupdesc'] = cututf8(t($item['groupdesc']),0,35); +} +$groupNum = $db->once_fetch_assoc("select count(groupid) from ".dbprefix."group"); +$pageUrl = pagination($groupNum['count(groupid)'], 20, $page, $url); +if($page > 1){ + $title = '全部å°ç»„ - 第'.$page.'页'; +}else{ + $title = '全部å°ç»„'; +} + + +//çƒ­é—¨å¸–å­ +$arrTopic = $db->fetch_all_assoc("select topicid,title,count_comment from ".dbprefix."group_topic order by count_comment desc limit 10"); + +//最新10个å°ç»„ +$arrNewGroup = $new['group']->getNewGroup('10'); + +include template('all'); \ No newline at end of file diff --git a/app/group/action/api.php b/app/group/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/group/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +Group Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/group/action/audit.php b/app/group/action/audit.php new file mode 100644 index 0000000..5a26018 --- /dev/null +++ b/app/group/action/audit.php @@ -0,0 +1,99 @@ +isLogin(); + +$groupid = tsIntval($_GET['groupid']); + +$strGroup = $new['group']->find('group',array( + 'groupid'=>$groupid, +)); + +if($strGroup['userid']==$userid || $TS_USER['isadmin']==1){ + + switch($ts){ + + case "": + + $arrTopic = $new['group']->findAll('topic',array( + 'groupid'=>$groupid, + 'isaudit'=>1, + )); + + $title = '审核帖å­'; + include template('audit'); + + break; + + //执行审核 + case "do": + + $topicid = tsIntval($_GET['topicid']); + + $new['group']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>'0', + )); + + //统计需è¦å®¡æ ¸çš„å¸–å­ + $count_topic_audit = $new['group']->findCount('topic',array( + 'groupid'=>$groupid, + 'isaudit'=>'1', + )); + + // 统计å°ç»„䏋取孿•°å¹¶æ›´æ–° + $count_topic = $new['group']->findCount('topic',array( + 'groupid'=>$groupid, + )); + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_topic'=>$count_topic, + 'count_topic_audit'=>$count_topic_audit, + )); + + tsNotice('审核æˆåŠŸï¼'); + + break; + + //删除审核 + case "delete": + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = aac('topic')->getOneTopic($topicid); + + if($strGroup['groupid']!=$groupid){ + tsNotice('éžæ³•æ“作ï¼'); + } + + aac('topic')->deleteTopic($strTopic); + + //统计需è¦å®¡æ ¸çš„å¸–å­ + $count_topic_audit = $new['group']->findCount('topic',array( + 'groupid'=>$groupid, + 'isaudit'=>'1', + )); + + // 统计å°ç»„䏋取孿•°å¹¶æ›´æ–° + $count_topic = $new['group']->findCount('topic',array( + 'groupid'=>$groupid, + )); + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_topic'=>$count_topic, + 'count_topic_audit'=>$count_topic_audit, + )); + + tsNotice('删除æˆåŠŸï¼'); + + break; + + } +}else{ + tsNotice('éžæ³•æ“作ï¼'); +} \ No newline at end of file diff --git a/app/group/action/cate.php b/app/group/action/cate.php new file mode 100644 index 0000000..e7fc45b --- /dev/null +++ b/app/group/action/cate.php @@ -0,0 +1,223 @@ +findAll('group_cate',array( + 'referid'=>0, + )); + + + //分类下å°ç»„ + $page = tsIntval($_GET['page'],1); + $url = tsUrl('group','cate',array('page'=>'')); + $lstart = $page*20-20; + $arrGroup = $new['group']->findAll('group',null,'isrecommend desc,count_topic desc',null,$lstart.',20'); + $groupNum = $new['group']->findCount('group'); + $pageUrl = pagination($groupNum, 20, $page, $url); + + + + $title = '分类'; + + include template('cate'); + + break; + + //二级分类 + case "2": + $cateid = tsIntval($_GET['cateid']); + $strCate = $new['group']->find('group_cate',array( + 'cateid'=>$cateid, + )); + + + $arrCate = $new['group']->findAll('group_cate',array( + 'referid'=>$cateid, + )); + + + //分类下å°ç»„ + $page = tsIntval($_GET['page'],1); + $url = tsUrl('group','cate',array('ts'=>'2','page'=>'')); + $lstart = $page*20-20; + $arrGroup = $new['group']->findAll('group',array( + 'cateid'=>$cateid, + ),null,null,$lstart.',20'); + $groupNum = $new['group']->findCount('group',array( + 'cateid'=>$cateid, + )); + $pageUrl = pagination($groupNum, 20, $page, $url); + + + + + $title = $strCate['catename']; + include template('cate2'); + + break; + + //三级分类 + case "3": + + $cateid = tsIntval($_GET['cateid']); + + $strCate = $new['group']->find('group_cate',array( + 'cateid'=>$cateid, + )); + + //上级分类 + $oneCate = $new['group']->find('group_cate',array( + 'cateid'=>$strCate['referid'], + )); + + //下级分类 + $arrCate = $new['group']->findAll('group_cate',array( + 'referid'=>$cateid, + )); + + + //分类下å°ç»„ + $page = tsIntval($_GET['page'],1); + $url = tsUrl('group','cate',array('ts'=>'3','page'=>'')); + $lstart = $page*20-20; + $arrGroup = $new['group']->findAll('group',array( + 'cateid2'=>$cateid, + ),null,null,$lstart.',20'); + + $groupNum = $new['group']->findCount('group',array( + 'cateid'=>$cateid, + )); + $pageUrl = pagination($groupNum, 20, $page, $url); + + $title = $strCate['catename']; + include template('cate3'); + break; + + //展示å°ç»„ + case "group": + + $cateid = tsIntval($_GET['cateid']); + + $strCate = $new['group']->find('group_cate',array( + 'cateid'=>$cateid, + )); + + $twoCate = $new['group']->find('group_cate',array( + 'cateid'=>$strCate['referid'], + )); + + $oneCate = $new['group']->find('group_cate',array( + 'cateid'=>$twoCate['referid'], + )); + + + //分类下å°ç»„ + $arrGroup = $new['group']->findAll('group',array( + + 'cateid3'=>$cateid, + + )); + + + $title = $strCate['catename']; + + include template('cate_group'); + + break; + + //绑定分类 + case "do": + + $groupid = tsIntval($_POST['groupid']); + $cateid = tsIntval($_POST['cateid']); + $cateid2 = tsIntval($_POST['cateid2']); + $cateid3 = tsIntval($_POST['cateid3']); + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'cateid'=>$cateid, + 'cateid2'=>$cateid2, + 'cateid3'=>$cateid3, + )); + + //更新分类统计 + //更新一级 + if($cateid){ + $count_group = $new['group']->findCount('group',array( + 'cateid'=>$cateid, + )); + $new['group']->update('group_cate',array( + 'cateid'=>$cateid, + ),array( + 'count_group'=>$count_group, + )); + } + //更新二级 + if($cateid2){ + + $count_group = $new['group']->findCount('group',array( + 'cateid2'=>$cateid2, + )); + + $new['group']->update('group_cate',array( + 'cateid'=>$cateid2, + ),array( + 'count_group'=>$count_group, + )); + } + //更新三级 + if($cateid3){ + $count_group = $new['group']->findCount('group',array( + 'cateid3'=>$cateid3, + )); + $new['group']->update('group_cate',array( + 'cateid'=>$cateid3, + ),array( + 'count_group'=>$count_group, + )); + } + + tsNotice('分类修改æˆåŠŸï¼'); + + break; + + + //二级分类 + case "two": + $cateid = tsIntval($_GET['cateid']); + $arrCate = $db->fetch_all_assoc("select * from ".dbprefix."group_cate where referid='$cateid'"); + + if($arrCate){ + echo '"; + }else{ + echo ''; + } + break; + + //三级分类 + case "three": + $cateid2 = tsIntval($_GET['cateid2']); + $arrCate = $db->fetch_all_assoc("select * from ".dbprefix."group_cate where referid='$cateid2'"); + + if($arrCate){ + echo '"; + }else{ + echo ''; + } + break; + +} \ No newline at end of file diff --git a/app/group/action/comment.php b/app/group/action/comment.php new file mode 100644 index 0000000..71a1e8d --- /dev/null +++ b/app/group/action/comment.php @@ -0,0 +1,192 @@ +isLogin($js,$userkey); +switch($ts){ + + /** + * 添加帖å­è¯„论 + * index.php?app=group&ac=comment&ts=do&js=1 + * post + * @userkey + * @topicid + * @content + * @ispublic + */ + case "do": + + $authcode = strtolower($_POST['authcode']); + + if ($TS_SITE ['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + getJson ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ,$js,0); + } + } + + $topicid = intval($_POST['topicid']); + $content = tsClean($_POST['content'],$js); + $content2 = emptyText($_POST['content']);//测试空内容 + $ispublic = intval($_POST['ispublic']); + + //过滤内容开始 + if($TS_USER['isadmin']==0){ + aac('system')->antiWord($content,$js); + } + //è¿‡æ»¤å†…å®¹ç»“æŸ + + if($content2==''){ + getJson('没有任何内容是ä¸å…许你通过滴^_^',$js); + }else{ + $commentid = $new['group']->create('group_topic_comment',array( + 'topicid' => $topicid, + 'userid' => $userid, + 'content' => $content, + 'ispublic'=>$ispublic, + 'addtime'=> time(), + )); + + //统计评论数 + $count_comment = $new['group']->findCount('group_topic_comment',array( + 'topicid'=>$topicid, + )); + + //æ›´æ–°å¸–å­æœ€åŽå›žåº”时间和评论数 + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'count_comment'=>$count_comment, + 'uptime'=>time(), + )); + + //å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user')->doScore($GLOBALS['TS_URL']['app'], $GLOBALS['TS_URL']['ac'], $GLOBALS['TS_URL']['ts']); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(通知楼主有人回å¤ä»–的帖å­å•¦) + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['userid'] != $TS_USER['userid']){ + + $msg_userid = '0'; + $msg_touserid = $strTopic['userid']; + $msg_content = '你的帖å­ï¼šã€Š'.$strTopic['title'].'》新增一æ¡è¯„论,快去看看给个回å¤å§^_^ '; + $msg_tourl = tsUrl('group','topic',array('id'=>$topicid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + } + + getJson('评论æˆåŠŸ',$js,1,tsUrl('group','topic',array('id'=>$topicid))); + + } + + break; + + + + //回å¤è¯„论 + case "recomment": + + + + $referid = intval($_POST['referid']); + $topicid = intval($_POST['topicid']); + $content = tsClean($_POST['content']); + + $new['group']->create('group_topic_comment',array( + 'referid'=>$referid, + 'topicid'=>$topicid, + 'userid'=>$userid, + 'content'=>$content, + 'addtime'=>time(), + )); + + + //统计评论数 + $count_comment = $new['group']->findCount('group_topic_comment',array( + 'topicid'=>$topicid, + )); + + //æ›´æ–°å¸–å­æœ€åŽå›žåº”时间和评论数 + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'count_comment'=>$count_comment, + 'uptime'=>time(), + )); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + $strComment = $new['group']->find('group_topic_comment',array( + 'commentid'=>$referid, + )); + + if($topicid && $strTopic['userid'] != $TS_USER['userid']){ + $msg_userid = '0'; + $msg_touserid = $strTopic['userid']; + $msg_content = '你的帖å­ï¼šã€Š'.$strTopic['title'].'》新增一æ¡è¯„论,快去看看给个回å¤å§^_^ '; + $msg_tourl = tsUrl('group','topic',array('id'=>$topicid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + } + + if($referid && $strComment['userid'] != $TS_USER['userid']){ + $msg_userid = '0'; + $msg_touserid = $strComment['userid']; + $msg_content = '有人评论了你在帖å­ï¼šã€Š'.$strTopic['title'].'》中的回å¤ï¼Œå¿«åŽ»çœ‹çœ‹ç»™ä¸ªå›žå¤å§^_^ '; + $msg_tourl = tsUrl('group','topic',array('id'=>$topicid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + } + + echo 0;exit; + + break; + + + + //删除评论 + case "delete": + + $commentid = intval($_GET['commentid']); + + $strComment = $new['group']->find('group_topic_comment',array( + 'commentid'=>$commentid, + )); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$strComment['topicid'], + )); + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1 || $strComment['userid']==$userid){ + + $new['group']->delComment($commentid); + + //统计评论数 + $count_comment = $new['group']->findCount('group_topic_comment',array( + 'topicid'=>$strTopic['topicid'], + )); + + //æ›´æ–°å¸–å­æœ€åŽå›žåº”时间和评论数 + $new['group']->update('group_topic',array( + 'topicid'=>$strTopic['topicid'], + ),array( + 'count_comment'=>$count_comment, + )); + + //处ç†ç§¯åˆ† + aac('user')->doScore($GLOBALS['TS_URL']['app'], $GLOBALS['TS_URL']['ac'], $GLOBALS['TS_URL']['ts'],$strComment['userid']); + + + + } + + //跳转回到帖å­é¡µ + header("Location: ".tsUrl('group','topic',array('id'=>$strComment['topicid']))); + + break; +} \ No newline at end of file diff --git a/app/group/action/create.php b/app/group/action/create.php new file mode 100644 index 0000000..bc0d42d --- /dev/null +++ b/app/group/action/create.php @@ -0,0 +1,169 @@ +isLogin(); + +//判断用户是å¦å­˜åœ¨ +if(aac('user')->isUser($userid)==false) tsNotice('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼'); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + + +switch($ts){ + + case "": + + //先判断加入多少个å°ç»„啦 + $userGroupNum = $new['group']->findCount('group_user',array( + 'userid'=>$userid + )); + + if($userGroupNum >= $TS_APP['joinnum'] && $TS_USER['isadmin']==0){ + tsNotice('你加入的å°ç»„总数已ç»åˆ°è¾¾'.$TS_APP['joinnum'].'个,ä¸èƒ½å†åˆ›å»ºå°ç»„ï¼'); + } + + if($TS_APP['iscreate'] == 0 || $TS_USER['isadmin']==1){ + + //å°ç»„分类 + $arrCate = $new['group']->findAll('group_cate',array( + + 'referid'=>0, + + )); + + $title = '创建å°ç»„'; + + include template("create"); + + }else{ + + tsNotice('系统ä¸å…许会员创建å°ç»„ï¼'); + + } + break; + + //执行创建å°ç»„ + case "do": + + //先判断加入多少个å°ç»„啦 + $userGroupNum = $new['group']->findCount('group_user',array( + 'userid'=>$userid + )); + + if($userGroupNum >= $TS_APP['joinnum'] && $TS_USER['isadmin']==0){ + tsNotice('你加入的å°ç»„总数已ç»åˆ°è¾¾'.$TS_APP['joinnum'].'个,ä¸èƒ½å†åˆ›å»ºå°ç»„ï¼'); + } + + if($TS_APP['iscreate'] == 0 || $TS_USER['isadmin']==1){ + + $groupname = tsTrim($_POST['groupname']); + $groupdesc = tsTrim($_POST['groupdesc']); + + if($groupname=='' || $groupdesc=='') { + tsNotice('å°ç»„å称和介ç»ä¸èƒ½ä¸ºç©ºï¼'); + } + + //过滤内容开始 + if($TS_USER['isadmin']!=1){ + $groupname = antiWord($groupname); + $groupdesc = antiWord($groupdesc); + } + //è¿‡æ»¤å†…å®¹ç»“æŸ + + //é…置文件是å¦éœ€è¦å®¡æ ¸ + $isaudit = tsIntval($TS_APP['isaudit']); + if($TS_USER['isadmin']==1){ + $isaudit = 0; + } + + $isGroup = $new['group']->findCount('group',array( + 'groupname'=>$groupname, + )); + + if($isGroup > 0) { + tsNotice("å°ç»„åç§°å·²ç»å­˜åœ¨ï¼Œè¯·æ›´æ¢å…¶ä»–å°ç»„åç§°ï¼"); + } + + $groupid = $new['group']->create('group',array( + 'userid' => $userid, + 'groupname' => $groupname, + 'groupdesc' => $groupdesc, + 'isaudit' => $isaudit, + 'addtime' => time(), + )); + + //上传 + $arrUpload = tsUpload($_FILES['photo'],$groupid,'group',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'path'=>$arrUpload['path'], + 'photo'=>$arrUpload['url'], + )); + } + + //绑定æˆå‘˜ + $new['group']->create('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + 'addtime'=>time(), + )); + + //æ›´æ–° + $count_group = $new['group']->findCount('group_user',array( + 'userid'=>$userid, + )); + $new['group']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'count_group'=>$count_group, + )); + + //æ›´æ–°å°ç»„人数 + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_user'=>1, + )); + + //更新分类统计 + $cateid = tsIntval($_POST['cateid']); + if($cateid > 0){ + $count_group = $new['group']->findCount('group',array( + 'cateid'=>$cateid, + )); + + $new['group']->update('group_cate',array( + 'cateid'=>$cateid, + ),array( + 'count_group'=>$count_group, + )); + + } + + // å¤„ç†æ ‡ç­¾ + aac ( 'tag' )->addTag ( 'group', 'groupid', $groupid, $_POST['tag'] ); + + + // å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts']); + + + #用户记录 + aac('pubs')->addLogs('group','groupid',$groupid,$userid,$groupname,$groupdesc,0); + + + header("Location: ".tsUrl('group','show',array('id'=>$groupid))); + } + break; + +} \ No newline at end of file diff --git a/app/group/action/delete.php b/app/group/action/delete.php new file mode 100644 index 0000000..f9ecaf8 --- /dev/null +++ b/app/group/action/delete.php @@ -0,0 +1,3 @@ +isLogin(); + +switch ($ts) { + + //åˆ é™¤å¸–å­ + case "deltopic": + + //普通用户ä¸å…许删除内容 + if($TS_SITE['isallowdelete'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户删除内容,请è”系管ç†å‘˜åˆ é™¤ï¼'); + + $topicid = intval($_GET['topicid']); + + $strTopic = $new['group']->find('group_topic',array('topicid'=>$topicid)); + + $groupid = $strTopic['groupid']; + + $strGroup = $new['group']->find('group',array('groupid'=>$groupid)); + + $strGroupUser = $new['group']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + )); + + //系统管ç†å‘˜åˆ é™¤ + if($TS_USER['isadmin'] == '1'){ + $new['group']->delTopic($topicid,$groupid); + + header('Location: '.tsUrl('group')); + exit; + + } + /* + //其他人员删除 + if($userid == $strTopic['userid'] || $userid == $strGroup['userid'] || $strGroupUser['isadmin']=='1'){ + + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'isdelete'=>1, + )); + + + + //处ç†ç§¯åˆ† + aac('user')->doScore($GLOBALS['TS_URL']['app'],$GLOBALS['TS_URL']['ac'],$GLOBALS['TS_URL']['ts'],$strTopic['userid']); + + + tsNotice('你的删除帖å­ç”³è¯·å·²ç»æäº¤ï¼'); + + } + */ + //其他人员删除 + if($userid == $strTopic['userid'] || $userid == $strGroup['userid'] || $strGroupUser['isadmin']=='1') + { + //处ç†ç§¯åˆ† + aac('user')->doScore($GLOBALS['TS_URL']['app'],$GLOBALS['TS_URL']['ac'],$GLOBALS['TS_URL']['ts'],$strTopic['userid']); + $new['group']->delTopic($topicid,$groupid); + header('Location: '.tsUrl('group')); + exit; + } + break; + + //æ”¶è—å¸–å­ + case "topic_collect": + + $topicid = intval($_POST['topicid']); + + $strTopic = $db->once_fetch_assoc("select * from ".dbprefix."group_topic where topicid='".$topicid."'"); + + $collectNum = $db->once_num_rows("select * from ".dbprefix."group_topic_collect where userid='$userid' and topicid='$topicid'"); + + if($userid == '0'){ + echo 0; + }elseif($userid == $strTopic['userid']){ + echo 1; + }elseif($collectNum > 0){ + echo 2; + }else{ + + $new['group']->create('group_topic_collect',array( + 'userid'=>$userid, + 'topicid'=>$topicid, + 'addtime'=>time(), + )); + + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'count_love'=>$strTopic['count_love']+1, + )); + + echo 3; + } + + break; + + //ç½®é¡¶å¸–å­ + case "topic_istop": + + $topicid = intval($_GET['topicid']); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + $istop = $strTopic['istop']; + + $istop == 0 ? $istop = 1 : $istop = 0; + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + if($userid==$strGroup['userid'] || $TS_USER['isadmin']==1){ + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'istop'=>$istop, + )); + + + tsNotice("帖å­ç½®é¡¶æˆåŠŸï¼"); + + + }else{ + tsNotice("éžæ³•æ“作ï¼"); + } + break; + + //取孿 ‡ç­¾ + case "topic_tag_ajax"; + + $topicid = intval($_GET['topicid']); + include template("topic_tag_ajax"); + break; + + //æ·»åŠ å¸–å­æ ‡ç­¾ + case "topic_tag_do": + + $topicid = intval($_POST['topicid']); + + if($topicid == 0) tsNotice("éžæ³•æ“作ï¼"); + + $tagname = t($_POST['tagname']); + $uptime = time(); + + if($tagname != ''){ + + if(strlen($tagname) > '32') tsNotice("TAG长度大于32个字节(ä¸èƒ½è¶…过16个汉字)"); + + $tagcount = $db->once_num_rows("select * from ".dbprefix."tag where tagname='".$tagname."'"); + + if($tagcount == '0'){ + $db->query("INSERT INTO ".dbprefix."tag (`tagname`,`uptime`) VALUES ('".$tagname."','".$uptime."')"); + $tagid = $db->insert_id(); + + $tagIndexCount = $db->once_num_rows("select * from ".dbprefix."tag_topic_index where topicid='".$topicid."' and tagid='".$tagid."'"); + if($tagIndexCount == '0'){ + $db->query("INSERT INTO ".dbprefix."tag_topic_index (`topicid`,`tagid`) VALUES ('".$topicid."','".$tagid."')"); + } + + $tagIdCount = $db->once_num_rows("select * from ".dbprefix."tag_topic_index where tagid='".$tagid."'"); + + $db->query("update ".dbprefix."tag set `count_topic`='".$tagIdCount."',`uptime`='".$uptime."' where tagid='".$tagid."'"); + + }else{ + + $tagData = $db->once_fetch_assoc("select * from ".dbprefix."tag where tagname='".$tagname."'"); + + $tagIndexCount = $db->once_num_rows("select * from ".dbprefix."tag_topic_index where topicid='".$topicid."' and tagid='".$tagData['tagid']."'"); + if($tagIndexCount == '0'){ + $db->query("INSERT INTO ".dbprefix."tag_topic_index (`topicid`,`tagid`) VALUES ('".$topicid."','".$tagData['tagid']."')"); + } + + $tagIdCount = $db->once_num_rows("select * from ".dbprefix."tag_topic_index where tagid='".$tagData['tagid']."'"); + + $db->query("update ".dbprefix."tag set `count_topic`='".$tagIdCount."',`uptime`='".$uptime."' where tagid='".$tagData['tagid']."'"); + + } + + echo ""; + + } + + break; + + + + + + + + case 'parseurl': + function formPost($url,$post_data){ + $o=''; + foreach ($post_data as $k=>$v){ + $o.= "$k=".urlencode($v)."&"; + } + $post_data=substr($o,0,-1); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_URL,$url); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + $result = curl_exec($ch); + return $result; + } + + $url = $_POST['parseurl']; + $urlArr = parse_url($url); + $domainArr = explode('.',$urlArr['host']); + $data['type'] = $domainArr[count($domainArr)-2]; + $str = formPost('http://share.pengyou.com/index.php?mod=usershare&act=geturlinfo',array('url'=>$url)); + echo $str; + + break; + + //ç½®é¡¶å¸–å­ + case "isposts": + + $topicid = intval($_GET['topicid']); + + if($userid == 0 || $topicid == 0) tsNotice("éžæ³•æ“作"); + + $strTopic = $db->once_fetch_assoc("select userid,groupid,title,isposts from ".dbprefix."group_topic where topicid='$topicid'"); + + $strGroup = $db->once_fetch_assoc("select userid from ".dbprefix."group where groupid='".$strTopic['groupid']."'"); + + if($userid == $strGroup['userid'] || intval($TS_USER['isadmin']) == 1){ + if($strTopic['isposts']==0){ + $db->query("update ".dbprefix."group_topic set `isposts`='1' where `topicid`='$topicid'"); + + //msg start + $msg_userid = '0'; + $msg_touserid = $strTopic['userid']; + $msg_content = 'æ­å–œï¼Œä½ çš„帖å­ï¼šã€Š'.$strTopic['title'].'》被评为精åŽå¸–啦^_^ '; + $msg_tourl = tsUrl('group','topic',array('id'=>$topicid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + //msg end + + }else{ + $db->query("update ".dbprefix."group_topic set `isposts`='0' where `topicid`='$topicid'"); + } + + tsNotice("æ“作æˆåŠŸï¼"); + }else{ + tsNotice("éžæ³•æ“作ï¼"); + } + + break; + + //å°ç»„邀请用户 + case "invite": + + $iuserid = intval($_POST['userid']); + $groupid = intval($_POST['groupid']); + + if(aac('user')->isUser($iuserid) && $new['group']->isGroup($groupid)){ + + //先统计用户有多少个å°ç»„了,20个å°é¡¶ + $userGroupNum = $new['group']->findCount('group_user',array('userid'=>$iuserid)); + + if($userGroupNum >= $TS_APP['joinnum']) tsNotice('邀请用户加入的å°ç»„总数已ç»åˆ°è¾¾'.$TS_APP['joinnum'].'个,ä¸èƒ½å†åŠ å…¥å°ç»„ï¼'); + + $groupUserNum = $new['group']->findCount('group_user',array( + 'userid'=>$iuserid, + 'groupid'=>$groupid, + )); + + if($groupUserNum > 0) tsNotice('用户已ç»åŠ å…¥å°ç»„ï¼'); + + $new['group']->create('group_user',array( + 'userid'=>$iuserid, + 'groupid'=>$groupid, + 'addtime'=>time(), + )); + + //计算å°ç»„会员数 + $count_user = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + )); + + //æ›´æ–°å°ç»„æˆå‘˜ç»Ÿè®¡ + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_user'=>$count_user, + )); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯å¼€å§‹ + $msg_userid = '0'; + $msg_touserid = $iuserid; + $msg_content = '你被邀请加入一个å°ç»„,快去看看å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + //å‘é€ç³»ç»Ÿæ¶ˆæ¯end + + header('Location: '.tsUrl('group','show',array('id'=>$groupid))); + + }else{ + tsNotice('倒霉了å§ï¼Ÿ'); + } + + break; + + //usertips + case "usertips": + + $data = fileRead('data/user_tips.php'); + + if($data == ''){ + $query = $db->fetch_all_assoc("select * from " . dbprefix . "user_info"); + foreach($query as $user) { + $usertip[]=array('user'=>$user['username'],'name'=>$user['userid']); + } + fileWrite('user_tips.php','data',json_encode($usertip)); + $data = fileRead('data/user_tips.php'); + } + + echo $data; + + break; +} diff --git a/app/group/action/edit.php b/app/group/action/edit.php new file mode 100644 index 0000000..877fac2 --- /dev/null +++ b/app/group/action/edit.php @@ -0,0 +1,602 @@ +isLogin(); + +$groupid = tsIntval($_GET['groupid']); + +$strGroup = $new['group']->find('group',array( + 'groupid'=>$groupid, +)); + +if($strGroup['userid']!=$userid && $TS_USER['isadmin']==0){ + tsNotice('éžæ³•æ“作ï¼'); +} + +$strGroup['groupname'] = tsDecode($strGroup['groupname']); +$strGroup['groupdesc'] = tsDecode($strGroup['groupdesc']); +$strGroup['photo'] = $new['group']->getGroupPhoto($strGroup); +$strGroup['bgphoto'] = $new['group']->getGroupBgPhoto($strGroup); + + + +switch($ts){ + + //编辑å°ç»„åŸºæœ¬ä¿¡æ¯ + case "base": + + + //å°ç»„标签 + $arrTags = aac ( 'tag' )->getObjTagByObjid ( 'group', 'groupid', $groupid ); + foreach ( $arrTags as $key => $item ) { + $arrTag [] = $item ['tagname']; + } + $strGroup ['tag'] = arr2str ( $arrTag ); + + $title = '编辑å°ç»„基本信æ¯'; + include template("edit_base"); + + break; + + //编辑å°ç»„åŸºæœ¬ä¿¡æ¯ + case "basedo": + + $groupname = tsTrim($_POST['groupname']); + $groupdesc = tsTrim($_POST['groupdesc']); + + if($groupname=='' || $groupdesc=='') tsNotice("å°ç»„å称和介ç»éƒ½ä¸èƒ½ä¸ºç©ºï¼"); + + //过滤内容开始 + if($TS_USER['isadmin']!=1){ + $groupname = antiWord($groupname); + $groupdesc = antiWord($groupdesc); + } + + //è¿‡æ»¤å†…å®¹ç»“æŸ + + $isgroupname = $new['group']->findCount('group',array( + 'groupname'=>$groupname, + )); + + if($isgroupname > 0 && $strGroup['groupname']!=$groupname) tsNotice('å°ç»„åç§°å·²ç»å­˜åœ¨ï¼'); + + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'groupname' => $groupname, + 'groupdesc' => $groupdesc, + 'joinway' => tsIntval($_POST['joinway']), + 'price' => tsIntval($_POST['price']), + 'ispost' => tsIntval($_POST['ispost']), + 'isopen' => tsIntval($_POST['isopen']), + 'ispostaudit' => tsIntval($_POST['ispostaudit']), + )); + + // å¤„ç†æ ‡ç­¾ + if ($_POST ['tag']) { + aac ( 'tag' )->delIndextag ( 'group', 'groupid', $groupid ); + aac ( 'tag' )->addTag ( 'group', 'groupid', $groupid, $_POST ['tag'] ); + } + + + #用户记录 + aac('pubs')->addLogs('group','groupid',$groupid,$userid,$groupname,$groupdesc,1); + + tsNotice('基本信æ¯ä¿®æ”¹æˆåŠŸï¼'); + + + + break; + + + //编辑å°ç»„å¤´åƒ + case "icon": + + $title = '修改å°ç»„头åƒ'; + include template("edit_icon"); + + break; + + //上传å°ç»„å¤´åƒ + + case "icondo": + + //上传图标 + $arrUpload = tsUpload($_FILES['photo'],$groupid,'group',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'path'=>$arrUpload['path'], + 'photo'=>$arrUpload['url'], + 'uptime'=>time(), + )); + + tsDimg($arrUpload['url'],'group','200','200',$arrUpload['path']); + tsXimg($arrUpload['url'],'group','200','200',$arrUpload['path'],1); + + + } + + + //上传背景 + $arrBgUpload = tsUpload($_FILES['bgphoto'],$groupid,'group/bgphoto',array('jpg','gif','png','jpeg')); + + if($arrBgUpload){ + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'path'=>$arrBgUpload['path'], + 'bgphoto'=>$arrBgUpload['url'], + 'uptime'=>time(), + )); + + } + + + tsNotice('修改æˆåŠŸï¼'); + + break; + + + //修改访问æƒé™ + case "privacy": + + $title = '编辑å°ç»„æƒé™'; + include template("edit_privacy"); + + break; + + + + + //帖å­åˆ†ç±» + case "type": + //调出类型 + $arrGroupType = $new['group']->findAll('topic_type',array( + 'groupid'=>$strGroup['groupid'], + )); + + $title = '编辑帖å­åˆ†ç±»'; + include template("edit_type"); + + break; + + + //添加帖å­åˆ†ç±» + case "typeadd": + + $typename = tsTrim($_POST['typename']); + if($typename){ + $new['group']->create('topic_type',array( + 'groupid'=>$groupid, + 'typename'=>$typename, + )); + } + + header("Location: ".tsUrl('group','edit',array('ts'=>'type','groupid'=>$groupid))); + break; + + //修改帖å­åˆ†ç±» + case "typeedit": + $typeid = tsIntval($_POST['typeid']); + $typename = tsTrim($_POST['typename']); + if($typeid && $typename){ + $new['group']->update('topic_type',array( + 'typeid'=>$typeid, + 'groupid'=>$groupid, + ),array( + 'typename'=>$typename, + )); + } + header("Location: ".tsUrl('group','edit',array('ts'=>'type','groupid'=>$groupid))); + break; + + + //删除帖å­åˆ†ç±» + case "typedelete": + + $typeid = tsIntval($_GET['typeid']); + + $new['group']->delete('topic_type',array( + 'typeid'=>$typeid, + 'groupid'=>$groupid, + )); + + $new['group']->update('topic',array( + 'groupid'=>$groupid, + 'typeid'=>$typeid, + ),array( + 'typeid'=>0, + )); + + header("Location: ".tsUrl('group','edit',array('ts'=>'type','groupid'=>$groupid))); + break; + + + + + + + //å°ç»„分类 + case "cate": + + $arrCate = $new['group']->findAll('group_cate',array( + + 'referid'=>0, + + )); + + //一级分类 + $strCate = $new['group']->find('group_cate',array( + 'cateid'=>$strGroup['cateid'], + )); + //二级分类 + $strCate2 = $new['group']->find('group_cate',array( + 'cateid'=>$strGroup['cateid2'], + )); + //三级分类 + $strCate3 = $new['group']->find('group_cate',array( + 'cateid'=>$strGroup['cateid3'], + )); + + $title = '编辑å°ç»„分类'; + include template("edit_cate"); + + break; + + + //æˆå‘˜å®¡æ ¸ + case "useraudit": + + $arrUserId = $new['group']->findAll('group_user_isaudit',array( + 'groupid'=>$groupid, + )); + foreach($arrUserId as $key=>$item){ + $arrUser[] = aac('user')->getSimpleUser($item['userid']); + } + + $title = 'æˆå‘˜ç”³è¯·åŠ å…¥å®¡æ ¸'; + include template('edit_useraudit'); + break; + + //æˆå‘˜å®¡æ ¸æ‰§è¡Œ + case "userauditdo": + + $userid = tsIntval($_GET['userid']); + $status = tsIntval($_GET['status']); + + + //0加入1删除 + if($status==0 && $userid){ + + $new['group']->create('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + 'addtime'=>time(), + )); + + //æ›´æ–° + $count_group = $new['group']->findCount('group_user',array( + 'userid'=>$userid, + )); + $new['group']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'count_group'=>$count_group, + )); + + //计算å°ç»„会员数 + $count_user = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + )); + + //æ›´æ–°å°ç»„æˆå‘˜ç»Ÿè®¡ + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_user'=>$count_user, + )); + + } + + $new['group']->delete('group_user_isaudit',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + )); + + header('Location: '.tsUrl('group','edit',array('groupid'=>$groupid,'ts'=>'useraudit'))); + + break; + + + //å°ç»„转让 + case "transfer": + + + $title = 'å°ç»„转让'; + include template('edit_transfer'); + break; + + case "transferdo": + + + $touserid = tsIntval($_POST['touserid']); + + $strTouser = $new['group']->find('group_user',array( + 'userid'=>$touserid, + 'groupid'=>$groupid, + )); + + if($strTouser==''){ + tsNotice('用户还没有加入本å°ç»„,åªèƒ½è½¬è®©ç»™æœ¬å°ç»„æˆå‘˜'); + } + + $new['group']->update('group',array( + 'groupid'=>$groupid, + ),array( + 'userid'=>$touserid, + )); + + tsNotice('å°ç»„转让æˆåŠŸï¼'); + + break; + + #添加用户 + case "adduser": + + $js = tsIntval($_GET['js']); + + + $userid = tsIntval($_POST['userid']); + + if($userid==0){ + getJson('用户ID输入有误ï¼',$js); + } + + $isGroupUser = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + + if($isGroupUser>0){ + getJson('用户已ç»åŠ å…¥å°ç»„ï¼',$js); + } + + $new['group']->create('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + 'addtime'=>time(), + )); + + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = 'æ­å–œä½ ï¼Œä½ æˆä¸ºäº†å°ç»„《'.$strGroup['groupname'].'》的æˆå‘˜ï¼å¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + + getJson('æ“作æˆåŠŸï¼',$js,1); + + break; + + + #å°ç»„管ç†å‘˜ + case "isadmin": + + $arrAdmin = $new['group']->findAll('group_user',array( + 'groupid'=>$groupid, + 'isadmin'=>1, + )); + + $arrAdminUser = array(); + if($arrAdmin){ + foreach($arrAdmin as $key=>$item){ + $arrUserId[] = $item['userid']; + } + $userids = arr2str($arrUserId); + + $arrAdminUser = $new['group']->findAll('user_info',"`userid` in ($userids)",'addtime desc','userid,username'); + + } + + + $title = 'å°ç»„管ç†å‘˜'; + include template('edit_isadmin'); + + break; + + case "isadmindo": + + $js = tsIntval($_GET['js']); + + + $userid = tsIntval($_POST['userid']); + + if($userid==0){ + getJson('用户ID输入有误ï¼',$js); + } + + if($userid==$strGroup['userid']){ + getJson('用户IDä¸å¯ä»¥æ˜¯ç»„é•¿IDï¼',$js); + } + + $isGroupUser = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + + if($isGroupUser==0){ + getJson('输入用户IDä¸å±žäºŽè¯¥å°ç»„用户ï¼',$js); + } + + $new['group']->update('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + ),array( + 'isadmin'=>1, + )); + + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = 'æ­å–œä½ ï¼Œä½ æˆä¸ºäº†å°ç»„《'.$strGroup['groupname'].'》的管ç†å‘˜ï¼å¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + + getJson('æ“作æˆåŠŸï¼',$js,1); + + break; + + #å–æ¶ˆç®¡ç†å‘˜ + case "isadmindel": + + $js = tsIntval($_GET['js']); + + + $userid = tsIntval($_POST['userid']); + + if($userid==0){ + getJson('用户ID输入有误ï¼',$js); + } + + if($userid==$strGroup['userid']){ + getJson('用户IDä¸å¯ä»¥æ˜¯ç»„é•¿IDï¼',$js); + } + + $isGroupUser = $new['group']->findCount('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + + if($isGroupUser==0){ + getJson('输入用户IDä¸å±žäºŽè¯¥å°ç»„用户ï¼',$js); + } + + $new['group']->update('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + ),array( + 'isadmin'=>0, + )); + + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = 'ä¸å¥½æ„æ€ï¼Œä½ åœ¨å°ç»„《'.$strGroup['groupname'].'》的管ç†å‘˜èº«ä»½è¢«æ’¤é”€äº†ï¼å¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('group','show',array('id'=>$groupid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + + getJson('æ“作æˆåŠŸï¼',$js,1); + + break; + + + case "user": + + + $guserid = tsIntval($_GET['guserid']); + + + $page = tsIntval($_GET['page'],1); + + $url = tsUrl('group','edit',array('ts'=>'user','groupid'=>$groupid,'page'=>'')); + + + $lstart = $page*40-40; + + $arr = array( + 'groupid'=>$groupid, + 'isadmin'=>0, + 'isfounder'=>0, + ); + + if($guserid){ + + $arr = array( + 'userid'=>$guserid, + 'groupid'=>$groupid, + 'isadmin'=>0, + 'isfounder'=>0, + ); + + } + + //普通用户 + $groupUserNum = $new['group']->findCount('group_user',$arr); + + $groupUser = $new['group']->findAll('group_user',$arr,'userid desc',null,$lstart.',40'); + + if(is_array($groupUser)){ + foreach($groupUser as $key=>$item){ + $arrGroupUser[$key] = aac('user')->getSimpleUser($item['userid']); + $arrGroupUser[$key]['endtime'] = $item['endtime']; + $arrGroupUser[$key]['price'] = $item['price']; + } + } + + $pageUrl = pagination($groupUserNum, 40, $page, $url); + + $title = '用户管ç†'; + include template('edit_user'); + break; + + case "xuqi": + + $js = tsIntval($_GET['js']); + + + $userid = tsIntval($_POST['userid']); + $endtime = tsTrim($_POST['endtime']); + + if($userid==0){ + getJson('用户ID输入有误ï¼',$js); + } + + + if($endtime==''){ + getJson('续期时间ä¸èƒ½ä¸ºç©ºï¼',$js); + } + + if($endtimefindCount('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + + if($isGroupUser==0){ + getJson('续期用户ä¸å±žäºŽè¯¥å°ç»„用户ï¼',$js); + } + + $new['group']->update('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + ),array( + 'endtime'=>$endtime, + )); + + getJson('æ“作æˆåŠŸï¼',$js,1); + + break; + + + + + +} diff --git a/app/group/action/index.php b/app/group/action/index.php new file mode 100644 index 0000000..7102954 --- /dev/null +++ b/app/group/action/index.php @@ -0,0 +1,65 @@ +findAll('group_cate',array( + 'referid'=>0, +)); + + +// 所有å°ç»„ +$page = tsIntval($_GET['page'],1); +$lstart = $page * 32 - 32; +$url = tsUrl ( 'group', 'index', array ('page' => '') ); +$arr = array( + 'isaudit'=>0 +); + +if($cateid){ + $strCate = $new['group']->find('group_cate',array( + 'cateid'=>$cateid, + )); + $url = tsUrl ( 'group', 'index', array ('cateid'=>$cateid,'page' => '') ); + $arr = array( + 'cateid'=>$cateid, + 'isaudit'=>0, + ); + +} + +$arrGroup = $new ['group']->findAll ( 'group', $arr, 'isrecommend desc,addtime asc', null, $lstart . ',32' ); + +foreach ( $arrGroup as $key => $item ) { + $arrGroup[$key]['groupname'] = tsTitle ( $item['groupname'] ); + $arrGroup[$key]['groupdesc'] = cututf8 (tsTitle($item ['groupdesc']), 0, 35 ); + $arrGroup[$key]['photo_url'] = $new['group']->getGroupPhoto($item); +} + +$groupNum = $new ['group']->findCount ( 'group',$arr); + +$pageUrl = pagination ( $groupNum, 32, $page, $url ); + +// 我加入的å°ç»„ +$myGroup = array (); +if ($TS_USER ['userid']) { + $myGroups = $new ['group']->findAll ( 'group_user', array ( + 'userid' => $TS_USER ['userid'] + ), null, 'groupid' ); + foreach ( $myGroups as $item ) { + $myGroup [] = $item ['groupid']; + } +} + +// 最新10个å°ç»„ +$arrNewGroup = $new ['group']->getNewGroup ( '10' ); + +$title = 'å°ç»„'; +if($strCate){ + $title = $strCate['catename']; +} + +$sitekey = $TS_APP['appkey']; +$sitedesc = $TS_APP['appdesc']; +include template ( "index" ); \ No newline at end of file diff --git a/app/group/action/kicked.php b/app/group/action/kicked.php new file mode 100644 index 0000000..3aefb4c --- /dev/null +++ b/app/group/action/kicked.php @@ -0,0 +1,34 @@ +find('group',array( + 'groupid'=>$groupid, +)); + +if($strGroup['userid']!=$groupuserid){ + + echo 1;exit; + +} + +$new['group']->delete('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, +)); + +$new['group']->update('group',array( + 'groupid'=>$groupid, +),array( + 'count_user'=>$strGroup['count_user']-1, +)); + +echo 2;exit; \ No newline at end of file diff --git a/app/group/action/my.php b/app/group/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/group/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/group/action/my/common.php b/app/group/action/my/common.php new file mode 100644 index 0000000..59b5488 --- /dev/null +++ b/app/group/action/my/common.php @@ -0,0 +1,6 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/group/action/my/index.php b/app/group/action/my/index.php new file mode 100644 index 0000000..9dd4844 --- /dev/null +++ b/app/group/action/my/index.php @@ -0,0 +1,30 @@ +findAll('group_user',array( + 'userid'=>$strUser['userid'], +),null,'groupid'); + + +foreach($arrGroupsList as $key=>$item){ + $arrGroup[] = aac('group')->getOneGroup($item['groupid']); +} + +//创建的å°ç»„ +$arrCreateGroup = $new['group']->findAll('group',array( + 'userid'=>$strUser['userid'], +)); + +foreach($arrCreateGroup as $key=>$item){ + $arrCreateGroup[$key]['groupname'] = tsTitle($item['groupname']); + if($item['photo']){ + $arrCreateGroup[$key]['photo'] = tsXimg($item['photo'],'group',120,120,$item['path'],1); + }else{ + $arrCreateGroup[$key]['photo'] = SITE_URL.'public/images/group.jpg'; + } +} + + +$title = '我加入的å°ç»„'; +include template('my/index'); \ No newline at end of file diff --git a/app/group/action/my/topic.php b/app/group/action/my/topic.php new file mode 100644 index 0000000..4d75faf --- /dev/null +++ b/app/group/action/my/topic.php @@ -0,0 +1,20 @@ +'topic','page' => '' ) ); +$lstart = $page * 20 - 20; + +$arrTopic = $new['group']->findAll('group_topic',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',20'); + +$topicNum = $new ['group']->findCount ( 'group_topic', array ( + 'userid' => $strUser['userid'], +) ); + +$pageUrl = pagination ( $topicNum, 20, $page, $url ); + +$title = '我的帖å­'; +include template('my/topic'); \ No newline at end of file diff --git a/app/group/action/plugin.php b/app/group/action/plugin.php new file mode 100644 index 0000000..7cc6698 --- /dev/null +++ b/app/group/action/plugin.php @@ -0,0 +1,12 @@ +getOneGroup($groupid); + +if($strGroup['groupid'] == '') { + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; +} + +if($strGroup['isaudit'] == 1) { + tsNotice('å°ç»„审核中...'); +} + +$title = $strGroup['groupname']; + +//å°ç»„帖å­åˆ†ç±» +$arrTopicTypes = $new['group']->findAll('topic_type',array( + 'groupid'=>$groupid, +)); + +if(is_array($arrTopicTypes)){ + foreach($arrTopicTypes as $item){ + $arrTopicType[$item['typeid']] = $item; + } +} + +//ç»„é•¿ä¿¡æ¯ +$strLeader = aac('user')->getSimpleUser($strGroup['userid']); + +//判断会员是å¦åŠ å…¥è¯¥å°ç»„ +$isGroupUser = ''; +if(tsIntval($TS_USER['userid'])){ + $strUser = aac('user')->getSimpleUser(tsIntval($TS_USER['userid'])); + $isGroupUser = $new['group']->find('group_user',array( + 'userid'=>tsIntval($TS_USER['userid']), + 'groupid'=>$groupid, + )); +} + +//å°ç»„是å¦éœ€è¦å®¡æ ¸ +if($strGroup['isaudit']=='1'){ + //推èå°ç»„ + $arrRecommendGroup = $new['group']->getRecommendGroup('7'); + include template("group_isaudit"); + +}else{ + + $page = tsIntval($_GET['page'],1); + + $lstart = $page*30-30; + + if($typeid > 0){ + $andType = " and `typeid`='$typeid'"; + $url = tsUrl('group','show',array('id'=>$groupid,'typeid'=>$typeid,'page'=>'')); + }else{ + $andType = ''; + $url = tsUrl('group','show',array('id'=>$groupid,'page'=>'')); + } + + $arrTopics = $new['group']->findAll('topic',"`groupid`='$groupid' ".$andType." and `isaudit`='0'",'istop desc,uptime desc',null,$lstart.',30'); + + if( is_array($arrTopics)){ + foreach($arrTopics as $key=>$item){ + $arrTopic[] = $item; + $arrTopic[$key]['title'] = tsTitle($item['title']); + $arrTopic[$key]['gaiyao'] = tsTitle($item['gaiyao']); + $arrTopic[$key]['typename'] = $arrTopicType[$item['typeid']]['typename']; + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = aac('group')->getOneGroup($item['groupid']); + } + } + + $topicNum = $new['group']->findCount('topic',"`groupid`='$groupid' ".$andType); + + $pageUrl = pagination($topicNum, 30, $page, $url); + + + //是å¦å°ç»„会员 + $groupUser = $new['group']->findAll('group_user',array( + 'groupid'=>$groupid, + ),'addtime desc',null,8); + + if(is_array($groupUser)){ + foreach($groupUser as $item){ + $strUser = aac('user')->getSimpleUser($item['userid']); + if($strUser){ + $arrGroupUser[] = $strUser; + }else{ + $new['group']->delete('group_user',array( + 'userid'=>$item['userid'], + 'groupid'=>$groupid, + )); + } + } + } + + //å°ç»„管ç†å‘˜ + $arrGroupAdmin = $new['group']->findAll('group_user',array( + 'groupid'=>$groupid, + 'isadmin'=>1, + )); + $arrGroupAdminUser = array(); + if($arrGroupAdmin){ + foreach($arrGroupAdmin as $key=>$item){ + $arrGroupUserId[] = $item['userid']; + } + $groupUserIds = arr2str($arrGroupUserId); + $arrGroupAdminUser = $new['group']->findAll('user_info',"`userid` in ($groupUserIds)",'addtime desc','userid,username'); + } + + //标签 + $strGroup ['tags'] = aac ( 'tag' )->getObjTagByObjid ( 'group', 'groupid', $strGroup ['groupid'] ); + + + + if($page > 1){ + $title = $strGroup['groupname'].' - 第'.$page.'页'; + } + + //æŠŠæ ‡ç­¾ä½œä¸ºå…³é”®è¯ + if($strGroup['tags']){ + foreach($strGroup['tags'] as $key=>$item){ + $arrTag[] = $item['tagname']; + } + $sitekey = $strGroup['groupname'].','.arr2str($arrTag); + }else{ + $sitekey = $strGroup['groupname']; + } + + + $sitedesc = tsCutContent($strGroup['groupdesc'],50); + include template("show"); + +} \ No newline at end of file diff --git a/app/group/action/tag.php b/app/group/action/tag.php new file mode 100644 index 0000000..be3e902 --- /dev/null +++ b/app/group/action/tag.php @@ -0,0 +1,30 @@ +getTagByName(t($name)); + +$strTag['tagname'] = htmlspecialchars($strTag['tagname']); + +$tagid = $strTag['tagid']; + +//å°ç»„ +$arrGroupTagId = $new['group']->findAll('tag_group_index',array( + 'tagid'=>$tagid, +)); +if($arrGroupTagId){ + foreach($arrGroupTagId as $key=>$item){ + $arrGroup[] = $new['group']->getOneGroup($item['groupid']); + } +} + +//热门tag +$arrTag = $new['group']->findAll('tag',"`count_group`>0 and `isaudit`=0",'uptime desc',null,30); + +$sitekey = $strTag['tagname']; +$title = $strTag['tagname']; + +include template("tag"); \ No newline at end of file diff --git a/app/group/action/tags.php b/app/group/action/tags.php new file mode 100644 index 0000000..88f1932 --- /dev/null +++ b/app/group/action/tags.php @@ -0,0 +1,17 @@ +'')); + +$lstart = $page*200-200; + +$arrTag = $new['group']->findAll('tag',"`count_group`>'0' and `isaudit`=0",'uptime desc',null,$lstart.',200'); + +$tagNum = $new['group']->findCount('tag',"`count_group`>'0' and `isaudit`=0"); + +$pageUrl = pagination($tagNum, 200, $page, $url); + +$title = '标签'; +include template('tags'); \ No newline at end of file diff --git a/app/group/action/topic.php b/app/group/action/topic.php new file mode 100644 index 0000000..ab35efb --- /dev/null +++ b/app/group/action/topic.php @@ -0,0 +1,5 @@ +$topicid))); \ No newline at end of file diff --git a/app/group/action/topiccollect.php b/app/group/action/topiccollect.php new file mode 100644 index 0000000..e339517 --- /dev/null +++ b/app/group/action/topiccollect.php @@ -0,0 +1,28 @@ +fetch_all_assoc("select * from ".dbprefix."group_topic_collect where topicid='$topicid'"); + + if(is_array($arrCollectUser)){ + foreach($arrCollectUser as $item){ + $strUser = aac('user')->getSimpleUser($item['userid']); + $arrUser[] = $strUser; + } + } + + if($arrUser == ''){ + echo '

    还没有人喜欢,赶快æ¥åšç¬¬ä¸€ä¸ªå–œæ¬¢è€…å§^_^
    '; + }else{ + include template("topic_collect"); + } + + break; +} \ No newline at end of file diff --git a/app/group/action/topicedit.php b/app/group/action/topicedit.php new file mode 100644 index 0000000..5f3cb8e --- /dev/null +++ b/app/group/action/topicedit.php @@ -0,0 +1,152 @@ +isLogin(); + +//普通ä¸ç”¨ä¸å…许编辑内容 +if($TS_SITE['isallowedit'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户编辑内容,请è”系管ç†å‘˜ç¼–辑ï¼'); + +switch($ts){ + + //ç¼–è¾‘å¸–å­ + case "": + $topicid = intval($_GET['topicid']); + + if($topicid == 0){ + header("Location: ".SITE_URL); + exit; + } + + $topicNum = $new['group']->findCount('group_topic',array( + 'topicid'=>$topicid, + )); + + if($topicNum==0){ + header("Location: ".SITE_URL); + exit; + } + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + $strTopic['title'] = tsTitle($strTopic['title']); + $strTopic['content'] = tsDecode($strTopic['content']); + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + $strGroupUser = $new['group']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$strTopic['groupid'], + )); + + //print_r($strGroupUser);exit; + + if($strTopic['userid'] == $userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1 || $strGroupUser['isadmin']==1){ + $arrGroupType = $new['group']->findAll('group_topic_type',array( + 'groupid'=>$strGroup['groupid'], + )); + + //找出TAG + $arrTags = aac('tag')->getObjTagByObjid('topic', 'topicid', $topicid); + foreach($arrTags as $key=>$item){ + $arrTag[] = $item['tagname']; + } + $strTopic['tag'] = arr2str($arrTag); + + $title = '编辑帖å­'; + include template("topic_edit"); + + }else{ + + header("Location: ".SITE_URL); + exit; + + } + break; + + //ç¼–è¾‘å¸–å­æ‰§è¡Œ + case "do": + + + $authcode = strtolower ( $_POST ['authcode'] ); + + if ($TS_SITE['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + tsNotice ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ); + } + } + + $topicid = intval($_POST['topicid']); + $typeid = intval($_POST['typeid']); + + $title = trim($_POST['title']); + + //echo br2nl($_POST['content']);exit; + + $content = tsClean($_POST['content']); + $content2 = emptyText($_POST['content']); + + $iscomment = intval($_POST['iscomment']); + $iscommentshow = intval($_POST['iscommentshow']); + + if($topicid == '' || $title=='' || $content2=='') tsNotice("都ä¸èƒ½ä¸ºç©ºçš„哦!"); + + + if($TS_USER['isadmin']==0){ + + //过滤内容开始 + aac('system')->antiWord($title); + aac('system')->antiWord($content); + //è¿‡æ»¤å†…å®¹ç»“æŸ + + } + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + $strGroupUser = $new['group']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$strTopic['groupid'], + )); + + if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1 || $strGroupUser['isadmin']==1){ + $gaiyao = cututf8(t(tsDecode($content)),0,100); + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'typeid' => $typeid, + 'title'=>$title, + 'content'=>$content, + 'gaiyao'=>$gaiyao, + 'iscomment' => $iscomment, + 'iscommentshow' => $iscommentshow, + 'uptime' => time (), + )); + + + + //å¤„ç†æ ‡ç­¾ + $tag = trim($_POST['tag']); + if($tag){ + aac('tag')->delIndextag('topic','topicid',$topicid); + aac('tag') -> addTag('topic', 'topicid', $topicid, $tag); + } + + header("Location: ".tsUrl('group','topic',array('id'=>$topicid))); + + }else{ + header("Location: ".SITE_URL); + exit; + } + break; + +} diff --git a/app/group/action/topicmove.php b/app/group/action/topicmove.php new file mode 100644 index 0000000..e2e5aa9 --- /dev/null +++ b/app/group/action/topicmove.php @@ -0,0 +1,87 @@ +isLogin(); + +switch($ts){ + + //ç§»åŠ¨å¸–å­ + case "": + + $topicid = intval($_GET['topicid']); + + if($topicid == 0) tsNotice("éžæ³•æ“作ï¼"); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic){ + + $strGroup = $new['group']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1){ + + $arrGroups = $new['group']->findAll('group_user',array( + 'userid'=>$strTopic['userid'], + )); + foreach($arrGroups as $item){ + if($item['groupid'] != $strGroup['groupid']){ + + $arrGroup[] = $new['group']->find('group',array( + 'groupid'=>$item['groupid'], + )); + + } + + } + + $title = '移动帖å­'; + include template("topic_move"); + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + break; + + //执行移动 + case "do": + + $groupid = intval($_POST['groupid']); + $topicid = intval($_POST['topicid']); + + $strTopic = $new['group']->find('group_topic',array( + 'topicid'=>$topicid, + )); + + if($strTopicid['userid']==$userid || $TS_USER['isadmin']==1){ + + $new['group']->update('group_topic',array( + 'topicid'=>$topicid, + ),array( + 'groupid'=>$groupid, + 'typeid'=>'0', + )); + + + header("Location: ".tsUrl('group','topic',array('id'=>$topicid))); + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + + break; + +} \ No newline at end of file diff --git a/app/group/action/user.php b/app/group/action/user.php new file mode 100644 index 0000000..3b76ebf --- /dev/null +++ b/app/group/action/user.php @@ -0,0 +1,89 @@ +getOneGroup($groupid); + if($strGroup == '') { + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; + } + + //å°ç»„ç»„é•¿ä¿¡æ¯ + $leaderId = $strGroup['userid']; + + $strLeader = aac('user')->getSimpleUser($leaderId); + + //管ç†å‘˜ä¿¡æ¯ + + $strAdmin = $new['group']->findAll('group_user',array( + 'groupid'=>$strGroup['groupid'], + 'isadmin'=>'1', + 'isfounder'=>'0', + )); + + + if(is_array($strAdmin)){ + foreach($strAdmin as $key=>$item){ + $arrAdmin[] = aac('user')->getSimpleUser($item['userid']); + $arrAdmin[$key]['isadmin'] = $item['isadmin']; + } + } + + //å°ç»„会员分页 + + $page = tsIntval($_GET['page'],1); + + $url = tsUrl('group','user',array('id'=>$groupid,'page'=>'')); + + + $lstart = $page*40-40; + + //普通用户 + $groupUserNum = $new['group']->findCount('group_user',array( + + 'groupid'=>$groupid, + 'isadmin'=>0, + 'isfounder'=>0, + + )); + + $groupUser = $new['group']->findAll('group_user',array( + 'groupid'=>$strGroup['groupid'], + 'isadmin'=>'0', + 'isfounder'=>'0', + ),'userid desc',null,$lstart.',40'); + //print_r($groupUser); + + if(is_array($groupUser)){ + foreach($groupUser as $key=>$item){ + $arrGroupUser[] = aac('user')->getSimpleUser($item['userid']); + $arrGroupUser[$key]['isadmin'] = $item['isadmin']; + } + } + + $pageUrl = pagination($groupUserNum, 40, $page, $url); + + if($page > '1'){ + $titlepage = " - 第".$page."页"; + }else{ + $titlepage=''; + } + + $title = $strGroup['groupname'].'æˆå‘˜'.$titlepage; + + include template("user"); + + break; + +} \ No newline at end of file diff --git a/app/group/class.group.php b/app/group/class.group.php new file mode 100644 index 0000000..5943caa --- /dev/null +++ b/app/group/class.group.php @@ -0,0 +1,212 @@ +find('group',array( + 'groupid'=>$groupid, + )); + if($strGroup){ + $strGroup['groupname'] = tsTitle($strGroup['groupname']); + $strGroup['groupdesc'] = tsTitle($strGroup['groupdesc']); + $strGroup['photo'] = $this->getGroupPhoto($strGroup); + $strGroup['bgphoto'] = $this->getGroupBgPhoto($strGroup); + } + return $strGroup; + } + + /** + * 获å–å°ç»„å¤´åƒ + * + * @param [type] $strGroup + * @return void + */ + function getGroupPhoto($strGroup){ + if($strGroup['photo']){ + $strFace = tsXimg($strGroup['photo'],'group',200,200,$strGroup['path'],1); + + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + $strFace .= '&v='.$strGroup['uptime']; + }else{ + $strFace .= '?v='.$strGroup['uptime']; + } + + }else{ + $strFace = SITE_URL.'public/images/group.jpg'; + } + return $strFace; + } + + /** + * å°ç»„背景图 + * + * @param [type] $strGroup + * @return void + */ + function getGroupBgPhoto($strGroup){ + if($strGroup['bgphoto']){ + + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + $strPhoto = $GLOBALS['TS_SITE']['alioss_bucket_url'].'/uploadfile/group/bgphoto/'.$strGroup['bgphoto'].'?v='.$strGroup['uptime']; + }else{ + $strPhoto = SITE_URL.'uploadfile/group/bgphoto/'.$strGroup['bgphoto'].'?v='.$strGroup['uptime']; + } + + }else{ + $strPhoto = SITE_URL.'app/group/skin/group.jpg'; + } + return $strPhoto; + } + + /** + * 删除å°ç»„ + * + * @param [type] $strGroup + * @return void + */ + public function deleteGroup($strGroup){ + if($strGroup['photo']){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + deleteAliOssFile('uploadfile/group/'.$strGroup['photo']); + }else{ + unlink('uploadfile/group/'.$strGroup['photo']); + tsDimg($strGroup['photo'],'group','120','120',$strGroup['path']); + } + } + + $this->delete('group',array( + 'groupid'=>$strGroup['groupid'], + )); + + $this->delete('group_user',array( + 'groupid'=>$strGroup['groupid'], + )); + + return true; + + } + + /** + * èŽ·å–æŽ¨èçš„å°ç»„ + * + * @param integer $num + * @return void + */ + function getRecommendGroup($num=10){ + $arrGroup = $this->findAll('group',array( + 'isrecommend'=>1, + ),'orderid asc','groupid,groupname,groupdesc,path,photo,count_user',$num); + foreach($arrGroup as $key=>$item){ + $arrGroup[$key]['groupname'] = tsTitle($item['groupname']); + $arrGroup[$key]['groupdesc'] = tsTitle($item['groupdesc']); + $arrGroup[$key]['photo'] = $this->getGroupPhoto($item); + } + return $arrGroup; + } + + /** + * èŽ·å–æœ€æ–°åˆ›å»ºçš„å°ç»„ + * + * @param integer $num + * @return void + */ + function getNewGroup($num=10){ + $arrGroup = $this->findAll('group',array( + 'isaudit'=>0, + ),'addtime desc',null,$num); + foreach($arrGroup as $key=>$item){ + $arrGroup[$key]['groupname'] = tsTitle($item['groupname']); + $arrGroup[$key]['groupdesc'] = tsTitle($item['groupdesc']); + $arrGroup[$key]['photo'] = $this->getGroupPhoto($item); + } + return $arrGroup; + } + + + + //判断是å¦å­˜åœ¨å°ç»„ + function isGroup($groupid){ + $isGroup = $this->findCount('group',array( + 'groupid'=>$groupid, + )); + if($isGroup > 0){ + return true; + }else{ + return false; + } + } + + /* + * 是å¦å°ç»„组长 + */ + public function isGroupCreater($groupid,$userid){ + $isCreater = $this->findCount('group',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + + if($isCreater){ + return true; + }else{ + return false; + } + } + + /* + * 是å¦å°ç»„管ç†å‘˜ï¼Œä»…次于å°ç»„组长 + */ + public function isGroupAdmin($groupid,$userid){ + $isAdmin = $this->findCount('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, + 'isadmin'=>1, + )); + if($isAdmin){ + return true; + }else{ + return false; + } + } + + /* + * 是å¦å°ç»„æˆå‘˜ï¼Œè¢«ç»Ÿæ²»é˜¶çº§ + */ + public function isGroupUser($groupid,$userid){ + $countGroupUser = $this->findCount('group_user',array( + 'groupid'=>$groupid, + 'userid'=>$userid, + )); + if($countGroupUser){ + return true; + }else{ + return false; + } + } + + + + + //æžæž„函数 + public function __destruct(){ + + } + +} \ No newline at end of file diff --git a/app/group/config.php b/app/group/config.php new file mode 100644 index 0000000..7f991c7 --- /dev/null +++ b/app/group/config.php @@ -0,0 +1,6 @@ + + +
    + +
    +
    + + +
    +
    +
    + + {if $isGroupUser == '0'} + + {else} + +
    + +
    + + +
    + + {if $arrGroupType} +
    + + + + +
    + {/if} + + +
    + +
    {if $strDraft['content']}{php echo tsDecode($strDraft['content'])}{/if}
    +
    + +
    +
    + +
    + + +
    + +
    + + + å…许 ä¸å…许 + +
    + + +
    + + + ä¸éœ€è¦ éœ€è¦ + +
    + + + {if $TS_SITE['isauthcode']} +
    + + +
    + + 点击刷新验è¯ç  + +
    + + +
    + {/if} + + + + + + + + + 返回å°ç»„ + +

    + +
    + + + {/if} + +
    +
    +
    + + + +
    +
    + + + + + + + +
    +{php doAction('tseditor')} + + +{php include pubTemplate("footer")} diff --git a/app/group/html/admin/album_list.html b/app/group/html/admin/album_list.html new file mode 100644 index 0000000..eda1615 --- /dev/null +++ b/app/group/html/admin/album_list.html @@ -0,0 +1,27 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + +{loop $arrAlbum $key $item} + +{/loop} + + + +
    专辑IDå字介ç»è¯é¢˜æ•°æ“作
    {$item['albumid']}{$item['albumname']}{$item['albumdesc']}{$item['count_topic']}删除
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/cate_add.html b/app/group/html/admin/cate_add.html new file mode 100644 index 0000000..8326c8a --- /dev/null +++ b/app/group/html/admin/cate_add.html @@ -0,0 +1,21 @@ +{php include pubTemplate("header_admin")} + +
    +{php include template("admin/menu");} + +
    + + + + +
    分类å称:
    + + + + +
    +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/cate_edit.html b/app/group/html/admin/cate_edit.html new file mode 100644 index 0000000..cd52267 --- /dev/null +++ b/app/group/html/admin/cate_edit.html @@ -0,0 +1,32 @@ +{php include pubTemplate("header_admin")} + +
    +{php include template("admin/menu");} + +
    + + + + +{if $referid} + + + +{/if} + + +
    分类å称:
    上级分类: + +
    + + + +
    +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/cate_list.html b/app/group/html/admin/cate_list.html new file mode 100644 index 0000000..74ac783 --- /dev/null +++ b/app/group/html/admin/cate_list.html @@ -0,0 +1,58 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + + + + + + + + + + + +{loop $arrCatess $key $item} + + + + + + +{loop $item['two'] $tkey $titem} + + + + + +{loop $titem['three'] $ttkey $ttitem} + + + +{/loop} + +{/loop} + + +{/loop} + + + +
    分类ID分类åå­—æ“作
    {$item[cateid]}Iã€{$item[catename]} + +[添加二级分类] + +[修改] [删除]
    {$titem[cateid]}        IIã€{$titem[catename]} + +[添加三级分类] + +[修改] [删除]
    {$ttitem[cateid]}                IIIã€{$ttitem[catename]} + + + +[修改] [删除]
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/group_list.html b/app/group/html/admin/group_list.html new file mode 100644 index 0000000..6a120c7 --- /dev/null +++ b/app/group/html/admin/group_list.html @@ -0,0 +1,62 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + + + + + +{loop $arrAllGroup $key $item} + + + + + + + + + +{/loop} + + + +
    IDå°ç»„åå­—å°ç»„介ç»ç»Ÿè®¡åˆ›å»ºæ—¶é—´æ“作
    {$item[groupid]}[{tsTitle($item['groupname'])}]{php echo cututf8(t($item[groupdesc]),0,20)}取孿•°ï¼š{$item['count_topic']} +
    + æˆå‘˜æ•°ï¼š{$item['count_user']} +
    {php echo date('Y-m-d H:i:s',$item[addtime])} + + + + {if $item[isaudit]} + 审核 + {else} + å–æ¶ˆå®¡æ ¸ + {/if} + + + | {if $item[isrecommend]=='0'}[推è]{else}[å–æ¶ˆæŽ¨è]{/if} + + + + | [修改] + | [删除]
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/group_recommend.html b/app/group/html/admin/group_recommend.html new file mode 100644 index 0000000..cea4c72 --- /dev/null +++ b/app/group/html/admin/group_recommend.html @@ -0,0 +1,74 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + +
    + + + + + + + + + + + + + + + + + + + +{loop $arrGroup $key $item} + + + + + + + + + +{/loop} + + + +
    IDå°ç»„å字排åºID(从å°åˆ°å¤§)æ“作
    {$item[groupid]}[{tsTitle($item['groupname'])}] + + + + + + + + + {if $item[isrecommend]=='0'}[推è]{else}[å–æ¶ˆæŽ¨è]{/if} + + +
    + + + +
    + +
    + + + +
    + + +
    + + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/menu.html b/app/group/html/admin/menu.html new file mode 100644 index 0000000..a35518d --- /dev/null +++ b/app/group/html/admin/menu.html @@ -0,0 +1,18 @@ + +
    \ No newline at end of file diff --git a/app/group/html/admin/options.html b/app/group/html/admin/options.html new file mode 100644 index 0000000..b4c3596 --- /dev/null +++ b/app/group/html/admin/options.html @@ -0,0 +1,46 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    APPå称:
    APP介ç»ï¼š
    APP关键è¯ï¼š
    是å¦å…许用户创建å°ç»„ :å…许 ä¸å…许(åªæœ‰ç®¡ç†å‘˜å¯ä»¥åˆ›å»ºå°ç»„)
    创建å°ç»„是å¦éœ€è¦å®¡æ ¸ :审核 ä¸å®¡æ ¸
    æ¯ä¸ªä¼šå‘˜åŠ å…¥å°ç»„æ•° : (创建和加入的总和)
    是å¦å¼€å¯åŠ å…¥å°ç»„付费功能 : + + ä¸å¼€å¯ + å¼€å¯ (å¼€å¯éœ€è¦å®‰è£…支付模å—) + +
    + +
    +
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/permissions.html b/app/group/html/admin/permissions.html new file mode 100644 index 0000000..e20a5fa --- /dev/null +++ b/app/group/html/admin/permissions.html @@ -0,0 +1,148 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + + + +
    + {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
    + + +
    + + +
    å‰å°æƒé™
    + + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + + + + + + + + + + + {/if} + + + + +
    查看å°ç»„: + +
    创建å°ç»„: + +
    修改å°ç»„: + +
    删除å°ç»„: + +
    + + + + {if $ugid==1 || $ugid==2} +
    åŽå°æƒé™
    + + + + + + + + + + + + + + + + + + + + +
    å°ç»„é…置: + +
    æƒé™é…置: + +
    添加分类: + +
    修改分类: + +
    + {/if} + + + +
    APIæƒé™
    + + + + + + + + + + + +
    查看å°ç»„: + +
    + + + + + + +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/topic_delete.html b/app/group/html/admin/topic_delete.html new file mode 100644 index 0000000..79483ff --- /dev/null +++ b/app/group/html/admin/topic_delete.html @@ -0,0 +1,37 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + +{loop $arrTopic $key $item} + + + + + + +{/loop} + +
    IDUserID标题时间æ“作
    {$item['topicid']}{$item['userid']} + + {$item['title']}{php echo date('Y-m-d H:i:s',$item['addtime'])} + +删除 + +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/topic_edit.html b/app/group/html/admin/topic_edit.html new file mode 100644 index 0000000..8e92f8a --- /dev/null +++ b/app/group/html/admin/topic_edit.html @@ -0,0 +1,45 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + + + + + + + + + {loop $arrTopic $key $item} + + + {/loop} + + + + + + + +
    IDæ ‡é¢˜æ—¶é—´çŠ¶æ€æ“作
    {$item['topicid']}{$item['title']}{$item['addtime']}{if $item['isupdate']==1}已更新{else}未更新{/if} + 更新 +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/topic_edit_view.html b/app/group/html/admin/topic_edit_view.html new file mode 100644 index 0000000..902232b --- /dev/null +++ b/app/group/html/admin/topic_edit_view.html @@ -0,0 +1,18 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + + + +
    +

    {$strTopic['title']}

    +
    {$strTopic['content']}
    +
    +
    {$strTopic['addtime']}
    +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/admin/topic_list.html b/app/group/html/admin/topic_list.html new file mode 100644 index 0000000..b30dba7 --- /dev/null +++ b/app/group/html/admin/topic_list.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + +{loop $arrTopic $key $item} + +{/loop} + + + +
    IDUserID标题时间æ“作
    {$item['topicid']}{$item['userid']}{tsTitle($item['title'])}{php echo date('Y-m-d H:i:s',$item['addtime'])} + + +{if $item['isaudit']==0} +已审核 +{else} +未审核 +{/if} + + +删除 + +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/group/html/ajax_topic.html b/app/group/html/ajax_topic.html new file mode 100644 index 0000000..621e0d6 --- /dev/null +++ b/app/group/html/ajax_topic.html @@ -0,0 +1,45 @@ +{loop $arrTopic $key $item} +
  • +
    +{$item[user]['username']} +
    + +
    +
    +{if $item['appkey'] != 'group' && $item['appkey']!=''} +[{$item['appname']}] +{$item[title]} +{else} +{$item[title]} +{/if} + +{if $item[istop]=='1'} +[置顶] +{/if} +{if $item[isposts] == '1'} +[ç²¾åŽ] +{/if} +{if $item['postby']==1} +通过Iphone手机端å‘布 + +{/if} + +
    + +
    + +{$item[group][groupname]} + + + +{php echo getTime($item[uptime],time())} + +{$item[user][username]} + +{if $item[count_comment]>0}{$item[count_comment]}{/if} + +
    +
    +
    +
  • +{/loop} \ No newline at end of file diff --git a/app/group/html/audit.html b/app/group/html/audit.html new file mode 100644 index 0000000..e7ccda3 --- /dev/null +++ b/app/group/html/audit.html @@ -0,0 +1,84 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    + +
    + +
    审核帖å­
    + +
    + + + + + + + + + + + + + + + + + + + +{loop $arrTopic $key $item} + + + + + + + + + +{/loop} + + +
    取孿 ‡é¢˜ç”¨æˆ·IDæ—¶é—´æ“作
    {$item['title']}{$item['userid']}{php echo date('Y-m-d H:i:s',$item['addtime'])} + +审核 | +删除 + + +
    + +
    +
    + +
    + + + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/create.html b/app/group/html/create.html new file mode 100644 index 0000000..78b32ea --- /dev/null +++ b/app/group/html/create.html @@ -0,0 +1,59 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    +
    + +
    + + +
    + + + +
    +
    +
    +
    + + +
    +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_base.html b/app/group/html/edit_base.html new file mode 100644 index 0000000..e446839 --- /dev/null +++ b/app/group/html/edit_base.html @@ -0,0 +1,115 @@ +{php include pubTemplate("header")} +
    + + + + + +
    +
    + +{template edit_xbar} + + + + + +
    + + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    + (多个请用英文,å·åˆ†å‰²) +
    +
    + + +
    + +
    + 自由加入(开放å°ç»„) +
    ç¦æ­¢åŠ å…¥(ç§å¯†å°ç»„) +
    申请加入(需è¦å®¡æ ¸) + + {if $TS_APP['ispayjoin']==1} +
    付费加入 éœ€è¦ é‡‘å¸ + {/if} + +
    +
    + +
    + +
    + ä»…å…许æˆå‘˜å‘帖 + ä¸å…许æˆå‘˜å’Œéžæˆå‘˜å‘帖 + å…许æˆå‘˜å’Œéžæˆå‘˜å‘帖 +
    +
    + + +
    + +
    + 完全开放 仅组员 +
    +
    + +
    + +
    +审核 ä¸å®¡æ ¸ +
    +
    + + + +
    +
    + +
    + + + + + + + 返回å°ç»„ +
    +
    +
    + + + + + + + +
    +
    + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_cate.html b/app/group/html/edit_cate.html new file mode 100644 index 0000000..6fe52f6 --- /dev/null +++ b/app/group/html/edit_cate.html @@ -0,0 +1,127 @@ +{php include pubTemplate("header")} + + + +
    + + + +
    +
    +{template edit_xbar} + + + +
    +
    + + +
    + + + + + + +
    + + + + + 返回å°ç»„ +
    + + +
    +{if $strCate} +一级:{$strCate['catename']} + +{/if} +{if $strCate2} +二级:{$strCate2['catename']} + +{/if} +{if $strCate3} +三级:{$strCate3['catename']} + +{/if} +
    + + +
    +
    +
    + + + + + + + + +
    +
    + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_icon.html b/app/group/html/edit_icon.html new file mode 100644 index 0000000..73a0495 --- /dev/null +++ b/app/group/html/edit_icon.html @@ -0,0 +1,87 @@ +{php include pubTemplate("header")} + +
    + + + +
    +
    + +{template edit_xbar} + + +
    +
    + + +
    + + + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + + + +
    + +
    + +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + +
    +
    + + + 返回å°ç»„ +
    +
    + + +
    + + +
    +
    +
    + + + + +
    +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_isadmin.html b/app/group/html/edit_isadmin.html new file mode 100644 index 0000000..daa4679 --- /dev/null +++ b/app/group/html/edit_isadmin.html @@ -0,0 +1,66 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + + {template edit_xbar} + + +
    +
    +
    +
    + +
    + +
    + + + +
    + + + + + + + + + + + {loop $arrAdminUser $key $item} + + + + + + {/loop} + + +
    IDç”¨æˆ·åæ“ä½œ
    {$item['userid']}{$item['username']}å–æ¶ˆ
    + + +
    +
    +
    + + +
    +
    + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_transfer.html b/app/group/html/edit_transfer.html new file mode 100644 index 0000000..e3b7107 --- /dev/null +++ b/app/group/html/edit_transfer.html @@ -0,0 +1,48 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + + {template edit_xbar} + + +
    + +
    + +
    + +
    +
    + + +
    +
    + +
    +
    + +
    + + + + +
    +
    + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_type.html b/app/group/html/edit_type.html new file mode 100644 index 0000000..040ce2b --- /dev/null +++ b/app/group/html/edit_type.html @@ -0,0 +1,81 @@ +{php include pubTemplate("header")} + +
    + + + +
    +
    +{template edit_xbar} + + +
    +
    + + + +
    + + + + + + + + + 返回å°ç»„ + +
    + + + + + + + + + + + +{loop $arrGroupType $key $item} + + + + + + +{/loop} + +
    类型æ“作
    + + + + + + + + + + + + 删除
    + + +
    +
    +
    + + + +
    +
    + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_user.html b/app/group/html/edit_user.html new file mode 100644 index 0000000..3797834 --- /dev/null +++ b/app/group/html/edit_user.html @@ -0,0 +1,91 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + + {template edit_xbar} + + +
    +
    +
    + + +
    + + + + + + +
    + +
    + + + +
    + + +
    + * 有效期等于0000-00-00 或者 1970-01-01 å³ä¸ºæ°¸ä¹… +
    + + + + + + + + + {loop $arrGroupUser $key $item} + + {/loop} + + +
    用户IDç”¨æˆ·åæœ‰æ•ˆæœŸæ“作
    {$item['userid']}{$item['username']}{$item['endtime']} + + {if $TS_APP['ispayjoin']==1 && $strGroup['joinway']==3}续期 | {/if} + 清退 + +
    + + +
    {$pageUrl}
    + + +
    +
    +
    + + +
    +
    + +
    + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_useraudit.html b/app/group/html/edit_useraudit.html new file mode 100644 index 0000000..29e83f2 --- /dev/null +++ b/app/group/html/edit_useraudit.html @@ -0,0 +1,46 @@ +{php include pubTemplate("header")} + + +
    + + + + + + + +
    +
    + +{template edit_xbar} + + + + + + + + + + + {loop $arrUser $key $item} + + {/loop} + + + +
    申请用户æ“作
    {$item['username']}通过 | 删除
    + +
    +
    + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/edit_xbar.html b/app/group/html/edit_xbar.html new file mode 100644 index 0000000..7b942ce --- /dev/null +++ b/app/group/html/edit_xbar.html @@ -0,0 +1,20 @@ + + + + +
    \ No newline at end of file diff --git a/app/group/html/group_ajax.html b/app/group/html/group_ajax.html new file mode 100644 index 0000000..061b0b1 --- /dev/null +++ b/app/group/html/group_ajax.html @@ -0,0 +1,49 @@ +
    + + +
    + +
    +
    + +{$item[groupname]} + +
    + +{if in_array($item['groupid'],$myGroup)} +已加入 +{else} ++加入 +{/if} + +
    +
    +
    +{$item[groupname]} {$item[count_user]}人加入 +

    {$item[groupdesc]}

    +
    +
    + +
    +
    + +
    + + +
    该分类下没有å°ç»„
    +
    点击查看更多>>
    + + \ No newline at end of file diff --git a/app/group/html/group_ajax_more.html b/app/group/html/group_ajax_more.html new file mode 100644 index 0000000..6da99f7 --- /dev/null +++ b/app/group/html/group_ajax_more.html @@ -0,0 +1,26 @@ + +
    +
    + +{$item[groupname]} + +
    + +{if in_array($item['groupid'],$myGroup)} +已加入 +{else} ++加入 +{/if} + +
    +
    +
    +{$item[groupname]} {$item[count_user]}人加入 +

    {$item[groupdesc]}

    +
    +
    + + \ No newline at end of file diff --git a/app/group/html/group_isopen.html b/app/group/html/group_isopen.html new file mode 100644 index 0000000..7c6321d --- /dev/null +++ b/app/group/html/group_isopen.html @@ -0,0 +1,37 @@ +{php include pubTemplate("header")} +
    + + + + + + + +
    +
    + + + +
    + +

    本å°ç»„åªæœ‰å°ç»„æˆå‘˜æ‰å¯ä»¥æµè§ˆ^_^

    + + 加入å°ç»„ + +
    + + + +
    +
    + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/index.html b/app/group/html/index.html new file mode 100644 index 0000000..b8c94e2 --- /dev/null +++ b/app/group/html/index.html @@ -0,0 +1,101 @@ +{php include pubTemplate("header")} +
    + + + + + + + + +
    + +
    + + + +
    +
    + + +
    + 全部 + {loop $arrGroupCate $key $item} + {$item['catename']} + {/loop} + +
    + + +
    + + +
    + {loop $arrGroup $key $item} +
    + +
    +
    + + {$item[groupname]} + + +
    +
    + {$item[groupname]} + {$item[count_user]}人加入 +

    {$item[groupdesc]}

    +
    +
    + +
    + {/loop} +
    + + + + +
    {$pageUrl}
    + + + + +
    +
    +
    + +
    + + + +
    +
    最新创建å°ç»„
    +
    +
    +
      + {loop $arrNewGroup $key $item} +
    • + {$item[groupname]} ({$item[count_user]}æˆå‘˜) +
    • + {/loop} +
    +
    + +
    +
    + + +{php doAction('gobad','300')} + +
    +
    +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/my/index.html b/app/group/html/my/index.html new file mode 100644 index 0000000..aca942f --- /dev/null +++ b/app/group/html/my/index.html @@ -0,0 +1,89 @@ +{php include pubTemplate("header")} +
    + + + +
    + + +
    + +
    + + {php include pubTemplate("my")} + +
    + +
    +
    + + + +
    +
    创建的å°ç»„
    +
    + + + + +
    + + {loop $arrCreateGroup $key $item} +
    +
    + +
    +
    {$item['groupname']}
    +
    +
    +
    + {/loop} + + +
    + + + + + +
    +
    + + + +
    +
    加入的å°ç»„
    +
    +
    + + + + + {loop $arrGroup $key $item} +
    +
    + {$item['groupname']} +
    +
    {php echo cututf8($item['groupname'],0,6,false)}
    +
    +
    +
    + {/loop} + +
    +
    +
    + + + + + + +
    +
    + + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/my/topic.html b/app/group/html/my/topic.html new file mode 100644 index 0000000..3213ce0 --- /dev/null +++ b/app/group/html/my/topic.html @@ -0,0 +1,60 @@ +{php include pubTemplate("header")} +
    + + + +
    + + +
    + +
    + + {php include pubTemplate("my")} + +
    + +
    +
    + + + +
    +
    我å‘布的帖å­
    +
    + + + + + + + + + + + {loop $arrTopic $key $item} + + {/loop} + +
    å‘布时间标题æµè§ˆ/评论æ“作
    {php echo date('Y-m-d',$item['addtime'])}{php echo tsTitle($item['title'])}{$item['count_view']}/{$item['count_comment']}修改
    + + + + +
    +
    + + + + + + + +
    +
    + + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/show.html b/app/group/html/show.html new file mode 100644 index 0000000..14fddcb --- /dev/null +++ b/app/group/html/show.html @@ -0,0 +1,285 @@ +{php include pubTemplate("header")} +
    + + + + + + + + + + +
    + + + +
    + + + +
    + +
    + + + +
    + {$strGroup['groupname']} +
    +

    {$strGroup['groupname']}

    +
    + + {$strGroup['count_topic']} å¸–å­ + {$strGroup['count_user']} æˆå‘˜ + +
    + +
    + + 创建于 {php echo date('Y-m-d',$strGroup[addtime])} + + 组长:{$strLeader['username']} + {if $arrGroupAdminUser} + 管ç†å‘˜ï¼š + {loop $arrGroupAdminUser $key $item} + {$item['username']} + {/loop} + {/if} +
    + +
    +
    + + + +
    +
    + + + +
    + {if $isGroupUser > 0 && $TS_USER['userid'] != $strGroup['userid']} + 我是这个å°ç»„çš„{$strGroup['role_user']} 退出å°ç»„ + {elseif $isGroupUser > 0 && $TS_USER['userid'] == $strGroup['userid']} + 我是这个å°ç»„çš„{$strGroup['role_leader']} + {elseif $strGroup['joinway'] == '0'} + 加入å°ç»„ + {elseif $strGroup['joinway'] == '2'} + 申请加入å°ç»„ + + {elseif $strGroup['joinway']==3} + + éœ€è¦æ”¯ä»˜{$strGroup['price']}金å¸åŠ å…¥å°ç»„ + + {else} + 本å°ç»„ç¦æ­¢åŠ å…¥ + {/if} +
    + + + +
    + +
    + + +
    + + + + +
    + +
    {php echo nl2br($strGroup['groupdesc'])}
    + + {if $strGroup ['tags']} +
    + {loop $strGroup['tags'] $key $item} + {$item['tagname']} + {/loop} +
    + {/if} + +
    +
    + + + + + + +
    + +
    + + + + + {if $strGroup['isopen']==1 && $isGroupUser==''} + +
    你需è¦åŠ å…¥å°ç»„åŽæ‰å¯ä»¥è®¿é—®å¸–å­å†…容
    + + {elseif $strGroup['isopen']==1 && $isGroupUser && $TS_APP['ispayjoin']==1 && $isGroupUser['endtime']!='0000-00-00' && $isGroupUser['endtime']!='1970-01-01' && $isGroupUser['endtime']你的组费已ç»åˆ°æœŸï¼Œè¯·è”系组长续期ï¼ç»­æœŸåŽæ‰å¯ä»¥è®¿é—®å¸–å­å†…容。
    + {else} + +
    +
    + + + + + +
    + 全部 + {loop $arrTopicType $key $item} + {$item['typename']} + {/loop} +
    + + +
    + + + + + + +
    +
      + +{loop $arrTopic $key $item} +
    • +
      + + {$item['user']['username']} + +
      + +
      +
      + +{if $item['label']}{tsTitle($item['label'])}{/if} + +{if $item['typeid'] != 0}[{$item['typename']}]{/if} + + +{$item['title']} + + +{if $item['istop']=='1'} +[置顶] +{/if} + +{if $item['isposts'] == '1'} +[ç²¾åŽ] +{/if} + + +
      + + + {if $item['group']['isopen']==0 && $item['score']==0 && $item['iscommentshow']==0} +
      + {$item['gaiyao']} +
      + {if $item['photos']} +
      + {loop $item['photos'] $pkey $pitem} + + {/loop} +
      + {/if} + {/if} + + +
      +
      + {$item['user']['username']} + å‘表于 + {php echo getTime($item['uptime'],time())} +
      +
      +
      {$item['count_comment']}
      +
      {$item['count_view']}
      +
      +
      + + + +
      +
      +
    • +{/loop} + +
    +
    + + +
    {$pageUrl}
    + + +
    + + +
    + + {/if} + + + +
    + + +
    + + +
    +
    æˆå‘˜ 更多
    +
    + + + +
    + {loop $arrGroupUser $key $item} + + {/loop} +
    + + +
    +
    + + + + + {if $TS_USER['userid'] == $strGroup['userid'] || $TS_USER['isadmin']=='1'} + + {/if} + +
    + +{php doAction('gobad','300')} + + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/tag.html b/app/group/html/tag.html new file mode 100644 index 0000000..78c6bce --- /dev/null +++ b/app/group/html/tag.html @@ -0,0 +1,67 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    + +
    +
    +
    +

    {$strTag[tagname]}

    +
    +
    + + +
    +
    {$strTag[tagname]}相关的å°ç»„
    +
    + +
    + +
    +
    +
    + + + + +
    + +
    + +
    +
    热门标签
    +
    + {loop $arrTag $key $item} + {$item[tagname]} + {/loop} + 更多... +
    +
    + +
    + + {php doAction('gobad','300')} + +
    +
    +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/tags.html b/app/group/html/tags.html new file mode 100644 index 0000000..9a47ebf --- /dev/null +++ b/app/group/html/tags.html @@ -0,0 +1,36 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    全部标签
    +
    + +
    + {loop $arrTag $key $item} + {$item[tagname]} + {/loop} + +
    + +
    {$pageUrl}
    +
    +
    + + + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/topic.html b/app/group/html/topic.html new file mode 100644 index 0000000..78abf71 --- /dev/null +++ b/app/group/html/topic.html @@ -0,0 +1,505 @@ +{php include pubTemplate("header")} + + + +
    {php doAction('group_topic_top')}
    + + +
    + + + + +
    + +
    + + + +
    +
    + + +

    {if $strTopic['label']}{tsTitle($strTopic['label'])}{/if}{if $strTopic[typeid] !='0'}[{$strTopic[type][typename]}]{/if}{$strTopic[title]}

    + + +
    + + {$strTopic[user][username]} +
    + +
    å‘表于 {php echo date('Y-m-d H:i:s',$strTopic[addtime])}
    +
    +
    {$strTopic['count_comment']}
    +
    {$strTopic['count_view']}
    +
    + {if $TS_USER[userid] == $strTopic[userid] || $TS_USER[userid]==$strGroup[userid] ||$strGroupUser[isadmin]=="1" || $TS_USER[isadmin]=="1"} + + {/if} +
    +
    + + + +
    + {loop $strTopic[tags] $key $item} + {$item[tagname]} + {/loop} +
    + + + {if $page == '1'} +
    + +
    + {$strTopic['content']} + {if $strTopic['photos']} + {loop $strTopic['photos'] $key $item} +

    {$strTopic['title']}

    + {/loop} + {/if} + {$tpUrl} +
    + + + + + + {if $strTopic['iscommentshow']==1 && $isComment==0 && $strTopic['userid']!=intval($TS_USER['userid'])} + {else} + + + {if $TS_APP['istopicvideo']} + + {if $arrVideo} +
    + {loop $arrVideo $key $item} +

    + {if $item['siteid']==1 || $item['siteid']==2 || $item['siteid']==3} + + {/if} +

    + {/loop} + +
    + {/if} + + + {if $TS_USER['userid']==$strTopic['userid'] || $TS_USER['isadmin']==1} + + {/if} + + + {/if} + + + + + + + {if $TS_APP['istopicattach']} + + {if $arrAttach} +
    +
      + {loop $arrAttach $key $item} +
    • {tsTitle($item['attachname'])} - {$item['count_down']}次下载 - 需{$item['score']}积分
    • + {/loop} +
    + + {if $TS_USER['userid']==$strTopic['userid'] || $TS_USER['isadmin']==1} + + {/if} + +
    + + {else} + + {if $TS_USER['userid']==$strTopic['userid'] || $TS_USER['isadmin']==1} + + {/if} + + {/if} + + {/if} + + {/if} +
    {php doAction('group_topic_footer')}
    + + +
    {php doAction('gobad','468') + }
    +
    最åŽä¿®æ”¹ {php echo date('Y-m-d H:i:s',$strTopic[uptime])}
    +
    +
    {$strTopic['count_comment']}
    +
    {$strTopic['count_view']}
    +
    + {if $TS_USER[userid] == $strTopic[userid] || $TS_USER[userid]==$strGroup[userid] ||$strGroupUser[isadmin]=="1" || $TS_USER[isadmin]=="1"} + + {/if} + +
    + + + {/if} +
    +
    + + + +
    +
    用户评论{if $strTopic['count_comment']} ({$strTopic['count_comment']}){/if}
    +
    + + + {if $arrTopicComment} +
    +
      + {loop $arrTopicComment $key $item} + + +
    • +
      + {$item[user][username]} +
      + + + + + +
      +

      {php echo date('Y-m-d H:i:s',$item[addtime])} + {$item[user][username]} + $item[l]# +

      + + + {if $item[referid] !='0'} +
      {$item[recomment][user][username]}:{$item[recomment][content]}
      + {/if} + + + +

      + {if $item['ispublic'] && $item['userid']==$TS_USER['userid'] || $item['ispublic'] && $strTopic['userid']==$TS_USER['userid']} + {$item[content]} + {elseif $item['ispublic'] && $item['userid']!=$TS_USER['userid'] || $item['ispublic'] && $strTopic['userid']!=$TS_USER['userid']} +

      + {else} + {$item[content]} + {/if} +

      + + + + + + + {if $TS_APP['istopicattach']} + {if $item['attach']} +
      +
        + {loop $item['attach'] $akey $aitem} +
      • {tsTitle($aitem['attachname'])} - {$aitem['count_down']}次下载 - 需{$aitem['score']}积分
      • + {/loop} +
      +
      + {/if} + {/if} + + + + + + + +
      + + {if $strGroupUser} + å›žå¤ + {/if} + + {if $TS_USER[userid] == $strGroup[userid] || $TS_USER[userid] == $item[userid] || $strGroupUser[isadmin]==1 || $TS_USER[isadmin]==1} + 删除 + + {/if} +
      + + + +
      +
      + + + + +
    • + + + + {/loop} + +
    +
    +
    {$pageUrl}
    + {/if} + + + + + +
    + {if intval($TS_USER[userid])==0} + + {elseif $strGroupUser==''} +
    + 䏿˜¯æœ¬ç»„æˆå‘˜ä¸èƒ½å›žåº”æ­¤è´´å“¦ï¼ +

    加入å°ç»„

    + +
    + {elseif $strTopic[iscomment] == 1 && $strTopic[userid] != $TS_USER[userid]} +
    + 本帖除作者外ä¸å…许任何人评论 +
    + {elseif $strTopic[isclose]=='1'} +
    + 该帖å­å·²è¢«å…³é—­ï¼Œæ— æ³•评论 +
    + {else} +
    + +
    + +
    + + + + +
    + + + + +
    + {if $TS_SITE['isauthcode']} + + 点击刷新验è¯ç  + {/if} + + +
    + + +
    + +
    是å¦å…¬å¼€ï¼šå…¬å¼€ ä¸å…¬å¼€
    + + +
    + + +
    + + + + + + + +
    + +
    + + + +
    + {/if} +
    + +
    +
    + + + + +
    +
    + +
    +
    推è帖å­
    +
    + +
    + +
    + +
    +
    + +
    +
    + + +
    +
    本组热门帖å­
    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    最新帖å­
    +
    + +
    +
    +
    +
    +
    +
    +
    热门帖å­
    +
    + +
    + +
    +
    +
    +
    + + +
    + + + +
    +
    + + + + + + + + +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} diff --git a/app/group/html/topic_collect.html b/app/group/html/topic_collect.html new file mode 100644 index 0000000..009cb23 --- /dev/null +++ b/app/group/html/topic_collect.html @@ -0,0 +1,6 @@ +
    +{loop $arrUser $key $item} +{$item[username]} +{/loop} +
    +
    \ No newline at end of file diff --git a/app/group/html/topic_edit.html b/app/group/html/topic_edit.html new file mode 100644 index 0000000..04bbc2f --- /dev/null +++ b/app/group/html/topic_edit.html @@ -0,0 +1,117 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + +
    +
    +
    + + + +
    + + +
    + + +
    + +{if $arrGroupType} +
    + + + + +
    +{/if} + + +
    + + +
    {$strTopic['content']}
    + +
    + +
    + +
    + +
    + + +
    + +
    + + +å…许 +ä¸å…许 + +
    + + +
    + + +ä¸éœ€è¦ +éœ€è¦ + +
    + +{if $TS_SITE['isauthcode']} +
    + + + + 点击刷新验è¯ç  + +
    +{/if} + + + + + + + 返回 +

    + +
    + + + +
    +
    +
    + + +
    +
    + + + +
    +{php doAction('tseditor')} +{php include pubTemplate("footer")} diff --git a/app/group/html/topic_isopen.html b/app/group/html/topic_isopen.html new file mode 100644 index 0000000..f3f29d9 --- /dev/null +++ b/app/group/html/topic_isopen.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header")} + +
    + + + + + + + +
    +
    + + + +
    + + 本å°ç»„帖å­åªæœ‰å°ç»„æˆå‘˜æ‰å¯ä»¥æµè§ˆ + + {if $strGroup['joinway']==3} + éœ€è¦æ”¯ä»˜{$strGroup['price']}金å¸åŠ å…¥å°ç»„ + {else} + 加入å°ç»„ + {/if} +
    + + + +
    +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/topic_move.html b/app/group/html/topic_move.html new file mode 100644 index 0000000..daa366d --- /dev/null +++ b/app/group/html/topic_move.html @@ -0,0 +1,30 @@ +{php include pubTemplate("header")} + +
    + +
    +
    +

    移动帖å­ï¼š{tsTitle($strTopic['title'])}

    +
    +

    选择å°ç»„: + +

    +

    + + + + + 返回 + +

    +
    + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/topic_xuqi.html b/app/group/html/topic_xuqi.html new file mode 100644 index 0000000..fa698fc --- /dev/null +++ b/app/group/html/topic_xuqi.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header")} + +
    + + + + + + + +
    +
    + + + +
    + 你的组费已ç»åˆ°æœŸï¼Œè¯·è”系组长续期ï¼ç»­æœŸåŽæ‰å¯ä»¥è®¿é—®å¸–å­å†…容。 +
    + + + +
    +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/html/user.html b/app/group/html/user.html new file mode 100644 index 0000000..f49d394 --- /dev/null +++ b/app/group/html/user.html @@ -0,0 +1,134 @@ +{php include pubTemplate("header")} + +
    + + + + +
    + +
    + + + +
    +
    {$strGroup['groupname']}æˆå‘˜
    +
    + + + +{if $TS_USER['isadmin']==1 && $strGroup['joinway']==3 || $strGroup['userid']==$userid && $strGroup['joinway']==3} +
    +
    +
    + +
    + +
    +
    +{/if} + + +
    + +
      +{loop $arrGroupUser $key $item} +
    • + + {$item[username]} + +
      {$item[username]}
      + +
    • +{/loop} +
    + +
    + + +
    +
    {$pageUrl}
    + + +
    +
    + + + +
    + + +
    + + +
    +
    {$strGroup['groupname']}组长
    +
    + + + +
    +
      + +
    • + + {$strLeader[username]} +
      {$strLeader[username]}
      +
    • + +
    +
    + + + + +
    +
    + + + + + +
    +
    {$strGroup['groupname']}管ç†å‘˜
    +
    + +{if $arrAdmin} +
    +
      + {loop $arrAdmin $key $item} +
    • + {$item[username]} +
      {$item[username]}
      +
    • + {/loop} +
    +
    + + {else} + 暂无 + {/if} + +
    +
    + + + + +
    + + {php doAction('gobad','300')} + + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/group/icon.png b/app/group/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bedb4ddca2641be4e7a8ebd1494cb33f855e9aae GIT binary patch literal 3424 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\yzXsl{B*pYR=gHR=L?Pa9W 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,wXCEx$cnXw*-5I| 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\yzXsl{B*pYR=gHR=L?Pa9W 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,wXCEx$cnXw*-5I| zpEW}_#M1}LPJb5XX%Y;HivcnxQVH=Ne5B{eo2^bKFKk}l6rNr$PN+{!P%|>wF%fi7 zF%_$swODVM3Y=<4QSs{Wuf5DRn07-MdozeCEs~?y_G?DWWe$NYJiQ)CZ{hx8Guw=L zrnR|}!&;tIGsDCcB*80GE$t7`D>;hr*avOIQ^oyjNREY1s7p097I1vZ=Jw7N*MK|m zZ_*7R=TN>*3AY0EnOg+#TG3`bClS&3#E~Ve+iwf4r7TIc180kEQ+!IbW#o?P#eLT4 zZ?2U~3GkGkMahv!o|+%?gHL$MYM7&p@@?KH$9Kx~xo)=xxvoVX8ZmW23&~Gm2YU~X zXaYR;o(~Xe*`bbr*m{?`nvpx}{dlbB?R|VHOBXfN)Pcz^t&3WUHe@#^!TGXjfJm<- zI8)X-y(Ymg^-RGjDU4cy>Mmq~a3N1k2SbW=msMIFufMyNnLJc@!_GVXZqfOvth6q_ z-I50XQLzHI9|sZY;xBZ>YD9k02jn&Ve5w9sr~Ag)2MgECHl;GTj|k2qg{KUBnvlC9I7j^eDJN1Sdl%pKtq`ZlPl(MPmZ6COx-AIXgIALV~+ zn!GAu%faG;Z+x`F&d8{}$w~M;WR2-@{IY2iUAgKOBG>7K*^6{GiCq@ZLYSUDmp+LZ z>J8GWsx*R6Af>yA4i00Wl?~GcI;GyV}`NJ7Dv$2x_A9>xCJ(B`lb- z&7eIQXVHp`1UYjZC|aZ`f1=+7hED~&39G}YUG)Cfk+-arS9CtS(gz2hr|KtqRvrZt z>rCGgjkle_*@W`^-T<3=*cD{0n=4)@ zk*SX_0KGx86Acxte*X25c8al=&6U3c{os?xgIx(wG)u5N6vG!HI-D6#C4>7{B4YbA zUN!ps{F_u+uPQr^@jk}6VNraSaf5jw_?wzo;nhU62x3l;U>v6wo`fLr=e;M2!yu z$MS%F&|`)6f-NFm9fpS9=Y?$_o3a8yoJ~c3Tt0t zrsD7L4{l*A*cQi}r_C&Tey^C0IzIdFNJf?dvwsq;9x^F{_l!f#UPWxR$YgILJMkSi z0jb0`;74;K-q3ly=M1iCmpMK^Cn9(Uj%tsevIF%pvfIZi1|_Z7W76^vcZrWwFq|&d zb_t^6ON(spM9$p1{8WIN?o-sf^!#qQlX@GMqh&jxVIm05dVRfkMjU%RLAF-_?fhhg zbCcl9^Va+SoeF+d~P| z$(-?;_Jm?12z<29Q*-)WU?;A+8qQv8melNaUgQqV{PQy_5b6@%Cz}rjT{JLeL?J!b z&Bg`mYxVD}%K|CLI{56saXEksvlM8cvq%W&f3iYO111%EJgI6|L7ta!hb$lr@$WqU z`_b+H?+q&O!vv*|hyT}9ETur`c(>5lXie50%&5=DLKz)X!y?&ZbdM5_ zG87i7j~!@!YZ~<8JSS{<2}U~zvwJAeCQ-M zrEl(!(t^j<1y+b}ESz~deg9<-S-Y-JB5t=($+JG;eV{)6+@9$^Kz>I;L2;RH^jOHJYGW7Kb25g;yG~xg2cE}I^cL_+2h;px?fkh*4 zSuaAQ<_5buE&rBL&v=nnf~o3UGVYCCzI}c}N}T!?v#F_It84~$osl#B9tKHC8})9u z!=RVL3-y(r5+_=!joL#--8nDj!w!B{ZurUn8aYI~9(efQL7tU5%(e&fN5}Vyi1=rk zf1ThSs0BVmDa;ChBtIiIUn38m|6?nVZPI5=$Df7#^BL1mO2MSS8usPN3B+4H(!wEI z@gIB4b4<|8CVkdTnhlwp8v3m(zOP`?lX9_dPI4wdwjx76$_z#1uKy*cExr*nD8b+O zKF;=+tjwd0Xhc+?ldX(k0YYMjTi?ytc1QLLMxGNbIrScW zvaMANa(jjDVS598s|CR7N)N}{9uFVr;Ap7kCE zf!t+M0V5hZS?QhEdTmKL4;X4?lIFDjvJEavO9&r)ZQOWY#=dHT=my9_SOYl|Q849V8`y+f-LzdegP%vMPef$Kb7Z@-|KKYf3)lX8gS?5l99_4k*CzdwLB zL3+^^KE`KC<)K-#W%61RA4;Yc34uKW{{8RC25`3(mUCIM32~^=p~Qx8u-^j$ZR{M! zTRd9tWo^jV7&P;#cqGUydsYS|SE%=@{dE5NtERnR^2ceGmTxFpwpyn&_qamh57Es& zgoFJ8%qSdC#F2vW$Jz0`Iyp!WV&+!E`~$B)yDK_TOb=wH(h~=$zRA z?uv|L`^A6vh#N+CJD22~j>im4jpRmw`Ec}x0jvCH<^Os%ZG>qA-z(VGKFzM64Y5@1 zsyTFy7Gb)M^70o9m1-4T|Dm;|el4?RE+*>I`3L9R1NJJ_VSz;za494`zTzNN?noM2 z>+}cmB$b%-6<+3i&6oLsz~f>@idWW*M}mr*lP!*YW)nyl`ZadEch8sDu9_*?RdnD3 zf9}Q9g0j6HX9dhY&b#bY6aQlG&c@A>gH?WynQGrsBY})Pf9wHJaHxCaixKcqxp3cS zFImkt|A6(bWk7jql1*0BO5Vt$--M7Mt)Y{qcIw{fyL+FiGrMe?B&HjC9j|^!ihCOE zoIK`jJ5Y7uz{RDd*SYxm&^mOBC+N#}wF!xEyeq+9xnFtRH@)$@){7pfp2s=ZqzM^5 z$Y7wt%thYdXoR5kq#-(>l3WV2+;yl9wzzI~A_xbt%G|}Cj-7eI7znwN`Wj?nV9-lB zNar`fjIm|L*Jh)E>q$7F*eB9c(P1r~p-~uk)>6Scdn{K7PJV^35Jx$%?UZSmnA^U?znoKgjvmldXE8YUX!k@+W}O=_>-CQP*p9)h zV7Jv+yXEtm;hL(b6+q32xbAi3yt>#I@dZz9{?iGnJ0{<8wQK@J0TkeL5q3*m3_N8r zb9a4u7Z3&@-rp>NPpcei9{VfO5!A*EH>%7A+u7y#*Qc(LPDeb*3dCnhJ;cC2=5p)U zh=fvi5!)QSk;EX7R&GD`Sgps8vy*LA1 z*FOYztGtW#8T=87LHcU#ppY8bS;+Aa-zgo8e!dFTX2Qmm7xqiWpZDaH>4wyIb#RBz zH33d*K{y%eoEG~N6hbCMcW#kQgA6w#zlk-PdW@~q$i_;RiXzj$$PxUblux{KudVDfA z7j2j^>%C1xelh6(AvU9Go_Wr=xB^`?|k@77LF%_aLKfTPMyPu&YB4tj(xZ%hs^wF*6aQJ<&yi3hSHzj zQb{vr5;OI-DF7+vagsQzhX`}|aK<=Jbrqif`(rK8EuMIAdO?R@Qy>9(al<4GodAcE zbr~8Zw>mJo-y8#-g%A-)DHo^!TE3^*gDInx{ZF3W6m+z%rH)^46>gQZ)9#sdB0DfN zh%S_{Jb-09?3*Lr+O;P40^lhc5i;-(3hz*lB_FG+Y`F1R`c(B?R{mEv@i5%;h(4$7 zNR01+81cEvLq!}ESk8C_?6dVUH|SPN2Y+@S3((4xAdGVaY?tktGB>PBIfXJ7;jMoIeh>DCK@PEg~=*PW!PuAo3xo^_l4O}oH-c_;HzmXJ(&^dq@Q8(rQTscBxP|L!BsTq_?xknV( zK19&w+-}&G@@2XiaHl4hdi6WODnFD8QG(^No;ne4Kh1WhGf8FPA+wMKPp5aTt<{(y#lJCsS~N=!HiEHDicfJMV317leAHeJeF_IlhpQ?7v+-g3)ux`E@>SKn zT~Y4~3=qf)6#)I`GWa)$kna}uq|A+bs=iB(L28ZP*0?g0+@&8qpp*>fknsKkxpFl{ z0GA%7S9{5OBSua4Jxg=tq(}9#Ve;2k$#I*?FLhq)2m1OFASQ8$D7?sF6F%o7&2HH=5%?5)0rf_vP7RWir5`yXr%kAAs6a498ET0CLWJ*xP3RmM<23o`Bl>NnOucMPH ze)5Rl;?TGERIh8;CcdJ63R^$rh4a2PT#rGl_VA0(HYaQ=sX}PjPW2hy*s*q&g^?3m zsZemL#^)!7{Y%|tp;emQ+tf1W?H`;fZGNb~stJ5_CI<1XPb z^N)%I1>w>&GW%sjq@v&x*;1Cl{P7T~HC;*NL5OKOUo|~9JVphE!5z})TCackN;}V7 z%u}<zd!xHAs?A^>>G#I4{5>#Ji zn-B(UFT5Tk_-o=s=8PEv^@QjRntb!|A+E|l2s%4O4b)9}X{3f35sZ2?8RpK#3%gJ~ zG0|!vNE_EI$pw*xx0zJ z^XOGo5H{F7N6R9KM%RzjY8*a*6OSdhleC$ckLhM?O!{?0**Z)idO#eSoQ?{}LpOni zsH6qmDhYY;D$Ai)N(|ukbdOIl2T;ZU08de{=yNC(_ZfKFJj9Apkr^$EITYKPi5T!h zV6SRqljPzUBKfz<$kc{|*`WRq-9P}G#R1qFz57KC#E{D^a0*!YU@|g|NAk6WsRI2QM1v|{tDi>kK|uR0hpu? zfd-&kIC2)0;{inSio64v*Lu2x)`KGhCXyc(7*zik;euF8rY8YhMAyQcUa)=YF;Jp| z`~#^JYQT7aMXCWHnEI>e)exqb=V*YEW$TEynG6)+5?AwCmA-aLu=Ku{g$&d`lv(CS z`F4uD(=cCaT&t~F=GHxRrz0ZF6^1Fsva_|bu}mjplkKO&XGv1IBj+2PS9Pgb zyA|CYzV_bE2VdwxIiY9FIhNTt<>qvz<+LE8W21A>GdXoq-!i})$ri0cf8gGGaU2pNG^sK)2ldb z%v2!jW-4&V10LEk|AZmO8cmD)70E}JHhLSTW|joUOAEg*+$`FjJLj_2mrRKWntRR( ziUwlw7;~m#QA`a;3x84D|Gx0XK@Dh+ZDPdRF=?oDV!lr-rE7x^0J%(Vs8~&XjSo-I zIbda85i4Tj=kX1kMZ4VEeBEQfF5{4#x{tWGi-0AlI&?rTk%x5fP;W!yDu_F;L&>@R zK){+#OATHb+r$TgmYk~h>0Si1~lW)hDz}kfm$xGEUA|8gzSSI z=_I}~sUx3El3!flMA(wMrg8tqRDz7fd5Nr7 zWc~WAR7b^Vg~%J=3P|t*rBPT8z$oOTtOehD@lKeH=D{GD5-XiG`&}B`hyt(_AK^9K zkdXl}DT*<*mY|#Lv5Vu54bO#M5)_S%rAL=Cd_1J0zyE@u&jZvoV;k?G(1|s~DJd~| zWuvGEm5bp49c?v?2H2{suVpRnBS1FK_~nb$ORleswCae~JF+xO-7aBD)2WY8B*G+AKVx!QfJZ#GnYh2&{qO z0I4(Ei~yhq '首页', + 'version' => '1.2', + 'desc' => '首页', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>0, + 'hook'=>array( + //æ’ä»¶é’©å­ + 'home_index_header'=>'上通æ ', + 'home_index_left'=>'中左æ ', + 'home_index_right'=>'䏭峿 ', + 'home_index_footer'=>'下通æ ', + ), +); \ No newline at end of file diff --git a/app/home/action/admin.php b/app/home/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/home/action/admin.php @@ -0,0 +1,10 @@ +findAll('home_info',null,'orderid asc'); + + include template('admin/info_list'); + break; + + //添加 + case "add": + + include template('admin/info_add'); + break; + + case "adddo": + + $title = tsTrim($_POST['title']); + $content = tsClean($_POST['content']); + + $orderid = tsIntval($_POST['orderid']); + + $new['home']->create('home_info',array( + + 'title'=>$title, + 'content'=>$content, + 'orderid'=>$orderid, + + )); + + header('Location: '.SITE_URL.'index.php?app=home&ac=admin&mg=info&ts=list'); + + break; + + //编辑 + case "edit": + + $infoid = tsIntval($_GET['infoid']); + + $strInfo = $new['home']->find('home_info',array( + 'infoid'=>$infoid, + )); + + //$strInfo['content'] = tsDecode($strInfo['content']); + + + include template('admin/info_edit'); + + break; + + case "editdo": + + $infoid = tsIntval($_POST['infoid']); + + $title = tsTrim($_POST['title']); + + $content = tsClean($_POST['content']); + + $orderid = tsIntval($_POST['orderid']); + + $new['home']->update('home_info',array( + + 'infoid'=>$infoid, + + ),array( + + 'title'=>$title, + 'content'=>$content, + 'orderid'=>$orderid, + + )); + + header('Location: '.SITE_URL.'index.php?app=home&ac=admin&mg=info&ts=list'); + + break; + + //删除 + case "delete": + + $infoid = tsIntval($_GET['infoid']); + + $new['home']->delete('home_info',array( + 'infoid'=>$infoid, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/home/action/admin/options.php b/app/home/action/admin/options.php new file mode 100644 index 0000000..b6861ef --- /dev/null +++ b/app/home/action/admin/options.php @@ -0,0 +1,11 @@ +find('home_info',array( + 'infoid'=>$infoid, +)); + +if($strInfo==''){ + ts404(); +} + +$strInfo['title'] = tsTitle($strInfo['title']); +$strInfo['content'] = nl2br(tsDecode($strInfo['content'])); + +$arrInfo = $new['home']->findAll('home_info',null,'orderid asc'); + +$title = $strInfo['title']; +include template('info'); \ No newline at end of file diff --git a/app/home/action/my.php b/app/home/action/my.php new file mode 100644 index 0000000..e69de29 diff --git a/app/home/action/plugin.php b/app/home/action/plugin.php new file mode 100644 index 0000000..4198d4d --- /dev/null +++ b/app/home/action/plugin.php @@ -0,0 +1,9 @@ +create('anti_report',array( + 'url'=>$url, + 'content'=>$content, + 'addtime'=>date('Y-m-d H:i:s') + )); + + tsNotice('举报æäº¤æˆåŠŸï¼','点击返回',$url); + + break; +} \ No newline at end of file diff --git a/app/home/action/theme.php b/app/home/action/theme.php new file mode 100644 index 0000000..8fdc145 --- /dev/null +++ b/app/home/action/theme.php @@ -0,0 +1,15 @@ + +

    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/home/html/admin/info_edit.html b/app/home/html/admin/info_edit.html new file mode 100644 index 0000000..57c1e7a --- /dev/null +++ b/app/home/html/admin/info_edit.html @@ -0,0 +1,58 @@ +{php include pubTemplate("header_admin")} +{php doAction('tseditor')} + +
    + +{php include template("admin/menu");} + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    标题:
    内容: + + + +
    + +
    + + + +
    排åºID:
    + + + + +
    +
    + + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/home/html/admin/info_list.html b/app/home/html/admin/info_list.html new file mode 100644 index 0000000..9d6020e --- /dev/null +++ b/app/home/html/admin/info_list.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + + + + + + + + + + + + + + + + + + +{loop $arrInfo $key $item} + + + + + + + +{/loop} + + + +
    InfoID标题调用链接排åºIDæ“作
    {$item['infoid']}{tsTitle($item['title'])}{tsUrl('home','info',array('id'=>$item['infoid']))}{$item['orderid']}修改 | 删除
    + + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/home/html/admin/menu.html b/app/home/html/admin/menu.html new file mode 100644 index 0000000..5c64ec5 --- /dev/null +++ b/app/home/html/admin/menu.html @@ -0,0 +1,14 @@ + +
    +
    \ No newline at end of file diff --git a/app/home/html/admin/options.html b/app/home/html/admin/options.html new file mode 100644 index 0000000..6f01bfd --- /dev/null +++ b/app/home/html/admin/options.html @@ -0,0 +1,11 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    暂无é…ç½®
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/home/html/index.html b/app/home/html/index.html new file mode 100644 index 0000000..520041e --- /dev/null +++ b/app/home/html/index.html @@ -0,0 +1,27 @@ +{php include pubTemplate("header")} +{php doAction('home_index_js')} +{php doAction('home_index_css')} +

    {$GLOBALS['TS_SITE']['site_title']} - {$GLOBALS['TS_SITE']['site_subtitle']}

    +
    +{php doAction('home_index_header')} + +{php doAction('wordad')} + +
    +
    +{php doAction('home_index_left')} + +
    + +
    +{php doAction('home_index_right')} + + +{php doAction('gobad','300')} +
    +
    + +{php doAction('home_index_footer')} + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/home/html/info.html b/app/home/html/info.html new file mode 100644 index 0000000..ee215af --- /dev/null +++ b/app/home/html/info.html @@ -0,0 +1,49 @@ +{php include pubTemplate("header")} + +
    +
    + + + + +
    + + +
    + {loop $arrInfo $key $item} + + {tsTitle($item['title'])} + + {/loop} +
    + + +
    +
    + + +
    +
    + +

    {$strInfo['title']}

    + +
    + +
    + {$strInfo[content]} +
    + +
    +
    + + + +
    + + + + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/home/html/menu.html b/app/home/html/menu.html new file mode 100644 index 0000000..ea8b2bf --- /dev/null +++ b/app/home/html/menu.html @@ -0,0 +1,9 @@ +
    + +
    \ No newline at end of file diff --git a/app/home/html/my.html b/app/home/html/my.html new file mode 100644 index 0000000..b9d2036 --- /dev/null +++ b/app/home/html/my.html @@ -0,0 +1,72 @@ +{php include pubTemplate("header")} +
    +
    + +
    + +
    + +

    我关注的...

    + +
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    +{$strUser[username]} +
    + +
    +

    {$strUser[username]}

    +
    + +{if $strUser['userid']==$TS_USER['userid']} +我的空间 +{else} +关注 +{/if} + +
    +
    + +
    + + + +
    + + + +
    + + +
    + +
    + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/home/html/report.html b/app/home/html/report.html new file mode 100644 index 0000000..706a379 --- /dev/null +++ b/app/home/html/report.html @@ -0,0 +1,41 @@ +{php include pubTemplate("header")} +
    + + +
    +
    +
    + +
    +
    + + + + +
    +
    + + + +
    +
    + + +
    + + +
    + + +
    +
    + +
    +
    +
    + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/home/html/theme.html b/app/home/html/theme.html new file mode 100644 index 0000000..373351f --- /dev/null +++ b/app/home/html/theme.html @@ -0,0 +1,36 @@ +{php include pubTemplate("header")} + +
    + + + + +
    +
    æ›´æ¢çš®è‚¤
    +
    +
    +
      + {loop $arrTheme $key $item} +
    • + +

      {$item}

      +
    • + {if is_int(($key+1)/7)} +
      + {/if} + {/loop} +
    +
    +
    +
    + + + + + + + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/home/icon.png b/app/home/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..43947b1b16a6475f2b4ce936825f1169ec29f514 GIT binary patch literal 2008 zcmV;}2PgQ6P)h!)&2= zJ=GOcMZlJ1S+@1jZ~G+M>i;V{n%q@_4^VtJ10GV4L^X9V$U;y&6z-qPnT?nzWUaz+RUs&xcJ_IPGb`bHxApB2yBjROQmPd=l z;x2U%k_JF2btr`R!%@VW$H&Km)Wbru01OoWi5c<$ds509M~H&2mLve4#LohPebr0A>1!__<3+MEq}KV`INf$hxkN0pQf&vyY^d z=fV5+9uJrd07@xJ_NXVf{z!ZP*ww{zOYe~s1W5qkL;NRda)Tgx04&7+r!33eK4bd2 zuJ?ry=K%1F#-p57Rki5hZG$WtH2`CX|I8E63nY3o*a-naBBeYEQd!G~iWYz|#m@wHAIm_?}X2`i=_%d6aX~h|3&lonyh>@@l*B$!2=MA_%9$h1AzA$7;ov- zaSW44K?7hTz7XQ7D2l_WV{cv8^q!y-f@Yo}_?g6D0k9Dt5&x{Jsxv3Bjqk4IQh*>x z0AdjT*)Z`;2=PHTlZc2%RaMbYGPqxG0K_DI3iAg+0T843u|p6H05OXnGXy~ZKr45J z5H!x;(hRL;P55ks_iDA;U9Z=du}mV(4nRuc$2f^JD*!g)3n9KrDUWS?U?}C9{RqKN zC(j0erT9@VziQg3ok^T~6Ur-sYQe42A6aWnu- z;_LS5+4iCo%9-rcv~jfXI0^u!M%nDsOF>-QHkj-+CIsFAFg1q7Z^y!9x2D#yl=7=B zST^On0$^$ci?5etj`;&`0I>Kr{moovY6!dlpp>FDakMtB^~XKmEd28lQ$jEp0E?|! z#t$>}Gfy6+8whCWxo$h!bx{-tLzcu30>Ctm<(@wbR?F>Z*HX$o*E=}_(7fCKTXW;@ zLWunscE`9HZ;E<05Fp~0s;WA_jih_dApp=q2m0>rs~;kczE5uo*(eW5b?le^NAAxwDJ`ZX%+8JKZ^NfS#A$WO5DwpM@^+vtLJqM z1HJ*ct*YwRJfxVXm0hE*NdeG>fWBq{fV~vIz-em-r4-thHI#FjFmmz$^dNOz-x$WI zR_$T{`~XlC#T%E|M24FA%-;1Kyaq0ae z&L9AMK)?XF1K{I*%U}Qqf@WBFjEK92O_8rW0t4U#z_;crrGvj*?gap&pBF+XrRe+o z?_QQ=0NMeNQcj}HBsU?^8G!a~(lrcZ0Bqb!0%aHgei79AB8WXe0=?U&3G4yb1F#3+ zxq#Qcf3%#Bs&K|&{2QckVbQJz&HK(OlUH4`HJOMyGe{*w_Hmc~pL*#`4pEH;YfF}Ty zQl^6&yoldiF#!GmXkBkGSfTa{IPb*aQNRle_;ROR>kUQ%K=^u9%N}54 z4?utofuL;%6kU%2=xNolR|Iukf2dGn_t3GgZ;~mQC1DJJN$U3h832Rb#_pkGU*CiU z1Hb^781eHz=K$??WDhX%D1ehdeFx?cz#+hoi#J_`LjZ?>QMZQiFwoQmc^K$qp|O*+ zv9E7xH0J=E1DF``^FQYRoC9zU(82(R0Dcd^i$Z-Y3guCNTd3wFkdr_+a{AWdB#@Ip zP69az9PcAhoCEar$v?_-4!}8p8##SzaSp&aKx+NPKI!_$41ue!9&~@w%eF3zp zD&Kn>TTMAx2HUJD8 zS-oyR)!A(_0O%o66o9U?hFk=< ztuxk|K->HGE$4dlOW*rEm7f#cs?rkI%pNwc+FdSe${^w+-6zu>df& z>z~a7(2W}i&H&)OSG8L%76Slt^!!-?c)EF$3Dc3MU5VjfK0*e7dOe-GUY6yV>ya-* z4K#TOXnWwgu4ybxhfr;|9V#)Tk)Z)Vy&V8(G;~=M#pPVW2jKyR2+MW-SRe=w;HN2k z6&DLI04`Qbs15^=keDt_VE|mLmQWoAAR#ebn!*6MSS_JC3_wC+x-^9WaIsoKbr^tz q#B^y21K?t{gz7K=35n^_l>Y$(Tol{(BxNW70000 + + + +你找的页é¢ä¸å­˜åœ¨ + + + +

    404

    +

    你找的页é¢ä¸å­˜åœ¨

    + + +'; \ No newline at end of file diff --git a/app/location/about.php b/app/location/about.php new file mode 100644 index 0000000..d065ec2 --- /dev/null +++ b/app/location/about.php @@ -0,0 +1,17 @@ + 'åŒåŸŽ', + 'version' => '1.2', + 'desc' => 'åŒåŸŽAPP', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '0', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1', +); \ No newline at end of file diff --git a/app/location/action/admin.php b/app/location/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/location/action/admin.php @@ -0,0 +1,10 @@ +findAll('location',null,'orderid asc'); + include template('admin/location_list'); + break; + + case "add": + + + include template('admin/location_add'); + break; + + case "adddo": + + $title = t($_POST['title']); + $content = trim($_POST['content']); + + $orderid = intval($_POST['orderid']); + + $locationid = $new['location']->create('location',array( + 'title'=>$title, + 'content'=>$content, + 'orderid'=>$orderid, + )); + + $arrUpload = tsUpload ( $_FILES ['photo'], $locationid, 'location', array ('jpg','gif','png','jpeg' ) ); + if ($arrUpload) { + $new ['location']->update ( 'location', array ( + 'locationid' => $locationid + ), array ( + 'path' => $arrUpload ['path'], + 'photo' => $arrUpload ['url'] + ) ); + } + + header('Location: '.SITE_URL.'index.php?app=location&ac=admin&mg=location&ts=list'); + + break; + + case "edit": + + $locationid = intval($_GET['locationid']); + + $strLocation = $new['location']->find('location',array( + 'locationid'=>$locationid, + )); + + include template('admin/location_edit'); + break; + + case "editdo": + $locationid = intval($_POST['locationid']); + $title = t($_POST['title']); + $content = trim($_POST['content']); + + $orderid = intval($_POST['orderid']); + + $new['location']->update('location',array( + 'locationid'=>$locationid, + ),array( + 'title'=>$title, + 'content'=>$content, + 'orderid'=>$orderid, + )); + + $arrUpload = tsUpload ( $_FILES ['photo'], $locationid, 'location', array ('jpg','gif','png','jpeg' ) ); + if ($arrUpload) { + $new ['location']->update ( 'location', array ( + 'locationid' => $locationid + ), array ( + 'path' => $arrUpload ['path'], + 'photo' => $arrUpload ['url'] + ) ); + } + + header('Location: '.SITE_URL.'index.php?app=location&ac=admin&mg=location&ts=list'); + + break; + + case "delete": + + $locationid = intval($_GET['locationid']); + $strLocation = $new['location']->find('location',array( + 'locationid'=>$locationid, + )); + + unlink('uploadfile/location/'.$strLocation['photo']); + + $new['location']->delete('location',array( + 'locationid'=>$locationid, + )); + + $new['location']->update('article',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('attach',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('group_topic',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('photo',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('user_info',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('weibo',array( + 'locationid'=>$locationid, + ),array( + 'locationid'=>0, + )); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; +} \ No newline at end of file diff --git a/app/location/action/admin/options.php b/app/location/action/admin/options.php new file mode 100644 index 0000000..edef197 --- /dev/null +++ b/app/location/action/admin/options.php @@ -0,0 +1,4 @@ +update('article',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + $new['location']->update('attach',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + $new['location']->update('group_topic',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + $new['location']->update('photo',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + $new['location']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + $new['location']->update('weibo',array( + 'userid'=>$userid, + ),array( + 'locationid'=>$locationid, + )); + + getJson('加入æˆåŠŸï¼',1,2,tsUrl('location','show',array('id'=>$locationid))); + + break; + + case "exit": + + $userid = intval($TS_USER['userid']); + + $locationid = intval($_POST['locationid']); + + if($userid==0 || $locationid == 0){ + getJson('éžæ³•æ“作ï¼'); + } + + //æ›´æ–°ts_articleã€ts_attachã€ts_group_topicã€ts_photoã€ts_user_infoã€ts_weibo + $new['location']->update('article',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('attach',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('group_topic',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('photo',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + $new['location']->update('weibo',array( + 'userid'=>$userid, + ),array( + 'locationid'=>0, + )); + + getJson('退出æˆåŠŸï¼',1,2,tsUrl('location')); + + break; + +} \ No newline at end of file diff --git a/app/location/action/all.php b/app/location/action/all.php new file mode 100644 index 0000000..76d7748 --- /dev/null +++ b/app/location/action/all.php @@ -0,0 +1,7 @@ +findAll('location'); + +$title = '全部åŒåŸŽ'; +include template('all'); \ No newline at end of file diff --git a/app/location/action/index.php b/app/location/action/index.php new file mode 100644 index 0000000..b3fe6e3 --- /dev/null +++ b/app/location/action/index.php @@ -0,0 +1,21 @@ +isLogin(); + +$strUser = aac('user')->getSimpleUser($userid); + +if($strUser['locationid']==0){ + $arrLocation = $new['location']->findAll('location'); + if($arrLocation==''){ + tsNotice('åŒåŸŽæœªåšé…置,暂时还ä¸èƒ½åŠ å…¥ï¼'); + } + + $title = '选择加入åŒåŸŽ'; + include template('index'); + exit; +} + + +header('Location: '.tsUrl('location','show',array('id'=>$strUser['locationid']))); +exit; \ No newline at end of file diff --git a/app/location/action/my.php b/app/location/action/my.php new file mode 100644 index 0000000..a082e40 --- /dev/null +++ b/app/location/action/my.php @@ -0,0 +1,10 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/location/action/my/index.php b/app/location/action/my/index.php new file mode 100644 index 0000000..50514da --- /dev/null +++ b/app/location/action/my/index.php @@ -0,0 +1,15 @@ +find('location',array( + 'locationid'=>$strUser['locationid'], + )); + +} + + +$title = '我的åŒåŸŽ'; +include template('my/index'); \ No newline at end of file diff --git a/app/location/action/show.php b/app/location/action/show.php new file mode 100644 index 0000000..9d79ab4 --- /dev/null +++ b/app/location/action/show.php @@ -0,0 +1,64 @@ +find('location',array( + 'locationid'=>$locationid, +)); + +$strLocation['title'] = tsTitle($strLocation['title']); +$strLocation['content'] = tsTitle($strLocation['content']); + +//文章 +$arrArticle = $new['location']->findAll('article',array( + 'locationid'=>$locationid, +),'addtime desc',null,10); +//资料 +/* +$arrAttach = $new['location']->findAll('attach',array( + 'locationid'=>$locationid, +),'addtime desc',null,10); +*/ +//å¸–å­ +$arrTopic = $new['location']->findAll('group_topic',array( + 'locationid'=>$locationid, +),'addtime desc',null,10); +foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title'] = tsTitle($item['title']); + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = $new['location']->find('group',array( + 'groupid'=>$item['groupid'], + )); +} + +//图片 +$arrPhoto = $new['location']->findAll('photo',array( + 'locationid'=>$locationid, +),'addtime desc',null,10); +//用户 +$arrUser = $new['location']->findAll('user_info',array( + 'locationid'=>$locationid, +),'uptime desc',null,16); +//å” å¨ +$arrWeibo = $new['location']->findAll('weibo',array( + 'locationid'=>$locationid, +),'addtime desc',null,10); +foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['content'] = tsTitle($item['content']); + $arrWeibo[$key]['user'] = aac('user')->getSimpleUser($item['userid']); +} + +//æ˜¯å¦æ˜¯åŒåŸŽç”¨æˆ· +$isLocationId = 0; +if($TS_USER['userid']){ + $strUser=$new['location']->find('user_info',array( + 'userid'=>$TS_USER['userid'], + )); + $isLocationId = $strUser['locationid']; +} + +$sitekey = $strLocation['title']; +$sitedesc = cututf8(t($strLocation['content']),0,100); +$title = $strLocation['title']; +include template('show'); \ No newline at end of file diff --git a/app/location/class.location.php b/app/location/class.location.php new file mode 100644 index 0000000..d62c757 --- /dev/null +++ b/app/location/class.location.php @@ -0,0 +1,23 @@ + +
    +{php include template("admin/menu");} + +
    + + + + + + + + + +
    å称:
    内容:
    图片:
    排åºID:
    + +
    +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/location/html/admin/location_edit.html b/app/location/html/admin/location_edit.html new file mode 100644 index 0000000..345b539 --- /dev/null +++ b/app/location/html/admin/location_edit.html @@ -0,0 +1,28 @@ +{php include pubTemplate("header_admin")} + +
    +{php include template("admin/menu");} + +
    + + + + + + + + + +
    å称:
    内容:
    图片: +{if $strLocation['photo']} + +
    +{/if} +
    排åºID:
    + + +
    +
    + +
    +{php include template("admin/footer")} \ No newline at end of file diff --git a/app/location/html/admin/location_list.html b/app/location/html/admin/location_list.html new file mode 100644 index 0000000..f4978d5 --- /dev/null +++ b/app/location/html/admin/location_list.html @@ -0,0 +1,36 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + + + + + + + + + + {loop $arrLocation $key $item} + + + + + + + + + {/loop} + + + + +
    IDåç§°æŽ’åºæ“作
    {$item[locationid]}{$item[title]}{$item[orderid]} + + + + [修改] [删除]
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/location/html/admin/menu.html b/app/location/html/admin/menu.html new file mode 100644 index 0000000..ed47cf2 --- /dev/null +++ b/app/location/html/admin/menu.html @@ -0,0 +1,11 @@ +
    区域管ç†
    + \ No newline at end of file diff --git a/app/location/html/admin/options.html b/app/location/html/admin/options.html new file mode 100644 index 0000000..6f01bfd --- /dev/null +++ b/app/location/html/admin/options.html @@ -0,0 +1,11 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    暂无é…ç½®
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/location/html/all.html b/app/location/html/all.html new file mode 100644 index 0000000..ae54a10 --- /dev/null +++ b/app/location/html/all.html @@ -0,0 +1,33 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    全部åŒåŸŽ
    +
    + +
    +
      + {loop $arrLocation $key $item} +
    • +
      {$item['title']}
      +
      +
      {$item['title']}
      +
      {$item['content']}
      + + + +
      +
    • + {/loop} +
    +
    + +
    +
    + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/location/html/index.html b/app/location/html/index.html new file mode 100644 index 0000000..0be083b --- /dev/null +++ b/app/location/html/index.html @@ -0,0 +1,33 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    选择加入åŒåŸŽ
    +
    + +
    +
      +{loop $arrLocation $key $item} +
    • +
      {$item['title']}
      +
      +
      {$item['title']}
      +
      {$item['content']}
      + + + +
      +
    • +{/loop} +
    +
    + +
    +
    + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/location/html/my/index.html b/app/location/html/my/index.html new file mode 100644 index 0000000..1f64580 --- /dev/null +++ b/app/location/html/my/index.html @@ -0,0 +1,64 @@ +{php include pubTemplate("header")} +
    + + +
    + + +
    +
    + + {php include pubTemplate("my")} + +
    +
    + +
    + + +
    +
    我的åŒåŸŽ
    +
    + + + {if $strUser['locationid']} + + +
    +
    + + {$strLocation['title']} + +
    +
    +

    + {tsTitle($strLocation['title'])} +

    +

    {$strLocation['content']}

    +
    +
    + + + + {else} + +
    + 你还没有加入åŒåŸŽ + +
    + + {/if} + + +
    +
    + + +
    + + +
    +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/location/html/show.html b/app/location/html/show.html new file mode 100644 index 0000000..cfad95f --- /dev/null +++ b/app/location/html/show.html @@ -0,0 +1,207 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    + +
    +
    {$strLocation['title']}
    +
    +

    {tsTitle($strLocation['title'])}{if $isLocationId==$strLocation['locationid']}退出åŒåŸŽ + {/if}

    +

    {$strLocation['content']}

    + + + +
    +
    + +
    +
    + +
    +
    + +
    +
    åŒåŸŽç”¨æˆ·
    +
    +
    + +
    +
    +
    +
    + + +
    +
    åŒåŸŽå›¾ç‰‡
    +
    +
    + +
      +{loop $arrPhoto $key $item} +
    • + +{$item['albumname']} + +
    • +{/loop} +
    + +
    +
    +
    + +
    +
    åŒåŸŽå¸–å­
    +
    + + +
    + +
    + + +
    +
    + + +
    + + +
    + +
    +
    开心æ¯ä¸€å¤©
    +
    + +
    + + +
    +
    +
    + + +
    +
    åŒåŸŽæ–‡ç« 
    +
    +
    + + + +
    +
    +
    + + + + + + + + + +
    + + +
    +
    + +{php include pubTemplate("footer")} diff --git a/app/location/js/admin.js b/app/location/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/location/js/extend.func.js b/app/location/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/location/skins/default/style.css b/app/location/skins/default/style.css new file mode 100644 index 0000000..2f22299 --- /dev/null +++ b/app/location/skins/default/style.css @@ -0,0 +1,95 @@ +.location_list{} +.location_list ul, .location_list ul li{list-style: none;margin:0;padding:0;} +.location_list ul{} +.location_list ul li{float:left;padding:20px;width:420px;} +.location_list ul li .photo{float:left;width:100px;} +.location_list ul li .info{margin-left:100px;} + +.location_list ul li .info .content{line-height:25px;font-size:12px;color:#999} + + +.location{} +.location .photo{float:left;width:100px;} +.location .info{margin-left:100px;} +.location .info h1{padding:0 10px;} +.location .info p{padding:10px;} + + +.photo{} +.photo ul, .photo ul li{list-style: none;margin:0;padding: 0;} +.photo ul{} +.photo ul li{float:left;} + + +.weilist{} +.weilist ul, .weilist ul li{list-style: none;margin:0;padding:0;} +.weilist ul li { + border-bottom: 1px dashed #DDDDDD; + margin: 0 0 5px; + padding: 0 0 8px; +} +.weilist ul li .portrait { + float: left; + padding-top: 3px; + width: 45px; +} +.weilist ul li .portrait img { + background: none repeat scroll 0 0 #FFFFFF; + + height: 32px; + + width: 32px; +} +.weilist ul li .body { + float: left; + font-size: 9pt; + overflow: hidden; + width: 230px; +} +.weilist ul li .user a { + +} + +.weilist ul li .log { + color: #999; + word-break: break-all; +} +.weilist ul li .time { + color: #9A9A9A; + display: block; + margin: 5px 0 0; +} +.weilist ul li .time a { + color: #9A9A9A; + text-decoration: none; +} + +/*帖å­åˆ—表*/ +.topic_list{overflow:hidden;} +.topic_list ul, .topic_list ul li{list-style: none;margin:0;padding:0;} +.topic_list ul{overflow:hidden;} +.topic_list ul li{overflow:hidden;padding:15px 0;display: block;border-bottom: 1px dashed #999999;} + +.topic_list ul li .other{background: none repeat scroll 0 0 #F8F8F8; + border-left: 3px solid #EEEEEE; + margin-left: 38px; + margin-top: 5px; + padding: 5px;} +.topic_list ul li .other p{margin:0px;padding:5px 0;} + +.topic_list .userimg{float:left;width:38px;overflow:hidden;} + +.topic_list .topic_title{margin-left:40px;overflow:hidden;} + +.topic_list .topic_title .title a{color:#343434;font-size:14px;} + +.topic_list .topic_info{overflow: hidden;font-size:12px;color:#999999;} + +.rank { + background: none repeat scroll 0 0 #BBBBBB; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + padding: 0 3px; + border-radius:5px 5px 5px 5px; +} \ No newline at end of file diff --git a/app/mail/about.php b/app/mail/about.php new file mode 100644 index 0000000..0e8c562 --- /dev/null +++ b/app/mail/about.php @@ -0,0 +1,17 @@ + '邮件短信', + 'version' => '1.2', + 'desc' => '邮件短信', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/mail/action/admin.php b/app/mail/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/mail/action/admin.php @@ -0,0 +1,10 @@ + tsTrim($_POST['appname']), + 'appdesc' => tsTrim($_POST['appdesc']), + 'isenable' => tsTrim($_POST['isenable']), + 'mailhost' => tsTrim($_POST['mailhost']), + 'ssl' => tsIntval($_POST['ssl']), + 'mailport' => tsTrim($_POST['mailport']), + 'mailuser' => tsTrim($_POST['mailuser']), + 'mailpwd' => tsTrim($_POST['mailpwd']), + ); + + //å…ˆæ¸…ç©ºæ•°æ® + $db->query("TRUNCATE TABLE `".dbprefix."mail_options`"); + + foreach($arrData as $key=>$item){ + + $optionname = $key; + $optionvalue = $item; + + $new['mail']->create('mail_options',array( + + 'optionname'=>$optionname, + 'optionvalue'=>$optionvalue, + + )); + + } + + //更新缓存 + $arrOptions = $new['mail']->findAll('mail_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite('mail_options.php','data',$arrOption); + $tsMySqlCache->set('mail_options',$arrOption); + + qiMsg("邮件é…置更新æˆåŠŸï¼Œå¹¶é‡ç½®äº†ç¼“存文件^_^"); + + break; + + + case "sms": + + $arrData = array( + 'sms_server' => tsTrim($_POST['sms_server']), + 'sms_appid' => tsTrim($_POST['sms_appid']), + 'sms_appkey' => tsTrim($_POST['sms_appkey']), + 'sms_tpid' => tsTrim($_POST['sms_tpid']), + 'sms_sign' => tsTrim($_POST['sms_sign']), + ); + + //更新缓存 + fileWrite('sms_options.php','data',$arrData); + $GLOBALS['tsMySqlCache']->set('sms_options',$arrData); + + qiMsg("短信é…置更新æˆåŠŸï¼Œå¹¶é‡ç½®äº†ç¼“存文件^_^"); + + break; + +} \ No newline at end of file diff --git a/app/mail/action/admin/options.php b/app/mail/action/admin/options.php new file mode 100644 index 0000000..7f18eb9 --- /dev/null +++ b/app/mail/action/admin/options.php @@ -0,0 +1,31 @@ +fetch_all_assoc("select * from ".dbprefix."mail_options"); + + foreach($arrOptions as $item){ + $strOption[$item['optionname']] = $item['optionvalue']; + } + + include template("admin/options"); + + break; + + //短信é…ç½® + case "sms": + + $strOption = fileRead('data/sms_options.php'); + if($strOption==''){ + $strOption = $GLOBALS['tsMySqlCache']->get('sms_options'); + } + + + include template("admin/options_sms"); + + break; + +} \ No newline at end of file diff --git a/app/mail/class.mail.php b/app/mail/class.mail.php new file mode 100644 index 0000000..fad5c69 --- /dev/null +++ b/app/mail/class.mail.php @@ -0,0 +1,227 @@ +get('mail_options'); + } + + + + $mail = new PHPMailer(true); // Passing `true` enables exceptions + try { + //Server settings + $mail->SMTPDebug = 0; // Enable verbose debug output + $mail->isSMTP(); // Set mailer to use SMTP + $mail->Host = $options['mailhost']; // Specify main and backup SMTP servers + $mail->SMTPAuth = true; // Enable SMTP authentication + $mail->Username = $options['mailuser']; // SMTP username + $mail->Password = $options['mailpwd']; // SMTP password + + + if($options['ssl']){ + $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted + } + + $mail->CharSet = 'UTF-8'; + + + $mail->Port = $options['mailport']; // TCP port to connect to + + //Recipients + $mail->setFrom($options['mailuser'], $TS_SITE['site_title']); + $mail->addAddress($sendmail, ''); // Add a recipient + //$mail->addAddress($sendmail); // Name is optional + $mail->addReplyTo($options['mailuser'], $TS_SITE['site_title']); + + /* + $mail->addCC('cc@example.com'); + $mail->addBCC('bcc@example.com'); + */ + + //Attachments + /* + $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments + $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name + */ + + //Content + $mail->isHTML(true); // Set email format to HTML + $mail->Subject = $subject; + $mail->Body = $content; + $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; + + $mail->send(); + //echo 'Message has been sent'; + + return 1; + + } catch (Exception $e) { + //echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo; + + return 0; + } + + //date_default_timezone_set('Asia/Shanghai'); + + /* + require_once 'PHPMailer/PHPMailerAutoload.php'; + $mail = new PHPMailer(); + + //邮件é…ç½® + $mail->CharSet = "UTF-8"; + $mail->IsSMTP(); + //Enable SMTP debugging + // 0 = off (for production use) + // 1 = client messages + // 2 = client and server messages + $mail->SMTPDebug = 0; + + $mail->Debugoutput = 'html'; + + if($options['ssl']){ + $mail->SMTPSecure = 'ssl'; + } + $mail->SMTPAuth = true; + + $mail->Host = $options['mailhost']; + $mail->Port = $options['mailport']; + $mail->Username = $options['mailuser']; + $mail->Password = $options['mailpwd']; + + //POST过æ¥çš„ä¿¡æ¯ + $frommail = $options['mailuser']; + $fromname = $TS_SITE['site_title']; + $replymail = $options['mailuser']; + $replyname = $TS_SITE['site_title']; + $sendname = ''; + + if(empty($frommail) || empty($subject) || empty($content) || empty($sendmail)){ + return '0'; + }else{ + + //邮件å‘é€ + $mail->SetFrom($frommail, $fromname); + $mail->AddReplyTo($replymail,$replyname); + $mail->Subject = $subject; + $mail->AltBody = "è¦æŸ¥çœ‹é‚®ä»¶ï¼Œè¯·ä½¿ç”¨HTML兼容的电å­é‚®ä»¶é˜…读器!"; + //$mail->MsgHTML(eregi_replace("[\]",'',$content)); + $mail->MsgHTML(strtr($content,'[\]','')); + $mail->AddAddress($sendmail, $sendname); + $mail->send(); + + return '1'; + + } + */ + + } + + + function sendSms($phone,$text,$tpid=0,$type=86){ + + $strOption = fileRead('data/sms_options.php'); + if($strOption==''){ + $strOption = $GLOBALS['tsMySqlCache']->get('sms_options'); + } + + $sms_server = $strOption['sms_server']; + + // 短信应用SDK AppID + $appid = $strOption['sms_appid']; // 1400开头 + // 短信应用SDK AppKey + $appkey = $strOption['sms_appkey']; + // 短信模æ¿ID,需è¦åœ¨çŸ­ä¿¡åº”用中申请 + $templateId = $strOption['sms_tpid']; // NOTE: 这里的模æ¿ID`7839`åªæ˜¯ä¸€ä¸ªç¤ºä¾‹ï¼ŒçœŸå®žçš„æ¨¡æ¿ID需è¦åœ¨çŸ­ä¿¡æŽ§åˆ¶å°ä¸­ç”³è¯· + if($tpid!=0){ + $templateId = $tpid; + } + // ç­¾å + $smsSign = $strOption['sms_sign']; // NOTE: 这里的签ååªæ˜¯ç¤ºä¾‹ï¼Œè¯·ä½¿ç”¨çœŸå®žçš„已申请的签å,签å傿•°ä½¿ç”¨çš„æ˜¯`ç­¾å内容`ï¼Œè€Œä¸æ˜¯`ç­¾åID` + + #腾讯云å‘é€çŸ­ä¿¡ + if($sms_server=='qcloud'){ + // 指定模æ¿IDå•å‘短信 + try { + $ssender = new SmsSingleSender($appid, $appkey); + $params = ["$text"]; + $result = $ssender->sendWithParam("$type", $phone, $templateId, + $params, $smsSign, "", ""); // ç­¾å傿•°æœªæä¾›æˆ–者为空时,会使用默认签åå‘é€çŸ­ä¿¡ + #$rsp = json_decode($result); + //echo $result; + } catch(\Exception $e) { + //echo var_dump($e); + } + } + + + #阿里云å‘é€çŸ­ä¿¡ + if($sms_server=='aliyun'){ + AlibabaCloud::accessKeyClient($appid, $appkey) + ->regionId('cn-hangzhou') // replace regionId as you need + ->asGlobalClient(); + + try { + $result = AlibabaCloud::rpcRequest() + ->product('Dysmsapi') + // ->scheme('https') // https | http + ->version('2017-05-25') + ->action('SendSms') + ->method('POST') + ->options([ + 'query' => [ + 'RegionId' => 'cn-hangzhou', + 'PhoneNumbers' => $phone, + 'SignName' => $smsSign, + 'TemplateCode' => $templateId, + 'TemplateParam' => '{"code":"'.$text.'"}', + ], + ]) + ->request(); + //print_r($result->toArray()); + } catch (ClientException $e) { + //echo $e->getErrorMessage() . PHP_EOL; + } catch (ServerException $e) { + //echo $e->getErrorMessage() . PHP_EOL; + } + } + + + } + + + //æžæž„函数 + public function __destruct(){ + + } + +} \ No newline at end of file diff --git a/app/mail/config.php b/app/mail/config.php new file mode 100644 index 0000000..12cc3e6 --- /dev/null +++ b/app/mail/config.php @@ -0,0 +1,4 @@ + + +
    Email短信管ç†
    + + + + +
    \ No newline at end of file diff --git a/app/mail/html/admin/options.html b/app/mail/html/admin/options.html new file mode 100644 index 0000000..9ef3b43 --- /dev/null +++ b/app/mail/html/admin/options.html @@ -0,0 +1,43 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + + + + + + + + + +
    邮箱Host : (例如:smtp.exmail.qq.com)
    使用ssl/tls:ä¸ä½¿ç”¨ 使用(使用SSL需è¦ç©ºé—´å¼€å¯php_openssl扩展)
    é‚®ç®±ç«¯å£ : (例如:默认为25,ssl为465,tls为587)
    邮箱用户 : (例如:user@qq.com)
    é‚®ç®±å¯†ç  : (例如:123456)
    + +

    建议使用QQä¼ä¸šé‚®ç®± 去申请

    + +

    + 䏿‡‚怎么é…置? ThinkSAAS邮件é…置教程 +

    + + +
    + + + + +
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/mail/html/admin/options_sms.html b/app/mail/html/admin/options_sms.html new file mode 100644 index 0000000..065fa7f --- /dev/null +++ b/app/mail/html/admin/options_sms.html @@ -0,0 +1,55 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + + + + + + +
    短信平å°ï¼š + + + 阿里云 + + 腾讯云 + + +
    APPID:
    APPKEY:
    短信模æ¿ID:
    短信签å:
    + + +
    + +
    ã€æŽ¨è使用阿里云短信æœåŠ¡ã€‘
    + +
    é˜¿é‡Œäº‘å‚æ•°é…置请点击 阿里云短信æœåŠ¡ 获å–
    +
    è…¾è®¯äº‘å‚æ•°é…置请点击 腾讯云 获å–
    + +
    + + + +
    + + + + + + +
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/message/about.php b/app/message/about.php new file mode 100644 index 0000000..80e18a0 --- /dev/null +++ b/app/message/about.php @@ -0,0 +1,17 @@ + '消æ¯ç›’å­', + 'version' => '1.2', + 'desc' => 'ImBox消æ¯ç›’å­', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '0', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/message/action/admin.php b/app/message/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/message/action/admin.php @@ -0,0 +1,10 @@ +findAll('message',null,'addtime desc',null,$lstart.',20'); + + $msgNum = $new['message']->findCount('message'); + $pageUrl = pagination($msgNum, 20, $page, $url); + + include template('admin/msg_list'); + break; + + //删除 + case "delete": + + $messageid = tsIntval($_GET['messageid']); + $page = tsIntval($_GET['page']); + + $new['message']->delete('message',array( + 'messageid'=>$messageid, + )); + + header('Location: '.SITE_URL.'index.php?app=message&ac=admin&mg=msg&ts=list&page='.$page); + + break; + + +} \ No newline at end of file diff --git a/app/message/action/admin/options.php b/app/message/action/admin/options.php new file mode 100644 index 0000000..b6861ef --- /dev/null +++ b/app/message/action/admin/options.php @@ -0,0 +1,11 @@ + +----------------------------------------------- +Message Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/message/action/common.php b/app/message/action/common.php new file mode 100644 index 0000000..ad4462c --- /dev/null +++ b/app/message/action/common.php @@ -0,0 +1,7 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); +} \ No newline at end of file diff --git a/app/message/action/friend.php b/app/message/action/friend.php new file mode 100644 index 0000000..f35e3fe --- /dev/null +++ b/app/message/action/friend.php @@ -0,0 +1,31 @@ +isLogin(); + +$page = tsIntval($_GET['page'],1); +$url = tsUrl('message','friend',array('page'=>'')); +$lstart = $page*40-40; + +$arrToUsers = $db->fetch_all_assoc("select `userid` from ".dbprefix."message where `userid` > '0' and `touserid`='$userid' group by userid order by addtime desc limit $lstart,40"); + +$userNum = $db->once_num_rows("select `userid` from ".dbprefix."message where `userid` > '0' and `touserid`='$userid' group by userid"); + +$pageUrl = pagination($userNum, 40, $page, $url); + +if(is_array($arrToUsers)){ + foreach($arrToUsers as $key=>$item){ + $arrToUser[] = $item; + $arrToUser[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrToUser[$key]['count'] = $new['message']->findCount('message',array( + 'touserid'=>$userid, + 'userid'=>$item['userid'], + 'isread'=>0, + )); + + } +} + +$title = '好勿¶ˆæ¯'; +include template('friend'); \ No newline at end of file diff --git a/app/message/action/index.php b/app/message/action/index.php new file mode 100644 index 0000000..1ff146d --- /dev/null +++ b/app/message/action/index.php @@ -0,0 +1,2 @@ +isLogin(); + +$touserid= tsIntval($_GET['userid']); + +if($userid == 0 || $touserid == 0) { + exit; +}; + +$msgCount = $new['message']->findCount('message',"(userid='$userid' and touserid='$touserid') or (userid='$touserid' and touserid='$userid')"); + +if($msgCount ==0) { + exit; +}; + +$arrMessage = $new['message']->findAll('message',"(userid='$userid' and touserid='$touserid') or (userid='$touserid' and touserid='$userid')",'addtime desc',null,10); + + +foreach($arrMessage as $key=>$item){ + $arrMessage[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrMessage[$key]['content'] = tsTitle($item['content']); +} + +$arrMessage = array_reverse($arrMessage); + + +//isread设为已读 +$new['message']->update('message',array( + 'userid'=>$touserid, + 'touserid'=>$userid, + 'isread'=>0, +),array( + 'isread'=>1, +)); + +$title = '消æ¯ç›’å­'; + +include template("msgbox"); \ No newline at end of file diff --git a/app/message/action/my.php b/app/message/action/my.php new file mode 100644 index 0000000..3bb97f4 --- /dev/null +++ b/app/message/action/my.php @@ -0,0 +1,19 @@ +findAll('message',array( + 'touserid'=>$strUser['userid'], + 'isread'=>'0', +)); + +foreach($arrMessage as $key=>$item){ + $arrMessage[$key]['content'] = tsTitle($item['content']); + if($item['userid']){ + $arrMessage[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + } +} + +$title = '我的消æ¯ç›’å­'; + +include template("my"); \ No newline at end of file diff --git a/app/message/action/newmsg.php b/app/message/action/newmsg.php new file mode 100644 index 0000000..2275ed4 --- /dev/null +++ b/app/message/action/newmsg.php @@ -0,0 +1,19 @@ +findCount('message',array( + 'touserid'=>$userid, + 'isread'=>0, +)); + +if($newMsgNum == '0'){ + echo '0'; +}else{ + echo $newMsgNum; +} \ No newline at end of file diff --git a/app/message/action/read.php b/app/message/action/read.php new file mode 100644 index 0000000..519ce47 --- /dev/null +++ b/app/message/action/read.php @@ -0,0 +1,18 @@ +isLogin(); +//isread设为已读 +$new['message']->update('message',array( + 'touserid'=>$touserid, + 'isread'=>0, +),array( + 'isread'=>1, +)); + +tsNotice('æ“作æˆåŠŸï¼'); \ No newline at end of file diff --git a/app/message/action/sendbox.php b/app/message/action/sendbox.php new file mode 100644 index 0000000..5b4c92f --- /dev/null +++ b/app/message/action/sendbox.php @@ -0,0 +1,13 @@ +getSimpleUser($userid); + +$title = 'å‘é€ç›’å­'; + +include template("sendbox"); \ No newline at end of file diff --git a/app/message/action/sendmsg.php b/app/message/action/sendmsg.php new file mode 100644 index 0000000..19807ff --- /dev/null +++ b/app/message/action/sendmsg.php @@ -0,0 +1,10 @@ +isLogin(); +$touserid = tsIntval($_POST['touserid']); +$content = tsTrim($_POST['content']); + +$new['message']->sendmsg($userid,$touserid,$content); + +echo '1'; \ No newline at end of file diff --git a/app/message/action/system.php b/app/message/action/system.php new file mode 100644 index 0000000..20d0872 --- /dev/null +++ b/app/message/action/system.php @@ -0,0 +1,32 @@ +isLogin(); + +$arrMessage = $new['message']->findAll('message',array( + //'userid'=>0, + 'touserid'=>$touserid, +),'addtime desc',null,10); + +foreach($arrMessage as $key=>$item){ + $arrMessage[$key]['content'] = tsTitle($item['content']); + if($item['userid']){ + $arrMessage[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + } +} + +//isread设为已读 +$new['message']->update('message',array( + 'userid'=>0, + 'touserid'=>$touserid, + 'isread'=>0, +),array( + 'isread'=>1, +)); + +$title = '系统消æ¯'; + +include template("system"); \ No newline at end of file diff --git a/app/message/action/user.php b/app/message/action/user.php new file mode 100644 index 0000000..6678e31 --- /dev/null +++ b/app/message/action/user.php @@ -0,0 +1,37 @@ +isLogin(); + +$touserid= tsIntval($_GET['touserid']); + + +$strTouser = aac('user')->getSimpleUser($touserid); + +$where = "(userid='$userid' and touserid='$touserid' and `tourl`='') or (userid='$touserid' and touserid='$userid' and `tourl`='')"; + +$msgCount = $new['message']->findCount('message',$where); + +$arrMessage = $new['message']->findAll('message',$where,'addtime desc',null,10); + + +foreach($arrMessage as $key=>$item){ + $arrMessage[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrMessage[$key]['content'] = tsTitle($item['content']); +} + +$arrMessage = array_reverse($arrMessage); + + +//isread设为已读 +$new['message']->update('message',array( + 'userid'=>$touserid, + 'touserid'=>$userid, + 'isread'=>0, +),array( + 'isread'=>1, +)); + +$title = '消æ¯ç›’å­'; + +include template("user"); \ No newline at end of file diff --git a/app/message/class.message.php b/app/message/class.message.php new file mode 100644 index 0000000..666691b --- /dev/null +++ b/app/message/class.message.php @@ -0,0 +1,48 @@ +create('message',array( + 'userid' => $userid, + 'touserid' => $touserid, + 'content' => $content, + 'tourl'=>$tourl, + 'extend'=>$extend, + 'addtime' => time(), + )); + + } + } + + +} \ No newline at end of file diff --git a/app/message/config.php b/app/message/config.php new file mode 100644 index 0000000..c284644 --- /dev/null +++ b/app/message/config.php @@ -0,0 +1,6 @@ + +
    消æ¯ç®¡ç†
    + + + +
    \ No newline at end of file diff --git a/app/message/html/admin/msg_list.html b/app/message/html/admin/msg_list.html new file mode 100644 index 0000000..62f212f --- /dev/null +++ b/app/message/html/admin/msg_list.html @@ -0,0 +1,41 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + + +{loop $arrMsg $key $item} + + + + +{/loop} + + + + + +
    messageiduseridtouseridcontentaddtime æ“作
    {$item['messageid']}{$item['userid']}{$item['touserid']}{$item['content']}{php echo date('Y-m-d H:i:s',$item['addtime'])} + + 删除 +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/message/html/admin/options.html b/app/message/html/admin/options.html new file mode 100644 index 0000000..9c9e123 --- /dev/null +++ b/app/message/html/admin/options.html @@ -0,0 +1,11 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +暂无é…ç½® + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/message/html/friend.html b/app/message/html/friend.html new file mode 100644 index 0000000..053d7af --- /dev/null +++ b/app/message/html/friend.html @@ -0,0 +1,52 @@ +{php include pubTemplate("header")} + +
    + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + + + +
    +
    +
    + +{template menu} + +
    + + + + + +
    + +
    {$pageUrl}
    + + + +
    +
    + + +
    + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/message/html/menu.html b/app/message/html/menu.html new file mode 100644 index 0000000..e44ef85 --- /dev/null +++ b/app/message/html/menu.html @@ -0,0 +1,7 @@ + + +
    \ No newline at end of file diff --git a/app/message/html/msgbox.html b/app/message/html/msgbox.html new file mode 100644 index 0000000..50dff7a --- /dev/null +++ b/app/message/html/msgbox.html @@ -0,0 +1,11 @@ +
    +
      +{loop $arrMessage $key $item} +
    • +{if $item[userid]==$TS_USER[userid]}{$item[user][username]} {php echo date('Y-m-d H:i:s',$item[addtime])}{else}{$item[user][username]} {php echo date('Y-m-d H:i:s',$item[addtime])}{/if} +
      +{$item[content]} +
    • +{/loop} +
    +
    \ No newline at end of file diff --git a/app/message/html/my.html b/app/message/html/my.html new file mode 100644 index 0000000..763b163 --- /dev/null +++ b/app/message/html/my.html @@ -0,0 +1,98 @@ +{php include pubTemplate("header")} +
    + + +
    + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + + + +
    + +
    +
    +{template menu} + + + + +{if $arrMessage} + + + + + + + + + + + + + + {loop $arrMessage $key $item} + + + + + + + {/loop} + + +
    消æ¯çŠ¶æ€æ“作
    +

    {php echo date('Y-m-d H:i:s',$item[addtime])}

    + {if $item['userid']}{$item['user']['username']}{/if} {$item[content]} +
    + {if $item['isread']==1} + 已读 + {else} + 未读 + {/if} + + {if $item['tourl']} + 查看 + {/if} + + {if $item['userid'] && $item['tourl']==''} + èŠå¤© + {/if} + +
    + + + + + + +{else} + +
    暂无消æ¯
    + +{/if} + + + +
    +
    +
    + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/message/html/sendbox.html b/app/message/html/sendbox.html new file mode 100644 index 0000000..ef02cb1 --- /dev/null +++ b/app/message/html/sendbox.html @@ -0,0 +1,8 @@ +
    +

    å’Œ{$strTouser[username]}è¿›è¡ŒåŠæ—¶æ¶ˆæ¯é€šè¯ä¸­

    +

    +

    +å‘é€ + +

    +
    \ No newline at end of file diff --git a/app/message/html/system.html b/app/message/html/system.html new file mode 100644 index 0000000..f0a78b8 --- /dev/null +++ b/app/message/html/system.html @@ -0,0 +1,85 @@ +{php include pubTemplate("header")} + +
    + +
    + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + + + +
    +
    +
    + +{template menu} + +
    + + + + + + + + + + + + + + {loop $arrMessage $key $item} + + + + + + + {/loop} + + +
    消æ¯çŠ¶æ€æ“作
    +

    {php echo date('Y-m-d H:i:s',$item[addtime])}

    + {if $item['userid']}{$item['user']['username']}{/if} {$item[content]} +
    + {if $item['isread']==1} + 已读 + {else} + 未读 + {/if} + + {if $item['tourl']} + 查看 + {/if} + + {if $item['userid'] && $item['tourl']==''} + èŠå¤© + {/if} + +
    + + + + + +
    + + +
    +
    +
    + + +
    + +
    + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/message/html/user.html b/app/message/html/user.html new file mode 100644 index 0000000..d77bb18 --- /dev/null +++ b/app/message/html/user.html @@ -0,0 +1,56 @@ +{php include pubTemplate("header")} +
    +
    + + + +
    +
    + + {php include pubTemplate("my")} + +
    +
    + + +
    +
    +
    + + {template menu} + + +
    +
      +{loop $arrMessage $key $item} +
    • +{if $item[userid]==$TS_USER[userid]}{$item[user][username]} {php echo date('Y-m-d H:i:s',$item[addtime])}{else}{$item[user][username]} {php echo date('Y-m-d H:i:s',$item[addtime])}{/if} +
      +{$item[content]} +
    • +{/loop} +
    +
    + +
    + +
    +

    å’Œ{$strTouser[username]}è¿›è¡ŒåŠæ—¶æ¶ˆæ¯é€šè¯ä¸­

    +

    +

    + å‘é€ + +

    +
    + + +
    +
    +
    + + + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/message/js/extend.func.js b/app/message/js/extend.func.js new file mode 100644 index 0000000..ca9e0c8 --- /dev/null +++ b/app/message/js/extend.func.js @@ -0,0 +1,72 @@ +//å‘é€ç›’å­ +function sendbox(userid){ + +$("#msgbox").html("加载消æ¯ä¸­......") +$("#sendbox").html("加载输入框中......") + + $.ajax({ + type: "GET", + url: siteUrl+"index.php?app=message&ac=msgbox&userid="+userid, + success: function(msg){ + $('#msgbox').html(msg); + + var msgbox=document.getElementById('msgbox'); + if(msgbox.scrollHeight>msgbox.offsetHeight) msgbox.scrollTop=msgbox.scrollHeight-msgbox.offsetHeight+20; + + } + }); + + $.ajax({ + type: "GET", + url: siteUrl+"index.php?app=message&ac=sendbox&userid="+userid, + success: function(msg){ + $('#sendbox').html(msg); + } + }); +} + +//å‘逿¶ˆæ¯ +function sendmsg(userid,touserid){ + var content = $("#boxcontent").val(); + if(content == ''){ + alert("请输入你è¦å‘é€çš„内容ï¼");return false; + } + //清空内容 + $("#boxcontent").attr("value",''); + $("#sendbutton").css('display','none'); + $("#loading").css('display','block'); + + + $.ajax({ + type: "POST", + url: siteUrl+"index.php?app=message&ac=sendmsg", + data: "userid="+userid+"&touserid="+touserid+"&content="+content, + beforeSend: function(){}, + success: function(result){ + if(result == '1'){ + $("#loading").css('display','none'); + $("#sendbutton").css('display','block'); + + window.location.reload(); + + } + + } + }); +} + +//系统消æ¯ç›’å­ +function systembox(userid){ + $("#sendbox").html(""); + $("#msgbox").html("加载系统消æ¯ä¸­......") + $.ajax({ + type: "GET", + url: siteUrl+"index.php?app=message&ac=systembox&userid="+userid, + success: function(msg){ + $('#msgbox').html(msg); + var msgbox=document.getElementById('msgbox'); + if(msgbox.scrollHeight>msgbox.offsetHeight) msgbox.scrollTop=msgbox.scrollHeight-msgbox.offsetHeight+20; + + } + }); +} \ No newline at end of file diff --git a/app/message/skin/style.css b/app/message/skin/style.css new file mode 100644 index 0000000..8cf5f8e --- /dev/null +++ b/app/message/skin/style.css @@ -0,0 +1,35 @@ +/*imbox*/ +.imbox{} +.leftbar{} +.leftbar .bartitle{background:#dae9ef;padding:5px;} +.leftbar ul{} +.leftbar ul, .leftbar ul li{list-style: none;margin:0;padding:0;} +.leftbar ul li{line-height:23px;padding-left:10px;} + +.msgbox{overflow:hidden;} +.msgbox ul, .msgbox ul li{list-style: none;margin:0;padding:0;} +.msgbox ul{} +.msgbox ul li{width:175px;float:left;line-height:23px;padding-left:10px;} +.mysend{background:#f5f8fa} + +.system{overflow:hidden;} +.system ul, .system ul li{list-style: none;margin:0;padding:0;} +.system ul{} +.system ul li{line-height:23px;padding-left:10px;} + +.sendbox{padding:0px 20px 20px 0px;overflow:hidden;} +.sendbox p{} +.sendbox textarea{width:100%;height:50px;} + +.boxabout{line-height:23px;padding:0 10px;} + +.usermsg{overflow:hidden;} +.usermsg ul, .usermsg ul li{list-style: none;margin:0;padding:0;} +.usermsg ul{} +.usermsg ul li{line-height:23px;padding:0 10px;} + + +.newmsg{} +.newmsg ul, .newmsg ul li{list-style: none;margin:0;padding:0;} +.newmsg ul{} +.newmsg ul li{padding:5px 10px;} \ No newline at end of file diff --git a/app/message/skins/default/loading.gif b/app/message/skins/default/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..d43340d5704e7934f453a34a54cf8c63e3c932a0 GIT binary patch literal 1160 zcmZ?wbhEHbOkv<;Sj5V3&d~5&a`L%3bIzSR_a6)x7#M)G;(u;G*N|Xm#{gF&Jp*P& zps3b_N|Fn*pSqfjQe^m-nA{rj{=|M7-aAD;8MNQ0` z3Dqohuvy-~koqJr$st=+A=|d&zl(aqeTfP8I2S~;cda?OO6S2O1Fgj-S(_~{^<7c^ z8`pOurETS12geHnAuO_mo_8l*|6;hW&m$#iV}jXi7KHg+z?h(=`64tnUyjD+YtYzy yBO04;Lu2#ZfaXKfIxKz40@M1@YjGb^8A(j*0YI~$84hd~A27om3Nyr+;j97fAGZVm literal 0 HcmV?d00001 diff --git a/app/message/skins/default/style.css b/app/message/skins/default/style.css new file mode 100644 index 0000000..abecac4 --- /dev/null +++ b/app/message/skins/default/style.css @@ -0,0 +1,35 @@ +/*imbox*/ +.imbox{} +.leftbar{} +.leftbar .bartitle{background:#dae9ef;padding:5px;} +.leftbar ul{} +.leftbar ul, .leftbar ul li{list-style: none;margin:0;padding:0;} +.leftbar ul li{line-height:23px;padding-left:10px;} + +.msgbox{overflow:hidden;} +.msgbox ul, .msgbox ul li{list-style: none;margin:0;padding:0;} +.msgbox ul{} +.msgbox ul li{width:175px;float:left;line-height:23px;padding-left:10px;} +.mysend{background:#f5f8fa} + +.system{overflow:hidden;} +.system ul, .system ul li{list-style: none;margin:0;padding:0;} +.system ul{} +.system ul li{line-height:23px;padding-left:10px;} + +.sendbox{padding:0 20px 20px 20px;overflow:hidden;} +.sendbox p{} +.sendbox textarea{width:350px;height:50px;} + +.boxabout{line-height:23px;padding:0 10px;} + +.usermsg{overflow:hidden;} +.usermsg ul, .usermsg ul li{list-style: none;margin:0;padding:0;} +.usermsg ul{} +.usermsg ul li{line-height:23px;padding:0 10px;} + + +.newmsg{} +.newmsg ul, .newmsg ul li{list-style: none;margin:0;padding:0;} +.newmsg ul{} +.newmsg ul li{padding:5px 10px;} \ No newline at end of file diff --git a/app/message/skins/default/system.gif b/app/message/skins/default/system.gif new file mode 100644 index 0000000000000000000000000000000000000000..9846bfbcf859af966843413dff48f36bf6263119 GIT binary patch literal 573 zcmZ?wbhEHb6krfwc*ekR^!mq(_dlydEmDr0uM)LTJ7t}A(kj!;_1;xG0vqUiJJR5xaVw0@9C(?7ZaylPM>o% zYwp$Tc~_?#{JitVuRXVZ9k~5#-_0M#ZoWTz@8i8Uf8KxlXV!Vod&+~@X%}OsUMSl5 zA$P&GuDu^Scfar5|8er+&(n{7U4HJ{rfWa9U;nw|#?PxSe&2ih=gZH3am!vOu6&iV z{%ys!4-Gp%Og#K)_Ni~HE`8f^<6GgDcMZGW%{uvM*`*&3KKy(5@n6@Gk54}R{q*zS zmtX&W{r&&p=fBUt{(bxN|NsAgKnw&7v;m4gSr{1@k{EPA#)IO7fqiyEQd4tFYg?17 zqzq$wi*!_osZFzZn?ziEgqcp0_|z7O=)}Ze58b&<3{nzW;foW4VzjkQnz<4U*C%=< zS|(^Tb1v4~ZLu#wHEEuRfxen+Sge_OqLsVwX>oQt2W9_I7dOR7O=q!YZdMi+Ut7OG xc{z0<<8}dSp8y3Tl@)FLll}-OE^%7!-^!*_D4@c$)Qy9OBjLgdrG*X*)&O~V0h9m$ literal 0 HcmV?d00001 diff --git a/app/my/about.php b/app/my/about.php new file mode 100644 index 0000000..46d02aa --- /dev/null +++ b/app/my/about.php @@ -0,0 +1,17 @@ + '我的社区', + 'version' => '1.2', + 'desc' => '我的社区', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '0', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/my/action/admin.php b/app/my/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/my/action/admin.php @@ -0,0 +1,10 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/my/action/index.php b/app/my/action/index.php new file mode 100644 index 0000000..3ca1a24 --- /dev/null +++ b/app/my/action/index.php @@ -0,0 +1,41 @@ +findAll('group_user',array( + 'userid'=>$strUser['userid'], +),null,'groupid',12); + +foreach($arrGroupsList as $key=>$item){ + $strGroup = aac('group')->getOneGroup($item['groupid']); + if($strGroup){ + $arrGroup[] = $strGroup; + }else{ + $new['my']->delete('group_user',array( + 'userid'=>$strUser['userid'], + 'groupid'=>$item['groupid'], + )); + } +} + +#加入的å°ç»„æ•° +$joinGroupNum = $new['my']->findCount('group_user',array( + 'userid'=>$strUser['userid'], +)); + +//æˆ‘çš„å¸–å­ +$arrTopic = $new['my']->findAll('topic',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,10); + + +//我的文章 +$arrArticle = $new ['my']->findAll ( 'article', array ( + 'userid' => $strUser['userid'], +), 'addtime desc', null, 10 ); + + + +$title = '我的社区'; +include template("index"); \ No newline at end of file diff --git a/app/my/action/invite.php b/app/my/action/invite.php new file mode 100644 index 0000000..c88ac98 --- /dev/null +++ b/app/my/action/invite.php @@ -0,0 +1,10 @@ +findAll('user_info',array( + 'fuserid'=>$userid, +),'addtime desc','userid,username'); + +$title = '我的邀请'; +include template('invite'); \ No newline at end of file diff --git a/app/my/action/score.php b/app/my/action/score.php new file mode 100644 index 0000000..60be7e7 --- /dev/null +++ b/app/my/action/score.php @@ -0,0 +1,20 @@ +'')); +$lstart = $page*50-50; + +$arrScore = $new['my']->findAll('user_score_log',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',50'); + +$scoreNum = $new['my']->findCount('user_score_log',array( + 'userid'=>$strUser['userid'], +)); +$pageUrl = pagination($scoreNum, 50, $page, $url); + +$title = '我的积分'; +include template('score'); \ No newline at end of file diff --git a/app/my/action/setting.php b/app/my/action/setting.php new file mode 100644 index 0000000..aa68965 --- /dev/null +++ b/app/my/action/setting.php @@ -0,0 +1,278 @@ + 20) { + + tsNotice("用户å长度必须在4到20字符之间!"); + + } + + if($username != $strUser['username']){ + + if($TS_APP['banuser']){ + + $arrUserName = explode('|',$TS_APP['banuser']); + if(in_array($username,$arrUserName)){ + tsNotice("用户åå·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªç”¨æˆ·åï¼"); + } + + } + + $isUserName = $new['my']->findCount('user_info',array( + 'username'=>$username, + )); + + if($isUserName > 0) { + + tsNotice("用户åå·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªç”¨æˆ·åï¼"); + + } + } + + if(tsIntval($TS_USER['isadmin'])==0){ + //过滤内容开始 + $username = antiWord($username); + $signed = antiWord($signed); + $phone = antiWord($phone); + $about = antiWord($about); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + + //ç­¾åä¸­ç¦æ­¢å†™URL,Email + /* + if(filter_var($signed, FILTER_SANITIZE_URL) || filter_var($signed, FILTER_VALIDATE_EMAIL)){ + tsNotice('ç­¾åä¸åˆæ³•ï¼è¯·ä¿®æ”¹åŽå†æäº¤ï¼'); + } + + if(filter_var($about, FILTER_SANITIZE_URL) || filter_var($about, FILTER_VALIDATE_EMAIL)){ + tsNotice('个人介ç»ä¸åˆæ³•ï¼è¯·ä¿®æ”¹åŽå†æäº¤ï¼'); + } + */ + + $username = str_replace('.','',$username); + + //æ›´æ–°æ•°æ® + $new['my']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'username' => $username, + 'sex' => $sex, + 'signed' => $signed, + 'phone' => $phone, + 'about' => $about, + )); + + #æ›´æ–°session用户å + $_SESSION['tsuser']['username'] = $username; + + tsNotice("基本资料更新æˆåŠŸï¼"); + + break; + + + case "face": + + + $_SESSION['tsuser']['face'] = $strUser['face']; + + + $title = '头åƒè®¾ç½®'; + + include template("setting_face"); + + break; + //æ‰§è¡Œä¸Šä¼ å¤´åƒ + case "facedo": + + if($_FILES['photo']){ + + //上传 + $arrUpload = tsUpload($_FILES['photo'],$userid,'user',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new['my']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>$arrUpload['path'], + 'face'=>$arrUpload['url'], + 'uptime'=>time(), + )); + + + + if($TS_SITE['file_upload_type']=='0' || $TS_SITE['file_upload_type']==''){ + $filesize=abs(filesize('uploadfile/user/'.$arrUpload['url'])); + if($filesize<=0){ + $new['my']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>'', + 'face'=>'', + )); + tsNotice('上传头åƒå¤±è´¥ï¼Œä½ å¯ä»¥ä½¿ç”¨ç³»ç»Ÿé»˜è®¤å¤´åƒï¼'); + } + } + + tsDimg($arrUpload['url'],'user','120','120',$arrUpload['path']); + + header('Location: '.tsUrl('my','setting',array('ts'=>'face'))); + + + }else{ + tsNotice('头åƒä¿®æ”¹å¤±è´¥'); + } + + } + + break; + + //è®¾ç½®å¯†ç  + case "pwd": + + $title = '密ç ä¿®æ”¹'; + include template("setting_pwd"); + + break; + + case "pwddo": + + $theUser = $new['my']->find('user',array( + 'userid'=>$strUser['userid'], + )); + + $oldpwd = tsTrim($_POST['oldpwd']); + $newpwd = tsTrim($_POST['newpwd']); + $renewpwd = tsTrim($_POST['renewpwd']); + + if($oldpwd == '' || $newpwd=='' || $renewpwd=='') tsNotice("所有项都ä¸èƒ½ä¸ºç©ºï¼"); + + if($newpwd != $renewpwd) tsNotice('两次输入新密ç å¯†ç ä¸ä¸€æ ·ï¼'); + + //æ›´æ–°å¯†ç  + if(md5($theUser['salt'].$oldpwd) != $theUser['pwd']) tsNotice("旧密ç è¾“入有误ï¼"); + + $salt = md5(rand()); + + $new['my']->update('user',array( + 'userid'=>$strUser['userid'], + ),array( + 'pwd'=>md5($salt.$newpwd), + 'salt'=>$salt, + )); + + tsNotice("密ç ä¿®æ”¹æˆåŠŸï¼"); + + break; + + //修改登录Email + case "email": + $title = '修改登录Email'; + include template('setting_email'); + break; + + case "emaildo": + + $email = tsTrim($_POST['email']); + + if($email=='') tsNotice('Emailä¸èƒ½ä¸ºç©ºï¼'); + + if(valid_email($email) == false) tsNotice('Email输入有误ï¼'); + + if($email != $strUser['email']){ + $emailNum = $new['my']->findCount('user',array( + 'email'=>$email, + )); + + if($emailNum > 0) tsNotice("Emailå¸å·å·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªå…¶ä»–Emailå¸å·ï¼"); + + //æ›´æ–°Email + $new['my']->update('user',array( + 'userid'=>$strUser['userid'], + ),array( + 'email'=>$email, + )); + + //修改信æ¯å¹¶å°†ç”¨æˆ·è®¾ä¸ºæœªéªŒè¯çŠ¶æ€ + $new['my']->update('user_info',array( + 'userid'=>$strUser['userid'], + ),array( + 'email'=>$email, + 'isverify'=>'0', + )); + + tsNotice('Emailå¸å·ä¿®æ”¹æˆåŠŸï¼Œä¸‹æ¬¡è¯·ç”¨'.$email.'登录网站ï¼'); + + }else{ + tsNotice('æ–°Emailå¸å·ä¸èƒ½å’Œæ—§Emailå¸å·ä¸€æ ·ï¼'); + } + + break; + + //设置常居地 + case "city": + + $title = '常居地修改'; + include template("setting_city"); + break; + + case "citydo": + + $province = tsTrim($_POST['province']); + $city = tsTrim($_POST['city']); + + + $new['my']->update('user_info',array( + 'userid'=>$userid, + ),array( + + 'province'=>$province, + 'city'=>$city, + + )); + + tsNotice("常居地更新æˆåŠŸï¼"); + + break; + + //个人标签 + case "tag": + + $arrTag = aac('tag')->getObjTagByObjid('user','userid',$userid); + + $title = '个人标签修改'; + include template("setting_tag"); + break; + + case "tagdo": + break; + +} \ No newline at end of file diff --git a/app/my/class.my.php b/app/my/class.my.php new file mode 100644 index 0000000..14fe952 --- /dev/null +++ b/app/my/class.my.php @@ -0,0 +1,18 @@ + +
    + +
    暂无é…ç½®
    +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/my/html/index.html b/app/my/html/index.html new file mode 100644 index 0000000..b8774de --- /dev/null +++ b/app/my/html/index.html @@ -0,0 +1,104 @@ +{php include pubTemplate("header")} + +
    + + + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + + + +
    + + +
    +
    我的å°ç»„
    +
    + + +
    +
    已加入{$joinGroupNum}个å°ç»„
    + 创建å°ç»„ +
    + +
    + + {loop $arrGroup $key $item} +
    +
    + {$item['groupname']} +
    +
    {$item['groupname']}
    +
    +
    +
    + {/loop} + + +
    + +
    +
    + + +
    +
    我的帖å­
    +
    + + + + + + + {loop $arrTopic $key $item} + + {/loop} + +
    å‘布时间标题æµè§ˆ/评论æ“作
    {php echo date('Y-m-d',$item['addtime'])}{php echo tsTitle($item['title'])}{$item['count_view']}/{$item['count_comment']}修改
    + +
    +
    + + +
    +
    我的文章
    +
    + + + + + + + {loop $arrArticle $key $item} + + {/loop} + +
    å‘布时间标题æµè§ˆ/评论æ“作
    {php echo date('Y-m-d',strtotime($item['addtime']))}{tsTitle($item['title'])}{$item['count_view']}/{$item['count_comment']}修改
    + +
    +
    + + +
    + + + + +
    + + + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/invite.html b/app/my/html/invite.html new file mode 100644 index 0000000..80b993a --- /dev/null +++ b/app/my/html/invite.html @@ -0,0 +1,70 @@ +{php include pubTemplate("header")} +
    + + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    + + +
    +
    我的邀请
    +
    + + +
    + +
    + +
    +
    + + + + + + + + + + + + + + + {loop $arrInviteUser $key $item} + + + + + + {/loop} + + + +
    用户ID用户å加入时间
    {$item['userid']}{$item['username']}{php echo date('Y-m-d H:i:s',$item['addtime'])}
    + + + + +
    +
    +
    + + +
    +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/score.html b/app/my/html/score.html new file mode 100644 index 0000000..7edd7bd --- /dev/null +++ b/app/my/html/score.html @@ -0,0 +1,56 @@ +{php include pubTemplate("header")} +
    + + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    + + +
    +
    我的积分
    +
    + + + + + + + + + + + {loop $arrScore $key $item} + + {/loop} + + + +
    åç§°ç§¯åˆ†çŠ¶æ€æ—¶é—´
    {$item['scorename']}{$item['score']}{if $item['status']==0}+{else}-{/if}{php echo date('Y-m-d H:i:s',$item['addtime'])}
    + +
    +
    {$pageUrl}
    + + + + + + +
    +
    +
    + + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_base.html b/app/my/html/setting_base.html new file mode 100644 index 0000000..b025fb6 --- /dev/null +++ b/app/my/html/setting_base.html @@ -0,0 +1,85 @@ +{php include pubTemplate("header")} +
    + + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    + + +
    +
    + + + +{template setting_menu} + + + +
    +
    +
    + + +
    + +
    + + +
    + +
    + +
    + ä¿å¯† + ç”· + 女 +
    + +
    + + +
    + + +
    + + +
    + + +
    + + + + + + + +
    + + +
    +
    +
    + + + + +
    +
    +
    + + +
    +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_city.html b/app/my/html/setting_city.html new file mode 100644 index 0000000..4507102 --- /dev/null +++ b/app/my/html/setting_city.html @@ -0,0 +1,75 @@ +{php include pubTemplate("header")} + + + +
    +
    + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    +
    +
    + + + +{template setting_menu} + + + + +
    +
    +
    + +
    + +
    + + +
    +

    +

    +
    + +
    + + + +
    + +
    +
    +
    + + + +
    +
    +
    + + +
    + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_cut.html b/app/my/html/setting_cut.html new file mode 100644 index 0000000..230ee3a --- /dev/null +++ b/app/my/html/setting_cut.html @@ -0,0 +1,96 @@ +{php include pubTemplate("header")} + + + + +
    +{template set_menu} + + +
    + +

    è£åˆ‡å¤´åƒ

    + +
    + +
    + +
    + + + + + +
    + + 返回头åƒè®¾ç½® + +
    + +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_email.html b/app/my/html/setting_email.html new file mode 100644 index 0000000..af0bec6 --- /dev/null +++ b/app/my/html/setting_email.html @@ -0,0 +1,177 @@ +{php include pubTemplate("header")} + +
    + +
    + +
    +
    + + {php include pubTemplate("my")} + +
    +
    + + +
    +
    +
    + + + + {template setting_menu} + + + +
    +
    +
    + + + {if $TS_SITE['regtype']=='0' || $TS_SITE['regtype']=='2'} +
    + +
    + +
    {$strUser['email']}
    +
    + +
    + + +
    + + + + + (修改Email登录å¸å·å°†éœ€è¦é‡æ–°éªŒè¯Email) + +
    + {/if} + + {if $TS_SITE['regtype']=='2'} +
    + {/if} + + + {if $TS_SITE['regtype']=='1' || $TS_SITE['regtype']=='2'} +
    + +
    + +
    {$strUser['phone']}
    + +
    + +
    + + +
    + +
    + + +
    +
    +
    + + 点击刷新验è¯ç  + +
    +
    + +
    + +
    + + +
    +
    +
    +
    + +
    + + + + + + +
    + {/if} + + +
    +
    +
    + + +
    +
    +
    + +
    + +
    + + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_face.html b/app/my/html/setting_face.html new file mode 100644 index 0000000..59953e1 --- /dev/null +++ b/app/my/html/setting_face.html @@ -0,0 +1,68 @@ +{php include pubTemplate("header")} +
    + + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    +
    +
    + + + +{template setting_menu} + + + + +
    +
    +
    + +{if $TS_SITE['isface']=='1' && $strUser['face'] == SITE_URL.'public/images/user_large.jpg'} + +{/if} + + +
    + +
    +

    {$strUser['username']}

    +
    + +
    + +

    +
    + + + + + +
    + +
    +
    +
    + + + + + +
    +
    +
    + + +
    +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_menu.html b/app/my/html/setting_menu.html new file mode 100644 index 0000000..3b923d6 --- /dev/null +++ b/app/my/html/setting_menu.html @@ -0,0 +1,10 @@ + + +
    \ No newline at end of file diff --git a/app/my/html/setting_pwd.html b/app/my/html/setting_pwd.html new file mode 100644 index 0000000..af0026b --- /dev/null +++ b/app/my/html/setting_pwd.html @@ -0,0 +1,64 @@ +{php include pubTemplate("header")} + +
    + +
    + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    +
    +
    + + +{template setting_menu} + + + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +
    + + + +
    +
    +
    + +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/html/setting_tag.html b/app/my/html/setting_tag.html new file mode 100644 index 0000000..f2c9b89 --- /dev/null +++ b/app/my/html/setting_tag.html @@ -0,0 +1,85 @@ +{php include pubTemplate("header")} + +
    + +
    + + +
    +
    + +{php include pubTemplate("my")} + +
    +
    + +
    +
    +
    + + + +{template setting_menu} + + + + +
    +
    +
    + + +
    + {loop $arrTag $key $item} + {$item[tagname]} + {/loop} +
    + + + + + + +
    + + + + + + + +
    + +
    +
    +
    + + + + + +
    +
    +
    + + + +
    + + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/my/icon.png b/app/my/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2193e4779c58cf623c3d96010babe3b573011b5 GIT binary patch literal 4522 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 '相册', + 'version' => '1.2', + 'desc' => '相册APP', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1', +); \ No newline at end of file diff --git a/app/photo/action/admin.php b/app/photo/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/photo/action/admin.php @@ -0,0 +1,10 @@ +findAll('photo_album',null,'albumid desc',null,$lstart.',10'); + + + $albumNum = $new['photo']->findCount('photo_album'); + + + $pageUrl = pagination($albumNum, 10, $page, $url); + + include template("admin/album_list"); + break; + + //图片 + case "photo": + $albumid = tsIntval($_GET['albumid']); + + $page = tsIntval($_GET['page'],1); + + $lstart = $page*10-10; + + $url = SITE_URL.'index.php?app=photo&ac=admin&mg=album&ts=photo&albumid='.$albumid.'&page='; + + $arrPhoto = $db->fetch_all_assoc("select * from ".dbprefix."photo where albumid='$albumid' limit $lstart,10"); + + $photo_num = $db->once_fetch_assoc("select count(photoid) from ".dbprefix."photo where albumid='$albumid'"); + + $pageUrl = pagination($photo_num['count(photoid)'], 10, $page, $url); + + include template("admin/album_photo"); + + break; + + //删除相册 + case "del_album": + $albumid = tsIntval($_GET['albumid']); + + $new['photo']->deletePhotoAlbum($albumid); + + qiMsg("相册删除æˆåŠŸï¼"); + + break; + + //删除照片 + case "del_photo": + $photoid = tsIntval($_GET['photoid']); + + $strPhoto = $new['photo']->find('photo',array( + 'photoid'=>$photoid, + )); + + $albumid = $strPhoto['albumid']; + + $new['photo']->deletePhoto($strPhoto); + + $count_photo = $db->once_num_rows("select * from ".dbprefix."photo where albumid='$albumid'"); + + $db->query("update ".dbprefix."photo_album set `count_photo`='$count_photo' where albumid='$albumid'"); + + qiMsg("图片删除æˆåŠŸ!"); + + break; + + //设为å°é¢ + case "face": + $photoid = tsIntval($_GET['photoid']); + $strPhoto = $db->once_fetch_assoc("select * from ".dbprefix."photo where photoid='$photoid'"); + + $albumid = $strPhoto['albumid']; + $albumface = $strPhoto['photourl']; + + $db->query("update ".dbprefix."photo_album set `albumface`='$albumface' where albumid='$albumid'"); + + qiMsg("å°é¢è®¾ç½®æˆåŠŸï¼"); + + break; + + //统计 + case "count": + + $arrAlbum = $db->fetch_all_assoc("select albumid from ".dbprefix."photo_album"); + + foreach($arrAlbum as $item){ + $albumid = $item['albumid']; + $count_photo = $db->once_num_rows("select photoid from ".dbprefix."photo where albumid='$albumid'"); + $db->query("update ".dbprefix."photo_album set `count_photo`='$count_photo' where albumid='$albumid'"); + } + + qiMsg("统计完æˆï¼"); + + break; + + //推è相册 + case "isrecommend": + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $db->once_fetch_assoc("select isrecommend from ".dbprefix."photo_album where `albumid`='$albumid'"); + + if($strAlbum['isrecommend']==0){ + $db->query("update ".dbprefix."photo_album set `isrecommend`='1' where `albumid`='$albumid'"); + }else{ + $db->query("update ".dbprefix."photo_album set `isrecommend`='0' where `albumid`='$albumid'"); + } + + qiMsg("æ“作æˆåŠŸï¼"); + + break; + + //是å¦å®¡æ ¸ + case "isaudit": + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['isaudit']==0){ + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'isaudit'=>1, + )); + + }else{ + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'isaudit'=>0, + )); + } + + qiMsg("æ“作æˆåŠŸï¼"); + + break; + + //删除没有图片的相册 + case "nophoto": + + $arrAlbum = $new['photo']->findAll('photo_album',"`count_photo`=0"); + foreach($arrAlbum as $key=>$item){ + + $isPhoto = $new['photo']->findCount('photo',array( + 'albumid'=>$item['albumid'], + )); + + if($isPhoto == 0){ + + $new['photo']->delete('photo_album',array( + + 'albumid'=>$item['albumid'], + + )); + + }else{ + + $count_photo = $new['photo']->findCount('photo',array( + + 'albumid'=>$item['albumid'], + + )); + + $new['photo']->update('photo_album',array( + 'albumid'=>$item['albumid'], + ),array( + + 'count_photo'=>$count_photo, + + )); + + } + + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + case "isaudit": + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $new['attach']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['isaudit']==1){ + $new['attach']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'isaudit'=>0 + )); + } + + if($strAlbum['isaudit']==0){ + $new['attach']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'isaudit'=>1 + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/photo/action/admin/comment.php b/app/photo/action/admin/comment.php new file mode 100644 index 0000000..6124a98 --- /dev/null +++ b/app/photo/action/admin/comment.php @@ -0,0 +1,73 @@ +$userid, + ); + } + + if($photoid){ + $where = array( + 'photoid'=>$photoid, + ); + } + + $arrComment = $new['photo']->findAll('photo_comment',$where,'addtime desc',null,$lstart.',10'); + + $commentNum = $new['photo']->findCount('photo_comment',$where); + + $pageUrl = pagination($commentNum, 10, $page, $url); + + include template("admin/comment_list"); + + break; + + + case "delete": + + $commentid = intval($_GET['commentid']); + + $strComment = $new['photo']->find('photo_comment',array( + 'commentid'=>$commentid, + )); + + $new['photo']->delete('photo_comment',array( + 'commentid'=>$commentid, + )); + + #统计评论数 + $count_comment = $new['photo']->findCount('photo_comment',array( + 'photoid'=>$strComment['photoid'], + )); + + //更新评论数 + $new['photo']->update('photo',array( + 'photoid'=>$strComment['photoid'], + ),array( + 'count_comment'=>$count_comment, + )); + + + #处ç†ç§¯åˆ† + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'], $TS_URL['ts'],$strComment['userid'],$TS_URL['mg']); + + qiMsg('删除æˆåŠŸ'); + + break; + + +} \ No newline at end of file diff --git a/app/photo/action/admin/options.php b/app/photo/action/admin/options.php new file mode 100644 index 0000000..7d730b2 --- /dev/null +++ b/app/photo/action/admin/options.php @@ -0,0 +1,26 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'photo',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/photo/action/admin/photo.php b/app/photo/action/admin/photo.php new file mode 100644 index 0000000..915a39e --- /dev/null +++ b/app/photo/action/admin/photo.php @@ -0,0 +1,40 @@ +fetch_all_assoc("select * from ".dbprefix."photo order by addtime desc limit $lstart,10"); + + $photoNum = $db->once_fetch_assoc("select count(*) from ".dbprefix."photo"); + + $pageUrl = pagination($photoNum['count(*)'], 10, $page, $url); + + include template("admin/photo_list"); + break; + + //推è图片 + case "isrecommend": + + $photoid = tsIntval($_GET['photoid']); + + $strPhoto = $db->once_fetch_assoc("select isrecommend from ".dbprefix."photo where `photoid`='$photoid'"); + + if($strPhoto['isrecommend']==0){ + $db->query("update ".dbprefix."photo set `isrecommend`='1' where `photoid`='$photoid'"); + }else{ + $db->query("update ".dbprefix."photo set `isrecommend`='0' where `photoid`='$photoid'"); + } + + qiMsg("æ“作æˆåŠŸï¼"); + + break; + +} \ No newline at end of file diff --git a/app/photo/action/ajax.php b/app/photo/action/ajax.php new file mode 100644 index 0000000..5729c9d --- /dev/null +++ b/app/photo/action/ajax.php @@ -0,0 +1,157 @@ +findCount('photo_album',array( + + 'userid'=>$userid, + + )); + + if($isAlbum == 0){ + + $new['photo']->create('photo_album',array( + + 'userid'=>$userid, + 'albumname'=>'默认相册', + 'albumdesc'=>'默认相册', + 'addtime'=>time(), + 'uptime'=>time(), + + + )); + + } + + $arrAlbum = $new['photo']->findAll('photo_album',array( + 'userid'=>$userid, + )); + + + include template("ajax/album"); + + break; + //图片 + case "photo": + + $albumid = tsIntval($_GET['albumid']); + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + $page = tsIntval($_GET['page'],1); + $url = SITE_URL."index.php?app=photo&ac=ajax&ts=photo&albumid=".$albumid."&page="; + $lstart = $page*6-6; + + $arrPhoto = $new['photo']->findAll('photo',array( + 'albumid'=>$albumid, + ),'photoid desc',null,$lstart.',6'); + + $photoNum = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $pageUrl = pagination($photoNum, 6, $page, $url); + + include template("ajax/photo"); + break; + //创建相册 + case "create": + include template("ajax/create"); + break; + + case "create_do": + $albumname = t($_POST['albumname']); + + if($albumname == '') qiMsg("相册åç§°ä¸èƒ½ä¸ºç©ºï¼"); + + $albumdesc = h($_POST['albumdesc']); + $addtime = time(); + $uptime = time(); + + $albumid = $new['photo']->create('photo_album',array( + + 'userid'=>$userid, + 'albumname'=>$albumname, + 'albumdesc'=>$albumdesc, + 'addtime'=>time(), + 'uptime'=>time(), + + )); + + header("Location: ".SITE_URL."index.php?app=photo&ac=ajax&ts=flash&albumid=".$albumid); + break; + + // + case "info": + $albumid = tsIntval($_GET['albumid']); + $addtime = tsIntval($_GET['addtime']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid'] != $userid) qiMsg("éžæ³•æ“作ï¼"); + + //统计 + $count_photo = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'count_photo'=>$count_photo, + )); + + //添加相册å°é¢ + if($strAlbum['albumface'] == ''){ + + $strPhoto = $new['photo']->find('photo',"`albumid`='$albumid' and `userid`='$userid' and `addtime`>'$addtime'"); + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'albumface'=>$strPhoto['photourl'], + )); + + } + + $arrPhoto = $new['photo']->findAll('photo',"`albumid`='$albumid' and `userid`='$userid' and `addtime`>'$addtime'"); + + include template("ajax/info"); + break; +} \ No newline at end of file diff --git a/app/photo/action/album.php b/app/photo/action/album.php new file mode 100644 index 0000000..8d5eeb9 --- /dev/null +++ b/app/photo/action/album.php @@ -0,0 +1,299 @@ +find('photo_album',array( + 'albumid'=>$albumid, + )); + //404 + if($strAlbum==''){ + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; + } + + if($strAlbum['isaudit']==1){ + tsNotice('内容审核中...'); + } + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + + $page = tsIntval($_GET['page'],1); + + $url = tsUrl('photo','album',array('id'=>$albumid,'page'=>'')); + + $lstart = $page*20-20; + + $strUser = aac('user')->getSimpleUser($strAlbum['userid']); + + $arrPhoto = $new['photo']->findAll('photo',array( + 'albumid'=>$albumid, + ),'photoid desc',null,$lstart.',20'); + + foreach($arrPhoto as $key=>$item){ + $arrPhoto[$key]['photodesc'] = tsTitle($item['photodesc']); + } + + $photoNum = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $pageUrl = pagination($photoNum, 20, $page, $url); + + + $title = $strAlbum['albumname']; + + + include template("album"); + + $new['photo']->update('photo_album',array( + 'albumid'=>$strAlbum['albumid'], + ),array( + 'count_view'=>$strAlbum['count_view']+1, + )); + + + break; + + + //修改相册 + case "edit": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid'] == $userid || $TS_USER['isadmin']==1) { + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + $title = '修改相册属性-'.$strAlbum['albumname']; + include template("album_edit"); + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + break; + + case "editdo": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_POST['albumid']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid']==$userid || $TS_USER['isadmin']==1){ + + $albumname = tsTrim($_POST['albumname']); + if($albumname == '') qiMsg("相册åç§°ä¸èƒ½ä¸ºç©ºï¼"); + + $albumdesc = tsTrim($_POST['albumdesc']); + + + if($TS_USER['isadmin']==0){ + //过滤内容开始 + $albumname = antiWord($albumname); + $albumdesc = antiWord($albumdesc); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $new['photo']->update('photo_album',array( + 'userid'=>$strAlbum['userid'], + 'albumid'=>$strAlbum['albumid'], + ),array( + 'albumname'=>$albumname, + 'albumdesc'=>$albumdesc, + )); + + header("Location: ".tsUrl('photo','album',array('id'=>$albumid))); + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + break; + + //批é‡ä¿®æ”¹ + case "info": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_GET['albumid']); + $addtime = tsIntval($_GET['addtime']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + if($strAlbum['userid'] != $userid) { + + tsNotice('éžæ³•æ“作'); + + } + + //统计 + $count_photo = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'count_photo'=>$count_photo, + )); + + //添加相册å°é¢ + if($strAlbum['albumface'] == ''){ + $strPhoto = $new['photo']->find('photo',array( + 'albumid'=>$strAlbum['albumid'], + )); + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'path'=>$strPhoto['path'], + 'albumface'=>$strPhoto['photourl'], + )); + } + + if($addtime){ + $arr = array( + 'albumid'=>$albumid, + 'addtime'=>date('Y-m-d H:i:s',$addtime), + ); + }else{ + $arr = array( + 'albumid'=>$albumid, + ); + } + + $arrPhoto = $new['photo']->findAll('photo',$arr); + + foreach($arrPhoto as $key=>$item){ + $arrPhoto[$key]['title'] = tsTitle($item['title']); + $arrPhoto[$key]['photodesc'] = tsTitle($item['photodesc']); + } + + + $title = '批é‡ä¿®æ”¹-'.$strAlbum['albumname']; + include template("album_info"); + break; + + //批é‡ä¿®æ”¹æ‰§è¡Œ + case "info_do": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_POST['albumid']); + + $albumface = tsIntval($_POST['albumface']); + + $arrPhotoId = $_POST['photoid']; + $arrPhotoDesc = $_POST['photodesc']; + + + if(is_array($arrPhotoId)==false || is_array($arrPhotoDesc)==false){ + tsNotice('éžæ³•æ“作'); + } + + + if($TS_USER['isadmin']==0){ + + foreach($arrPhotoDesc as $key=>$item){ + + //过滤内容开始 + $arrPhotoDesc[$key] = antiWord($item); + //è¿‡æ»¤å†…å®¹ç»“æŸ + + } + + } + + foreach($arrPhotoDesc as $key=>$item){ + + $item = str_replace('../','',$item); + $item = str_replace('/','',$item); + + if($item){ + + $photoid = tsIntval($arrPhotoId[$key]); + + $new['photo']->update('photo',array( + 'photoid'=>$photoid, + 'userid'=>$userid, + ),array( + + 'photodesc'=>tsTrim($item), + + )); + + } + } + + //更新相册å°é¢ + if (preg_match('#(..(\\|/)){2,}#sim', $albumface) != false) { die('request error');} #针对阿里云误报åªèƒ½æ·»åР䏋 + if($albumface){ + + $strPhoto = $new['photo']->find('photo',array( + 'photoid'=>$albumface, + )); + + $new['photo']->update('photo_album',array( + 'userid'=>$userid, + 'albumid'=>$albumid, + ),array( + 'path'=>$strPhoto['path'], + 'albumface'=>$strPhoto['photourl'], + )); + } + + header("Location: ".tsUrl('photo','album',array('id'=>$albumid))); + + break; + + //删除相册 + case "del": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum['userid'] == $userid || $TS_USER['isadmin'] == 1) { + + $new['photo']->deletePhotoAlbum($strAlbum['albumid']); + + } + + + header("Location: ".tsUrl('photo')); + + break; +} \ No newline at end of file diff --git a/app/photo/action/api.php b/app/photo/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/photo/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +Photo Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/photo/action/create.php b/app/photo/action/create.php new file mode 100644 index 0000000..16de010 --- /dev/null +++ b/app/photo/action/create.php @@ -0,0 +1,66 @@ +isLogin(); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + +switch($ts){ + + + case "": + + $title = '创建相册'; + include template("create"); + + break; + + case "do": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $albumname = tsTrim($_POST['albumname']); + $albumdesc = tsTrim($_POST['albumdesc']); + + if($albumname == '') { + tsNotice("相册åç§°ä¸èƒ½ä¸ºç©ºï¼"); + } + + //1å®¡æ ¸åŽæ˜¾ç¤º0ä¸å®¡æ ¸ + if ($TS_APP['isaudit']==1) { + $isaudit = 1; + } else { + $isaudit = 0; + } + + if($TS_USER['isadmin']==0){ + //过滤内容开始 + $albumname = antiWord($albumname); + $albumdesc = antiWord($albumdesc); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $albumid = $new['photo']->create('photo_album',array( + + 'userid'=>$userid, + 'albumname'=>$albumname, + 'albumdesc'=>$albumdesc, + 'isaudit'=>$isaudit, + 'addtime'=>date('Y-m-d H:i:s'), + 'uptime'=>date('Y-m-d H:i:s'), + + )); + + header("Location: ".tsUrl('photo','upload',array('albumid'=>$albumid))); + + + break; + + +} \ No newline at end of file diff --git a/app/photo/action/delete.php b/app/photo/action/delete.php new file mode 100644 index 0000000..24b4808 --- /dev/null +++ b/app/photo/action/delete.php @@ -0,0 +1,40 @@ +isLogin(); + +$photoid = tsIntval($_GET['photoid']); + +$strPhoto = $new['photo']->find('photo',array( + 'photoid'=>$photoid, +)); + +if($strPhoto['userid']==$userid || $TS_USER['isadmin']==1) { + + + $albumid = $strPhoto['albumid']; + + + $new['photo']->deletePhoto($strPhoto); + + + $count_photo = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $new['photo']->update('photo_album',array( + + 'albumid'=>$albumid, + + ),array( + + 'count_photo'=>$count_photo, + + )); + + tsNotice('照片删除æˆåŠŸï¼','点击返回',tsUrl('photo','album',array('id'=>$albumid))); + + +} \ No newline at end of file diff --git a/app/photo/action/do.php b/app/photo/action/do.php new file mode 100644 index 0000000..9ffdd45 --- /dev/null +++ b/app/photo/action/do.php @@ -0,0 +1,111 @@ +isLogin(); + + $photoid = intval($_GET['photoid']); + + $strPhoto = $new['photo']->find('photo',array( + 'photoid'=>$photoid, + )); + + if($strPhoto['userid']==$userid || $TS_USER['isadmin']==1) { + + + $albumid = $strPhoto['albumid']; + + unlink('uploadfile/photo/'.$strPhoto['photourl']); + + $new['photo']->delete('photo',array( + 'photoid'=>$photoid, + )); + + $count_photo = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $new['photo']->update('photo_album',array( + + 'albumid'=>$albumid, + + ),array( + + 'count_photo'=>$count_photo, + + )); + + tsNotice('照片删除æˆåŠŸï¼','点击返回',tsUrl('photo','album',array('id'=>$albumid))); + + + } + + break; + + //添加评论 + case "comment_do": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $photoid = intval($_POST['photoid']); + $content = trim($_POST['content']); + + if($content==''){ + tsNotice('评论内容ä¸èƒ½ä¸ºç©ºï¼'); + } + + if($TS_USER['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($content); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $commentid = $new['photo']->create('photo_comment',array( + 'photoid'=> $photoid, + 'userid'=> $userid, + 'content'=> $content, + 'addtime'=> time(), + )); + + header("Location: ".tsUrl('photo','show',array('id'=>$photoid))); + + break; + + //删除评论 + case "delcomment": + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + $commentid = intval($_GET['commentid']); + + $strComment = $new['photo']->find('photo_comment',array( + 'commentid'=>$commentid, + )); + + $strPhoto = $new['photo']->find('photo',array( + + 'photoid'=>$strComment['photoid'], + + )); + + + if($userid == $strPhoto['userid'] || $TS_USER['isadmin']=='1'){ + + $new['photo']->delete('photo_comment',array( + 'commentid'=>$commentid, + )); + + tsNotice("删除评论æˆåŠŸï¼"); + + }else{ + tsNotice("éžæ³•æ“作ï¼"); + } + + break; +} diff --git a/app/photo/action/edit.php b/app/photo/action/edit.php new file mode 100644 index 0000000..fee60c4 --- /dev/null +++ b/app/photo/action/edit.php @@ -0,0 +1,52 @@ +isLogin(); + +switch($ts){ + + case "": + + $photoid = tsIntval($_GET['photoid']); + + $strPhoto = $new['photo']->find('photo',array( + 'photoid'=>$photoid, + )); + + $strPhoto['title'] = tsTitle($strPhoto['title']); + $strPhoto['photodesc'] = tsTitle($strPhoto['photodesc']); + + if($strPhoto['userid']==$userid || $TS_USER['isadmin']==1){ + + $title = '修改图片信æ¯'; + include template('photo_edit'); + + }else{ + + + tsNotice('éžæ³•æ“作!'); + + } + + break; + + + case "do": + + $photoid = tsIntval($_POST['photoid']); + $title = tsTrim($_POST['title']); + $photodesc = tsTrim($_POST['photodesc']); + + $new['photo']->update('photo',array( + 'photoid'=>$photoid, + ),array( + 'title'=>$title, + 'photodesc'=>$photodesc, + )); + + header('Location: '.tsUrl('photo','show',array('id'=>$photoid))); + + break; + +} \ No newline at end of file diff --git a/app/photo/action/index.php b/app/photo/action/index.php new file mode 100644 index 0000000..2864286 --- /dev/null +++ b/app/photo/action/index.php @@ -0,0 +1,25 @@ +'')); + +$lstart = $page*30-30; + +$arrAlbum = $new['photo']->findAll('photo_album',"`count_photo`>0 and `isaudit`=0",'albumid desc',null,$lstart.',30'); + +foreach($arrAlbum as $key=>$item){ + $arrAlbum[$key]['albumname'] = tstitle($item['albumname']); + $arrAlbum[$key]['albumdesc'] = tstitle($item['albumdesc']); +} + +$albumNum = $new['photo']->findCount('photo_album',"`count_photo`>0 and `isaudit`=0"); + +$pageUrl = pagination($albumNum, 30, $page, $url); + +$title = '最新专辑'; + +$sitekey = $TS_APP['appkey']; +$sitedesc = $TS_APP['appdesc']; +include template("index"); \ No newline at end of file diff --git a/app/photo/action/my.php b/app/photo/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/photo/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/photo/action/my/common.php b/app/photo/action/my/common.php new file mode 100644 index 0000000..59b5488 --- /dev/null +++ b/app/photo/action/my/common.php @@ -0,0 +1,6 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/photo/action/my/index.php b/app/photo/action/my/index.php new file mode 100644 index 0000000..4862fe3 --- /dev/null +++ b/app/photo/action/my/index.php @@ -0,0 +1,29 @@ +'index','page'=>'')); + +$lstart = $page*6-6; + +$arrAlbum = $new['photo']->findAll('photo_album',array( + 'userid'=>$strUser['userid'], +),'albumid desc',null,$lstart.',6'); + +foreach($arrAlbum as $key=>$item){ + $arrAlbum[$key]['albumname'] = tsTitle($item['albumname']); + $arrAlbum[$key]['albumdesc'] = tsTitle($item['albumdesc']); +} + +$albumNum = $new['photo']->findCount('photo_album',array( + + 'userid'=>$strUser['userid'], + +)); + +$pageUrl = pagination($albumNum, 6, $page, $url); + +$title = '我的相册'; +include template('my/index'); \ No newline at end of file diff --git a/app/photo/action/show.php b/app/photo/action/show.php new file mode 100644 index 0000000..3d1c4f6 --- /dev/null +++ b/app/photo/action/show.php @@ -0,0 +1,92 @@ +find('photo',array( + 'photoid'=>$photoid, +)); + +//404 +if($strPhoto == ''){ + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; +} + +$strPhoto['title'] = tsTitle($strPhoto['title']); +$strPhoto['photodesc'] = tsTitle($strPhoto['photodesc']); + +#原图 +if($TS_SITE['file_upload_type']==1){ + #阿里云oss + $strPhoto['photo_url'] = $TS_SITE['alioss_bucket_url'].'/uploadfile/photo/'.$strPhoto['photourl']; +}else{ + #本地 + $strPhoto['photo_url'] = SITE_URL.'uploadfile/photo/'.$strPhoto['photourl']; +} + +$albumid = $strPhoto['albumid']; + +//图片标签 +$strPhoto['tags'] = aac('tag')->getObjTagByObjid('photo', 'photoid', $strPhoto['photoid']); + +//用户 +$strPhoto['user'] = aac('user')->getSimpleUser($strPhoto['userid']); + +//相册下所有图片 +$arrPhoto = $new['photo']->findAll('photo',array( + 'albumid'=>$strPhoto['albumid'], +),null,null,8); + +//所在专辑 +$strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, +)); + +$strAlbum['albumname'] = tsTitle($strAlbum['albumname']); +$strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + +$arrPhotoIds = $new['photo']->findAll('photo',array( + + 'albumid'=>$albumid, + +),'photoid desc'); + +foreach($arrPhotoIds as $item){ + $arrPhotoId[] = $item['photoid']; +} + +rsort($arrPhotoId); + +$nowkey = array_search($photoid,$arrPhotoId); +$nowPage = $nowkey+1 ; +$conutPage = count($arrPhotoId); +$prev = $arrPhotoId[$nowkey - 1]; +$next = $arrPhotoId[$nowkey +1]; + +$userid = $strAlbum['userid']; +$strUser = aac('user')->getSimpleUser($userid); + +//评论列表 +$page = tsIntval($_GET['page'],1); +$url = tsUrl('photo','show',array('id'=>$photoid,'page'=>'')); +$lstart = $page*15-15; +$arrComment = aac('comment')->getCommentList('photo','photoid',$strPhoto['photoid'],$page,$lstart,$strPhoto['userid']); +$commentNum = aac('comment')->getCommentNum('photo','photoid',$strPhoto['photoid']); +$pageUrl = pagination($commentNum, 15, $page, $url); + + + +$title = $strAlbum['albumname'].'(第'.$nowPage.'å¼ )'; + + +include template("show"); + +$new['photo']->update('photo',array( + 'photoid'=>$strPhoto['photoid'], +),array( + 'count_view'=>$strPhoto['count_view']+1, +)); \ No newline at end of file diff --git a/app/photo/action/upload.php b/app/photo/action/upload.php new file mode 100644 index 0000000..63110f6 --- /dev/null +++ b/app/photo/action/upload.php @@ -0,0 +1,129 @@ +isLogin(); + + //判断å‘å¸ƒè€…çŠ¶æ€ + if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + + //å‘布时间é™åˆ¶ + if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + + + $albumid = tsIntval($_GET['albumid']); + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + $strAlbum['albumname'] = tsTitle($strAlbum['albumname']); + $strAlbum['albumdesc'] = tsTitle($strAlbum['albumdesc']); + + if($userid != $strAlbum['userid']) { + + tsNotice('éžæ³•æ“作ï¼'); + + } + + $addtime = time(); + + $title = '上传照片'; + include template("upload"); + + break; + + case "do": + + $userid = aac('user')->isLogin(); + + $albumid = tsIntval($_POST['albumid']); + + $addtime = tsIntval($_POST['addtime']); + + if($albumid==0){ + getJson('éžæ³•æ“作1ï¼'); + } + + if($addtime==0){ + getJson('上传时间有误ï¼'); + } + + $strAlbum = $new['photo']->find('photo_album',array( + 'albumid'=>$albumid, + )); + + if($strAlbum==''){ + getJson('éžæ³•æ“作2ï¼'); + } + + if($strAlbum['userid']!=$userid){ + getJson('éžæ³•æ“作3ï¼'); + } + + $type = getImagetype($_FILES['file']['tmp_name']); + if(!in_array($type,array('jpg','gif','png','jpeg'))){ + getJson('éžæ³•æ“作4ï¼'); + } + + $photoid = $new['photo']->create('photo',array( + 'albumid'=>$strAlbum['albumid'], + 'userid'=>$strAlbum['userid'], + 'addtime' => date('Y-m-d H:i:s',$addtime), + )); + + //上传 + $arrUpload = tsUpload($_FILES['file'],$photoid,'photo',array('jpg','png','jpeg','gif')); + + if($arrUpload && $arrUpload['path'] && $arrUpload['url']){ + + $new['photo']->update('photo',array( + 'photoid'=>$photoid, + ),array( + 'title'=>$arrUpload['name'], + 'phototype'=>$arrUpload['type'], + 'path'=>$arrUpload['path'], + 'photourl'=>$arrUpload['url'], + 'photosize'=>$arrUpload['size'], + )); + + + #生æˆå¯¹åº”大å°çš„图片 + tsXimg($arrUpload['url'],'photo',320,320,$arrUpload['path'],1); + tsXimg($arrUpload['url'],'photo',640,'',$arrUpload['path']); + + + #统计相册图片数 + $count_photo = $new['photo']->findCount('photo',array( + 'albumid'=>$albumid, + )); + + $new['photo']->update('photo_album',array( + 'albumid'=>$albumid, + ),array( + 'count_photo'=>$count_photo + )); + + //å¯¹ç§¯åˆ†è¿›è¡Œå‡ºæ¥ + aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strAlbum['userid']); + + }else{ + + $new['photo']->delete('photo',array( + 'photoid'=>$photoid, + )); + + } + + + + #echo $photoid; + getJson('上传æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/photo/action/user.php b/app/photo/action/user.php new file mode 100644 index 0000000..341135b --- /dev/null +++ b/app/photo/action/user.php @@ -0,0 +1,34 @@ +getSimpleUser($userid); + +$page = tsIntval($_GET['page'],1); + +$url = tsUrl('photo','user',array('id'=>$userid,'page'=>'')); + +$lstart = $page*6-6; + +$arrAlbum = $new['photo']->findAll('photo_album',array( + 'userid'=>$userid, +),'albumid desc',null,$lstart.',6'); + +foreach($arrAlbum as $key=>$item){ + $arrAlbum[$key]['albumname'] = tsTitle($item['albumname']); + $arrAlbum[$key]['albumdesc'] = tsTitle($item['albumdesc']); +} + +$albumNum = $new['photo']->findCount('photo_album',array( + 'userid'=>$userid, +)); + +$pageUrl = pagination($albumNum, 6, $page, $url); + + +$title = $strUser['username'].'的相册'; + +include template("user"); \ No newline at end of file diff --git a/app/photo/class.photo.php b/app/photo/class.photo.php new file mode 100644 index 0000000..a71155f --- /dev/null +++ b/app/photo/class.photo.php @@ -0,0 +1,99 @@ +db->once_fetch_assoc("select * from ".dbprefix."photo where photoid='$photoid'"); + return $strPhoto; + } + + function getSamplePhoto($photoid){ + $strPhoto = $this->db->once_fetch_assoc("select path,photourl from ".dbprefix."photo where photoid='$photoid'"); + return $strPhoto; + } + + //是å¦å­˜åœ¨å›¾ç‰‡ + public function isPhoto($photoid){ + $photoNum = $this->findCount('photo',array( + 'photoid'=>$photoid, + )); + + if($photoNum > 0){ + return true; + }else{ + return false; + } + + } + + /** + * 删除图片 + * + * @param [type] $strPhoto + * @return void + */ + public function deletePhoto($strPhoto){ + #删除文件 + if($strPhoto['photourl']){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + deleteAliOssFile('uploadfile/photo/'.$strPhoto['photourl']); + }else{ + unlink('uploadfile/photo/'.$strPhoto['photourl']); + tsDimg($strPhoto['photourl'],'photo','320','320',$strPhoto['path']); + } + } + #删除记录 + $this->delete('photo',array( + 'photoid'=>$strPhoto['photoid'], + )); + + #删除评论 + $this->delete ( 'comment', array ( + 'ptable'=>'photo', + 'pkey'=>'photoid', + 'pid'=>$strPhoto['photoid'], + )); + + return true; + + } + + //删除相册 + public function deletePhotoAlbum($albumid){ + + $this->delete('photo_album',array( + 'albumid'=>$albumid, + )); + + $arrPhoto = $this->findAll('photo',array( + 'albumid'=>$albumid, + )); + + foreach($arrPhoto as $key=>$item){ + + $this->deletePhoto($item); + + } + + $this->delete('photo',array( + 'albumid'=>$albumid, + )); + + } + + +} \ No newline at end of file diff --git a/app/photo/config.php b/app/photo/config.php new file mode 100644 index 0000000..c622938 --- /dev/null +++ b/app/photo/config.php @@ -0,0 +1,6 @@ + + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + {loop $arrAlbum $key $item} + + + + + + + + + + + + + {/loop} + + + + + + +
    AlbumID图片标题UserID统计addtimeæ“作
    {$item[albumid]} + + {if $item[albumface]} + + {else} + + {/if} + + {tsTitle($item['albumname'])}{$item[userid]}图片:{$item['count_photo']}{$item['addtime']} + + + + {if $item['isaudit']} + 审核 + {else} + å–æ¶ˆå®¡æ ¸ + {/if} + + + + + {if $item[isrecommend]==0} + 推è + {else} + å–æ¶ˆæŽ¨è + {/if} + + + 删除 + +
    + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/admin/album_photo.html b/app/photo/html/admin/album_photo.html new file mode 100644 index 0000000..df94be2 --- /dev/null +++ b/app/photo/html/admin/album_photo.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header_admin")} + + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + {loop $arrPhoto $key $item} + + {/loop} + + + + + + +
    PhotoId图片AlbumIDUserIdæ“作
    {$item[photoid]} + + {if $item[photourl]} + + {else} + + {/if} + + {$item[albumid]}{$item[userid]}设为å°é¢ 修改 删除
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/admin/comment_list.html b/app/photo/html/admin/comment_list.html new file mode 100644 index 0000000..0339dde --- /dev/null +++ b/app/photo/html/admin/comment_list.html @@ -0,0 +1,89 @@ +{php include pubTemplate("header_admin")} + + +
    + + {php include template("admin/menu");} + +
    {$pageUrl}
    + + +
    + + +
    + + + + + + + + + + + + + 全部 + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + {loop $arrComment $key $item} + + + + + + + + + + + + + + + {/loop} + + + +
    IDUserIDphotoid内容时间æ“作
    {$item['commentid']}{$item['userid']}{$item['photoid']} [查看内容] + +
    {php echo tsTitle($item['content'])}
    + +
    {php echo date('Y-m-d H:i:s',$item['addtime'])} + + + + 删除 + +
    + +
    +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/admin/menu.html b/app/photo/html/admin/menu.html new file mode 100644 index 0000000..e6800b2 --- /dev/null +++ b/app/photo/html/admin/menu.html @@ -0,0 +1,16 @@ + + + +
    \ No newline at end of file diff --git a/app/photo/html/admin/options.html b/app/photo/html/admin/options.html new file mode 100644 index 0000000..2be052c --- /dev/null +++ b/app/photo/html/admin/options.html @@ -0,0 +1,34 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu")} + + +
    + + + + + + + + + + +
    APPå称:
    APP介ç»ï¼š
    APP关键è¯ï¼š
    是å¦å®¡æ ¸ï¼šä¸å®¡æ ¸ 审核
    + +
    +
    + + + + + + +
    釿–°ç»Ÿè®¡ç›¸å†Œæ‰§è¡Œ
    删除空相册执行
    + + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/admin/permissions.html b/app/photo/html/admin/permissions.html new file mode 100644 index 0000000..1a46360 --- /dev/null +++ b/app/photo/html/admin/permissions.html @@ -0,0 +1,165 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + + + +
    + {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
    + + +
    + + +
    å‰å°æƒé™
    + + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/if} + + + + +
    查看图片: + +
    创建相册: + +
    修改相册: + +
    删除相册: + +
    上传图片: + +
    修改图片: + +
    删除图片: + +
    + + + + {if $ugid==1 || $ugid==2} +
    åŽå°æƒé™
    + + + + + + + + + + + + +
    图片é…置: + +
    æƒé™é…置: + +
    + {/if} + + + +
    APIæƒé™
    + + + + + + + + + + + +
    查看图片: + +
    + + + + + + +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/admin/photo_list.html b/app/photo/html/admin/photo_list.html new file mode 100644 index 0000000..7198d40 --- /dev/null +++ b/app/photo/html/admin/photo_list.html @@ -0,0 +1,60 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    {$pageUrl}
    + + + + + + + + + + + + + + + + + {loop $arrPhoto $key $item} + + + + + + + + {/loop} + + + + +
    PhotoId图片AlbumIDUserId统计æ“作
    {$item[photoid]} + + {if $item[photourl]} + + {else} + + {/if} + + {$item[albumid]}{$item[userid]} + æµè§ˆï¼š{$item['count_view']}
    + 评论:{$item['count_comment']} +
    + + 设为å°é¢ + + {if $item[isrecommend]==0}推è{else}å–æ¶ˆæŽ¨è{/if} + + + + 删除
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/photo/html/album.html b/app/photo/html/album.html new file mode 100644 index 0000000..3475ef7 --- /dev/null +++ b/app/photo/html/album.html @@ -0,0 +1,96 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + +

    {$title}

    + +
    + +
    + + {$strAlbum[count_view]} 人æµè§ˆ + + {$strAlbum[count_photo]} å¼ ç…§ç‰‡ +  {$strAlbum[addtime]} åˆ›å»º + + +
    + + + +
    + + +{if $arrPhoto} + + {loop $arrPhoto $key $item} +
    +
    + + {$strAlbum['albumname']}{$item['title']} + +
    + +
    {$item[count_view]}æµè§ˆ
    + +
    +
    +
    + {/loop} + +{else} + +
    这个相册现在还没有照片 + {if $strAlbum[userid] == $TS_USER[userid]}, ä½ å¯ä»¥ 添加照片{/if} +
    + +{/if} +
    + + +
    {$pageUrl}
    + +
    {$strAlbum[albumdesc]}
    + + +
    + +
    + + {if $strAlbum[userid] == $TS_USER[userid] || $TS_USER[isadmin]==1}   + > ä¿®æ”¹ç›¸å†Œ +  > æ·»åŠ ç…§ç‰‡ + {if $strAlbum[count_photo]>'0'}  + > æ‰¹é‡ä¿®æ”¹{/if} + {/if} + + + {if $strAlbum[userid] == $TS_USER[userid] || $TS_USER[isadmin]==1} +  > åˆ é™¤ç›¸å†Œ + {/if} + + +  > {$strUser['username']}的相册 + +
    + + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/album_edit.html b/app/photo/html/album_edit.html new file mode 100644 index 0000000..a6dff09 --- /dev/null +++ b/app/photo/html/album_edit.html @@ -0,0 +1,68 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    + + + + + + + +
    + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + + + + + + 返回相册 +
    + + +
    +
    + +
    + + + + + + +
    + +
    + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/album_info.html b/app/photo/html/album_info.html new file mode 100644 index 0000000..89ec400 --- /dev/null +++ b/app/photo/html/album_info.html @@ -0,0 +1,79 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + + + + + + +
    + +
    +
    + + +
    + + {loop $arrPhoto $key $item} +
    +
    + +
    + + + + + + + +
    +
    +
    + +

    删除照片

    +
    +
    +
    + {/loop} + + +
    + + + + + 返回相册 + +
    + + +
    +
    + +
    + + + + + +
    + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/create.html b/app/photo/html/create.html new file mode 100644 index 0000000..a0c4d98 --- /dev/null +++ b/app/photo/html/create.html @@ -0,0 +1,65 @@ +{php include pubTemplate("header")} + +
    + + + + + + +
    +
    + +{template menu} + + + + + +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    + + + + + 返回我的相册 +
    + +

    + +

    +
    +
    +
    + + + + + + + +
    +
    + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/index.html b/app/photo/html/index.html new file mode 100644 index 0000000..752e8d1 --- /dev/null +++ b/app/photo/html/index.html @@ -0,0 +1,48 @@ +{php include pubTemplate("header")} + +
    + + + + +
    +
    + +{template menu} + + +
    +{loop $arrAlbum $key $item} +
    + + {$item[albumname]} + + +
    +
    {$item[albumname]}
    +
    {$item[count_photo]}张图片
    +
    {php echo date('Y-m-d',strtotime($item['addtime']))} 创建
    +
    + +
    +{/loop} +
    + + + +
    +
    {$pageUrl}
    + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/menu.html b/app/photo/html/menu.html new file mode 100644 index 0000000..2ccfc7e --- /dev/null +++ b/app/photo/html/menu.html @@ -0,0 +1,9 @@ +
    + 最新相册 + {if $ac=='album' && $ts=='user'} + {$title} + {/if} + + +
    +
    \ No newline at end of file diff --git a/app/photo/html/my/index.html b/app/photo/html/my/index.html new file mode 100644 index 0000000..24efc03 --- /dev/null +++ b/app/photo/html/my/index.html @@ -0,0 +1,64 @@ +{php include pubTemplate("header")} +
    + + + +
    + + +
    +
    + + {php include pubTemplate("my")} + +
    +
    +
    + + + + +
    +
    我的相册
    +
    + + + +
    + {loop $arrAlbum $key $item} +
    + + + + +
    +
    {$item['albumname']}
    +
    {$item['count_photo']}张照片
    +
    {php echo date('Y-m-d',strtotime($item['addtime']))} 创建
    +
    + +
    + {/loop} +
    + + + + + + +
    {$pageUrl}
    + + +
    +
    + + + +
    +
    + + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/photo_edit.html b/app/photo/html/photo_edit.html new file mode 100644 index 0000000..1613d86 --- /dev/null +++ b/app/photo/html/photo_edit.html @@ -0,0 +1,62 @@ +{php include pubTemplate("header")} + +
    + + + +
    +
    编辑图片信æ¯
    +
    + + + +
    +
    +
    + + + +
    + +

    图片:

    +

    + +

    +

    图片å称:

    +

    +

    图片介ç»ï¼š

    +

    + +

    + + + + + + + 返回 + +

    +
    + + + + +
    +
    +
    + + + + + +
    +
    + + + + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/show.html b/app/photo/html/show.html new file mode 100644 index 0000000..521361d --- /dev/null +++ b/app/photo/html/show.html @@ -0,0 +1,174 @@ +{php include pubTemplate("header")} + +
    + + + + + + + +
    + + + +
    + +
    +
    + + +

    {$strAlbum['albumname']}(第{$nowPage}张)

    + +
    + +
    + > 返回相册第{$nowPage}张 / 共{$conutPage}张 + +{if $nowPage >1} + +上一张 +{if $nowPage < $conutPage} +/ +{/if} +{/if} +{if $nowPage < $conutPage} + +下一张 +{/if} +
    + + +
    + {if $nowPage < $conutPage} + +{/if} + {$strAlbum['albumname']}{$strPhoto['title']} + {if $nowPage < $conutPage} + + {/if} +
    + + +
    +{$strPhoto[title]} {$strPhoto[photodesc]} + +
    + + +
    + {$strPhoto[count_view]}人æµè§ˆã€€ +上传于{$strPhoto[addtime]} + +查看原图 + +  +
    + + +
    + {if $TS_USER[userid] == $strPhoto[userid] || $TS_USER[isadmin]==1}修改 | + + 删除照片 + + + {/if} +
    + + + + +
    +
    + + + + + + + +
    +
    评论{if $strPhoto['count_comment']} ({$strPhoto['count_comment']}){/if}
    +
    + + + + + + {php include pubTemplate("comment")} + + + + + +
    + + {if tsIntval($TS_USER[userid])==0} + + {else} + +
    +
    + +
    +
    +
    + {if $TS_SITE['isauthcode']} + + 点击刷新验è¯ç  + {/if} +
    +
    +
    是å¦å…¬å¼€ï¼šå…¬å¼€ ä¸å…¬å¼€
    +
    +
    + + + + + +
    +
    +
    + {/if} + +
    + +
    +
    + + + + + + + + + + +
    + + +
    + + {php doAction('gobad','300')} + + +
    + + + +
    + +
    +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/upload.html b/app/photo/html/upload.html new file mode 100644 index 0000000..c77cb79 --- /dev/null +++ b/app/photo/html/upload.html @@ -0,0 +1,77 @@ +{php include pubTemplate("header")} + + + + +
    + + + + + + +
    +
    + + + + +
    ä¸Šä¼ æ–‡ä»¶åªæ”¯æŒï¼šjpg,gif,pngæ ¼å¼ã€‚
    + + + +
    + + +
    + + + + + +
    + + + + + +
    +
    + + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/html/user.html b/app/photo/html/user.html new file mode 100644 index 0000000..103b014 --- /dev/null +++ b/app/photo/html/user.html @@ -0,0 +1,47 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    +
    + +

    {$strUser['username']}的相册

    + +
    + +
    + {loop $arrAlbum $key $item} +
    + + {$item[albumname]} + + +
    +
    {$item['albumname']}
    +
    {$item['count_photo']}张照片
    +
    {php echo date('Y-m-d',strtotime($item['addtime']))} 创建
    +
    + +
    + {/loop} +
    + + +
    {$pageUrl}
    +
    + +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/photo/js/admin.js b/app/photo/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/photo/js/extend.func.js b/app/photo/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/photo/skin/photo_album.png b/app/photo/skin/photo_album.png new file mode 100644 index 0000000000000000000000000000000000000000..a75ed6dec3a6c65acfce8c63283e9d9a56cd0455 GIT binary patch literal 14311 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 literal 0 HcmV?d00001 diff --git a/app/photo/skin/style.css b/app/photo/skin/style.css new file mode 100644 index 0000000..ed2f6c0 --- /dev/null +++ b/app/photo/skin/style.css @@ -0,0 +1,272 @@ +.show_photo{} +.show_photo img{max-width:100%;} + +.wr { + overflow: hidden; + table-layout: fixed; + width: 100%; + word-wrap: break-word; +} + +.albumlst { + float: left; + margin: 7px; + width: 170px; + border:solid 1px #CCCCCC; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); +} + +.album_photo { +display: block; +overflow: hidden; +width: 181px; +} + +.album_photo img{} + +.album_photo:link { + color: #777777; + display: block; + font-style: italic; +} + +.album { + background: url("albumback.gif") no-repeat scroll 1px 1px transparent; + padding: 4px 7px 7px 4px; +} + +.albumlst_r { + color: #777777; + overflow: hidden; + padding-top: 4px; + word-wrap: break-word; +} + +.pl2 { + color: #666666; + font: 14px/150% Arial,Helvetica,sans-serif; +} +.albumlst_descri { + color: #333333; + margin-bottom: 10px; +} + +.mbt { + clear: both; + margin: 0; + padding: 0; +} +.mbtl { +float: left; + margin: 8px 7px 0 0; + padding: 0; + width: 55px; +} + +.mbtrdot { + min-height: 55px; + overflow: hidden; + padding: 4px 0; +} + +.extra { + clear: both; + text-align: right; +} + +.photitle { + border-bottom: 1px solid #DDDDDD; + margin-bottom: 5px; + padding-bottom: 5px; + text-align: right; +} +.photo_wrap { + display: inline; + float: left; + margin: 10px 7px; + overflow: hidden; + width: 170px; + border:solid 1px #CCCCCC; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + +} +.photolst_photo { + margin: 0; + width: 180px; +} +.photo_wrap .pl { + margin: 6px 0 3px; +} +.gact { + color: #BBBBBB; + cursor: pointer; + font-size: 12px; + text-align: center; +} + +.sns-bar { + clear: both; + color: #666666; + margin-bottom: 20px; + overflow: hidden; + padding-top: 20px; +} +.sns-bar-donate { + float: left; + margin-right: 15px; +} +.sns-bar-rec { + float: left; +} +.sns-bar form, .sns-bar .rec-sec { + display: inline-block; + float: none; +} +.rec-sec { + color: #999999; + text-align: right; +} +.lnk-sharing { + border: 1px solid #B9DCD0; + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 19px; + line-height: 19px; + overflow: hidden; + padding: 0 8px; + vertical-align: middle; +} +a.lnk-sharing:link, a.lnk-sharing:visited { + background-color: #F2F8F2; + border-color: #E3F1ED; + color: #4F946E; +} +.sns-bar-fav { + float: right; +} + +.btn-fav { + border: 1px solid #EDCEBA; + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 19px; + line-height: 19px; + margin-left: 4px; + overflow: hidden; + padding: 0 8px 0 30px; + vertical-align: middle; +} +.fav-add, .fav-add:link, .fav-add:hover { + background: url("ic_like.png") no-repeat scroll 8px 3px transparent; +} +a.btn-fav:link, a.btn-fav:visited { + background-color: #FFF6EE; + border-color: #F2ECE7; + color: #99776B; +} +.clearfix { + display: block; +} + +.rr { + float: right; +} +.ll { + float: left; +} +.photo_descri { + overflow: hidden; + padding: 0 0 0 14px; + word-wrap: break-word; +} +.edtext { + margin: 7px 0 15px; + width: 100%; +} + +#comments { + overflow: hidden; + padding: 20px 0 0; + width: 100%; + word-wrap: break-word; +} +.wrap { + background: url("topicbar.gif") no-repeat scroll 0 0 transparent; + display: block; +} +h4 { + background: url("topicbar.gif") no-repeat scroll right top transparent; + color: #666666; + font: 12px/1.8em Arial,Helvetica,sans-serif; + height: 26px; + margin: 0 0 10px 4px; + overflow: hidden; +} +.align-right { + text-align: right; +} +.gact a:link, a.gact:link { + color: #BBBBBB; + font-size: 12px; + text-align: center; + text-decoration: none; +} +.txd textarea { + width: 90%; +} +textarea { + border: 1px solid #CCCCCC; + font-size: 14px; + padding: 3px; +} +textarea { + font-family: Arial; + overflow: auto; +} +textarea { + resize: none; +} + +.photo-complete { + background: none repeat scroll 0 0 #F8F8F8; + margin-bottom: 15px; + padding: 15px 20px 1px; +} +.photo-item { + margin-bottom: 15px; +} + +.photo-item .cover { + float:left; + margin-right: 10px; + vertical-align: top; +} +.photo-item .cover a { + display: block; + margin-bottom: -3px; + text-align: center; + width: 100px; +} +.photo-item .choose-cover { + text-align: center; +} +label { + font-family: Tahoma; + vertical-align: middle; +} + + +.photo-item .intro{margin-left: 110px;} + +.photo-item .intro textarea { + border: 1px solid #DDDDDD; + color: #666666; + padding: 5px; + width: 100%; + border-radius: 5px; + +} +.photo-item .intro p { + margin: 0; + text-align: right; +} \ No newline at end of file diff --git a/app/photo/skins/default/photo_album.png b/app/photo/skins/default/photo_album.png new file mode 100644 index 0000000000000000000000000000000000000000..a75ed6dec3a6c65acfce8c63283e9d9a56cd0455 GIT binary patch literal 14311 zcmb_?^;cWn^L3CGEAH-Y1&S1RE0PAMNP!lLyL*ckiWDneB&E1J1d6-61$PJ#oB-cE zpMT+f?^-wKhjX)z&Fr&h&qM>YRB*AWumJ!7u9~VM2-%kW_hOi@3 z0DwdM--`ms$f5uMur+NJ6o9}l&K}P0Uz}YS)D#pLT-=y*-@LnIht(b zzDF6y=$VL}(ytWN2l~NIP9EkT+V-;c5M#dM_#uQuY>B)1c7V5_a7pn6`gm>Cp27AI zR8rM-bOwUm;VzpOy#T-&ny*igN0kf$rP3LI3UHa_VdM`WHSITBm&l%i1u($ z5?yahQYfi>1P zQ&w6gGqLI(n#R~G0D$Ul^52t~Ov2vo_QtODo&)T%H~-20%$Z4=@f`Zp7K@4wAkZ3z zEt&7^%%QpTqf~iz*cX2QEa?NjK<`Y2ma%>tV^8?q#rTRLWa)D9fCG}WG}t&eC#;rv z?XS0Dq@RU0oY!N5u93Y@%YJ77*9_V8^3H;9kFFL@UKOCYy&7{#LqE#nrL#xTj#_cj%Q8(Df@klgS~@qm)@^%BXGa z*ZOe!s;b5h#UiBD}nEuqI)PUg^shX)bWxw>L^?miP z^ykae=1h)wjvVI<9DvjYnXfX%Glv`gmS>jtcx5_5Nj6F1Ij1_Kw={{-H zT)*5%$R7w3R0_fzG#8W}gn`I;khmXyjKA&J@Vy{A*Lv|04uM&v=vf^`zT-Ludm6}{z-y62D~l(n6q zo9bazv9prjOul{K!y7+5!%Y0eL`5;Aa378%Ad{5a7}&1xwW$KMb|~%x5-(_ zSp^_m+tfPl`PYpcjoQ}S+)23GzPpY?)Jc&;H`~m2?(k(&hj5L_f;vzI5RXiQ|1Y=C z2Z|3qO{(px#xp`t>!-szW}L5N0qqG@z^1C&g(e@P^L3^UrB*WL7#(tNJ^@ou%O@Y( zv#G%0FT*vdkHAeskluxz@5)6S=-U(+tib)%;7v+#^5C#j#ienx6{$taCq0;5+Uy7Y zU@r0$^D>vRzZJJt%1yhQ23qE`0aw0`OG|6&jYB6#sz-%KPGvVn9hK_sc5<^55ofsN z)aO5TsLdVK*F5t4?5^TQ>qdu0(S$98PdWe1xM>pzy4HbNHJmgYKE zz5U^M-)KoC)?mrUZS~wf2KMbrfmcpbr(aj&sVu2mI(CCrn^e5DdvoIb!TuQ6O0Xk4 z4`+v!%8rg2EJu*Y4?0zGmz~TI=cUY(4DWguV=lZdxt)LP&_4nGTfqIivF?@bQD}N_ z;}zzSsxSAHc!y^hZ-L`)sl0aBer!QDtr@Kfr13cjCa`7Y*)JS#kn=m6L+bo)`)krx z(Wj!EY%Lk7ne-Lk8x2Idz3F??b{mE992s(tQ;kORn?d;6UcBj9o69BBjpZ_HP9EFRhlN& zmaAK@>l1Qs>{E>uQ@?nhN(5x-@et!4|1h}jsrqxL&SgC?E0RTT%03hTW0C4w=Y!3hc&({FJ;YR>K{1*T~?)=ldR~Z1{ zB~eq9)Ad<84zzVKnfKg%>+M@9`UW!u9qY8T$+kf8RR*eYa)ROCv1*oaZRJ%3 z(_{O$=7-CeOHKH27$wJ#=xJK49+z~vNT2Kmf3gx26T`W#x4zQAK4y4I(%Hne(^hHv zp6^wT6qyKP zdO5(OZm0GhZHbYL`LKtaJ>Q(jFg9XW#kSWTz909onYd)-F*j1tIdH<|xqtv!$~2HV z=V*2jmwgU_tQR*^d32rQax%zKZMRY*g7lwYq3P8F10p(k3NG32YBElro1w4%w&KX| z>E~%hJ$D*&euVqU&<=6)R~@fzgE?)3-vopts>#xp%_edETf16-%RiF+2-IvINBpE?lg=@kp$xM-52{X@!?d>yU^HF zqK}MUJ-(;>yqE^88#+agPDq#x!cGyBd0pk#dol1KTjnWulyZ%c-@g4wv!CLL{-4Cf zhk4JUqN2)Jlc&=PXWL~oW(}7|-!_sZ&O{l0M-F(ItYYOC}C-!DfSQw}T@+>1y_21Sst6#j+x-#a^O7Rk7Kdp8;( zd?bcFP5WJIw$i7Iv~y_1^aX?idqas(|Aj}o(AV9c0pydhc4Ek#4^_QC=vyxTxw6+U z|AG<=d+5i9^@gj3X_>-c(%LdlZi82^aGCSb8S0xO_I!~>7LcvTlsIbboUs4K zd|foDqEuX*6AXJu*Rb}vom%_G|9%KXmW#1a8!Lw45$&5PD{g4a+=h|V{X{El`8;IL zmzUvf@cl?0tSzfUtS3pJFgb+E_Xsg@?^!xmKK&FhdI32vJ}{AXR_1=8%JJ4~bGsY= zIQEMQyyqF}a+C(jpa-cRv{W3mES`^??c{YkA1hBBXWn+zHnsn)jTHQodyxE2t9d2^ z&5YI-R|vq7SBS43azT)c+V)UkljF0=sktd%&GB{U<8$Xz8brdqA=hmzNuY}YluuyY zuWTNCm$F9x!McCz-uYyq#dkc>3N&7id=G>;IQyP@x2De{_r!*shT6q4K=U_Ca^ql?zEpj-vb4Zs9KlM&k6gz zqTD4?v3eO7NpJtlBg{PZ6)p@p@bRQhvQTOj=U&+RE(!u!bqd4U#gUD6fBL}rR(UON zSgJ%^R*;Sa81RvW@j+-1D3Y0te*raN39<$c*YK!wehy>!Owzq=#;FvlPs^+dU{H1B zeo4TL^!O98xGl244K+@z{51}BP9UmMv?@IT38+_xft5?nGDb}jHwb_k#z(m;uHe$}q z<*pk-SrsyAklW-jG!#U8p5?wE8NOC@rv9&hQVz4ALu-37!p7%7AXKTKpd9=Q0 zUPNm(qxP{S|FO(NSdhhJ6ZXC^8T2)oi8U%pw<8!kEKB<0eu|WvsF(ymATLs3Bqc3; z(o})U@Yg#<{AzdcKRW2RQoqtB!O zXW^fcZ{^iFDX~(ML6~w0KA=(5!S`dF%&HvV*-yWTkdSpXW4i1wF->^hS%#X7-TPR1 zDty2;lF`gz|Ob97ZoSmWH)s#T03rc`#1PB&#l3~ zMfL{8EOejk0c~0{SPWo*EC(YX?B_6=^Hr{Kv&Dny#_(FR?N%}Tal`C}`$57)N=hnS zWB1R)b8`q3E(u>|jqyivYE4$1EcZ00!%p~)b*brDow z(h&7TR1|r)1ez55ea>x6vVZ_pLEsdr3)6HCCtpP@(k1U2%Uta3~#in3o7EoA3NI7)QWE@jndsS1-{O(@r2jrr?W zE>kdi6Vm(NFHrk;TnJkVynx@jyHCa2XZCqI!rKS&(vx3q}4GPBP$xd|lQqY^l;RYqipuETUeYUa0z72m0( z8ZL+x(NQt~dMj7)0&QOclGUUC0u78somSdx;rhHHZ@AHKa(&@D&+z`42E#62kz%`TbhDQR|w8>}P zzfvPtayZGg3)A8i#bl3Jq;G!Gr15%v(mao;1lkZsUf72$0qb5Kr{!27tk+@-(8YF^ zoc)R5u}uefi|`(w84*ayWL*;L*}Nm&qel2=Hr|-8!XBtbl}*kkg`T zrrVg9PDoG9A2t;SiMTK(Ca{OEv$M6On}|69Nch#WsOY1WD2Y$)Z2rrj;^eXK75{9| z*K!y*qC-G~ou?>C(c2N4nO5hDG2VhwZ<}E|2K+E-Szp=XZq-WCmC_4|RSem;`0eeq zwdtgQab7LTc?d0*b*<5I+zpQrY0ZyTQE2tv8R7iRkxW7Q!)h|YYn2naxUGc-+Mrfj z_}sg1Xu5I~gr&k_Wp^T9ve9ILz-BWLO5-svwP-)_AXyqu?(j+QRXq-Lxjef48XhK4 zXvlgU8vzi-gp&rTU|M7ej5YN(J4WK=3aWEV2M_=#Y7_-s52kv3YJ?J1?SY(Ni3Z1Z zu{V<9;w=t~g3~XIQ^BkoFWx;~7IBeaTOZPEv!oDo9zBW6Yp%ZFc9MO;)spZX)Zo+| z5$9nObF@S9F7oKunZHt;R|e)7mO`o2Uw%olP0Ft~3zpk*p6|RsVeI*Z1r144OS^ zL&*lB-VBg1AzV7|;dxV6MGC!%Kaue{riL=bo_}iVI>xl9Bigbh*yTpx0TQM#JA|SG zNqv^{$@a)p9f*IL^qV`)V z7X9p(uZ6#7%bB2?RJ&<R;jt!Gj_#F@VMj0ROezT@-|$YJ zndcMb;jDEA&%}zN#yq8N!RcSA1m`7+#H~EF1K3i zIScMi?=YGcDwWpE0SX5ehcKwV2n9?4q#BGHL+dWxq6oOVI8rv>mn96Ob_W)bN03?i#h6JK!jN zWwJ9rYalmj5+Rwa&!dS~q74pTMjlXOQCeF3(|FA(#q_pH((yj7uY9OPoYE62`$|Tb z*n4HH=sl?@s@swHvj`*NKwl?fp{_AH%Jq%$0DM&f-2$mHOvWs@kEFDe@KUW$O3?RH zSWMG>MMZ@Mn|tk4$J_iMW3Yg`3@7-feBR`3%&g<&;$nTk&f%PjlS(B2bGLI)qT3je zK-U-9V=NT?YJY_$;pjk?5sa?#UbJyHgtRe?; zW(QOcgyMULG(2VMJ>@bV&C|wPOh%7Mo7w z3P*H>!U_DC*^&nTJEH7ebFP$@mX?t&?FF16UjNZ0+~`jwdB95C{9pVuOYM8*tixQr zBSw7i*7AT+IP^Wp!b=v@!niZ<3c&~ZrJ~LWCVY(RcNqG@vGr!dyF4{PUM(+CALP@U zFO*3RiHr&p0GtgwSy-n6JPIYe9^s8^@PF}!UOYUyf_(u{{MKK)keis*FOBp;bhV15 z_BHR)u7pK7eJ`$9$LZcf&(EUIyAXyyo#AAM(5XvKG0yYE!M z4-Zyy?>s#{t*)+Cb!v05lwo2c!YcQ#b8$+0$rrE(H~-VnOVr@hj|p@hfMM!0N#Pz{ z3L`4sTdZw+hps<=L*)8tX#Ch|SI?H-?{Yn~`Q>#N~AT0rj8y=${Cv z-r-T5aiQofEm+t8L42b@prf@fR!jZhfsauUn=`QEjRbd~Id-v{awjq7d-+%sI_gsy znE;EK8cYs`*w-=pFO}8LGR>c3;vbKL-&97-echEtjK4s{kn_jIiegu`N`v6fL064P zL|zXi7~&+Dxy-rn+i2h$nLn4HU2h&0uEzgNLwsw$=^Yl5EE{FOhh@%?uQSjZS5Qcl zL*DikMK6d=Mlitl(|XrT&#NsIVJsF$O!c7x8|{wkp&2={x9ZH<5^&ylVIYvswLl4R-VUUq!LT4ZXZ$Ji|4-I!%u#U6K|W zI6CT_?4nz#G#kECHww*PK_%GFme6*4uEK(0vrpvaf3k>U!oN!~MO-bagDc2< zUM-z7{YYc0-Xm+YB>SATjKDxMOM6C!{xM2`iRLVj`aMKz?<*plXq*@V<7NyaASTx7 z-W&T7ugN9br}_i$?{5f@GwgPT9P%l(hK-%w#>VDKVBo{l9dkZbKp+KN5_To^FormZ znZXlm3F$Mqqm7`X6`+9_<<9m%%$h!@e(v8|nzavCk%(5ky5o{aBbaw>0~MQaG_k7O z(oI@ADhW@$ZP{u9TdKXgfgGiN4^NEwMx0LB_vPbJJsEvlKz-Q@*)#K}1Nz)&QJ827 zFq>@D=(Z#0%-hRL*`&Q0zc85{k5>9(FIdHK3?$IS#m<&Vx|>N`mY4id)547Sp-R{N zNBCVt=R?I&^7k-Etw{!1Lg}C0R@arXt7@ui zhcfK6p`0c54U2E+!&`yX&My&qVISH*gFU`0*@(bW)FDR^C+6y$8#wcx@4z)rzjAcQ zy0-Lz5Grb_j1jF}cf7{0GPHA{SJV@l+$m+T>J#Fv($`+44-1_O(C$404nWb53m`u77F zXMz0R=)}b6<5zN+vpEA0_WB>gjMt2HEobmz{-DKx(}jhF6^+0ayfO3IUvA9-*T;*r z5?+cPrMlvpJl{nM$VA`Jl;FUBKhG;`Rk~H}Dq}WkNyEru^J`27k7y5PsPA|ba*qu0RrSBD@=B( zj!MREJWi$U`t^YeG?oGaBOJm<)ETP`UBFBsvag3u)Eck%6V@6uCnI zk>;XRWHG(P#l;$I)ARFYDq{CMxw;^@3icaAx$Jy+%p6(O{&a%#93RK96_~t!xS<>3l=`Ry!@U zvl5#$IN@XB$EV)=GkWUy6`-j?hc6|JB#dCS{=MyEKY=Pzfc(7UFZhd62d6FCZ+$P? zRT1m5GqJDJeov7QW$>os&LH!2Va1*X9jWq*&Y+lJ9N`yvr>cWZ_|gVHae(7xo_q@P z+I2Y)kMxh`+;mp4>5hihTb~U}CQ%?I3!==|S8F*0L%+@*qepra*^XLHQ>KfQ@&I8W zM^%?hP**Zb&IO(O@-6`*!GiN{(}rU?(LdA=#OP_v!IbjF)?x=Vs4fpg+$t zHnul!bUSIh?Rsc}J<~O2m>}n8uQw9uv>k%4fo*O|Z$D?K+o71NZluzJ!_HnX_K-uQ z-HFBGjqm^5gu>M3(?As77=PDEqtBxZgC)!Jy61JP?-kIKaQ6q5a&Hl7olV4{TVkRd zgiX>V^e;Vr9Qsos_vaf1KIEny_QRzUce#-s3g`L_t`^0Cr#gmzZ?Bk12U8KltUJ+U zkrQz_MT`un`r4^$X-|)7X|NXlR4)cW*8L%2hZ`s6x|2UF-OYdzl)*ph3bu)5u=%}eb)LM@YrEoLL z1Fwg69{C@WXyb{8C~U$AoD8Dc9qn%^Z7h_%_13SlJ^rv4@n>};9LT^l$8T$WEd@R= zcHM-Xg^|d=#ONU)_?iwZ`A#`Q*OD}J1BMNMl>Qs4|4mo=6&WUPo0LHEdP!qtx3rHQ zBl_R?=OyR#%f*{VYC_Zsn_g`k!-}I__+4~#^yK8^UXDNCPgFo>5A;qKZT;!Q-bQQteb5Bovf zOgO_z7%dYGfU`#K;x{-|20sRACWQou%ZH%t{ZP}9IAnzU10tvL5~)2>qJi1^*m;Jjs9U#F zO@|v^j^AjTHUV>Th2Cwq3-xc?T>G(GNHuk=Gd87 zD*^#5XAX(PJt@B5*KraAXlKrN>nYHwi(MZ>IiCoJ4*@JjK-UXTYz*nXUkw@rP^$^Hx8rGa>A1feD=zdBT!^JmE zr^#*ecv{(?Oe)c3%f>awdbg^jb|b z!hQ7&a&f!Wvl}D-#?AjeQw4l7eI?lbhz5JU!I!!>j2TRZz;Y$LD}Wq4rY&_QeCBEX zp{swXo5RBa{jP4!CL)=hG<)ebIngVfW}LIo;Cx-=cP_5`qe4Px3MIflt7-uGF9oK0 z{AGv!Y*fc%EPm*695VuDYGsjJpmHoLm6*bc&6j&$06rBv0WZ8 z4GqmoM{qEby*oR@@|9vP9S6US>^pV_TNU|bsC}$9M1Ek>=wyoC7N=0DuW1RH#>ajV&_D11Z_7sJG{S1onvETqH8`@vn6`F zJ#^risn6Vkky;lXSvOvDuZFR}w-LGTDYIwf4p~v6rI|}Vw+=XZ)VYda!VO8u?5!lt zOgl<(;J8-mkGv}ZjP!SnGJeo+_>E%I2Q8=nzF{Dr>4VFf&%>bNWG%$VhqR7ST956YtoG9+LN}w7eMV>HPrZrr-yT(iJJI*=AFmC_lIoX zAL~=??0ms@17x@|!sVy)$0y+gdt=%Dk5}_L#k%6zND4mT-7qIAhZ&kXKSy68>*rIx z8`9m~O)cVpxiMeicK1ESPh7M-!LfMaRW+4Aum)T6i!Z56BMg?|bQk-AQT)20%xm_JvtK0=bbASEvxtcW~tZr;im3e{!p%GKlf(%s4&@P zJSXsOCyf(~%=jRm?Ck8N)2qY|7sbA-l)zo5hWI%YVGK#H6Y^|H}5I(>k)&hu6z{Wlk`e73FTPUokbNBN z@9R@mQ86epw2cM3GvK0cKQ0iI;fI%-cSuhW`ni5wr#8Pw6>dcw zinCDb+E?tJP#5n0$O!yUbaA!zq|k9|p2lOkl>gEFbfvjF5b{WX$hiu-T zEl6r;+Uhm>Bg`AeFjxU^fWm(}QDvmN9FQ=)6ZAYUT~O5ihG*Ke)RLaAKepl9y53_z zSY77Y6S7($c$-$+ICb_+2nm~leb=X}5@|$h$e8zvrmCR8%E5srb5t2G96WuXvUbyr z@wAb7^*vCr+g9mVjhV9O?e&CYu~7SC{PRVn$JON<1uab1jjr&m{&=K{!uO$pCtE90 zZB_H;S`>QU9rf4dE7H5q&(BTxZgOtg*aaWob6(wPKcRw?GX!O~tIQXC77Ix+m`58l zXZEdor1Q5WZzglsntb2Y8W6~vG`oF4&Fawe2NylU;E!mHc9rbvmV@_SGT+U`aQ6*`TjiZy_C`}(lGhaip(Tc_Y! zXyc7%HN`*+p%@gX1z{wYP6x`^#KUbL*GeZJh9%L)wC$pMYKOz#!|| z$MXG?y@D%+Bn1lv1qDLJfts?SpkwCB$5|ZNC(ka&p5>dhb~qY60w}ai(|;cLTt9Dy ztY{J~#erRarKh6Bp2q!0_|gRlWRQz18CFHpcNUPfWpBskhew%vi?L>3OKBRZLaB*p zVs@m6;rtd0M&|WoP4tBh`{?j+slo9B519~sDkbe>=JO*m6*jB5PSqA@IeUK-eA};Z z((v>TG!z;dii8_zKG9maL*e!PyLv&`UPN*^?5 z?fnaX`hXjM=sZs*K5Ls*e;n^CELf`d6RxMM6vgk#O8zbsSc`W*q~noFMK=ZBnb!zg zY_K|#x^Y-+DOVDak(P#d!_0U$!q=ozSGP&&yZ6p|o_^I8vd>HINtli1ID5 zilfujR)cpw8JoPSSk4<_&zKmm@WYY9r^CS%*so6SD!`^79cv>SsFfuq@cMOvR?)-# zy~i)}zeH>D-(*O>Qdr$9$`=leqLmk?L6a|pWOtK?mBB@IincMym?C^A|O!h zaR7Q<=+D?QFffqFtkP9@>Xmdx_UGz|^esv1_+GB>E~VyuU09XGPMhCLGlRMUA{3JSw^zj^{oOxq-I9JfcLF`ZoM!@Bj+oWDO7Wrduix23XNL zB;!Hkp#cDn`x)1nK@i7F9Lk{AR9#)&X@6vAls!Vb@%w(HE(bk%g+U8ZPp-VkY|X#^ k|Emy&n!#NjpHTp);XH#cK2WeDYpDThN?M8)@*ltcA9{Owt^fc4 literal 0 HcmV?d00001 diff --git a/app/photo/skins/default/style.css b/app/photo/skins/default/style.css new file mode 100644 index 0000000..ed2f6c0 --- /dev/null +++ b/app/photo/skins/default/style.css @@ -0,0 +1,272 @@ +.show_photo{} +.show_photo img{max-width:100%;} + +.wr { + overflow: hidden; + table-layout: fixed; + width: 100%; + word-wrap: break-word; +} + +.albumlst { + float: left; + margin: 7px; + width: 170px; + border:solid 1px #CCCCCC; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); +} + +.album_photo { +display: block; +overflow: hidden; +width: 181px; +} + +.album_photo img{} + +.album_photo:link { + color: #777777; + display: block; + font-style: italic; +} + +.album { + background: url("albumback.gif") no-repeat scroll 1px 1px transparent; + padding: 4px 7px 7px 4px; +} + +.albumlst_r { + color: #777777; + overflow: hidden; + padding-top: 4px; + word-wrap: break-word; +} + +.pl2 { + color: #666666; + font: 14px/150% Arial,Helvetica,sans-serif; +} +.albumlst_descri { + color: #333333; + margin-bottom: 10px; +} + +.mbt { + clear: both; + margin: 0; + padding: 0; +} +.mbtl { +float: left; + margin: 8px 7px 0 0; + padding: 0; + width: 55px; +} + +.mbtrdot { + min-height: 55px; + overflow: hidden; + padding: 4px 0; +} + +.extra { + clear: both; + text-align: right; +} + +.photitle { + border-bottom: 1px solid #DDDDDD; + margin-bottom: 5px; + padding-bottom: 5px; + text-align: right; +} +.photo_wrap { + display: inline; + float: left; + margin: 10px 7px; + overflow: hidden; + width: 170px; + border:solid 1px #CCCCCC; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + +} +.photolst_photo { + margin: 0; + width: 180px; +} +.photo_wrap .pl { + margin: 6px 0 3px; +} +.gact { + color: #BBBBBB; + cursor: pointer; + font-size: 12px; + text-align: center; +} + +.sns-bar { + clear: both; + color: #666666; + margin-bottom: 20px; + overflow: hidden; + padding-top: 20px; +} +.sns-bar-donate { + float: left; + margin-right: 15px; +} +.sns-bar-rec { + float: left; +} +.sns-bar form, .sns-bar .rec-sec { + display: inline-block; + float: none; +} +.rec-sec { + color: #999999; + text-align: right; +} +.lnk-sharing { + border: 1px solid #B9DCD0; + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 19px; + line-height: 19px; + overflow: hidden; + padding: 0 8px; + vertical-align: middle; +} +a.lnk-sharing:link, a.lnk-sharing:visited { + background-color: #F2F8F2; + border-color: #E3F1ED; + color: #4F946E; +} +.sns-bar-fav { + float: right; +} + +.btn-fav { + border: 1px solid #EDCEBA; + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 19px; + line-height: 19px; + margin-left: 4px; + overflow: hidden; + padding: 0 8px 0 30px; + vertical-align: middle; +} +.fav-add, .fav-add:link, .fav-add:hover { + background: url("ic_like.png") no-repeat scroll 8px 3px transparent; +} +a.btn-fav:link, a.btn-fav:visited { + background-color: #FFF6EE; + border-color: #F2ECE7; + color: #99776B; +} +.clearfix { + display: block; +} + +.rr { + float: right; +} +.ll { + float: left; +} +.photo_descri { + overflow: hidden; + padding: 0 0 0 14px; + word-wrap: break-word; +} +.edtext { + margin: 7px 0 15px; + width: 100%; +} + +#comments { + overflow: hidden; + padding: 20px 0 0; + width: 100%; + word-wrap: break-word; +} +.wrap { + background: url("topicbar.gif") no-repeat scroll 0 0 transparent; + display: block; +} +h4 { + background: url("topicbar.gif") no-repeat scroll right top transparent; + color: #666666; + font: 12px/1.8em Arial,Helvetica,sans-serif; + height: 26px; + margin: 0 0 10px 4px; + overflow: hidden; +} +.align-right { + text-align: right; +} +.gact a:link, a.gact:link { + color: #BBBBBB; + font-size: 12px; + text-align: center; + text-decoration: none; +} +.txd textarea { + width: 90%; +} +textarea { + border: 1px solid #CCCCCC; + font-size: 14px; + padding: 3px; +} +textarea { + font-family: Arial; + overflow: auto; +} +textarea { + resize: none; +} + +.photo-complete { + background: none repeat scroll 0 0 #F8F8F8; + margin-bottom: 15px; + padding: 15px 20px 1px; +} +.photo-item { + margin-bottom: 15px; +} + +.photo-item .cover { + float:left; + margin-right: 10px; + vertical-align: top; +} +.photo-item .cover a { + display: block; + margin-bottom: -3px; + text-align: center; + width: 100px; +} +.photo-item .choose-cover { + text-align: center; +} +label { + font-family: Tahoma; + vertical-align: middle; +} + + +.photo-item .intro{margin-left: 110px;} + +.photo-item .intro textarea { + border: 1px solid #DDDDDD; + color: #666666; + padding: 5px; + width: 100%; + border-radius: 5px; + +} +.photo-item .intro p { + margin: 0; + text-align: right; +} \ No newline at end of file diff --git a/app/pubs/about.php b/app/pubs/about.php new file mode 100644 index 0000000..f786ea8 --- /dev/null +++ b/app/pubs/about.php @@ -0,0 +1,17 @@ + '公共', + 'version' => '1.2', + 'desc' => '辅助性APP', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/pubs/action/admin.php b/app/pubs/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/pubs/action/admin.php @@ -0,0 +1,10 @@ +"Ok"); + echo json_encode($data); + } + else + { + //header("http/1.1 403 Forbidden"); + exit(); + } + + break; + +} \ No newline at end of file diff --git a/app/pubs/action/api.php b/app/pubs/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/pubs/action/api.php @@ -0,0 +1,9 @@ +buildImageVerify($width=65,$height=30,$randval=NULL,$verifyName='verify'); \ No newline at end of file diff --git a/app/pubs/action/download.php b/app/pubs/action/download.php new file mode 100644 index 0000000..0a4e0c0 --- /dev/null +++ b/app/pubs/action/download.php @@ -0,0 +1,113 @@ +isLogin(); + $ts=tsUrlCheck($ts); + if(aac('user')->isPublisher()==false) {tsNotice('ä½ å¯èƒ½è¢«é™åˆ¶æˆ–没有验è¯é‚®ç®±ï¼Œæ£€æŸ¥é‚®ç®±æ˜¯å¦è®¤è¯ã€‚','->点击认è¯<-',tsUrl('user','verify'));} + $userme=aac('user')->getOneUser($userid); + + $the_file=$new['pubs']->find('editor',array( + 'pwd'=>$ts, + + )); + if($the_file) + { + $file_dir = "uploadfile/editor/".$the_file['url']; + if (!file_exists($file_dir)) { //检查文件是å¦å­˜åœ¨ + echo "文件已删除"; + exit; + }else{ + if($the_file['userid']==$userid) + { + download($file_dir,$the_file['title']); + exit; + }else + { + if(aac('user')->delScore($userid,"download file:" . $the_file['title'],2)) + { + download($file_dir,$the_file['title']); + aac('user')->addScore($the_file['userid'],$userme['username']."download:" . $the_file['title'],1,1); + exit; + }else + { + tsNotice('下载文件需è¦2积分,你似乎ä¸å¤Ÿï¼'); + } + } + + + + } + + }else + { + echo "文件已删除"; + exit; + + } + + /* + $file_name = "187.doc"; + $file_dir = "uploadfile/editor/0/0/"; + if (!file_exists($file_dir . $file_name)) { //检查文件是å¦å­˜åœ¨ + echo "文件已删除"; + exit; + }else{ + + $file = fopen($file_dir . $file_name,"r"); // 打开文件 + // 输入文件标签 + Header("Content-type: application/octet-stream"); + Header("Accept-Ranges: bytes"); + Header("Accept-Length: ".filesize($file_dir . $file_name)); + Header("Content-Disposition: attachment; filename=" . $file_name); + // 输出文件内容 + echo fread($file,filesize($file_dir . $file_name)); + fclose($file); + exit; + + } + */ + +?> diff --git a/app/pubs/action/draft.php b/app/pubs/action/draft.php new file mode 100644 index 0000000..7226c25 --- /dev/null +++ b/app/pubs/action/draft.php @@ -0,0 +1,37 @@ +replace('draft',array( + 'userid'=>$userid, + 'types'=>$types, + ),array( + 'userid'=>$userid, + 'types'=>$types, + 'title'=>$title, + 'content'=>$content, + 'addtime'=>time(), + )); + + getJson('已自动ä¿å­˜å†…容到è‰ç¨¿ç®±ï¼',1); + +} \ No newline at end of file diff --git a/app/pubs/action/editor.php b/app/pubs/action/editor.php new file mode 100644 index 0000000..a96c979 --- /dev/null +++ b/app/pubs/action/editor.php @@ -0,0 +1,126 @@ +isLogin(); + + $id = $new['pubs']->create('editor',array( + 'userid'=>$userid, + 'type'=>'photo', + 'addtime'=>time(), + )); + + $arrUpload = tsUpload($_FILES['photo'], $id, 'editor', array('jpg', 'gif', 'png', 'jpeg'),'sy.png'); + if ($arrUpload) { + $new['pubs'] -> update('editor', array( + 'id' => $id + ), array( + 'title'=>$arrUpload['name'], + 'path' => $arrUpload['path'], + 'url' => $arrUpload['url'] + )); + + if($TS_SITE['file_upload_type']==1){ + #阿里云(对象云存储OSS)æ•°æ® + $url = $TS_SITE['alioss_bucket_url'].'/'.'uploadfile/editor/'.$arrUpload['url'].'?x-oss-process=image/resize,w_800'; + }else{ + #æœ¬åœ°æ•°æ® + $url = SITE_URL.'uploadfile/editor/'.$arrUpload['url']; + } + + if($js==1){ + + echo json_encode(array( + 'errno'=>0, + 'data'=>array( + 0=>$url, + //0=>tsXimg($arrUpload['url'],'editor','640','',$arrUpload['path']), + ), + )); + exit(); + + }else{ + + echo $url; + //echo tsXimg($arrUpload['url'],'editor','640','',$arrUpload['path']); + exit(); + + } + + + }else{ + + $new['pubs']->delete('editor',array( + 'id'=>$id, + )); + + } + + + break; + + + //针对editor.md编辑器的图片上传 + case "markdown": + //var_dump($_FILES['editormd-image-file']); + $userid = aac('user')->isLogin(); + + $id = $new['pubs']->create('editor',array( + 'userid'=>$userid, + 'type'=>'photo', + 'addtime'=>time(), + )); + + $arrUpload = tsUpload($_FILES['editormd-image-file'], $id, 'editor', array('jpg', 'gif', 'png', 'jpeg'),'sy.png'); + if ($arrUpload) { + $new['pubs'] -> update('editor', array( + 'id' => $id + ), array( + 'title'=>$arrUpload['name'], + 'path' => $arrUpload['path'], + 'url' => $arrUpload['url'] + )); + + + if($TS_SITE['file_upload_type']==1){ + #阿里云(对象云存储OSS)æ•°æ® + $url = $TS_SITE['alioss_bucket_url'].'/'.'uploadfile/editor/'.$arrUpload['url'].'?x-oss-process=image/resize,w_800'; + }else{ + #æœ¬åœ°æ•°æ® + $url = SITE_URL.'uploadfile/editor/'.$arrUpload['url']; + } + + echo json_encode(array( + 'success'=>1, + 'message'=>'图片上传æˆåŠŸï¼', + 'url'=>$url, + )); + + + }else{ + + $new['pubs']->delete('editor',array( + 'id'=>$id, + )); + + echo json_encode(array( + 'success'=>0, + 'message'=>'图片上传失败ï¼', + 'url'=>'', + )); + + } + + break; + +} \ No newline at end of file diff --git a/app/pubs/action/email.php b/app/pubs/action/email.php new file mode 100644 index 0000000..12a2b60 --- /dev/null +++ b/app/pubs/action/email.php @@ -0,0 +1,103 @@ +find('anti_email',array( + 'email'=>$email, +)); +if($is_anti_email>0){ + getJson('éžæ³•æ“作ï¼',1,0); +} + +if($typeid==1){ + $strUserEmail = $new['pubs']->find('user',array( + 'email'=>$email, + )); + if($strUserEmail){ + getJson('Emailå·²ç»å­˜åœ¨ï¼',1,0); + } +}elseif($typeid==2){ + $strUserEmail = $new['pubs']->find('user',array( + 'email'=>$email, + )); + + if($strUserEmail==''){ + getJson('Emailä¸å­˜åœ¨ï¼',1,0); + } +} + + +$strEmail = $new['pubs']->find('email_code',array( + 'email'=>$email, +)); + +$code = random(4,1); + +if($strEmail){ + + $time = time(); + $ptime = strtotime($strEmail['addtime']); + + $ntime = $time-$ptime; + + #短信å‘é€é—´é𔿗¶é—´ + $email_code_send_time = tsIntval($TS_APP['email_code_send_time']); + if($email_code_send_time==0) $email_code_send_time = 30; + + $time30 = 60*$email_code_send_time; + + if($ntime<$time30){ + //echo 1;exit;//30分钟内åªèƒ½å‘é€ä¸€æ¬¡çŸ­ä¿¡éªŒè¯ç  + getJson('30分钟内åªèƒ½å‘é€ä¸€æ¬¡Email验è¯ç ï¼',1,0); + }else{ + + $new['pubs']->update('email_code',array( + 'email'=>$email, + ),array( + 'code'=>$code, + 'nums'=>0, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + $result = aac('mail')->postMail($email,$TS_SITE['site_title'].' Email验è¯ç ï¼š'.$code,$TS_SITE['site_title'].' Email验è¯ç ï¼š'.$code); + + getJson('å‘逿ˆåŠŸï¼',1,1); + + } + +}else{ + + $new['pubs']->create('email_code',array( + 'email'=>$email, + 'code'=>$code, + 'nums'=>0, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + $result = aac('mail')->postMail($email,$TS_SITE['site_title'].' Email验è¯ç ï¼š'.$code,$TS_SITE['site_title'].' Email验è¯ç ï¼š'.$code); + + getJson('å‘逿ˆåŠŸï¼',1,1); + +} \ No newline at end of file diff --git a/app/pubs/action/file.php b/app/pubs/action/file.php new file mode 100644 index 0000000..fe81e50 --- /dev/null +++ b/app/pubs/action/file.php @@ -0,0 +1,30 @@ +isLogin(); + +$dest_dir = 'cache/upload'; + +createFolders ( $dest_dir ); + +$arrType = explode ( '.', strtolower ( $_FILES ['filedata'] ['name'] ) ); + +$type = array_pop ( $arrType ); + +if (in_array ( $type, array('doc','pdf','ppt','xls','txt') )) { + + $name = $userid .'.'. $type; + + $dest = $dest_dir . '/' . $name; + + unlink ( $dest ); + + move_uploaded_file ( $_FILES ['filedata'] ['tmp_name'], mb_convert_encoding ( $dest, "gb2312", "UTF-8" ) ); + + chmod ( $dest, 0777 ); + + echo SITE_URL.$dest; + +} \ No newline at end of file diff --git a/app/pubs/action/home.php b/app/pubs/action/home.php new file mode 100644 index 0000000..a5631e7 --- /dev/null +++ b/app/pubs/action/home.php @@ -0,0 +1,10 @@ +find('anti_phone',array( + 'phone'=>$phone, +)); +if($is_anti_phone>0){ + getJson('éžæ³•æ“作ï¼',1,0); +} + +if($typeid==1){ + $strUserPhone = $new['pubs']->find('user',array( + 'phone'=>$phone, + )); + + if($strUserPhone){ + //echo 3;exit;//手机å·å·²ç»å­˜åœ¨ + getJson('手机å·å·²ç»å­˜åœ¨ï¼',1,0); + } +}elseif($typeid==2){ + + $strUserPhone = $new['pubs']->find('user',array( + 'phone'=>$phone, + )); + + if($strUserPhone==''){ + //echo 4;exit;//手机å·ä¸å­˜åœ¨ + getJson('手机å·ä¸å­˜åœ¨ï¼',1,0); + } +} + + +$strPhone = $new['pubs']->find('phone_code',array( + 'phone'=>$phone, +)); + +$code = random(4,1); + +if($strPhone){ + + $time = time(); + $ptime = strtotime($strPhone['addtime']); + + $ntime = $time-$ptime; + + #短信å‘é€é—´é𔿗¶é—´ + $phone_code_send_time = tsIntval($TS_APP['phone_code_send_time']); + if($phone_code_send_time==0) $phone_code_send_time = 30; + + $time30 = 60*$phone_code_send_time; + + if($ntime<$time30){ + //echo 1;exit;//30分钟内åªèƒ½å‘é€ä¸€æ¬¡çŸ­ä¿¡éªŒè¯ç  + getJson($phone_code_send_time.'分钟内åªèƒ½å‘é€ä¸€æ¬¡çŸ­ä¿¡éªŒè¯ç ï¼',1,0); + }else{ + + $new['pubs']->update('phone_code',array( + 'phone'=>$phone, + ),array( + 'code'=>$code, + 'nums'=>0, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + $response = aac('mail')->sendSms($phone,$code); + #var_dump($response); + + //echo 2;exit;//å‘逿ˆåŠŸ + getJson('å‘逿ˆåŠŸï¼',1,1); + + } + +}else{ + + $new['pubs']->create('phone_code',array( + 'phone'=>$phone, + 'code'=>$code, + 'nums'=>0, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + $response = aac('mail')->sendSms($phone,$code); + #var_dump($response); + + //echo 2;exit;//å‘逿ˆåŠŸ + getJson('å‘逿ˆåŠŸï¼',1,1); + +} \ No newline at end of file diff --git a/app/pubs/action/photo.php b/app/pubs/action/photo.php new file mode 100644 index 0000000..9a35c0b --- /dev/null +++ b/app/pubs/action/photo.php @@ -0,0 +1,51 @@ + + + */ + +//集åˆJS的临时上传 + +$userid = aac('user')->isLogin(); + +$dest_dir = 'cache/upload'; + +createFolders ( $dest_dir ); + +$arrType = explode ( '.', strtolower ( $_FILES ['filedata'] ['name'] ) ); + +$type = array_pop ( $arrType ); + +if (in_array ( $type, array('jpg','jpeg','gif','png') )) { + + $name = $userid .'.'. $type; + + $dest = $dest_dir . '/' . $name; + + unlink ( $dest ); + + move_uploaded_file ( $_FILES ['filedata'] ['tmp_name'], mb_convert_encoding ( $dest, "gb2312", "UTF-8" ) ); + + chmod ( $dest, 0777 ); + + echo SITE_URL.$dest.'?v='.rand(); + +} \ No newline at end of file diff --git a/app/pubs/action/plugin.php b/app/pubs/action/plugin.php new file mode 100644 index 0000000..900f39b --- /dev/null +++ b/app/pubs/action/plugin.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/app/pubs/action/urltoid.php b/app/pubs/action/urltoid.php new file mode 100644 index 0000000..0048c3e --- /dev/null +++ b/app/pubs/action/urltoid.php @@ -0,0 +1,56 @@ +isLogin(); + $ts=tsFilter($ts); + $url=str_replace("/uploadfile/editor/","",$ts); + if($url=='') + { + echo "erro"; + exit; + + } + $the_file=$new['pubs']->find('editor',array( + 'url'=>$url, + + )); + if($the_file) + { + echo $the_file['id']; + }else + { + echo "-1"; + + } + + /* + $file_name = "187.doc"; + $file_dir = "uploadfile/editor/0/0/"; + if (!file_exists($file_dir . $file_name)) { //检查文件是å¦å­˜åœ¨ + echo "文件已删除"; + exit; + }else{ + + $file = fopen($file_dir . $file_name,"r"); // 打开文件 + // 输入文件标签 + Header("Content-type: application/octet-stream"); + Header("Accept-Ranges: bytes"); + Header("Accept-Length: ".filesize($file_dir . $file_name)); + Header("Content-Disposition: attachment; filename=" . $file_name); + // 输出文件内容 + echo fread($file,filesize($file_dir . $file_name)); + fclose($file); + exit; + + } + */ + + ?> + diff --git a/app/pubs/class.pubs.php b/app/pubs/class.pubs.php new file mode 100644 index 0000000..00b9c48 --- /dev/null +++ b/app/pubs/class.pubs.php @@ -0,0 +1,556 @@ +decrypt($userkey,$GLOBALS['TS_SITE']['site_pkey']); + $isUser = $this->findCount('user',array( + 'userid'=>$userid, + )); + if($isUser == 0){ + echo json_encode(array( + 'status'=> 0, + 'msg'=> 'éžæ³•æ“作', + 'data'=> '', + )); + exit; + }else{ + return $userid; + } + } + + /** + * @param $string + * @param string $action + * @return string + */ + public function strCode($string, $action = 'ENCODE'){ + $action != 'ENCODE' && $string = base64_decode($string); + $code = ''; + $key = $GLOBALS['TS_SITE']['site_pkey']; + $keyLen = strlen($key); + $strLen = strlen($string); + for ($i = 0; $i < $strLen; $i++) { + $k = $i % $keyLen; + $code .= $string[$i] ^ $key[$k]; + } + return ($action != 'DECODE' ? base64_encode($code) : $code); + } + + /** + * @param $phone + * @param $code + * @return bool + */ + public function verifyPhoneCode($phone, $code){ + $strPhoneCode = $this->find('phone_code',array( + 'phone'=>$phone, + )); + + #ç©ºæ•°æ® + if($strPhoneCode==''){ + return false;exit; + } + + #空验è¯ç  + if($strPhoneCode['code']==''){ + return false;exit; + } + + #手机验è¯ç é”™è¯¯æ¬¡æ•°>=2 + if($strPhoneCode['nums']>=2){ + $this->update('phone_code',array( + 'phone'=>$phone, + ),array( + 'code'=>'', + 'nums'=>0, + )); + return false;exit; + } + + #手机验è¯ç é”™è¯¯ + if($strPhoneCode['code']!=$code){ + $this->update('phone_code',array( + 'phone'=>$phone, + ),array( + 'nums'=>$strPhoneCode['nums']+1, + )); + return false;exit; + } + return true; + } + + /** + * 验è¯Email验è¯ç  + */ + public function verifyEmailCode($email, $code){ + $strEmailCode = $this->find('email_code',array( + 'email'=>$email, + )); + + #ç©ºæ•°æ® + if($strEmailCode==''){ + return false;exit; + } + + #空验è¯ç  + if($strEmailCode['code']==''){ + return false;exit; + } + + #验è¯ç é”™è¯¯æ¬¡æ•°>=2 + if($strEmailCode['nums']>=2){ + $this->update('email_code',array( + 'email'=>$email, + ),array( + 'code'=>'', + 'nums'=>0, + )); + return false;exit; + } + + #验è¯ç é”™è¯¯ + if($strEmailCode['code']!=$code){ + $this->update('email_code',array( + 'email'=>$email, + ),array( + 'nums'=>$strEmailCode['nums']+1, + )); + return false;exit; + } + return true; + } + + + + /** + * 删除点赞 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param integer $userid + * @return void + */ + public function delLove($ptable,$pkey,$pid,$userid=0){ + if($userid){ + $this->delete('love',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + 'userid'=>$userid, + )); + }else{ + $this->delete('love',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + } + + return true; + } + + /** + * 添加项目数æ®åˆ°ts_topic表 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param string $pjson + * @param [type] $groupid + * @param [type] $userid + * @param [type] $title + * @param [type] $gaiyao + * @return void + */ + public function addPtable($ptable,$pkey,$pid,$pjson,$groupid,$userid,$title,$gaiyao){ + $topicid = $this->create('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + 'pjson'=>$pjson, + 'groupid'=>$groupid, + 'userid'=>$userid, + 'title'=>$title, + 'gaiyao'=>$gaiyao, + 'isaudit'=>0, + 'addtime'=>time(), + 'uptime'=>time(), + )); + return $topicid; + } + + /** + * 更新项目数æ®åˆ°ts_topic表 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param string $pjson + * @param [type] $title + * @param [type] $gaiyao + * @return void + */ + public function editPtable($ptable,$pkey,$pid,$pjson,$title,$gaiyao){ + $this->update('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + ),array( + 'pjson'=>$pjson, + 'title'=>$title, + 'gaiyao'=>$gaiyao, + )); + } + + /** + * 更新项目æµè§ˆæ•°åˆ°ts_topic表 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param [type] $count_view + * @return void + */ + public function upPtableView($ptable,$pkey,$pid,$count_view){ + $this->update('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + ),array( + 'count_view'=>$count_view, + )); + } + + /** + * 更新项目评论数到ts_topic表 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param [type] $count_comment + * @return void + */ + public function upPtableComment($ptable,$pkey,$pid,$count_comment){ + if($ptable!='topic'){ + $this->update('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + ),array( + 'count_comment'=>$count_comment, + 'uptime'=>time(), + )); + } + } + + /** + * 更新项目点赞数到ts_topic表 + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param [type] $count_love + * @return void + */ + public function upPtableLove($ptable,$pkey,$pid,$count_love){ + if($ptable!='topic'){ + $this->update('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + ),array( + 'count_love'=>$count_love, + )); + } + } + + /** + * 从ts_topicè¡¨åˆ é™¤é¡¹ç›®æ•°æ® + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @return void + */ + public function delPtable($ptable,$pkey,$pid){ + $this->delete('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + )); + } + + /** + * 用户内容添加ã€ä¿®æ”¹ã€åˆ é™¤è®°å½• + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param [type] $userid + * @param [type] $title + * @param [type] $content + * @param [type] $status + * @return void + */ + public function addLogs($ptable,$pkey,$pid,$userid,$title,$content,$status){ + $this->create('logs',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + 'userid'=>$userid, + 'title'=>$title, + 'content'=>$content, + 'status'=>$status, + 'addtime'=>time(), + )); + } + + /** + * 更新项目推è + * + * @param [type] $ptable + * @param [type] $pkey + * @param [type] $pid + * @param integer $isrecommend 1推è0䏿ލè + * @return void + */ + public function upPtableRecommend($ptable,$pkey,$pid,$isrecommend=1){ + if($ptable!='topic'){ + $this->update('topic',array( + 'ptable'=>$ptable, + 'pkey'=>$pkey, + 'pid'=>$pid, + ),array( + 'isrecommend'=>$isrecommend, + )); + } + } + + /** + * ThinkSAAS分å—上传文件 + * upsizeå’Œupcount为空的情况下就是å•个文件,并且该文件比设定的大å°è¦å° + * + * @param [type] $userid 用户ID + * @param [type] $upsize 总共分几段上传 + * @param [type] $upcount æ¯æ¬¡åˆ†æ®µçš„size + * @param array $uptype 上传文件类型 + * @return void + */ + public function chunkUpload($userid,$files,$upsize,$upcount,$uptype=array()){ + + $upid = $this->create('upload',array( + 'userid'=>$userid, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + #分å—上传到本地æœåС噍 + $arrUpload = tsUploadLocal($files,$upid,'upload',$uptype); + + if($arrUpload['size']){ + + $this->update('upload',array( + 'upid'=>$upid, + ),array( + 'fileurl'=>$arrUpload['url'], + 'filename'=>$arrUpload['name'], + 'filesize'=>$arrUpload['size'], + 'filetype'=>$arrUpload['type'], + )); + + if($arrUpload['size']<$upsize || $upsize==''){ + + $arrUp = $this->findAll('upload',array( + 'userid'=>$userid, + ),'upid asc'); + + if(count($arrUp)==$upcount || ($arrUp && $upcount=='')){ + + return $arrUp; + + }else{ + + return 1; + + } + + }else{ + + return 1; + + } + + }else{ + + return 0; + + } + + } + + /** + * åˆå¹¶ä¸Šä¼ æ–‡ä»¶ + * + * @param [type] $userid + * @param [type] $projectid + * @param [type] $dir + * @param array $arrUp + * @return void + */ + public function mergeUpload($projectid,$dir,$arrUp=array()){ + + $path = getDirPath($projectid); + $dest_dir = 'uploadfile/' . $dir . '/' . $path; + createFolders($dest_dir); + $name = $projectid . '.' . $arrUp[0]['filetype']; + $dest = $dest_dir . '/' . $name; + + #删除原文件 + unlink($dest); + + $fp = fopen($dest, "ab"); + + $filesize = 0; + + foreach($arrUp as $key=>$item){ + + $upfile = 'uploadfile/upload/'.$item['fileurl']; + $handle = fopen($upfile,"rb"); + fwrite($fp, fread($handle,$item['filesize'])); + fclose($handle); + unset($handle); + unlink($upfile);//åˆå¹¶å®Œæ¯•的文件就删除 + + $filesize = $item['filesize']; + $filesize++; + + #删除ts_upload + $this->delete('upload',array( + 'upid'=>$item['upid'], + )); + + } + + return array( + 'name' => $arrUp[0]['filename'], + 'path' => $path, + 'url' => $path . '/' . $name, + 'type' => $arrUp[0]['filetype'], + 'size' => $filesize, + ); + + } + + /** + * 删除用户分段上传的文件ts_upload + * + * @param [type] $userid + * @return void + */ + public function delUpload($userid){ + $arrUp = $this->findAll('upload',array( + 'userid'=>$userid, + ),'upid asc'); + foreach($arrUp as $key=>$item){ + $upfile = 'uploadfile/upload/'.$item['fileurl']; + unlink($upfile); + } + + #删除ts_upload + $this->delete('upload',array( + 'userid'=>$userid, + )); + + } + + /** + * æ›´æ–°APP用户组æƒé™ + * + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + * + */ + public function upAppPermissions($ugid,$app,array $arrOption){ + foreach($arrOption as $key=>$item){ + $status = $item; + if($ugid==1) $status=1; + $arrKey = explode('_',$key); + $key_app = $arrKey[0]; + $key_ac = $arrKey[1]; + $key_mg = ''; + $key_api = ''; + $key_ts = ''; + + if($key_ac=='admin'){ + $key_mg = $arrKey[2]; + $key_ts = $arrKey[3]; + }elseif($key_ac=='api'){ + $key_api = $arrKey[2]; + $key_ts = $arrKey[3]; + }else{ + $key_ts = $arrKey[2]; + } + if($key_ts==null) $key_ts=''; + + $this->replace('permissions',array( + 'ugid'=>$ugid, + 'app'=>$key_app, + 'action'=>$key_ac, + 'mg'=>$key_mg, + 'api'=>$key_api, + 'ts'=>$key_ts, + ),array( + 'ugid'=>$ugid, + 'app'=>$key_app, + 'action'=>$key_ac, + 'mg'=>$key_mg, + 'api'=>$key_api, + 'ts'=>$key_ts, + 'status'=>$status, + )); + + } + + //存储permissions到本地文件 + $arrPermissions = $this->findAll('permissions',array( + 'app'=>$app, + )); + foreach($arrPermissions as $key=>$item){ + + $option = $item['app'].'_'.$item['action']; + if($item['mg']) $option .= '_'.$item['mg']; + if($item['api']) $option .= '_'.$item['api']; + if($item['ts']) $option .= '_'.$item['ts']; + + $arrData[$item['ugid']][$option] = $item['status']; + + } + + fileWrite($app.'_permissions.php','data',$arrData); + $GLOBALS['tsMySqlCache']->set($app.'_permissions',$arrData); + + } + + +} \ No newline at end of file diff --git a/app/pubs/config.php b/app/pubs/config.php new file mode 100644 index 0000000..af06131 --- /dev/null +++ b/app/pubs/config.php @@ -0,0 +1,6 @@ + +
    公共管ç†
    + + +
    \ No newline at end of file diff --git a/app/pubs/html/admin/options.html b/app/pubs/html/admin/options.html new file mode 100644 index 0000000..0ed5048 --- /dev/null +++ b/app/pubs/html/admin/options.html @@ -0,0 +1,25 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + +
    手机验è¯ç å‘é€é—´é𔿗¶é—´ï¼š 分钟
    Email验è¯ç å‘é€é—´é𔿗¶é—´ï¼š 分钟
    + +
    +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/pubs/html/admin/plugin_menu.html b/app/pubs/html/admin/plugin_menu.html new file mode 100644 index 0000000..af40968 --- /dev/null +++ b/app/pubs/html/admin/plugin_menu.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/pubs/html/home.html b/app/pubs/html/home.html new file mode 100644 index 0000000..5f83cfb --- /dev/null +++ b/app/pubs/html/home.html @@ -0,0 +1,228 @@ + + + + + + + + + + + {$GLOBALS['TS_SITE']['site_title']} - {$title} + + + + + + + + + + + + + + + + + + + + + + + {if $GLOBALS['TS_CF']['urllock']} + + {/if} + + + + + + + + +
    +
    +
    + + + +

    {$GLOBALS['TS_SITE']['site_title']}

    +
    {$title}
    + + + + +
    +
    + + + + + + + + + + + +
    +
    +
    + + + +
    + +
    + + + + + + + + +{php doAction('pub_footer')} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/pubs/js/admin.js b/app/pubs/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/pubs/js/extend.func.js b/app/pubs/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/pubs/skins/default/style.css b/app/pubs/skins/default/style.css new file mode 100644 index 0000000..e69de29 diff --git a/app/search/about.php b/app/search/about.php new file mode 100644 index 0000000..424f05d --- /dev/null +++ b/app/search/about.php @@ -0,0 +1,17 @@ + 'æœç´¢', + 'version' => '1.2', + 'desc' => 'æœç´¢APP', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/search/action/admin.php b/app/search/action/admin.php new file mode 100644 index 0000000..3f99995 --- /dev/null +++ b/app/search/action/admin.php @@ -0,0 +1,9 @@ +'å°ç»„', + 'topic'=>'帖å­', + 'user'=>'用户', + 'article'=>'文章', + ); + + + $strOption = getAppOptions('search'); + + include template("admin/options"); + + break; + + case "do": + + $arrOption = $_POST['option']; + + #æ›´æ–°appé…置选项 + upAppOptions('search',$arrOption); + + #æ›´æ–°app导航和我的导航 + upAppNav('search',$arrOption['appname']); + + qiMsg('修改æˆåŠŸï¼'); + + break; +} \ No newline at end of file diff --git a/app/search/action/common.php b/app/search/action/common.php new file mode 100644 index 0000000..291f198 --- /dev/null +++ b/app/search/action/common.php @@ -0,0 +1,4 @@ +isLogin(); \ No newline at end of file diff --git a/app/search/action/index.php b/app/search/action/index.php new file mode 100644 index 0000000..d219dec --- /dev/null +++ b/app/search/action/index.php @@ -0,0 +1,30 @@ +'group','kw'=>$kw,'page'=>'')); + $lstart = $page*10-10; + + $arrGroup = $db->fetch_all_assoc("select * from ".dbprefix."group WHERE `groupname` like '%$kw%' order by groupid desc limit $lstart,10"); + + $group_num = $db->once_num_rows("select * from ".dbprefix."group WHERE groupname like '%$kw%'"); + + $pageUrl = pagination($group_num, 10, $page, $url); + + $title = $kw.' - å°ç»„æœç´¢'; + + include template("s_group"); + break; + //å¸–å­ + case "topic": + + $page = tsIntval($_GET['page'],1); + $url = tsUrl('search','s',array('ts'=>'topic','kw'=>$kw,'page'=>'')); + $lstart = $page*10-10; + + $arrTopic = $db->fetch_all_assoc("select * from ".dbprefix."topic WHERE `title` like '%$kw%' order by topicid desc limit $lstart,10"); + + $topic_num = $db->once_num_rows("select * from ".dbprefix."topic WHERE title like '%$kw%'"); + + $pageUrl = pagination($topic_num, 10, $page, $url); + + $title = $kw.' - 取孿œç´¢'; + include template("s_topic"); + break; + + //用户 + case "user": + + $page = tsIntval($_GET['page'],1); + $url = tsUrl('search','s',array('ts'=>'user','kw'=>$kw,'page'=>'')); + $lstart = $page*10-10; + + $arrUser = $db->fetch_all_assoc("select * from ".dbprefix."user_info WHERE `username` like '%$kw%' order by userid desc limit $lstart,10"); + + $user_num = $db->once_num_rows("select * from ".dbprefix."user_info WHERE `username` like '%$kw%'"); + + $pageUrl = pagination($user_num, 10, $page, $url); + + $title = $kw.' - 用户æœç´¢'; + include template("s_user"); + + break; + + case "article": + + $page = tsIntval($_GET['page'],1); + $url = tsUrl('search','s',array('ts'=>'article','kw'=>$kw,'page'=>'')); + $lstart = $page*10-10; + + $arrArticle = $db->fetch_all_assoc("select * from ".dbprefix."article WHERE `title` like '%$kw%' and `isaudit`='0' order by addtime desc limit $lstart,10"); + + $articleNum = $db->once_num_rows("select * from ".dbprefix."article WHERE `title` like '%$kw%' and `isaudit`='0'"); + + $pageUrl = pagination($articleNum, 10, $page, $url); + + $title = $kw.' - 文章æœç´¢'; + include template("s_article"); + + break; +} \ No newline at end of file diff --git a/app/search/action/xs.php b/app/search/action/xs.php new file mode 100644 index 0000000..8eb3563 --- /dev/null +++ b/app/search/action/xs.php @@ -0,0 +1,4 @@ +search; // æœç´¢å¯¹è±¡æ¥è‡ª XS 的属性 \ No newline at end of file diff --git a/app/search/class.search.php b/app/search/class.search.php new file mode 100644 index 0000000..c0c3024 --- /dev/null +++ b/app/search/class.search.php @@ -0,0 +1,18 @@ + +
    æœç´¢ç®¡ç†
    + + +
    \ No newline at end of file diff --git a/app/search/html/admin/options.html b/app/search/html/admin/options.html new file mode 100644 index 0000000..a2858d2 --- /dev/null +++ b/app/search/html/admin/options.html @@ -0,0 +1,40 @@ +{php include pubTemplate("header_admin")} + +
    + +{php include template("admin/menu");} + +
    + + + + + + + + + + {loop $arrSearch $key $item} + + {/loop} + + + + + +
    APPå称:
    APP介ç»ï¼š
    APP关键è¯ï¼š
    默认æœç´¢ï¼š + + + +
    {$item}æœç´¢ï¼šä¸å¼€å¯ å¼€å¯
    + +
    +
    + +
    + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/search/html/index.html b/app/search/html/index.html new file mode 100644 index 0000000..8dde293 --- /dev/null +++ b/app/search/html/index.html @@ -0,0 +1,73 @@ +{php include pubTemplate("header")} + +
    + + + + +
    +
    +
    + + +
    +
    + + +
    + æœç´¢ï¼š + {if $TS_APP['group']==1} | å°ç»„{/if} + {if $TS_APP['topic']==1} | 帖å­{/if} + {if $TS_APP['user']==1} | 用户{/if} + {if $TS_APP['article']==1} | 文章{/if} +
    + + + +
    +
    +
    + + + + {if $ts=='group'} + + {elseif $ts=='topic'} + + {elseif $ts=='user'} + + {elseif $ts=='article'} + + {else} + {/if} + + + +
    + +
    +
    +
    +
    + + +
    标题模糊æœç´¢
    + + +
    +
    + + +
    +
    +
    + + + + + + +
    + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/html/s_all.html b/app/search/html/s_all.html new file mode 100644 index 0000000..5ac6413 --- /dev/null +++ b/app/search/html/s_all.html @@ -0,0 +1,60 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    +{template s_menu} + +
    获得约 {$all_num} æ¡ç»“æžœ
    + +{loop $arrGroup $key $item} +
    +
    + +
    创建于 {php echo date('Y-m-d',$item[addtime])}   {$item[count_user]} 人
    +

    {php echo tsCutContent($item[groupdesc])}

    +
    +
    +{/loop} + +{loop $arrTopic $key $item} +
    +
    + +
    å‘表于 {php echo date('Y-m-d',$item[addtime])}   {$item[count_comment]} 回å¤
    +

    +
    +
    +{/loop} + +{loop $arrUser $key $item} +
    +
    +
    [用户]  {tsTitle($item[username])}
    +
    {php echo date('Y-m-d',$item[addtime])} 加入  {$item[count_followed]} 人关注
    +

    {$item[signed]}

    +
    +
    +{/loop} + + +{loop $arrArticle $key $item} +
    +
    +
    [文章]  {tsTitle($item[title])}
    +
    å‘表于 {$item[addtime]}   {$item[count_comment]} 回å¤
    +

    +
    +
    +{/loop} + + +
    {$pageUrl}
    +
    +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/html/s_article.html b/app/search/html/s_article.html new file mode 100644 index 0000000..7b6396e --- /dev/null +++ b/app/search/html/s_article.html @@ -0,0 +1,29 @@ +{php include pubTemplate("header")} + +
    + +
    +
    +{template s_menu} + +
    获得约 {$articleNum} æ¡ç»“æžœ
    + +{loop $arrArticle $key $item} +
    + +
    +
    [文章]  {tsTitle($item[title])}
    +
    å‘表于 {$item[addtime]}   {$item[count_comment]} 回å¤
    +

    +
    +
    +{/loop} + + +
    {$pageUrl}
    +
    +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/html/s_group.html b/app/search/html/s_group.html new file mode 100644 index 0000000..ab4a434 --- /dev/null +++ b/app/search/html/s_group.html @@ -0,0 +1,26 @@ +{php include pubTemplate("header")} + +
    + +
    +
    +{template s_menu} +
    获得约 {$group_num} æ¡ç»“æžœ
    + +{loop $arrGroup $key $item} +
    +
    + +
    创建于 {php echo date('Y-m-d',$item[addtime])}   {$item[count_user]} 人
    +

    {php echo tsCutContent($item[groupdesc])}

    +
    +
    +{/loop} + +
    {$pageUrl}
    +
    +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/html/s_menu.html b/app/search/html/s_menu.html new file mode 100644 index 0000000..c33762c --- /dev/null +++ b/app/search/html/s_menu.html @@ -0,0 +1,52 @@ +
    +
    +
    + + + +
    + æœç´¢ï¼š + {if $TS_APP['group']==1} | å°ç»„ {/if} + {if $TS_APP['topic']==1} | å¸–å­ {/if} + {if $TS_APP['user']==1} | 用户 {/if} + {if $TS_APP['article']==1} | 文章 {/if} +
    + +
    +
    + +
    + + + + + {if $ts=='group'} + + {elseif $ts=='topic'} + + {elseif $ts=='user'} + + {elseif $ts=='article'} + + {else} + {/if} + + + + +
    + +
    + +
    + +
    +
    + + + +
    +
    +
    + +
    diff --git a/app/search/html/s_topic.html b/app/search/html/s_topic.html new file mode 100644 index 0000000..e6b0ee8 --- /dev/null +++ b/app/search/html/s_topic.html @@ -0,0 +1,30 @@ +{php include pubTemplate("header")} + +
    + +
    +
    +{template s_menu} + +
    获得约 {$topic_num} æ¡ç»“æžœ
    + +{loop $arrTopic $key $item} +
    +
    +
    +
    + +
    å‘表于 {php echo date('Y-m-d',$item[addtime])}   {$item[count_comment]} 回å¤
    +

    +
    +
    +{/loop} + + +
    {$pageUrl}
    +
    +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/html/s_user.html b/app/search/html/s_user.html new file mode 100644 index 0000000..03d25ef --- /dev/null +++ b/app/search/html/s_user.html @@ -0,0 +1,26 @@ +{php include pubTemplate("header")} + +
    + +
    +
    +{template s_menu} +
    获得约 {$user_num} æ¡ç»“æžœ
    + +{loop $arrUser $key $item} +
    + +
    +
    [用户]  {tsTitle($item[username])}
    +
    {php echo date('Y-m-d',$item[addtime])} 加入  {$item[count_followed]} 人关注
    +

    {$item[signed]}

    +
    +
    +{/loop} +
    {$pageUrl}
    +
    +
    + +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/search/js/extend.func.js b/app/search/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/search/skin/style.css b/app/search/skin/style.css new file mode 100644 index 0000000..ff08f73 --- /dev/null +++ b/app/search/skin/style.css @@ -0,0 +1,78 @@ +.s_index { + text-align: center; + margin-top: 50px; +} + +.s_menu { + font-size: 14px; + padding-bottom: 20px; +} + +.s_input { + font-size: 14px; + width: 300px; + padding: 5px; +} + +.s_button { + font-size: 14px; + padding: 5px 10px; +} + +.s_hotkey { + padding: 10px; +} + +.s_select { + font-weight: bold; +} + +.s_top { + padding: 5px; + font-size: 14px; +}/*æœç´¢ç»“æžœ*/.result { + padding: 20px 0; + border-bottom: 1px dashed #CCCCCC; + position: relative; + width: 100%; + } + +.result .pic { + float: left; +} + +.result .content { + display: table-cell; +} + +.result .content h3 { + background: none repeat scroll 0 0 transparent; + float: left; + height: auto; + margin: 0 0 5px; + font-weight: normal; +} + +.result .rating-info, .result .info { + color: #999999; + position: absolute; + right: 10px; +} + +.result .content p { + clear: both; + color: #666666; + margin: 0 0 5px; +}/*æœç´¢å¸–å­*/.s_topic { + padding: 10px 0; + } + +.s_topic ul { +} + +.s_topic ul li { + border-bottom: dashed 1px #DDDDDD; + overflow: hidden; + padding: 10px 5px; + font-size: 14px; +} \ No newline at end of file diff --git a/app/search/skins/default/style.css b/app/search/skins/default/style.css new file mode 100644 index 0000000..fa20e68 --- /dev/null +++ b/app/search/skins/default/style.css @@ -0,0 +1,78 @@ +.s_index { + text-align: center; + margin-top: 50px; +} + +.s_menu { + font-size: 14px; + padding: 20px; +} + +.s_input { + font-size: 14px; + width: 300px; + padding: 5px; +} + +.s_button { + font-size: 14px; + padding: 5px 10px; +} + +.s_hotkey { + padding: 10px; +} + +.s_select { + font-weight: bold; +} + +.s_top { + padding: 5px; + font-size: 14px; +}/*æœç´¢ç»“æžœ*/.result { + padding: 20px 0; + border-bottom: 1px dashed #CCCCCC; + position: relative; + width: 100%; + } + +.result .pic { + float: left; +} + +.result .content { + display: table-cell; +} + +.result .content h3 { + background: none repeat scroll 0 0 transparent; + float: left; + height: auto; + margin: 0 0 5px; + font-weight: normal; +} + +.result .rating-info, .result .info { + color: #999999; + position: absolute; + right: 10px; +} + +.result .content p { + clear: both; + color: #666666; + margin: 0 0 5px; +}/*æœç´¢å¸–å­*/.s_topic { + padding: 10px 0; + } + +.s_topic ul { +} + +.s_topic ul li { + border-bottom: dashed 1px #DDDDDD; + overflow: hidden; + padding: 10px 5px; + font-size: 14px; +} \ No newline at end of file diff --git a/app/shop/about.php b/app/shop/about.php new file mode 100644 index 0000000..0d853b0 --- /dev/null +++ b/app/shop/about.php @@ -0,0 +1 @@ + '商店', 'version' => '1.0', 'desc' => '商店', 'url' => 'https://lmve.net', 'email' => '1337087466@qq.com', 'author' => '无闻风', 'author_url' => 'https://lmve.net', 'isoption' => '1', 'isinstall' => '1', 'issql' => '1', 'issystem' => '1', 'isappnav' => '1', 'ismy'=>'1', ); \ No newline at end of file diff --git a/app/shop/action/add.php b/app/shop/action/add.php new file mode 100644 index 0000000..e304380 --- /dev/null +++ b/app/shop/action/add.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/shop/action/buy.php b/app/shop/action/buy.php new file mode 100644 index 0000000..d86052c --- /dev/null +++ b/app/shop/action/buy.php @@ -0,0 +1,105 @@ +isLogin(); +$shopid = intval ( $_POST ['shopid'] ); +$much=intval ( $_POST ['much'] ); +$strshop = $new ['shop']->find ( 'shop', array ( + 'shopid' => $shopid +) );/* +if ($strshop == '') { + header ( "HTTP/1.1 404 Not Found" ); + header ( "Status: 404 Not Found" ); + $title = '404'; + include pubTemplate ( "404" ); + exit (); +}*/ +//å–å®¶ +$arrshopuser = aac ( 'user' )->getSimpleUser ( $strshop ['userid'] ); + +// 是å¦å®¡æ ¸ +if ($strshop ['isaudit'] == 1 && $TS_USER['isadmin']==0 && $TS_USER['userid']!=$strshop['userid']) { + tsNotice ( '内容审核中...' ); +} + +switch($_POST ['ts'] ) +{ + case "do": + $address=h($_POST['address']); + + if($strshop['type']==1)//注册类 + { + if($strshop['pay_type']==1)//积分支付 + { + $preg = '/[^|\s]([\s\S])[$|\s]/'; + $arr = explode("\n", $address); + $arr = array_filter($arr); // 删除空元素 + + $a=count($arr); //获å–ç æ•°é‡ + + if($a!=$much) + { + tsNotice('ä½ çš„è´­ä¹°æ•°é‡æ˜¯ï¼š'.$much.'但输入了:'.$a.'个申请'); + + } + + + if($much>$strshop['stock']) + { + tsNotice('库存ä¸è¶³ï¼ï¼'); + + } + + + + + $need_pay=$much*$strshop['pay']; + if(aac('user')->delScore($userid,"BUY".$strshop['title']."X".$much,$need_pay)) + { + $reorder=''; + for($b=0;$b<$a;$b++) + { + preg_replace('# #','',$arr[$b]); + + $reorder=$reorder.'
    for:'.$arr[$b].'
    Key:'.md5($arr[$b].$strshop['note']).'
    '; + + } + $orderid = $new['shop']->create('shop_order',array( + 'userid'=>$userid, + 'selluserid'=>$strshop['userid'], + 'shopid'=>$strshop['shopid'], + 'title'=>$strshop['title'], + 'content'=>$strshop['content'], + 'type'=>$strshop['type'], + 'pay' => $strshop['pay'], + 'pay_type' => $strshop['pay_type'], + 'much'=> $much, + 'address' => $address, + 'reorder'=>$reorder, + 'state' => 1, + 'addtime'=>date('Y-m-d H:i:s') + )); + $new['shop']->update ( 'shop', array ( + 'shopid' => $strshop['shopid'] + ), array ( + 'stock' => $strshop['stock']-$much + )); + aac('user')->addScore($strshop['userid'],"订å•:".$orderid."收益",$need_pay,1); + + }else + { + tsNotice('积分ä¸è¶³ï¼'); + } + + tsNotice('æˆåŠŸæäº¤','查看订å•',tsUrl('shop','order',array('id'=>$orderid))); + } + + } + + back; + case "cheack": + include template ( "buy" ); + back; + + +} diff --git a/app/shop/action/comment.php b/app/shop/action/comment.php new file mode 100644 index 0000000..2f7968e --- /dev/null +++ b/app/shop/action/comment.php @@ -0,0 +1,92 @@ +isLogin($js,$userkey); +switch($ts){ + + case "do": + + $authcode = strtolower($_POST['authcode']); + + if ($TS_SITE ['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + getJson ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ,$js,0); + } + } + + $shopid = intval($_POST['shopid']); + $content = tsClean($_POST['content'],$js); + $content2 = emptyText($_POST['content']);//测试空内容 + $ispublic = intval($_POST['ispublic']); + + //过滤内容开始 + if($TS_USER['isadmin']==0){ + aac('system')->antiWord($content,$js); + } + //è¿‡æ»¤å†…å®¹ç»“æŸ + + if($content2==''){ + getJson('没有任何内容是ä¸å…许你通过滴^_^',$js); + }else{ + $commentid = $new['shop']->create('shop_comment',array( + 'shopid' => $shopid, + 'userid' => $userid, + 'content' => $content, + 'addtime'=> time(), + )); + + + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(通知楼主有人回å¤ä»–的帖å­å•¦) + $strshop = $new['shop']->find('shop',array( + 'shopid'=>$shopid, + )); + + if($strshop['userid'] != $TS_USER['userid']){ + + $msg_userid = '0'; + $msg_touserid = $strshop['userid']; + $msg_content = '你的商å“:《'.$strshop['shopname'].'》新增一æ¡è¯„论,快去看看给个回å¤å§^_^ '; + $msg_tourl = tsUrl('shop','show',array('id'=>$shopid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + } + + header("Location: ".tsUrl('shop','show',array('id'=>$shopid))); + + } + + break; + + //删除评论 + case "delete": + + $commentid = intval($_GET['commentid']); + + $strComment = $new['shop']->find('shop_comment',array( + 'commentid'=>$commentid, + )); + + $strshop = $new['shop']->find('shop',array( + 'shopid'=>$strComment['shopid'], + )); + + + + if($strshop['userid']==$userid || $TS_USER['isadmin']==1 || $strComment['userid']==$userid){ + + $new['shop']->delete('shop_comment',array( + 'commentid'=>$commentid, + )); + + + + + + } + + //跳转回到帖å­é¡µ + header("Location: ".tsUrl('shop','show',array('id'=>$strComment['shopid']))); + + break; +} \ No newline at end of file diff --git a/app/shop/action/do.php b/app/shop/action/do.php new file mode 100644 index 0000000..926c5c5 --- /dev/null +++ b/app/shop/action/do.php @@ -0,0 +1,70 @@ + + + isLogin(); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('你还ä¸èƒ½å‘布内容,检查邮箱是å¦è®¤è¯ã€‚','->点击认è¯<-',tsUrl('user','verify')); + +//echo print_r($_POST); + + +$title = trim($_POST['title']); +$type=intval($_POST['type']); +$comkey = trim($_POST['comkey']); +$content = tsClean($_POST['content']); +$pay_type=intval($_POST['pay_type']); +$pay=intval($_POST['pay']); +$stock=intval($_POST['stock']); + + if (intval($TS_USER['isadmin']) == 0) { + // 过滤内容开始 + aac('system') -> antiWord($title); + aac('system') -> antiWord($content); + // è¿‡æ»¤å†…å®¹ç»“æŸ + } + + if ($title == '' || $type == '' || $pay_type == '' || $pay == '') + { + tsNotice("Have null"); + } +$isaudit = 0; + + $shopid = $new['shop'] -> create('shop', array( + 'userid' => $userid, + 'locationid' => aac('user') -> getLocationId($userid), + 'type' => $type, + 'note' => $comkey, + 'pay' => $pay, + 'pay_type' => $pay_type, + 'stock' => $stock, + 'title' => $title, + 'content' => $content, + 'isaudit' => $isaudit, + 'addtime' => date('Y-m-d H:i:s') + )); + + // 上传图片开始 + $arrUpload = tsUpload($_FILES['photo'], $shopid, 'shop', array('jpg', 'gif', 'png', 'jpeg')); + if ($arrUpload) { + $new['shop'] -> update('shop', array( + 'shopid' => $shopid + ), array( + 'path' => $arrUpload['path'], + 'photo' => $arrUpload['url'] + )); + + + #生æˆä¸åŒå°ºå¯¸çš„图片 + //tsXimg($arrUpload['url'],'shop',320,180,$arrUpload['path'],'1'); + //tsXimg($arrUpload['url'],'shop',640,'',$arrUpload['path']); + + + } + // ä¸Šä¼ å›¾ç‰‡ç»“æŸ +header("Location: " . tsUrl('shop', 'show', array('id' => $shopid))); +?> \ No newline at end of file diff --git a/app/shop/action/edit.php b/app/shop/action/edit.php new file mode 100644 index 0000000..bfd3751 --- /dev/null +++ b/app/shop/action/edit.php @@ -0,0 +1,24 @@ + + +isLogin(); + +$shopid = intval ( $_GET ['shopid'] ); + +$stredit = $new ['shop']->find ( 'shop', array ('shopid' => $shopid ) ); +$stredit['content'] = tsDecode($stredit['content']); +if($stredit=='') +{ + + tsNotice('NO!'); +} +if($userid!=$stredit['userid']) +{ + tsNotice('NO'); + +} +include template ( "edit" ); + +?> \ No newline at end of file diff --git a/app/shop/action/editdo.php b/app/shop/action/editdo.php new file mode 100644 index 0000000..57dfb2f --- /dev/null +++ b/app/shop/action/editdo.php @@ -0,0 +1,62 @@ +isLogin(); + +$shopid = intval ( $_POST ['shopid'] ); + +$stredit = $new ['shop']->find ( 'shop', array ('shopid' => $shopid ) ); +$stredit['content'] = tsDecode($stredit['content']); +if($stredit=='') +{ + + tsNotice('NO!'); +} +if($userid!=$stredit['userid']) +{ + tsNotice('NO'); + +} + + +$title = trim($_POST['title']); +$type=intval($_POST['type']); +$comkey = trim($_POST['comkey']); +$content = tsClean($_POST['content']); +$pay_type=intval($_POST['pay_type']); +$pay=intval($_POST['pay']); +$stock=intval($_POST['stock']); + +if($_FILES['photo']!='') +{ + // 上传图片开始 + $arrUpload = tsUpload($_FILES['photo'], $shopid, 'shop', array('jpg', 'gif', 'png', 'jpeg')); + if ($arrUpload) { + $new['shop'] -> update('shop', array( + 'shopid' => $shopid + ), array( + 'path' => $arrUpload['path'], + 'photo' => $arrUpload['url'] + )); + + + #生æˆä¸åŒå°ºå¯¸çš„图片 + //tsXimg($arrUpload['url'],'shop',320,180,$arrUpload['path'],'1'); + //tsXimg($arrUpload['url'],'shop',640,'',$arrUpload['path']); + + + } + // ä¸Šä¼ å›¾ç‰‡ç»“æŸ +} +$new['shop'] -> update('shop', array('shopid' => $shopid), array( + 'type' => $type, + 'note' => $comkey, + 'pay' => $pay, + 'pay_type' => $pay_type, + 'stock' => $stock, + 'title' => $title, + 'content' => $content, + 'addtime' => date('Y-m-d H:i:s') + )); +header("Location: " . tsUrl('shop', 'show', array('id' => $shopid))); +?> \ No newline at end of file diff --git a/app/shop/action/index.php b/app/shop/action/index.php new file mode 100644 index 0000000..229eef7 --- /dev/null +++ b/app/shop/action/index.php @@ -0,0 +1,19 @@ +'')); + +$lstart = $page*30-30; + +$arrAlbum = $new['shop']->findAll('shop',"`isaudit`=0",'shopid desc',null,$lstart.',30'); + + + +$albumNum = $new['shop']->findCount('shop'); + +$pageUrl = pagination($albumNum, 30, $page, $url); + +include template ( "index" ); diff --git a/app/shop/action/myorder.php b/app/shop/action/myorder.php new file mode 100644 index 0000000..c2f7d85 --- /dev/null +++ b/app/shop/action/myorder.php @@ -0,0 +1,25 @@ +isLogin(); + +$page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + +$url = tsUrl('shop','myorder',array('page'=>'')); + +$lstart = $page*30-30; + +$strmyoder = $new['shop']->findAll('shop_order',"`userid`=".$userid,'orderid desc',null,$lstart.',30'); + +foreach($strmyoder as $key=>$item){ + $strmyoder[$key]['needpay'] = $strmyoder[$key]['pay']*$strmyoder[$key]['much']; + //å–å®¶ + $selluser = aac ( 'user' )->getSimpleUser ( $strmyoder [$key]['selluserid'] ); + $strmyoder[$key]['sellusername']=$selluser['username']; +} + +$albumNum = $new['shop']->findCount('shop_order'); + +$pageUrl = pagination($albumNum, 30, $page, $url); + +include template ( "myorder" ); +?> \ No newline at end of file diff --git a/app/shop/action/order.php b/app/shop/action/order.php new file mode 100644 index 0000000..5cb7cd3 --- /dev/null +++ b/app/shop/action/order.php @@ -0,0 +1,34 @@ +isLogin(); + +$oderid = intval ( $_GET ['id'] ); + +$stroder = $new ['shop']->find ( 'shop_order', array ('orderid' => $oderid ) ); + +if($stroder=='') +{ + + tsNotice('NO!'); +} +if($userid!=$stroder['userid']&&$userid!=$stroder['selluserid']) +{ + tsNotice('NO'); + +} + +$needpay=$stroder['much']*$stroder['pay']; +$stroder['content'] = tsDecode($stroder['content']); + +$buyuser=aac ( 'user' )->getSimpleUser ( $stroder['userid'] ); +$selluser=aac ( 'user' )->getSimpleUser ( $stroder['selluserid'] ); + +//print_r($_GET); + +//$stroder['address'] = htmlentities($stroder['address'], ENT_NOQUOTES, "utf-8"); + +include template ( "order" ); + + + +?> \ No newline at end of file diff --git a/app/shop/action/sellout.php b/app/shop/action/sellout.php new file mode 100644 index 0000000..fcd0867 --- /dev/null +++ b/app/shop/action/sellout.php @@ -0,0 +1,25 @@ +isLogin(); + +$page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + +$url = tsUrl('shop','myorder',array('page'=>'')); + +$lstart = $page*30-30; + +$strmyoder = $new['shop']->findAll('shop_order',"`selluserid`=".$userid,'orderid desc',null,$lstart.',30'); + +foreach($strmyoder as $key=>$item){ + $strmyoder[$key]['needpay'] = $strmyoder[$key]['pay']*$strmyoder[$key]['much']; + //ä¹°å®¶ + $selluser = aac ( 'user' )->getSimpleUser ( $strmyoder [$key]['userid'] ); + $strmyoder[$key]['buyusername']=$selluser['username']; +} + +$albumNum = $new['shop']->findCount('shop_order'); + +$pageUrl = pagination($albumNum, 30, $page, $url); + +include template ( "sellout" ); +?> \ No newline at end of file diff --git a/app/shop/action/show.php b/app/shop/action/show.php new file mode 100644 index 0000000..8f1f83e --- /dev/null +++ b/app/shop/action/show.php @@ -0,0 +1,70 @@ +find ( 'shop', array ( + 'shopid' => $shopid +) ); + + +if ($strshop == '') { + header ( "HTTP/1.1 404 Not Found" ); + header ( "Status: 404 Not Found" ); + $title = '404'; + include pubTemplate ( "404" ); + exit (); +} + +//å–å®¶ +$arrshopuser = aac ( 'user' )->getSimpleUser ( $strshop ['userid'] ); + +//是å¦å…³æ³¨ +if($TS_USER['userid'] != '' && $TS_USER['userid'] != $arrshopuser['userid']){ + $userid=$arrshopuser['userid']; + $followNum = $db->once_num_rows("select * from ".dbprefix."user_follow where userid='".$TS_USER['userid']."' and userid_follow='$userid'"); + if($followNum > '0'){ + $arrshopuser['isfollow'] = true; + }else{ + $arrshopuser['isfollow'] = false; + } +}else{ + $arrshopuser['isfollow'] = false; +} + +// 是å¦å®¡æ ¸ +if ($strshop ['isaudit'] == 1 && $TS_USER['isadmin']==0 && $TS_USER['userid']!=$strshop['userid']) { + tsNotice ( '内容审核中...' ); +} + +$strshop['content'] = tsDecode($strshop['content']); + + +// 获å–评论 +$page = isset ( $_GET ['page'] ) ? intval ( $_GET ['page'] ) : 1; +$url = tsUrl ( 'shop', 'show', array ( + 'id' => $shopid, + 'page' => '' +) ); +$lstart = $page * 10 - 10; + +$arrComments = $new ['shop']->findAll ( 'shop_comment', array ( + 'shopid' => $shopid +), 'addtime desc', null, $lstart . ',10' ); + +foreach ( $arrComments as $key => $item ) { + $arrComment [] = $item; + $arrComment[$key]['content'] = tsDecode($item['content']); + $arrComment [$key] ['user'] = aac ( 'user' )->getSimpleUser ( $item ['userid'] ); +} + +$commentNum = $new ['shop']->findCount ( 'shop_comment', array ( + 'shopid' => $shopid +) ); + +$pageUrl = pagination ( $commentNum, 10, $page, $url ); + +// 标签 +//$strshop ['tags'] = aac ( 'tag' )->getObjTagByObjid ( 'shop', 'shopid', $strshop ['shopid'] ); +$title = $strshop['title']; +include template ( "show" ); \ No newline at end of file diff --git a/app/shop/class.shop.php b/app/shop/class.shop.php new file mode 100644 index 0000000..41210ee --- /dev/null +++ b/app/shop/class.shop.php @@ -0,0 +1,9 @@ + + + +
    +
    + + +
    +
    +
    + + + +
    + +
    + + +
    + +
    + + +
    + (支æŒjpg,pngæ ¼å¼ï¼›å¤§å°640*400px) +
    + +
    +
    + + + + +
    + +
    + + +
    + +
    + +
    +
    + +
    +
    +
    + + + + +
    +
    + + +
    +
    + + +
    + + {if $TS_SITE['isauthcode']} +
    + + +
    + + 点击刷新验è¯ç  + +
    + + +
    + {/if} + + + + + + + + + +

    + +
    + + + + +
    +
    +
    + + + +
    +
    + + + + +{php doAction('tseditor')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/buy.html b/app/shop/html/buy.html new file mode 100644 index 0000000..32dc048 --- /dev/null +++ b/app/shop/html/buy.html @@ -0,0 +1,135 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    商å“价格数é‡
    + {$strshop[title]} + {$strshop[title]} + {$strshop[pay]}{if $strshop[pay_type] == '1'}积分{/if} + + - + + +
    + + + +
    应付总é¢ï¼š

    {$strshop[pay]}{if $strshop[pay_type] == '1'}积分{/if}

    + + + + + + + + + + + + + + + + + + + +
    æ”¶è´§ä¿¡æ¯
    +

    地å€

    + +
    + + + +
    + +
    +
    + + + +
    + + +
    +
    + +{php include pubTemplate("footer")} + + + \ No newline at end of file diff --git a/app/shop/html/buyend.html b/app/shop/html/buyend.html new file mode 100644 index 0000000..4e7a3d7 --- /dev/null +++ b/app/shop/html/buyend.html @@ -0,0 +1,3 @@ +{php include pubTemplate("header")} + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/edit.html b/app/shop/html/edit.html new file mode 100644 index 0000000..2cb29cc --- /dev/null +++ b/app/shop/html/edit.html @@ -0,0 +1,125 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    + + +
    +
    +
    + + + +
    + +
    + + +
    + +
    + +
    + +
    +
    + (支æŒjpg,pngæ ¼å¼ï¼›å¤§å°640*400px) +
    + +
    +
    + + + + +
    + +
    + + +
    + +
    + +
    {$stredit[content]}
    +
    + +
    +
    +
    + + + + +
    +
    + + +
    +
    + + +
    + + {if $TS_SITE['isauthcode']} +
    + + +
    + + 点击刷新验è¯ç  + +
    + + +
    + {/if} + + + + + + + + + +

    + +
    + + + + +
    +
    +
    + + + +
    +
    + +
    + + +{php doAction('tseditor')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/index.html b/app/shop/html/index.html new file mode 100644 index 0000000..7314904 --- /dev/null +++ b/app/shop/html/index.html @@ -0,0 +1,56 @@ +{php include pubTemplate("header")} + +
    + + + + + +
    + + +
    + + +
    +
    + + +
    +{loop $arrAlbum $key $item} +
    + + {$item[title]} + + +
    +
    {$item[title]}
    +
    价格:{$item[pay]} {if $item[pay_type] == '1'}积分{/if}
    +
    库存:{$item[stock]}
    + + +
    + +
    +{/loop} +
    +
    +
    {$pageUrl}
    + +
    +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/myorder.html b/app/shop/html/myorder.html new file mode 100644 index 0000000..b321b9f --- /dev/null +++ b/app/shop/html/myorder.html @@ -0,0 +1,76 @@ +{php include pubTemplate("header")} + + +
    + + + +
    + +
    + +
    + + + + + + + + +{loop $strmyoder $key $item} + + + + + + + + + + + +{/loop} + + + +
    订å•IDTitleå–å®¶ä»·æ ¼æ•°é‡æ€»é¢è®¢å•çŠ¶æ€æ—¥æœŸæ“作
    + {$item[orderid]} + + {$item[title]} + + {$item[sellusername]} + {$item[pay]}{if $item[pay_type] == '1'}积分{/if} + {$item[much]} + + {$item[needpay]}{if $item[pay_type] == '1'}积分{/if} + + {if $item[state] == '1'}交易完æˆ{/if} + + {$item[addtime]} + + 查看 +
    + + +
    + + +
    + +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/order.html b/app/shop/html/order.html new file mode 100644 index 0000000..0f78570 --- /dev/null +++ b/app/shop/html/order.html @@ -0,0 +1,111 @@ +{php include pubTemplate("header")} + +
    + + +
    +
    订å•ID:{$stroder[orderid]}返回
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Titleä»·æ ¼æ•°é‡æ€»é¢è®¢å•状æ€ä¹°å®¶å–家日期
    + {$stroder[title]} + {$stroder[pay]}{if $stroder[pay_type] == '1'}积分{/if} + {$stroder[much]} + + {$needpay}{if $stroder[pay_type] == '1'}积分{/if} + + {if $stroder[state] == '1'}交易完æˆ{/if} + + {$buyuser[username]} + + {$selluser[username]} + + {$stroder[addtime]} +
    + + + + + + + + + + + + + + +
    æ”¶è´§ä¿¡æ¯
    + {$stroder[address]} +
    + + + + + + + + + + + +
    åå•
    + {$stroder[reorder]} +
    + + + + + + + + + + + +
    交易快照
    + {$stroder[content]} +
    + +
    + + + +
    + + +
    +
    + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/sellout.html b/app/shop/html/sellout.html new file mode 100644 index 0000000..b7df462 --- /dev/null +++ b/app/shop/html/sellout.html @@ -0,0 +1,72 @@ +{php include pubTemplate("header")} + + +
    + + + +
    +
    + +
    + + + + + + +{loop $strmyoder $key $item} + + + + + + + + + + + +{/loop} + + + +
    订å•IDTitleä¹°å®¶ä»·æ ¼æ•°é‡æ€»é¢è®¢å•çŠ¶æ€æ—¥æœŸæ“作
    + {$item[orderid]} + + {$item[title]} + + {$item[buyusername]} + {$item[pay]}{if $item[pay_type] == '1'}积分{/if} + {$item[much]} + + {$item[needpay]}{if $item[pay_type] == '1'}积分{/if} + + {if $item[state] == '1'}交易完æˆ{/if} + + {$item[addtime]} + + 查看 +
    + + +
    + + +
    + +
    + + + +
    +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/shop/html/show.html b/app/shop/html/show.html new file mode 100644 index 0000000..4dbd378 --- /dev/null +++ b/app/shop/html/show.html @@ -0,0 +1,287 @@ +{php include pubTemplate("header")} +
    + + +
    +
    + +
    + +
    + + {if $strshop['tags']} +
    + {loop $strshop[tags] $key $strshop} + {$strshop[tagname]} + {/loop} +
    +
    + {/if} + + +
    +
    +
    + + +
    + +
    + +
    +

    {$strshop[title]}

    +
    价格:{$strshop[pay]} {if $strshop[pay_type] == '1'}积分{/if}
    +
    库存:{$strshop[stock]}
    +
    + {if $strshop[type]==1}{/if} + +

    + {if $strshop[stock]!=0} + + {else} + + {/if} + +
    + +
    +
    + +

    +
    + + + +
    {php doAction('group_topic_footer')}
    + + + +
    + + + + + + +
    +
    +
    å–å®¶ä¿¡æ¯
    +
    +
    +
    + {$arrshopuser[username]} +
    +
    + {$arrshopuser[username]} + +
    +
    + +
      + +
      +
      +
      +
      + +
      + +
      商å“详细
      + {if $TS_USER[isadmin]==1 || $TS_USER['userid']==$strshop['userid']} + + {/if} +
      + + + {if $TS_APP['isshopvideo']} + + {if $arrVideo} +
      + {loop $arrVideo $key $strshop} +
      + {if $strshop['siteid']==1 || $strshop['siteid']==2 || $strshop['siteid']==3} + + {if $TS_USER['userid']==$strshop['userid'] || $TS_USER['isadmin']==1} + + {/if} + {/if} +
      + {/loop} + +
      + {/if} + + {if $TS_USER['userid']==$strshop['userid'] || $TS_USER['isadmin']==1} + + {/if} + + {/if} + + {php + doAction('gobad','content_top') + } + {$strshop[content]} + + {$tpUrl} + +
      {php doAction('gobad','468') + }
      +
      + + + + + + {if $TS_USER[isadmin]==1 || $TS_USER['userid']==$strshop['userid']} + + {/if} + + +
      +
      +
      +
      买家评论
      +
      + + {if $arrComment} +
      +
        + {loop $arrComment $key $strshop} +
      • +
        + {$strshop[user][username]} +
        +
        +

        + + {$strshop[user][username]} +

        +

        {$strshop[content]}

        +

        {php echo date('Y-m-d H:i:s',$strshop[addtime])}

        + {if $TS_USER[userid] == $strshop[userid] || + $TS_USER['isadmin']==1} + + {/if} +
        +
      • {/loop} +
      +
      +
      {$pageUrl}
      + {/if} + + +
      + {if intval($TS_USER[userid])==0} + + {else} +
      + + +
      + +
      + + + +
      + + +
      + {if $TS_SITE['isauthcode']} + 验è¯ç ï¼š + 点击刷新验è¯ç  + {/if} + +
      + + +
      + + + + +
      + +
      + +
      + {/if} +
      + + +
      +
      + + + + +
      + + + +
      +
      +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} + \ No newline at end of file diff --git a/app/shop/js/extend.func.js b/app/shop/js/extend.func.js new file mode 100644 index 0000000..139597f --- /dev/null +++ b/app/shop/js/extend.func.js @@ -0,0 +1,2 @@ + + diff --git a/app/shop/skins/default/photo_album.png b/app/shop/skins/default/photo_album.png new file mode 100644 index 0000000000000000000000000000000000000000..5c870b32b391e57018612ffafee2256b2866a920 GIT binary patch literal 69843 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 literal 0 HcmV?d00001 diff --git a/app/shop/skins/default/style.css b/app/shop/skins/default/style.css new file mode 100644 index 0000000..e69de29 diff --git a/app/showerro/about.php b/app/showerro/about.php new file mode 100644 index 0000000..d4a9adb --- /dev/null +++ b/app/showerro/about.php @@ -0,0 +1,17 @@ + 'showerro', + 'version' => '1.0', + 'desc' => 'showerro', + 'url' => 'https://lmve.net', + 'email' => '1337087466@qq.com', + 'author' => '无闻风', + 'author_url' => 'https://lmve.net', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/showerro/action/index.php b/app/showerro/action/index.php new file mode 100644 index 0000000..f1f7715 --- /dev/null +++ b/app/showerro/action/index.php @@ -0,0 +1,15 @@ + + + + + +
      +
      +
      +
      +
      +
      +
      + +
      +
      +
      + +
      +

      + -404- +

      +
      + Back + +
      +
      +
      +
      +
      +
      + +
      +
      +
      +









      一起帮他们回家 + +
      + æ•°æ®æ¥æº:å®è´å›žå®¶ +
      +

      +
      +
      +
        + +
      +
      +
      +
      +
      +
      + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/showerro/html/index.html b/app/showerro/html/index.html new file mode 100644 index 0000000..4e7a3d7 --- /dev/null +++ b/app/showerro/html/index.html @@ -0,0 +1,3 @@ +{php include pubTemplate("header")} + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/showerro/js/extend.func.js b/app/showerro/js/extend.func.js new file mode 100644 index 0000000..a80a19d --- /dev/null +++ b/app/showerro/js/extend.func.js @@ -0,0 +1,66 @@ +$(function() { + $.ajax({ + type: 'GET', + url: 'https://www.dnpw.org/cn/api404-gohome.do?time='+Date(), + dataType: 'json', + success: function(result) { + addBox(result); + addBox2(result) + } + }) +}); + + + + +function addBox(result) { + $.each(result, function(index, obj) { + + $('#babyinfo').append("

      " + obj['name'] + "(" + obj['sex'] + ")

      出生日期:" + obj['born'] + "

      走失时间:" + obj['dis_time'] + "

      走失地点:" + obj['dis_address'] + "

      相关详情:" + obj['detail'] + "

      查看详情… >>
      "); + + }) +} + + + + + + +function addBox2(result) { + $.each(result, function(index, obj) { + $('#showlist').append("
    • "); + }) +} + + + + + +$('#showlist').on('click', 'li', function() { + $(this).addClass('currents').siblings().removeClass('currents'); + $('.hideit').eq($(this).index()).addClass('current').siblings().removeClass('current'); +}); + + + + + +$(function() { + $.ajax({ + type: 'GET', + url: 'https://www.dnpw.org/cn/api-thank?you=' + document.domain + '&style=12', + + }) +}); + + + + +//BAIDU STAT +var _hmt = _hmt || []; +(function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?bf329994f1e3ebf56f3712e11a46cb4a"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); +})(); diff --git a/app/showerro/skins/default/playing.png b/app/showerro/skins/default/playing.png new file mode 100644 index 0000000000000000000000000000000000000000..509eb44bcfc6153cee97f2f7dc71ccbcb1a0af4f GIT binary patch literal 19917 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 literal 0 HcmV?d00001 diff --git a/app/showerro/skins/default/style.css b/app/showerro/skins/default/style.css new file mode 100644 index 0000000..fcc8c60 --- /dev/null +++ b/app/showerro/skins/default/style.css @@ -0,0 +1,441 @@ +body { + font: 12px/1.5 PingFangSC-Regular,Helvetica,Arial,sans-serif; + background: #f1f1f1; + min-width: 920px; +} + +body, html { + height: 100%; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: none; + -ms-text-size-adjust: none; + -webkit-tap-highlight-color: transparent; +} + +article, aside, blockquote, body, button, dd, div, dl, dt, footer, form, h1, h2, h3, h4, h5, h6, header, li, menu, nav, ol, p, ul { + margin: 0; + padding: 0; +} + +.hideit { + display: none +} + +.current { + display: inline-block; +} + +.dnpw-ftbtm-page, div#__nuxt { + position: relative; + box-sizing: border-box; + min-height: 100%; + padding-bottom: 117px; +} + +.dnpw-404-page .dnpw-404-top { + margin-bottom: -24px; + height: 489px; + _background: url(top-404-gradient.jpg) repeat-x; +} + +.dnpw-404-page .top-bg { + height: 100%; + background: url(top-404-bg-0.png) center 0 no-repeat; +} + +.dnpw-404-page .top-box { + width: 920px; + margin: 0 auto; +} +/* + +.dnpw-404-page .top-box:after, .dnpw-404-page .top-box:before { + content: " "; + display: table; + clear: both; +} +*/ +.dnpw-404-page .top-box-left { + float: left; + padding-left: 0px; + padding-top: 88px; +} + +.dnpw-404-page .flash-box { + position: relative; + width: 492px; + height: 500px; + background-color: #fff; + border-radius: 15px; + padding: 15px; + padding-top: 20px; +} + +.dnpw-404-page .loading-icon { + position: absolute; + top: 50%; + left: 50%; + margin-left: -20px; + margin-top: -20px; + width: 40px; + height: 40px; + background: url(loading-4040.gif); +} + +.iqp-player { + position: relative; + width: 100%; + height: 100%; + min-width: 230px; + overflow: hidden; + text-align: left; + white-space: normal; + color: #fff; + z-index: 0; + user-select: none; + outline: none; + -webkit-font-smoothing: antialiased; +} + +.dnpw-404-page .top-box-right { + overflow: hidden; +} + +.dnpw-404-page .dnpwslogo { + padding-top: 25px; + -padding-left: 245px; + text-align: right; +} + +.dnpw-404-page .content-box { + padding-top: 166px; + text-align: center; +} + +.dnpw-404-page .title-404 { + margin-bottom: 50px; + color: #333; + font-size: 27px; + width: 215px; + padding-left: 117px; +} + +.dnpw-404-page .btn-box { + font-size: 0; + padding-left: 50px; +} + +a, a:active, a:hover, a:link, a:visited { + text-decoration: none; + color: #ccc; +} + +.dnpw-404-page .btn-404.plain { + border-color: #fff; + background-color: transparent; + color: #fff; +} + +.dnpw-404-page .btn-404 { + display: inline-block; + margin: 0 12px; + width: 124px; + height: 34px; + line-height: 34px; + border: 1px solid #fff; + background-color: #fff; + color: #222; + font-size: 16px; + text-align: center; + border-radius: 18px; + transition: all .3s; +} + +.dnpw-404-page .btn-404:hover { + background: #aaa; + border: 1px solid #aaa; + color: white +} + +/* + +.dnpw-404-page .top-box:after, .dnpw-404-page .top-box:before { + content: " "; + display: table; + clear: both; +} + +*/ + +.child_avatar { + float: left; + width: 140px; + height: 188px; + margin-right: 15px; +} + +.child_info { + float: left; + width: 320px; + overflow: hidden; + font-size: 14px; +} + +.child_info .info_name { + margin-bottom: 10px; + font-size: 18px; +} + +.child_info p { + color: #555; + line-height: 27px; + border-top: 1px dashed #eee; +} + +.child_info .lh-s { + padding-top:5px; + line-height: 20px; +} + +.link_view { + display: block; + position: absolute; + top: 15px; + right: 30px; + height: 28px; + line-height: 30px; + font-size: 16px; +} + +.link_inner { + color: #555 +} + +.dnpw-mod-wrap { + position: relative; + margin: 30px 0; +} + +.dnpw-mod-header { + position: relative; + margin-bottom: 20px; + +} + +.dnpw-mod-header .dnpw-mod-title { + color: #222; + font-size: 0; + vertical-align: baseline; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + font-size: 100%; +} +/* +.dnpw-mod-header .dnpw-mod-title:after, .dnpw-mod-header .dnpw-mod-title:before { + content: " "; + display: table; + clear: both; +} +*/ +.dnpw-mod-header .dnpw-mod-title .nolink-txt { + float: left; + color: #222; + cursor: default; +} + +.dnpw-main .dnpw-mod-header .dnpw-mod-title .dnpw-mod-text, .dnpw-1335 .dnpw-mod-header .dnpw-mod-title .dnpw-mod-text { + display: inline-block; + font-size: 24px; + padding-left: 30px; +} + +.dnpw-mod-header .dnpw-mod-title .dnpw-mod-text { + display: inline-block; + font-size: 26px; + line-height: 28px; +} + +.dnpw-mod-list { + text-align: center; +} + +/*------------*/ +.dnpw-page-turn { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: absolute; + right: 0; + top: 12px; + font-size: 0; +} + +.dnpw-page-turn .page-num { + display: inline-block; + margin-right: 10px; + margin-left: 10px; + font-size: 12px; + color: #ccc; +} + +.dnpw-404-page .dnpw-404-con { + width: 920px; + margin: 0 auto; + overflow: hidden; +} + +.dnpw-mod-list .dnpw-mod-ul { + width: 100%; + font-size: 0; + white-space: nowrap; +} + +ol, ul { + list-style: none; +} + +.dnpw-mod-list .dnpw-mod-li { + vertical-align: top; + display: inline-block; + margin: 0 15px; +} + +.dnpw-main .dnpw-mod-img.horizon, .dnpw-1335 .dnpw-mod-img.horizon { + width: 100px; +} + +.dnpw-mod-img.horizon { + width: 210px; +} + +.dnpw-mod-img .dnpw-mod-link, .dnpw-mod-img .dnpw-mod-link-wrap { + z-index: 1; + position: relative; + border-radius: 50%; +} + +.dnpw-main .dnpw-mod-img.horizon .dnpw-mod-link, .dnpw-1335 .dnpw-mod-img.horizon .dnpw-mod-link { + width: 100px; + height: 100px; +} + +.dnpw-mod-img.horizon .dnpw-mod-link { + width: 210px; + height: 118px; +} + +.dnpw-mod-img .dnpw-mod-link { + display: block; + overflow: hidden; +} + +.dnpw-mod-img .dnpw-mod-cover { + display: block; + width: 100%; + height: 100%; + transition: all .25s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.fadeOutIn-enter-active { + animation-duration: .3s; + animation-name: fadeOutIn; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(0,0,.5,1); +} + +img { + border: none; + vertical-align: top; +} +/* +.dnpw-mod-img .nub-tl.nub-tlOne { + background-position: -50px 0; +} +*/ +.dnpw-mod-img .nub-tl { + position: absolute; + left: 26px; + top: 27px; + text-align: center; + width: 50px; + height: 50px; + line-height: 40px; + color: #fff; + font-size: 18px; + cursor: pointer; +} + +.currents .dnpw-mod-img .nub-tl { + background: url(playing.png) no-repeat 0 0; +} + +.dnpw-mod-img .title-wrap { + position: relative; + line-height: 1; + padding: 6px 10px; +} + +.dnpw-main .dnpw-mod-img .title-wrap .main, .dnpw-1335 .dnpw-mod-img .title-wrap .main { + height: 22px; + line-height: 22px; + font-size: 14px; +} + +.dnpw-mod-img .title-wrap .main { + line-height: 23px; + height: 23px; + font-size: 15px; + vertical-align: baseline; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dnpw-mod-img .title-wrap .link-txt { + display: block; + overflow: hidden; + text-overflow: ellipsis; + color: #222; +} + +.dnpw-main .dnpw-mod-img .title-wrap .sub, .dnpw-1335 .dnpw-mod-img .title-wrap .sub { + height: 20px; + line-height: 20px; + font-size: 12px; +} + +.dnpw-mod-img .title-wrap .sub { + line-height: 22px; + font-size: 14px; + color: #999; + margin-top: 2px; + height: 22px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dnpw-mod-img .title-wrap .dnpw-svgicon-hot { + margin-right: 4px; + font-size: 12px; + vertical-align: top; +} + +.dnpw-svgicon { + display: inline-block; + vertical-align: -1px; + font-family: iconfont!important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + diff --git a/app/system/about.php b/app/system/about.php new file mode 100644 index 0000000..8337ddc --- /dev/null +++ b/app/system/about.php @@ -0,0 +1,17 @@ + '系统管ç†', + 'version' => '1.2', + 'desc' => 'ç®¡ç†æ‰€æœ‰APP', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '0', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/system/action/anti.php b/app/system/action/anti.php new file mode 100644 index 0000000..49550e1 --- /dev/null +++ b/app/system/action/anti.php @@ -0,0 +1,360 @@ +findAll('anti_word',null,'id desc'); + + include template('anti_word'); + break; + + case "worddo": + + $word = tsTrim($_POST['word']); + + if($word){ + + $isWord = $new['system']->findCount('anti_word',array( + 'word'=>$word, + )); + + if($isWord == 0){ + $new['system']->create('anti_word',array( + 'word'=>$word, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + //生æˆç¼“å­˜ + $arrWords = $new['system']->findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord)){ + foreach ($arrWord as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + } + + fileWrite('system_anti_word.php','data',$strWord); + $tsMySqlCache->set('system_anti_word',$strWord); + + + } + + qiMsg('æ•æ„Ÿè¯æ·»åŠ æˆåŠŸï¼'); + + }else{ + + qiMsg('æ•æ„Ÿè¯ä¸èƒ½ä¸ºç©ºï¼'); + + } + + break; + + case "worddelall": + + $db->query("TRUNCATE ".dbprefix."anti_word"); + + //生æˆç¼“å­˜ + $arrWords = $new['system']->findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord)){ + foreach ($arrWord as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + } + + fileWrite('system_anti_word.php','data',$strWord); + $tsMySqlCache->set('system_anti_word',$strWord); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + case "worddel": + $id = tsIntval($_GET['id']); + $new['system']->delete('anti_word',array( + 'id'=>$id, + )); + + //生æˆç¼“å­˜ + $arrWords = $new['system']->findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord)){ + foreach ($arrWord as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + } + + fileWrite('system_anti_word.php','data',$strWord); + $tsMySqlCache->set('system_anti_word',$strWord); + + qiMsg('删除æˆåŠŸï¼'); + break; + + case "wordadd": + + include template('anti_wordadd'); + break; + + case "wordadddo": + + $word = tsTrim($_POST['word']); + if($word==''){ + qiMsg('æ•æ„Ÿè¯å¿…须填写ï¼'); + } + $arrWord = explode(PHP_EOL,$word); + foreach($arrWord as $key=>$item){ + $word = $item; + $isWord = $new['system']->findCount('anti_word',array( + 'word'=>$word, + )); + if($isWord == 0){ + $new['system']->create('anti_word',array( + 'word'=>$word, + 'addtime'=>date('Y-m-d H:i:s'), + )); + } + } + + //生æˆç¼“å­˜ + $arrWords = $new['system']->findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord2[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord2)){ + foreach ($arrWord2 as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + } + + fileWrite('system_anti_word.php','data',$strWord); + $tsMySqlCache->set('system_anti_word',$strWord); + + header('Location: '.SITE_URL.'index.php?app=system&ac=anti&ts=word'); + exit(); + + break; + + //垃圾IP + case "ip": + + $arrIp = $new['system']->findAll('anti_ip',null,'addtime desc'); + + include template('anti_ip'); + break; + + case "ipdo": + + $ip = tsTrim($_POST['ip']); + if($ip){ + + $isIp = $new['system']->findCount('anti_ip',array( + 'ip'=>$ip, + )); + + if($isIp==0){ + + $new['system']->create('anti_ip',array( + 'ip'=>$ip, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + //生æˆç¼“å­˜ + $arrIps = $new['system']->findAll('anti_ip'); + foreach($arrIps as $key=>$item){ + $arrIp[] = $item['ip']; + } + fileWrite('system_anti_ip.php','data',$arrIp); + $tsMySqlCache->set('system_anti_ip',$arrIp); + + } + + qiMsg('垃圾IP添加æˆåŠŸï¼'); + + }else{ + + qiMsg('垃圾IPä¸èƒ½ä¸ºç©ºï¼'); + + } + + break; + + case "ipdel": + + $id = tsIntval($_GET['id']); + $new['system']->delete('anti_ip',array( + 'id'=>$id, + )); + + //生æˆç¼“å­˜ + $arrIps = $new['system']->findAll('anti_ip'); + foreach($arrIps as $key=>$item){ + $arrIp[] = $item['ip']; + } + fileWrite('system_anti_ip.php','data',$arrIp); + $tsMySqlCache->set('system_anti_ip',$arrIp); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + //äº‘è¯ + case "cloud": + + include template('anti_cloud'); + break; + + + #内容举报 + case "report": + + $page = tsIntval($_GET['page'],1); + $url = SITE_URL.'index.php?app=system&ac=anti&ts=report&page='; + $lstart = $page*20-20; + $arrReport = $new['system']->findAll('anti_report',null,'addtime desc',null,$lstart.',20'); + $reportNum = $new['system']->findCount('anti_report'); + $pageUrl = pagination($reportNum, 20, $page, $url); + + include template('anti_report'); + break; + #内容举报删除 + case "reportdelete": + + $reportid = tsIntval($_GET['reportid']); + + $new['system']->delete('anti_report',array( + 'reportid'=>$reportid, + )); + + qiMsg('删除æˆåŠŸï¼'); + break; + + + case "email": + + $page = tsIntval($_GET['page'],1); + $url = SITE_URL.'index.php?app=system&ac=anti&ts=email&page='; + $lstart = $page*100-100; + $arrEmail = $new['system']->findAll('anti_email',null,'addtime desc',null,$lstart.',100'); + $emailNum = $new['system']->findCount('anti_email'); + $pageUrl = pagination($emailNum, 100, $page, $url); + + include template('anti_email'); + break; + + case "email_add": + + $email = tsTrim($_POST['email']); + if($email){ + + $new['system']->replace('anti_email',array( + 'email'=>$email, + ),array( + 'email'=>$email, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + qiMsg('Email添加æˆåŠŸï¼'); + + }else{ + + qiMsg('Emailä¸èƒ½ä¸ºç©ºï¼'); + + } + + break; + + case "email_del": + + $id = tsIntval($_GET['id']); + $new['system']->delete('anti_email',array( + 'id'=>$id, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + case "phone": + + $arrPhone = $new['system']->findAll('anti_phone',null,'addtime desc'); + + include template('anti_phone'); + break; + + case "phone_add": + + $phone = tsTrim($_POST['phone']); + if($phone){ + + $new['system']->replace('anti_phone',array( + 'phone'=>$phone, + ),array( + 'phone'=>$phone, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + qiMsg('Phone添加æˆåŠŸï¼'); + + }else{ + + qiMsg('Phoneä¸èƒ½ä¸ºç©ºï¼'); + + } + + break; + + case "phone_del": + + $id = tsIntval($_GET['id']); + $new['system']->delete('anti_phone',array( + 'id'=>$id, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + +} \ No newline at end of file diff --git a/app/system/action/apps.php b/app/system/action/apps.php new file mode 100644 index 0000000..4c005b4 --- /dev/null +++ b/app/system/action/apps.php @@ -0,0 +1,244 @@ +$item){ + if(is_file('app/'.$item.'/about.php')){ + + $arrApps[$key]['name'] = $item; + + $arrApps[$key]['about'] = require_once 'app/'.$item.'/about.php'; + + if($arrAppNav[$item]){ + $arrApps[$key]['about']['name'] = $arrAppNav[$item]; + } + + if(is_file('app/'.$item.'/icon.png')){ + $arrApps[$key]['icon'] = SITE_URL.'app/'.$item.'/icon.png'; + }else{ + $arrApps[$key]['icon'] = SITE_URL.'public/images/app.png'; + } + + } + + + + } + + foreach($arrApps as $item){ + $arrApp[] = $item; + } + + $title = 'APP管ç†'; + + include template("apps"); + break; + + //安装APP + /* + case "install": + $appname = tsTrim($_GET['appname']); + + $appAbout = require_once 'app/'.$appname.'/about.php'; + + $isinstall = $appAbout['isinstall']; + $issql = $appAbout['issql']; + $issystem = $appAbout['issystem']; + + + if($isinstall == '0'){ + if($issql == '1'){ + //安装数æ®åº“ + $sql = file_get_contents('app/'.$appname.'/sql/install.sql'); + $sql = str_replace('ts_',dbprefix,$sql); + $array_sql = preg_split("/;[\r\n]/", $sql); + + foreach($array_sql as $sql){ + $sql = tsTrim($sql); + if ($sql){ + if (strstr($sql, 'CREATE TABLE')){ + preg_match('/CREATE TABLE ([^ ]*)/', $sql, $matches); + $ret = $db->query($sql); + } else { + $ret = $db->query($sql); + } + } + } + + } + //æ›´æ–°about.php文件 + $appAbout['isinstall'] = '1'; + AppFileWrite($appAbout,$appname,'about.php'); + + echo '1'; + + }elseif($isinstall == '1'){ + + if($issql == '1'){ + //å¸è½½æ•°æ®åº“ + $sql = file_get_contents('app/'.$appname.'/sql/uninstall.sql'); + $sql = str_replace('ts_',dbprefix,$sql); + $array_sql = preg_split("/;[\r\n]/", $sql); + + foreach($array_sql as $sql){ + $sql = tsTrim($sql); + if ($sql){ + $ret = $db->query($sql); + } + } + } + + $appAbout['isinstall'] = '0'; + AppFileWrite($appAbout,$appname,'about.php'); + + echo '2'; + + }else{ + echo '3'; + } + + break; + */ + //导航 + case "appnav": + $appkey = $_POST['appkey']; + $appname = $_POST['appname']; + + $arrNav = include 'data/system_appnav.php'; + + if(is_array($arrNav)){ + $arrNav[$appkey] = $appname; + }else{ + $arrNav = array( + $appkey=>$appname, + ); + } + + foreach($arrNav as $key=>$item){ + + if(!is_dir('app/'.$key)){ + unset($arrNav[$key]); + } + } + + fileWrite('system_appnav.php','data',$arrNav); + $GLOBALS['tsMySqlCache']->set('system_appnav',$arrNav); + + echo '1'; + + break; + + //å–æ¶ˆå¯¼èˆª + case "unappnav": + + $appkey = $_POST['appkey']; + + $arrNav = include 'data/system_appnav.php'; + + unset($arrNav[$appkey]); + + fileWrite('system_appnav.php','data',$arrNav); + $GLOBALS['tsMySqlCache']->set('system_appnav',$arrNav); + + echo '1'; + + break; + + //我的社区导航 + case "mynav": + $appkey = tsTrim($_POST['appkey']); + $appname = tsTrim($_POST['appname']); + + $arrMyNav = include 'data/system_mynav.php'; + + if(is_array($arrMyNav)){ + $arrMyNav[$appkey] = $appname; + }else{ + $arrMyNav = array( + $appkey=>$appname, + ); + } + + foreach($arrMyNav as $key=>$item){ + if(!is_dir('app/'.$key)){ + unset($arrMyNav[$key]); + } + } + + fileWrite('system_mynav.php','data',$arrMyNav); + $GLOBALS['tsMySqlCache']->set('system_mynav',$arrMyNav); + + echo '1'; + break; + + case "unmynav": + $appkey = tsTrim($_POST['appkey']); + $arrMyNav = include 'data/system_mynav.php'; + unset($arrMyNav[$appkey]); + fileWrite('system_mynav.php','data',$arrMyNav); + $GLOBALS['tsMySqlCache']->set('system_mynav',$arrMyNav); + echo '1'; + break; + + case "applist": + + $arrAppNav = include 'data/system_appnav.php'; + + include template("apps_applist"); + break; + + case "applistdo": + + $arrAppNav = include 'data/system_appnav.php'; + + $jsondata = stripslashes($_POST['jsondata']); + + $arrJson = json_decode($jsondata,true); + + foreach($arrJson as $key=>$item){ + $arrNav[$item['id']] = $arrAppNav[$item['id']]; + } + + //print_r($arrNav); + + + fileWrite('system_appnav.php','data',$arrNav); + $GLOBALS['tsMySqlCache']->set('system_appnav',$arrNav); + + + break; + + case "mylist": + + $arrMyNav = include 'data/system_mynav.php'; + + + include template("apps_mylist"); + break; + + + case "mylistdo": + + $arrMyNav = include 'data/system_mynav.php'; + + $jsondata = stripslashes($_POST['jsondata']); + + $arrJson = json_decode($jsondata,true); + + foreach($arrJson as $key=>$item){ + $arrNav[$item['id']] = $arrMyNav[$item['id']]; + } + + fileWrite('system_mynav.php','data',$arrNav); + $GLOBALS['tsMySqlCache']->set('system_mynav',$arrNav); + + break; + +} \ No newline at end of file diff --git a/app/system/action/cache.php b/app/system/action/cache.php new file mode 100644 index 0000000..cade307 --- /dev/null +++ b/app/system/action/cache.php @@ -0,0 +1,45 @@ + tsTrim($_POST['site_title']), + 'site_subtitle' => tsTrim($_POST['site_subtitle']), + 'site_key' => tsTrim($_POST['site_key']), + 'site_desc' => tsTrim($_POST['site_desc']), + 'site_url' => tsTrim($_POST['site_url']), + 'site_email' => tsTrim($_POST['site_email']), + 'site_icp' => tsTrim($_POST['site_icp']), + 'isface' => tsIntval($_POST['isface']), + 'isinvite'=> tsIntval($_POST['isinvite']), + 'isgzip' => tsIntval($_POST['isgzip']), + 'timezone' => $_POST['timezone'], + 'isverify'=>tsIntval($_POST['isverify']), + ); + + foreach ($arrData as $key => $val){ + + $new['system']->update('system_options',array( + 'optionname'=>$key, + ),array( + 'optionvalue'=>$val, + )); + + } + + $arrOptions = $new['system']->findAll('system_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite('system_options.php','data',$arrOption); + $tsMySqlCache->set('system_options',$arrOption); + + qiMsg("系统选项更新æˆåŠŸï¼Œå¹¶é‡ç½®äº†ç¼“存文件^_^"); + + break; +} \ No newline at end of file diff --git a/app/system/action/editor.php b/app/system/action/editor.php new file mode 100644 index 0000000..1a3c795 --- /dev/null +++ b/app/system/action/editor.php @@ -0,0 +1,44 @@ +findAll('editor',null,'addtime desc',null,$lstart.',20'); + + $editorNum = $new['system']->findCount('editor'); + $pageUrl = pagination($editorNum, 20, $page, $url); + + include template('editor_list'); + + break; + + case "delete": + + $id = tsIntval($_GET['id']); + + $strEditor = $new['system']->find('editor',array( + 'id'=>$id, + )); + + if($strEditor['url']){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + deleteAliOssFile('uploadfile/editor/'.$strEditor['url']); + }else{ + unlink('uploadfile/editor/'.$strEditor['url']); + } + } + + $new['system']->delete('editor',array( + 'id'=>$id, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/system/action/index.php b/app/system/action/index.php new file mode 100644 index 0000000..cc7ffd1 --- /dev/null +++ b/app/system/action/index.php @@ -0,0 +1,5 @@ +findCount('user',array( + 'email'=>$email, + )); + + if($countAdmin == 0) qiMsg('用户Emailä¸å­˜åœ¨ï¼'); + + $strAdmin = $new['system']->find('user',array( + 'email'=>$email, + )); + + if(md5($strAdmin['salt'].$pwd)!==$strAdmin['pwd']) tsNotice('用户密ç é”™è¯¯ï¼'); + + $strAdminInfo = $new['system']->find('user_info',array( + 'email'=>$email, + ),'userid,username,isadmin'); + + if($strAdminInfo['isadmin'] != 1) qiMsg("ä½ æ— æƒç™»å½•åŽå°ç®¡ç†ï¼"); + + $_SESSION['tsadmin'] = $strAdminInfo; + + header("Location: ".SITE_URL."index.php?app=system"); + + break; + + //退出 + case "out": + unset($_SESSION['tsadmin']); + + header("Location: ".SITE_URL."index.php?app=system&ac=login"); + + break; +} \ No newline at end of file diff --git a/app/system/action/logo.php b/app/system/action/logo.php new file mode 100644 index 0000000..20a743a --- /dev/null +++ b/app/system/action/logo.php @@ -0,0 +1,45 @@ +delete('system_options',array( + 'optionname'=>'logo', + )); + $new['system']->create('system_options',array( + 'optionname'=>'logo', + 'optionvalue'=>$name.'?v='.time(), + )); + + $arrOptions = $new['system']->findAll('system_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite('system_options.php','data',$arrOption); + $tsMySqlCache->set('system_options',$arrOption); + + echo SITE_URL.$dest.'?v='.rand(); + +} \ No newline at end of file diff --git a/app/system/action/logs.php b/app/system/action/logs.php new file mode 100644 index 0000000..ddbd75f --- /dev/null +++ b/app/system/action/logs.php @@ -0,0 +1,52 @@ +findAll('logs',null,'addtime desc',null,$lstart.',20'); + + $logsNum = $new['system']->findCount('logs'); + $pageUrl = pagination($logsNum, 20, $page, $url); + + include template('logs_list'); + + break; + + case "show": + + $logid = tsIntval($_GET['logid']); + + $strLog = $new['system']->find('logs',array( + 'logid'=>$logid, + )); + + include template('logs_show'); + + break; + + case "delete": + + $logid = tsIntval($_GET['logid']); + + $new['system']->delete('logs',array( + 'logid'=>$logid, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + + case "clean": + + $db->query("TRUNCATE `".dbprefix."logs`;"); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/system/action/main.php b/app/system/action/main.php new file mode 100644 index 0000000..4e6d905 --- /dev/null +++ b/app/system/action/main.php @@ -0,0 +1,24 @@ + $_SERVER['SERVER_SOFTWARE'], + 'phpos' => PHP_OS, + 'phpversion' => PHP_VERSION, + 'mysql' => $db->getMysqlVersion(), + 'os' =>$os[0] .''.$os[1].' '.$os[3], + 'gd'=>$gd, + 'upload' =>'表å•å…许 (post_max_size) '.ini_get('post_max_size').',ä¸Šä¼ æ€»å¤§å° (upload_max_filesize) '.ini_get('upload_max_filesize'), + 'memory'=> 'memory_limit '.ini_get('memory_limit'), +); + +//获å–域å +#$theAuthUrl = GetUrlToDomain($_SERVER['HTTP_HOST']); + +include template("main"); \ No newline at end of file diff --git a/app/system/action/options.php b/app/system/action/options.php new file mode 100644 index 0000000..721c604 --- /dev/null +++ b/app/system/action/options.php @@ -0,0 +1,93 @@ +findAll('system_options'); + + foreach($arrOptions as $item){ + $strOption[$item['optionname']] = stripslashes($item['optionvalue']); + } + + //时区和语言 + $arrTime = getArrTimezone(); + + $arrTheme = tsScanDir('theme'); + + include template("options"); + + break; + + //ä¿å­˜é…ç½® + + case "do": + + $strLogo = $new['system']->find('system_options',array( + 'optionname'=>'logo', + )); + + //å…ˆæ¸…ç©ºæ•°æ® + $db->query("TRUNCATE TABLE `".dbprefix."system_options`"); + + foreach($_POST['option'] as $key=>$item){ + + $optionname = $key; + $optionvalue = tsTrim($item); + + $new['system']->create('system_options',array( + + 'optionname'=>$optionname, + 'optionvalue'=>$optionvalue, + + )); + + } + + $new['system']->create('system_options',array( + 'optionname'=>'logo', + 'optionvalue'=>$strLogo['optionvalue'], + )); + + + $arrOptions = $new['system']->findAll('system_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite('system_options.php','data',$arrOption); + $tsMySqlCache->set('system_options',$arrOption); + + + //生æˆä¼ªé™æ€æ–‡ä»¶ + if($_POST['option']['site_urltype'] == 3 || $_POST['option']['site_urltype'] == 4 || $_POST['option']['site_urltype'] == 5 || $_POST['option']['site_urltype'] == 6 || $_POST['option']['site_urltype'] == 7){ + + $scriptName = explode('index.php',$_SERVER['SCRIPT_NAME']); + + //生æˆ.htaccess文件 + $fp = fopen(THINKROOT.'/.htaccess','w'); + + if(!is_writable(THINKROOT.'/.htaccess')) qiMsg("文件(.htaccess)ä¸å¯å†™ã€‚如果您使用的是Unix/Linux主机,请修改该文件的æƒé™ä¸º777。如果您使用的是Windows主机,请è”系管ç†å‘˜ï¼Œå°†æ­¤æ–‡ä»¶è®¾ä¸ºeveryoneå¯å†™"); + $htaccess = "RewriteEngine On\n" + ."RewriteBase ".$scriptName[0]."\n" + ."RewriteRule ^index\.php$ - [L]\n" + ."RewriteCond %{REQUEST_FILENAME} !-f\n" + ."RewriteCond %{REQUEST_FILENAME} !-d\n" + ."RewriteRule . ".$scriptName[0]."index.php [L]\n" + ."RewriteCond %{REQUEST_METHOD} ^TRACE\n" + ."RewriteRule .* - [F]"; + + $fw = fwrite($fp,$htaccess); + + } + + //更新皮肤 + setcookie('tsTheme',$_POST['option']['site_theme']); + + qiMsg("系统选项更新æˆåŠŸï¼Œå¹¶é‡ç½®äº†ç¼“存文件^_^"); + + break; + +} \ No newline at end of file diff --git a/app/system/action/phpinfo.php b/app/system/action/phpinfo.php new file mode 100644 index 0000000..ad5a67b --- /dev/null +++ b/app/system/action/phpinfo.php @@ -0,0 +1,10 @@ +$item){ + $arrAppsAbout[$item] = fileRead('app/'.$item.'/about.php'); + } + + + //print_r($arrAppsAbout); + + + $apps = tsFilter($_GET['apps']); + + $hook = tsTrim($_GET['hook']); + + + $arrPlugins = tsScanDir('plugins/'.$apps); + + foreach($arrPlugins as $key=>$item){ + if(is_file('plugins/'.$apps.'/'.$item.'/about.php')){ + $arrPlugin1[$key]['name'] = $item; + $arrPlugin1[$key]['about'] = require_once 'plugins/'.$apps.'/'.$item.'/about.php'; + } + } + + if($arrPlugin1 && $hook){ + foreach($arrPlugin1 as $key=>$item){ + if($item['about']['hook']==$hook){ + $arrPlugin[] = $item; + } + } + }else{ + $arrPlugin = $arrPlugin1; + } + + $app_plugins = fileRead('data/'.$apps.'_plugins.php'); + + if($app_plugins==''){ + $app_plugins = $tsMySqlCache->get($apps.'_plugins'); + } + + include template("plugin_list"); + break; + + //æ’ä»¶åœå¯ç”¨ + case "do": + + $apps = tsFilter($_GET['apps']); + + $isused = tsIntval($_GET['isused']); + $pname = tsFilter($_GET['pname']); + + $app_plugins = fileRead('data/'.$apps.'_plugins.php'); + if($app_plugins==''){ + $app_plugins = $tsMySqlCache->get($apps.'_plugins'); + } + + + //0åœç”¨1å¯ç”¨ + if($isused == '0'){ + + $pkey = array_search($pname,$app_plugins); + unset($app_plugins[$pkey]); + + fileWrite($apps.'_plugins.php','data',$app_plugins); + $tsMySqlCache->set($apps.'_plugins',$app_plugins); + + qiMsg("æ’ä»¶åœç”¨æˆåŠŸï¼"); + + }elseif($isused == '1'){ + + $pkey = array_search($pname,$app_plugins); + unset($app_plugins[$pkey]); + + array_push($app_plugins,$pname); + + if(file_exists('plugins/'.$apps.'/'.$pname.'/install.sql')){ + $sql=file_get_contents('plugins/'.$apps.'/'.$pname.'/install.sql'); + $sql=str_replace('ts_',''.dbprefix.'',$sql); + $ret=$db->query($sql); + if($ret=='1') + { + fileWrite($apps.'_plugins.php','data',$app_plugins); + $tsMySqlCache->set($apps.'_plugins',$app_plugins); + $msg='æ’ä»¶å¯ç”¨æˆåŠŸï¼'; + }else{ + $msg=$ret; + } + }else{ + fileWrite($apps.'_plugins.php','data',$app_plugins); + $tsMySqlCache->set($apps.'_plugins',$app_plugins); + $msg='æ’ä»¶å¯ç”¨æˆåŠŸï¼'; + } + + qiMsg($msg); + + } + break; + + //删除æ’ä»¶ + case "delete": + $apps = tsUrlCheck($_GET['apps']); + $pname = tsUrlCheck($_GET['pname']); + + delDir('plugins/'.$apps.'/'.$pname); + + qiMsg('删除æˆåŠŸï¼'); + break; +} \ No newline at end of file diff --git a/app/system/action/redis.php b/app/system/action/redis.php new file mode 100644 index 0000000..7e51227 --- /dev/null +++ b/app/system/action/redis.php @@ -0,0 +1,16 @@ +connect($TS_CF['redis']['host'], $TS_CF['redis']['port']); +//检测是å¦è¿žæŽ¥æˆåŠŸ +echo "Server is running: " . $redis->ping(); +// 输出结果 Server is running: +PONG \ No newline at end of file diff --git a/app/system/action/spam.php b/app/system/action/spam.php new file mode 100644 index 0000000..56d9a50 --- /dev/null +++ b/app/system/action/spam.php @@ -0,0 +1,61 @@ +$item){ + + $isword = $new['system']->findCount('anti_word',array( + 'word'=>$item, + )); + + if($isword==0){ + $new['system']->create('anti_word',array( + 'word'=>$item, + 'addtime'=>date('Y-m-d H:i:s'), + )); + } + + } + + //生æˆç¼“å­˜ + $arrWords = $new['system']->findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord)){ + foreach ($arrWord as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + } + + fileWrite('system_anti_word.php','data',$strWord); + $tsMySqlCache->set('system_anti_word',$strWord); + + + header('Location: '.SITE_URL.'index.php?app=system&ac=anti&ts=word'); + + break; + +} \ No newline at end of file diff --git a/app/system/action/sql.php b/app/system/action/sql.php new file mode 100644 index 0000000..2aa29d6 --- /dev/null +++ b/app/system/action/sql.php @@ -0,0 +1,6 @@ +';#opendir + if(function_exists('readdir')==false) $msg .= 'readdir函数ä¸å¯ç”¨
      ';#readdir + if(function_exists('copy')==false) $msg .= 'copy函数ä¸å¯ç”¨
      ';#copy + + #检查phpå¿…è¦æ‰©å±• + if(extension_loaded('Fileinfo')==false) $msg .= 'Fileinfo扩展ä¸å¯ç”¨
      ';#Fileinfo + + #检测upgrade目录是å¦å¯å†™ + if(abcefile('upgrade')) $msg .= 'upgrade目录ä¸å¯å†™
      '; + + + echo $msg; + + + break; + + //手动å‡çº§æ£€æµ‹ + case "hand": + + $upid = tsIntval($_GET['upid']); + + include template('update_hand'); + break; + + + //第一步检测å¯å†™æƒé™ + case "one": + + include template('update_one'); + break; + + //第二步,å‡çº§æ•°æ®åº“ + case "two": + + include template('update_two'); + break; + + case "twodo": + + $upsql = tsTrim($_POST['upsql']); + + if($upsql){ + + $arrSql = explode('--------------------',$upsql); + foreach($arrSql as $item){ + $item = tsTrim($item); + if ($item){ + $db->query($item); + } + } + + //执行æˆåŠŸ + echo '1';exit; + + }else{ + + //æ— SQL坿‰§è¡Œ + echo '0';exit; + + } + + //echo '1';exit; + + break; + + //第三部,å‡çº§ç³»ç»Ÿæ–‡ä»¶ + case "three": + + include template('update_three'); + break; + + case "threedo": + + $upversion = tsTrim($_GET['upversion']); + + if($upversion==''){ + getJson('ç‰ˆæœ¬å·æœ‰é—®é¢˜',1,0); + } + + $filezip = $upversion.'.zip'; + + //先删除旧的zipå‡çº§æ–‡ä»¶ + unlink('upgrade/'.$filezip); + delDir('upgrade/'.$upversion); + + //拼接出è¦ä¸‹è½½çš„远程文件 + $upfile = 'https://www.thinksaas.cn/upgrade/'.$filezip; + + //第一步:多线程下载zip压缩文件 + $urls=array( + $upfile, + $upfile, + $upfile, + ); + $save_to='upgrade/'; + + $mh=curl_multi_init(); + foreach($urls as $i=>$url){ + //$g=$save_to.basename($url); + $g = $save_to.$filezip; + if(!is_file($g)){ + $conn[$i]=curl_init($url); + $fp[$i]=fopen($g,"w"); + curl_setopt($conn[$i],CURLOPT_USERAGENT,"Mozilla/4.0(compatible; MSIE 7.0; Windows NT 6.0)"); + curl_setopt($conn[$i],CURLOPT_FILE,$fp[$i]); + curl_setopt($conn[$i],CURLOPT_HEADER ,0); + curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60); + curl_multi_add_handle($mh,$conn[$i]); + } + } + do{ + $n=curl_multi_exec($mh,$active); + }while($active); + foreach($urls as $i=>$url){ + curl_multi_remove_handle($mh,$conn[$i]); + curl_close($conn[$i]); + fclose($fp[$i]); + } + curl_multi_close($mh); + + chmod('upgrade/'.$filezip,0755); + + //第二步:下载完之åŽå¼€å§‹è§£åŽ‹è¦†ç›–åŽŸæœ‰æ–‡ä»¶ + include 'thinksaas/pclzip.lib.php'; + $archive = new PclZip('upgrade/'.$filezip); + if ($archive->extract(PCLZIP_OPT_PATH, 'upgrade/'.$upversion,PCLZIP_OPT_REPLACE_NEWER) == 0) { + getJson('å‡çº§åŒ…解压失败',1,0); + + }else{ + unlink('upgrade/'.$filezip); + } + + //ç›´æŽ¥å¾ªçŽ¯è¦†ç›–å§ + file_list('upgrade/'.$upversion); + + //删除目录 + delDir('upgrade/'.$upversion); + + getJson('å‡çº§æˆåŠŸ',1,1); + break; +} \ No newline at end of file diff --git a/app/system/class.system.php b/app/system/class.system.php new file mode 100644 index 0000000..bc260aa --- /dev/null +++ b/app/system/class.system.php @@ -0,0 +1,187 @@ +findAll('anti_word'); + foreach($arrWords as $key=>$item){ + $arrWord[] = $item['word']; + } + + $strWord = ''; + $count = 1; + if(is_array($arrWord)){ + foreach ($arrWord as $item) { + if ($count==1) { + $strWord .= $item; + } else { + $strWord .= '|'.$item; + } + $count++; + } + + //第一过滤层,大致的扫一下 + if($text){ + preg_match("/$strWord/i",$text, $matche1); + if(!empty($matche1[0])){ + //tsNotice('æç¤ºï¼šå†…å®¹ä¸­å­˜åœ¨è¢«ç¦æ­¢ä½¿ç”¨çš„è¯æ±‡ï¼š'.$matche1[0]); + if($re==1){ + return false;exit; + }else{ + getJson('éžæ³•æ“作',$js,0); + } + + } + } + + //第二过滤层 + preg_match("/$strWord/i",t($text), $matche2); + if(!empty($matche2[0])){ + //tsNotice('å†…å®¹ä¸­å­˜åœ¨è¢«ç¦æ­¢ä½¿ç”¨çš„è¯æ±‡ï¼š'.$matche2[0]); + if($re==1){ + return false;exit; + }else{ + getJson('éžæ³•æ“作',$js,0); + } + } + + //第三过滤层,滤中文中的特殊字符 + $text3 = @preg_replace("/[^\x{4e00}-\x{9fa5}]/iu",'',$text); + preg_match("/$strWord/i",t($text3), $matche3); + if(!empty($matche3[0])){ + //tsNotice('å†…å®¹ä¸­å­˜åœ¨è¢«ç¦æ­¢ä½¿ç”¨çš„è¯æ±‡ï¼š'.$matche3[0]); + if($re==1){ + return false;exit; + }else{ + getJson('éžæ³•æ“作',$js,0); + } + } + + //第四过滤层,过滤QQå·ï¼Œç”µè¯ï¼Œå¦ˆçš„,è€å­å°±ä¸ä¿¡æžä¸æ­»ä½  + $text4 = @preg_replace("/[^\d]/iu",'',$text); + preg_match("/$strWord/i",t($text4), $matche4); + if(!empty($matche4[0])){ + //tsNotice('å†…å®¹ä¸­å­˜åœ¨è¢«ç¦æ­¢ä½¿ç”¨çš„è¯æ±‡ï¼š'.$matche4[0]); + if($re==1){ + return false;exit; + }else{ + getJson('éžæ³•æ“作',$js,0); + } + } + + } + + return true;exit; + + } + + //过滤用户ID + function antiUser(){ + $arrUsers = $this->findAll('anti_user'); + foreach($arrUsers as $key=>$item){ + $arrUser[] = $item['userid']; + } + return $arrUser; + } + + //过滤用户ip + function antiIp(){ + $arrIps = $this->findAll('anti_ip'); + foreach($arrIps as $key=>$item){ + $arrIp[] = $item['ip']; + } + return $arrIp; + } + + //APP OPTION é…ç½®APP文件缓存 + function appOption($app,$option){ + //å…ˆæ¸…ç©ºæ•°æ® + $db->query("TRUNCATE TABLE `".dbprefix.$app."_options`"); + + foreach($option as $key=>$item){ + + $optionname = $key; + $optionvalue = tsTrim($item); + + $this->create($app.'_options',array( + + 'optionname'=>$optionname, + 'optionvalue'=>$optionvalue, + + )); + + } + + $arrOptions = $this->findAll($app.'_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite($app.'_options.php','data',$arrOption); + $tsMySqlCache->set($app.'_options',$arrOption); + } + + + function searchDir($path,&$data){ + if(is_dir($path)){ + $dp=dir($path); + while($file=$dp->read()){ + if($file!='.'&& $file!='..'){ + $this->searchDir($path.'/'.$file,$data); + } + } + $dp->close(); + } + if(is_file($path)){ + $data[]=$path; + } + } + + function getfile($dir){ + $data=array(); + $this->searchDir($dir,$data); + return $data; + } + + /** + * å‘布内容开放时间 + */ + public function pubTime(){ + if($GLOBALS['TS_SITE']['pubtime']){ + $arrHour = explode('|',$GLOBALS['TS_SITE']['pubtime']); + $hour = date('H'); + if(in_array($hour,$arrHour)){ + return true; + }else{ + return false; + } + }else{ + return true; + } + } + +} \ No newline at end of file diff --git a/app/system/config.php b/app/system/config.php new file mode 100644 index 0000000..e317d39 --- /dev/null +++ b/app/system/config.php @@ -0,0 +1,6 @@ + + + + + +{$title} - {$TS_SITE['site_title']} + + + + + + + + + + + + + + + +
      + +
      + + diff --git a/app/system/html/anti_cloud.html b/app/system/html/anti_cloud.html new file mode 100644 index 0000000..e382f9c --- /dev/null +++ b/app/system/html/anti_cloud.html @@ -0,0 +1,48 @@ +{php include pubTemplate("header_admin")} + + +
      +{template anti_menu} + + +
      + +
      远程æäº¤æ•感è¯è¯­
      +

      如果你å‘çŽ°æœ‰æ•æ„Ÿè¯è¯­ï¼Œè¯·é€šè¿‡ä¸‹é¢è¾“入远程æäº¤ç»™ThinkSAASï¼Œæˆ‘ä»¬å°†å»ºç«‹å¼ºå¤§çš„æ•æ„Ÿè¯äº‘存储库。

      + + + + + + + + +
      æ•æ„Ÿè¯ï¼š + + + + +
      å…¶ä»–æ“ä½œï¼šä¸€é”®æ›´æ–°äº‘æ•æ„Ÿè¯åº“到本地>>
      + +
      + + +
      + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_email.html b/app/system/html/anti_email.html new file mode 100644 index 0000000..695078e --- /dev/null +++ b/app/system/html/anti_email.html @@ -0,0 +1,37 @@ +{php include pubTemplate("header_admin")} + +
      +{template anti_menu} + + +
      +
      +Email: 添加åŽEmailä¸å¯ä»¥å†æ³¨å†Œ +
      +
      + +
      {$pageUrl}
      + +
      + + + + + + +{loop $arrEmail $key $item} + + + + +{/loop} + +
      Email添加时间æ“作
      {$item['email']}{$item['addtime']} 删除
      + +
      + +
      {$pageUrl}
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_ip.html b/app/system/html/anti_ip.html new file mode 100644 index 0000000..91bf6a7 --- /dev/null +++ b/app/system/html/anti_ip.html @@ -0,0 +1,33 @@ +{php include pubTemplate("header_admin")} + + +
      +{template anti_menu} + + +
      +
      +IP: 添加åŽIP用户ä¸å¯ä»¥å†è®¿é—® +
      +
      + + +
      + + + + + + +{loop $arrIp $key $item} + +{/loop} + +
      IP添加时间æ“作
      {$item['ip']}{$item['addtime']} 删除
      + +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_menu.html b/app/system/html/anti_menu.html new file mode 100644 index 0000000..d3e9275 --- /dev/null +++ b/app/system/html/anti_menu.html @@ -0,0 +1,29 @@ + + +
      \ No newline at end of file diff --git a/app/system/html/anti_phone.html b/app/system/html/anti_phone.html new file mode 100644 index 0000000..2e341e2 --- /dev/null +++ b/app/system/html/anti_phone.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header_admin")} + +
      +{template anti_menu} + + +
      +
      +手机å·ï¼š 添加åŽPhoneä¸å¯ä»¥å†æ³¨å†Œ +
      +
      + + +
      + + + + + + +{loop $arrPhone $key $item} + + + + +{/loop} + +
      Phone添加时间æ“作
      {$item['phone']}{$item['addtime']} 删除
      + +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_report.html b/app/system/html/anti_report.html new file mode 100644 index 0000000..718fba2 --- /dev/null +++ b/app/system/html/anti_report.html @@ -0,0 +1,30 @@ +{php include pubTemplate("header_admin")} + + +
      + {template anti_menu} + + +
      + + + + + + + + {loop $arrReport $key $item} + + {/loop} + + + + +
      ID举报链接举报内容时间æ“作
      {$item['reportid']}{php echo tsTitle($item['url'])}{php echo tsTitle($item['content'])}{$item['addtime']}删除
      + +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_word.html b/app/system/html/anti_word.html new file mode 100644 index 0000000..d63ff23 --- /dev/null +++ b/app/system/html/anti_word.html @@ -0,0 +1,43 @@ +{php include pubTemplate("header_admin")} + + +
      +{template anti_menu} + + + + + + +
      + + + + + + +{loop $arrWord $key $item} + +{/loop} + + + + +
      IDæ•æ„Ÿè¯ 请至少ä¿ç•™ä¸€ä¸ªæ•æ„Ÿè¯æ·»åŠ æ—¶é—´æ“作
      {$item['id']}{$item['word']}{$item['addtime']} 删除
      + +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/anti_wordadd.html b/app/system/html/anti_wordadd.html new file mode 100644 index 0000000..012b5fc --- /dev/null +++ b/app/system/html/anti_wordadd.html @@ -0,0 +1,24 @@ +{php include pubTemplate("header_admin")} + + +
      +{template anti_menu} + + +
      + +
      + + +
      + +
      + +
      + +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/apps.html b/app/system/html/apps.html new file mode 100644 index 0000000..07e183a --- /dev/null +++ b/app/system/html/apps.html @@ -0,0 +1,127 @@ +{php include pubTemplate("header_admin")} + + + + + +
      + + {template apps_menu} + + + + + + + + + + + + + + + +{loop $arrApp $keys $item} + + + + + + + + + + + + + + + +{/loop} + + + +
      应用å称版本介ç»ä½œè€…管ç†é¡¶éƒ¨å¯¼èˆªæˆ‘的社区导航
      + + {$item['about']['name']}({$item['name']}) +{$item['about']['version']} +{$item['about']['desc']}{$item['about']['author']} +{if $item['about']['isoption'] == '1' && $item['about']['isinstall']=='1'} + ç®¡ç† + {/if} + + + +{if $item['about']['isappnav'] == '1' && $TS_SITE['appnav'][$item['name']] == ''} + å¼€å¯ + {/if} + +{if $item['about']['isappnav'] == '1' && $TS_SITE['appnav'][$item['name']] != ''} + å–æ¶ˆ + {/if} + + + + + + {if $item[about]['ismy'] == '1' && $TS_SITE['mynav'][$item['name']] == ''} + å¼€å¯ + {/if} + + {if $item['about']['ismy'] == '1' && $TS_SITE['mynav'][$item['name']] != ''} + å–æ¶ˆ + {/if} + +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/apps_applist.html b/app/system/html/apps_applist.html new file mode 100644 index 0000000..eeceb35 --- /dev/null +++ b/app/system/html/apps_applist.html @@ -0,0 +1,153 @@ +{php include pubTemplate("header_admin")} + + + + + +
      + + {template apps_menu} + + +
      上下拖动排åº
      + + +
      +
      +
        + {loop $arrAppNav $key $item} +
      1. +
        {$item}
        +
      2. + {/loop} +
      +
      +
      + + + + + + +
      + + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/apps_menu.html b/app/system/html/apps_menu.html new file mode 100644 index 0000000..2fb0a52 --- /dev/null +++ b/app/system/html/apps_menu.html @@ -0,0 +1,8 @@ + +
      \ No newline at end of file diff --git a/app/system/html/apps_mylist.html b/app/system/html/apps_mylist.html new file mode 100644 index 0000000..b8a6dd0 --- /dev/null +++ b/app/system/html/apps_mylist.html @@ -0,0 +1,154 @@ +{php include pubTemplate("header_admin")} + + + + + +
      + + {template apps_menu} + + +
      上下拖动排åº
      + + +
      +
      +
        + {loop $arrMyNav $key $item} +
      1. +
        {$item}
        +
      2. + {/loop} +
      +
      +
      + + + + + + +
      + + + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/cache.html b/app/system/html/cache.html new file mode 100644 index 0000000..68546f5 --- /dev/null +++ b/app/system/html/cache.html @@ -0,0 +1,20 @@ +{php include pubTemplate("header_admin")} + +
      +{template menu} + + + + + + + + + + + + +
      全站:清ç†å…¨ç«™ç¼“å­˜
      模æ¿ï¼šæ¸…ç†æ¨¡æ¿ç¼“å­˜
      å°ç»„头åƒï¼šæ¸…ç†å°ç»„头åƒç¼“å­˜
      用户头åƒï¼šæ¸…ç†ç”¨æˆ·å¤´åƒç¼“å­˜
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/editor_list.html b/app/system/html/editor_list.html new file mode 100644 index 0000000..0856a39 --- /dev/null +++ b/app/system/html/editor_list.html @@ -0,0 +1,53 @@ +{php include pubTemplate("header_admin")} + +
      + {template anti_menu} + + +
      {$pageUrl}
      + +
      + + + + + + + + + + + + + + + {loop $arrEditor $key $item} + + + + + + + + + + {/loop} + +
      IDUserIDtypetitleaddtimeæ“作
      {$item['id']}{$item['userid']}{$item['type']}{$item['title']} + + {if $item['type']=='photo'} + + {else} + uploadfile/editor/{$item['url']} + {/if} + + {php echo date('Y-m-d H:i:s',$item['addtime'])} 删除
      + +
      + +
      {$pageUrl}
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/logs_list.html b/app/system/html/logs_list.html new file mode 100644 index 0000000..b386c67 --- /dev/null +++ b/app/system/html/logs_list.html @@ -0,0 +1,72 @@ +{php include pubTemplate("header_admin")} + +
      + {template anti_menu} + + + + + +
      {$pageUrl}
      + +
      + + + + + + + + + + + + + + + + + {loop $arrLogs $key $item} + + + + + + + + + + + + + + + + {/loop} + +
      IDptablepkeypiduseridtitlestatusaddtimeæ“作
      {$item['logid']}{$item['ptable']}{$item['pkey']}{$item['pid']}{$item['userid']}{php echo tsTitle($item['title'])} + {if $item['status']==1} + 修改 + {elseif $item['status']==2} + 删除 + {else} + 添加 + {/if} + + {php echo date('Y-m-d H:i:s',$item['addtime'])} + + 详情 | + 删除 + +
      + +
      + +
      {$pageUrl}
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/logs_show.html b/app/system/html/logs_show.html new file mode 100644 index 0000000..a2630cf --- /dev/null +++ b/app/system/html/logs_show.html @@ -0,0 +1,31 @@ +{php include pubTemplate("header_admin")} + +
      + {template anti_menu} + + + + + +
      + + + + + + + + + + + +
      logid{$strLog['logid']}
      ptable{$strLog['ptable']}
      pkey{$strLog['pkey']}
      pid{$strLog['pid']}
      userid{$strLog['userid']}
      status{$strLog['status']}
      addtime{php echo date('Y-m-d H:i:s',$strLog['addtime'])}
      title{php echo tsTitle($strLog['title'])}
      content{php echo tsDecode($strLog['content'])}
      + +
      + + + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/main.html b/app/system/html/main.html new file mode 100644 index 0000000..20a1bde --- /dev/null +++ b/app/system/html/main.html @@ -0,0 +1,134 @@ +{php include pubTemplate("header_admin")} + + + + + +
      + + +
      + +
      + +
      +
      目录æƒé™
      +
      + + + + + + + + + +
      cache目录:{if iswriteable('cache')==0}ä¸å¯å†™(请设置为å¯å†™777æƒé™){else}å¯å†™{/if}
      data目录:{if iswriteable('data')==0}ä¸å¯å†™(请设置为å¯å†™777æƒé™){else}å¯å†™{/if}
      tslogs目录:{if iswriteable('tslogs')==0}ä¸å¯å†™(请设置为å¯å†™777æƒé™){else}å¯å†™{/if}
      upgrade目录:{if iswriteable('upgrade')==0}ä¸å¯å†™(请设置为å¯å†™777æƒé™){else}å¯å†™{/if}
      uploadfile目录:{if iswriteable('uploadfile')==0}ä¸å¯å†™(请设置为å¯å†™777æƒé™){else}å¯å†™{/if}
      +
      +
      + + +
      +
      + + +
      +
      软件信æ¯
      +
      + + + + + + + + +
      程åºç‰ˆæœ¬ï¼š{$TS_CF['info']['name']} {$TS_CF['info']['version']}
      è”系方å¼ï¼šQQ:{$TS_CF['info']['qq']} 微信:{$TS_CF['info']['weixin']}
      官方网å€ï¼š{$TS_CF['info']['url']}
      官方社区:https://demo.thinksaas.cn/
      åŸŸåæŽˆæƒï¼š
      +
      +
      + +
      +
      + +
      +
      æœåŠ¡å™¨ä¿¡æ¯
      +
      + + + + + + + + + + + + + +
      æœåŠ¡å™¨è½¯ä»¶ï¼š{$systemInfo[server]}
      æ“作系统:{$systemInfo[phpos]}
      PHP版本:{$systemInfo[phpversion]}
      MySQL版本:{$systemInfo[mysql]}
      物ç†è·¯å¾„:$_SERVER[DOCUMENT_ROOT]
      php附件上传é™åˆ¶ï¼š{$systemInfo['upload']}
      php内存é™åˆ¶ï¼š{$systemInfo['memory']}
      php图åƒå¤„ç†ï¼š{$systemInfo['gd']}
      语言:{$_SERVER[HTTP_ACCEPT_LANGUAGE]}
      gzip压缩:{if $_SERVER[HTTP_ACCEPT_ENCODING]}{$_SERVER[HTTP_ACCEPT_ENCODING]}{else}䏿”¯æŒ{/if}
      +
      +
      + +
      +
      + +
      +
      ThinkSAAS消æ¯
      +
      + + + + +
      +
      +
      + +
      + +
      + + + + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/menu.html b/app/system/html/menu.html new file mode 100644 index 0000000..22ad4e6 --- /dev/null +++ b/app/system/html/menu.html @@ -0,0 +1,13 @@ + + +
      \ No newline at end of file diff --git a/app/system/html/options.html b/app/system/html/options.html new file mode 100644 index 0000000..8017e4b --- /dev/null +++ b/app/system/html/options.html @@ -0,0 +1,403 @@ +{php include pubTemplate("header_admin")} + + + + + +
      +{template menu} +
      + +
      常规选项
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      网站标题:
      副标题: (例如:åˆä¸€ä¸ªThinkSAAS社区å°ç»„)
      关键è¯ï¼š (å…³é”®è¯æœ‰åŠ©äºŽSEO)
      网站说明: (用简æ´çš„æ–‡å­—æè¿°æœ¬ç«™ç‚¹ã€‚)
      站点地å€ï¼ˆURL):(必须以http://开头,以/结尾。如果采用相对路径,请åªå¡«å†™/)
      固定地å€:(例如:http://www.thinksaas.cn/,必须以/结尾,主è¦ç”¨äºŽé‡‡ç”¨å›ºå®šé“¾æŽ¥çš„URL)
      网站密钥: 釿–°ç”Ÿæˆ (éžå¸¸é‡è¦ï¼Œåˆ‡å‹¿æ³„æ¼)
      网站Logo: + +(支æŒpng,gif,jpgæ ¼å¼ï¼Œå®½åº¦285px高度60px)
      电å­é‚®ä»¶ :
      ICPå¤‡æ¡ˆå· : (京ICP备09050100å·ï¼‰
      是å¦ä¸Šä¼ å¤´åƒ : + ä¸éœ€è¦ + éœ€è¦ +
      用户注册 : + 开放注册 + 邀请注册 + 关闭注册 +
      æ³¨å†Œæ–¹å¼ : + Email邮箱 + æ‰‹æœºå· + Email邮箱+æ‰‹æœºå· + (æ‰‹æœºå·æ³¨å†Œéœ€è¦å…ˆå®‰è£…æ‰‹æœºå·æ³¨å†ŒåŠŸèƒ½) +
      是å¦å¼€å¯çŸ­ä¿¡ç™»å½•: + ä¸å¼€å¯ + å¼€å¯ +
      是å¦éªŒè¯Email : + ä¸éªŒè¯Email + 验è¯Email + + (当开å¯Email注册的时候æ‰ä¼šéªŒè¯email) + +
      是å¦éªŒè¯æ‰‹æœºå· : + + ä¸éªŒè¯æ‰‹æœºå· + éªŒè¯æ‰‹æœºå· + + (手机å·éªŒè¯åŽåŒæ—¶å¯ä»¥ä½¿ç”¨æ‰‹æœºå·ç™»å½•网站,注册方å¼ä¸­ä½¿ç”¨æ‰‹æœºå·æ³¨å†Œçš„自动验è¯) + +
      登录是å¦è·³è½¬ :ä¸è·³è½¬ 跳转到我的社区
      是å¦å¼€å¯éªŒè¯ç  :ä¸å¼€å¯ å¼€å¯
      是å¦tokenéªŒè¯ :å¦ æ˜¯
      是å¦å¼€å¯å…¬ä¼—å¹³å°ç™»å½•: + +
      + å¦ + 是 (请先获å–å¾®ä¿¡å…¬ä¼—å·æ‰€éœ€è¦çš„傿•°ï¼Œç‚¹å‡»åŽ»èŽ·å–) +
      + + +
      + +
      +
      AppID:
      +
      +
      + +
      +
      AppSecret:
      +
      +
      + +
      + + +
      是å¦å¼€å¯äººæœºéªŒè¯ : + +
      + å¦ + 是 (请先获å–äººæœºéªŒè¯æ‰€éœ€è¦çš„傿•°ï¼Œç‚¹å‡»åŽ»èŽ·å–) +
      + + +
      + +
      +
      VID:
      +
      +
      + +
      +
      KEY:
      +
      +
      + +
      + + +
      时区: + +
      + + + +
      内容设定
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      用户访问内容æƒé™ï¼š + ä¸éœ€è¦ç™»å½• + 需è¦ç™»å½• +
      用户å‘布内容æƒé™ï¼š + 注册用户 + ä»…Email验è¯ç”¨æˆ· + 仅手机注册用户 + 仅手工认è¯ç”¨æˆ· + 仅管ç†å‘˜ +
      是å¦å¼€å¯åŒ¿åå‘布内容: + ä¸å¼€å¯ + å¼€å¯ +
      用户å‘布内容时间 :
      (24å°æ—¶åˆ¶ï¼Œä»¥|分割。留空为ä¸é™åˆ¶)
      å‘布内容间隔时间 : (0ä¸é™åˆ¶ï¼›ä¾‹å¦‚1分钟=60秒,30分钟就是30*60=1800ç§’ï¼›1å°æ—¶3600ç§’)
      用户修改内容æƒé™ :å…许 ä¸å…许 (管ç†å‘˜é™¤å¤–)
      用户删除内容æƒé™ :å…许 ä¸å…许 (管ç†å‘˜é™¤å¤–)
      å†…å®¹æ•æ„Ÿè¯å¤„ç†æ–¹å¼ :拦截å‘布 æ›¿æ¢æˆ*** (管ç†å‘˜é™¤å¤–)
      + + +
      系统主题
      + + + + + + + + + +
      选择主题: + +
      +
        +{loop $arrTheme $key $item} +
      • + +
        + {$item} +
      • +{/loop} +
      +
      + +
      + + +
      链接形å¼
      + + + + + + + + + + + + + + +
      å½¢å¼1: index.php?app=group&ac=show&id=1
      å½¢å¼2: index.php/group/show/id-1
      å½¢å¼3: group-show-id-1.html
      å½¢å¼4: group/show/id-1
      å½¢å¼5: group/show/1
      å½¢å¼6: group/show/id/1
      å½¢å¼7: group/show/1/
      + + +
      默认支æŒApache环境的rewrite,如果是nginx环境,请点击查看 ThinkSAAS社区URLé‡å†™è§„则之Nginx篇
      + + +
      其他选项
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      文件存储方å¼ï¼š
      ã€é‡è¦ï¼šç”¨æˆ·ä¸Šä¼ æ•°æ®åŽåˆ‡å‹¿æ¥å›žåˆ‡æ¢å­˜å‚¨æ–¹å¼ï¼ŒåŽæžœè‡ªè´Ÿï¼å¦‚本地存储数æ®éœ€è¦ä¸Šäº‘存储,请è”ç³»ThinkSAAS官方指导处ç†ï¼ã€‘
      + + + 本地存储 + 阿里云(对象存储OSS) + + +
      + +
      + +
      + 使用阿里云(对象云存储OSS),需è¦è´­ä¹°é˜¿é‡Œäº‘对象存储,点击去购买,并获å–以䏋傿•°ã€‚ +
      + +
      +
      AccessKey ID:
      +
      + +
      + +
      +
      AccessKey Secret:
      +
      +
      + + +
      +
      Bucket å称:
      +
      +
      例如:thinksaas
      +
      + +
      +
      Endpoint(地域节点):
      +
      +
      例如:https://oss-cn-beijing.aliyuncs.com
      +
      + +
      +
      Bucket 域å:
      +
      +
      例如:https://thinksaas.oss-cn-beijing.aliyuncs.com
      +
      + + +
      + + +
      图片上传大å°ï¼šM (请填写数字,例如2)
      图片上传格å¼ï¼š(请以英文逗å·åˆ†å‰²ï¼Œä¾‹å¦‚:jpg,gif,png)
      是å¦å¼€å¯æ­£æ–‡å›¾ç‰‡æ£€æµ‹ï¼š + + + ä¸å¼€å¯ + å¼€å¯ + +
      图片处ç†ç»„件: + + gd + imagick (æœåŠ¡å™¨å’Œphp环境必须支æŒimagick扩展) + +
      附件上传大å°ï¼šM (请填写数字,例如2)
      附件上传格å¼ï¼š(请以英文逗å·åˆ†å‰²ï¼Œä¾‹å¦‚:zip,rar,doc,txt,ppt)
      ç”¨æˆ·æ¯æ—¥èŽ·å¾—ç§¯åˆ†ä¸Šé™: ç§¯åˆ†ï¼ˆè®¾ç½®æ¯æ—¥èŽ·å¾—ç§¯åˆ†ä¸Šé™åŽï¼Œç”¨æˆ·å½“天的内容动作ä¸å†èŽ·å¾—ç§¯åˆ†å¥–åŠ±ã€‚ï¼‰
      + + +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/plugin_list.html b/app/system/html/plugin_list.html new file mode 100644 index 0000000..7346ec4 --- /dev/null +++ b/app/system/html/plugin_list.html @@ -0,0 +1,76 @@ +{php include pubTemplate("header_admin")} + +
      + + +
      + +
      +
      + + + + {if $arrAppsAbout[$apps]['hook']} + +
      + + 全部 + + {loop $arrAppsAbout[$apps]['hook'] $key $item} + {$item} + {/loop} + +
      + + {/if} + + + + + + + + + + + + + + + +{loop $arrPlugin $key $item} + + + + + + + +{/loop} + +
      å称版本介ç»ä½œè€…æ“作
      {$item['about']['name']} ({$item['name']}){$item['about']['version']}{$item['about']['desc']}{$item['about']['author']} + +{if in_array($item['name'],$app_plugins)} + åœç”¨ + {else} + å¯ç”¨ + {/if} + +{if $item['about']['isedit']=='1' && in_array($item['name'],$app_plugins)} + 编辑 + {/if} + + + +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/spam.html b/app/system/html/spam.html new file mode 100644 index 0000000..2adc6b4 --- /dev/null +++ b/app/system/html/spam.html @@ -0,0 +1,83 @@ +{php include pubTemplate("header_admin")} + +
      + +

      å垃圾设置

      +

      针对日益猖ç—的垃圾广告和垃圾内容,ThinkSAASæˆç«‹å垃圾广告和内容è”盟,自å¯ç”¨ä¹‹æ—¥èµ·å°±å°†å’Œåžƒåœ¾å¹¿å‘Šå’Œå†…容战斗到底。

      + + + + + + + + + + + + + + + + + + + +
      ç¦æ­¢ç”¨æˆ·ï¼š +ç¦æ­¢ç”¨æˆ·ä¼šåŒæ—¶ç¦æ­¢ç”¨æˆ·ç™»å½•å’Œç¦æ­¢ç”¨æˆ·IP登录 +
      +æ“作方法:
      +用户管ç†->åœç”¨ +
      +进入用户管ç†>> +
      清空用户数æ®ï¼š + +清空垃圾用户所å‘的所有垃圾内容 +
      +æ“作方法:
      +用户管ç†->æ¸…ç©ºæ•°æ® +
      +进入用户管ç†>> +
      垃圾è¯è¿‡æ»¤ï¼š + +通过开å¯ã€Šæ•感è¯è¯­è¿‡æ»¤æ’ä»¶ (wast_word)》æ¥è¿‡æ»¤å’Œæœç»åžƒåœ¾å¹¿å‘Šå’Œå†…容 +
      +æ“作方法:
      +æ’件管ç†->æ•æ„Ÿè¯è¯­è¿‡æ»¤æ’ä»¶ (wast_word)->å¼€å¯ +
      进入æ’件管ç†>> | 更新云垃圾è¯åº“>> +
      å¼€å¯éªŒè¯ç ï¼š +通过开å¯å‘帖验è¯ç ï¼Œè¯„论回å¤éªŒè¯ç æ¥é™åˆ¶åžƒåœ¾ç”¨æˆ·åˆ›é€ åžƒåœ¾å†…容 +
      + +

      远程æäº¤åžƒåœ¾è¯è¯­

      +

      如果你å‘现有垃圾è¯è¯­ï¼Œè¯·é€šè¿‡ä¸‹é¢è¾“入远程æäº¤ç»™ThinkSAAS,我们将建立强大的垃圾è¯äº‘存储库。

      + + + + +
      垃圾è¯ï¼š + + + + +
      + +
      + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/sql.html b/app/system/html/sql.html new file mode 100644 index 0000000..d3f62a2 --- /dev/null +++ b/app/system/html/sql.html @@ -0,0 +1,17 @@ +{php include pubTemplate("header_admin")} + +
      +{template menu} + +
      +

      1ã€å‡ºäºŽå¯¹æ•°æ®åº“安全的考虑,ThinkSAASå°†ä¸ç›´æŽ¥é€šè¿‡åŽå°å¯¹æ•°æ®åº“进行任何的æ“作。

      +

      2ã€ThinkSAAS推è你使用 å…费的mysql管ç†å·¥å…· æ¥ç®¡ç†ä½ çš„æ•°æ®åº“。 + + 点击去查看下载 + +

      + +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/test.html b/app/system/html/test.html new file mode 100644 index 0000000..05e935b --- /dev/null +++ b/app/system/html/test.html @@ -0,0 +1,31 @@ +{php include pubTemplate("header_admin")} + +
      + {template anti_menu} + +
      +
      + + + + + + + + + + + + + +
      选择文件 + +
      + + +
      +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/update.html b/app/system/html/update.html new file mode 100644 index 0000000..12bcf9c --- /dev/null +++ b/app/system/html/update.html @@ -0,0 +1,28 @@ +{php include pubTemplate("header_admin")} +
      +
      + +
      + +
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/update_hand.html b/app/system/html/update_hand.html new file mode 100644 index 0000000..ff26cf4 --- /dev/null +++ b/app/system/html/update_hand.html @@ -0,0 +1,45 @@ +{php include pubTemplate("header_admin")} + +
      + + + +
      +

      手动å‡çº§ï¼šæ£€æµ‹ç³»ç»ŸåŸºæœ¬æƒé™

      +
      + + + + + + + + +
      + + +
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/update_one.html b/app/system/html/update_one.html new file mode 100644 index 0000000..0a26b22 --- /dev/null +++ b/app/system/html/update_one.html @@ -0,0 +1,47 @@ +{php include pubTemplate("header_admin")} + +
      + + + +
      +

      第一步:检测系统基本æƒé™

      +
      + + + + + + + + +
      + + +
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/update_three.html b/app/system/html/update_three.html new file mode 100644 index 0000000..a885722 --- /dev/null +++ b/app/system/html/update_three.html @@ -0,0 +1,44 @@ +{php include pubTemplate("header_admin")} + +
      + + + +
      +

      第三步:å‡çº§ç³»ç»Ÿæ–‡ä»¶

      + +
      + + + + + +
      + + +
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/html/update_two.html b/app/system/html/update_two.html new file mode 100644 index 0000000..11d7b93 --- /dev/null +++ b/app/system/html/update_two.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header_admin")} + +
      + + + +
      +

      第二步:å‡çº§æ•°æ®åº“

      + +
      + + + +
      + + +
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/system/js/admin.js b/app/system/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/system/js/extend.func.js b/app/system/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/system/skin/loading.gif b/app/system/skin/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a56815b224f865a176ee02259209bbe734a7c66 GIT binary patch literal 729 zcmZ?wbhEHb6krfw*v!vRRaN!<`}eM{u04D9OrAXX?AfzTO-;|9J-c`B-kLRQjvhVw z?%liDvuAJFvSsn&#sB~RSNzZI=Nc01>=@u`q-Vg)$iTp$_>+Z`gMptx2gn8*D!{ui!K?FQ=} zH?Xd{pt$&AAhW_8|9KxoF0L)FVBuPK^2Fx|Eyj5b!A2T$_)fYrI-Fn;YEaSX(VW82 zk<8BB^ zyg~ZU!^v%pW2>hJf)$GceOB@lW%IqbM+#%`yV*4 zSpoDBFs3Ycm>47vZsmyO|lq3pQPK+9JJ1v_kOAB<7PPOi?B$_+<{i4+h5@D_X*USQo*^ zaDpSuK*RrF;UPy+wgi?0O$Mhka~zylKP%{ViMg8^3Tnt4Ind5xl01vC$yt$sYs%r1 o3nDTyF1RxtpYS1rRbWl(0YARY!rMM@@~&Y>OFO^ag@M5u0Ak7h$N&HU literal 0 HcmV?d00001 diff --git a/app/system/skin/logo.png b/app/system/skin/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ab1430f2b5f6e207a3653b769d348e2e837314 GIT binary patch literal 48758 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 Kb6Mw<&;$T1$PO3) literal 0 HcmV?d00001 diff --git a/app/system/skin/style.css b/app/system/skin/style.css new file mode 100644 index 0000000..7da543c --- /dev/null +++ b/app/system/skin/style.css @@ -0,0 +1,79 @@ +/**框架CSS**/ +body{ margin:0; padding:0; font-family:Verdana, sans-serif, 宋体;font-size:14px;color:#555555;background:#FFFFFF;} + + + +.c9{color:#999999;} + +.fs12{font-size: 12px;} +.fs14{font-size: 14px;} +.fs16{font-size: 16px;} + + + +/*导航*/ +.tabnav { + padding:15px 0px 15px 0px; + overflow:hidden; + margin-bottom:20px; + position: fixed; + width: 100%; + background: #FFFFFF; + z-index:100000; + +} + +.tabnav h6{ + margin-bottom: 15px; + font-weight: bold; +} + +.tabnav ul { + list-style: none; + margin:0; + padding:0; + width: 100%; + overflow: hidden; + border-bottom:1px solid #3A81C0; +} +.tabnav ul li { + list-style: none; + border:solid 1px #3A81C0; + float:left; + margin-right:5px; + padding:0px 10px; + height:30px; + line-height: 30px; + font-size:14px; + border-bottom:none; +} + +.tabnav a {color: #3A81C0;} + +.tabnav .select { +background:#3A81C0; +} +.tabnav .select a { +color:#FFFFFF; +font-weight:bold; +} + + +/*中部*/ +.midder{margin:0 auto;padding:0px 10px 10px 10px;overflow:hidden;background:#FFFFFF;} + + + +/*theme*/ +.theme{overflow:hidden;} +.theme ul{overflow:hidden;} +.theme ul li{height:120px;float:left;padding:5px;overflow:hidden;} + + +/**/ +.update{float:left;width:100%;} +.update h1{font-size:18px;} +.update .uptitle{font-weight: bold;} +.update .uplog{font-size:14px;background:#F8F8F8;padding:20px;border:solid 1px #EEEEEE;border-radius: 4px 4px 4px 4px;} +.update .uptime{padding:10px;font-size: 12px;} + diff --git a/app/system/skins/default/loading.gif b/app/system/skins/default/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a56815b224f865a176ee02259209bbe734a7c66 GIT binary patch literal 729 zcmZ?wbhEHb6krfw*v!vRRaN!<`}eM{u04D9OrAXX?AfzTO-;|9J-c`B-kLRQjvhVw z?%liDvuAJFvSsn&#sB~RSNzZI=Nc01>=@u`q-Vg)$iTp$_>+Z`gMptx2gn8*D!{ui!K?FQ=} zH?Xd{pt$&AAhW_8|9KxoF0L)FVBuPK^2Fx|Eyj5b!A2T$_)fYrI-Fn;YEaSX(VW82 zk<8BB^ zyg~ZU!^v%pW2>hJf)$GceOB@lW%IqbM+#%`yV*4 zSpoDBFs3Ycm>47vZsmyO|lq3pQPK+9JJ1v_kOAB<7PPOi?B$_+<{i4+h5@D_X*USQo*^ zaDpSuK*RrF;UPy+wgi?0O$Mhka~zylKP%{ViMg8^3Tnt4Ind5xl01vC$yt$sYs%r1 o3nDTyF1RxtpYS1rRbWl(0YARY!rMM@@~&Y>OFO^ag@M5u0Ak7h$N&HU literal 0 HcmV?d00001 diff --git a/app/system/skins/default/logo.png b/app/system/skins/default/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ab1430f2b5f6e207a3653b769d348e2e837314 GIT binary patch literal 48758 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 Kb6Mw<&;$T1$PO3) literal 0 HcmV?d00001 diff --git a/app/system/skins/default/style.css b/app/system/skins/default/style.css new file mode 100644 index 0000000..3cb5093 --- /dev/null +++ b/app/system/skins/default/style.css @@ -0,0 +1,62 @@ +/**框架CSS**/ +body{ margin:0; padding:0; font-family:Verdana, sans-serif, 宋体;font-size:14px;color:#555555;background:#FFFFFF;} + + + +.c9{color:#999999;} + +.fs12{font-size: 12px;} + + + +/*导航*/ +.tabnav { +padding:0px; +overflow:hidden; +border-bottom:1px solid #3A81C0; +margin-bottom:20px; +} +.tabnav ul { + list-style: none; +margin:0; +padding:0; +} +.tabnav ul li { + list-style: none; +border:solid 1px #3A81C0; +float:left; +margin-right:5px; +padding:5px 10px; +font-size:14px; +border-bottom:none; +} + +.tabnav a {color: #3A81C0;} + +.tabnav .select { +background:#3A81C0; +} +.tabnav .select a { +color:#FFFFFF; +font-weight:bold; +} + + +/*中部*/ +.midder{margin:0 auto;padding:10px;overflow:hidden;background:#FFFFFF;} + + + +/*theme*/ +.theme{overflow:hidden;} +.theme ul{overflow:hidden;} +.theme ul li{height:120px;float:left;padding:5px;overflow:hidden;} + + +/**/ +.update{float:left;width:100%;} +.update h1{font-size:18px;} +.update .uptitle{font-weight: bold;} +.update .uplog{font-size:14px;background:#F8F8F8;padding:20px;border:solid 1px #EEEEEE;border-radius: 4px 4px 4px 4px;} +.update .uptime{padding:10px;font-size: 12px;} + diff --git a/app/tag/about.php b/app/tag/about.php new file mode 100644 index 0000000..6d93ba7 --- /dev/null +++ b/app/tag/about.php @@ -0,0 +1,17 @@ + '标签', + 'version' => '1.2', + 'desc' => '标签', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '0', + 'ismy'=>'0' +); \ No newline at end of file diff --git a/app/tag/action/add.php b/app/tag/action/add.php new file mode 100644 index 0000000..1d81cbf --- /dev/null +++ b/app/tag/action/add.php @@ -0,0 +1,25 @@ +addTag($objname,$idname,$objid,$tags); + + tsNotice('标签添加æˆåŠŸï¼'); + + break; +} \ No newline at end of file diff --git a/app/tag/action/add_ajax.php b/app/tag/action/add_ajax.php new file mode 100644 index 0000000..4bac41d --- /dev/null +++ b/app/tag/action/add_ajax.php @@ -0,0 +1,25 @@ +addTag($objname,$idname,$objid,$tags); + + echo ""; + + break; +} \ No newline at end of file diff --git a/app/tag/action/admin.php b/app/tag/action/admin.php new file mode 100644 index 0000000..b04d6eb --- /dev/null +++ b/app/tag/action/admin.php @@ -0,0 +1,10 @@ +isTag($tag)==true) qiMsg('标签已存在,无需添加ï¼'); + + $new['tag']->create('tag',array( + 'tagname'=>$tag, + 'uptime'=>time(), + )); + + header('Location: '.SITE_URL.'index.php?app=tag&ac=admin&mg=list'); + + break; + + //审核 + case "isaudit": + $tagid = tsIntval($_GET['tagid']); + $isaudit = tsIntval($_GET['isaudit']); + + $db->query("update ".dbprefix."tag set `isaudit`='$isaudit' where tagid = '$tagid'"); + + qiMsg("设置æˆåŠŸï¼"); + + break; + + //删除 + case "del": + $tagid = tsIntval($_GET['tagid']); + $page = tsIntval($_GET['page']); + + $new['tag']->delete('tag',array('tagid'=>$tagid)); + $new['tag']->delete('tag_article_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_bang_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_group_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_photo_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_study_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_topic_index',array('tagid'=>$tagid)); + $new['tag']->delete('tag_user_index',array('tagid'=>$tagid)); + + header('Location: '.SITE_URL.'index.php?app=tag&ac=admin&mg=list&page='.$page); + + break; + + //优化标签 + case "opt": + $tagid = tsIntval($_GET['tagid']); + $strTag = $new['tag']->getOneTag($tagid); + + $tagname = t($strTag['tagname']); + + $tagNum = $db->once_fetch_assoc("select count(*) from ".dbprefix."tag where `tagname`='$tagname'"); + + if($tagNum['count(*)']==0){ + $db->query("update ".dbprefix."tag set `tagname`='$tagname' where `tagid`='$tagid'"); + }elseif($tagNum['count(*)']==1){ + + }else{ + $arrTags = $db->fetch_all_assoc("select * from ".dbprefix."tag where `tagname`='$tagname'"); + foreach($arrTags as $item){ + $tagids = $item['tagid']; + //先更新索引 + $db->query("update ".dbpreifx."tag_topic_index set `tagid`='$tagid' where `tagid`='$tagids'"); + $db->query("update ".dbpreifx."tag_article_index set `tagid`='$tagid' where `tagid`='$tagids'"); + $db->query("update ".dbpreifx."tag_user_index set `tagid`='$tagid' where `tagid`='$tagids'"); + + //å†è¿›è¡Œåˆ é™¤ + $db->query("delete from ".dbprefix."tag where `tagid`='$tagids'"); + + //æœ€åŽæ›´æ–°tag + $db->query("update ".dbprefix."tag set `tagname`='$tagname' where `tagid`='$tagid'"); + } + } + + qiMsg("优化æˆåŠŸï¼"); + + break; +} \ No newline at end of file diff --git a/app/tag/action/admin/list.php b/app/tag/action/admin/list.php new file mode 100644 index 0000000..998dfb3 --- /dev/null +++ b/app/tag/action/admin/list.php @@ -0,0 +1,18 @@ +fetch_all_assoc("select * from ".dbprefix."tag order by uptime desc limit $sLimit,10"); + +$tagNum = $db->once_num_rows("select * from ".dbprefix."tag"); + +$pageUrl = pagination($tagNum, 10, $page, $url); + +include template("admin/list"); \ No newline at end of file diff --git a/app/tag/action/admin/options.php b/app/tag/action/admin/options.php new file mode 100644 index 0000000..175843b --- /dev/null +++ b/app/tag/action/admin/options.php @@ -0,0 +1,19 @@ +findCount('tag',array( + 'tagname'=>$tagname, + )); + + if($tagcount == '0'){ + + $tagid = $this->create('tag',array( + 'tagname'=>$tagname, + 'isaudit'=>$isaudit, + 'uptime'=>$uptime, + )); + + $tagIndexCount = $this->findCount('tag_'.$objname.'_index',array( + $idname=>$objid, + 'tagid'=>$tagid, + )); + + if($tagIndexCount == '0'){ + + $this->create("tag_".$objname."_index",array( + $idname=>$objid, + 'tagid'=>$tagid, + )); + + } + + $tagIdCount = $this->findCount("tag_".$objname."_index",array( + 'tagid'=>$tagid, + )); + + $count_obj = "count_".$objname; + + $this->update('tag',array( + 'tagid'=>$tagid, + ),array( + $count_obj=>$tagIdCount, + )); + + }else{ + + $tagData = $this->find('tag',array( + 'tagname'=>$tagname, + )); + + $tagIndexCount = $this->findCount("tag_".$objname."_index",array( + $idname=>$objid, + 'tagid'=>$tagData['tagid'], + )); + + if($tagIndexCount == '0'){ + + $this->create("tag_".$objname."_index",array( + + $idname=>$objid, + 'tagid'=>$tagData['tagid'], + + )); + + } + + $tagIdCount = $this->findCount("tag_".$objname."_index",array( + 'tagid'=>$tagData['tagid'], + )); + + $count_obj = "count_".$objname; + + $this->update('tag',array( + 'tagid'=>$tagData['tagid'], + ),array( + $count_obj=>$tagIdCount, + 'uptime'=>$uptime, + )); + + } + + } + } + } + } + + //通过topic获å–tag + function getObjTagByObjid($objname,$idname,$objid){ + + $arrTagIndex = $this->findAll("tag_".$objname."_index",array( + $idname=>$objid, + )); + + $arrTag = array(); + + if($arrTagIndex){ + foreach($arrTagIndex as $item){ + $arrTagId[] = $item['tagid']; + } + + $tagids = arr2str($arrTagId); + + $arrTag = $this->findAll('tag',"`tagid` in ($tagids) and `isaudit`=0"); + } + + return $arrTag; + + } + + //通过tagid获得tagname + function getOneTag($tagid){ + + $strTag = $this->find('tag',array( + 'tagid'=>$tagid, + )); + + if($strTag=='') ts404(); + + if($strTag['isaduit']==1) tsNotice('标签审核中...'); + + return $strTag; + } + + //通过tagname获å–tag + function getTagByName($tagname){ + $strTag = $this->find('tag',array( + 'tagname'=>$tagname, + )); + if($strTag=='') ts404(); + if($strTag['isaudit']==1) tsNotice('标签审核中...'); + return $strTag; + } + + //统计标签 + function countObjTag($objname,$tagid){ + $countObj = $this->findCount("tag_".$objname."_index",array( + 'tagid'=>$tagid, + )); + $this->update('tag',array( + 'tagid'=>$tagid, + ),array( + 'count_'.$objname=>$countObj, + )); + + } + + //删除项目ID所有标签 + function delIndextag($objname,$idname,$objid){ + $this->delete("tag_".$objname."_index",array( + $idname=>$objid, + )); + return true; + } + + //tag是å¦å­˜åœ¨ + public function isTag($tagname){ + $countTag = $this->findCount('tag',array( + 'tagname'=>$tagname, + )); + if($countTag>0){ + return true; + }else{ + return false; + } + } + + +} \ No newline at end of file diff --git a/app/tag/config.php b/app/tag/config.php new file mode 100644 index 0000000..8f87a8e --- /dev/null +++ b/app/tag/config.php @@ -0,0 +1,4 @@ + + +{php include template("admin/menu");} + +
      + +
      {$pageUrl}
      + + + + + + + + + + + + + + {loop $arrTags $key $item} + + {/loop} + + + + + + +
      ID标签å字创建时间æ“作
      {$item[tagid]}{$item[tagname]}{php echo date('Y-m-d H:i:s',$item[uptime])} + + [优化] + + [å–æ¶ˆå®¡æ ¸][审核] [删除]
      + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/tag/html/admin/menu.html b/app/tag/html/admin/menu.html new file mode 100644 index 0000000..1fc1487 --- /dev/null +++ b/app/tag/html/admin/menu.html @@ -0,0 +1,10 @@ + +
      +
      标签管ç†
      + +
      + +
      \ No newline at end of file diff --git a/app/tag/html/admin/options.html b/app/tag/html/admin/options.html new file mode 100644 index 0000000..2523f33 --- /dev/null +++ b/app/tag/html/admin/options.html @@ -0,0 +1,30 @@ +{php include pubTemplate("header_admin")} + +
      +{php include template("admin/menu");} + + + + +
      + + + + + + + + + + + +
      APPå称:
      APP介ç»ï¼š
      APP关键è¯ï¼š
      标签是å¦å®¡æ ¸æ˜¾ç¤ºï¼šä¸å®¡æ ¸ 审核
      + +
      +
      + + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/about.php b/app/topic/about.php new file mode 100644 index 0000000..4b50ee2 --- /dev/null +++ b/app/topic/about.php @@ -0,0 +1,17 @@ + 'è¯é¢˜', + 'version' => '1.2', + 'desc' => 'è¯é¢˜ï¼Œå¸–å­', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1' +); \ No newline at end of file diff --git a/app/topic/action/add.php b/app/topic/action/add.php new file mode 100644 index 0000000..60ed4e1 --- /dev/null +++ b/app/topic/action/add.php @@ -0,0 +1,337 @@ +isLogin (); + +//判断用户是å¦å­˜åœ¨ +if(aac('user')->isUser($userid)==false) tsNotice('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼'); + +//判断å‘å¸ƒè€…çŠ¶æ€ +if(aac('user')->isPublisher()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼'); + +//å‘布时间é™åˆ¶ +if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + +//å‘布时间间隔é™åˆ¶ +if($TS_SITE['timeblank']){ + $lastTopic = $new['topic']->find('topic',array( + 'userid'=>$userid, + ),'topicid,addtime','addtime desc'); + if($lastTopic){ + if((time()-$lastTopic['addtime'])<$TS_SITE['timeblank']){ + tsNotice('ä¸å¥½æ„æ€ï¼Œæ‚¨çš„内容å‘é€é¢‘率过高ï¼è¯·ç­‰ç­‰å†å‘布ï¼'); + } + } +} + +//å‘布内容扣除积分é™åˆ¶ +$strScoreOption = $new['topic']->find('user_score',array( + 'app'=>'topic', + 'action'=>'add', + 'ts'=>'do', +)); +if($strScoreOption && $strScoreOption['status']==1){ + #用户积分数 + $strUserScore = $new['topic']->find('user_info',array( + 'userid'=>$userid, + ),'count_score'); + if($strUserScore['count_score']<$strScoreOption['score']){ + tsNotice('ä¸å¥½æ„æ€ï¼Œæ‚¨çš„积分ä¸è¶³ï¼'); + } +} + + +$groupid = tsIntval($_GET ['groupid']); + +// å°ç»„æ•°ç›® +$groupNum = $new ['topic']->findCount ( 'group', array ( + 'groupid' => $groupid +) ); + +if ($groupNum == 0) { + header ( "Location: " . SITE_URL ); + exit (); +} + +// å°ç»„会员 +$isGroupUser = $new ['topic']->findCount ( 'group_user', array ( + 'userid' => $userid, + 'groupid' => $groupid +) ); + +//å°ç»„ä¿¡æ¯ +$strGroup = $new ['topic']->find ( 'group', array ( + 'groupid' => $groupid +)); +$strGroup ['groupname'] = tsTitle( $strGroup ['groupname'] ); +$strGroup ['groupdesc'] = tsTitle( $strGroup ['groupdesc'] ); + +if ($strGroup ['isaudit'] == 1) { + tsNotice ( 'å°ç»„还未审核通过,ä¸å…许å‘帖ï¼' ); +} + +// å…许å°ç»„æˆå‘˜å‘帖 +if ($strGroup ['ispost'] == 0 && $isGroupUser == 0 && $userid != $strGroup ['userid']) { + tsNotice ( "本å°ç»„åªå…许å°ç»„æˆå‘˜å‘贴,请加入å°ç»„åŽå†å‘帖ï¼" ); +} +// ä¸å…许å°ç»„æˆå‘˜å‘帖 +if ($strGroup ['ispost'] == 1 && $userid != $strGroup ['userid']) { + tsNotice ( "本å°ç»„åªå…许å°ç»„组长å‘帖ï¼" ); +} + +switch ($ts) { + + // å‘å¸ƒå¸–å­ + case "" : + + // 帖å­ç±»åž‹ + $arrGroupType = $new ['topic']->findAll ( 'topic_type', array ( + 'groupid' => $strGroup ['groupid'] + ) ); + + #加载è‰ç¨¿ç®± + $strDraft = $new['topic']->find('draft',array( + 'userid'=>$userid, + 'types'=>'topic', + )); + + $title = 'å‘布帖å­'; + // åŒ…å«æ¨¡ç‰ˆ + include template ( "add" ); + + break; + + // 执行å‘å¸ƒå¸–å­ + case "do" : + + #验è¯ç éªŒè¯ + $authcode = strtolower ( $_POST ['authcode'] ); + if ($TS_SITE['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + tsNotice ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ); + } + } + + #äººæœºéªŒè¯ + $vaptcha_token = tsTrim($_POST ['vaptcha_token']); + $vaptcha_server = tsTrim($_POST['vaptcha_server']); + if ($TS_SITE['is_vaptcha']) { + $strVt = vaptcha($vaptcha_token,0,$vaptcha_server); + if($strVt['success']==0) { + tsNotice('äººæœºéªŒè¯æœªé€šè¿‡ï¼'); + } + } + + $title = tsTrim( $_POST ['title'] ); + + $content = tsClean( $_POST ['content'] ); + $content2 = emptyText($_POST ['content']); + + $typeid = tsIntval ( $_POST ['typeid'] ); + $tag = $_POST ['tag']; + + $score = tsIntval($_POST ['score']);#积分 + + + //匿å用户 + $isniming = tsIntval($_POST['isniming']); + if($TS_SITE['isniming']==1 && $isniming==1) $userid = aac('user')->getNimingId(); + + + // 判断一下Title是å¦é‡å¤ + $isTitle = $new ['topic']->findCount ( 'topic', array ( + 'title' => $title + ) ); + + if ($isTitle > 0) { + tsNotice ( '有é‡å¤æ ‡é¢˜å‡ºçް哦^_^' ); + } + + if ($TS_USER ['isadmin'] == 0) { + $title = antiWord ( $title ); + $content = antiWord ( $content ); + $tag = antiWord ( $tag ); + } + + $iscomment = tsIntval ( $_POST ['iscomment'] ); + $iscommentshow = tsIntval ( $_POST ['iscommentshow'] ); + + // 取孿˜¯å¦éœ€è¦å®¡æ ¸ + if ($strGroup ['ispostaudit'] == 1) { + $isaudit = 1; + } else { + $isaudit = 0; + } + + #应用åŽå°è®¾ç½®å‘帖是å¦éœ€è¦å®¡æ ¸ï¼Œåªé’ˆå¯¹æ™®é€šç”¨æˆ· + if($TS_APP['isaudit']==1 && $TS_USER['isadmin']==0){ + $isaudit = 1; + } + + + if ($title == '' || $content2 == '' || $content=='') { + tsNotice ( '没有任何内容是ä¸å…许你通过滴^_^' ); + } + + if($score<0){ + tsNotice ( '积分填写有误ï¼' ); + } + + /** + * ****************** + */ + // 防止用户å‘布é‡å¤å†…容,调出用户上一次å‘表的内容 + $strPreTopic = $new ['topic']->find ( 'topic', array ( + 'userid' => $userid + ), 'topicid,title,addtime', 'addtime desc' ); + + // print_r($strPreTopic);exit; + + + // å‘帖间隔时间 + /* + $IntervalTime = time () - $strPreTopic ['addtime']; + // if($strPreTopic && $IntervalTime<3600){ + if ($strPreTopic) { + similar_text ( $strPreTopic ['title'], $title, $percent ); + if ($percent >= 90) { + $new ['topic']->update ( 'topic', array ( + 'topicid' => $strPreTopic ['topicid'] + ), array ( + 'isaudit' => 1 + ) ); + $isaudit = 1; + } + } + */ + + + + /** + * ***************** + */ + + $gaiyao = cututf8(t(tsDecode($content)),0,100); + + + $topicid = $new ['topic']->create ( 'topic', array ( + 'groupid' => $groupid, + 'typeid' => $typeid, + 'userid' => $userid, + 'title' => $title, + 'content' => $content, + 'gaiyao'=>$gaiyao, + 'score'=>$score, + 'iscomment' => $iscomment, + 'iscommentshow' => $iscommentshow, + 'isaudit' => $isaudit, + 'addtime' => time (), + 'uptime' => time () + ) ); + + + #清空è‰ç¨¿ç®± + $new['topic']->delete('draft',array( + 'userid'=>$userid, + 'types'=>'topic', + )); + + + // 统计用户å‘帖数 + $countUserTopic = $new ['topic']->findCount ( 'topic', array ( + 'userid' => $userid + ) ); + + $new ['topic']->update ( 'user_info', array ( + 'userid' => $userid + ), array ( + 'count_topic' => $countUserTopic + ) ); + + // 处ç†@用户å + /* + if (preg_match_all ( '/@/', $content, $at )) { + preg_match_all ( "/@(.+?)([\s|:]|$)/is", $content, $matches ); + + $unames = $matches [1]; + + $ns = "'" . implode ( "','", $unames ) . "'"; + + $csql = "username IN($ns)"; + + if ($unames) { + + $query = $db->fetch_all_assoc ( "select userid,username from " . dbprefix . "user_info where $csql" ); + + foreach ( $query as $v ) { + $content = str_replace ( '@' . $v ['username'] . '', '[@' . $v ['username'] . ':' . $v ['userid'] . ']', $content ); + $msg_content = '我在帖å­ä¸­æåˆ°äº†ä½ 
      去看看:' . tsUrl ( 'group', 'topic', array ( + 'id' => $topicid + ) ); + aac ( 'message' )->sendmsg ( $userid, $v ['userid'], $msg_content ); + } + $new ['topic']->update ( 'topic', array ( + 'topicid' => $topicid + ), array ( + 'content' => $content + ) ); + } + } + */ + + // 统计帖å­ç±»åž‹ + if ($typeid) { + $topicTypeNum = $new ['topic']->findCount ( 'topic', array ( + 'typeid' => $typeid + ) ); + + $new ['topic']->update ( 'topic_type', array ( + 'typeid' => $typeid + ), array ( + 'count_topic' => $topicTypeNum + ) ); + } + // å¤„ç†æ ‡ç­¾ + aac ( 'tag' )->addTag ( 'topic', 'topicid', $topicid, $tag ); + + // 统计需è¦å®¡æ ¸çš„å¸–å­ + $count_topic_audit = $new ['topic']->findCount ( 'topic', array ( + 'groupid' => $groupid, + 'isaudit' => '1' + ) ); + + // 统计å°ç»„䏋取孿•°å¹¶æ›´æ–° + $count_topic = $new ['topic']->findCount ( 'topic', array ( + 'groupid' => $groupid + ) ); + + // 统计今天å‘å¸ƒå¸–å­æ•° + $today_start = strtotime ( date ( 'Y-m-d 00:00:00' ) ); + $today_end = strtotime ( date ( 'Y-m-d 23:59:59' ) ); + + $count_topic_today = $new ['topic']->findCount ( 'topic', "`groupid`='$groupid' and `addtime`>'$today_start' and `addtime`<'$today_end'" ); + + $new ['topic']->update ( 'group', array ( + 'groupid' => $groupid + ), array ( + 'count_topic' => $count_topic, + 'count_topic_audit' => $count_topic_audit, + 'count_topic_today' => $count_topic_today, + 'uptime' => time () + ) ); + + // å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac ( 'user' )->doScore ( $TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'] ); + + #用户记录 + aac('pubs')->addLogs('topic','topicid',$topicid,$userid,$title,$content,0); + + + header ( "Location: " . tsUrl('topic', 'show', array ('id' => $topicid))); + break; +} diff --git a/app/topic/action/admin.php b/app/topic/action/admin.php new file mode 100644 index 0000000..3f99995 --- /dev/null +++ b/app/topic/action/admin.php @@ -0,0 +1,9 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'topic',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/topic/action/admin/topic.php b/app/topic/action/admin/topic.php new file mode 100644 index 0000000..520d744 --- /dev/null +++ b/app/topic/action/admin/topic.php @@ -0,0 +1,232 @@ +1, + ); + } + + if($istop==1){ + $where = array( + 'istop'=>1, + ); + } + + + if($topicid){ + $where = array( + 'topicid'=>$topicid, + ); + } + + if($kw){ + $where = "`title` like '%$kw%'"; + } + + $arrTopic = $new['topic']->findAll('topic',$where,'addtime desc',null,$lstart.',10'); + + $topicNum = $new['topic']->findCount('topic',$where); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_list"); + + break; + + /** + * åˆ é™¤å¸–å­ + */ + case "delete": + $topicid = tsIntval($_GET['topicid']); + $strTopic = $new['topic']->getOneTopic($topicid); + + #用户记录 + aac('pubs')->addLogs('topic','topicid',$topicid,$TS_USER['userid'],$strTopic['title'],$strTopic['content'],2); + + $new['topic']->deleteTopic($strTopic); + qiMsg('删除æˆåŠŸ'); + break; + + //帖å­å®¡æ ¸ + case "isaudit": + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['isaudit']==0){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>1, + )); + } + + if($strTopic['isaudit']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>0, + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + + //推è + case "isrecommend": + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['isrecommend']==0){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isrecommend'=>1, + )); + } + + if($strTopic['isrecommend']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isrecommend'=>0, + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //置顶 + case "istop": + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['istop']==0){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'istop'=>1, + )); + } + + if($strTopic['istop']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'istop'=>0, + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + + + //åˆ é™¤çš„å¸–å­ + case "deletetopic": + + $page = tsIntval($_GET['page'],1); + $url = SITE_URL.'index.php?app=topic&ac=admin&mg=topic&ts=deletetopic&page='; + $lstart = $page*10-10; + + $arrTopic = $new['topic']->findAll('topic',array('isdelete'=>'1'),'addtime desc',null,$lstart.',10'); + + $topicNum = $new['topic']->findCount('topic',array( + 'isdelete'=>'1', + )); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_delete"); + + break; + + //ç¼–è¾‘çš„å¸–å­ + case "edittopic": + + $page = tsIntval($_GET['page'],1); + $url = SITE_URL.'index.php?app=topic&ac=admin&mg=topic&ts=edittopic&page='; + $lstart = $page*10-10; + + $arrTopic = $new['topic']->findAll('topic_edit',null,'addtime desc',null,$lstart.',10'); + + $topicNum = $new['topic']->findCount('topic_edit'); + + $pageUrl = pagination($topicNum, 10, $page, $url); + + include template("admin/topic_edit"); + + break; + + //æ‰§è¡Œæ›´æ–°å¸–å­ + case "update": + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic_edit',array( + 'topicid'=>$topicid, + )); + + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'title'=>$strTopic['title'], + 'content'=>$strTopic['content'], + )); + + $new['topic']->update('topic_edit',array( + 'topicid'=>$topicid, + ),array( + 'isupdate'=>1, + )); + + qiMsg('æ›´æ–°æˆåŠŸï¼'); + + break; + + //查看å•独æŸä¸ªä¿®æ”¹çš„å¸–å­ + case "editview": + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic_edit',array( + 'topicid'=>$topicid, + )); + + include template('admin/topic_edit_view'); + break; + +} \ No newline at end of file diff --git a/app/topic/action/ajax.php b/app/topic/action/ajax.php new file mode 100644 index 0000000..64d5840 --- /dev/null +++ b/app/topic/action/ajax.php @@ -0,0 +1,204 @@ +find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['isaudit']==0){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>1, + )); + + echo 0;exit; + + } + + if($strTopic['isaudit']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isaudit'=>0, + )); + + echo 1;exit; + + } + + break; + + //取孿ލè + case "isrecommend": + + $userid = aac('user')->isLogin(); + + $js = tsIntval($_GET['js']); + + $topicid = tsIntval($_POST['topicid']); + + if($TS_USER['isadmin']==1 && $topicid){ + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic['isrecommend']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isrecommend'=>0, + )); + + getJson('å–æ¶ˆæŽ¨èæˆåŠŸï¼',$js); + + } + + if($strTopic['isrecommend']==0){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isrecommend'=>1, + )); + + getJson('æŽ¨èæˆåŠŸï¼',$js); + + } + + + }else{ + + getJson('éžæ³•æ“作',$js); + + } + + break; + + + /** + * 帖å­åŠ æ ‡æ³¨ + */ + case "book": + + $userid = aac('user')->isLogin(); + $topicid = tsIntval($_POST['topicid']); + $book = tsTrim($_POST['book']); + + //if($topicid==0 || $book==''){ + if($topicid==0){ + echo 0;exit; + } + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + ),'userid'); + + if($strTopic['userid']!=$userid && $TS_USER['isadmin']==0){ + echo 0;exit; + } + + if($TS_USER['isadmin']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'label'=>$book, + )); + }else{ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + 'userid'=>$userid, + ),array( + 'label'=>$book, + )); + } + + echo 1;exit; + + break; + + + //ç½®é¡¶å¸–å­ + case "topic_istop": + + $userid = aac('user')->isLogin(); + + $topicid = tsIntval($_GET['topicid']); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + $istop = $strTopic['istop']; + + $istop == 0 ? $istop = 1 : $istop = 0; + + $strGroup = $new['topic']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + if($userid==$strGroup['userid'] || $TS_USER['isadmin']==1){ + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'istop'=>$istop, + )); + + + tsNotice("æ“作æˆåŠŸï¼"); + + + }else{ + tsNotice("éžæ³•æ“作ï¼"); + } + + break; + + + + + + //ç²¾åŽå¸–å­ + case "isposts": + + $userid = aac('user')->isLogin(); + + $topicid = tsIntval($_GET['topicid']); + + if($userid == 0 || $topicid == 0) tsNotice("éžæ³•æ“作"); + + $strTopic = $db->once_fetch_assoc("select userid,groupid,title,isposts from ".dbprefix."topic where topicid='$topicid'"); + + $strGroup = $db->once_fetch_assoc("select userid from ".dbprefix."group where groupid='".$strTopic['groupid']."'"); + + if($userid == $strGroup['userid'] || tsIntval($TS_USER['isadmin']) == 1){ + if($strTopic['isposts']==0){ + $db->query("update ".dbprefix."topic set `isposts`='1' where `topicid`='$topicid'"); + + //msg start + $msg_userid = '0'; + $msg_touserid = $strTopic['userid']; + $msg_content = 'æ­å–œï¼Œä½ çš„帖å­ï¼šã€Š'.$strTopic['title'].'》被评为精åŽå¸–啦^_^ '; + $msg_tourl = tsUrl('topic','show',array('id'=>$topicid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + //msg end + + }else{ + $db->query("update ".dbprefix."topic set `isposts`='0' where `topicid`='$topicid'"); + } + + tsNotice("æ“作æˆåŠŸï¼"); + }else{ + tsNotice("éžæ³•æ“作ï¼"); + } + + break; + +} \ No newline at end of file diff --git a/app/topic/action/api.php b/app/topic/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/topic/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +Topic Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/topic/action/delete.php b/app/topic/action/delete.php new file mode 100644 index 0000000..a2741a9 --- /dev/null +++ b/app/topic/action/delete.php @@ -0,0 +1,42 @@ +isLogin(); + +//普通用户ä¸å…许删除内容 +if($TS_SITE['isallowdelete'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户删除内容,请è”系管ç†å‘˜åˆ é™¤ï¼'); + +$topicid = tsIntval($_GET['topicid']); +$strTopic = $new['topic']->getOneTopic($topicid); +$strGroup = aac('group')->getOneGroup($strTopic['groupid']); +$strGroupUser = $new['topic']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$groupid, +)); + +//系统管ç†å‘˜åˆ é™¤ +if($TS_USER['isadmin'] == '1'){ + + #用户记录 + aac('pubs')->addLogs('topic','topicid',$topicid,$userid,$strTopic['title'],$strTopic['content'],2); + + $new['topic']->deleteTopic($strTopic); + tsNotice('帖å­åˆ é™¤æˆåŠŸï¼','点击返回å°ç»„首页',tsUrl('group')); +} + +//其他人员删除 +if($userid == $strTopic['userid'] || $userid == $strGroup['userid'] || $strGroupUser['isadmin']=='1'){ + + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'isdelete'=>1, + )); + + //处ç†ç§¯åˆ† + aac('user')->doScore($TS_URL['app'],$TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'],$TS_URL['ts'],$strTopic['userid']); + + tsNotice('你的删除帖å­ç”³è¯·å·²ç»æäº¤ï¼'); + +} \ No newline at end of file diff --git a/app/topic/action/edit.php b/app/topic/action/edit.php new file mode 100644 index 0000000..bdc557d --- /dev/null +++ b/app/topic/action/edit.php @@ -0,0 +1,164 @@ +isLogin(); + +//普通ä¸ç”¨ä¸å…许编辑内容 +if($TS_SITE['isallowedit'] && $TS_USER ['isadmin'] == 0) tsNotice('系统ä¸å…许用户编辑内容,请è”系管ç†å‘˜ç¼–辑ï¼'); + +switch($ts){ + + //ç¼–è¾‘å¸–å­ + case "": + $topicid = tsIntval($_GET['topicid']); + + if($topicid == 0){ + header("Location: ".SITE_URL); + exit; + } + + $topicNum = $new['topic']->findCount('topic',array( + 'topicid'=>$topicid, + )); + + if($topicNum==0){ + header("Location: ".SITE_URL); + exit; + } + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + $strTopic['title'] = tsTitle($strTopic['title']); + //$strTopic['content'] = tsDecode($strTopic['content']); //为有效防止xss攻击,如果å‰ç«¯é€šè¿‡textarea标签加载的编辑器,请注释掉本行;如果编辑器有其他的加载方å¼ï¼Œè¯·è§†æƒ…况解除本行注释。 + + $strGroup = $new['topic']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + $strGroupUser = $new['topic']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$strTopic['groupid'], + )); + + //print_r($strGroupUser);exit; + + if($strTopic['userid'] == $userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1 || $strGroupUser['isadmin']==1){ + $arrGroupType = $new['topic']->findAll('topic_type',array( + 'groupid'=>$strGroup['groupid'], + )); + + //找出TAG + $arrTags = aac('tag')->getObjTagByObjid('topic', 'topicid', $topicid); + foreach($arrTags as $key=>$item){ + $arrTag[] = $item['tagname']; + } + $strTopic['tag'] = arr2str($arrTag); + + $title = '编辑帖å­'; + include template("edit"); + + }else{ + + header("Location: ".SITE_URL); + exit; + + } + break; + + //ç¼–è¾‘å¸–å­æ‰§è¡Œ + case "do": + + + $authcode = strtolower ( $_POST ['authcode'] ); + + if ($TS_SITE['isauthcode']) { + if ($authcode != $_SESSION ['verify']) { + tsNotice ( "验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼" ); + } + } + + $topicid = tsIntval($_POST['topicid']); + $typeid = tsIntval($_POST['typeid']); + + $title = tsTrim($_POST['title']); + + //echo br2nl($_POST['content']);exit; + + $content = tsClean($_POST['content']); + $content2 = emptyText($_POST['content']); + + $score = tsIntval($_POST ['score']);#积分 + + $iscomment = tsIntval($_POST['iscomment']); + $iscommentshow = tsIntval($_POST['iscommentshow']); + + if($topicid == '' || $title=='' || $content2=='' || $content=='') tsNotice("都ä¸èƒ½ä¸ºç©ºçš„哦!"); + + if($score<0){ + tsNotice ( '积分填写有误ï¼' ); + } + + if($TS_USER['isadmin']==0){ + + //过滤内容开始 + $title = antiWord($title); + $content = antiWord($content); + //è¿‡æ»¤å†…å®¹ç»“æŸ + + } + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + $strGroup = $new['topic']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + $strGroupUser = $new['topic']->find('group_user',array( + 'userid'=>$userid, + 'groupid'=>$strTopic['groupid'], + )); + + if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1 || $strGroupUser['isadmin']==1){ + + $gaiyao = cututf8(t(tsDecode($content)),0,100); + + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'typeid' => $typeid, + 'title'=>$title, + 'content'=>$content, + 'gaiyao'=>$gaiyao, + 'score'=>$score, + 'iscomment' => $iscomment, + 'iscommentshow' => $iscommentshow, + )); + + + + //å¤„ç†æ ‡ç­¾ + $tag = tsTrim($_POST['tag']); + if($tag){ + aac('tag')->delIndextag('topic','topicid',$topicid); + aac('tag') -> addTag('topic', 'topicid', $topicid, $tag); + } + + + #用户记录 + aac('pubs')->addLogs('topic','topicid',$topicid,$userid,$title,$content,1); + + + header("Location: ".tsUrl('topic','show',array('id'=>$topicid))); + + }else{ + header("Location: ".SITE_URL); + exit; + } + break; + +} \ No newline at end of file diff --git a/app/topic/action/group.php b/app/topic/action/group.php new file mode 100644 index 0000000..fe76a9f --- /dev/null +++ b/app/topic/action/group.php @@ -0,0 +1,20 @@ +isLogin (); + +$arrGroupUser = $new['topic']->findAll('group_user',array( + 'userid'=>$userid, +)); + +if($arrGroupUser==''){ + tsNotice('请加入å°ç»„åŽå†å‘帖ï¼','点击去加入å°ç»„',tsUrl('group')); +} + +foreach($arrGroupUser as $key=>$item){ + $arrGroup[$key] = aac('group')->getOneGroup($item['groupid']); +} + +$title = '选择å‘帖å°ç»„'; + +include template('group'); \ No newline at end of file diff --git a/app/topic/action/index.php b/app/topic/action/index.php new file mode 100644 index 0000000..9a2aea5 --- /dev/null +++ b/app/topic/action/index.php @@ -0,0 +1,41 @@ + '') ); +$lstart = $page * 20 - 20; + +$arrTopic = $new['topic']->findAll('topic',array( + 'isaudit'=>0, +),'istop desc,uptime desc','topicid,ptable,pkey,pid,pjson,userid,groupid,title,gaiyao,score,label,count_comment,count_view,iscommentshow,istop,uptime',$lstart.',20'); + +foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title']=tsTitle($item['title']); + $arrTopic[$key]['gaiyao']=tsTitle($item['gaiyao']); + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = aac('group')->getOneGroup($item['groupid']); + #应用扩展 + if($item['pjson']){ + $arrTopic[$key]['pjson'] = json_decode($item['pjson'],true); + } +} + +$topicNum = $new ['topic']->findCount ( 'topic', array ( + 'isaudit' => '0' +) ); + +$pageUrl = pagination ( $topicNum, 20, $page, $url ); + +#推èè¯é¢˜ +$arrRecommendTopic = $new['topic']->findAll('topic',array( + 'isrecommend'=>1, + 'isaudit'=>0, +),'topicid desc','topicid,title',10); + +#热门è¯é¢˜ +$arrHotTopic = $new['topic']->findAll('topic',array( + 'isaudit'=>0, +),'count_comment desc','topicid,title',10); + +include template('index'); \ No newline at end of file diff --git a/app/topic/action/move.php b/app/topic/action/move.php new file mode 100644 index 0000000..b4a14b2 --- /dev/null +++ b/app/topic/action/move.php @@ -0,0 +1,98 @@ +isLogin(); + +switch($ts){ + + //ç§»åŠ¨å¸–å­ + case "": + + $topicid = tsIntval($_GET['topicid']); + + if($topicid == 0) tsNotice("éžæ³•æ“作ï¼"); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopic){ + + $strGroup = $new['topic']->find('group',array( + 'groupid'=>$strTopic['groupid'], + )); + + if($strTopic['userid']==$userid || $strGroup['userid']==$userid || $TS_USER['isadmin']==1){ + + + if($TS_USER['isadmin']==1){ + #如果是系统管ç†å‘˜ï¼Œå°±è°ƒå‡ºæ‰€æœ‰çš„群组 + $arrGroup = $new['topic']->findAll('group',array( + 'isaudit'=>0 + ),'groupid desc','groupid,groupname'); + + }else{ + $arrGroups = $new['topic']->findAll('group_user',array( + 'userid'=>$strTopic['userid'], + )); + foreach($arrGroups as $item){ + if($item['groupid'] != $strGroup['groupid']){ + + $arrGroup[] = $new['topic']->find('group',array( + 'groupid'=>$item['groupid'], + )); + + } + + } + } + + + + $title = '移动帖å­'; + include template("move"); + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + + }else{ + + tsNotice('éžæ³•æ“作ï¼'); + + } + + break; + + //执行移动 + case "do": + + $groupid = tsIntval($_POST['groupid']); + $topicid = tsIntval($_POST['topicid']); + + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$topicid, + )); + + if($strTopicid['userid']==$userid || $TS_USER['isadmin']==1){ + + $new['topic']->update('topic',array( + 'topicid'=>$topicid, + ),array( + 'groupid'=>$groupid, + 'typeid'=>'0', + )); + + + header("Location: ".tsUrl('topic','show',array('id'=>$topicid))); + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + + break; + +} \ No newline at end of file diff --git a/app/topic/action/my.php b/app/topic/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/topic/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/topic/action/my/index.php b/app/topic/action/my/index.php new file mode 100644 index 0000000..4284208 --- /dev/null +++ b/app/topic/action/my/index.php @@ -0,0 +1,20 @@ +'index','page' => '' ) ); +$lstart = $page * 20 - 20; + +$arrTopic = $new['topic']->findAll('topic',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',20'); + +$topicNum = $new ['topic']->findCount ( 'topic', array ( + 'userid' => $strUser['userid'], +) ); + +$pageUrl = pagination ( $topicNum, 20, $page, $url ); + +$title = '我的帖å­'; +include template('my/index'); \ No newline at end of file diff --git a/app/topic/action/score.php b/app/topic/action/score.php new file mode 100644 index 0000000..b173ab5 --- /dev/null +++ b/app/topic/action/score.php @@ -0,0 +1,63 @@ +find('topic',array( + 'topicid'=>$topicid, + ),'topicid,userid,score'); + + if($strTopic==''){ + getJson('帖å­ä¸å­˜åœ¨ï¼',1,0); + } + + if($strTopic['userid']==$userid){ + getJson('自己无需支付阅读自己的帖å­ï¼',1,0); + } + + $isTopicUser = $new['topic']->findCount('topic_user',array( + 'topicid'=>$topicid, + 'userid'=>$userid, + )); + + if($isTopicUser>0){ + getJson('ä½ å·²ç»æ”¯ä»˜è¿‡ï¼Œæ— éœ€å†æ¬¡æ”¯ä»˜ï¼',1,0); + } + + $strUserScore = $new['topic']->find('user_info',array( + 'userid'=>$userid, + ),'userid,count_score'); + + if($strUserScore['count_score']<$strTopic['score']){ + getJson('积分ä¸è¶³ï¼',1,0); + } + + aac('user')->addScore($strTopic['userid'],'取孿”¶å…¥'.$strTopic['topicid'],$strTopic['score'],1); + aac('user')->delScore($userid,'查看帖å­'.$strTopic['topicid'],$strTopic['score']); + + $new['topic']->create('topic_user',array( + 'topicid'=>$topicid, + 'userid'=>$userid, + 'addtime'=>time(), + )); + + + getJson('积分支付æˆåŠŸï¼',1,2,tsUrl('topic','show',array('id'=>$topicid))); + + break; + +} \ No newline at end of file diff --git a/app/topic/action/show.php b/app/topic/action/show.php new file mode 100644 index 0000000..355d886 --- /dev/null +++ b/app/topic/action/show.php @@ -0,0 +1,182 @@ +find('topic',array( + 'topicid'=>$topicid, +)); + + +if($strTopic==''){ + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; +} + +#永久性跳转到其他项目 +if($strTopic['ptable'] && $strTopic['pid']){ + Header("HTTP/1.1 301 Moved Permanently"); + header('Location: '.getProjectUrl($strTopic['ptable'],$strTopic['pid'])); + exit(); +} + +//帖å­å®¡æ ¸ +if($strTopic['isaudit']==1 && $GLOBALS['TS_USER']['isadmin']==0){ + tsNotice('内容审核中......'); +} + + +//å°ç»„ä¿¡æ¯ +if($strTopic['groupid']){ + $strGroup = aac('group')->getOneGroup($strTopic['groupid']); + // 判断会员是å¦åŠ å…¥è¯¥å°ç»„ + $strGroupUser = array(); + if(tsIntval($TS_USER['userid'])){ + $strGroupUser = $new['topic']->find('group_user',array( + 'userid'=>tsIntval($TS_USER['userid']), + 'groupid'=>$strTopic['groupid'], + )); + } +} + +// æµè§ˆæ–¹å¼ +if ($strGroup['isopen'] == '1' && $strGroupUser == '') { + $title = $strTopic['title']; + include template("topic_isopen");exit; +}elseif($strGroup['isopen'] == '1' && $strGroupUser && $TS_APP['ispayjoin']==1 && $strGroupUser['endtime']!='0000-00-00' && $strGroupUser['endtime']!='1970-01-01' && $strGroupUser['endtime'] $topicid)); + +$strTopic['content'] = tsDecode($strTopic['content'],$tp); + +//判断是å¦è¯„è®ºåŽæ˜¾ç¤ºå¸–å­å†…容 +$isComment = $new['topic']->findCount('comment', array( + 'ptable'=>'topic', + 'pkey'=>'topicid', + 'pid' => $strTopic['topicid'], + 'userid' => tsIntval($TS_USER['userid']), +)); + +if($strTopic['iscommentshow']==1 && $isComment==0 && $strTopic['userid']!=tsIntval($TS_USER['userid'])){ + $strTopic['content'] = '
      你需è¦å›žå¤åŽæ‰å¯ä»¥æµè§ˆå¸–å­å†…容ï¼
      '; +} + + +//ç¼–è¾‘çš„æ•°æ® +if($strTopic['userid']==$TS_USER['userid']){ + + if($strTopic['isdelete']=='1'){ + tsNotice('你的帖å­åˆ é™¤ä¸­...'); + } + +} + +// 帖å­åˆ†ç±» +if ($strTopic['typeid'] != '0'){ + $strTopic['type'] = $new['topic']->find('topic_type', array( + 'typeid' => $strTopic['typeid'], + )); +} + + +$strTopic['content'] = @preg_replace("/\[@(.*)\:(.*)]/U","'$2'))." ' rel=\"face\" uid=\"$2\"'>@$1",$strTopic['content']); + + + +//处ç†é€šè¿‡å°ç¨‹åºæˆ–者客户端å‘的图片 +$strTopic['photos'] = $new['topic']->getTopicPhoto($topicid); + + + +#应用扩展 +$strProject = $new['topic']->getProject($strTopic['ptable'],$strTopic['pkey'],$strTopic['pid']); +$strTopic['video'] = $strProject['video']; + + + +// 取孿 ‡ç­¾ +$strTopic['tags'] = aac('tag')->getObjTagByObjid('topic', 'topicid', $topicid); +$strTopic['user'] = aac('user')->getSimpleUser($strTopic['userid']); + +//æŠŠæ ‡ç­¾ä½œä¸ºå…³é”®è¯ +if($strTopic['tags']){ + foreach($strTopic['tags'] as $key=>$item){ + $arrTag[] = $item['tagname']; + } + $sitekey = arr2str($arrTag); +}else{ + $sitekey = $strTopic['title']; +} +//标题 +$title = $strTopic['title']; + + +// 评论列表开始 +$page = tsIntval($_GET['page'],1); +$url = tsUrl('topic', 'show', array('id' => $topicid, 'page' => '')); +$lstart = $page * 15-15; +$arrComment = aac('comment')->getCommentList('topic','topicid',$strTopic['topicid'],$page,$lstart,$strTopic['userid']); +$commentNum = aac('comment')->getCommentNum('topic','topicid',$strTopic['topicid']); +$pageUrl = pagination($commentNum, 15, $page, $url); +// è¯„è®ºåˆ—è¡¨ç»“æŸ + + +//7å¤©å†…çš„çƒ­é—¨å¸–å­ +$arrHotTopic = $new['topic']->getHotTopic(7); + +//推èå¸–å­ +$arrRecommendTopic = $new['topic']->getRecommendTopic(); + + +//æœ¬ç»„çƒ­é—¨å¸–å­ +$arrGroupHotTopic = $new['topic']->findAll('topic',array( + 'groupid'=>$strGroup['groupid'], + 'isaudit'=>0, +),'count_view desc','topicid,title',10); + +// æœ€æ–°å¸–å­ +$newTopic = $new['topic']->findAll('topic',array( + 'isaudit'=>'0', +),'addtime desc','topicid,title',10); + + + +//判断用户å¯é˜…读帖å­ï¼š0å¯è¯»1ä¸å¯è¯» +$isread = 0; +if($strTopic['score']>0) $isread = 1; +if($TS_USER['userid'] && $strTopic['userid']==$TS_USER['userid']) $isread=0; +if($TS_USER['userid'] && $strTopic['userid']!=$TS_USER['userid'] && $strTopic['score']>0){ + $isTopicUser = $new['topic']->findCount('topic_user',array( + 'topicid'=>$topicid, + 'userid'=>$TS_USER['userid'], + )); + if($isTopicUser>0) $isread=0; +} +if($TS_USER['isadmin']==1) $isread=0; + + + + +$sitedesc = cututf8(t($strTopic['content']),0,100); + +$content = $strTopic['content']; +#é’©å­ +doAction('topic',$content); + +include template('show'); + +// 增加æµè§ˆæ¬¡æ•° + +$new['topic']->update('topic', array( + 'topicid' => $strTopic['topicid'], +), array( + 'count_view' => $strTopic['count_view'] + 1, +)); \ No newline at end of file diff --git a/app/topic/action/tag.php b/app/topic/action/tag.php new file mode 100644 index 0000000..cd5383b --- /dev/null +++ b/app/topic/action/tag.php @@ -0,0 +1,59 @@ +getTagByName($name); + +$strTag['tagname'] = htmlspecialchars($strTag['tagname']); + +$page = tsIntval($_GET['page'],1); + +$url = tsUrl('group','tag',array('id'=>urlencode($name),'page'=>'')); + +$lstart = $page*30-30; + +$tagid = $strTag['tagid']; + +$arrTagId = $new['topic']->findAll('tag_topic_index',array( + 'tagid'=>$tagid, +),null,null,$lstart.',30'); + +foreach($arrTagId as $item){ + $strTopic = $new['topic']->find('topic',array( + 'topicid'=>$item['topicid'], + )); + if($strTopic==''){ + $new['topic']->delete('tag_topic_index',array( + 'topicid'=>$item['topicid'], + 'tagid'=>$item['tagid'], + )); + }else{ + $arrTopic[] = $strTopic; + } +} + + +aac('tag')->countObjTag('topic',$tagid); + +$topicNum = $new['topic']->findCount('tag_topic_index',array( + 'tagid'=>$tagid, +)); + +$pageUrl = pagination($topicNum, 30, $page, $url); + +foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title'] = htmlspecialchars($item['title']); + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = aac('group')->getOneGroup($item['groupid']); +} + +//热门tag +$arrTag = $new['topic']->findAll('tag',"`count_topic`>'0' and `isaudit`=0",'uptime desc',null,30); + +$sitekey = $strTag['tagname']; +$title = $strTag['tagname']; + +include template("tag"); \ No newline at end of file diff --git a/app/topic/action/tags.php b/app/topic/action/tags.php new file mode 100644 index 0000000..ee562f4 --- /dev/null +++ b/app/topic/action/tags.php @@ -0,0 +1,17 @@ +'')); + +$lstart = $page*200-200; + +$arrTag = $new['topic']->findAll('tag',"`count_topic`>'0' and `isaudit`=0",'uptime desc',null,$lstart.',200'); + +$tagNum = $new['topic']->findCount('tag',"`count_topic`>'0' and `isaudit`=0"); + +$pageUrl = pagination($tagNum, 200, $page, $url); + +$title = '标签'; +include template('tags'); \ No newline at end of file diff --git a/app/topic/class.topic.php b/app/topic/class.topic.php new file mode 100644 index 0000000..f840338 --- /dev/null +++ b/app/topic/class.topic.php @@ -0,0 +1,189 @@ +find('topic',array( + 'topicid'=>$topicid, + )); + return $strTopic; + } + + //是å¦å­˜åœ¨å¸–å­ + public function isTopic($topicid){ + $isTopic = $this->findCount('topic',array( + 'topicid'=>$topicid, + )); + if($isTopic > 0){ + return true; + }else{ + return false; + } + } + + /** + * åˆ é™¤å¸–å­ + * + * @param array $strTopic + * @return void + */ + public function deleteTopic($strTopic=array()){ + + $this->delete('topic',array('topicid'=>$strTopic['topicid'])); + $this->delete('tag_topic_index',array('topicid'=>$strTopic['topicid'])); + + + #删除评论ts_comment + aac('comment')->delComment('topic','topicid',$strTopic['topicid']); + + #删除点赞ts_love + aac('pubs')->delLove('topic','topicid',$strTopic['topicid']); + + + #删除图片ts_topic_photo + $arrPhoto = $this->findAll('topic_photo',array( + 'topicid'=>$strTopic['topicid'], + )); + + if($arrPhoto){ + foreach($arrPhoto as $key=>$item){ + unlink('uploadfile/group/topic/photo/'.$item['photo']); + tsDimg($item['photo'],'group/topic/photo','320','320',$item['path'],1); + tsDimg($item['photo'],'group/topic/photo','640','',$item['path']); + } + $this->delete('topic_photo',array('topicid'=>$strTopic['topicid'])); + } + + $this->countTopic($strTopic['groupid']); + + return true; + + } + + /* + * 统计å°ç»„里的è¯é¢˜å¹¶æ›´æ–°åˆ°å°ç»„ + */ + public function countTopic($groupid){ + $count_topic = $this->findCount('topic',array( + 'groupid'=>$groupid, + )); + + $this->update('group',array( + 'groupid'=>$groupid, + ),array( + 'count_topic'=>$count_topic, + )); + + } + + //热门帖å­,1天,7天,30天 + public function getHotTopic($day){ + $startTime = time()-($day*3600*24); + + $endTime = time(); + + $arr = "`addtime`>'$startTime' and `count_view`>'0' and `addtime`<'$endTime' and `isaudit`='0'"; + + $arrTopic = $this->findAll('topic',$arr,'addtime desc','topicid,title,count_view,count_comment',10); + foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title']=tsTitle($item['title']); + } + + return $arrTopic; + + } + + //èŽ·å–æŽ¨è的帖å­(全部推èå’Œå°ç»„推è) + public function getRecommendTopic($groupid=null,$num=20){ + if($groupid){ + $arr = array( + 'groupid'=>$groupid, + 'isrecommend'=>1, + 'isaudit'=>0, + ); + }else{ + $arr = array( + 'isrecommend'=>1, + 'isaudit'=>0, + ); + } + $arrTopic = $this->findAll('topic',$arr,'addtime desc','topicid,title',$num); + + foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title']=tsTitle($item['title']); + } + + return $arrTopic; + + } + + + /** + * 获å–帖å­å›¾ç‰‡ï¼Œå¤„ç†é€šè¿‡å°ç¨‹åºæˆ–者客户端å‘的图片 + */ + public function getTopicPhoto($topicid,$num=null){ + $arrPhotos = $this->findAll('topic_photo',array( + 'topicid'=>$topicid, + ),'orderid asc',null,$num); + foreach($arrPhotos as $key=>$item){ + if($num){ + $arrPhoto[$key] = tsXimg($item['photo'],'group/topic/photo','320','320',$item['path'],1); + }else{ + $arrPhoto[$key] = tsXimg($item['photo'],'group/topic/photo','640','',$item['path']); + } + } + return $arrPhoto; + } + + + public function getProject($ptable,$pkey,$pid){ + if($ptable && $pkey && $pid){ + + $strProject = $this->find($ptable,array( + $pkey=>$pid, + )); + + if($ptable=='article'){ + ########文章######## + $strProject['title'] = tsTitle($strProject['title']); + $strProject['content'] = tsDecode($strProject['content']); + #å¤„ç†æ­£æ–‡æ ·å¼å’Œå›¾ç‰‡ + $strProject['content'] = mobileHtml($strProject['content']); + if($strProject['photo']){ + $strProject['photo'] = tsXimg($strProject['photo'],'article',640,360,$strProject['path'],'1'); + } + $topicInfo['article'] = $strProject; + + }elseif($ptable=='video'){ + ########视频######## + $topicInfo['video'] = SITE_URL.'uploadfile/video/'.$strProject['video']; + + } + + return $topicInfo; + + } + } + + +} \ No newline at end of file diff --git a/app/topic/config.php b/app/topic/config.php new file mode 100644 index 0000000..50e96f7 --- /dev/null +++ b/app/topic/config.php @@ -0,0 +1,6 @@ + + + + +
      +
      + + +
      +
      +
      + +
      + +
      + + +
      + + {if $arrGroupType} +
      + + + + +
      + {/if} + + +
      + +
      + +
      +
      + +
      + + +
      + +
      + + + å…许 ä¸å…许 + +
      + + +
      + + + ä¸éœ€è¦ éœ€è¦ + +
      + + +
      + + 积分 +
      + + + + {if $TS_SITE['isniming']==1} +
      + + å¦ + 是 (匿åå‘布åŽç”¨æˆ·å°†æ— æ³•对内容进行管ç†) +
      + {/if} + + + + + {if $TS_SITE['isauthcode']} +
      + + +
      + + 点击刷新验è¯ç  + +
      + + +
      + {/if} + + + + {if $TS_SITE['is_vaptcha']} +
      + + +
      + +
      +
      +
      + + + + Vaptchaå¯åЍ䏭... +
      +
      +
      + + + +
      + +
      + +
      + {/if} + + + + + + + + + + + 返回å°ç»„ + +

      + +
      + + +
      +
      +
      + + + +
      +
      + + + + + + + + +{php doAction('tseditor')} + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/admin/menu.html b/app/topic/html/admin/menu.html new file mode 100644 index 0000000..1cfdb36 --- /dev/null +++ b/app/topic/html/admin/menu.html @@ -0,0 +1,18 @@ + + + +
      \ No newline at end of file diff --git a/app/topic/html/admin/options.html b/app/topic/html/admin/options.html new file mode 100644 index 0000000..1f27c46 --- /dev/null +++ b/app/topic/html/admin/options.html @@ -0,0 +1,29 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + +
      + + + + + + + + + + + + + + + +
      APPå称:
      APP介ç»ï¼š
      APP关键è¯ï¼š
      会员å‘布:å…许 ä¸å…许
      是å¦å®¡æ ¸ï¼šä¸å®¡æ ¸ 审核
      +
      +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/admin/permissions.html b/app/topic/html/admin/permissions.html new file mode 100644 index 0000000..e245ed7 --- /dev/null +++ b/app/topic/html/admin/permissions.html @@ -0,0 +1,130 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + + + +
      + {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
      + + +
      + + +
      å‰å°æƒé™
      + + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + + + + + + + + + + + {/if} + + + + +
      查看帖å­ï¼š + +
      å‘布帖å­ï¼š + +
      修改帖å­ï¼š + +
      删除帖å­ï¼š + +
      + + + + {if $ugid==1 || $ugid==2} +
      åŽå°æƒé™
      + + + + + + + + + + + + +
      帖å­é…置: + +
      æƒé™é…置: + +
      + {/if} + + + +
      APIæƒé™
      + + + + + + + + + + + +
      查看帖å­ï¼š + +
      + + + + + + +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/admin/topic_delete.html b/app/topic/html/admin/topic_delete.html new file mode 100644 index 0000000..e79e878 --- /dev/null +++ b/app/topic/html/admin/topic_delete.html @@ -0,0 +1,37 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + +
      {$pageUrl}
      + + + + + + + + + + +{loop $arrTopic $key $item} + + + + + + +{/loop} + +
      IDUserID标题时间æ“作
      {$item['topicid']}{$item['userid']} + + {$item['title']}{php echo date('Y-m-d H:i:s',$item['addtime'])} + +删除 + +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/admin/topic_edit.html b/app/topic/html/admin/topic_edit.html new file mode 100644 index 0000000..efa4ff4 --- /dev/null +++ b/app/topic/html/admin/topic_edit.html @@ -0,0 +1,45 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + +
      {$pageUrl}
      + + + + + + + + + + + + + + + + + + + + + {loop $arrTopic $key $item} + + + {/loop} + + + + + + + +
      IDæ ‡é¢˜æ—¶é—´çŠ¶æ€æ“作
      {$item['topicid']}{$item['title']}{$item['addtime']}{if $item['isupdate']==1}已更新{else}未更新{/if} + 更新 +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/admin/topic_edit_view.html b/app/topic/html/admin/topic_edit_view.html new file mode 100644 index 0000000..56c9485 --- /dev/null +++ b/app/topic/html/admin/topic_edit_view.html @@ -0,0 +1,18 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + + + +
      +

      {$strTopic['title']}

      +
      {$strTopic['content']}
      +
      +
      {$strTopic['addtime']}
      +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/admin/topic_list.html b/app/topic/html/admin/topic_list.html new file mode 100644 index 0000000..bc9f5aa --- /dev/null +++ b/app/topic/html/admin/topic_list.html @@ -0,0 +1,119 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + +
      {$pageUrl}
      + + + +
      + + +
      + + + + + + + + + + + + + 全部 + 推è + 置顶 + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + +{loop $arrTopic $key $item} + + + + + + + + + + + +{/loop} + + + +
      帖å­ID用户ID圈å­ID标题统计时间æ“作
      {$item['topicid']}{$item['userid']}{$item['groupid']}{tsTitle($item['title'])} + æµè§ˆï¼š{$item['count_view']}
      + 评论:{$item['count_comment']} +
      {php echo date('Y-m-d H:i:s',$item['addtime'])} + + + + + {if $item['isrecommend']==0} + 推è + {else} + å–æ¶ˆæŽ¨è + {/if} + + + | + + +{if $item['isaudit']==0} +已审核 +{else} +未审核 +{/if} + + + | + + + + + {if $item['istop']==0} + 置顶 + {else} + å–æ¶ˆç½®é¡¶ + {/if} + + + | 移动 + | 删除 + +
      + +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/topic/html/edit.html b/app/topic/html/edit.html new file mode 100644 index 0000000..5101566 --- /dev/null +++ b/app/topic/html/edit.html @@ -0,0 +1,119 @@ +{php include pubTemplate("header")} +
      + + + + + +
      +
      + + +
      +
      +
      + + + +
      + + +
      + + +
      + +{if $arrGroupType} +
      + + + + +
      +{/if} + + +
      + + +
      + +
      + +
      + +
      + + +
      + +
      + + +å…许 +ä¸å…许 + +
      + + +
      + + +ä¸éœ€è¦ +éœ€è¦ + +
      + +
      + + 积分 +
      + +{if $TS_SITE['isauthcode']} +
      + + + + 点击刷新验è¯ç  + +
      +{/if} + + + + + + + 返回 +

      + +
      + + + +
      +
      +
      + + +
      +
      + + + +
      +{php doAction('tseditor')} +{php include pubTemplate("footer")} diff --git a/app/topic/html/group.html b/app/topic/html/group.html new file mode 100644 index 0000000..0951b01 --- /dev/null +++ b/app/topic/html/group.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header")} +
      + + + +
      +
      + +

      选择å‘帖å°ç»„

      +
      + +
      + + {loop $arrGroup $key $item} +
      + +
      {$item['groupname']}
      +
      + {/loop} + +
      + + + +
      +
      + + + + + + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/index.html b/app/topic/html/index.html new file mode 100644 index 0000000..a01fd77 --- /dev/null +++ b/app/topic/html/index.html @@ -0,0 +1,151 @@ +{php include pubTemplate("header")} + +
      + + + + + +
      +
      + +
      +
      最新è¯é¢˜
      +
      + + {if $arrTopic} + +
      +
        + {loop $arrTopic $key $item} +
      • +
        {$item['user']['username']}
        + +
        +
        + + {if $item['label']}{tsTitle($item['label'])}{/if} + + {$item['title']} + + {if $item['istop']=='1'} + [置顶] + {/if} + +
        + + {if $item['group']['isopen']==0 && $item['score']==0 && $item['iscommentshow']==0} +
        + {$item['gaiyao']} +
        + + + {if $item['ptable']=='' && $item['pjson']} +
        + {loop $item['pjson'] $pkey $pitem} + + {/loop} +
        + {/if} + + + {if $item['ptable']=='video' && $item['pjson']['siteid']==0} +
        + {if $item['pjson']['photo']} + + {else} + + {/if} +
        + {/if} + + {/if} + + +
        +
        + {$item['user']['username']} + {php echo getTime($item['uptime'],time())} + å‘表于 + [{$item['group']['groupname']}] +
        +
        +
        {$item['count_comment']}
        +
        {$item['count_view']}
        +
        +
        + + + +
        + +
        +
      • + {/loop} +
      +
      + + +
      {$pageUrl}
      + + + {else} + +
      暂无è¯é¢˜
      + + {/if} + +
      + +
      + +
      +
      + + + +
      +
      推èè¯é¢˜
      +
      + +
      +
      + + +
      +
      热门è¯é¢˜
      +
      + +
      +
      + + + + {php doAction('gobad','300')} + + +
      +
      + + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/move.html b/app/topic/html/move.html new file mode 100644 index 0000000..c8bc6d7 --- /dev/null +++ b/app/topic/html/move.html @@ -0,0 +1,52 @@ +{php include pubTemplate("header")} + +
      + + +
      +
      +
      + +
      +
      +

      移动帖å­ï¼š{tsTitle($strTopic['title'])}

      +
      + + {if $arrGroup} +
      + +
      + + +
      + + + + + + + + 返回 +
      + {else} +
      + 没有å¯ä»¥ç§»åŠ¨çš„å°ç»„ï¼ è¿”å›ž +
      + {/if} + +
      +
      + +
      +
      +
      + + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/my/index.html b/app/topic/html/my/index.html new file mode 100644 index 0000000..546bbfd --- /dev/null +++ b/app/topic/html/my/index.html @@ -0,0 +1,62 @@ +{php include pubTemplate("header")} +
      + + + +
      + + +
      + +
      + + {php include pubTemplate("my")} + +
      + +
      +
      + + + +
      +
      我å‘布的帖å­
      +
      + + + + + + + + + + + {loop $arrTopic $key $item} + + + + {/loop} + +
      å‘布时间标题æµè§ˆ/评论æ“作
      {php echo date('Y-m-d',$item['addtime'])}{php echo tsTitle($item['title'])}{$item['count_view']}/{$item['count_comment']}修改
      + + + + +
      +
      + + + + + + + +
      +
      + + + + +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/show.html b/app/topic/html/show.html new file mode 100644 index 0000000..9fba7da --- /dev/null +++ b/app/topic/html/show.html @@ -0,0 +1,289 @@ +{php include pubTemplate("header")} + +
      + + + + +
      + +
      + + + +
      +
      + + +

      {if $strTopic['label']}{tsTitle($strTopic['label'])}{/if}{if $strTopic['typeid'] !='0'}[{$strTopic['type']['typename']}]{/if}{$strTopic['title']}

      + + +
      + + +
      + + +
      + + {$strTopic['user']['username']} + +
      +
      + +
      {php echo date('Y-m-d H:i:s',$strTopic['addtime'])}
      +
      + + +
      + + + +
      + +
      {$strTopic['count_comment']}
      +
      {$strTopic['count_view']}
      + +
      +
      + + + + + +
      + {loop $strTopic[tags] $key $item} + {$item['tagname']} + {/loop} +
      + + + {if $page == '1'} +
      + + + {if $isread==1} +
      查看帖å­éœ€è¦æ”¯ä»˜ {$strTopic['score']}积分 支付
      + {else} + + +
      + {$strTopic['content']} + + + {if $strTopic['photos']} + {loop $strTopic['photos'] $key $item} +

      {$strTopic['title']}

      + {/loop} + {/if} + + + + {if $strTopic['video']} +

      + +

      + {/if} + + + {$tpUrl} +
      + + + + {/if} +
      + {/if} + + + + +
      {php doAction('topic_footer')}
      + +
      {php doAction('gobad','468')}
      + + + + {if $TS_USER['userid'] == $strTopic['userid'] || $TS_USER['userid']==$strGroup['userid'] || $strGroupUser['isadmin']=='1' || $TS_USER['isadmin']=='1'} + + {/if} + + +
      +
      + + + +
      +
      评论{if $strTopic['count_comment']} ({$strTopic['count_comment']}){/if}
      +
      + + + + + + {php include pubTemplate("comment")} + + + + + +
      + + {if $strTopic[iscomment] == 1} +
      æ­¤å†…å®¹æš‚ä¸æŽ¥å—评论ï¼
      + {else} + + + + {if tsIntval($TS_USER[userid])==0} + + {else} + +
      +
      + +
      +
      +
      + {if $TS_SITE['isauthcode']} + + 点击刷新验è¯ç  + {/if} +
      +
      +
      是å¦å…¬å¼€ï¼šå…¬å¼€ ä¸å…¬å¼€
      +
      +
      + + + + + +
      +
      +
      + {/if} + + + + {/if} +
      + +
      +
      + +
      + +
      + + + {php doAction('gobad','topic_right_top')} + + + +
      +
      最新帖å­
      +
      + +
      +
      + + + +
      +
      热门帖å­
      +
      + +
      + +
      + + + +
      + + {php doAction('gobad','300')} +
      + +
      +
      + + + + + +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/tag.html b/app/topic/html/tag.html new file mode 100644 index 0000000..65f1317 --- /dev/null +++ b/app/topic/html/tag.html @@ -0,0 +1,90 @@ +{php include pubTemplate("header")} + +
      + + + + + +
      + +
      +
      +
      +

      {$strTag[tagname]}

      +
      +
      + + + +
      +
      {$strTag[tagname]}相关的帖å­
      +
      +
      + +
      + +
      {$pageUrl}
      +
      + +
      + + +
      + +
      + +
      +
      热门标签
      +
      + {loop $arrTag $key $item} + {$item['tagname']} + {/loop} + +
      +
      + +
      + + {php doAction('gobad','300')} + +
      +
      +
      + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/tags.html b/app/topic/html/tags.html new file mode 100644 index 0000000..61b7c50 --- /dev/null +++ b/app/topic/html/tags.html @@ -0,0 +1,36 @@ +{php include pubTemplate("header")} + +
      + + + + + + +
      +
      全部标签
      +
      + +
      + {loop $arrTag $key $item} + {$item[tagname]} + {/loop} + +
      + +
      {$pageUrl}
      +
      +
      + + + +
      + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/topic_isopen.html b/app/topic/html/topic_isopen.html new file mode 100644 index 0000000..2b3b6be --- /dev/null +++ b/app/topic/html/topic_isopen.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header")} + +
      + + + + + + + +
      +
      + + + +
      + + 本å°ç»„帖å­åªæœ‰å°ç»„æˆå‘˜æ‰å¯ä»¥æµè§ˆ^_^ + + {if $strGroup['joinway']==3} + éœ€è¦æ”¯ä»˜{$strGroup['price']}金å¸åŠ å…¥å°ç»„ + {else} + 加入å°ç»„ + {/if} +
      + + + +
      +
      + + + +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/html/topic_xuqi.html b/app/topic/html/topic_xuqi.html new file mode 100644 index 0000000..eb37e10 --- /dev/null +++ b/app/topic/html/topic_xuqi.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header")} + +
      + + + + + + + +
      +
      + + + +
      + 你的组费已ç»åˆ°æœŸï¼Œè¯·è”系组长续期ï¼ç»­æœŸåŽæ‰å¯ä»¥è®¿é—®å¸–å­å†…容。 +
      + + + +
      +
      + + + +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/topic/js/extend.func.js b/app/topic/js/extend.func.js new file mode 100644 index 0000000..aeab450 --- /dev/null +++ b/app/topic/js/extend.func.js @@ -0,0 +1,50 @@ +//å‘ä¸‹åŠ è½½æ›´å¤šå¸–å­ +function loadTopic(userid,page){ + var num = parseInt(page)+1; + $("#viewmore").html(''); + $.get(siteUrl+'index.php?app=topic&ac=ajax&ts=topic',{'userid':userid,'page':page},function(rs){ + if(rs==''){ + $("#viewmore").html('没有å¯ä»¥åŠ è½½çš„å†…å®¹å•¦...'); + }else{ + $("#before").before(rs); + $("#viewmore").html('查看更多内容......'); + } + }) +} + +//帖å­å®¡æ ¸ +function topicAudit(topicid,token){ + $.post(siteUrl+'index.php?app=topic&ac=ajax&ts=topicaudit',{'topicid':topicid,'token':token},function(rs){ + if(rs==0){ + + window.location.reload(); + return false; + }else if(rs==1){ + + window.location.reload(); + return false; + + }else if(rs==2){ + + tsNotice('éžæ³•æ“作ï¼'); + + } + }) +} + +//标注 +function toBook(topicid){ + var book = $('#book-text').val(); + //if(topicid && book){ + if(topicid){ + $.post(siteUrl+'index.php?app=topic&ac=ajax&ts=book',{'topicid':topicid,'book':book},function (rs) { + if(rs==1){ + window.location.reload() + }else{ + //$('#book-alert').html('标注ä¸èƒ½ä¸ºç©º'); + } + }) + }else{ + //$('#book-alert').html('标注ä¸èƒ½ä¸ºç©º'); + } +} \ No newline at end of file diff --git a/app/topic/skin/style.css b/app/topic/skin/style.css new file mode 100644 index 0000000..e3f47f6 --- /dev/null +++ b/app/topic/skin/style.css @@ -0,0 +1,75 @@ +/*帖å­åˆ—表*/ +.topic_list{overflow:hidden;} +.topic_list ul, .topic_list ul li{list-style: none;margin:0;padding:0;} +.topic_list ul{overflow:hidden;} +.topic_list ul li{overflow:hidden;padding:15px 0;display: block;border-bottom: 1px dashed #999999;} + +.topic_list ul li .other{background: none repeat scroll 0 0 #F8F8F8; + border-left: 3px solid #EEEEEE; + margin-left: 38px; + margin-top: 5px; + padding: 5px;} +.topic_list ul li .other p{margin:0px;padding:5px 0;} + +.topic_list .userimg{float:left;width:38px;overflow:hidden;} + +.topic_list .topic_title{margin-left:40px;overflow:hidden;} + +.topic_list .topic_title .title a{font-size:18px;font-weight: bold;} + +.topic_list .topic_title .gaiyao{color:#999999;} + +.topic_list .topic_title .photo{} +.topic_list .topic_title .photo img{max-width: 25%;margin-right: 10px;} + +.topic_list .topic_info{overflow: hidden;font-size:12px;color:#999999;} + +.rank { + background: none repeat scroll 0 0 #BBBBBB; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + padding: 0 3px; + border-radius:5px 5px 5px 5px; +} + + + + +/*内容页*/ +.topic-content{width: 100%;overflow:hidden;} + +.topic-content .user-face{float: left;height: 48px;overflow: hidden;width: 48px;} + +.topic-content .topic-doc { + margin-bottom: 30px; + overflow: hidden; + margin-left:60px; +} +.topic-content .topic-doc .author { + height: auto; + margin: 0; + margin-bottom: 1px; + color: #666666; + background:#f4f4ec; + padding:5px; + font-size:12px; +} + +.topic-content img{max-width:100%;} +.topic-content .topic-view{font-size:16px;line-height:30px;overflow: hidden;word-wrap: break-word;word-break: normal;} + +.topic-content .topic-view a{color:#49a5de} + +.topic-content .topic-view p{font-size:16px;} + +.topic-content .topic-view table{border:#CCCCCC 1px solid;} +.topic-content .topic-view table td{ border:1px #CCCCCC solid; border-right:none; border-top:none;} + + +.btool{ + border-top: 1px solid #EEEEEE; + font-size: 12px; + padding: 10px 10px 0 10px; + text-align: right;} +.btool a{margin-left:10px;padding:0px;color:#999999} \ No newline at end of file diff --git a/app/user/about.php b/app/user/about.php new file mode 100644 index 0000000..0de3586 --- /dev/null +++ b/app/user/about.php @@ -0,0 +1,17 @@ + '用户', + 'version' => '1.2', + 'desc' => '用户中心,积分,头衔', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'0', +); \ No newline at end of file diff --git a/app/user/action/admin.php b/app/user/action/admin.php new file mode 100644 index 0000000..009cd9e --- /dev/null +++ b/app/user/action/admin.php @@ -0,0 +1,10 @@ +findAll('user_group',null,'ugid asc'); + + include template('admin/group_list'); + break; + + //创建用户组 + case "add": + + $ugname = tsTrim($_POST['ugname']); + $uginfo = tsTrim($_POST['uginfo']); + + if($ugname && $uginfo){ + $new['user']->create('user_group',array( + 'ugname'=>$ugname, + 'uginfo'=>$uginfo, + )); + } + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list'); + + break; + + case "edit": + + $ugid = tsIntval($_POST['ugid']); + $ugname = tsTrim($_POST['ugname']); + $uginfo = tsTrim($_POST['uginfo']); + + if(in_array($ugid,array(1,2,3,4))) qiMsg('éžæ³•æ“作ï¼'); + + $new['user']->update('user_group',array( + 'ugid'=>$ugid, + ),array( + 'ugname'=>$ugname, + 'uginfo'=>$uginfo, + )); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list'); + + break; + + //删除用户组 + case "delete": + $ugid = tsIntval($_GET['ugid']); + + if(in_array($ugid,array(1,2,3,4))){ + qiMsg('éžæ³•æ“作ï¼'); + } + + $new['user']->delete('user_group',array( + 'ugid'=>$ugid, + )); + + #é™ä¸ºæ™®é€šç”¨æˆ· + $new['user']->update('user_info',array( + 'ugid'=>$ugid, + ),array( + 'ugid'=>3, + )); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=group&ts=list'); + + break; + +} \ No newline at end of file diff --git a/app/user/action/admin/guestbook.php b/app/user/action/admin/guestbook.php new file mode 100644 index 0000000..9eef5c3 --- /dev/null +++ b/app/user/action/admin/guestbook.php @@ -0,0 +1,35 @@ +findAll('user_gb',null,'addtime desc',null,$lstart.',20'); + + $guestNum = $new['user']->findCount('user_gb'); + + $pageUrl = pagination($guestNum, 20, $page, $url); + + include template('admin/guestbook_list'); + + break; + + case "delete": + + $guestid = tsIntval($_GET['guestid']); + $page = tsIntval($_GET['page']); + + $new['user']->delete('user_gb',array( + 'id'=>$guestid, + )); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=guestbook&ts=list&page='.$page); + + break; + +} \ No newline at end of file diff --git a/app/user/action/admin/options.php b/app/user/action/admin/options.php new file mode 100644 index 0000000..2bfa72b --- /dev/null +++ b/app/user/action/admin/options.php @@ -0,0 +1,28 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'user',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/user/action/admin/role.php b/app/user/action/admin/role.php new file mode 100644 index 0000000..618c538 --- /dev/null +++ b/app/user/action/admin/role.php @@ -0,0 +1,49 @@ +findAll('user_role'); + + include template('admin/role_list'); + break; + + //角色修改 + case "do": + + $arrRoleName = $_POST['rolename']; + $arrScoreStart = $_POST['score_start']; + $arrScoreEnd = $_POST['score_end']; + + //先清空 + $db->query("TRUNCATE TABLE `".dbprefix."user_role`"); + + //åŽæ·»åŠ  + foreach($arrRoleName as $key=>$item){ + $rolename = tsTrim($item); + $score_start = tsTrim($arrScoreStart[$key]); + $score_end = tsTrim($arrScoreEnd[$key]); + + if($rolename){ + $new['user']->create('user_role',array( + 'rolename'=>$rolename, + 'score_start'=>$score_start, + 'score_end'=>$score_end, + )); + } + } + + //å†ç”Ÿæˆç¼“存文件 + $arrRole = $new['user']->findAll('user_role',null,null,'rolename,score_start,score_end'); + + fileWrite('user_role.php','data',$arrRole); + $tsMySqlCache->set('user_role',$arrRole); + + qiMsg("修改æˆåŠŸï¼"); + + break; + +} \ No newline at end of file diff --git a/app/user/action/admin/score.php b/app/user/action/admin/score.php new file mode 100644 index 0000000..4bcd363 --- /dev/null +++ b/app/user/action/admin/score.php @@ -0,0 +1,123 @@ +findAll('user_score'); + + include template('admin/score_list'); + break; + + case "adddo": + + $scorekey = tsTrim($_POST['scorekey']); + $scorename = tsTrim($_POST['scorename']); + $score = tsIntval($_POST['score']); + + $app = tsTrim($_POST['app']); + $action = tsTrim($_POST['action']); + $mg = tsTrim($_POST['mg']); + $api = tsTrim($_POST['api']); + $ts = tsTrim($_POST['ts']); + $status = tsIntval($_POST['status']); + + $new['user']->create('user_score',array( + 'scorekey'=>$scorekey, + 'scorename'=>$scorename, + 'score'=>$score, + 'app'=>$app, + 'action'=>$action, + 'mg'=>$mg, + 'api'=>$api, + 'ts'=>$ts, + 'status'=>$status, + )); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=score&ts=list'); + + break; + + case "editdo": + + $scoreid = tsIntval($_POST['scoreid']); + $score = tsIntval($_POST['score']); + $app = tsTrim($_POST['app']); + $action = tsTrim($_POST['action']); + $mg = tsTrim($_POST['mg']); + $api = tsTrim($_POST['api']); + $ts = tsTrim($_POST['ts']); + $status = tsIntval($_POST['status']); + + $new['user']->update('user_score',array( + 'scoreid'=>$scoreid, + ),array( + 'score'=>$score, + 'app'=>$app, + 'action'=>$action, + 'mg'=>$mg, + 'api'=>$api, + 'ts'=>$ts, + 'status'=>$status, + )); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=score&ts=list'); + + break; + + //加积分 + case "send": + + include template('admin/score_send'); + + break; + + case "senddo": + + $userid = tsIntval($_POST['userid']); + $score = tsIntval($_POST['score']); + $status = tsIntval($_POST['status']); + $scorename = tsTrim($_POST['scorename']); + + if($userid && $score && $scorename){ + + $return = false; + + if($status==1){ + //å‡ç§¯åˆ† + $return = $new['user']->delScore($userid,$scorename,$score); + $jiajian = 'å‡åŽ»'; + }else{ + //加积分 + $return = $new['user']->addScore($userid,$scorename,$score,1); + $jiajian = '增加'; + } + + if($return==true){ + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = $scorename.$jiajian.$score.'积分'; + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content); + } + + qiMsg('æ“作æˆåŠŸï¼'); + }else{ + qiMsg('æ“作失败ï¼'); + } + + break; + + case "delete": + $scoreid = tsIntval($_GET['scoreid']); + + $new['user']->delete('user_score',array( + 'scoreid'=>$scoreid, + )); + + qiMsg('删除æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/user/action/admin/user.php b/app/user/action/admin/user.php new file mode 100644 index 0000000..2f6f784 --- /dev/null +++ b/app/user/action/admin/user.php @@ -0,0 +1,403 @@ + 0 && $username==''){ + $arrData = array('userid'=>$userid); + }elseif($userid==0 && $username != ''){ + $arrData = array('username'=>$username); + }elseif($userid>0 && $username != ''){ + $arrData = array('userid'=>$userid,'username'=>$username); + } + + $lstart = $page*20-20; + + $url = SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list&userid='.$userid.'&username='.$username.'&page='; + + $arrAllUser = $new['user']->findAll('user_info',$arrData,'userid desc',null,$lstart.',20'); + + $userNum = $new['user']->findCount('user_info'); + + $pageUrl = pagination($userNum, 20, $page, $url); + + + #用户组 + $arrUg = $new['user']->findAll('user_group',"`ugid`!=4",'ugid asc'); + foreach($arrUg as $key=>$item){ + $arrUg1[$item['ugid']] = $item['ugname']; + } + + + include template("admin/user_list"); + + break; + + //用户编辑 + case "edit": + $userid = $_GET['userid']; + $strUser = $new['user']->getOneUser($userid); + + include template("admin/user_edit"); + break; + + //用户查看 + case "view": + $userid = $_GET['userid']; + + $strUser = $new['user']->getOneUser($userid); + + include template("admin/user_view"); + break; + + //用户åœç”¨å¯ç”¨ + case "isenable": + + $userid = tsIntval($_GET['userid']); + + if($userid==1) qiMsg('无法åœç”¨è¯¥ç”¨æˆ·ï¼'); + + $page = tsIntval($_GET['page']); + + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser['isadmin']==1) qiMsg('管ç†å‘˜ä¸èƒ½åœç”¨ï¼'); + + //ç¦ç”¨ + if($strUser['isenable']==0){ + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isenable'=>1, + )); + + //å°ç”¨æˆ·Id + $isuser = $new['user']->findCount('anti_user',array( + 'userid'=>$userid, + )); + if($isuser==0){ + $new['user']->create('anti_user',array( + 'userid'=>$userid, + 'addtime'=>date('Y-m-d H:i:s'), + )); + } + + //å°IP + $isip = $new['user']->findCount('anti_ip',array( + 'ip'=>$strUser['ip'] + )); + if($isip==0 && $strUser['ip']){ + $new['user']->create('anti_ip',array( + 'ip'=>$strUser['ip'], + 'addtime'=>date('Y-m-d H:i:s'), + )); + } + + } + + + //å¯ç”¨ + if($strUser['isenable']==1){ + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isenable'=>0, + )); + + $new['user']->delete('anti_user',array( + 'userid'=>$userid, + )); + $new['user']->delete('anti_ip',array( + 'ip'=>$strUser['ip'], + )); + } + + #qiMsg('æ“作æˆåŠŸï¼'); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list&page='.$page); + + break; + + //ä¿®æ”¹å¯†ç  + case "pwd": + + $userid = tsIntval($_GET['userid']); + + $strUser = $new['user']->find('user',array( + 'userid'=>$userid, + )); + + include template('admin/user_pwd'); + break; + + //æ‰§è¡Œä¿®æ”¹å¯†ç  + case "pwddo": + + $userid = tsIntval($_POST['userid']); + + $pwd = tsTrim($_POST['pwd']); + + if($pwd == '') qiMsg('密ç ä¸èƒ½ä¸ºç©ºï¼'); + + $strUser = $new['user']->find('user',array( + 'userid'=>$userid, + )); + + $salt = md5(rand()); + + $new['user']->update('user',array( + 'userid'=>$userid, + ),array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + )); + + qiMsg('密ç ä¿®æ”¹æˆåŠŸï¼š'.$pwd); + + break; + + //æ¸…ç©ºç”¨æˆ·æ•°æ® + case "deldata": + $userid = tsIntval($_GET['userid']); + + if($userid==1) qiMsg('è¯¥ç”¨æˆ·æ•°æ®æ— æ³•清空ï¼'); + + aac('user')->toEmpty($userid); + qiMsg('æ¸…ç©ºæ•°æ®æˆåŠŸï¼'); + + break; + + //管ç†å‘˜ + case "admin": + + $userid = tsIntval($_GET['userid']); + + if($userid==1) qiMsg('è¯¥ç”¨æˆ·æ— æ³•å–æ¶ˆç®¡ç†å‘˜ï¼'); + + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser['isadmin']==1){ + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isadmin'=>'0', + 'isverify'=>'0', + 'isverifyphone'=>'0', + 'isrenzheng'=>'0', + )); + }elseif($strUser['isadmin']==0){ + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isadmin'=>'1',//系统管ç†å‘˜ + 'isverify'=>'1',//EmailéªŒè¯ + 'isverifyphone'=>'1',//手机å·éªŒè¯ + 'isrenzheng'=>'1',//äººå·¥è®¤è¯ + )); + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //清空全部被ç¦ç”¨çš„用户数æ®å¹¶ä¿å­˜åžƒåœ¾Email + case "clean": + + $arrUser = $new['user']->findAll('user_info',array( + 'isenable'=>1, + )); + foreach($arrUser as $key=>$item){ + //æ‰§è¡Œåˆ é™¤ç”¨æˆ·æ•°æ® + aac('user')->toEmpty($item['userid']); + } + + qiMsg('垃圾用户清空完毕ï¼'); + + break; + + case "face": + $userid = tsIntval($_GET['userid']); + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>'', + 'face'=>'', + )); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + //æ˜¯å¦æ‰‹å·¥è®¤è¯ + case "isrenzheng": + $userid = tsIntval($_GET['userid']); + + if($userid==1) qiMsg('该用户无法æ“作ï¼'); + + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + + + //å¼€é€šè®¤è¯ + if($strUser['isrenzheng']==0){ + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isrenzheng'=>1, + )); + + + //å‘ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = 'æ­å–œä½ ï¼Œç³»ç»Ÿå·²ç»é€šè¿‡ä½ çš„个人信æ¯è®¤è¯ï¼'; + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content); + + + } + + + //å–æ¶ˆè®¤è¯ + if($strUser['isrenzheng']==1){ + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isrenzheng'=>0, + )); + + //å‘ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = 'å¾ˆæŠ±æ­‰ï¼Œç³»ç»Ÿå–æ¶ˆäº†ä½ çš„个人信æ¯è®¤è¯ï¼'; + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content); + + } + + qiMsg('æ“作æˆåŠŸï¼'); + break; + + case "isverify": + + $userid = tsIntval($_GET['userid']); + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser['isverify']==0){ + $isverify = 1; + }else{ + $isverify = 0; + } + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isverify'=>$isverify, + )); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + case "isverifyphone": + + $userid = tsIntval($_GET['userid']); + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser['isverifyphone']==0){ + $isverifyphone = 1; + }else{ + $isverifyphone = 0; + } + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'isverifyphone'=>$isverifyphone, + )); + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + case "ugid": + + $userid = tsIntval($_POST['userid']); + $ugid = tsIntval($_POST['ugid']); + + if($userid==1) $ugid=1; + + if($ugid==4) qiMsg('éžæ³•æ“作ï¼'); + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'ugid'=>$ugid, + )); + + break; + + case "add": + + include template('admin/user_add'); + break; + + case "adddo": + + $email = tsTrim($_POST['email']); + $username = tsTrim($_POST['username']); + $pwd = tsTrim($_POST['pwd']); + + if($email=='' || $username=='' || $pwd==''){ + qiMsg('ä¿¡æ¯è¾“å…¥ä¸å®Œæ•´'); + } + + #判断Email是å¦å­˜åœ¨ + $isEmail = $new['user']->findCount('user',array( + 'email'=>$email, + )); + + if($isEmail > 0){ + qiMsg('è´¦å·å·²ç»æ³¨å†Œ'); + } + + if(count_string_len($username) < 4 || count_string_len($username) > 20){ + qiMsg('å§“å长度必须在4å’Œ20之间'); + } + + #åˆ¤æ–­ç”¨æˆ·åæ˜¯å¦å­˜åœ¨ + $isUserName = $new['user']->findCount('user_info',array( + 'username'=>$username, + )); + + if($isUserName > 0){ + qiMsg('用户åå·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªç”¨æˆ·åï¼'); + } + + $new['user']->register($email,$username,$pwd,$fuserid,$invitecode,1); + + header('Location: '.SITE_URL.'index.php?app=user&ac=admin&mg=user&ts=list'); + + break; + + } \ No newline at end of file diff --git a/app/user/action/anti.php b/app/user/action/anti.php new file mode 100644 index 0000000..ab385cc --- /dev/null +++ b/app/user/action/anti.php @@ -0,0 +1,20 @@ +antiUser(); + if($tsSystemAntiUser){ + if(in_array($userid,$tsSystemAntiUser)){ + aac('user')->logout(); + } + } + + echo 1; + +}else{ + echo 0; +} \ No newline at end of file diff --git a/app/user/action/api.php b/app/user/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/user/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +User Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/user/action/article.php b/app/user/action/article.php new file mode 100644 index 0000000..e818440 --- /dev/null +++ b/app/user/action/article.php @@ -0,0 +1,29 @@ +$strUser['userid'],'page' => '' ) ); +$lstart = $page * 20 - 20; + +$arrArticle = $new ['user']->findAll ( 'article', array ( + 'userid' => $strUser['userid'], +), 'addtime desc','articleid,userid,cateid,title,gaiyao,score,path,photo,count_comment,count_love,count_view,addtime', $lstart . ',20' ); + +foreach($arrArticle as $key=>$item){ + $arrArticle [$key]['title'] = tsTitle($item['title']); + $arrArticle [$key]['gaiyao'] = tsTitle($item['gaiyao']); + $arrArticle [$key] ['cate'] = $new ['user']->find( 'article_cate', array ( + 'cateid' => $item ['cateid'] + ) ); +} + +$articleNum = $new ['user']->findCount ( 'article', array ( + 'userid' => $strUser['userid'], +) ); + +$pageUrl = pagination ( $articleNum, 20, $page, $url ); + +$title = $strUser['username'].'的文章'; +include template('article'); \ No newline at end of file diff --git a/app/user/action/collect.php b/app/user/action/collect.php new file mode 100644 index 0000000..70502e5 --- /dev/null +++ b/app/user/action/collect.php @@ -0,0 +1,24 @@ +$strUser['userid'],'page'=>'')); +$lstart = $page*30-30; + +$arrTopicLists = $new['user']->findAll('group_topic_collect',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',30'); + +foreach($arrTopicLists as $key=>$item){ + $arrTopicList[] = aac('group')->getOneTopic($item['topicid']); +} + +$topicNum = $new['user']->findCount('group_topic_collect',array( + 'userid'=>$strUser['userid'], +)); +$pageUrl = pagination($topicNum, 30, $page, $url); + +$title = $strUser['username'].'的喜欢'; +include template('collect'); \ No newline at end of file diff --git a/app/user/action/comment.php b/app/user/action/comment.php new file mode 100644 index 0000000..3a07fd1 --- /dev/null +++ b/app/user/action/comment.php @@ -0,0 +1,33 @@ +$strUser['userid'],'page'=>'')); +$lstart = $page*20-20; + +$arrComments = $new['user']->findAll('group_topic_comment',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',20'); + +foreach($arrComments as $key=>$item){ + $arrComment[] = $item; + $arrComment[$key]['topic']=aac('group')->getOneTopic($item['topicid']); +} + +$commentNum = $new['user']->findCount('group_topic_comment',array( + 'userid'=>$strUser['userid'], +)); + +$pageUrl = pagination($commentNum, 20, $page, $url); + +$title = $strUser['username'].'的评论'; + +//SEO +$sitekey = ''; +$sitedesc = ''; + + + +include template('comment'); \ No newline at end of file diff --git a/app/user/action/follow.php b/app/user/action/follow.php new file mode 100644 index 0000000..9810622 --- /dev/null +++ b/app/user/action/follow.php @@ -0,0 +1,123 @@ +$strUser['userid'],'page'=>'')); + $lstart = $page*80-80; + + //关注的用户 + $arrUsers = $new['user']->findAll('user_follow',array( + 'userid'=>$strUser['userid'], + ),'addtime desc',null,$lstart.',80'); + + $userNum = $new['user']->findCount('user_follow',array( + 'userid'=>$strUser['userid'], + )); + $pageUrl = pagination($userNum, 80, $page, $url); + + if(is_array($arrUsers)){ + foreach($arrUsers as $item){ + $arrUser[] = $new['user']->getSimpleUser($item['touserid']); + } + } + + $title = $strUser['username'].'关注的人'; + include template("follow"); + + break; + + //关注执行 + case "do": + + $userid = tsIntval($TS_USER['userid']); + $touserid = tsIntval($_POST['userid']); + + + if($userid == 0){ + echo json_encode(array( + 'status'=>0, + 'msg'=>'你还没有登录ï¼', + )); + exit; + } + + if($userid == $touserid){ + echo json_encode(array( + 'status'=>0, + 'msg'=>'自己ä¸èƒ½å…³æ³¨è‡ªå·±å“¦', + )); + exit; + } + + $isFollow = $new['user']->findCount('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + )); + + if($isFollow>0){ + + echo json_encode(array( + 'status'=>1, + 'msg'=>'ä½ å·²ç»å…³æ³¨æ­¤ç”¨æˆ·ï¼', + )); + exit; + + } + + $new['user']->create('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + )); + + //ç»Ÿè®¡ç”¨æˆ·å…³æ³¨æ•°å’Œç²‰ä¸æ•° + $new['user']->countFollowFans($userid); + $new['user']->countFollowFans($touserid); + + + #å‘ä¸ªæ¶ˆæ¯ + + + echo json_encode(array( + 'status'=>2, + 'msg'=>'关注æˆåŠŸï¼', + )); + exit; + + break; + + //å–æ¶ˆå…³æ³¨ + case "un": + + $userid = tsIntval($TS_USER['userid']); + $touserid = tsIntval($_POST['userid']); + + + if($userid == 0){ + echo json_encode(array( + 'status'=>0, + 'msg'=>'你还没有登录ï¼', + )); + exit; + } + + $new['user']->delete('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + )); + + //ç»Ÿè®¡ç”¨æˆ·å…³æ³¨æ•°å’Œç²‰ä¸æ•° + $new['user']->countFollowFans($userid); + $new['user']->countFollowFans($touserid); + + echo json_encode(array( + 'status'=>1, + 'msg'=>'解除关注æˆåŠŸ', + )); + exit; + + break; + +} \ No newline at end of file diff --git a/app/user/action/followed.php b/app/user/action/followed.php new file mode 100644 index 0000000..5bc4407 --- /dev/null +++ b/app/user/action/followed.php @@ -0,0 +1,27 @@ +$strUser['userid'],'page'=>'')); +$lstart = $page*80-80; + +//è·Ÿéšä»–的用户 +$arrUsers = $new['user']->findAll('user_follow',array( + 'touserid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',80'); + +$userNum = $new['user']->findCount('user_follow',array( + 'touserid'=>$strUser['userid'], +)); +$pageUrl = pagination($userNum, 80, $page, $url); + +if(is_array($arrUsers)){ + foreach($arrUsers as $item){ + $arrUser[$key] = $new['user']->getSimpleUser($item['userid']); + } +} + +$title = $strUser['username'].'的粉ä¸'; +include template('followed'); \ No newline at end of file diff --git a/app/user/action/forgetpwd.php b/app/user/action/forgetpwd.php new file mode 100644 index 0000000..a2fee92 --- /dev/null +++ b/app/user/action/forgetpwd.php @@ -0,0 +1,143 @@ +find('user',array( + 'email'=>$email, + )); + + if($strUser==''){ + getJson("Email邮箱ä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œ^_^",$js); + } + + + if ($authcode != $_SESSION['verify']) { + getJson('图片验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyEmailCode($email,$emailcode)==false){ + getJson('Email验è¯ç è¾“入有误',$js); + } + + $salt = md5(rand()); + + $new['user']->update('user',array( + 'userid'=>$strUser['userid'], + ),array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + )); + + + $new['user']->update('user_info',array( + 'userid'=>$strUser['userid'], + ),array( + 'email'=>$strUser['email'], + 'isverify'=>'1', + )); + + $_SESSION['tsuser']['isverify']=1; + + getJson('密ç ä¿®æ”¹æˆåŠŸï¼',$js,2,tsUrl('user','login')); + + break; + + /** + * é€šè¿‡æ‰‹æœºå·æ‰¾å›žå¯†ç  + */ + case "phone": + + $title = '找回登陆密ç '; + include template("forgetpwd_phone"); + + break; + + //执行登录 + case "do": + + $js = tsIntval($_GET['js']); + + + $email = tsTrim($_POST['email']); + + if(valid_email($email)==false){ + getJson('Emailè¾“å…¥ä¸æ­£ç¡®',$js); + } + + $emailNum = $new['user']->findCount('user',array( + 'email'=>$email, + )); + + if($email==''){ + getJson('Email输入ä¸èƒ½ä¸ºç©º^_^',$js); + }elseif($emailNum == '0'){ + getJson("Emailä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œ^_^",$js); + }else{ + + //加密 + $resetpwd = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); + + $new['user']->update('user',array( + 'email'=>$email, + ),array( + 'resetpwd'=>$resetpwd, + )); + + //å‘é€é‚®ä»¶ + $subject = $TS_SITE['site_title'].'ä¼šå‘˜å¯†ç æ‰¾å›ž'; + + $content = '您的登陆信æ¯ï¼š
      Email:'.$email.'
      é‡è®¾å¯†ç é“¾æŽ¥ï¼š
      '.$TS_SITE['site_url'].'index.php?app=user&ac=resetpwd&mail='.$email.'&set='.$resetpwd.''; + + $result = aac('mail')->postMail($email,$subject,$content); + + if($result == '0'){ + getJson('æ‰¾å›žå¯†ç æ‰€éœ€ä¿¡æ¯ä¸å®Œæ•´^_^',$js); + }elseif($result == '1'){ + getJson('系统已ç»å‘你的邮箱å‘é€äº†é‚®ä»¶ï¼Œè¯·å°½å¿«æŸ¥æ”¶^_^',$js); + } + + } + + break; + +} \ No newline at end of file diff --git a/app/user/action/group.php b/app/user/action/group.php new file mode 100644 index 0000000..a171d81 --- /dev/null +++ b/app/user/action/group.php @@ -0,0 +1,17 @@ +findAll('group_user',array( + 'userid'=>$strUser['userid'], +),null,'groupid'); + + +foreach($arrGroupsList as $key=>$item){ + $arrGroupList[] = aac('group')->getOneGroup($item['groupid']); +} + + +$title = $strUser['username'].'çš„å°ç»„'; +include template('group'); \ No newline at end of file diff --git a/app/user/action/guestbook.php b/app/user/action/guestbook.php new file mode 100644 index 0000000..4f377b4 --- /dev/null +++ b/app/user/action/guestbook.php @@ -0,0 +1,130 @@ +$strUser['userid'],'page'=>'')); + $lstart = $page*20-20; + + $arrGuestList = $new['user']->findAll('user_gb',array( + 'touserid'=>$strUser['userid'], + ),'addtime desc',null,$lstart.',20'); + + foreach($arrGuestList as $key=>$item){ + $arrGuestList[$key]['content'] = tsTitle($item['content']); + $arrGuestList[$key]['user']=$new['user']->getSimpleUser($item['userid']); + + $arrGuestList[$key]['reply'] = $new['user']->find('user_gb',array( + 'reid'=>$item['id'], + )); + if($arrGuestList[$key]['reply']){ + $arrGuestList[$key]['reply']['content'] = tsTitle($arrGuestList[$key]['reply']['content']); + } + } + + $guestNum = $new['user']->findCount('user_gb',array( + 'touserid'=>$strUser['userid'], + )); + + $pageUrl = pagination($guestNum, 20, $page, $url); + + $title = $strUser['username'].'的留言æ¿'; + include template('guestbook'); + + break; + + case "do": + + $userid = $new['user']->isLogin(); + $touserid = tsIntval($_POST['touserid']); + $content = tsTrim($_POST['content']); + + if($content == ''){ + + tsNotice('留言内容ä¸èƒ½ä¸ºç©º!'); + + } + + $content = antiWord($content); + + $new['user']->create('user_gb',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + 'content'=>$content, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $touserid; + $msg_content = '有人在你的留言æ¿ä¸Šç•™è¨€äº†å“¦ï¼Œå¿«åŽ»çœ‹çœ‹å§'; + $msg_tourl = tsUrl('user','space',array('id'=>$touserid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + + #tsNotice('留言æˆåŠŸï¼'); + header('Location: '.tsUrl('user','guestbook',array('id'=>$touserid))); + exit; + + break; + + case "redo": + $userid = $new['user']->isLogin(); + $touserid = tsIntval($_POST['touserid']); + $reid = tsIntval($_POST['reid']); + $content = tsTrim($_POST['content']); + + $arrContent = explode('#',$content); + + $content = $arrContent['1']; + + if($content==''){ + tsNotice('留言ä¸èƒ½ä¸ºç©ºï¼'); + } + + $content = antiWord($content); + + $new['user']->create('user_gb',array( + 'userid'=>$userid, + 'reid'=>$reid, + 'touserid'=>$touserid, + 'content'=>$content, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯ + $msg_userid = '0'; + $msg_touserid = $touserid; + $msg_content = '有人在你的留言æ¿ä¸Šç•™è¨€äº†å“¦ï¼Œå¿«åŽ»çœ‹çœ‹å§ï¼'; + $msg_tourl = tsUrl('user','guestbook',array('id'=>$touserid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + tsNotice('å›žå¤æˆåŠŸï¼'); + break; + + //删除留言 + case "delete": + + $userid = $new['user']->isLogin(); + $gbid = tsIntval($_GET['gbid']); + + $strGuest = $new['user']->find('user_gb',array( + 'id'=>$gbid, + )); + + if($strGuest['touserid'] == $userid){ + + $new['user']->delete('user_gb',array( + 'id'=>$gbid, + )); + + } + + tsNotice('留言删除æˆåŠŸ'); + + break; + +} \ No newline at end of file diff --git a/app/user/action/index.php b/app/user/action/index.php new file mode 100644 index 0000000..1a586c6 --- /dev/null +++ b/app/user/action/index.php @@ -0,0 +1,21 @@ +getScoreUser(10); + +//关注最多的用户 +$arrFollowUser = $new['user']->getFollowUser(10); + +//活跃会员 +$arrHotUser = $new['user']->getHotUser(10); + +//最新会员 +$arrNewUser = $new['user']->getNewUser(10); + +$title = '用户'; + +$sitekey = $TS_APP['appkey']; +$sitedesc = $TS_APP['appdesc']; + +include template('index'); \ No newline at end of file diff --git a/app/user/action/invite.php b/app/user/action/invite.php new file mode 100644 index 0000000..bd47ed2 --- /dev/null +++ b/app/user/action/invite.php @@ -0,0 +1,66 @@ +isLogin(); + +$strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, +)); + +//é‚€è¯·å¥½å‹ +switch($ts){ + case "": + + //计算是å¦è¿˜æœ‰é‚€è¯·ç  + $codeNum = $new['user']->findCount('user_invites',array( + 'userid'=>$userid, + 'isused'=>0, + )); + + $arrCode = $new['user']->findAll('user_invites',array( + 'userid'=>$userid, + 'isused'=>0, + )); + + + + #邀请的用户 + $arrInviteUser = $new['user']->findAll('user_info',array( + 'fuserid'=>$userid, + ),'addtime desc','userid,username'); + + + $title = '邀请ç '; + include template("invite"); + + break; + + //å–é‚€è¯·ç  + case "code": + + //计算是å¦è¿˜æœ‰é‚€è¯·ç  + $codeNum = $new['user']->findCount('user_invites',array( + 'userid'=>$userid, + 'isused'=>0, + )); + + if($codeNum == 0 && $TS_USER['isadmin']==1){ + + //当数æ®åº“中没ç çš„æ—¶é—´ç”Ÿæˆ10ä¸ªç  + for($i=1;$i<=10;$i++){ + + $new['user']->create('user_invites',array( + 'userid'=>$userid, + 'invitecode'=>random(18).$userid, + 'addtime'=>time(), + )); + + } + + } + + header('Location: '.tsUrl('user','invite')); + + break; +} \ No newline at end of file diff --git a/app/user/action/login.php b/app/user/action/login.php new file mode 100644 index 0000000..cffe90b --- /dev/null +++ b/app/user/action/login.php @@ -0,0 +1,134 @@ + 0) { + header('Location: '.SITE_URL);exit; +} + +#å¾®ä¿¡å…¬ä¼—å·æŽˆæƒ +if(isWeixin()==true && $TS_SITE['is_weixin']==1){ + $config = [ + 'app_id' => $TS_SITE['weixin_appid'], + 'oauth' => [ + 'scopes' => ['snsapi_userinfo'], + 'callback' => SITE_URL.'index.php?app=user&ac=wxlogin', + ], + ]; + $app = Factory::officialAccount($config); + $oauth = $app->oauth; + $oauth->redirect()->send(); + exit(); +} + +//程åºä¸»ä½“ +switch($ts){ + case "": + + + //è®°å½•ä¸Šæ¬¡è®¿é—®åœ°å€ + $jump = $_SERVER['HTTP_REFERER']; + + $title = '登录'; + include template("login"); + break; + + //执行登录 + case "do": + + //用于JSæäº¤éªŒè¯ + $js = tsIntval($_GET['js']); + + $ad = tsIntval($_POST['ad']); + + /*ç¦æ­¢ä»¥ä¸‹IP用户登陆或注册*/ + /* + $arrIp = aac('system')->antiIp(); + if(in_array(getIp(),$arrIp)){ + getJson('ä½ çš„IP已被é”定,暂无法登录ï¼',$js); + } + */ + + $jump = tsTrim($_POST['jump']); + + $email = tsTrim($_POST['email']); + + $pwd = tsTrim($_POST['pwd']); + + $cktime = tsIntval($_POST['cktime']); + + + #äººæœºéªŒè¯ + $vaptcha_token = tsTrim($_POST ['vaptcha_token']); + $vaptcha_server = tsTrim($_POST ['vaptcha_server']); + if ($TS_SITE['is_vaptcha'] && $ad==0) { + $strVt = vaptcha($vaptcha_token,0,$vaptcha_server); + if($strVt['success']==0) { + getJson('äººæœºéªŒè¯æœªé€šè¿‡ï¼',$js); + } + } + + + if($email=='' || $pwd=='') getJson('è´¦å·å’Œå¯†ç éƒ½ä¸èƒ½ä¸ºç©ºï¼',$js); + + #å…ˆåˆ¤æ–­æ˜¯å¦æ˜¯Email + if(valid_email($email)==true){ + + $strUser = $new['user']->find('user',array( + 'email'=>$email, + )); + + //if($strUser == '') getJson('Emailä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œï¼',$js); + if($strUser == '') getJson('è´¦å·/密ç è¾“入有误ï¼',$js); + + }else{ + + #åˆ¤æ–­æ˜¯å¦æ˜¯æ‰‹æœºå· + if(isPhone($email)==true){ + + $strUser = $new['user']->find('user',array( + 'phone'=>$email, + )); + + #if($strUser == '') getJson('手机å·ä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œï¼',$js); + if($strUser == '') getJson('è´¦å·/密ç è¾“入有误ï¼',$js); + + }else{ + #getJson('è´¦å·ä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œï¼',$js); + getJson('è´¦å·/密ç è¾“入有误ï¼',$js); + } + + } + + if(md5($strUser['salt'].$pwd)!==$strUser['pwd']) { + #getJson('密ç é”™è¯¯ï¼',$js); + getJson('è´¦å·/密ç è¾“入有误ï¼',$js); + } + + $new['user']->login($strUser['userid']); + + //å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts'],0,1); + + if($ad==1){ + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL.'index.php?app=system'); + } + + //跳转 + if($jump != ''){ + getJson('登录æˆåŠŸï¼',$js,2,$jump); + }else{ + + //登陆是å¦è·³è½¬åˆ°æˆ‘的社区 + if($TS_SITE['istomy']){ + getJson('登录æˆåŠŸï¼',$js,2,tsUrl('my')); + }else{ + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL); + } + + } + + break; + +} \ No newline at end of file diff --git a/app/user/action/logout.php b/app/user/action/logout.php new file mode 100644 index 0000000..909f6fe --- /dev/null +++ b/app/user/action/logout.php @@ -0,0 +1,7 @@ +logout(); +//header('Location: '.tsUrl('user','login')); +header('Location: '.SITE_URL); +exit; \ No newline at end of file diff --git a/app/user/action/message.php b/app/user/action/message.php new file mode 100644 index 0000000..d893945 --- /dev/null +++ b/app/user/action/message.php @@ -0,0 +1,89 @@ +isLogin(); + +switch($ts){ + //å‘逿¶ˆæ¯é¡µé¢ + case "add": + + $touserid = tsIntval($_GET['touserid']); + + if($userid == $touserid || !$touserid) { + tsNotice("Sorryï¼è‡ªå·±ä¸èƒ½ç»™è‡ªå·±å‘逿¶ˆæ¯çš„ï¼& 对方为空!"); + } + + #互为粉ä¸çš„2个人æ‰å¯ä»¥å‘逿¶ˆæ¯ + $isFollow = $new['user']->findCount('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + )); + + $isFollow2 = $new['user']->findCount('user_follow',array( + 'userid'=>$touserid, + 'touserid'=>$userid, + )); + + if(($isFollow && $isFollow2) || $TS_USER['isadmin']==1){ + + $strUser = $new['user']->getSimpleUser($userid); + + $strTouser = $new['user']->getSimpleUser($touserid); + + if(!$strTouser) tsNotice("Sorryï¼å¯¹æ–¹ä¸å­˜åœ¨!"); + $title = "å‘é€çŸ­æ¶ˆæ¯"; + include template("message_add"); + + }else{ + + tsNotice("互相关注的2个人æ‰å¯ä»¥äº’相å‘é€ç§ä¿¡!"); + + } + + break; + + case "do": + + $js = tsIntval($_GET['js']); + + $msg_userid = $userid; + $msg_touserid = tsIntval($_POST['touserid']); + + if($msg_userid == $msg_touserid || !$msg_touserid) { + getJson("Sorryï¼è‡ªå·±ä¸èƒ½ç»™è‡ªå·±å‘逿¶ˆæ¯çš„ï¼& 对方为空!",$js,0); + } + + #互为粉ä¸çš„2个人æ‰å¯ä»¥å‘逿¶ˆæ¯ + $isFollow = $new['user']->findCount('user_follow',array( + 'userid'=>$msg_userid, + 'touserid'=>$msg_touserid, + )); + + $isFollow2 = $new['user']->findCount('user_follow',array( + 'userid'=>$msg_touserid, + 'touserid'=>$msg_userid, + )); + + if(($isFollow && $isFollow2) || $TS_USER['isadmin']==1){ + + $msg_content = tsTrim($_POST['content']); + + if($msg_content==''){ + getJson('消æ¯å†…容ä¸èƒ½ä¸ºç©ºï¼',$js,0); + } + + $msg_content = antiWord($msg_content); + + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content); + + getJson('消æ¯å‘逿ˆåŠŸ',$js,1); + + }else{ + + getJson("互相关注的2个人æ‰å¯ä»¥äº’相å‘é€ç§ä¿¡!",$js,0); + + } + + break; +} \ No newline at end of file diff --git a/app/user/action/my.php b/app/user/action/my.php new file mode 100644 index 0000000..a082e40 --- /dev/null +++ b/app/user/action/my.php @@ -0,0 +1,10 @@ +isLogin(); + +$strUser = aac('user')->getOneUser($userid); \ No newline at end of file diff --git a/app/user/action/my/index.php b/app/user/action/my/index.php new file mode 100644 index 0000000..82c213b --- /dev/null +++ b/app/user/action/my/index.php @@ -0,0 +1,6 @@ + 0) { + header('Location: '.SITE_URL);exit; + } + + #如果网站åªé‡‡ç”¨Email注册,就跳转到Email注册 + if($TS_SITE['regtype']==0){ + header('Location: '.tsUrl('user','register'));exit; + } + + //邀请用户ID + $fuserid = tsIntval($_GET['fuserid']); + + $title = 'æ‰‹æœºå·æ³¨å†Œ'; + + include template("phone"); + + break; + + + case "do": + + //用于JSæäº¤éªŒè¯ + $js = tsIntval($_GET['js']); + + $phone = tsTrim($_POST['email']); + $pwd = tsTrim($_POST['pwd']); + $repwd = tsTrim($_POST['repwd']); + $username = t($_POST['username']); + + $fuserid = tsIntval($_POST['fuserid']); + + $authcode = strtolower($_POST['authcode']); + + $phonecode = tsTrim($_POST['phonecode']); + + + /*ç¦æ­¢ä»¥ä¸‹IP用户登陆或注册*/ + $arrIp = aac('system')->antiIp(); + if(in_array(getIp(),$arrIp)){ + getJson('ä½ çš„IP已被é”定,暂无法登录ï¼',$js); + } + + + //是å¦å¼€å¯é‚€è¯·æ³¨å†Œ + if($TS_SITE['isinvite']=='1'){ + + $invitecode = tsTrim($_POST['invitecode']); + if($invitecode == '') getJson('邀请ç ä¸èƒ½ä¸ºç©ºï¼',$js); + + $codeNum = $new['user']->findCount('user_invites',array( + 'invitecode'=>$invitecode, + 'isused'=>0, + )); + + if($codeNum == 0) getJson('邀请ç å·²ç»è¢«ä½¿ç”¨ï¼Œè¯·æ›´æ¢å…¶ä»–邀请ç ï¼',$js); + + } + + if($phone=='' || $pwd=='' || $repwd=='' || $username=='' || $phonecode==''){ + + getJson('所有必选项都ä¸èƒ½ä¸ºç©ºï¼',$js); + + } + + if(isPhone($phone)==false) getJson('手机å·è¾“入有误ï¼',$js); + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){ + getJson('手机验è¯ç è¾“入有误',$js); + } + + #æ‰‹æœºå·æ˜¯å¦å­˜åœ¨ + $isPhone = $new['user']->findCount('user',array( + 'phone'=>$phone, + )); + + if($isPhone > 0){ + getJson('手机å·å·²ç»å­˜åœ¨',$js); + } + + if($pwd != $repwd){ + getJson('两次输入密ç ä¸æ­£ç¡®ï¼',$js); + } + + + if(count_string_len($username) < 4 || count_string_len($username) > 20){ + getJson('å§“å长度必须在4å’Œ20之间',$js); + } + + #ç”¨æˆ·åæ˜¯å¦å­˜åœ¨ + $isUserName = $new['user']->findCount('user_info',array( + 'username'=>$username, + ),'userid'); + + if($isUserName > 0){ + getJson('用户åå·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªç”¨æˆ·åï¼',$js); + } + + + #验è¯ç  + if ($authcode != $_SESSION['verify']) { + getJson('验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + + $salt = md5(rand()); + + $userid = $new['user']->create('user',array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + 'email'=>$phone, + 'phone'=>$phone, + )); + + //æ’å…¥ç”¨æˆ·ä¿¡æ¯ + $new['user']->create('user_info',array( + 'userid' => $userid, + 'fuserid' => $fuserid, + 'username' => $username, + 'email' => $phone, + 'phone' => $phone, + 'ip' => getIp(), + 'comefrom'=>'9', + 'isverifyphone'=>1, + 'addtime' => time(), + 'uptime' => time(), + )); + + //默认加入å°ç»„ + $isGroup = $new['user']->find('user_options',array( + 'optionname'=>'isgroup', + )); + + if($isGroup['optionvalue']){ + $arrGroup = explode(',',$isGroup['optionvalue']); + + if($arrGroup){ + foreach($arrGroup as $key=>$item){ + $groupUserNum = $new['user']->findCount('group_user',array( + 'userid'=>$userid, + 'groupid'=>$item, + )); + + if($groupUserNum == 0){ + $new['user']->create('group_user',array( + 'userid'=>$userid, + 'groupid'=>$item, + 'addtime'=>time(), + )); + + //统计更新 + $count_user = $new['user']->findCount('group_user',array( + 'groupid'=>$item, + )); + + $new['user']->update('group',array( + 'groupid'=>$item, + ),array( + 'count_user'=>$count_user, + )); + + } + } + } + } + + //ç”¨æˆ·ä¿¡æ¯ + $userData = $new['user']->find('user_info',array( + 'userid'=>$userid, + ),'userid,username,email,path,face,isadmin,signin,isverify,isverifyphone,uptime'); + + //用户sessionä¿¡æ¯ + $_SESSION['tsuser'] = $userData; + + //å‘逿¶ˆæ¯ + aac('message')->sendmsg(0,$userid,'亲爱的 '.$username.' :您æˆåŠŸåŠ å…¥äº† '.$TS_SITE['site_title'].'。在éµå®ˆæœ¬ç«™çš„è§„å®šçš„åŒæ—¶ï¼Œäº«å—您的愉快之旅å§!'); + + //注销邀请ç å¹¶å°†å…³æ³¨é‚€è¯·ç”¨æˆ· + if($TS_SITE['isinvite']=='1'){ + + //邀请ç ä¿¡æ¯ + $strInviteCode = $new['user']->find('user_invites',array( + 'invitecode'=>$invitecode, + )); + + $new['user']->create('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$strInviteCode['userid'], + )); + + //注销 + $new['user']->update('user_invites',array( + 'invitecode'=>$invitecode, + ),array( + 'isused'=>'1', + )); + } + + //å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']); + + //跳转 + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL); + + break; + + + //éªŒè¯æ‰‹æœºå· + case "verify": + + $userid = aac('user')->isLogin(); + + $strUser = $new['user']->getOneUser($userid); + + $title = 'éªŒè¯æ‰‹æœºå·'; + include template("phone_verify"); + + break; + + + case "verifydo": + + $js = tsIntval($_GET['js']); + + $userid = aac('user')->isLogin(); + + $phone = tsTrim($_POST['phone']); + + $authcode = strtolower($_POST['authcode']); + $phonecode = tsTrim($_POST['phonecode']); + + if($phone == '' || $authcode=='' || $phonecode==''){ + getJson('所有输入项都ä¸èƒ½ä¸ºç©º',$js); + } + + if(isPhone($phone)==false){ + getJson('手机å·è¾“入有误ï¼',$js); + } + + if ($authcode != $_SESSION['verify']) { + getJson('图片验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){ + getJson('手机验è¯ç è¾“入有误',$js); + } + + + $strUserInfo = $new['user']->find('user_info',array( + 'userid'=>$userid, + ),'phone'); + + if($strUserInfo['phone']!=$phone){ + + #åˆ¤æ–­æ‰‹æœºå·æ˜¯å¦å­˜åœ¨ + $isPhone = $new['user']->findCount('user',array( + 'phone'=>$phone, + )); + + if($isPhone){ + getJson('手机å·å·²å­˜åœ¨ï¼è¯·æ›´æ¢å…¶ä»–手机å·ï¼',$js); + } + + //getJson('æ‰‹æœºå·æœ‰è¯¯ï¼',$js); + } + + #æ›´æ–°æ‰‹æœºå· + $new['user']->update('user',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + )); + + #更新手机å·å’Œæ‰‹æœºéªŒè¯çŠ¶æ€ + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + 'isverifyphone'=>'1', + )); + + $_SESSION['tsuser']['isverifyphone']=1; + + getJson('手机å·éªŒè¯æˆåŠŸï¼',$js,2,SITE_URL); + + break; + + + //如果手机å·ä¸å¯¹ï¼Œå¯ä»¥ä¿®æ”¹æ‰‹æœºå· + case "setphone": + + $userid = aac('user')->isLogin(); + + $phone = tsTrim($_POST['phone']); + + if($phone==''){ + tsNotice('手机å·ä¸èƒ½ä¸ºç©ºï¼'); + } + + if(isPhone($phone)==false){ + tsNotice('手机å·è¾“入有误ï¼'); + } + + $isPhone = $new['user']->findCount('user',array( + 'phone'=>$phone, + )); + + if($isPhone>0){ + tsNotice('手机å·å·²ç»å­˜åœ¨ï¼Œè¯·æ›´æ¢å…¶ä»–手机å·ï¼'); + } + + $new['user']->update('user',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + )); + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + )); + + + tsNotice('手机å·ä¿®æ”¹æˆåŠŸï¼'); + + break; + + + //ä¿®æ”¹æˆæ–°æ‰‹æœºå· + case "editphone": + + $js = tsIntval($_GET['js']); + + $userid = aac('user')->isLogin(); + + $phone = tsTrim($_POST['phone']); + + $authcode = strtolower($_POST['authcode']); + $phonecode = tsTrim($_POST['phonecode']); + + if($phone == '' || $authcode=='' || $phonecode==''){ + getJson('所有输入项都ä¸èƒ½ä¸ºç©º',$js); + } + + if(isPhone($phone)==false){ + getJson('手机å·è¾“入有误ï¼',$js); + } + + if ($authcode != $_SESSION['verify']) { + getJson('图片验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){ + getJson('手机验è¯ç è¾“入有误',$js); + } + + + $isPhone = $new['user']->findCount('user',array( + 'phone'=>$phone, + )); + + if($isPhone>0){ + getJson('手机å·å·²ç»å­˜åœ¨ï¼Œè¯·æ›´æ¢å…¶ä»–手机å·ï¼',$js); + } + + + $new['user']->update('user',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + )); + + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'phone'=>$phone, + 'isverifyphone'=>'1', + )); + + $_SESSION['tsuser']['isverifyphone']=1; + + getJson('手机å·ä¿®æ”¹æˆåŠŸï¼',$js,2,tsUrl('my','setting',array('ts'=>'email'))); + + break; + + + /** + * 通过手机å·é‡ç½®å¯†ç  + */ + case "resetpwd": + + $js = tsIntval($_GET['js']); + + + $phone = tsTrim($_POST['phone']); + $pwd = tsTrim($_POST['pwd']); + $authcode = strtolower($_POST['authcode']); + $phonecode = tsTrim($_POST['phonecode']); + + if($phone == '' || $pwd=='' || $authcode=='' || $phonecode==''){ + getJson('所有输入项都ä¸èƒ½ä¸ºç©º',$js); + } + + if(isPhone($phone)==false){ + getJson('手机å·è¾“入䏿­£ç¡®',$js); + } + + $strUser = $new['user']->find('user',array( + 'phone'=>$phone, + )); + + if($strUser==''){ + getJson("手机å·ä¸å­˜åœ¨ï¼Œä½ å¯èƒ½è¿˜æ²¡æœ‰æ³¨å†Œ^_^",$js); + } + + + if ($authcode != $_SESSION['verify']) { + getJson('图片验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){ + getJson('手机验è¯ç è¾“入有误',$js); + } + + $salt = md5(rand()); + + $new['user']->update('user',array( + 'userid'=>$strUser['userid'], + ),array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + )); + + + $new['user']->update('user_info',array( + 'userid'=>$strUser['userid'], + ),array( + 'phone'=>$strUser['phone'], + 'isverifyphone'=>'1', + )); + + $_SESSION['tsuser']['isverifyphone']=1; + + getJson('密ç ä¿®æ”¹æˆåŠŸï¼',$js,2,tsUrl('user','login')); + + break; + + +} \ No newline at end of file diff --git a/app/user/action/plogin.php b/app/user/action/plogin.php new file mode 100644 index 0000000..3aac206 --- /dev/null +++ b/app/user/action/plogin.php @@ -0,0 +1,63 @@ + 0) { + header('Location: '.SITE_URL);exit; +} + +switch($ts){ + case "": + + $title = '手机验è¯ç ç™»å½•'; + include template("plogin"); + break; + + case "do": + + $js = tsIntval($_GET['js']); + $phone = tsTrim($_POST['email']); + $authcode = strtolower($_POST['authcode']); + $phonecode = tsTrim($_POST['phonecode']); + + if($phone=='' || $phonecode==''){ + getJson('所有输入项都ä¸èƒ½ä¸ºç©ºï¼',$js); + } + + if(isPhone($phone)==false) getJson('手机å·è¾“入有误ï¼',$js); + + #éªŒè¯æ‰‹æœºéªŒè¯ç  + if(aac('pubs')->verifyPhoneCode($phone,$phonecode)==false){ + getJson('手机验è¯ç è¾“入有误ï¼',$js); + } + + #æ‰‹æœºå·æ˜¯å¦å­˜åœ¨ + $strUser = $new['user']->find('user',array( + 'phone'=>$phone, + )); + + if($strUser){ + + $new['user']->login($strUser['userid'],$phone); + + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL); + + + }else{ + + $new['user']->register($phone); + + } + + //跳转 + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL); + + break; + +} \ No newline at end of file diff --git a/app/user/action/plugin.php b/app/user/action/plugin.php new file mode 100644 index 0000000..8f32f6a --- /dev/null +++ b/app/user/action/plugin.php @@ -0,0 +1,13 @@ + 0) { + header('Location: '.SITE_URL);exit; +} + +if($TS_SITE['isinvite']==2){ + tsNotice('æš‚ä¸å¼€æ”¾ç”¨æˆ·æ³¨å†Œï¼'); +} + +#å¾®ä¿¡å…¬ä¼—å·æŽˆæƒ +if(isWeixin()==true && $TS_SITE['is_weixin']==1){ + $config = [ + 'app_id' => $TS_SITE['weixin_appid'], + 'oauth' => [ + 'scopes' => ['snsapi_userinfo'], + 'callback' => SITE_URL.'index.php?app=user&ac=wxlogin', + ], + ]; + $app = Factory::officialAccount($config); + $oauth = $app->oauth; + $oauth->redirect()->send(); + exit(); +} + +//用户注册 +switch($ts){ + case "": + + #如果网站åªé‡‡ç”¨æ‰‹æœºå·æ³¨å†Œï¼Œå°±è·³è½¬åˆ°æ‰‹æœºå·æ³¨å†Œ + if($TS_SITE['regtype']==1){ + header('Location: '.tsUrl('user','phone'));exit; + } + + //邀请用户ID + $fuserid = tsIntval($_GET['fuserid']); + if($fuserid){ + $strFuser = $new['user']->getSimpleUser($fuserid); + } + + $title = '注册'; + + include template("register"); + break; + + case "do": + + //用于JSæäº¤éªŒè¯ + $js = tsIntval($_GET['js']); + + $email = tsTrim($_POST['email']); + $pwd = tsTrim($_POST['pwd']); + $repwd = tsTrim($_POST['repwd']); + $username = t($_POST['username']); + + $fuserid = tsIntval($_POST['fuserid']); + + $authcode = strtolower(tsTrim($_POST['authcode'])); + + + + #äººæœºéªŒè¯ + $vaptcha_token = tsTrim($_POST['vaptcha_token']); + $vaptcha_server = tsTrim($_POST['vaptcha_server']); + if ($TS_SITE['is_vaptcha']) { + $strVt = vaptcha($vaptcha_token,0,$vaptcha_server); + if($strVt['success']==0) { + getJson('äººæœºéªŒè¯æœªé€šè¿‡ï¼',$js); + } + } + + //检测垃圾EmailåŽç¼€ + $arrEmail = explode('@',$email); + + $emails = array( + 'chacuo.net', + 'mail.ru', + 'yandex.ru', + 'yandex.com', + '027168.net', + '027168.com', + ); + + if(in_array($arrEmail[1],$emails)){ + getJson('ç¦æ­¢è¯¥é‚®ç®±æ³¨å†Œï¼',$js); + } + + + /*ç¦æ­¢ä»¥ä¸‹IP用户登陆或注册*/ + /* + $arrIp = aac('system')->antiIp(); + if(in_array(getIp(),$arrIp)){ + getJson('ä½ çš„IP已被é”定,暂无法登录ï¼',$js); + } + */ + + //是å¦å¼€å¯é‚€è¯·æ³¨å†Œ + if($TS_SITE['isinvite']=='1'){ + + $invitecode = tsTrim($_POST['invitecode']); + + if($invitecode == '') getJson('邀请ç ä¸èƒ½ä¸ºç©ºï¼',$js); + + $codeNum = $new['user']->findCount('user_invites',array( + 'invitecode'=>$invitecode, + 'isused'=>0, + )); + + if($codeNum == 0) getJson('邀请ç å·²ç»è¢«ä½¿ç”¨/或者ä¸å­˜åœ¨ï¼Œè¯·æ›´æ¢å…¶ä»–邀请ç ï¼',$js); + + } + + if($email=='' || $pwd=='' || $repwd=='' || $username==''){ + getJson('所有必选项都ä¸èƒ½ä¸ºç©ºï¼',$js); + } + + if(valid_email($email) == false){ + getJson('Email邮箱输入有误',$js); + } + + #Email过滤 + $is_anti_email = $new['user']->find('anti_email',array( + 'email'=>$email, + )); + if($is_anti_email>0){ + getJson('éžæ³•æ“作ï¼',$js); + } + + + #验è¯Email验è¯ç  + if($TS_SITE['isverify']){ + $emailcode = tsTrim($_POST['emailcode']); + if(aac('pubs')->verifyEmailCode($email,$emailcode)==false){ + getJson('Email验è¯ç è¾“入有误',$js); + } + } + + #判断Email是å¦å­˜åœ¨ + $isEmail = $new['user']->findCount('user',array( + 'email'=>$email, + )); + + if($isEmail > 0){ + getJson('Emailå·²ç»æ³¨å†Œ',$js); + } + + if($pwd != $repwd){ + getJson('两次输入密ç ä¸æ­£ç¡®ï¼',$js); + } + + if(count_string_len($username) < 4 || count_string_len($username) > 20){ + getJson('å§“å长度必须在4å’Œ20之间',$js); + } + + #ç”¨æˆ·åæ•æ„Ÿè¯ + $username = antiWord ($username,1); + $username = str_replace('.','',$username); + + #åˆ¤æ–­ç”¨æˆ·åæ˜¯å¦å­˜åœ¨ + $isUserName = $new['user']->findCount('user_info',array( + 'username'=>$username, + )); + + if($isUserName > 0){ + getJson('用户åå·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªç”¨æˆ·åï¼',$js); + } + + if($TS_SITE['isauthcode']){ + if ($authcode != $_SESSION['verify']) { + getJson('验è¯ç è¾“å…¥æœ‰è¯¯ï¼Œè¯·é‡æ–°è¾“å…¥ï¼', $js); + } + } + + + $new['user']->register($email,$username,$pwd,$fuserid,$invitecode); + + + //å¯¹ç§¯åˆ†è¿›è¡Œå¤„ç† + aac('user')->doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']); + + //跳转 + getJson('登录æˆåŠŸï¼',$js,2,SITE_URL); + + + break; + +} \ No newline at end of file diff --git a/app/user/action/resetpwd.php b/app/user/action/resetpwd.php new file mode 100644 index 0000000..cd421d2 --- /dev/null +++ b/app/user/action/resetpwd.php @@ -0,0 +1,81 @@ +findCount('user',array( + 'email'=>$email, + 'resetpwd'=>$resetpwd, + )); + + if($email=='' || $resetpwd==''){ + tsNotice("ä½ åº”è¯¥åŽ»ç«æ˜Ÿç”Ÿæ´»å•¦ï¼"); + }elseif($userNum == 0){ + tsNotice("ä½ åº”è¯¥åŽ»ç«æ˜Ÿç”Ÿæ´»å•¦ï¼"); + }else{ + + $title = 'é‡è®¾å¯†ç '; + include template("resetpwd"); + + } + + break; + + + case "do": + + $js = tsIntval($_GET['js']); + + $email = tsTrim($_POST['email']); + $pwd = tsTrim($_POST['pwd']); + $repwd = tsTrim($_POST['repwd']); + + $resetpwd = tsTrim($_POST['resetpwd']); + + + + if($email=='' || $pwd=='' || $repwd=='' || $resetpwd==''){ + getJson("所有输入项都ä¸èƒ½ä¸ºç©ºï¼",$js); + } + + if(valid_email($email)==false){ + getJson('Emailè¾“å…¥ä¸æ­£ç¡®',$js); + } + + $userNum = $new['user']->findCount('user',array( + 'email'=>$email, + 'resetpwd'=>$resetpwd, + )); + + if($userNum == '0'){ + getJson("ä½ åº”è¯¥åŽ»ç«æ˜Ÿç”Ÿæ´»å•¦ï¼",$js); + } + + $salt = md5(rand()); + + $new['user']->update('user',array( + 'email'=>$email, + ),array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + 'resetpwd'=>'', + )); + + + getJson("密ç ä¿®æ”¹æˆåŠŸ^_^",$js); + + + + break; + +} diff --git a/app/user/action/role.php b/app/user/action/role.php new file mode 100644 index 0000000..52e4e89 --- /dev/null +++ b/app/user/action/role.php @@ -0,0 +1,7 @@ +findAll('user_role'); + +$title = '角色'; +include template('role'); \ No newline at end of file diff --git a/app/user/action/signin.php b/app/user/action/signin.php new file mode 100644 index 0000000..9a24c74 --- /dev/null +++ b/app/user/action/signin.php @@ -0,0 +1,39 @@ +signin()){ + echo 1;exit; + }else{ + echo 0;exit; + } + break; + + + case "ajax": + + $strSign = $new['user']->find('sign',array( + 'userid'=>$userid, + 'addtime'=>date('Y-m-d'), + )); + + $strScore = $new['user']->find('user_score',array( + 'app'=>'user', + 'action'=>'signin', + 'mg'=>'', + 'ts'=>'', + )); + + include template('signin_ajax'); + break; + +} \ No newline at end of file diff --git a/app/user/action/space.php b/app/user/action/space.php new file mode 100644 index 0000000..4c463fc --- /dev/null +++ b/app/user/action/space.php @@ -0,0 +1,30 @@ +findAll('group_user',array( + 'userid'=>$userid, +)); + +if(is_array($arrGroupUser)){ + foreach($arrGroupUser as $key=>$item){ + $arrGroup[] = aac('group')->getOneGroup($item['groupid']); + } +} + + +//留言 +$arrGuest = $new['user']->findAll('user_gb',array( + 'touserid'=>$strUser['userid'], +),'addtime desc',null,10); + +foreach($arrGuest as $key=>$item){ + $arrGuest[$key]['content'] = tsDecode($item['content']); + $arrGuest[$key]['user']=$new['user']->getSimpleUser($item['userid']); +} + +$title = $strUser['username']; +include template("space"); diff --git a/app/user/action/system.php b/app/user/action/system.php new file mode 100644 index 0000000..c1329ae --- /dev/null +++ b/app/user/action/system.php @@ -0,0 +1,5 @@ +$strUser['userid'],'page'=>'')); +$lstart = $page*30-30; + +$arrTopic = $new['user']->findAll('topic',array( + 'userid'=>$strUser['userid'], +),'addtime desc',null,$lstart.',30'); + +$topicNum = $new['user']->findCount('topic',array( + 'userid'=>$strUser['userid'], +)); +$pageUrl = pagination($topicNum, 30, $page, $url); + +$title = $strUser['username'].'的帖å­'; +include template('topic'); \ No newline at end of file diff --git a/app/user/action/userinfo.php b/app/user/action/userinfo.php new file mode 100644 index 0000000..75020e6 --- /dev/null +++ b/app/user/action/userinfo.php @@ -0,0 +1,36 @@ +isUser($userid)==false){ + + header("HTTP/1.1 404 Not Found"); + header("Status: 404 Not Found"); + $title = '404'; + include pubTemplate("404"); + exit; + +} + +$strUser = $new['user']->getOneUser($userid); + +//是å¦å…³æ³¨ +if($TS_USER['userid'] != '' && $TS_USER['userid'] != $strUser['userid']){ + $followNum = $db->once_num_rows("select * from ".dbprefix."user_follow where userid='".$TS_USER['userid']."' and touserid='$userid'"); + if($followNum > '0'){ + $strUser['isfollow'] = true; + }else{ + $strUser['isfollow'] = false; + } +}else{ + $strUser['isfollow'] = false; +} + +//他关注的用户 +$followUsers = $db->fetch_all_assoc("select touserid from ".dbprefix."user_follow where userid='$userid' order by addtime desc limit 12"); + +if(is_array($followUsers)){ + foreach($followUsers as $item){ + $arrFollowUser[] = $new['user']->getSimpleUser($item['touserid']); + } +} \ No newline at end of file diff --git a/app/user/action/verify.php b/app/user/action/verify.php new file mode 100644 index 0000000..0c0443d --- /dev/null +++ b/app/user/action/verify.php @@ -0,0 +1,189 @@ +isLogin(); + + $strUser = $new['user']->getOneUser($userid); + + $title = '用户验è¯'; + include template('verify'); + break; + + //å‘é€éªŒè¯ + case "post": + + $userid = aac('user')->isLogin(); + + $strUser = $new['user']->find('user_info',array( + 'userid'=>$userid, + )); + if($strUser['verifycode']==''){ + $verifycode = random(11); + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'verifycode'=>$verifycode, + )); + }else{ + $verifycode = $strUser['verifycode']; + } + + $email = $strUser['email']; + + //å‘é€é‚®ä»¶ + $subject = $TS_SITE['site_title'].'会员真实性验è¯'; + $content = '尊敬的'.$strUser['username'].',
      请点击以下链接进行会员验è¯ï¼š'.$TS_SITE['link_url'].'index.php?app=user&ac=verify&ts=do&email='.$email.'&verifycode='.$verifycode.''; + + $result = aac('mail')->postMail($email,$subject,$content); + + if($result == '0'){ + tsNotice("验è¯å¤±è´¥ï¼Œå¯èƒ½æ˜¯ä½ çš„Email邮箱错误哦^_^"); + }elseif($result == '1'){ + tsNotice("系统已ç»å‘你的邮箱å‘é€äº†éªŒè¯é‚®ä»¶ï¼Œè¯·å°½å¿«æŸ¥æ”¶^_^"); + } + break; + + //æŽ¥æ”¶éªŒè¯ + case "do": + $email = tsFilter($_GET['email']); + $verifycode = tsFilter($_GET['verifycode']); + + $verify = $new['user']->findCount('user_info',array( + 'email'=>$email, + 'verifycode'=>$verifycode, + )); + + if($verify > 0){ + + $new['user']->update('user_info',array( + 'email'=>$email, + ),array( + 'isverify'=>'1', + )); + + $_SESSION['tsuser']['isverify']=1; + + tsNotice("EmailéªŒè¯æˆåŠŸ!",'点击回首页ï¼',SITE_URL); + }else{ + tsNotice("Email验è¯å¤±è´¥ï¼"); + } + + break; + + //修改Email + case "setemail": + + $userid = aac('user')->isLogin(); + + + $strUser = $new['user']->getOneUser($userid); + + $email = tsTrim($_POST['email']); + + if($email=='') tsNotice('Emailä¸èƒ½ä¸ºç©ºï¼'); + + if(valid_email($email) == false) tsNotice('Email输入有误ï¼'); + + if($email != $strUser['email']){ + $emailNum = $new['user']->findCount('user',array( + 'email'=>$email, + )); + + if($emailNum > 0) tsNotice("Emailå¸å·å·²ç»å­˜åœ¨ï¼Œè¯·æ¢ä¸ªå…¶ä»–Emailå¸å·ï¼"); + + //æ›´æ–°Email + $new['user']->update('user',array( + 'userid'=>$strUser['userid'], + ),array( + 'email'=>$email, + )); + + //修改信æ¯å¹¶å°†ç”¨æˆ·è®¾ä¸ºæœªéªŒè¯çŠ¶æ€ + $new['user']->update('user_info',array( + 'userid'=>$strUser['userid'], + ),array( + 'email'=>$email, + 'isverify'=>'0', + )); + + tsNotice('Emailå¸å·ä¿®æ”¹æˆåŠŸï¼Œè¯·è¿”å›žé‡æ–°éªŒè¯ï¼'); + + }else{ + tsNotice('æ–°Emailå¸å·ä¸èƒ½å’Œæ—§Emailå¸å·ä¸€æ ·ï¼'); + } + + break; + + //å¿…é¡»ä¸Šä¼ å¤´åƒ + case "face": + + $userid = aac('user')->isLogin(); + + $strUser = $new['user']->getOneUser($userid); + + $_SESSION['tsuser']['face'] = $strUser['face']; + + $title = '上传头åƒ'; + include template('verify_face'); + break; + + case "facedo": + + $userid = aac('user')->isLogin(); + + if($_FILES['picfile']){ + + //上传 + $arrUpload = tsUpload($_FILES['picfile'],$userid,'user',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>$arrUpload['path'], + 'face'=>$arrUpload['url'], + 'uptime'=>time(), + )); + + #æœ¬åœ°å›¾ç‰‡éªŒè¯ + if($TS_SITE['file_upload_type']=='0' || $TS_SITE['file_upload_type']==''){ + $filesize=abs(filesize('uploadfile/user/'.$arrUpload['url'])); + if($filesize<=0){ + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>'', + 'face'=>'', + )); + tsNotice('上传头åƒå¤±è´¥ï¼è¯·è”系网站管ç†å‘˜å¤„ç†ï¼'); + }elseif($filesize>1048576){ + #é™åˆ¶å¤´åƒå›¾ç‰‡1M以内 + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>'', + 'face'=>'', + )); + tsNotice('请选择1M以内的头åƒå›¾ç‰‡'); + } + } + + tsDimg($arrUpload['url'],'user','120','120',$arrUpload['path']); + + header('Location: '.tsUrl('user','verify',array('ts'=>'face'))); + + + }else{ + tsNotice('头åƒä¿®æ”¹å¤±è´¥'); + } + + } + + break; +} \ No newline at end of file diff --git a/app/user/action/wxlogin.php b/app/user/action/wxlogin.php new file mode 100644 index 0000000..58e7377 --- /dev/null +++ b/app/user/action/wxlogin.php @@ -0,0 +1,181 @@ + $TS_SITE['weixin_appid'], + 'secret' => $TS_SITE['weixin_appsecret'], +]; + +$app = Factory::officialAccount($config); +$oauth = $app->oauth; + +// èŽ·å– OAuth 授æƒç»“æžœç”¨æˆ·ä¿¡æ¯ +$user = $oauth->user(); + +// $user å¯ä»¥ç”¨çš„æ–¹æ³•: +// $user->getId(); // 对应微信的 OPENID +// $user->getNickname(); // 对应微信的 nickname +// $user->getName(); // 对应微信的 nickname +// $user->getAvatar(); // 头åƒç½‘å€ +// $user->getOriginal(); // 原始API返回的结果 +// $user->getToken(); // access_token, 比如用于地å€å…±äº«æ—¶ä½¿ç”¨ + +if($user->getToken() && $user->getId()){ + + $openid = $user->getId(); + + $access_token = $user->getToken(); + + $strOpen = $new['user']->find('user_open',array( + 'sitename'=>'weixin', + 'openid'=>$openid, + )); + + //10天更æ¢ä¸€æ¬¡access_token + if(time()-10*86400>$strOpen['uptime']){ + $new['user']->update('user_open',array( + 'sitename'=>'weixin', + 'openid'=>$openid, + ),array( + 'access_token'=>$access_token, + 'uptime'=>time(), + )); + } + + + if($strOpen['userid']){ + + + /* + $userid = $strOpen['userid']; + $username = $user->getNickname(); + $userface = $user->getAvatar(); + + + //æ›´æ–°ç”¨æˆ·å¤´åƒ + if($userface!='' && $userface!='/0'){ + //1000个图片一个目录 + $menu2=intval($userid/1000); + $menu1=intval($menu2/1000); + $menu = $menu1.'/'.$menu2; + $photo = $userid.'.jpg'; + $photos = $menu.'/'.$photo; + $dir = 'uploadfile/user/'.$menu; + $dfile = $dir.'/'.$photo; + createFolders($dir); + if(!is_file($dfile)){ + $img = file_get_contents($userface); + file_put_contents($dfile,$img); + }; + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>$menu, + 'face'=>$photos, + )); + } + */ + + //更新登录时间 + $new['user']->update('user_info',array( + 'userid'=>$strOpen['userid'], + ),array( + //'username'=>$username, + 'ip'=>getIp(), //更新登录ip + 'uptime'=>time(), //更新登录时间 + )); + + + //用户sessionä¿¡æ¯ + $sessionData = $new['user']->sessionData($strOpen['userid']); + $_SESSION['tsuser'] = $sessionData; + + if($_COOKIE['wx_jump']){ + header("Location: ".$_COOKIE['wx_jump']); + }else{ + header("Location: ".SITE_URL); + } + + exit; + + }else{ + + + $salt = md5(rand()); + + $pwd = random(5,0); + + $userid = $new['user']->create('user',array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + 'email'=>$openid, + 'phone'=>$openid, + )); + + $username = $user->getNickname(); + $userface = $user->getAvatar(); + + //æ’å…¥ts_user_info + $new['user']->create('user_info',array( + 'userid' => $userid, + 'username' => $username, + 'email' => $openid, + 'phone' => $openid, + 'ip' => getIp(), + 'addtime' => time(), + 'uptime' => time(), + )); + + //æ’å…¥ts_user_open + $new['user']->create('user_open',array( + 'userid'=>$userid, + 'sitename'=>'weixin', + 'openid' => $openid, + 'access_token'=>$access_token, + 'uptime'=>time(), + )); + + //æ›´æ–°ç”¨æˆ·å¤´åƒ + if($userface!='' && $userface!='/0'){ + //1000个图片一个目录 + $menu2=intval($userid/1000); + $menu1=intval($menu2/1000); + $menu = $menu1.'/'.$menu2; + $photo = $userid.'.jpg'; + $photos = $menu.'/'.$photo; + $dir = 'uploadfile/user/'.$menu; + $dfile = $dir.'/'.$photo; + createFolders($dir); + if(!is_file($dfile)){ + $img = file_get_contents($userface); + file_put_contents($dfile,$img); + }; + $new['user']->update('user_info',array( + 'userid'=>$userid, + ),array( + 'path'=>$menu, + 'face'=>$photos, + )); + } + + //å‘é€ç³»ç»Ÿæ¶ˆæ¯(æ­å–œæ³¨å†ŒæˆåŠŸ) + $msg_userid = '0'; + $msg_touserid = $userid; + $msg_content = '亲爱的微信用户 '.$username.' :您æˆåŠŸåŠ å…¥äº† ' + .$TS_SITE['site_title'].'在éµå®ˆæœ¬ç«™çš„è§„å®šçš„åŒæ—¶ï¼Œäº«å—您的愉快之旅å§!'; + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content); + + //用户sessionä¿¡æ¯ + $sessionData = $new['user']->sessionData($userid); + $_SESSION['tsuser'] = $sessionData; + + if($_COOKIE['wx_jump']){ + header("Location: ".$_COOKIE['wx_jump']); + }else{ + header("Location: ".SITE_URL); + } + exit; + } +} \ No newline at end of file diff --git a/app/user/class.user.php b/app/user/class.user.php new file mode 100644 index 0000000..4fba9f5 --- /dev/null +++ b/app/user/class.user.php @@ -0,0 +1,828 @@ +find('user_info',array( + 'userid'=>$userid, + ),'userid,ugid,username,email,path,face,isadmin,signin,isverify,isverifyphone,uptime'); + + return array( + 'userid' => $strUserInfo['userid'], + 'ugid' => $strUserInfo['ugid'], + 'username' => $strUserInfo['username'], + 'email' => $strUserInfo['email'], + 'face'=>$this->getUserFace($strUserInfo), + 'isadmin' => $strUserInfo['isadmin'], + 'signin' =>$strUserInfo['signin'], + 'isverify'=>$strUserInfo['isverify'], + 'isverifyphone'=>$strUserInfo['isverifyphone'], + 'uptime' => $strUserInfo['uptime'], + ); + + } + + + /** + * 用户登录 + * + * @param [type] $userid + * @param string $phone + * @return void + */ + public function login($userid,$phone=''){ + + $this->update('user_info',array( + 'userid'=>$userid, + ),array( + 'uptime'=>time(), + )); + + #清空验è¯ç  + if($phone){ + $this->update('phone_code',array( + 'phone'=>$phone, + ),array( + 'code'=>'', + )); + } + + //用户sessionä¿¡æ¯ + $sessionData = $this->sessionData($userid); + + $_SESSION['tsuser'] = $sessionData; + + //更新登录时间,用作自动登录 + $autologin = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); + $this->update('user_info',array( + 'userid'=>$userid, + ),array( + 'ip'=>getIp(), //更新登录ip + 'autologin'=>$autologin, + 'uptime'=>time(), //更新登录时间 + )); + + //è®°ä½ç™»å½•Cookie,根æ®ç”¨æˆ·Email和最åŽç™»å½•æ—¶é—´ + setcookie("ts_email", $sessionData['email'], time()+2592000,'/'); + setcookie("ts_autologin", $autologin, time()+2592000,'/'); + + } + + /** + * 用户注册 + * + * @param [type] $email + * @param string $username + * @param string $pwd + * @param integer $fuserid + * @return void + */ + public function register($email,$username='',$pwd='',$fuserid=0,$invitecode='',$islogin=0){ + + $salt = md5(rand()); + + if($pwd=='') $pwd = random(6); + + $userid = $this->create('user',array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + 'email'=>$email, + 'phone'=>$email, + )); + + if($username=='') $username = 'TS'.$userid; + + #EmailéªŒè¯ + $isverify = 0; + if(valid_email($email)==true && $GLOBALS['TS_SITE']['isverify']){ + $isverify = 1; + #清空Email验è¯ç  + $this->update('email_code',array( + 'email'=>$email, + ),array( + 'code'=>'', + )); + } + + #æ‰‹æœºéªŒè¯ + $isverifyphone = 0; + if(isPhone($email)==true){ + $isverifyphone = 1; + #清空手机验è¯ç  + $this->update('phone_code',array( + 'phone'=>$email, + ),array( + 'code'=>'', + )); + } + + //æ’å…¥ç”¨æˆ·ä¿¡æ¯ + $this->create('user_info',array( + 'userid' => $userid, + 'fuserid' => intval($fuserid), + 'ugid' => 3, + 'username' => $username, + 'email' => $email, + 'phone' => $email, + 'ip' => getIp(), + 'isverify'=>$isverify, + 'isverifyphone'=>$isverifyphone, + 'addtime' => time(), + 'uptime' => time(), + )); + + //默认加入å°ç»„ + if($GLOBALS['TS_APP']['isgroup']){ + $arrGroup = explode(',',$GLOBALS['TS_APP']['isgroup']); + if($arrGroup){ + foreach($arrGroup as $key=>$item){ + $groupUserNum = $this->findCount('group_user',array( + 'userid'=>$userid, + 'groupid'=>$item, + )); + if($groupUserNum == 0){ + $this->create('group_user',array( + 'userid'=>$userid, + 'groupid'=>$item, + 'addtime'=>time(), + )); + //统计更新 + $count_user = $this->findCount('group_user',array( + 'groupid'=>$item, + )); + + $this->update('group',array( + 'groupid'=>$item, + ),array( + 'count_user'=>$count_user, + )); + } + } + } + } + + + if($islogin==0){ + + //用户sessionä¿¡æ¯ + $sessionData = $this->sessionData($userid); + + //用户sessionä¿¡æ¯ + $_SESSION['tsuser'] = $sessionData; + } + + + //å‘逿¶ˆæ¯ + aac('message')->sendmsg(0,$userid,'亲爱的 '.$username.' :您æˆåŠŸåŠ å…¥äº† '.$GLOBALS['TS_SITE']['site_title'].'。在éµå®ˆæœ¬ç«™çš„è§„å®šçš„åŒæ—¶ï¼Œäº«å—您的愉快之旅å§!'); + + //注销邀请ç å¹¶å°†å…³æ³¨é‚€è¯·ç”¨æˆ· + if($GLOBALS['TS_SITE']['isinvite']=='1' && $invitecode){ + + //邀请ç ä¿¡æ¯ + $strInviteCode = $this->find('user_invites',array( + 'invitecode'=>$invitecode, + )); + + $this->create('user_follow',array( + 'userid'=>$userid, + 'touserid'=>$strInviteCode['userid'], + )); + + //注销 + $this->update('user_invites',array( + 'invitecode'=>$invitecode, + ),array( + 'isused'=>'1', + )); + } + + + return $userid; + + } + + + /** + * 获å–ç”¨æˆ·å¤´åƒ + * @param $strUser + * @return string + */ + function getUserFace($strUser){ + if($strUser['face']){ + $strFace = tsXimg($strUser['face'],'user',120,120,$strUser['path'],1); + + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + $strFace .= '&v='.$strUser['uptime']; + }else{ + $strFace .= '?v='.$strUser['uptime']; + } + + }else{ + $strFace = SITE_URL.'public/images/user_large.jpg'; + } + return $strFace; + } + + /** + * èŽ·å–æœ€æ–°ä¼šå‘˜ + */ + function getNewUser($num){ + $arrUser = $this->findAll('user_info',null,'addtime desc','userid,username,face,path,addtime,uptime',$num); + foreach($arrUser as $key=>$item){ + $arrUser[$key]['face'] = $this->getUserFace($item); + } + return $arrUser; + } + + //èŽ·å–æ´»è·ƒä¼šå‘˜ + public function getHotUser($num){ + $arrUser = $this->findAll('user_info',null,'uptime desc','userid,username,face,path,addtime,uptime',$num); + foreach($arrUser as $key=>$item){ + $arrUser[$key]['face'] = $this->getUserFace($item); + } + return $arrUser; + } + + //最多关注的用户 + public function getFollowUser($num){ + $arrUser = $this->findAll('user_info',null,'count_followed desc','userid,username,face,path,count_followed,addtime,uptime',$num); + foreach($arrUser as $key=>$item){ + $arrUser[$key]['face'] = $this->getUserFace($item); + } + return $arrUser; + } + + //最多积分的用户 + public function getScoreUser($num){ + $arrUser = $this->findAll('user_info',null,'count_score desc','userid,username,face,path,count_score,addtime,uptime',$num); + foreach($arrUser as $key=>$item){ + $arrUser[$key]['face'] = $this->getUserFace($item); + } + return $arrUser; + } + + #获å–简å•çš„ç”¨æˆ·ä¿¡æ¯ + function getSimpleUser($userid){ + $strUser = $this->find('user_info',array( + 'userid'=>$userid, + ),'userid,username,face,path,signed,allscore,uptime'); + if($strUser){ + $strUser['face'] = $this->getUserFace($strUser); + $strUser['signed'] = tsTitle($strUser['signed']); + $strUser['rolename'] = $this->getRole($strUser['allscore']); + return $strUser; + }else{ + return ''; + } + } + + //获å–ä¸€ä¸ªç”¨æˆ·çš„ä¿¡æ¯ + function getOneUser($userid){ + + $strUser = $this->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser){ + + $strUser['username'] = tsTitle($strUser['username']); + $strUser['email'] = tsTitle($strUser['email']); + $strUser['phone'] = tsTitle($strUser['phone']); + $strUser['province'] = tsTitle($strUser['province']); + $strUser['city'] = tsTitle($strUser['city']); + $strUser['signed'] = tsTitle($strUser['signed']); + $strUser['about'] = tsTitle($strUser['about']); + $strUser['address'] = tsTitle($strUser['address']); + + $strUser['face'] = $this->getUserFace($strUser); + + $strUser['rolename'] = $this->getRole($strUser['allscore']); + + }else{ + $strUser = ''; + } + + return $strUser; + } + + //用户是å¦å­˜åœ¨ + public function isUser($userid){ + + $isUser = $this->findCount('user',array('userid'=>$userid)); + + if($isUser == 0){ + return false; + }else{ + return true; + } + + } + + + /** + * @param int $js + * @param string $userkey + * @return int + */ + public function isLogin($js=0, $userkey=''){ + + $userid = tsIntval($_SESSION['tsuser']['userid']); + + if($js && $userid==0 && $userkey==''){ + getJson('你还没有登录',$js); + } + + #通过userkey返回userid + if($js && $userid==0 && $userkey){ + $userid = $this->getUserIdByUserKey($userkey); + return $userid; + } + + if($userid>0){ + if($this->isUser($userid)){ + return $userid; + }else{ + header("Location: ".tsUrl('user','login')); + exit; + } + }else{ + header("Location: ".tsUrl('user','login')); + exit; + } + } + + + + //æ ¹æ®ç”¨æˆ·ç§¯åˆ†èŽ·å–用户角色 + public function getRole($score){ + global $tsMySqlCache; + $arrRole = fileRead('data/user_role.php'); + + if($arrRole==''){ + $arrRole = $tsMySqlCache->get('user_role'); + } + + foreach($arrRole as $key=>$item){ + if($score > $item['score_start'] && $score <= $item['score_end'] || $score > $item['score_start'] && $item['score_end']==0 || $score >=0 && $score <= $item['score_end']){ + return $item['rolename']; + } + } + } + + /** + * 增加积分 + * $userid 用户ID + * $scorename 积分åå­— + * $score 积分 + * @issx 上线é™åˆ¶0é™åˆ¶1ä¸é™åˆ¶ + */ + public function addScore($userid,$scorename,$score,$issx=0){ + if($userid && $scorename && $score){ + + + #计算当天已ç»èŽ·å¾—çš„ç§¯åˆ† + $starttime = strtotime(date('Y-m-d 00:00:01')); + $endtime = strtotime(date('Y-m-d 23:59:59')); + $strDayScore = $this->db->once_fetch_assoc("select SUM(score) as dayscore from ".dbprefix."user_score_log where `userid`='$userid' and `status`='0' and `addtime`>='$starttime' and `addtime`<='$endtime'"); + + #ç”¨æˆ·æ¯æ—¥èŽ·å¾—ç§¯åˆ†ä¸Šé™ + if($strDayScore['dayscore']<$GLOBALS['TS_SITE']['dayscoretop'] || $issx==1){ + + //添加积分记录 + $this->create('user_score_log',array( + 'userid'=>$userid, + 'scorename'=>$scorename, + 'score'=>$score, + 'status'=>0, + 'addtime'=>time(), + )); + + //计算总积分 + $strUser = $this->find('user_info',array( + 'userid'=>$userid, + )); + + $strAllScore = $this->db->once_fetch_assoc("select SUM(score) as allscore from ".dbprefix."user_score_log where `userid`='$userid' and `status`='0'"); + + $this->update('user_info',array( + 'userid'=>$userid, + ),array( + 'allscore'=>$strAllScore['allscore'], + 'count_score'=>$strUser['count_score']+$score, + )); + + + } + + + } + } + + /* + * å‡åŽ»ç§¯åˆ† + */ + public function delScore($userid,$scorename,$score){ + if($userid && $scorename && $score){ + + //计算总积分 + $strUser = $this->find('user_info',array( + 'userid'=>$userid, + )); + + if($strUser['count_score']>=$score){ + + //添加积分记录 + $this->create('user_score_log',array( + 'userid'=>$userid, + 'scorename'=>$scorename, + 'score'=>$score, + 'status'=>1, + 'addtime'=>time(), + )); + + $this->update('user_info',array( + 'userid'=>$userid, + ),array( + 'count_score'=>$strUser['count_score']-$score, + )); + + return true; + + }else{ + + return false; + + } + + + } + } + + /** + * 处ç†ç§¯åˆ† + * + * @param [type] $app + * @param [type] $ac + * @param string $mg 指å‘åŽå°ç®¡ç†æ–‡ä»¶(用于åŽå°æ“作得积分处ç†) + * @param string $api 指å‘APIæŽ¥å£æ–‡ä»¶(用于API接å£å¾—积分处ç†) + * @param string $ts + * @param integer $uid 指定用户ID + * @param integer $isday 是å¦ä¸€å¤©åªç»™ä¸€æ¬¡ç§¯åˆ†ï¼Œé»˜è®¤0å¦1是 + * @return void + */ + function doScore($app,$ac,$mg='',$api='',$ts='',$uid=0,$isday=0){ + $userid = tsIntval($_SESSION['tsuser']['userid']); + if($uid) $userid=$uid; + $strScore = $this->find('user_score',array( + 'app'=>$app, + 'action'=>$ac, + 'mg'=>$mg, + 'api'=>$api, + 'ts'=>$ts, + )); + + if($strScore && $userid){ + if($strScore['status']=='0'){ + if($isday==1){ + //èŽ·å–æœ€æ–°å¾—一æ¡ç§¯åˆ†è®°å½• + $strScoreLog = $this->find('user_score_log',array( + 'userid'=>$userid, + 'scorename'=>$strScore['scorename'], + ),null,'addtime desc'); + if(($strScoreLog && date('Y-m-d H:i:s',$strScoreLog['addtime'])addScore($userid,$strScore['scorename'],$strScore['score']); + } + }else{ + //0加积分 + $this->addScore($userid,$strScore['scorename'],$strScore['score']); + } + }elseif($strScore['status']=='1'){ + //1å‡ç§¯åˆ† + $this->delScore($userid,$strScore['scorename'],$strScore['score']); + } + } + } + + //åˆ é™¤ç”¨æˆ·ä¸€åˆ‡æ•°æ® + function toEmpty($userid){ + + $strUser = $this->find('user_info',array( + 'userid'=>$userid, + ),'userid,email,phone,face'); + + #ç¦ç”¨ç”¨æˆ·Emailè´¦å· + $this->replace('anti_email',array( + 'email'=>$strUser['email'], + ),array( + 'email'=>$strUser['email'], + 'addtime'=>date('Y-m-d H:i:s'), + )); + + #ç¦ç”¨ç”¨æˆ·æ‰‹æœºå· + $this->replace('anti_phone',array( + 'phone'=>$strUser['phone'], + ),array( + 'phone'=>$strUser['phone'], + 'addtime'=>date('Y-m-d H:i:s'), + )); + + #ç”¨æˆ·å¤´åƒ + if($strUser['face']){ + + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + deleteAliOssFile('uploadfile/user/'.$strUser['face']); + }else{ + unlink('uploadfile/user/'.$strUser['photo']); + tsDimg($strUser['face'],'user','120','120',$strUser['path']); + } + + } + + #ç”¨æˆ·ç›¸å…³æ•°æ® + $this->delete('user',array('userid'=>$userid)); + $this->delete('user_info',array('userid'=>$userid)); + $this->delete('user_follow',array('userid'=>$userid)); + $this->delete('user_follow',array('touserid'=>$userid)); + $this->delete('user_gb',array('userid'=>$userid)); + $this->delete('user_gb',array('touserid'=>$userid)); + $this->delete('user_open',array('userid'=>$userid)); + $this->delete('user_score_log',array('userid'=>$userid)); + + #文章 + $arrArticle = $this->findAll('article',array( + 'userid'=>$userid, + )); + foreach($arrArticle as $key=>$item){ + aac('article')->deleteArticle($item); + } + $this->delete('article_user',array('userid'=>$userid)); + + #è‰ç¨¿ç®± + $this->delete('draft',array('userid'=>$userid)); + + #编辑器上传的文件 + $arrEditor = $this->findAll('editor',array( + 'userid'=>$userid, + )); + foreach($arrEditor as $key=>$item){ + unlink('uploadfile/editor/'.$item['url']); + } + $this->delete('editor',array('userid'=>$userid)); + + #å°ç»„ + $this->delete('topic',array('userid'=>$userid)); + $this->delete('group_user',array('userid'=>$userid)); + + //attach + $this->delete('attach',array('userid'=>$userid)); + $this->delete('attach_album',array('userid'=>$userid)); + + //message + $this->delete('message',array('userid'=>$userid)); + $this->delete('message',array('touserid'=>$userid)); + + //photo + $this->delete('photo',array('userid'=>$userid)); + $this->delete('photo_album',array('userid'=>$userid)); + + //tag + $this->delete('tag_user_index',array('userid'=>$userid)); + + //weibo + $this->delete('weibo',array('userid'=>$userid)); + + //活动ts_event + $this->delete('event',array('userid'=>$userid)); + $this->delete('event_user',array('userid'=>$userid)); + + //问答ts_ask + $this->delete('ask',array('userid'=>$userid)); + $this->delete('ask_comment',array('userid'=>$userid)); + $this->delete('ask_comment_op',array('userid'=>$userid)); + + #删除评论ts_comment + $this->delete('comment',array('userid'=>$userid)); + #删除点赞ts_love + $this->delete('love',array('userid'=>$userid)); + + } + + + //销æ¯å‰å°session退出登陆 + function logout(){ + unset($_SESSION['tsuser']); + session_destroy(); + setcookie("ts_email", '', time()+3600,'/'); + setcookie("ts_autologin", '', time()+3600,'/'); + } + + //用户签到 + function signin(){ + + $userid = tsIntval($GLOBALS['TS_USER']['userid']); + + $zuotian = date('Y-m-d',strtotime("-1 day")); + + $jintian = date('Y-m-d'); + + + $zuotianSign = $this->find('sign',array( + 'userid'=>$userid, + 'addtime'=>$zuotian, + )); + + $jintianSign = $this->find('sign',array( + 'userid'=>$userid, + 'addtime'=>$jintian, + )); + + if($jintianSign==''){ + + if($zuotianSign==''){ + $this->create('sign',array( + 'userid'=>$userid, + 'num'=>1, + 'addtime'=>$jintian, + )); + }else{ + + $this->create('sign',array( + 'userid'=>$userid, + 'num'=>$zuotianSign['num']+1, + 'addtime'=>$jintian, + )); + + } + + //加积分 + $this->doScore('user','signin'); + + return true; + + }else{ + return false; + } + } + + + /* + * 判断是å¦å…许用户å‘布内容 + */ + public function isPublisher(){ + $publisher = $GLOBALS['TS_SITE']['publisher']; + $userid = tsIntval($GLOBALS['TS_USER']['userid']); + + if($publisher){ + + $ispublisher = $this->findCount('user_info',array( + 'userid'=>$userid, + $publisher=>1, + )); + + if($ispublisher){ + return true; + }else{ + return false; + } + + }else{ + return true; + } + + } + + + /** + * 通过 userid èŽ·å– userkey + * @param $userid + * @return bool|string + */ + public function getUserKeyByUserId($userid){ + include 'thinksaas/class.crypt.php'; + $crypt= new crypt(); + return $crypt->encrypt($userid,$GLOBALS['TS_SITE']['site_pkey']); + } + + /** + * 通过userkey获å–userid + * @param $userkey + */ + public function getUserIdByUserKey($userkey){ + include 'thinksaas/class.crypt.php'; + $crypt= new crypt(); + $userid = $crypt->decrypt($userkey,$GLOBALS['TS_SITE']['site_pkey']); + + $isUser = $this->findCount('user',array( + 'userid'=>$userid, + )); + + if($isUser == 0){ + + echo json_encode(array( + + 'status'=> 0, + 'msg'=> 'éžæ³•æ“作', + 'data'=> '', + + )); + exit; + + }else{ + + return $userid; + + } + } + + /** + * ç»Ÿè®¡ç”¨æˆ·å…³æ³¨æ•°å’Œç²‰ä¸æ•° + * + * @param [type] $userid + * @return void + */ + public function countFollowFans($userid){ + + //关注数 + $count_follow = $this->findCount('user_follow',array( + 'userid'=>$userid, + )); + + //ç²‰ä¸æ•° + $count_followed = $this->findCount('user_follow',array( + 'touserid'=>$userid, + )); + + $this->update('user_info',array( + 'userid'=>$userid, + ),array( + 'count_follow'=>$count_follow, + 'count_followed'=>$count_followed, + )); + + } + + /** + * 获å–匿å用户ID + * + * @return void + */ + public function getNimingId(){ + $email = 'null@null.com'; + $strUser = $this->find('user',array( + 'email'=>$email, + )); + if($strUser){ + $userid = $strUser['userid']; + }else{ + $salt = md5(rand()); + $pwd = random(6); + $userid = $this->create('user',array( + 'pwd'=>md5($salt.$pwd), + 'salt'=>$salt, + 'email'=>$email, + 'phone'=>$email, + )); + //æ’å…¥ç”¨æˆ·ä¿¡æ¯ + $this->create('user_info',array( + 'userid' => $userid, + 'fuserid' => 0, + 'ugid' => 3, + 'username' => '匿å用户', + 'email' => $email, + 'phone' => $email, + 'ip' => getIp(), + 'isverify'=>1, + 'isverifyphone'=>1, + 'addtime' => time(), + 'uptime' => time(), + )); + } + return $userid; + } + + + + //æžæž„函数 + public function __destruct(){ + + } + +} \ No newline at end of file diff --git a/app/user/config.php b/app/user/config.php new file mode 100644 index 0000000..59127e3 --- /dev/null +++ b/app/user/config.php @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/app/user/html/admin/group_list.html b/app/user/html/admin/group_list.html new file mode 100644 index 0000000..94fb01c --- /dev/null +++ b/app/user/html/admin/group_list.html @@ -0,0 +1,73 @@ +{php include pubTemplate("header_admin")} +
      + {php include template("admin/menu");} + + +
      +
      + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + {loop $arrGroup $key $item} + + + + {if !in_array($item['ugid'],array(1,2,3,4))} + + + + + + + + + {else} + + + + + + + + {/if} + + + + {/loop} + + + + + + +
      UGID组åä»‹ç»æ“作
      {$item['ugid']} + + + 删除 +
      {$item['ugid']}{tsTitle($item['ugname'])}{tsTitle($item['uginfo'])} + +
      +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/guestbook_list.html b/app/user/html/admin/guestbook_list.html new file mode 100644 index 0000000..d6769a0 --- /dev/null +++ b/app/user/html/admin/guestbook_list.html @@ -0,0 +1,29 @@ +{php include pubTemplate("header_admin")} +
      + {php include template("admin/menu");} +
      {$pageUrl}
      + + + + + + + + + + + + + + {loop $arrGuestbook $key $item} + + {/loop} + + + + + + +
      iduseridtouseridcontentaddtimeæ“作
      {$item['id']}{$item['userid']}{$item['touserid']}{php echo tsTitle($item['content'])}{$item['addtime']}删除
      +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/menu.html b/app/user/html/admin/menu.html new file mode 100644 index 0000000..357ade8 --- /dev/null +++ b/app/user/html/admin/menu.html @@ -0,0 +1,33 @@ + + + +
      \ No newline at end of file diff --git a/app/user/html/admin/options.html b/app/user/html/admin/options.html new file mode 100644 index 0000000..c0105e2 --- /dev/null +++ b/app/user/html/admin/options.html @@ -0,0 +1,30 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + +
      + + + + + + + + + + + + + + + + + + +
      APPå称:
      APP介ç»ï¼š
      APP关键è¯ï¼š
      APP是å¦å¯ç”¨:å¯ç”¨ 关闭
      默认加入å°ç»„ : (输入å°ç»„çš„IDï¼Œä¸æ˜¯å°ç»„å称,多个请用,å·åˆ†å¼€ï¼Œå¦‚1,2,3)
      ç¦æ­¢æ³¨å†Œç”¨æˆ·å : ï¼ˆç¦æ­¢ç”¨æˆ·æ³¨å†Œçš„用户å,多个用|分割)
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/permissions.html b/app/user/html/admin/permissions.html new file mode 100644 index 0000000..46e2676 --- /dev/null +++ b/app/user/html/admin/permissions.html @@ -0,0 +1,177 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + + + +
      + {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
      + + +
      + + +
      å‰å°æƒé™
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + {/if} + + + + +
      查看用户空间: + +
      查看用户帖å­ï¼š + +
      查看用户å°ç»„: + +
      查看用户文章: + +
      查看用户粉ä¸ï¼š + +
      查看用户关注: + +
      查看用户留言: + +
      å‘布留言: + +
      + + + + {if $ugid==1 || $ugid==2} +
      åŽå°æƒé™
      + + + + + + + + + + + + +
      文章é…置: + +
      æƒé™é…置: + +
      + {/if} + + + +
      APIæƒé™
      + + + + + + + + + + + +
      查看用户: + +
      + + + + + + +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/role_list.html b/app/user/html/admin/role_list.html new file mode 100644 index 0000000..fbfdca3 --- /dev/null +++ b/app/user/html/admin/role_list.html @@ -0,0 +1,36 @@ +{php include pubTemplate("header_admin")} + + + +
      + {php include template("admin/menu");} +
      + + + + + + + + + + + {loop $arrRole $key $item} + + {/loop} + + + + + + + + +
      角色å称起始积分结æŸç§¯åˆ†
      点击增加角色(说明:如需删除æŸä¸€é¡¹ï¼Œè¯·å°†è¦åˆ é™¤çš„æŸé¡¹æ¸…ç©ºæäº¤å³å¯ã€‚)
      +
      +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/score_list.html b/app/user/html/admin/score_list.html new file mode 100644 index 0000000..ca4bee9 --- /dev/null +++ b/app/user/html/admin/score_list.html @@ -0,0 +1,89 @@ +{php include pubTemplate("header_admin")} +
      + {php include template("admin/menu");} +
      + + + + + + + + + + + + + + + + + + + + + + + + + + {loop $arrScore $key $item} + + + + + + + + + + + + + + + {/loop} + + + + + + + +
      积分åç§°key分数对应app对应action对应mg对应api对应ts状æ€è®¾ç½®
      {$item['scorename']}{$item['scorekey']} + + + | + 删除 +
      +
      +
      +
      添加积分节点
      +
      + + + + + + + + + + + +
      积分å称:
      积分KEY:
      积分:
      对应APP:
      对应ACTION:
      对应MG:
      对应API:
      对应TS:
      状æ€ï¼šåŠ ç§¯åˆ† å‡ç§¯åˆ†
      +
      +
      +
      +
      积分使用帮助
      +

      1ã€åœ¨éœ€è¦ä½¿ç”¨ç§¯åˆ†çš„php代ç å¤„加:

      + + aac('user')->doScore({php echo '$app'},{php echo '$ac'},{php echo '$mg'},{php echo '$api'},{php echo '$ts'},{php echo '$uid'}) + +

      以上代ç å…·ä½“使用方å¼è¯·çœ‹app/user/class.user.php中doScore方法

      +

      2ã€æ ¹æ®å¯¹åº”çš„app,action,mg,api,ts,uidå˜é‡é…置好积分

      +
      +
      {php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/score_send.html b/app/user/html/admin/score_send.html new file mode 100644 index 0000000..ed3e1bb --- /dev/null +++ b/app/user/html/admin/score_send.html @@ -0,0 +1,19 @@ +{php include pubTemplate("header_admin")} +
      + {php include template("admin/menu");} +
      +
      + + + + + + +
      用户ID:
      积分数:
      状æ€: + 加 + å‡ (å‡åŽ»çš„ç§¯åˆ†ä¸å¯ä»¥å¤§äºŽç”¨æˆ·å‰©ä½™ç§¯åˆ†ï¼Œå¦åˆ™å‡åˆ†æ“ä½œä¸æˆåŠŸ) +
      积分说明:
      +
      +
      +
      +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/user_add.html b/app/user/html/admin/user_add.html new file mode 100644 index 0000000..47900d2 --- /dev/null +++ b/app/user/html/admin/user_add.html @@ -0,0 +1,66 @@ +{php include pubTemplate("header_admin")} +
      + +{php include template("admin/menu");} + + + + +
      + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      è´¦å·(Email/手机å·): + +
      用户å: + + + +
      密ç ï¼š + + + +
      + +
      +
      + + +
      + + + + +
      + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/user_list.html b/app/user/html/admin/user_list.html new file mode 100644 index 0000000..ed6b89f --- /dev/null +++ b/app/user/html/admin/user_list.html @@ -0,0 +1,157 @@ +{php include pubTemplate("header_admin")} +
      + +{php include template("admin/menu");} + +
      +
      + + + + +UID: 用户å: + +一键删除被åœç”¨ç”¨æˆ· + + +
      + +
      + +
      {$pageUrl}
      + + + + + + + + + + + + + + + + + + + + + + + + + + {loop $arrAllUser $key $item} + + + + + + + + + + + + + + + + + + + + {/loop} + + + + + + + + + +
      UID邀请ID用户组Email手机å·å§“åæ³¨å†Œæ—¶é—´ç™»å½•IPæ¥è‡ªæ“作
      {$item[userid]}{$item[fuserid]} + + + + + + {$item[email]} + + + {if $TS_USER['userid']==1 && $item['userid']!=1} +
      + {if $item['isverify']==1} + å·²éªŒè¯ [å–æ¶ˆ] + {else} + æœªéªŒè¯ [验è¯] + {/if} +
      + {/if} + +
      + + {$item['phone']} + + {if $TS_USER['userid']==1 && $item['userid']!=1} +
      + {if $item['isverifyphone']==1} + å·²éªŒè¯ [å–æ¶ˆ] + {else} + æœªéªŒè¯ [验è¯] + {/if} +
      + {/if} + +
      {$item[username]}{php echo date('Y-m-d H:i:s',$item[addtime])}{$item['ip']}{$item['comefrom']} + + + {if $item[isrenzheng]=='0'}[手工认è¯]{else}[å–æ¶ˆè®¤è¯]{/if} + + + [明细] + + {if $item['isadmin']==0} + + {if $item[isenable]=='0'}[åœç”¨]{else}[å¯ç”¨]{/if} + {/if} + + {if $item['userid']!=1} + [修改密ç ] + [清除头åƒ] + {/if} + + {if $TS_USER['userid']==1 && $item['userid']!=1} + [删除] + + {if $item['isadmin']==0} + [设为管ç†å‘˜] + {elseif $item['isadmin']==1} + [å–æ¶ˆç®¡ç†å‘˜] + {/if} + + {/if} + +
      + +
      + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/user_pwd.html b/app/user/html/admin/user_pwd.html new file mode 100644 index 0000000..d49f7ef --- /dev/null +++ b/app/user/html/admin/user_pwd.html @@ -0,0 +1,20 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + +
      + + + + +
      Email:{$strUser['email']}
      密ç ï¼š
      + + +
      + + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/admin/user_view.html b/app/user/html/admin/user_view.html new file mode 100644 index 0000000..677531e --- /dev/null +++ b/app/user/html/admin/user_view.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + +
      + + + + + + + + + + + + + + + + + + + + + + + +
      字段信æ¯
      用户å:{$strUser['username']}
      登录账å·ï¼š{$strUser['email']}
      手机å·ï¼š{if isPhone($strUser['phone'])}{$strUser['phone']}{else}æ— {/if}
      ç­¾å:{$strUser['signed']}
      åšå®¢ï¼š{$strUser['blog']}
      关于:{$strUser['about']}
      注册日期:{php echo date('Y-m-d H:i:s',$strUser['addtime'])}
      上次访问:{php echo date('Y-m-d H:i:s',$strUser['uptime'])}
      上次访问 IP: {$strUser['ip']}
      积分: {$strUser['count_score']}
      + + + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/user/html/area.html b/app/user/html/area.html new file mode 100644 index 0000000..9f25bba --- /dev/null +++ b/app/user/html/area.html @@ -0,0 +1,3 @@ +{loop $arrArea $key $item} + +{/loop} \ No newline at end of file diff --git a/app/user/html/article.html b/app/user/html/article.html new file mode 100644 index 0000000..1e79f9a --- /dev/null +++ b/app/user/html/article.html @@ -0,0 +1,123 @@ +{php include pubTemplate("header")} + +
      + + + {template menu} + +
      + +
      + + + + + + + + {loop $arrArticle $key $item} + +
      +
      + + + {if $item['photo']} +
      + +
      + + + +
      +
      + + + +
      {$item[user][username]} å‘表于 {$item[addtime]}
      + +
      {if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概è¦{/if} (查看全文)
      + + + + + +
      + +
      + 分类:{$item['cate']['catename']} +
      +
      + + {$item['count_view']} + {$item['count_comment']} + + +
      + +
      + + + + + + + +
      + +
      + + + {else} + + + +
      {$item['user']['username']} å‘表于 {$item['addtime']}
      + + {if $item['score']==0} +
      {if $item['gaiyao']}{$item['gaiyao']}{else}暂无概è¦{/if} (查看全文)
      + {/if} + + + + +
      + +
      + 分类:{$item['cate']['catename']} +
      +
      + {$item['count_view']} + {$item['count_comment']} +
      + +
      + + + + {/if} + +
      +
      + + {/loop} + + +
      {$pageUrl}
      + + + + + + + + + +
      + +
      + {template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/city.html b/app/user/html/city.html new file mode 100644 index 0000000..d21929b --- /dev/null +++ b/app/user/html/city.html @@ -0,0 +1,3 @@ +{loop $arrCity $key $item} + +{/loop} \ No newline at end of file diff --git a/app/user/html/collect.html b/app/user/html/collect.html new file mode 100644 index 0000000..43830dd --- /dev/null +++ b/app/user/html/collect.html @@ -0,0 +1,31 @@ +{php include pubTemplate("header")} + +
      + +
      +

      {$strUser['username']}

      +
      +
      +{template menu} + +
      +
      + +
      + +
      +
      {$pageUrl}
      +
      +
      + +
      +{template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/comment.html b/app/user/html/comment.html new file mode 100644 index 0000000..b56cf4f --- /dev/null +++ b/app/user/html/comment.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header")} + +
      + +
      +

      {$strUser['username']}

      +
      +
      +{template menu} + +
      + + + +
      +
      {$pageUrl}
      + + +
      +
      + +
      +{template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/follow.html b/app/user/html/follow.html new file mode 100644 index 0000000..98d012f --- /dev/null +++ b/app/user/html/follow.html @@ -0,0 +1,50 @@ +{php include pubTemplate("header")} + +
      + + + {template menu} + + +
      + +
      + +
      + + +
      + + +{if $arrUser} + +
      + +{loop $arrUser $key $item} +
      + {$item['username']} +
      +
      {$item[username]}
      +{/loop} +
      + +
      +
      {$pageUrl}
      + + {else} + +
      还没有关注任何人
      + + {/if} + +
      +
      +
      + +
      +{template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/followed.html b/app/user/html/followed.html new file mode 100644 index 0000000..87aece5 --- /dev/null +++ b/app/user/html/followed.html @@ -0,0 +1,52 @@ +{php include pubTemplate("header")} + +
      + + + {template menu} + + +
      + +
      + + + +
      +
      + + {if $arrUser} + +
      + +{loop $arrUser $key $item} +
      + {$item['username']} +
      +
      {$item[username]}
      +{/loop} + +
      + +
      +
      {$pageUrl}
      + + + {else} + +
      还没有任何粉ä¸
      + + {/if} + +
      +
      +
      + +
      +{template userinfo} +
      + + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/forgetpwd.html b/app/user/html/forgetpwd.html new file mode 100644 index 0000000..499fbf5 --- /dev/null +++ b/app/user/html/forgetpwd.html @@ -0,0 +1,163 @@ +{php include pubTemplate("header")} +
      + + + +
      +
      +
      + + + +
      +
      + + + + + + + + + + +
      + +
      + + +
      + + +
      + +
      + + 点击刷新验è¯ç  +
      +
      + + +
      + +
      + + +
      +
      获å–验è¯ç åŽè¯·ç™»å½•邮箱查看验è¯ç 
      +
      + + + + +
      + + +
      + + +
      + + +
      + + + + + + + + + + + +
      +
      + + + + + + + + + +
      +
      +
      + + + +
      + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/forgetpwd_phone.html b/app/user/html/forgetpwd_phone.html new file mode 100644 index 0000000..e3862db --- /dev/null +++ b/app/user/html/forgetpwd_phone.html @@ -0,0 +1,156 @@ +{php include pubTemplate("header")} +
      + + + +
      +
      +
      + + + +
      +
      + + + + + + + + + + + +
      + +
      + + +
      + +
      + +
      + + 点击刷新验è¯ç  +
      +
      + +
      + +
      + + +
      +
      + + +
      + + +
      + + +
      + + +
      + + + + + + + + +
      +
      + + + + + + + + + +
      +
      +
      + + + +
      + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/group.html b/app/user/html/group.html new file mode 100644 index 0000000..4736ff3 --- /dev/null +++ b/app/user/html/group.html @@ -0,0 +1,42 @@ +{php include pubTemplate("header")} + +
      + + + {template menu} + +
      +
      + + +
      +
      + + +{loop $arrGroupList $key $item} +
      +
      + +{$item[groupname]} + + + + +
      +
      +{$item[groupname]} {$item[count_user]}人加入 +

      {php echo t($item[groupdesc])}

      +
      +
      +{/loop} +
      +
      +
      + +
      +{template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/guestbook.html b/app/user/html/guestbook.html new file mode 100644 index 0000000..638c1e0 --- /dev/null +++ b/app/user/html/guestbook.html @@ -0,0 +1,102 @@ +{php include pubTemplate("header")} + +
      + + {template menu} + +
      +
      + + +
      +
      + + + + {if tsIntval($TS_USER['userid']) >0 && tsIntval($TS_USER['userid']) != $strUser['userid']} +
      + +
      + + + + + +
      + +
      + + + + +
      + {/if} +
      + + + + + + {if $arrGuestList} +
      +
        + + {loop $arrGuestList $key $item} +
      • + + + +
        +

        {$item['user']['username']} {$item['addtime']}

        +
        {$item['content']}
        + {if $item['reply']} +
        回å¤ï¼š{$item['reply']['content']}
        + {/if} + + +

        + + {if tsIntval($TS_USER['userid']) == $strUser['userid']} + å›žå¤ + 删除 + {/if} +

        + + +
        +
      • + {/loop} +
      +
      + +
      +
      {$pageUrl}
      + + {else} +
      暂无留言ï¼
      + {/if} + +
      +
      +
      + +
      + {template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/index.html b/app/user/html/index.html new file mode 100644 index 0000000..b4018c9 --- /dev/null +++ b/app/user/html/index.html @@ -0,0 +1,112 @@ +{php include pubTemplate("header")} + +
      + + + + + +
      +
      + +
      + +
      +
      用户积分榜积分
      +
        + {loop $arrScoreUser $key $item} + {if $key<='2'} +
      • +

        {$item['count_score']} + {$item['username']}

      • + {elseif $key >= '3'} +
      • {php echo $key+1}{$item['count_score']} + {$item['username']}
      • + {/if} + {/loop} +
      +
      + +
      + +
      +
      + + +
      + +
      +
      用户关注榜关注数
      +
        + {loop $arrFollowUser $key $item} + {if $key<='2'} +
      • +

        {$item['count_followed']} + {$item['username']}

      • + {elseif $key >= '3'} +
      • {php echo $key+1}{$item['count_followed']} + {$item['username']}
      • + {/if} + {/loop} +
      +
      + +
      + + +
      +
      + + +
      +
      +
      活跃用户时间
      +
        + {loop $arrHotUser $key $item} + {if $key<='2'} +
      • +

        {php echo getTime($item[uptime],time())} + {$item['username']}

      • + {elseif $key >= '3'} +
      • {php echo $key+1}{php echo getTime($item[uptime],time())} + {$item['username']}
      • + {/if} + {/loop} +
      +
      +
      + + +
      +
      + + +
      +
      +
      新用户时间
      +
        + {loop $arrNewUser $key $item} + {if $key<='2'} +
      • +

        {php echo getTime($item[addtime],time())} + {$item['username']}

      • + {elseif $key >= '3'} +
      • {php echo $key+1}{php echo getTime($item[addtime],time())} + {$item['username']}
      • + {/if} + {/loop} +
      +
      +
      + + +
      +
      + + + + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/invite.html b/app/user/html/invite.html new file mode 100644 index 0000000..f6b6f1d --- /dev/null +++ b/app/user/html/invite.html @@ -0,0 +1,58 @@ +{php include pubTemplate("header")} + +
      + +
      + +
      {$TS_SITE[site_title]}邀请ç 
      + +
      +
      物质匮ä¹ï¼Œä¸€ç é𾿱‚,今日您仅剩下 {$codeNum} 个邀请ç 
      + +{if $codeNum=='0'} + +{else} + +
      + +{loop $arrCode $key $item} +
      {$item['invitecode']}
      +{/loop} + +
      + +{/if} + + +
      + + + + + + + + + + + {loop $arrInviteUser $key $item} + + + + + + {/loop} + + + +
      用户ID用户å加入时间
      {$item['userid']}{$item['username']}{php echo date('Y-m-d H:i:s',$item['addtime'])}
      + + +
      + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/login.html b/app/user/html/login.html new file mode 100644 index 0000000..8c906f4 --- /dev/null +++ b/app/user/html/login.html @@ -0,0 +1,183 @@ +{php include pubTemplate("header")} + +
      + + +
      +
      +
      + + + + +
      +
      + + + +
      +
      用户登录
      + + + {if $TS_SITE['isplogin']==1} + + {/if} + + + +
      + +
      + + +
      +
      + + + + +
      +
      + + + + +
      +
      + +
      + +
      + +
      + + +
      + + + + + + + + +
      +
      + + +

      还没有注册? | 忘记密ç ï¼Ÿ

      + + +
      + {php doAction('user_login_footer')} +
      + + + + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/menu.html b/app/user/html/menu.html new file mode 100644 index 0000000..121e5bb --- /dev/null +++ b/app/user/html/menu.html @@ -0,0 +1,93 @@ + + + +
      +
      + + + +
      +
      + + +
      + {$strUser[username]} +
      + +

      {$strUser['username']} {if $strUser['isverify']==1}通过Email认è¯{else}未通过Email认è¯{/if} + + {if $strUser['isrenzheng']==1} + é€šè¿‡äººå·¥è®¤è¯ + {else} + æœªé€šè¿‡äººå·¥è®¤è¯ + {/if}

      + + +
      + {if $strUser['signed']}{$strUser['signed']}{else}懒的都ä¸å†™ç­¾å{/if} +
      + + + +
      +
      + + + +
      +
      + + +
      + {if $strUser[userid] != $TS_USER[userid]} + {if $strUser[isfollow]} + å–æ¶ˆå…³æ³¨ + {else} + 关注 + {/if} + + + {if $TS_USER} + 呿¶ˆæ¯ + {/if} + + + {/if} +
      + + +
      +
      + + + + + + + + + + +
      +
      + + + + diff --git a/app/user/html/message_add.html b/app/user/html/message_add.html new file mode 100644 index 0000000..bb351f3 --- /dev/null +++ b/app/user/html/message_add.html @@ -0,0 +1,75 @@ +{php include pubTemplate("header")} + + +
      + + + +
      +
      å‘é€çŸ­æ¶ˆæ¯
      +
      + + + +
      +
      +
      + + + + +
      + +
      + +
      +
      + {$strTouser[username]} {$strTouser['username']} +
      + +
      +
      + + +
      + +
      + + + +
      +
      + + +
      +
      + + + + + + + + 返回 + +
      +
      +
      + + + + + +
      +
      +
      + + + +
      +
      + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/phone.html b/app/user/html/phone.html new file mode 100644 index 0000000..bb24706 --- /dev/null +++ b/app/user/html/phone.html @@ -0,0 +1,208 @@ +{php include pubTemplate("header")} + +
      + +
      +
      +
      + + + + + +
      +
      + + + + + + {if $TS_APP[isregister]=='2'} +

      系统å‡çº§ä¸­ï¼Œæš‚时关闭用户注册ï¼

      +

      返回首页

      + {else} + + + +
      + + {if $TS_SITE['isinvite']=='1'} +
      + + +
      + {/if} + +
      + + +
      + +
      + + + + +
      + +
      + + +
      + +
      + + +
      + + + + +
      + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + + + +
      + + + + + +
      + + +
      + +
      + {php doAction('user_login_footer')} +
      + + {/if} + + + +
      +
      + + + + + + + + +
      + +
      +
      + + +
      + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/phone_verify.html b/app/user/html/phone_verify.html new file mode 100644 index 0000000..85a3536 --- /dev/null +++ b/app/user/html/phone_verify.html @@ -0,0 +1,160 @@ +{php include pubTemplate("header")} + +
      + +
      + +
      +
      + + + +
      +
      + + + + {if tsIntval($strUser['isverifyphone'])==0 && tsIntval($TS_SITE['isverifyphone'])==1} +
      æç¤ºï¼šä½ å¿…须通过手机å·éªŒè¯æ‰å¯ä»¥æ­£å¸¸ä½¿ç”¨æœ¬ç¤¾åŒº
      + {/if} + {if $strUser['isverifyphone']==1} +
      + 您已ç»é€šè¿‡æ‰‹æœºå·éªŒè¯ï¼çŽ°åœ¨å¯ä»¥éšä¾¿ç‚¹ç‚¹çœ‹çœ‹æˆ‘ä»¬çš„ç¤¾åŒºï¼ +
      + + {else} + + + +
      +
      + + +
      + +
      + +
      + +
      + + + + +
      + +
      + + +
      +
      +
      +
      + +
      + + (手机å·éªŒè¯é€šè¿‡åŽä¸‹æ¬¡å¯ä»¥ä½¿ç”¨æ‰‹æœºå·ç™»å½•社区) + +
      + + + + + {/if} + + +
      +
      + + + +
      +
      +
      + +
      + + + + + + + + + + + + +{php include pubTemplate("footer")} diff --git a/app/user/html/plogin.html b/app/user/html/plogin.html new file mode 100644 index 0000000..39285c8 --- /dev/null +++ b/app/user/html/plogin.html @@ -0,0 +1,155 @@ +{php include pubTemplate("header")} + +
      + + +
      +
      +
      + + + + +
      +
      + + + +
      +
      短信登录
      + +
      + +
      + + +
      +
      + + + + +
      + +
      + + + +
      +
      + +
      +
      + + 点击刷新验è¯ç  + +
      +
      + + +
      + +
      + + +
      +
      + +
      +
      + +
      +
      + +
      + + +
      + + + + + + + +
      +
      + + + +
      +
      + + + + + + +
      +
      +
      + + + + +
      + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/register.html b/app/user/html/register.html new file mode 100644 index 0000000..d3d349a --- /dev/null +++ b/app/user/html/register.html @@ -0,0 +1,260 @@ +{php include pubTemplate("header")} + +
      + +
      +
      +
      + + + + + +
      +
      + + + {if $strFuser} +
      +
      + +
      + +
      +
      æ‚¨å¥½ï¼æˆ‘是 {$strFuser['username']}。
      +
      我正在邀请您加入 {$TS_SITE['site_title']} ,欢迎æ¥å’Œæˆ‘一起交æµï¼
      +
      + +
      + +
      + + {/if} + + + + + + + + + + + {if $TS_APP[isregister]=='2'} +

      系统å‡çº§ä¸­ï¼Œæš‚时关闭用户注册ï¼

      +

      返回首页

      + {else} + + + +
      + + {if $TS_SITE['isinvite']=='1'} +
      + + +
      + {/if} + +
      + + +
      + +
      + + + + +
      + +
      + + +
      + +
      + + +
      + + + + {if $TS_SITE['is_vaptcha']} +
      + + +
      + +
      +
      +
      + + + + Vaptchaå¯åЍ䏭... +
      +
      +
      + + + +
      + +
      + +
      + {/if} + + + + {if $TS_SITE['isauthcode']} +
      + + +
      + {/if} + + + {if $TS_SITE['isverify']} +
      + +
      + + +
      +
      获å–验è¯ç åŽè¯·ç™»å½•邮箱查看验è¯ç 
      +
      + {/if} + + + + +
      + + + + + +
      + + +
      + +
      + {php doAction('user_login_footer')} +
      + + {/if} + + + +
      +
      + + + + + + + + +
      + +
      +
      + + +
      + + + + + + + + + + + + + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/resetpwd.html b/app/user/html/resetpwd.html new file mode 100644 index 0000000..a36e025 --- /dev/null +++ b/app/user/html/resetpwd.html @@ -0,0 +1,80 @@ +{php include pubTemplate("header")} + +
      + +
      + + + +
      +
      +
      + + + + +
      +
      + + + + + + +
      + + +
      + + +
      + +
      + + +
      + +
      + + +
      + + +
      + + + +
      + + +
      + + + +
      +
      + + + + + + + + + + +
      +
      +
      + + + + +
      + + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/role.html b/app/user/html/role.html new file mode 100644 index 0000000..07ae7b4 --- /dev/null +++ b/app/user/html/role.html @@ -0,0 +1,39 @@ +{php include pubTemplate("header")} + +
      + + + +
      +
      + + + + + + + + + + + +{loop $arrRole $key $item} + +{/loop} + + +
      角色å称开始积分结æŸç§¯åˆ†æƒé™
      {$item['rolename']}{$item['score_start']}{$item['score_end']}å³å°†å¼€æ”¾
      + + +
      +
      + +
      + +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/signin_ajax.html b/app/user/html/signin_ajax.html new file mode 100644 index 0000000..70385a1 --- /dev/null +++ b/app/user/html/signin_ajax.html @@ -0,0 +1,9 @@ +{if $strSign} +
      已连续签到
      +
      +
      {$strSign['num']}天
      +
      + +
      明日签到å¯é¢†{$strScore['score']}积分
      +
      连续签到有更多惊喜哦
      +{/if} \ No newline at end of file diff --git a/app/user/html/space.html b/app/user/html/space.html new file mode 100644 index 0000000..fbe229e --- /dev/null +++ b/app/user/html/space.html @@ -0,0 +1,50 @@ +{php include pubTemplate("header")} + +
      + + + + + + + {template menu} + + + +
      + +
      + + + +
      +
      + + +
      +
      UID:
      {$strUser['userid']}
      +
      性别:
      {$strUser['sex']}
      +
      自我介ç»ï¼š
      {if $strUser['about']}{$strUser['about']}{else}还没有介ç»{/if}
      +
      关注:
      {$strUser['count_follow']} 人
      +
      粉ä¸ï¼š
      {$strUser['count_followed']} 人
      +
      积分:
      {$strUser['count_score']}
      +
      + + + + +
      +
      + + + + +
      + +
      + {template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/system.html b/app/user/html/system.html new file mode 100644 index 0000000..4276d66 --- /dev/null +++ b/app/user/html/system.html @@ -0,0 +1,117 @@ + + + + + + + + + + + + + 系统管ç†ç™»å½• + + + + + + + + + + + + + + + + + + + + +
      +
      +
      +
      + + +
      + ThinkSAASåŽå°ç™»å½• +
      + +
      管ç†åŽå°ç™»å½•
      + +
      +
      + +
      +
      + + + + +
      +
      + + + + +
      + +
      + + + + + + + +
      + Copyright (C) {$TS_CF['info']['year']}-{php echo date('Y')} {$TS_CF['info']['name']} {$TS_CF['info']['version']} +
      + +
      +
      + +
      +
      +
      +
      +
      +
      + + + + + + + + + + \ No newline at end of file diff --git a/app/user/html/topic.html b/app/user/html/topic.html new file mode 100644 index 0000000..9b2fba0 --- /dev/null +++ b/app/user/html/topic.html @@ -0,0 +1,45 @@ +{php include pubTemplate("header")} + +
      + + + {template menu} + +
      + +
      + + + +
      + +
      + + +
      + +
      + +
      +
      {$pageUrl}
      +
      +
      +
      + +
      +{template userinfo} +
      + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/user/html/userinfo.html b/app/user/html/userinfo.html new file mode 100644 index 0000000..d8f99d4 --- /dev/null +++ b/app/user/html/userinfo.html @@ -0,0 +1,2 @@ + +{php doAction('gobad','300')} \ No newline at end of file diff --git a/app/user/html/verify.html b/app/user/html/verify.html new file mode 100644 index 0000000..d459919 --- /dev/null +++ b/app/user/html/verify.html @@ -0,0 +1,64 @@ +{php include pubTemplate("header")} + +
      + +
      + +
      +
      + + + +
      +
      + + + + {if tsIntval($strUser['isverify'])==0 && tsIntval($TS_SITE['isverify'])==1} +
      æç¤ºï¼šä½ å¿…须通过EmailéªŒè¯æ‰å¯ä»¥æ­£å¸¸ä½¿ç”¨æœ¬ç¤¾åŒº
      + {/if} + {if $strUser['isverify']==1} +
      + 您已ç»é€šè¿‡Email验è¯ï¼çŽ°åœ¨å¯ä»¥éšä¾¿ç‚¹ç‚¹çœ‹çœ‹æˆ‘ä»¬çš„ç¤¾åŒºï¼ +
      + + {else} + + + +
      +
      + + +
      + + 点击å‘é€éªŒè¯ + +
      + + +
      + + +
      + + + + +
      + + {/if} + + +
      +
      + + + +
      +
      +
      + +
      + +{php include pubTemplate("footer")} diff --git a/app/user/html/verify_face.html b/app/user/html/verify_face.html new file mode 100644 index 0000000..f6fff2d --- /dev/null +++ b/app/user/html/verify_face.html @@ -0,0 +1,75 @@ +{php include pubTemplate("header")} +
      + +
      + +
      +
      + + + +
      +
      + + + + {if $strUser['face']=='' && tsIntval($TS_SITE['isface'])==1} +
      æç¤ºï¼šä½ å¿…é¡»ä¸Šä¼ å¤´åƒæ‰å¯ä»¥æ­£å¸¸ä½¿ç”¨æœ¬ç¤¾åŒº
      + {/if} + + {if $strUser['path']} +
      + 您已ç»ä¸Šä¼ å¤´åƒï¼çŽ°åœ¨å¯ä»¥éšä¾¿ç‚¹ç‚¹çœ‹çœ‹æˆ‘ä»¬çš„ç¤¾åŒºï¼ +
      + {else} + + + + + +
      + + +
      + + +

      {$strUser['username']}

      + +
      + +
      + +
      + +
      + +
      æç¤ºï¼šè¯·é€‰æ‹©1M以内的头åƒå›¾ç‰‡
      + + +
      + +
      + +
      + +
      + + + + {/if} + + + + +
      +
      + + + +
      +
      +
      + +
      + +{php include pubTemplate("footer")} diff --git a/app/user/js/admin.js b/app/user/js/admin.js new file mode 100644 index 0000000..e69de29 diff --git a/app/user/js/extend.func.js b/app/user/js/extend.func.js new file mode 100644 index 0000000..51a9d4e --- /dev/null +++ b/app/user/js/extend.func.js @@ -0,0 +1,9 @@ +/*显示éšè—回å¤*/ +function reguest(userid,reid,username) +{ + $("#reguest").toggle('fast'); + $("#reguest textarea").val('@'+username+'#'); + $("#reguest #touserid").val(userid); + $("#reguest #reid").val(reid); + $("#reguest textarea").focus(); +} \ No newline at end of file diff --git a/app/user/skin/style.css b/app/user/skin/style.css new file mode 100644 index 0000000..05ee461 --- /dev/null +++ b/app/user/skin/style.css @@ -0,0 +1,486 @@ +.verify_email{width:500px;margin:0 auto;} +.verify_email h3{font-weight:bold;} + +.verify_face{width:500px;margin:0 auto;} +.verify_face h3{font-weight:bold;} + + +.invitecode{width:600px;margin:0 auto;} +.invitecode ul{} +.invitecode ul li{float:left;width:300px;font-size:14px;padding:10px 0;} + +/**框架CSS**/ + +.uinput{width:200px;padding: 3px 0 3px 0;font-size: 14px;} + +.utext{width:300px;height:50;border-color: #999999 #E1E1E1 #E1E1E1 #999999;border-style: solid;border-width: 1px; padding: 3px 0 3px 0;font-size: 14px;} + +.utable{} +.utable th{text-align:right;height:40px;} +.utable td{} +.blockquote { + line-height: 1.3; + margin: 0 0 10px; + padding: 5px 8px; +} + + +/*table olt*/ +.olt { + margin-bottom: 3px; + padding: 0; + width: 100%; + border: medium none; + border-collapse: collapse; + margin: 0; + border-spacing: 0; +} +.olt td { + border-bottom: 1px dashed #DDDDDD; + padding: 3px 3px 3px 0; +} +/*å³ä¾§ä¼šå‘˜åˆ—表*/ +.obu { + display: inline; + float: left; + margin: 0 0 10px; + width: 70px; +} +.obu dt { + height: 50px; + line-height: 16px; + margin: 0; + overflow: hidden; + text-align: center; +} +.obu dd { + margin: 0; + height: 30px; + overflow: hidden; + text-align: center; +} +.pl { + color: #666666; + font: 12px/150% Arial; + padding:10px 0; +} + +.pl2 { + color: #666666; + font: 14px/150% Arial; +} + +.mr5 { + margin-right: 5px; +} + +.color_gray, .color-gray { + color: #666666; +} + +.fright { + float: right; +} + + +/*邀请 by QiuJun*/ +.invites{} +.invites h2{font-size:14px;font-weight:bold;margin:20px 0 20px 0;color:#555555} +.invites p{line-height:25px;color:#999999;margin:0;} + +/*链接按钮*/ +.subab{ + background: #66873E; + color: #FFFFFF; + cursor: pointer; + padding: 10px 20px; + font-size:16px; + +} + + + +/*table olt*/ +.olt { + margin-bottom: 3px; + padding: 0; + width: 100%; + border: medium none; + border-collapse: collapse; + margin: 0; + border-spacing: 0; +} +.olt td { + border-bottom: 1px dashed #DDDDDD; + padding: 3px 3px 3px 0; +} + + + + +/*2011-06-20*/ +/*个人主页左侧*/ +#db-usr-profile { + height: 58px; + left: 0; + margin-bottom: 2em; + position: relative; + top: 0; + width: 100%; +} +#db-usr-profile .pic { + float: left; + margin-right: 12px; +} +#db-usr-profile .info { + float: left; + padding-top: 2px; +} +#db-usr-profile h1 { + padding: 0 0 4px; +} +#db-usr-profile .info ul li { + display: inline; + margin-right: 1em; +} +#review { + margin-bottom: 27px; +} +/*个人主页å³ä¾§*/ +#profile .userface { + float: left; + margin: 1px 10px 8px 0; +} + +fieldset, img { + border: 0 none; +} +.user-info { + color: #666666; +} +.user-opt { + clear: both; + padding: 8px 0; +} + +.user-group { + color: #666666; + display: none; + margin: 0 0 10px; +} + +.user-cs { + background: url("icon-ok.png") no-repeat scroll left center transparent; + display: inline-block; + padding: 0 0 0 15px; +} +.user-rs { + margin: 0 0 0 15px; +} + +.user-group-arrow { + background: url("icon-arrow-down-b.png") no-repeat scroll center center transparent; + border: 1px solid #FFFFFF; + cursor: pointer; + display: inline-block; + height: 17px; + margin: 0 0 0 -2px; + position: relative; + top: 5px; + width: 17px; +} + +.user-opt .user-group-arrow { + border-color: #FFF6EE; +} + +.a-btn, .a-btn-add, .a-btn-add-light, .a-btn-opt { + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 20px; + line-height: 20px; + overflow: hidden; +} +.a-btn:link, .a-btn:active, .a-btn:hover, .a-btn:visited, .a-btn-opt:link, .a-btn-opt:active, .a-btn-opt:hover, .a-btn-opt:visited { + background: none repeat scroll 0 0 #FFF3E7; + border: 1px solid #E7D7CA; + color: #797979; + outline: 0 none; + padding: 0 10px; +} + +.more-opt { + display: inline-block; +} +#divac { + clear: both; +} +.sep-line { + border-bottom: 1px solid #F5E9DB; + clear: both; + font-size: 0; + height: 0; + margin: 5px; + overflow: hidden; +} +.user-intro { + color: #666666; + overflow: hidden; + word-wrap: break-word; +} +.mbt { + clear: both; + margin: 0; + padding: 0; +} +.mbtrmini { + background: url("listdot.gif") no-repeat scroll 0 8px transparent; + border-bottom: 1px dashed #DDDDDD; + padding: 4px 0 4px 12px; +} +.quote { + background: url("quotel.gif") no-repeat scroll left 4px transparent; + margin: 8px 0 0 26px; + overflow: hidden; + padding: 0 24px 5px 15px; + width: auto; + word-wrap: break-word; +} +.quote span.inq { + background: url("quoter.gif") no-repeat scroll right bottom transparent; + color: #333333; + display: inline-block; + padding-right: 15px; +} +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} +#event { + margin-bottom: 10px; +} +.evt_short { + float: left; + margin-bottom: 10px; + width: 100%; +} +.actfromfri { + line-height: 1.6em; + padding: 0.6em 0; +} +.evt_short li { + line-height: 1.6em; +} +#group { + width: 100%; +} +/*å°ç»„*/ +.ob { + float: left; + margin: 0 0 10px; + text-align: center; + width: 70px; +} +.ob dt { + height: 50px; + margin: 0; + overflow: hidden; + text-align: center; +} +.ob dd { + height: 30px; + margin: 0; + overflow: hidden; + text-align: center; +} +.ob span { + white-space: nowrap; +} + +.mbtr { + border-bottom: 1px solid #EEEEEE; + margin: 5px 0; + min-height: 55px; + overflow: hidden; + padding: 5px 0; +} + +.bs li { + border-bottom: 1px dashed #DDDDDD; + margin: 0; + overflow: hidden; + padding: 4px 0; +} + +.spacetopic{} +.spacetopic table{} +.spacetopic tr td{border-bottom:dashed 1px #DDDDDD;padding:5px 0;} + + + +/*动æ€*/ +.mbtl { + float: left; + margin: 8px 7px 0 0; + padding: 0; + width: 55px; +} +.mbtr { + border-bottom: 1px solid #EEEEEE; + margin: 5px 0; + min-height: 55px; + overflow: hidden; + padding: 5px 0; +} +.pl { + color: #666666; + line-height: 1.5; +} +.broadsmr { + color: #999999; + padding: 5px 24px; +} +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} + +.quote { + background: url("http://t.douban.com/pics/quotel.gif") no-repeat scroll left 4px transparent; + margin: 8px 0 0 26px; + overflow: hidden; + padding: 0 24px 5px 15px; + width: auto; + word-wrap: break-word; +} +.quote .inq { + background: url("http://t.douban.com/pics/quoter.gif") no-repeat scroll right bottom transparent; + color: #333333; + display: inline-block; + padding-right: 15px; +} + +.broadimg { + border: 1px solid #DDDDDD; + float: right; + margin-left: 14px; +} + +.clearfix:after { + clear: both; + content: "."; + display: block; + height: 0; + visibility: hidden; +} + +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} +.timeline-album { + float: left; + margin: 8px 12px 8px 0; +} + +/*留言*/ +.guest{} +.guest img{float:left;width:50px;} +.guest form{margin-left:60px;} + +.glist{} +.glist ul, .glist ul li{list-style: none;margin:0;padding: 0;} +.glist ul{} +.glist ul li{border-bottom: 1px solid #EEEEEE;overflow: hidden;padding: 10px 0;} +.glist ul li img{float:left;} +.glist ul li .content{margin-left:60px;line-height:25px;} +.glist ul li .content p{padding:0px;margin:0;} + +/*å°ç»„列表*/ +.sub-item{ + border-bottom: 1px dashed #AAAAAA; + float: left; + margin: 0 2px 15px 0; + overflow: hidden; + width: 49%; + padding-bottom: 15px; +} +.sub-item .pic { + float: left; + display: table-cell; + vertical-align: top; + width: 48px; + overflow: hidden; +} +.sub-item .info { + color: #666666; + vertical-align: top; + word-wrap: break-word; + line-height:20px; + margin-left:60px; +} +.sub-item .pic img { + height: 48px; + width: 48px; +} +.sub-item p { + margin: 0; + height:60px;; + width:220px; + overflow:hidden; + +} + +/*帖å­åˆ—表*/ +.topic{} +.topic li{line-height:30px;} + + +/*排行榜页é¢*/ +.top10{} +.top10 dl{overflow: hidden;} +.top10 dl dd{margin-bottom:15px;margin-left: 0;} +.top10 dl dd .title{background:none repeat scroll 0 0 #F5F5F5;border:1px solid #EEEEEE;margin:0 8px;padding:10px;position:relative;} + +.top10 dl dd .title span{float:right;color:#999999;position:absolute;right:10px;} + +.top10 dl dd ul, .top10 dl dd ul li{list-style: none;padding:0;margin:0;} + +.top10 dl dd ul{border-top:1px solid #F5F5F5;margin:0 8px;background:#FFFFFF;} +.top10 dl dd ul li{border-color:#EEEEEE;border-style:solid;border-width:0 1px 1px;margin-bottom:0;padding:10px;clear:both;line-height:20px;word-wrap:break-word;overflow:hidden;} + +.top10 .avatar {float:left;margin-right:10px;} +.top10 .avatar img {height:36px;width:36px;} + + +.top10 li em {color:#999999;float:right;margin-left:8px;} + +.top10 li span {float:left;font-size:10px;height:14px;line-height:14px;margin:4px 8px 0 0;text-align:center;width:16px;} +.top10 li p{height:48px;margin:0;padding:0;} + +/*注册ã€ç™»é™†è¡¨æ ¼*/ +.subform{} +.subform th{font-size:14px;} +.subform input[type="text"], .subform input[type="email"], .subform input[type="password"]{height:30px;line-height:30px;font-size:14px;width:200px;} + + + + + + +.user_space_userinfo{overflow: hidden;} +.user_space_userinfo .photo{width:90px;float:left;} +.user_space_userinfo .info{margin-left:100px;} +.user_space_userinfo .info .sex{} +.user_space_userinfo .info .city{} +.user_space_userinfo .info .about{} + + +.user_space_right_follow{overflow: hidden} +.user_space_right_follow ul, .user_space_right_follow ul li{list-style: none;margin:0;padding:0;} +.user_space_right_follow ul{} +.user_space_right_follow ul .br{border-right:solid 1px #ddd;} +.user_space_right_follow ul li{float:left;padding:10px 20px;text-align:center} \ No newline at end of file diff --git a/app/user/skins/default/style.css b/app/user/skins/default/style.css new file mode 100644 index 0000000..05ee461 --- /dev/null +++ b/app/user/skins/default/style.css @@ -0,0 +1,486 @@ +.verify_email{width:500px;margin:0 auto;} +.verify_email h3{font-weight:bold;} + +.verify_face{width:500px;margin:0 auto;} +.verify_face h3{font-weight:bold;} + + +.invitecode{width:600px;margin:0 auto;} +.invitecode ul{} +.invitecode ul li{float:left;width:300px;font-size:14px;padding:10px 0;} + +/**框架CSS**/ + +.uinput{width:200px;padding: 3px 0 3px 0;font-size: 14px;} + +.utext{width:300px;height:50;border-color: #999999 #E1E1E1 #E1E1E1 #999999;border-style: solid;border-width: 1px; padding: 3px 0 3px 0;font-size: 14px;} + +.utable{} +.utable th{text-align:right;height:40px;} +.utable td{} +.blockquote { + line-height: 1.3; + margin: 0 0 10px; + padding: 5px 8px; +} + + +/*table olt*/ +.olt { + margin-bottom: 3px; + padding: 0; + width: 100%; + border: medium none; + border-collapse: collapse; + margin: 0; + border-spacing: 0; +} +.olt td { + border-bottom: 1px dashed #DDDDDD; + padding: 3px 3px 3px 0; +} +/*å³ä¾§ä¼šå‘˜åˆ—表*/ +.obu { + display: inline; + float: left; + margin: 0 0 10px; + width: 70px; +} +.obu dt { + height: 50px; + line-height: 16px; + margin: 0; + overflow: hidden; + text-align: center; +} +.obu dd { + margin: 0; + height: 30px; + overflow: hidden; + text-align: center; +} +.pl { + color: #666666; + font: 12px/150% Arial; + padding:10px 0; +} + +.pl2 { + color: #666666; + font: 14px/150% Arial; +} + +.mr5 { + margin-right: 5px; +} + +.color_gray, .color-gray { + color: #666666; +} + +.fright { + float: right; +} + + +/*邀请 by QiuJun*/ +.invites{} +.invites h2{font-size:14px;font-weight:bold;margin:20px 0 20px 0;color:#555555} +.invites p{line-height:25px;color:#999999;margin:0;} + +/*链接按钮*/ +.subab{ + background: #66873E; + color: #FFFFFF; + cursor: pointer; + padding: 10px 20px; + font-size:16px; + +} + + + +/*table olt*/ +.olt { + margin-bottom: 3px; + padding: 0; + width: 100%; + border: medium none; + border-collapse: collapse; + margin: 0; + border-spacing: 0; +} +.olt td { + border-bottom: 1px dashed #DDDDDD; + padding: 3px 3px 3px 0; +} + + + + +/*2011-06-20*/ +/*个人主页左侧*/ +#db-usr-profile { + height: 58px; + left: 0; + margin-bottom: 2em; + position: relative; + top: 0; + width: 100%; +} +#db-usr-profile .pic { + float: left; + margin-right: 12px; +} +#db-usr-profile .info { + float: left; + padding-top: 2px; +} +#db-usr-profile h1 { + padding: 0 0 4px; +} +#db-usr-profile .info ul li { + display: inline; + margin-right: 1em; +} +#review { + margin-bottom: 27px; +} +/*个人主页å³ä¾§*/ +#profile .userface { + float: left; + margin: 1px 10px 8px 0; +} + +fieldset, img { + border: 0 none; +} +.user-info { + color: #666666; +} +.user-opt { + clear: both; + padding: 8px 0; +} + +.user-group { + color: #666666; + display: none; + margin: 0 0 10px; +} + +.user-cs { + background: url("icon-ok.png") no-repeat scroll left center transparent; + display: inline-block; + padding: 0 0 0 15px; +} +.user-rs { + margin: 0 0 0 15px; +} + +.user-group-arrow { + background: url("icon-arrow-down-b.png") no-repeat scroll center center transparent; + border: 1px solid #FFFFFF; + cursor: pointer; + display: inline-block; + height: 17px; + margin: 0 0 0 -2px; + position: relative; + top: 5px; + width: 17px; +} + +.user-opt .user-group-arrow { + border-color: #FFF6EE; +} + +.a-btn, .a-btn-add, .a-btn-add-light, .a-btn-opt { + border-radius: 3px 3px 3px 3px; + display: inline-block; + height: 20px; + line-height: 20px; + overflow: hidden; +} +.a-btn:link, .a-btn:active, .a-btn:hover, .a-btn:visited, .a-btn-opt:link, .a-btn-opt:active, .a-btn-opt:hover, .a-btn-opt:visited { + background: none repeat scroll 0 0 #FFF3E7; + border: 1px solid #E7D7CA; + color: #797979; + outline: 0 none; + padding: 0 10px; +} + +.more-opt { + display: inline-block; +} +#divac { + clear: both; +} +.sep-line { + border-bottom: 1px solid #F5E9DB; + clear: both; + font-size: 0; + height: 0; + margin: 5px; + overflow: hidden; +} +.user-intro { + color: #666666; + overflow: hidden; + word-wrap: break-word; +} +.mbt { + clear: both; + margin: 0; + padding: 0; +} +.mbtrmini { + background: url("listdot.gif") no-repeat scroll 0 8px transparent; + border-bottom: 1px dashed #DDDDDD; + padding: 4px 0 4px 12px; +} +.quote { + background: url("quotel.gif") no-repeat scroll left 4px transparent; + margin: 8px 0 0 26px; + overflow: hidden; + padding: 0 24px 5px 15px; + width: auto; + word-wrap: break-word; +} +.quote span.inq { + background: url("quoter.gif") no-repeat scroll right bottom transparent; + color: #333333; + display: inline-block; + padding-right: 15px; +} +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} +#event { + margin-bottom: 10px; +} +.evt_short { + float: left; + margin-bottom: 10px; + width: 100%; +} +.actfromfri { + line-height: 1.6em; + padding: 0.6em 0; +} +.evt_short li { + line-height: 1.6em; +} +#group { + width: 100%; +} +/*å°ç»„*/ +.ob { + float: left; + margin: 0 0 10px; + text-align: center; + width: 70px; +} +.ob dt { + height: 50px; + margin: 0; + overflow: hidden; + text-align: center; +} +.ob dd { + height: 30px; + margin: 0; + overflow: hidden; + text-align: center; +} +.ob span { + white-space: nowrap; +} + +.mbtr { + border-bottom: 1px solid #EEEEEE; + margin: 5px 0; + min-height: 55px; + overflow: hidden; + padding: 5px 0; +} + +.bs li { + border-bottom: 1px dashed #DDDDDD; + margin: 0; + overflow: hidden; + padding: 4px 0; +} + +.spacetopic{} +.spacetopic table{} +.spacetopic tr td{border-bottom:dashed 1px #DDDDDD;padding:5px 0;} + + + +/*动æ€*/ +.mbtl { + float: left; + margin: 8px 7px 0 0; + padding: 0; + width: 55px; +} +.mbtr { + border-bottom: 1px solid #EEEEEE; + margin: 5px 0; + min-height: 55px; + overflow: hidden; + padding: 5px 0; +} +.pl { + color: #666666; + line-height: 1.5; +} +.broadsmr { + color: #999999; + padding: 5px 24px; +} +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} + +.quote { + background: url("http://t.douban.com/pics/quotel.gif") no-repeat scroll left 4px transparent; + margin: 8px 0 0 26px; + overflow: hidden; + padding: 0 24px 5px 15px; + width: auto; + word-wrap: break-word; +} +.quote .inq { + background: url("http://t.douban.com/pics/quoter.gif") no-repeat scroll right bottom transparent; + color: #333333; + display: inline-block; + padding-right: 15px; +} + +.broadimg { + border: 1px solid #DDDDDD; + float: right; + margin-left: 14px; +} + +.clearfix:after { + clear: both; + content: "."; + display: block; + height: 0; + visibility: hidden; +} + +.indentrec { + color: #333333; + line-height: 1.6em; + margin-left: 24px; +} +.timeline-album { + float: left; + margin: 8px 12px 8px 0; +} + +/*留言*/ +.guest{} +.guest img{float:left;width:50px;} +.guest form{margin-left:60px;} + +.glist{} +.glist ul, .glist ul li{list-style: none;margin:0;padding: 0;} +.glist ul{} +.glist ul li{border-bottom: 1px solid #EEEEEE;overflow: hidden;padding: 10px 0;} +.glist ul li img{float:left;} +.glist ul li .content{margin-left:60px;line-height:25px;} +.glist ul li .content p{padding:0px;margin:0;} + +/*å°ç»„列表*/ +.sub-item{ + border-bottom: 1px dashed #AAAAAA; + float: left; + margin: 0 2px 15px 0; + overflow: hidden; + width: 49%; + padding-bottom: 15px; +} +.sub-item .pic { + float: left; + display: table-cell; + vertical-align: top; + width: 48px; + overflow: hidden; +} +.sub-item .info { + color: #666666; + vertical-align: top; + word-wrap: break-word; + line-height:20px; + margin-left:60px; +} +.sub-item .pic img { + height: 48px; + width: 48px; +} +.sub-item p { + margin: 0; + height:60px;; + width:220px; + overflow:hidden; + +} + +/*帖å­åˆ—表*/ +.topic{} +.topic li{line-height:30px;} + + +/*排行榜页é¢*/ +.top10{} +.top10 dl{overflow: hidden;} +.top10 dl dd{margin-bottom:15px;margin-left: 0;} +.top10 dl dd .title{background:none repeat scroll 0 0 #F5F5F5;border:1px solid #EEEEEE;margin:0 8px;padding:10px;position:relative;} + +.top10 dl dd .title span{float:right;color:#999999;position:absolute;right:10px;} + +.top10 dl dd ul, .top10 dl dd ul li{list-style: none;padding:0;margin:0;} + +.top10 dl dd ul{border-top:1px solid #F5F5F5;margin:0 8px;background:#FFFFFF;} +.top10 dl dd ul li{border-color:#EEEEEE;border-style:solid;border-width:0 1px 1px;margin-bottom:0;padding:10px;clear:both;line-height:20px;word-wrap:break-word;overflow:hidden;} + +.top10 .avatar {float:left;margin-right:10px;} +.top10 .avatar img {height:36px;width:36px;} + + +.top10 li em {color:#999999;float:right;margin-left:8px;} + +.top10 li span {float:left;font-size:10px;height:14px;line-height:14px;margin:4px 8px 0 0;text-align:center;width:16px;} +.top10 li p{height:48px;margin:0;padding:0;} + +/*注册ã€ç™»é™†è¡¨æ ¼*/ +.subform{} +.subform th{font-size:14px;} +.subform input[type="text"], .subform input[type="email"], .subform input[type="password"]{height:30px;line-height:30px;font-size:14px;width:200px;} + + + + + + +.user_space_userinfo{overflow: hidden;} +.user_space_userinfo .photo{width:90px;float:left;} +.user_space_userinfo .info{margin-left:100px;} +.user_space_userinfo .info .sex{} +.user_space_userinfo .info .city{} +.user_space_userinfo .info .about{} + + +.user_space_right_follow{overflow: hidden} +.user_space_right_follow ul, .user_space_right_follow ul li{list-style: none;margin:0;padding:0;} +.user_space_right_follow ul{} +.user_space_right_follow ul .br{border-right:solid 1px #ddd;} +.user_space_right_follow ul li{float:left;padding:10px 20px;text-align:center} \ No newline at end of file diff --git a/app/weibo/about.php b/app/weibo/about.php new file mode 100644 index 0000000..78f4c91 --- /dev/null +++ b/app/weibo/about.php @@ -0,0 +1,17 @@ + 'å” å¨', + 'version' => '1.2', + 'desc' => 'å” å¨ï¼Œå¾®åšï¼Œä¸€å¥è¯', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isoption' => '1', + 'isinstall' => '1', + 'issql' => '1', + 'issystem' => '1', + 'isappnav' => '1', + 'ismy'=>'1', +); \ No newline at end of file diff --git a/app/weibo/action.weibo.php b/app/weibo/action.weibo.php new file mode 100644 index 0000000..17e5407 --- /dev/null +++ b/app/weibo/action.weibo.php @@ -0,0 +1,377 @@ +'')); + + $lstart = $page*20-20; + + $arrWeibo = $this->findAll('weibo',array( + 'isaudit'=>0, + ),'uptime desc',null,$lstart.',20'); + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['user'] = aac('user')->getOneUser($item['userid']); + $arrWeibo[$key]['content'] = tsTitle($item['content']); + } + + + $weiboNum = $this->findCount('weibo',array( + 'isaudit'=>0, + )); + + $pageUrl = pagination($weiboNum, 20, $page, $url); + + + #çƒ­é—¨å” å¨ + $arrHotWeibo = $this->findAll('weibo',null,'count_comment desc',null,10); + + foreach($arrHotWeibo as $key=>$item){ + $arrHotWeibo[$key]['content'] = tsTitle($item['content']); + $arrHotWeibo[$key]['user'] = aac('user')->getOneUser($item['userid']); + } + + + $title = '过去'; + include template('index'); + } + + /* + * å‘å¸ƒå” å¨ + */ + public function add(){ + + $js = intval($_GET['js']); + + $userid = aac('user')->isLogin(1); + + //判断用户是å¦å­˜åœ¨ + if(aac('user')->isUser($userid)==false) getJson('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼',$js); + + //判断å‘å¸ƒè€…çŠ¶æ€ + if(aac('user')->isPublisher()==false) getJson('你还ä¸èƒ½å‘布内容,检查邮箱是å¦è®¤è¯ã€‚',$js,1,tsUrl('user','verify')); + + //å‘布时间é™åˆ¶ + if(aac('system')->pubTime()==false) getJson('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼',$js); + + $content = trim($_POST['content']); + + if($content == '') { + getJson('内容ä¸èƒ½ä¸ºç©º',$js); + } + + $isaudit = 0; + + if($GLOBALS['TS_USER']['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($content,$js); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $weiboid = $this->create('weibo',array( + 'userid'=>$userid, + 'locationid'=>aac('user')->getLocationId($userid), + 'content'=>$content, + 'isaudit'=>$isaudit, + 'addtime'=>date('Y-m-d H:i:s'), + 'uptime'=>date('Y-m-d H:i:s'), + )); + + getJson('å‘布æˆåŠŸï¼',$js,2,tsurl('weibo','show',array('id'=>$weiboid))); + + } + + /* + *展示唠å¨å†…容 + */ + public function show(){ + $weiboid = intval($_GET['id']); + + $strWeibo = $this->getOneWeibo($weiboid); + + if($weiboid==0 || $strWeibo==''){ + ts404(); + } + + if($strWeibo['isaudit']==1){ + tsNotice('内容审核中...'); + } + + //comment + $page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + $url = tsUrl('weibo','show',array('id'=>$weiboid,'page'=>'')); + $lstart = $page*20-20; + + $arrComment = $this->findAll('weibo_comment',array( + 'weiboid'=>$weiboid, + ),'addtime desc',null,$lstart.',20'); + + foreach($arrComment as $key=>$item){ + $arrComment[$key]['content'] = tsTitle($item['content']); + $arrComment[$key]['user']=aac('user')->getOneUser($item['userid']); + } + + $commentNum = $this->findCount('weibo_comment',array( + 'weiboid'=>$weiboid, + )); + + $pageUrl = pagination($commentNum, 20, $page, $url); + + + + //ä»–çš„æ›´å¤šå” å¨ + $arrWeibo = $this->findAll('weibo',array( + 'userid'=>$strWeibo['userid'], + ),'addtime desc',null,20); + + $weiboNum = $this->findCount('weibo',array( + 'userid'=>$strWeibo['userid'], + )); + + if($weiboNum<20){ + + $num = 20-$weiboNum; + $userid = $strWeibo['userid']; + $arrNewWeibo = $this->findAll('weibo',"`userid`!='$userid'",'addtime desc',null,$num); + + $arrWeibo = array_merge($arrWeibo, $arrNewWeibo); + + } + + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['content'] = tsTitle($item['content']); + } + + + if($strWeibo['content']==''){ + $title = $strWeibo['user']['username'].'的过去('.$strWeibo['weiboid'].')'; + }else{ + $title = cututf8($strWeibo['content'],0,100,false); + } + + include template('show'); + } + + + /* + * å‘布唠å¨å›¾ç‰‡ + */ + public function photo(){ + + $userid = intval($GLOBALS['TS_USER']['userid']); + + if($userid==0){ + echo 0;exit;//请登录 + } + + + $content = tsClean($_POST['content']); + + if($GLOBALS['TS_USER']['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($content); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $weiboid = $this->create('weibo',array( + 'userid'=>$userid, + 'content'=>$content, + 'isaudit'=>0, + 'addtime'=>date('Y-m-d H:i:s'), + 'uptime'=>date('Y-m-d H:i:s'), + )); + + // 上传图片开始 + $arrUpload = tsUpload ( $_FILES ['filedata'], $weiboid, 'weibo', array ('jpg','gif','png','jpeg' ) ); + if ($arrUpload) { + $this->update ( 'weibo', array ( + 'weiboid' => $weiboid + ), array ( + 'path' => $arrUpload ['path'], + 'photo' => $arrUpload ['url'] + ) ); + + echo 3;exit; + + }else{ + + echo 2;exit; + + } + } + + /* + * 回å¤å” å¨ï¼Œæ·»åŠ è¯„è®º + */ + public function addcomment(){ + + //用户是å¦ç™»å½• + $userid = aac('user')->isLogin(); + + //判断å‘å¸ƒè€…çŠ¶æ€ + if(aac('user')->isPublisher()==false) tsNotice('你还ä¸èƒ½å‘布内容,检查邮箱是å¦è®¤è¯ã€‚'); + + //å‘布时间é™åˆ¶ + if(aac('system')->pubTime()==false) tsNotice('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼'); + + $weiboid = intval($_POST['weiboid']); + $touserid = intval($_POST['touserid']); + $content = trim($_POST['content']); + + if($content == ''){ + tsNotice('内容ä¸èƒ½ä¸ºç©º'); + } + + if($GLOBALS['TS_USER']['isadmin']==0){ + //过滤内容开始 + aac('system')->antiWord($content); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $commentid = $this->create('weibo_comment',array( + 'userid'=>$userid, + 'touserid'=>$touserid, + 'weiboid'=>$weiboid, + 'content'=>$content, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + //计算评论总数 + $commentNum = $this->findCount('weibo_comment',array( + 'weiboid'=>$weiboid, + )); + + $this->update('weibo',array( + 'weiboid'=>$weiboid, + ),array( + 'count_comment'=>$commentNum, + )); + + $strWeibo = $this->find('weibo',array( + 'weiboid'=>$weiboid, + )); + + if($strWeibo['userid'] != $userid){ + $msg_userid = '0'; + $msg_touserid = $strWeibo['userid']; + $msg_content = 'ä½ çš„å¾®åšæ–°å¢žä¸€æ¡å›žå¤ï¼Œå¿«åŽ»çœ‹çœ‹ç»™ä¸ªå›žå¤å§^_^'; + $msg_tourl = tsUrl('weibo','show',array('id'=>$weiboid)); + aac('message')->sendmsg($msg_userid,$msg_touserid,$msg_content,$msg_tourl); + } + + tsHeaderUrl(tsUrl('weibo','show',array('id'=>$weiboid))); + } + + /* + * 删除评论 + */ + public function deletecomment(){ + $userid = aac('user')->isLogin(); + + $commentid = intval($_GET['commentid']); + + $strComment = $this->find('weibo_comment',array( + 'commentid'=>$commentid, + )); + + if($GLOBALS['TS_USER']['isadmin']==1 || $strComment['userid']==$userid){ + + + $this->delete('weibo_comment',array('commentid'=>$commentid)); + + //统计 + $count_comment = $this->findCount('weibo_comment',array( + 'weiboid'=>$strComment['weiboid'], + )); + + $this->update('weibo',array( + 'weiboid'=>$strComment['weiboid'], + ),array( + 'count_comment'=>$count_comment, + )); + + tsHeaderUrl(tsUrl('weibo','show',array('id'=>$strComment['weiboid']))); + + + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + } + + /* + * åˆ é™¤å” å¨ + */ + public function deleteweibo(){ + $userid = aac('user')->isLogin(); + + $weiboid = intval($_GET['weiboid']); + + $strWeibo = $this->find('weibo',array( + 'weiboid'=>$weiboid, + )); + + if($userid == $strWeibo['userid'] || $GLOBALS['TS_USER']['isadmin']==1){ + $this->delete('weibo',array( + 'weiboid'=>$weiboid, + )); + + $this->delete('weibo_comment',array( + 'weiboid'=>$weiboid, + )); + + //删除图片 + if($strWeibo['photo']){ + unlink('uploadfile/weibo/'.$strWeibo['photo']); + } + + tsHeaderUrl(tsUrl('weibo')); + + }else{ + tsNotice('éžæ³•æ“作ï¼'); + } + } + + /* + * åŽå°ç®¡ç†å…¥å£ + * */ + public function admin(){ + + if($GLOBALS['TS_USER']['isadmin']==1){ + include 'app/'.$GLOBALS['TS_URL']['app'].'/admin.'.$GLOBALS['TS_URL']['app'].'.php'; + $appAdmin = $GLOBALS['TS_URL']['app'].'Admin'; + $newAdmin = new $appAdmin($GLOBALS['db']); + #$newAdmin->$GLOBALS['TS_URL']['mg'](); + + $amg = $GLOBALS['TS_URL']['mg']; + $newAdmin->$amg(); + + }else{ + ts404(); + } + } + + /* + * æˆ‘çš„ç¤¾åŒºå…¥å£ + * */ + public function my(){ + if($GLOBALS['TS_USER']){ + include 'app/'.$GLOBALS['TS_URL']['app'].'/my.'.$GLOBALS['TS_URL']['app'].'.php'; + $appMy = $GLOBALS['TS_URL']['app'].'My'; + $newMy = new $appMy($GLOBALS['db']); + $myFun = $GLOBALS['TS_URL']['my']; + $newMy->$myFun(); + }else{ + ts404(); + } + } + +} diff --git a/app/weibo/action/add.php b/app/weibo/action/add.php new file mode 100644 index 0000000..e4a3e24 --- /dev/null +++ b/app/weibo/action/add.php @@ -0,0 +1,76 @@ +isLogin(1); + + //判断用户是å¦å­˜åœ¨ + if(aac('user')->isUser($userid)==false) getJson('ä¸å¥½æ„æ€ï¼Œç”¨æˆ·ä¸å­˜åœ¨ï¼',$js); + + //判断å‘å¸ƒè€…çŠ¶æ€ + if(aac('user')->isPublisher()==false) getJson('ä¸å¥½æ„æ€ï¼Œä½ è¿˜æ²¡æœ‰æƒé™å‘布内容ï¼',$js); + + //å‘布时间é™åˆ¶ + if(aac('system')->pubTime()==false) getJson('ä¸å¥½æ„æ€ï¼Œå½“剿—¶é—´ä¸å…许å‘布内容ï¼',$js); + + if ($TS_APP['allowpost'] == 0 && $TS_USER['isadmin'] == 0) { + getJson('应用设置ä¸å…许会员å‘布唠å¨ï¼',$js); + } + + $title = tsTrim($_POST['title']); + + + //匿å用户 + $isniming = tsIntval($_POST['isniming']); + if($TS_SITE['isniming']==1 && $isniming==1) $userid = aac('user')->getNimingId(); + + + if($title == '') { + getJson('内容ä¸èƒ½ä¸ºç©º',$js); + } + + //1å®¡æ ¸åŽæ˜¾ç¤º0ä¸å®¡æ ¸ + $isaudit = 0; + if ($TS_APP['isaudit'] == 1 && $TS_USER['isadmin']==0) $isaudit = 1; + + if($GLOBALS['TS_USER']['isadmin']==0){ + //过滤内容开始 + $title = antiWord($title); + //è¿‡æ»¤å†…å®¹ç»“æŸ + } + + $weiboid = $new['weibo']->create('weibo',array( + 'userid'=>$userid, + 'title'=>$title, + 'isaudit'=>$isaudit, + 'addtime'=>date('Y-m-d H:i:s'), + )); + + #绑定图片 + $new['weibo']->update('weibo_photo',array( + 'userid'=>$userid, + 'weiboid'=>0, + ),array( + 'weiboid'=>$weiboid, + )); + + $daytime = date('Y-m-d 00:00:01'); + $count_weibo = $new['weibo']->findCount('weibo',"`userid`='$userid' and `addtime`>'$daytime'"); + + #æ¯æ—¥å‰ä¸‰æ¡ç»™ç§¯åˆ† + if($count_weibo<4){ + aac('user') -> doScore($TS_URL['app'], $TS_URL['ac'],$TS_URL['mg'],$TS_URL['api'], $TS_URL['ts']); + } + + #用户记录 + aac('pubs')->addLogs('weibo','weiboid',$weiboid,$userid,$title,$title,0); + + getJson('å‘布æˆåŠŸï¼',$js,2,tsurl('weibo','show',array('id'=>$weiboid))); + + break; + +} \ No newline at end of file diff --git a/app/weibo/action/admin.php b/app/weibo/action/admin.php new file mode 100644 index 0000000..3f99995 --- /dev/null +++ b/app/weibo/action/admin.php @@ -0,0 +1,9 @@ +findAll('user_group',null,'ugid asc'); + + + + + include template('admin/permissions'); + + break; + + case "do": + + /** + * æƒé™å‚数说明,app,actionå¿…é¡»ï¼Œå…¶ä»–å‚æ•°å¯é€‰ + * app-action-ts + * app-action-mg-ts 当action=admin + * app-action-api-ts 当action=api + */ + + $ugid = tsIntval($_POST['ugid']); + + $arrOption = $_POST['option']; + + aac('pubs')->upAppPermissions($ugid,'weibo',$arrOption); + + qiMsg('æ“作æˆåŠŸï¼'); + + + break; + +} \ No newline at end of file diff --git a/app/weibo/action/admin/weibo.php b/app/weibo/action/admin/weibo.php new file mode 100644 index 0000000..949c85b --- /dev/null +++ b/app/weibo/action/admin/weibo.php @@ -0,0 +1,70 @@ +findAll('weibo',null,'addtime desc',null,$lstart.',20'); + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['title'] = tsTitle($item['title']); + $arrWeibo[$key]['photo'] = $new['weibo']->findAll('weibo_photo',array( + 'weiboid'=>$item['weiboid'], + )); + } + + $weiboNum = $new['weibo']->findCount('weibo'); + $pageUrl = pagination($weiboNum, 20, $page, $url); + + include template("admin/weibo_list"); + + break; + + + case "isaudit": + + $weiboid = tsIntval($_GET['weiboid']); + + $strWeibo = $new['weibo']->find('weibo',array( + 'weiboid'=>$weiboid, + )); + + if($strWeibo['isaudit'] == 0){ + + $new['weibo']->update('weibo',array( + 'weiboid'=>$weiboid, + ),array( + 'isaudit'=>1, + )); + + } + + if($strWeibo['isaudit'] == 1){ + + $new['weibo']->update('weibo',array( + 'weiboid'=>$weiboid, + ),array( + 'isaudit'=>0, + )); + + } + + qiMsg('æ“作æˆåŠŸï¼'); + + break; + + + case "delete": + + $weiboid=tsIntval($_GET['weiboid']); + + $new['weibo']->deleteWeibo($weiboid); + + qiMsg('删除æˆåŠŸï¼'); + + break; + +} \ No newline at end of file diff --git a/app/weibo/action/api.php b/app/weibo/action/api.php new file mode 100644 index 0000000..0608b65 --- /dev/null +++ b/app/weibo/action/api.php @@ -0,0 +1,9 @@ + +----------------------------------------------- +Weibo Http Api List +URL:https://demo.thinksaas.cn +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +----------------------------------------------- +'; \ No newline at end of file diff --git a/app/weibo/action/delete.php b/app/weibo/action/delete.php new file mode 100644 index 0000000..f35a435 --- /dev/null +++ b/app/weibo/action/delete.php @@ -0,0 +1,23 @@ +isLogin(); + +$weiboid = tsIntval($_GET['weiboid']); + +$strWeibo = $new['weibo']->find('weibo',array( + 'weiboid'=>$weiboid, +)); + +if($userid == $strWeibo['userid'] || $GLOBALS['TS_USER']['isadmin']==1){ + + $new['weibo']->deleteWeibo($weiboid); + + #用户记录 + aac('pubs')->addLogs('weibo','weiboid',$weiboid,$userid,$strWeibo['title'],$strWeibo['title'],2); + + tsNotice('删除æˆåŠŸï¼','点击返回唠å¨é¦–页',tsUrl('weibo')); + +}else{ + tsNotice('éžæ³•æ“作ï¼'); +} \ No newline at end of file diff --git a/app/weibo/action/index.php b/app/weibo/action/index.php new file mode 100644 index 0000000..6325ba1 --- /dev/null +++ b/app/weibo/action/index.php @@ -0,0 +1,36 @@ +'')); + +$lstart = $page*20-20; + +$arrWeibo = $new['weibo']->findAll('weibo',array( + 'isaudit'=>0, +),'addtime desc',null,$lstart.',20'); +foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['user'] = aac('user')->getOneUser($item['userid']); + $arrWeibo[$key]['title'] = tsTitle($item['title']); + $arrWeibo[$key]['photo'] = $new['weibo']->getWeiboPhoto($item['weiboid'],4); +} + +$weiboNum = $new['weibo']->findCount('weibo',array( + 'isaudit'=>0, +)); + +$pageUrl = pagination($weiboNum, 20, $page, $url); + +#çƒ­é—¨å” å¨ +$arrHotWeibo = $new['weibo']->findAll('weibo',null,'count_comment desc',null,10); + +foreach($arrHotWeibo as $key=>$item){ + $arrHotWeibo[$key]['title'] = tsTitle($item['title']); + $arrHotWeibo[$key]['user'] = aac('user')->getOneUser($item['userid']); + $arrHotWeibo[$key]['photo'] = $new['weibo']->getWeiboPhoto($item['weiboid'],4); +} + + +$title = 'å” å¨'; +include template('index'); \ No newline at end of file diff --git a/app/weibo/action/my.php b/app/weibo/action/my.php new file mode 100644 index 0000000..0f8df1f --- /dev/null +++ b/app/weibo/action/my.php @@ -0,0 +1,11 @@ +isLogin(); + $strUser = aac('user')->getOneUser($userid); + include_once 'app/' . $TS_URL['app'] . '/action/my/' . $TS_URL['my'] . '.php'; +} else { + qiMsg ( 'sorry:no index!' ); +} \ No newline at end of file diff --git a/app/weibo/action/my/index.php b/app/weibo/action/my/index.php new file mode 100644 index 0000000..765def3 --- /dev/null +++ b/app/weibo/action/my/index.php @@ -0,0 +1,25 @@ +'index','page'=>'')); + +$lstart = $page*20-20; + +$arrWeibo = $new['weibo']->findAll('weibo',array( + 'userid'=>$strUser['userid'], +),'uptime desc',null,$lstart.',20'); + +foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['title'] = tsTitle($item['title']); +} + +$weiboNum = $new['weibo']->findCount('weibo',array( + 'userid'=>$strUser['userid'], +)); + +$pageUrl = pagination($weiboNum, 20, $page, $url); + +$title = '我的唠å¨'; +include template('my/index'); \ No newline at end of file diff --git a/app/weibo/action/photo.php b/app/weibo/action/photo.php new file mode 100644 index 0000000..02e2eab --- /dev/null +++ b/app/weibo/action/photo.php @@ -0,0 +1,62 @@ +isLogin(); + +switch($ts){ + + //图片上传 + case "upload": + + $photoid = $new['weibo']->create('weibo_photo',array( + 'userid'=>$userid, + 'addtime'=>time(), + )); + + // 上传图片开始 + $arrUpload = tsUpload ( $_FILES ['filedata'], $photoid, 'weibo/photo', array ('jpg','png','jpeg' ) ); + if ($arrUpload) { + $new['weibo']->update('weibo_photo', array( + 'photoid' => $photoid + ),array( + 'path' => $arrUpload ['path'], + 'photo' => $arrUpload ['url'] + )); + }else{ + $new['weibo']->delete('weibo_photo',array( + 'photoid'=>$photoid, + )); + } + + echo 11111; + + break; + + //未å‘布的图片列表 + case "list": + + $arrPhoto = $new['weibo']->findAll('weibo_photo',array( + 'userid'=>$userid, + 'weiboid'=>0, + )); + + include template('photo_list'); + + break; + + //删除未å‘布的图片 + case "delete": + + $photoid = tsIntval($_POST['photoid']); + + $strPhoto = $new['weibo']->find('weibo_photo',array( + 'photoid'=>$photoid, + 'userid'=>$userid, + )); + if($strPhoto){ + $new['weibo']->deletePhoto($strPhoto); + } + + break; + +} \ No newline at end of file diff --git a/app/weibo/action/show.php b/app/weibo/action/show.php new file mode 100644 index 0000000..e44b5a1 --- /dev/null +++ b/app/weibo/action/show.php @@ -0,0 +1,79 @@ +getOneWeibo($weiboid); + +if($strWeibo['isaudit']==1){ + tsNotice('内容审核中...'); +} + +#图片 +$arrPhoto = $new['weibo']->findAll('weibo_photo',array( + 'weiboid'=>$weiboid, +)); + +foreach($arrPhoto as $key=>$item){ + if($TS_SITE['file_upload_type']==1){ + #阿里云oss + $arrPhoto[$key]['photo_url'] = $TS_SITE['alioss_bucket_url'].'/uploadfile/weibo/photo/'.$item['photo']; + }else{ + #本地 + $arrPhoto[$key]['photo_url'] = SITE_URL.'uploadfile/weibo/photo/'.$item['photo']; + } +} + +#评论 +$page = tsIntval($_GET['page'],1); +$url = tsUrl('weibo','show',array('id'=>$weiboid,'page'=>'')); +$lstart = $page*15-15; +$arrComment = aac('comment')->getCommentList('weibo','weiboid',$strWeibo['weiboid'],$page,$lstart,$strWeibo['userid']); +$commentNum = aac('comment')->getCommentNum('weibo','weiboid',$strWeibo['weiboid']); +$pageUrl = pagination($commentNum, 15, $page, $url); + + + +//ä»–çš„æ›´å¤šå” å¨ +$arrWeibo = $new['weibo']->findAll('weibo',array( + 'userid'=>$strWeibo['userid'], +),'addtime desc',null,20); + +$weiboNum = $new['weibo']->findCount('weibo',array( + 'userid'=>$strWeibo['userid'], +)); + +if($weiboNum<20){ + + $num = 20-$weiboNum; + $userid = $strWeibo['userid']; + $arrNewWeibo = $new['weibo']->findAll('weibo',"`userid`!='$userid'",'addtime desc',null,$num); + + if($arrNewWeibo){ + $arrWeibo = array_merge($arrWeibo, $arrNewWeibo); + } + +} + +foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['title'] = tsTitle($item['title']); +} + + +if($strWeibo['title']==''){ + $title = $strWeibo['user']['username'].'的唠å¨('.$strWeibo['weiboid'].')'; +}else{ + $title = cututf8($strWeibo['title'],0,100,false); +} + + +#çƒ­é—¨å” å¨ +$arrHotWeibo = $new['weibo']->findAll('weibo',null,'count_comment desc',null,10); + +foreach($arrHotWeibo as $key=>$item){ + $arrHotWeibo[$key]['title'] = tsTitle($item['title']); + $arrHotWeibo[$key]['user'] = aac('user')->getOneUser($item['userid']); + $arrHotWeibo[$key]['photo'] = $new['weibo']->getWeiboPhoto($item['weiboid'],4); +} + + +include template('show'); \ No newline at end of file diff --git a/app/weibo/admin.weibo.php b/app/weibo/admin.weibo.php new file mode 100644 index 0000000..34c4047 --- /dev/null +++ b/app/weibo/admin.weibo.php @@ -0,0 +1,124 @@ +findAll('weibo_options'); + foreach($arrOptions as $item){ + $strOption[$item['optionname']] = stripslashes($item['optionvalue']); + } + include template("admin/options"); + } + + /* + * ä¿å­˜é…ç½® + */ + public function optionsdo(){ + //å…ˆæ¸…ç©ºæ•°æ® + $this->doSql("TRUNCATE TABLE `".dbprefix."weibo_options`"); + + foreach($_POST['option'] as $key=>$item){ + + $optionname = $key; + $optionvalue = trim($item); + + $this->create('weibo_options',array( + + 'optionname'=>$optionname, + 'optionvalue'=>$optionvalue, + + )); + + } + + $arrOptions = $this->findAll('weibo_options',null,null,'optionname,optionvalue'); + foreach($arrOptions as $item){ + $arrOption[$item['optionname']] = $item['optionvalue']; + } + + fileWrite('weibo_options.php','data',$arrOption); + $GLOBALS['tsMySqlCache']->set('weibo_options',$arrOption); + + qiMsg('修改æˆåŠŸï¼'); + } + + /* + * å” å¨åˆ—表 + * */ + public function weibolist(){ + $page = isset($_GET['page']) ? intval($_GET['page']) : 1; + $url = SITE_URL.'index.php?app=weibo&ac=admin&mg=weibolist&page='; + $lstart = $page*20-20; + $arrWeibo = $this->findAll('weibo',null,'addtime desc',null,$lstart.',20'); + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['content'] = tsTitle($item['content']); + } + + $weiboNum = $this->findCount('weibo'); + $pageUrl = pagination($weiboNum, 20, $page, $url); + + include template("admin/weibo_list"); + } + + /* + * 审核 + * */ + public function isaudit(){ + $weiboid = intval($_GET['weiboid']); + + $strWeibo = $this->find('weibo',array( + 'weiboid'=>$weiboid, + )); + + if($strWeibo['isaudit'] == 0){ + + $this->update('weibo',array( + 'weiboid'=>$weiboid, + ),array( + 'isaudit'=>1, + )); + + } + + if($strWeibo['isaudit'] == 1){ + + $this->update('weibo',array( + 'weiboid'=>$weiboid, + ),array( + 'isaudit'=>0, + )); + + } + + qiMsg('æ“作æˆåŠŸï¼'); + } + + /* + * 删除 + * */ + public function deleteweibo(){ + $weiboid=intval($_GET['weiboid']); + + $strWeibo = $this->find('weibo',array( + 'weiboid'=>$weiboid, + )); + + unlink('uploadfile/weibo/'.$strWeibo['photo']); + + $this->delete('weibo',array( + 'weiboid'=>$weiboid, + )); + + $this->delete('weibo_comment',array( + 'weiboid'=>$weiboid, + )); + + qiMsg('删除æˆåŠŸï¼'); + } + + +} \ No newline at end of file diff --git a/app/weibo/class.weibo.php b/app/weibo/class.weibo.php new file mode 100644 index 0000000..0f1710e --- /dev/null +++ b/app/weibo/class.weibo.php @@ -0,0 +1,108 @@ +find('weibo',array( + 'weiboid'=>$weiboid, + )); + + if($strWeibo=='') ts404(); + + $strWeibo['user']=aac('user')->getSimpleUser($strWeibo['userid']); + $strWeibo['title'] = nl2br(tsTitle($strWeibo['title'])); + + return $strWeibo; + + } + + /** + * 获å–å¾®åšå›¾ç‰‡ + */ + public function getWeiboPhoto($weiboid,$num=null){ + $arrPhotos = $this->findAll('weibo_photo',array( + 'weiboid'=>$weiboid, + ),'orderid asc',null,$num); + foreach($arrPhotos as $key=>$item){ + if($num){ + $arrPhoto[$key] = tsXimg($item['photo'],'weibo/photo','200','200',$item['path'],1); + }else{ + $arrPhoto[$key] = tsXimg($item['photo'],'weibo/photo','640','',$item['path']); + } + } + return $arrPhoto; + } + + /** + * 删除å•个关è”的图片 + * + * @param [type] $strPhoto + * @return void + */ + public function deletePhoto($strPhoto){ + if($strPhoto['photo']){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + deleteAliOssFile('uploadfile/weibo/photo/'.$strPhoto['photo']); + }else{ + unlink('uploadfile/weibo/photo/'.$strPhoto['photo']); + tsDimg($strPhoto['photo'],'weibo/photo','320','320',$strPhoto['path']); + } + } + + $this->delete('weibo_photo',array( + 'photoid'=>$strPhoto['photoid'], + )); + + return true; + + } + + /** + * åˆ é™¤å¾®åš + * + * @param [type] $strWeibo + * @return void + */ + public function deleteWeibo($weiboid){ + #删除图片 + $arrPhoto = $this->findAll('weibo_photo',array( + 'weiboid'=>$weiboid, + )); + + foreach($arrPhoto as $key=>$item){ + $this->deletePhoto($item); + } + + #删除记录 + $this->delete('weibo',array( + 'weiboid'=>$weiboid, + )); + + #删除评论ts_comment + aac('comment')->delComment('weibo','weiboid',$weiboid); + + #删除点赞ts_love + aac('pubs')->delLove('weibo','weiboid',$weiboid); + + return true; + } + + + +} \ No newline at end of file diff --git a/app/weibo/config.php b/app/weibo/config.php new file mode 100644 index 0000000..5dedfe5 --- /dev/null +++ b/app/weibo/config.php @@ -0,0 +1,19 @@ + +
      å” å¨ç®¡ç†
      + + +
      \ No newline at end of file diff --git a/app/weibo/html/admin/options.html b/app/weibo/html/admin/options.html new file mode 100644 index 0000000..05589b1 --- /dev/null +++ b/app/weibo/html/admin/options.html @@ -0,0 +1,35 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + + +
      + + + + + + + + + + + + + + + + + +
      APPå称:
      APP介ç»ï¼š
      APP关键è¯ï¼š
      应用开å¯/å…³é—­ï¼šå¼€å¯ å…³é—­ (关闭åŽåº”用无法访问)
      会员å‘布:ä¸å…许 å…许
      是å¦å®¡æ ¸ï¼šä¸å®¡æ ¸ 审核
      + +
      +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/weibo/html/admin/permissions.html b/app/weibo/html/admin/permissions.html new file mode 100644 index 0000000..6496b52 --- /dev/null +++ b/app/weibo/html/admin/permissions.html @@ -0,0 +1,121 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include template("admin/menu");} + + + +
      + {loop $arrUg $key $item} + {$item['ugname']} + {/loop} +
      + + +
      + + +
      å‰å°æƒé™
      + + + + + + + + + + {if $ugid==1 || $ugid==2 || $ugid==3} + + + + + + + + + + + + {/if} + + + + +
      查看唠å¨ï¼š + +
      å‘布唠å¨ï¼š + +
      删除唠å¨ï¼š + +
      + + + + {if $ugid==1 || $ugid==2} +
      åŽå°æƒé™
      + + + + + + + + + + + +
      å” å¨é…置: + +
      æƒé™é…置: + +
      + {/if} + + + +
      APIæƒé™
      + + + + + + + + + + + +
      查看唠å¨ï¼š + +
      + + + + + + +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/weibo/html/admin/weibo_list.html b/app/weibo/html/admin/weibo_list.html new file mode 100644 index 0000000..160658b --- /dev/null +++ b/app/weibo/html/admin/weibo_list.html @@ -0,0 +1,77 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include template("admin/menu");} + +
      {$pageUrl}
      + + + + + + + + + + + + + + + + + + + + + {loop $arrWeibo $key $item} + + + + + + + + + + + + {/loop} + + + + + + +
      IDUserID内容统计æ“作
      {$item['weiboid']}{$item['userid']}{$item['title']} + + {if $item['photo']} +
      + {loop $item['photo'] $pkey $pitem} + + {/loop} +
      + {/if} + +
      评论:{$item['count_comment']} + + + + {if $item['isaudit']==0} + [å–æ¶ˆå®¡æ ¸] + {else} + [审核] + {/if} + + + + [删除] + + +
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/app/weibo/html/ajax_list.html b/app/weibo/html/ajax_list.html new file mode 100644 index 0000000..11733c4 --- /dev/null +++ b/app/weibo/html/ajax_list.html @@ -0,0 +1,11 @@ +{loop $arrWeibo $key $item} +
    • +{$item['user']['username']} + +{$item['user']['username']}:{$item['title']} +{php echo getTime(strtotime($item['addtime']),time())} ({$item['count_comment']}评) + + +
      +
    • +{/loop} \ No newline at end of file diff --git a/app/weibo/html/index.html b/app/weibo/html/index.html new file mode 100644 index 0000000..ae13f74 --- /dev/null +++ b/app/weibo/html/index.html @@ -0,0 +1,213 @@ +{php include pubTemplate("header")} + +{if $TS_USER['userid']} + + +{else} + +{/if} + +
      + + + + +
      + + +
      + + +
      + +
      +
      + + + + +
      + +
      + + + +
      + + + + + +
      + + + {if $TS_SITE['isniming']==1} + 匿åå‘布: + å¦ + 是 + {/if} + + + +
      + +
      + +
      + +
      + +
      +
      + +
      + + + +
      + +
      + +
      + +
      +
      {$pageUrl}
      +
      + +
      + +
      +
      + + +
      + + +
      + +
      +
      热门唠å¨
      +
      + +
      + +
      + +
      +
      + + + + + {php doAction('gobad','300')} + + +
      + + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/weibo/html/menu.html b/app/weibo/html/menu.html new file mode 100644 index 0000000..96afb48 --- /dev/null +++ b/app/weibo/html/menu.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/app/weibo/html/my/index.html b/app/weibo/html/my/index.html new file mode 100644 index 0000000..34310f8 --- /dev/null +++ b/app/weibo/html/my/index.html @@ -0,0 +1,108 @@ +{php include pubTemplate("header")} +
      + + +
      + + +
      +
      + + {php include pubTemplate("my")} + +
      +
      + +
      + + + + + +
      + +
      我的唠å¨
      + +
      + + + + +
      +
      + +
      + + + + +
      +
      +
      + + +
      + + + + +
      + +
      + + + + + +
      {$pageUrl}
      + + + + + + +
      +
      + + + + + + + + + + + +
      + + +
      +
      +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/weibo/html/photo_list.html b/app/weibo/html/photo_list.html new file mode 100644 index 0000000..5d137cc --- /dev/null +++ b/app/weibo/html/photo_list.html @@ -0,0 +1,6 @@ +{loop $arrPhoto $key $item} +
      + + X +
      +{/loop} \ No newline at end of file diff --git a/app/weibo/html/show.html b/app/weibo/html/show.html new file mode 100644 index 0000000..66c953a --- /dev/null +++ b/app/weibo/html/show.html @@ -0,0 +1,183 @@ +{php include pubTemplate("header")} + + +
      + + + + + +
      + +
      + + +
      +
      + +
      + +
      + + +
      +
      + + + + +
      +
      评论{if $strWeibo['count_comment']} ({$strWeibo['count_comment']}){/if}
      +
      + + + {php include pubTemplate("comment")} + +
      + + {if tsIntval($GLOBALS['TS_USER']['userid'])==0} + + {else} + +
      +
      + +
      +
      +
      + {if $GLOBALS['TS_SITE']['isauthcode']} + + 点击刷新验è¯ç  + {/if} +
      +
      +
      是å¦å…¬å¼€ï¼šå…¬å¼€ ä¸å…¬å¼€
      +
      +
      + + + + + +
      +
      +
      + {/if} + +
      + +
      +
      + + + + + + +
      +
      更多{$strWeibo['user']['username']}的唠å¨
      +
      + + +
      + +
      + +
      +
      + + +
      + + +
      + +
      +
      热门唠å¨
      +
      + +
      + +
      + +
      +
      + + + +{php doAction('gobad','300')} + + +
      + +
      + +
      + +{php doAction('tseditor','mini')} +{php include pubTemplate("footer")} \ No newline at end of file diff --git a/app/weibo/js/extend.func.js b/app/weibo/js/extend.func.js new file mode 100644 index 0000000..e69de29 diff --git a/app/weibo/my.weibo.php b/app/weibo/my.weibo.php new file mode 100644 index 0000000..e39bcc7 --- /dev/null +++ b/app/weibo/my.weibo.php @@ -0,0 +1,37 @@ +getOneUser($GLOBALS['TS_USER']['userid']); + + $page = isset($_GET['page']) ? intval($_GET['page']) : '1'; + + $url = tsUrl('weibo','my',array('my'=>'index','page'=>'')); + + $lstart = $page*20-20; + + $arrWeibo = $this->findAll('weibo',array( + 'userid'=>$strUser['userid'], + ),'uptime desc',null,$lstart.',20'); + + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['content'] = tsTitle($item['content']); + } + + $weiboNum = $this->findCount('weibo',array( + 'userid'=>$strUser['userid'], + )); + + $pageUrl = pagination($weiboNum, 20, $page, $url); + + $title = '我的时光'; + include template('my/index'); + } + +} \ No newline at end of file diff --git a/app/weibo/skin/style.css b/app/weibo/skin/style.css new file mode 100644 index 0000000..8d0ee2f --- /dev/null +++ b/app/weibo/skin/style.css @@ -0,0 +1,77 @@ +.weibo_show ul{list-style:none;margin:0;padding: 0;} +.weibo_show ul li{list-style:none;} + + +.weibo_index_list{margin-top:20px;} +.weibo_index_list ul{list-style:none;margin:0;padding: 0;} +.weibo_index_list ul li{list-style:none;} + +.mbtl { + float: left; + margin: 0px 7px 0 0; + padding: 0; + width: 40px; +} +.mbtr { + margin: 0px 0 20px 0; + overflow: hidden; + padding: 10px;; + background:#f8f8f8; +} +.mbtr .author{} +.mbtr .author a{color:#555555;} +.mbtr .title{margin-top:10px;} +.mbtr .title a{color: #444444;font-size:22px;} +.mbtr .title{line-height:30px;color:#888} + + + +.weilist{} + +.weilist ul, .weilist ul li{list-style: none;margin:0;padding:0;} + +.weilist ul li { + border-bottom: 1px dashed #DDDDDD; + margin: 0 0 5px; + padding: 0 0 8px; + display: flex; +} +.weilist ul li .portrait { + padding-top: 3px; + width: 45px; +} +.weilist ul li .portrait img { + background: none repeat scroll 0 0 #FFFFFF; + height: 32px; + padding: 1px; + width: 32px; +} +.weilist ul li .body { + flex:1; + font-size: 9pt; + overflow: hidden; + +} +.weilist ul li .user a { + color: #6CABE1; +} + +.weilist ul li .log { + color: #666666; + word-break: break-all; +} +.weilist ul li .time { + color: #9A9A9A; + display: block; + margin: 5px 0 0; +} +.weilist ul li .time a { + color: #9A9A9A; + text-decoration: none; +} + + +.weibo-add-photo{display: flex;} +.weibo-add-photo .photo-box{width: 12%;position: relative;margin-right: 10px;} +.weibo-add-photo .photo-box img{width: 100%;border-radius: 10px;} +.weibo-add-photo .photo-box a{position: absolute;top:5px;right:5px;background-color: #FFFFFF;font-size: 10px;padding:0 3px;} diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..78065d8 --- /dev/null +++ b/composer.json @@ -0,0 +1,25 @@ +{ + "name": "thinksaas/3.44", + "description": "www.thinksaas.cn", + "minimum-stability": "stable", + "license": "proprietary", + "authors": [ + { + "name": "qiujun", + "email": "thinksaas@qq.com" + } + ], + "require": { + "phpmailer/phpmailer": "^6.5", + "intervention/image": "^2.5", + "qcloudsms/qcloudsms_php": "^0.1.4", + "alibabacloud/client": "^1.5", + "aliyuncs/oss-sdk-php": "^2.3", + "overtrue/wechat": "~4.0" + }, + "config": { + "allow-plugins": { + "easywechat-composer/easywechat-composer": true + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..6540d40 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2670 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "47b5cd9b7b694dd17ea078ef1aa02ac1", + "packages": [ + { + "name": "adbario/php-dot-notation", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/adbario/php-dot-notation.git", + "reference": "eee4fc81296531e6aafba4c2bbccfc5adab1676e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/adbario/php-dot-notation/zipball/eee4fc81296531e6aafba4c2bbccfc5adab1676e", + "reference": "eee4fc81296531e6aafba4c2bbccfc5adab1676e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0|^6.0", + "squizlabs/php_codesniffer": "^3.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Adbar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Riku Särkinen", + "email": "riku@adbar.io" + } + ], + "description": "PHP dot notation access to arrays", + "homepage": "https://github.com/adbario/php-dot-notation", + "keywords": [ + "ArrayAccess", + "dotnotation" + ], + "support": { + "issues": "https://github.com/adbario/php-dot-notation/issues", + "source": "https://github.com/adbario/php-dot-notation/tree/2.x" + }, + "time": "2019-01-01T23:59:15+00:00" + }, + { + "name": "alibabacloud/client", + "version": "1.5.29", + "source": { + "type": "git", + "url": "https://github.com/aliyun/openapi-sdk-php-client.git", + "reference": "2d0137828ef5c44664dcb8cc90eac4f545dd3301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aliyun/openapi-sdk-php-client/zipball/2d0137828ef5c44664dcb8cc90eac4f545dd3301", + "reference": "2d0137828ef5c44664dcb8cc90eac4f545dd3301", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "adbario/php-dot-notation": "^2.2", + "clagiordano/weblibs-configmanager": "^1.0", + "danielstjules/stringy": "^3.1", + "ext-curl": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-simplexml": "*", + "ext-xmlwriter": "*", + "guzzlehttp/guzzle": "^6.3|^7.0", + "mtdowling/jmespath.php": "^2.5", + "php": ">=5.5" + }, + "require-dev": { + "composer/composer": "^1.8", + "drupal/coder": "^8.3", + "ext-dom": "*", + "ext-pcre": "*", + "ext-sockets": "*", + "ext-spl": "*", + "league/climate": "^3.2.4", + "mikey179/vfsstream": "^1.6", + "monolog/monolog": "^1.24", + "phpunit/phpunit": "^5.7.27", + "psr/cache": "^1.0", + "symfony/dotenv": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "suggest": { + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "autoload": { + "psr-4": { + "AlibabaCloud\\Client\\": "src" + }, + "files": [ + "src/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alibaba Cloud SDK", + "email": "sdk-team@alibabacloud.com", + "homepage": "http://www.alibabacloud.com" + } + ], + "description": "Alibaba Cloud Client for PHP - Use Alibaba Cloud in your PHP project", + "homepage": "https://www.alibabacloud.com/", + "keywords": [ + "alibaba", + "alibabacloud", + "aliyun", + "client", + "cloud", + "library", + "sdk", + "tool" + ], + "support": { + "issues": "https://github.com/aliyun/openapi-sdk-php-client/issues", + "source": "https://github.com/aliyun/openapi-sdk-php-client" + }, + "time": "2020-08-03T06:19:07+00:00" + }, + { + "name": "aliyuncs/oss-sdk-php", + "version": "v2.4.1", + "source": { + "type": "git", + "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git", + "reference": "492866331b7bafaac09506cf42f351b7e9e63766" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/492866331b7bafaac09506cf42f351b7e9e63766", + "reference": "492866331b7bafaac09506cf42f351b7e9e63766", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OSS\\": "src/OSS" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aliyuncs", + "homepage": "http://www.aliyun.com" + } + ], + "description": "Aliyun OSS SDK for PHP", + "homepage": "http://www.aliyun.com/product/oss/", + "support": { + "issues": "https://github.com/aliyun/aliyun-oss-php-sdk/issues", + "source": "https://github.com/aliyun/aliyun-oss-php-sdk/tree/v2.4.1" + }, + "time": "2020-09-29T06:23:57+00:00" + }, + { + "name": "clagiordano/weblibs-configmanager", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/clagiordano/weblibs-configmanager.git", + "reference": "ecf584f5b3a27929175ff0abdba52f0131bef795" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clagiordano/weblibs-configmanager/zipball/ecf584f5b3a27929175ff0abdba52f0131bef795", + "reference": "ecf584f5b3a27929175ff0abdba52f0131bef795", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "clagiordano/phpunit-result-printer": "^1", + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "clagiordano\\weblibs\\configmanager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Claudio Giordano", + "email": "claudio.giordano@autistici.org", + "role": "Developer" + } + ], + "description": "weblibs-configmanager is a tool library for easily read and access to php config array file and direct read/write configuration file / object", + "keywords": [ + "clagiordano", + "configuration", + "manager", + "tool", + "weblibs" + ], + "support": { + "issues": "https://github.com/clagiordano/weblibs-configmanager/issues", + "source": "https://github.com/clagiordano/weblibs-configmanager/tree/v1.1.0" + }, + "time": "2020-07-20T20:39:25+00:00" + }, + { + "name": "danielstjules/stringy", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/danielstjules/Stringy.git", + "reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e", + "reference": "df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.4.0", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Stringy\\": "src/" + }, + "files": [ + "src/Create.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel St. Jules", + "email": "danielst.jules@gmail.com", + "homepage": "http://www.danielstjules.com" + } + ], + "description": "A string manipulation library with multibyte support", + "homepage": "https://github.com/danielstjules/Stringy", + "keywords": [ + "UTF", + "helpers", + "manipulation", + "methods", + "multibyte", + "string", + "utf-8", + "utility", + "utils" + ], + "support": { + "issues": "https://github.com/danielstjules/Stringy/issues", + "source": "https://github.com/danielstjules/Stringy" + }, + "time": "2017-06-12T01:10:27+00:00" + }, + { + "name": "easywechat-composer/easywechat-composer", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/mingyoung/easywechat-composer.git", + "reference": "93cfce1ec842b9a5b1b0791a52afd18b833f114a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mingyoung/easywechat-composer/zipball/93cfce1ec842b9a5b1b0791a52afd18b833f114a", + "reference": "93cfce1ec842b9a5b1b0791a52afd18b833f114a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=7.0" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0", + "phpunit/phpunit": "^6.5 || ^7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "EasyWeChatComposer\\Plugin" + }, + "autoload": { + "psr-4": { + "EasyWeChatComposer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "张铭阳", + "email": "mingyoungcheung@gmail.com" + } + ], + "description": "The composer plugin for EasyWeChat", + "support": { + "issues": "https://github.com/mingyoung/easywechat-composer/issues", + "source": "https://github.com/mingyoung/easywechat-composer/tree/1.4.0" + }, + "time": "2020-07-23T11:06:47+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-20T22:16:13+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-06-20T21:43:03+00:00" + }, + { + "name": "intervention/image", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@olivervogel.com", + "homepage": "http://olivervogel.com/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/master" + }, + "time": "2019-11-02T09:15:47+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-12-14T13:15:25+00:00" + }, + { + "name": "mtdowling/jmespath.php", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/42dae2cbd13154083ca6d70099692fef8ca84bfb", + "reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^1.4", + "phpunit/phpunit": "^4.8.36 || ^7.5.15" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "JmesPath\\": "src/" + }, + "files": [ + "src/JmesPath.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.6.0" + }, + "time": "2020-07-31T21:01:56+00:00" + }, + { + "name": "overtrue/socialite", + "version": "2.0.23", + "source": { + "type": "git", + "url": "https://github.com/overtrue/socialite.git", + "reference": "0bc60597b589592243f074a4d9016aabd2e9cfb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/overtrue/socialite/zipball/0bc60597b589592243f074a4d9016aabd2e9cfb2", + "reference": "0bc60597b589592243f074a4d9016aabd2e9cfb2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^5.0|^6.0|^7.0", + "php": ">=5.6", + "symfony/http-foundation": "^2.7|^3.0|^4.0|^5.0" + }, + "require-dev": { + "mockery/mockery": "~1.2", + "phpunit/phpunit": "~6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Overtrue\\Socialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "anzhengchao@gmail.com" + } + ], + "description": "A collection of OAuth 2 packages that extracts from laravel/socialite.", + "keywords": [ + "login", + "oauth", + "qq", + "social", + "wechat", + "weibo" + ], + "support": { + "issues": "https://github.com/overtrue/socialite/issues", + "source": "https://github.com/overtrue/socialite/tree/2.0.23" + }, + "funding": [ + { + "url": "https://www.patreon.com/overtrue", + "type": "patreon" + } + ], + "time": "2020-12-14T03:30:08+00:00" + }, + { + "name": "overtrue/wechat", + "version": "4.4.0", + "source": { + "type": "git", + "url": "https://github.com/w7corp/easywechat.git", + "reference": "20bdd3fe8056ee9297692caf53bd131be8079ee6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/w7corp/easywechat/zipball/20bdd3fe8056ee9297692caf53bd131be8079ee6", + "reference": "20bdd3fe8056ee9297692caf53bd131be8079ee6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "easywechat-composer/easywechat-composer": "^1.1", + "ext-fileinfo": "*", + "ext-openssl": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.2 || ^7.0", + "monolog/monolog": "^1.22 || ^2.0", + "overtrue/socialite": "~2.0", + "php": ">=7.2", + "pimple/pimple": "^3.0", + "psr/simple-cache": "^1.0", + "symfony/cache": "^3.3 || ^4.3 || ^5.0", + "symfony/event-dispatcher": "^4.3 || ^5.0", + "symfony/http-foundation": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/psr-http-message-bridge": "^0.3 || ^1.0 || ^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.15", + "mikey179/vfsstream": "^1.6", + "mockery/mockery": "^1.2.3", + "phpstan/phpstan": "^0.12.0", + "phpunit/phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "EasyWeChat\\": "src/" + }, + "files": [ + "src/Kernel/Support/Helpers.php", + "src/Kernel/Helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "overtrue", + "email": "anzhengchao@gmail.com" + } + ], + "description": "微信SDK", + "keywords": [ + "easywechat", + "sdk", + "wechat", + "weixin", + "weixin-sdk" + ], + "support": { + "issues": "https://github.com/w7corp/easywechat/issues", + "source": "https://github.com/w7corp/easywechat/tree/4.4.0" + }, + "funding": [ + { + "url": "https://www.easywechat.com/img/pay/wechat.jpg", + "type": "custom" + }, + { + "url": "https://github.com/overtrue", + "type": "github" + }, + { + "url": "https://www.patreon.com/overtrue", + "type": "patreon" + } + ], + "time": "2020-12-30T06:39:40+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.5.3", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "baeb7cde6b60b1286912690ab0693c7789a31e71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/baeb7cde6b60b1286912690ab0693c7789a31e71", + "reference": "baeb7cde6b60b1286912690ab0693c7789a31e71", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.3" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2021-11-25T16:34:11+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", + "keywords": [ + "container", + "dependency injection" + ], + "support": { + "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + }, + "time": "2020-11-24T20:35:42+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "qcloudsms/qcloudsms_php", + "version": "v0.1.4", + "source": { + "type": "git", + "url": "https://github.com/qcloudsms/qcloudsms_php.git", + "reference": "48822045772d343b93c3d505d8a187cd51153c5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/qcloudsms/qcloudsms_php/zipball/48822045772d343b93c3d505d8a187cd51153c5a", + "reference": "48822045772d343b93c3d505d8a187cd51153c5a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require-dev": { + "sami/sami": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "Qcloud\\Sms\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "qcloud sms php sdk", + "keywords": [ + "php", + "qcloud", + "sdk", + "sms" + ], + "support": { + "issues": "https://github.com/qcloudsms/qcloudsms_php/issues", + "source": "https://github.com/qcloudsms/qcloudsms_php/tree/master" + }, + "time": "2018-09-19T07:19:17+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "d6aed6c1bbf6f59e521f46437475a0ff4878d388" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/d6aed6c1bbf6f59e521f46437475a0ff4878d388", + "reference": "d6aed6c1bbf6f59e521f46437475a0ff4878d388", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "~1.0", + "psr/log": "^1.1", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T11:24:50+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "4f9760f8074978ad82e2ce854dff79a71fe45367" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4f9760f8074978ad82e2ce854dff79a71fe45367", + "reference": "4f9760f8074978ad82e2ce854dff79a71fe45367", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:36:42+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "20c554c0f03f7cde5ce230ed248470cccbc34c36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/20c554c0f03f7cde5ce230ed248470cccbc34c36", + "reference": "20c554c0f03f7cde5ce230ed248470cccbc34c36", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-03T04:42:09+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "51a21cb3ba3927d4b4bf8f25cc55763351af5f2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/51a21cb3ba3927d4b4bf8f25cc55763351af5f2e", + "reference": "51a21cb3ba3927d4b4bf8f25cc55763351af5f2e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "symfony/phpunit-bridge": "^4.4 || ^5.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-29T08:17:46+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5aed4875ab514c8cb9b6ff4772baa25fa4c10307", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:01:46+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c7496547cc2209d254426d2fdefd568792b2c52f GIT binary patch literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x#lFaYHQxgi+L2NDMwt^N;I{2vO) kb>FCdNC=FEAK^3(ODn|E=wV8%KA1Xm{R72^l>_9`03YPN@c;k- literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..72f7b77 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + +æ­å–œï¼Œç«™ç‚¹åˆ›å»ºæˆåŠŸï¼ + + + + + +
      +
      +
      +

      æ­å–œ, 站点创建æˆåŠŸï¼

      +
      +

      站点创建æˆåŠŸï¼Œæœ¬é¡µé¢ç”±ç³»ç»Ÿè‡ªåŠ¨ç”Ÿæˆã€‚

      +

    • 本页é¢åœ¨FTP根目录下的index.html
    • +

    • 您å¯ä»¥åˆ é™¤æˆ–覆盖本页é¢
    • +

    • FTP相关信æ¯ï¼Œè¯·åˆ°å®å¡”åŽå°æŸ¥çœ‹
    • +

    • 我们为您æä¾›äº†å®Œå–„的数æ®å¤‡ä»½åŠŸèƒ½ï¼Œè¯·åˆ°åŽå°è¿›è¡Œç›¸å…³è®¾ç½®21
    • +
      +
      + + \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..b234055 --- /dev/null +++ b/index.php @@ -0,0 +1,57 @@ += 70000)) { + exit("ThinkSAASè¿è¡ŒçŽ¯å¢ƒè¦æ±‚PHP7或者更高PHP版本ï¼è¯·å…ˆå‡çº§PHP版本å†è¿è¡ŒThinkSAAS程åº!"); +} + +#定义一些路径 +define('THINKROOT', dirname(__FILE__)); +define('THINKAPP', THINKROOT . '/app'); +define('THINKDATA', THINKROOT . '/data'); +define('THINKSAAS', THINKROOT . '/thinksaas'); +define('THINKINSTALL', THINKROOT . '/install'); +define('THINKPLUGIN', THINKROOT . '/plugins'); +#核心é…置文件 $TS_CF 系统é…ç½®å˜é‡ +$TS_CF = include THINKROOT . '/thinksaas/config.php'; +$TS_CF['info']['version'] = include 'upgrade/version.php';#ç‰ˆæœ¬ä¿¡æ¯ +#如果是调试模å¼ï¼Œæ‰“开警告输出 +if ($TS_CF['debug']) { + error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); +} else { + error_reporting(0); +} +#php环境的æŸä¸€äº›é…ç½® +//ini_set("memory_limit","120M"); +ini_set('display_errors', 'on'); //æ­£å¼çŽ¯å¢ƒå…³é—­é”™è¯¯è¾“å‡º +set_time_limit(0); +ini_set('session.cookie_path', '/'); + +//自定义本地session存储目录路径 +if ($TS_CF['sessionpath']) { + ini_set('session.save_path', THINKROOT . '\\cache\\sessions'); +} + +if($TS_CF['session']=='redis'){ + ini_set("session.save_handler","redis"); + ini_set("session.save_path",$TS_CF['redis']['tcp']); +} + +session_start(); + +#自动加载所需功能,支æŒcomposer +require_once THINKROOT . '/vendor/autoload.php'; +#装载ThinkSAAS核心 +include THINKSAAS.'/thinksaas.php'; +unset($GLOBALS['TS_APP']); +unset($GLOBALS['TS_URL']); \ No newline at end of file diff --git a/install/action/index.php b/install/action/index.php new file mode 100644 index 0000000..f2eb351 --- /dev/null +++ b/install/action/index.php @@ -0,0 +1,43 @@ + $host, + 'port' => $port, + 'user' => $user, + 'pwd' => $pwd, + 'name' => $name, + 'pre' => $pre +); + +// ç½‘ç«™ä¿¡æ¯ +$site_title = trim ( $_POST ['site_title'] ); +$site_subtitle = trim ( $_POST ['site_subtitle'] ); +$site_url = trim ( $_POST ['site_url'] ); +$site_pkey = trim ( $_POST ['site_pkey'] );#网站ç§é’¥ + +// ç”¨æˆ·ä¿¡æ¯ +$email = trim ( $_POST ['email'] ); +$password = trim ( $_POST ['password'] ); +$username = trim ( $_POST ['username'] ); + +if (! preg_match ( "/^[\w_]+_$/", $pre )) + qiMsg ( "æ•°æ®è¡¨å‰ç¼€ä¸ç¬¦åˆ(例如:ts_)" ); + +if ($site_title == '' || $site_subtitle == '' || $site_url == '') + qiMsg ( "网站信æ¯ä¸èƒ½ä¸ºç©ºï¼" ); + +if ($email == '' || $password == '' || $username == '') + qiMsg ( "用户信æ¯ä¸èƒ½ä¸ºç©ºï¼" ); + +if (valid_email ( $email ) == false) + qiMsg ( "Email输入有误ï¼" ); + +include 'thinksaas/'.$select_sql.'.php'; + +$db = new MySql ( $arrdb ); + +$mysql_version = $db->getMysqlVersion(); + +if(substr($mysql_version, 0, 3)<5.5){ + qiMsg('MySQLæ•°æ®åº“版本过低,请å‡çº§MySQL到5.4以上版本,建议5.5或者5.6'); +} + +include 'thinksaas/tsApp.php'; + +// MySQLæ•°æ®åº“缓存 +include 'thinksaas/tsMySqlCache.php'; +$tsMySqlCache = new tsMySqlCache ( $db ); + +if ($db) { + + $sql = file_get_contents ( 'install/install.sql' ); + $sql = str_replace ( 'ts_', $pre, $sql ); + $array_sql = preg_split ( "/;[\r\n]/", $sql ); + + foreach ( $array_sql as $sql ) { + $sql = trim ( $sql ); + if ($sql) { + if (strstr ( $sql, 'CREATE TABLE' )) { + preg_match ( '/CREATE TABLE ([^ ]*)/', $sql, $matches ); + $ret = $db->query ( $sql ); + } else { + $ret = $db->query ( $sql ); + } + } + } + + // 存入管ç†å‘˜æ•°æ® + $salt = md5 ( rand () ); + + $userid = $db->query ( "insert into " . $pre . "user (`pwd` , `salt`,`email`,`phone`) values ('" . md5 ( $salt . $password ) . "', '$salt' ,'$email','$email');" ); + + $db->query ( "insert into " . $pre . "user_info (`userid`,`ugid`,`username`,`email`,`phone`,`isadmin`,`isverify`,`isverifyphone`,`isrenzheng`,`addtime`,`uptime`) values ('$userid',1,'$username','$email','$email','1','1','1','1','" . time () . "','" . time () . "')" ); + + // æ›´æ”¹ç½‘ç«™ä¿¡æ¯ + $db->query ( "update " . $pre . "system_options set `optionvalue`='$site_title' where `optionname`='site_title'" ); + $db->query ( "update " . $pre . "system_options set `optionvalue`='$site_subtitle' where `optionname`='site_subtitle'" ); + $db->query ( "update " . $pre . "system_options set `optionvalue`='$site_url' where `optionname`='site_url'" ); + $db->query ( "update " . $pre . "system_options set `optionvalue`='$site_url' where `optionname`='link_url'" ); + $db->query ( "update " . $pre . "system_options set `optionvalue`='$site_pkey' where `optionname`='site_pkey'" ); + + + $arrOptions = $db->fetch_all_assoc ( "select * from " . $pre . "system_options" ); + foreach ( $arrOptions as $item ) { + $arrOption [$item ['optionname']] = $item ['optionvalue']; + } + + fileWrite ( 'system_options.php', 'data', $arrOption ); + $GLOBALS['tsMySqlCache']->set ( 'system_options', $arrOption ); + + + + //è¯»å–æ•°æ®åº“cacheè¡¨ï¼Œå¹¶ç”Ÿæˆæœ¬åœ°æ–‡ä»¶ + $arrCache = $db->fetch_all_assoc("select * from " . $pre . "cache"); + foreach($arrCache as $key=>$item){ + fileWrite ( $item['cachename'].'.php', 'data', $tsMySqlCache -> get($item['cachename']) ); + } + + + + // 生æˆé…置文件 + $fp = fopen ( THINKDATA . '/config.inc.php', 'w' ); + + if (! is_writable ( THINKDATA . '/config.inc.php' )) + qiMsg ( "é…置文件(data/config.inc.php)ä¸å¯å†™ã€‚如果您使用的是Unix/Linux主机,请修改该文件的æƒé™ä¸º777。如果您使用的是Windows主机,请è”系管ç†å‘˜ï¼Œå°†æ­¤æ–‡ä»¶è®¾ä¸ºeveryoneå¯å†™" ); + $config = " +.main{ + background: none repeat scroll 0 0 #FFFFFF; + border: 1px solid #DFDFDF; + border-radius: 11px 11px 11px 11px; + color: #333333; + font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; + margin: 2em auto; + padding: 1em 2em; + width: 700px; +} +p, li, dd, dt { + font-size: 12px; + line-height: 18px; + padding-bottom: 2px; +} +.step { + margin: 20px 0 15px; +} +.step, th { + padding: 0; + text-align: left; +} +.submit input, .button, .button-secondary { + -moz-box-sizing: content-box; + border: 1px solid #BBBBBB; + border-radius: 15px 15px 15px 15px; + color: #464646; + cursor: pointer; + font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; + font-size: 14px !important; + line-height: 16px; + padding: 6px 12px; + text-decoration: none; +} +.button:hover, .button-secondary:hover, .submit input:hover { + border-color: #666666; + color: #000000; +} +.button, .submit input, .button-secondary { + background:#F2F2F2; +} +.button:active, .submit input:active, .button-secondary:active { + background: #EEEEEE; +} + +.form-table { + border-collapse: collapse; + margin-top: 1em; + width: 100%; +} +.form-table td { + border-bottom: 8px solid #FFFFFF; + font-size: 12px; + margin-bottom: 9px; + padding: 10px; +} +.form-table th { + border-bottom: 8px solid #FFFFFF; + font-size: 13px; + padding: 16px 10px 10px; + text-align: left; + vertical-align: top; + width: 130px; +} +.form-table tr { + background: none repeat scroll 0 0 #F3F3F3; +} +.form-table code { + font-size: 18px; + line-height: 18px; +} +.form-table p { + font-size: 11px; + margin: 4px 0 0; +} +.form-table input { + font-size: 15px; + line-height: 20px; + padding: 2px; +} +.form-table th p { + font-weight: normal; +} +#error-page { + margin-top: 50px; +} +#error-page p { + font-size: 12px; + line-height: 18px; + margin: 25px 0 20px; +} +#error-page code, .code { + font-family: Consolas,Monaco,Courier,monospace; +} +#pass-strength-result { + background-color: #EEEEEE; + border-color: #DDDDDD !important; + border-style: solid; + border-width: 1px; + display: none; + margin: 5px 5px 5px 1px; + padding: 5px; + text-align: center; + width: 200px; +} +#pass-strength-result.bad { + background-color: #FFB78C; + border-color: #FF853C !important; +} +#pass-strength-result.good { + background-color: #FFEC8B; + border-color: #FFCC00 !important; +} +#pass-strength-result.short { + background-color: #FFA0A0; + border-color: #F04040 !important; +} +#pass-strength-result.strong { + background-color: #C3FF88; + border-color: #8DFF1C !important; +} +.message { + background-color: #FFFFE0; + border: 1px solid #E6DB55; + margin: 5px 0 15px; + padding: 0.3em 0.6em; +} + + + + +
      + +
      + +

      +

      æ•°æ®åº“连接错误

      +

      您在 config.inc.php 文件中æä¾›çš„æ•°æ®åº“用户å和密ç å¯èƒ½ä¸æ­£ç¡®ï¼Œæˆ–者无法连接到 localhost 上数æ®åº“æœåŠ¡å™¨ï¼Œè¿™æ„å‘³ç€æ‚¨çš„主机数æ®åº“æœåŠ¡å™¨å·²åœæ­¢å·¥ä½œã€‚

      +
        +
      • 您确认您æä¾›çš„用户åå’Œå¯†ç æ­£ç¡®ä¹ˆï¼Ÿ
      • +
      • 您确认您æä¾›çš„ä¸»æœºåæ­£ç¡®ä¹ˆï¼Ÿ
      • +
      • 您确认数æ®åº“æœåŠ¡å™¨æ­£å¸¸è¿è¡Œä¹ˆï¼Ÿ
      • +
      +

      如果您无法确定这些问题,请è”系您的主机管ç†å‘˜ã€‚如果您ä»éœ€å¸®åŠ©ï¼Œè¯·è®¿é—® ThinkSAAS新社区。

      +

      é‡è¯•

      + + +
      + +
      + +{include file='footer.html'} + diff --git a/install/html/footer.html b/install/html/footer.html new file mode 100644 index 0000000..9d23fe8 --- /dev/null +++ b/install/html/footer.html @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/install/html/header.html b/install/html/header.html new file mode 100644 index 0000000..657298b --- /dev/null +++ b/install/html/header.html @@ -0,0 +1,21 @@ + + + + + +<?php echo $title; ?> + + + + + + + +
      +
      +
      ThinkSAAS安装程åº
      +
      +ThinkSAAS å®‰è£…ç¨‹åº +
      +
      +
      \ No newline at end of file diff --git a/install/html/index.html b/install/html/index.html new file mode 100644 index 0000000..bf548e6 --- /dev/null +++ b/install/html/index.html @@ -0,0 +1,170 @@ + + + + + +
      + +
      +
      + + + + + +

      欢迎使用 ThinkSAASï¼åœ¨æ‚¨å¼€å§‹ä½¿ç”¨å‰ï¼ŒThinkSAAS 需è¦ä¸€äº›MySQL的数æ®åº“的信æ¯ã€‚下列信æ¯å°†ä¼šè¢«é—®åˆ°ï¼Œè¯·ä½œå¥½å‡†å¤‡ã€‚

      +
        +
      1. MySQLæ•°æ®åº“ï¼ˆå¼ºçƒˆè¦æ±‚采用mysql5.5或者以上的版本,建议采用mysql5.5/5.6/5.7)
      2. +
      3. æ•°æ®åº“å
      4. +
      5. æ•°æ®åº“用户用户å
      6. +
      7. æ•°æ®åº“用户密ç 
      8. +
      9. æ•°æ®åº“主机
      10. +
      11. 表åå‰ç¼€ï¼ˆè‹¥æ‚¨å¸Œæœ›åœ¨ä¸€ä¸ªæ•°æ®è¡¨ä¸­å®‰è£…多个 ThinkSAAS)
      12. +
      + + +

      大多数的互è”网主机æœåŠ¡æä¾›å•†éƒ½å‘您æä¾›äº†æ•°æ®åº“的信æ¯ã€‚若您ä¸çŸ¥é“这些信æ¯ï¼Œæ‚¨éœ€è¦å…ˆè¯¢é—®å¥½ï¼Œå†è¿›è¡Œå®‰è£…。若您已准备好 …

      + + +

      1ã€PHP环境必è¦ç»„件检测

      + + + + + + + + + + + + + + + + + + + + + +
      PHP组件检测结果
      dom *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      mbstring *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      gd *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      mysqli *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      openssl *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      session *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      SimpleXML *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      json *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      iconv *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      Fileinfo *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      curl *必须支æŒ';}else{echo '䏿”¯æŒ';}?>
      + + + + + + +

      2ã€æ£€æµ‹å¿…è¦ç›®å½•å¯å†™æƒé™

      + + + + + + + + + + + + + + + + + + + + + +
      目录æƒé™æ£€æµ‹ç»“æžœ
      cache + +
      data + +
      uploadfile + +
      tslogs + +
      upgrade + +
      + + + +

      请安装必须的PHP组件;请将ä¸å¯å†™çš„目录设置为å¯å†™(777)æƒé™ã€‚

      + + + + +

      设置完毕,点击刷新

      + + + +

      点击开始安装ï¼

      + + + +
      +
      + +
      + + \ No newline at end of file diff --git a/install/html/next.html b/install/html/next.html new file mode 100644 index 0000000..1df0b6e --- /dev/null +++ b/install/html/next.html @@ -0,0 +1,262 @@ + + + + + +
      + +
      +
      + +
      +

      请在下方输入数æ®åº“相关信æ¯ã€‚è‹¥æ‚¨ä¸æ¸…楚,请咨询主机æä¾›å•†ã€‚

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      您希望 ThinkSAAS 使用哪个数æ®åº“è¿è¡Œï¼Ÿ
      您的 MySQL 用户å
      ... ä»¥åŠ MySQL 密ç ã€‚
      通常情况下,应填写 localhost,若测试连接失败,请è”系主机æä¾›å•†å’¨è¯¢ã€‚
      默认3306
      若您希望在一个数æ®åº“中存放多个 ThinkSAAS 的数æ®ï¼Œè¯·ä¿®æ”¹æœ¬é¡¹ä»¥åšåŒºåˆ†ã€‚
      + +

      请在下é¢è¾“入网站信æ¯

      + + + + + + + + + + + + + + + + + + + + + + +
      也是你的网站åç§°
      用于首页副标题,紧跟网站标题之åŽ
      正确填写,http://开头,/结尾 (如果是https开头,请手动改æˆhttps)
      + + + +

      请在下é¢è¾“入管ç†å‘˜ä¿¡æ¯

      + + + + + + + + + + + + + + + + + + + + + + +
      你用æ¥ç™»å½•和最高管ç†çš„账户
      您的登录密ç 
      你的用户å
      + +

      选择数æ®åº“链接方å¼

      + + + + + + + + + +
      + +

      + + + + + + +

      +
      + +
      +
      + +
      + + + + + diff --git a/install/html/result.html b/install/html/result.html new file mode 100644 index 0000000..082d391 --- /dev/null +++ b/install/html/result.html @@ -0,0 +1,159 @@ + + + + + +
      + +
      +
      + +

      完æˆï¼

      +
      +

      ThinkSAAS 安装完æˆã€‚您是å¦è¿˜æ²‰æµ¸åœ¨æ„‰æ‚¦çš„å®‰è£…è¿‡ç¨‹ä¸­ï¼Ÿå¾ˆé—æ†¾ï¼Œä¸€åˆ‡çš†å·²å®Œæˆï¼ :)

      + + + + + + + + + +
      登录Email:
      登录密ç ï¼š
      +

      进入å‰å° 进入åŽå°

      + +
      +
      + +
      + + + diff --git a/install/index.php b/install/index.php new file mode 100644 index 0000000..91ce3bb --- /dev/null +++ b/install/index.php @@ -0,0 +1,16 @@ +æ„è§å馈";'), + (16, 'plugins_pubs_counter', '1585042191s:19:"";'), + (18, 'plugins_home_links', '1679448128a:2:{i:0;a:2:{s:8:"linkname";s:9:"ThinkSAAS";s:7:"linkurl";s:25:"https://www.thinksaas.cn/";}i:1;a:2:{s:8:"linkname";s:12:"å¼€æºç¤¾åŒº";s:7:"linkurl";s:25:"https://www.thinksaas.cn/";}}'), + (17, 'plugins_pubs_navs', '1679448108a:1:{i:0;a:3:{s:7:"navname";s:15:"ThinkSAAS官网";s:6:"navurl";s:25:"https://www.thinksaas.cn/";s:7:"newpage";s:1:"1";}}'), + (24, 'system_mynav', '1660378868a:6:{s:5:"group";s:6:"å°ç»„";s:5:"topic";s:6:"è¯é¢˜";s:7:"article";s:6:"文章";s:5:"photo";s:6:"相册";s:5:"weibo";s:6:"å” å¨";s:7:"comment";s:6:"评论";}'), + (25, 'pubs_options', '1645846991a:3:{s:20:"phone_code_send_time";s:1:"1";s:20:"email_code_send_time";s:1:"1";s:15:"comment_isaudit";s:1:"0";}'), + (26, 'search_options', '1645846998a:8:{s:7:"appname";s:6:"æœç´¢";s:7:"appdesc";s:6:"æœç´¢";s:6:"appkey";s:6:"æœç´¢";s:2:"ds";s:5:"topic";s:5:"group";s:1:"1";s:5:"topic";s:1:"1";s:4:"user";s:1:"1";s:7:"article";s:1:"1";}'), + (27, 'sms_options', '1605233458a:5:{s:10:"sms_server";s:6:"aliyun";s:9:"sms_appid";s:1:"1";s:10:"sms_appkey";s:1:"2";s:8:"sms_tpid";s:1:"3";s:8:"sms_sign";s:1:"4";}'), + (28, 'plugins_home_recommendarticle', '1589619069a:1:{s:11:"isrecommend";i:0;}'), + (29, 'plugins_home_recommendtopic', '1589619075a:1:{s:11:"isrecommend";i:0;}'), + (30, 'plugins_pubs_morenav', '1589619544a:1:{i:0;a:3:{s:7:"navname";s:9:"ThinkSAAS";s:6:"navurl";s:24:"https://www.thinksaas.cn";s:7:"newpage";s:0:"";}}'), + (31, 'topic_options', '1660378868a:5:{s:7:"appname";s:6:"è¯é¢˜";s:7:"appdesc";s:12:"è¯é¢˜å¸–å­";s:6:"appkey";s:6:"è¯é¢˜";s:9:"allowpost";s:1:"0";s:7:"isaudit";s:1:"0";}'), + (32, 'article_permissions', '1636679009a:4:{i:1;a:9:{s:11:"article_add";s:1:"1";s:12:"article_show";s:1:"1";s:12:"article_edit";s:1:"1";s:14:"article_delete";s:1:"1";s:21:"article_admin_options";s:1:"1";s:25:"article_admin_permissions";s:1:"1";s:22:"article_admin_cate_add";s:1:"1";s:23:"article_admin_cate_edit";s:1:"1";s:16:"article_api_show";s:1:"1";}i:2;a:9:{s:11:"article_add";s:1:"1";s:12:"article_show";s:1:"1";s:12:"article_edit";s:1:"1";s:14:"article_delete";s:1:"1";s:21:"article_admin_options";s:1:"1";s:25:"article_admin_permissions";s:1:"1";s:22:"article_admin_cate_add";s:1:"1";s:23:"article_admin_cate_edit";s:1:"1";s:16:"article_api_show";s:1:"1";}i:3;a:5:{s:11:"article_add";s:1:"1";s:12:"article_show";s:1:"1";s:12:"article_edit";s:1:"1";s:14:"article_delete";s:1:"1";s:16:"article_api_show";s:1:"1";}i:4;a:2:{s:12:"article_show";s:1:"1";s:16:"article_api_show";s:1:"1";}}'), + (33, 'tag_options', '1654007528a:4:{s:7:"appname";s:6:"标签";s:7:"appdesc";s:6:"标签";s:6:"appkey";s:6:"标签";s:7:"isaudit";s:1:"0";}'), + (34, 'comment_options', '1654007754a:4:{s:7:"appname";s:6:"评论";s:7:"appdesc";s:6:"评论";s:6:"appkey";s:6:"评论";s:15:"comment_isaudit";s:1:"0";}'); +/*!40000 ALTER TABLE `ts_cache` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_collect 结构 +DROP TABLE IF EXISTS `ts_collect`; +CREATE TABLE IF NOT EXISTS `ts_collect` ( + `collectid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `ptable` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表åç§°', + `pkey` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段', + `pid` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段值', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`collectid`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='æ”¶è—表'; + +-- 正在导出表 d_thinksaas.ts_collect 的数æ®ï¼š0 rows +DELETE FROM `ts_collect`; +/*!40000 ALTER TABLE `ts_collect` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_collect` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_comment 结构 +DROP TABLE IF EXISTS `ts_comment`; +CREATE TABLE IF NOT EXISTS `ts_comment` ( + `commentid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增评论ID', + `ptable` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表åç§°', + `pkey` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段', + `pid` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段值', + `referid` int(11) NOT NULL DEFAULT '0' COMMENT '上级评论ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `touserid` int(11) NOT NULL DEFAULT '0' COMMENT '回å¤ç”¨æˆ·ID', + `content` text NOT NULL COMMENT '回å¤å†…容', + `ispublic` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0公开1ä¸å…¬å¼€ï¼ˆä»…自己和å‘帖者å¯çœ‹ï¼‰', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å®¡æ ¸é€šè¿‡0是1å¦', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'å›žå¤æ—¶é—´', + PRIMARY KEY (`commentid`), + KEY `ptable_pkey_pid_referid` (`ptable`,`pkey`,`pid`,`referid`), + KEY `ptable_pkey_pid` (`ptable`,`pkey`,`pid`) +) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='回å¤/评论'; + +-- 正在导出表 d_thinksaas.ts_comment 的数æ®ï¼š0 rows +DELETE FROM `ts_comment`; +/*!40000 ALTER TABLE `ts_comment` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_comment` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_draft 结构 +DROP TABLE IF EXISTS `ts_draft`; +CREATE TABLE IF NOT EXISTS `ts_draft` ( + `draftid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `types` varchar(50) NOT NULL DEFAULT '' COMMENT '类型:比如帖å­topic', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题', + `content` longtext NOT NULL COMMENT '内容', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ—¶é—´', + PRIMARY KEY (`draftid`), + UNIQUE KEY `userid_types` (`userid`,`types`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='è‰ç¨¿ç®±'; + +-- 正在导出表 d_thinksaas.ts_draft 的数æ®ï¼š0 rows +DELETE FROM `ts_draft`; +/*!40000 ALTER TABLE `ts_draft` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_draft` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_editor 结构 +DROP TABLE IF EXISTS `ts_editor`; +CREATE TABLE IF NOT EXISTS `ts_editor` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `ptable` varchar(50) NOT NULL DEFAULT '' COMMENT '项目表å', + `pkey` varchar(50) NOT NULL DEFAULT '' COMMENT '项目字段å', + `pid` int(11) NOT NULL DEFAULT '0' COMMENT '项目ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `type` char(32) NOT NULL DEFAULT 'photo' COMMENT '类型photo,file', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题', + `path` char(32) NOT NULL DEFAULT '' COMMENT '路径', + `url` char(32) NOT NULL DEFAULT '' COMMENT '图片或者文件', + `isface` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'photo类型,是å¦ä¸ºå°é¢0å¦1是', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ—¶é—´', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='编辑器上传图片和文件'; + +-- æ•°æ®å¯¼å‡ºè¢«å–消选择。 + +-- 导出 表 d_thinksaas.ts_email_code 结构 +DROP TABLE IF EXISTS `ts_email_code`; +CREATE TABLE IF NOT EXISTS `ts_email_code` ( + `email` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT 'Email', + `code` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '验è¯ç ', + `nums` int(11) NOT NULL DEFAULT '0' COMMENT '错误次数', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ—¶é—´', + UNIQUE KEY `email` (`email`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='Email验è¯ç '; + +-- 正在导出表 d_thinksaas.ts_email_code 的数æ®ï¼š0 rows +DELETE FROM `ts_email_code`; +/*!40000 ALTER TABLE `ts_email_code` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_email_code` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_group 结构 +DROP TABLE IF EXISTS `ts_group`; +CREATE TABLE IF NOT EXISTS `ts_group` ( + `groupid` int(11) NOT NULL AUTO_INCREMENT COMMENT 'å°ç»„ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `cateid` int(11) NOT NULL DEFAULT '0' COMMENT '分类ID', + `cateid2` int(11) NOT NULL DEFAULT '0' COMMENT '二级分类ID', + `cateid3` int(11) NOT NULL DEFAULT '0' COMMENT '三级分类ID', + `orderid` int(11) NOT NULL DEFAULT '0' COMMENT '排åºID', + `groupname` varchar(32) NOT NULL DEFAULT '' COMMENT '群组åå­—', + `groupdesc` text NOT NULL COMMENT 'å°ç»„介ç»', + `path` char(32) NOT NULL DEFAULT '' COMMENT '图标路径', + `photo` char(32) NOT NULL DEFAULT '' COMMENT 'å°ç»„图标', + `bgphoto` char(32) NOT NULL DEFAULT '' COMMENT '背景图片', + `count_topic` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­ç»Ÿè®¡', + `count_topic_today` int(11) NOT NULL DEFAULT '0' COMMENT '统计今天å‘帖', + `count_user` int(11) NOT NULL DEFAULT '0' COMMENT 'å°ç»„æˆå‘˜æ•°', + `count_topic_audit` int(11) NOT NULL DEFAULT '0' COMMENT 'ç»Ÿè®¡æœªå®¡æ ¸å¸–å­æ•°', + `joinway` tinyint(1) NOT NULL DEFAULT '0' COMMENT '加入方å¼', + `price` int(11) NOT NULL DEFAULT '0' COMMENT '加入支付金å¸', + `role_leader` char(32) NOT NULL DEFAULT '组长' COMMENT '组长角色åç§°', + `role_admin` char(32) NOT NULL DEFAULT '管ç†å‘˜' COMMENT '管ç†å‘˜è§’色åç§°', + `role_user` char(32) NOT NULL DEFAULT 'æˆå‘˜' COMMENT 'æˆå‘˜è§’色åç§°', + `addtime` int(11) DEFAULT '0' COMMENT '创建时间', + `isrecommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æ˜¯å¦æŽ¨è', + `isopen` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å…¬å¼€æˆ–者ç§å¯†', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å®¡æ ¸', + `ispost` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å…许会员å‘帖', + `isshow` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æ˜¯å¦æ˜¾ç¤º', + `ispostaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å‘帖审核', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æœ€åŽæ›´æ–°æ—¶é—´', + PRIMARY KEY (`groupid`), + KEY `userid` (`userid`), + KEY `isshow` (`isshow`), + KEY `groupname` (`groupname`), + KEY `cateid` (`cateid`), + KEY `isaudit` (`isaudit`), + KEY `addtime` (`addtime`), + KEY `isrecommend` (`isrecommend`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='群组(å°ç»„)'; + +-- 正在导出表 d_thinksaas.ts_group 的数æ®ï¼š0 rows +DELETE FROM `ts_group`; +/*!40000 ALTER TABLE `ts_group` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_group` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_group_cate 结构 +DROP TABLE IF EXISTS `ts_group_cate`; +CREATE TABLE IF NOT EXISTS `ts_group_cate` ( + `cateid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增分类ID', + `catename` varchar(64) NOT NULL DEFAULT '' COMMENT '分类åå­—', + `referid` int(11) NOT NULL DEFAULT '0' COMMENT '上级分类ID', + `count_group` int(11) NOT NULL DEFAULT '0' COMMENT '群组个数', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æœ€åŽæ›´æ–°æ—¶é—´', + PRIMARY KEY (`cateid`), + KEY `referid` (`referid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='å°ç»„分类'; + +-- 正在导出表 d_thinksaas.ts_group_cate 的数æ®ï¼š0 rows +DELETE FROM `ts_group_cate`; +/*!40000 ALTER TABLE `ts_group_cate` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_group_cate` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_group_user 结构 +DROP TABLE IF EXISTS `ts_group_user`; +CREATE TABLE IF NOT EXISTS `ts_group_user` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `groupid` int(11) NOT NULL DEFAULT '0' COMMENT '群组ID', + `isadmin` int(11) NOT NULL DEFAULT '0' COMMENT '是å¦ç®¡ç†å‘˜', + `isfounder` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦åˆ›å§‹äºº', + `endtime` date NOT NULL DEFAULT '1970-01-01' COMMENT '到期时间', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '加入时间', + UNIQUE KEY `userid_2` (`userid`,`groupid`), + KEY `userid` (`userid`), + KEY `groupid` (`groupid`), + KEY `groupid_2` (`groupid`,`isadmin`,`isfounder`), + KEY `addtime` (`addtime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='群组和用户对应关系'; + +-- 正在导出表 d_thinksaas.ts_group_user 的数æ®ï¼š0 rows +DELETE FROM `ts_group_user`; +/*!40000 ALTER TABLE `ts_group_user` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_group_user` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_group_user_isaudit 结构 +DROP TABLE IF EXISTS `ts_group_user_isaudit`; +CREATE TABLE IF NOT EXISTS `ts_group_user_isaudit` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `groupid` int(11) NOT NULL DEFAULT '0' COMMENT 'å°ç»„ID', + UNIQUE KEY `userid` (`userid`,`groupid`), + KEY `groupid` (`groupid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用于申请加入å°ç»„çš„æˆå‘˜å®¡æ ¸'; + +-- 正在导出表 d_thinksaas.ts_group_user_isaudit 的数æ®ï¼š0 rows +DELETE FROM `ts_group_user_isaudit`; +/*!40000 ALTER TABLE `ts_group_user_isaudit` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_group_user_isaudit` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_home_info 结构 +DROP TABLE IF EXISTS `ts_home_info`; +CREATE TABLE IF NOT EXISTS `ts_home_info` ( + `infoid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `orderid` int(11) NOT NULL DEFAULT '0' COMMENT '排åºID', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题', + `content` text NOT NULL COMMENT '内容', + PRIMARY KEY (`infoid`) +) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='关于我们等信æ¯'; + +-- 正在导出表 d_thinksaas.ts_home_info 的数æ®ï¼š5 rows +DELETE FROM `ts_home_info`; +/*!40000 ALTER TABLE `ts_home_info` DISABLE KEYS */; +INSERT INTO `ts_home_info` (`infoid`, `orderid`, `title`, `content`) VALUES + (1, 0, '关于我们', '\n<p>关于我们</p><p><br></p>\n'), + (2, 0, 'è”系我们', '\n<p>è”系我们</p><p><br></p>\n'), + (3, 0, 'ç”¨æˆ·æ¡æ¬¾', '\n<p>本å议适用ThinkSAASå‘布的所有程åºç‰ˆæœ¬å’Œä»£ç ï¼Œæ‰€æœ‰ç‰ˆæœ¬éƒ½å°†æŒ‰ç…§æœ€æ–°å‘布的ã€ç”¨æˆ·æ¡æ¬¾ã€‘执行。<br>1ã€ThinkSAAS官方指:ThinkSAAS社区ã€thinksaas.cnå’ŒThinkSAAS社区系统开å‘者邱å›ã€‚<br>2ã€ThinkSAASç¦æ­¢ç”¨æˆ·åœ¨ä½¿ç”¨ä¸­è§¦çŠ¯ä¸­å›½æ³•å¾‹èŒƒå›´å†…çš„ä»»ä½•æ³•å¾‹æ¡æ–‡ã€‚<br>3ã€ThinkSAASã€åŠå…¶åˆ›å§‹äººé‚±å›æ‹¥æœ‰å¯¹ThinkSAAS的所有æƒï¼Œä»»ä½•个人,公å¸å’Œç»„织ä¸å¾—以任何形å¼å’Œç›®çš„侵犯ThinkSAAS的版æƒå’Œè‘—作æƒã€‚<br>4ã€ThinkSAAS官方拥有对ThinkSAAS社区软件ç»å¯¹çš„版æƒå’Œè‘—作æƒã€‚<br>5ã€ThinkSAAS程åºä»£ç å®Œå…¨å¼€æºï¼Œä¸åšä»»ä½•加密处ç†ã€‚ThinkSAASå…许ã€è‡ªèº«è¿è¥ã€‘用户对程åºä»£ç è¿›è¡ŒäºŒæ¬¡å¼€å‘,但必须éµå¾ªæœ¬æ¡æ¬¾ç¬¬6ã€7ã€8å’Œ9æ¡è§„定执行。<br>6ã€æ‰€æœ‰ä½¿ç”¨ThinkSAAS的用户在ä¿ç•™åº•部Powered by ThinkSAAS 文字链接或者标识的情况下,å¯ä»¥å…费使用ThinkSAAS。<br>7ã€ç”¨æˆ·åœ¨è´­ä¹°ThinkSAAS商业授æƒåŽæ‰å¯ä»¥åŽ»é™¤åº•éƒ¨Powered by ThinkSAAS 文字链接或者标识。<br>8ã€ThinkSAASä¸ä¼šç›‘控用户网站信æ¯ï¼Œä½†æœ‰æƒé€šè¿‡é‚®ä»¶æˆ–者其他è”系方å¼èŽ·æ‚‰ç”¨æˆ·ä½¿ç”¨æƒ…å†µï¼Œæœ‰æƒæ‹¿ç”¨æˆ·ç½‘站用作案例展示。<br>9ã€åœ¨æœªç»ThinkSAAS官方书é¢å…许的情况下,除ã€è‡ªèº«è¿è¥ã€‘外,任何个人ã€å…¬å¸å’Œç»„织ä¸èƒ½å•æ–¹é¢å‘布和出售以ThinkSAAS为基础开å‘的任何互è”网软件或者产å“,å¦åˆ™å°†è§†ä¸ºä¾µæƒè¡Œä¸ºï¼Œå°†ä¾ç…§ä¸­åŽäººæ°‘共和国法律追究其法律责任。<br>10ã€å…¬å¸ä¼ä¸šç­‰ç»„织机构使用ThinkSAAS软件必须购买ThinkSAAS商业授æƒå议。<br>11ã€ThinkSAAS官方拥有对此åè®®çš„ä¿®æ”¹å’Œä¸æ–­å®Œå–„。<br><br>ã€è‡ªèº«è¿è¥ã€‘解释:å³ç”¨æˆ·åœ¨ä½¿ç”¨ThinkSAAS中,ä¸é€šè¿‡å‡ºå”®ä»»ä½•以ThinkSAAS为基础开å‘的产å“,仅用作自身学习和自身商业è¿è¥çš„网站。<br><br>ã€ç”¨æˆ·æ¡æ¬¾ã€‘网å€ï¼šhttps://www.thinksaas.cn/home/info/key/agreement/<br>ã€å®˜æ–¹ç½‘站】网å€ï¼šhttps://www.thinksaas.cn/<br>ã€æ¼”示网站】网å€ï¼šhttps://demo.thinksaas.cn/</p>\n'), + (4, 0, 'éšç§å£°æ˜Ž', '\n<p>éšç§å£°æ˜Ž</p>\n'), + (5, 0, '加入我们', '\n<p>加入我们</p>\n'); +/*!40000 ALTER TABLE `ts_home_info` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_logs 结构 +DROP TABLE IF EXISTS `ts_logs`; +CREATE TABLE IF NOT EXISTS `ts_logs` ( + `logid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `ptable` varchar(50) NOT NULL DEFAULT '0' COMMENT '应用表åç§°', + `pkey` varchar(50) NOT NULL DEFAULT '0' COMMENT '应用表字段', + `pid` varchar(50) NOT NULL DEFAULT '0' COMMENT '应用表字段值', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题', + `content` longtext NOT NULL COMMENT '内容', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状æ€ï¼š0添加1修改2删除', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ—¶é—´', + PRIMARY KEY (`logid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户æ“作记录表'; + +-- 正在导出表 d_thinksaas.ts_logs 的数æ®ï¼š0 rows +DELETE FROM `ts_logs`; +/*!40000 ALTER TABLE `ts_logs` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_logs` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_love 结构 +DROP TABLE IF EXISTS `ts_love`; +CREATE TABLE IF NOT EXISTS `ts_love` ( + `loveid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `ptable` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表åç§°', + `pkey` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段', + `pid` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段值', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`loveid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='点赞/喜欢表'; + +-- 正在导出表 d_thinksaas.ts_love 的数æ®ï¼š0 rows +DELETE FROM `ts_love`; +/*!40000 ALTER TABLE `ts_love` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_love` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_mail_options 结构 +DROP TABLE IF EXISTS `ts_mail_options`; +CREATE TABLE IF NOT EXISTS `ts_mail_options` ( + `optionid` int(11) NOT NULL AUTO_INCREMENT COMMENT '选项ID', + `optionname` varchar(32) NOT NULL DEFAULT '' COMMENT '选项åå­—', + `optionvalue` varchar(512) NOT NULL DEFAULT '' COMMENT '选项内容', + PRIMARY KEY (`optionid`), + UNIQUE KEY `optionname` (`optionname`) +) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COMMENT='å‘信邮件é…ç½®'; + +-- 正在导出表 d_thinksaas.ts_mail_options 的数æ®ï¼š8 rows +DELETE FROM `ts_mail_options`; +/*!40000 ALTER TABLE `ts_mail_options` DISABLE KEYS */; +INSERT INTO `ts_mail_options` (`optionid`, `optionname`, `optionvalue`) VALUES + (1, 'appname', '邮件'), + (2, 'appdesc', 'ThinkSAAS邮件'), + (3, 'isenable', '0'), + (4, 'mailhost', 'smtp.exmail.qq.com'), + (5, 'ssl', '1'), + (6, 'mailport', '587'), + (7, 'mailuser', 'postmaster@thinksaas.cn'), + (8, 'mailpwd', ''); +/*!40000 ALTER TABLE `ts_mail_options` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_message 结构 +DROP TABLE IF EXISTS `ts_message`; +CREATE TABLE IF NOT EXISTS `ts_message` ( + `messageid` int(11) NOT NULL AUTO_INCREMENT COMMENT '消æ¯ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT 'å‘é€ç”¨æˆ·ID', + `touserid` int(11) NOT NULL DEFAULT '0' COMMENT '接收消æ¯çš„用户ID', + `content` text NOT NULL COMMENT '内容', + `tourl` varchar(255) NOT NULL DEFAULT '' COMMENT '消æ¯è·³è½¬åœ°å€', + `extend` varchar(255) NOT NULL DEFAULT '' COMMENT 'æ¶ˆæ¯æ‰©å±•', + `isread` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å·²è¯»', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`messageid`), + KEY `touserid` (`touserid`,`isread`), + KEY `userid` (`userid`,`touserid`,`isread`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='短消æ¯è¡¨'; + +-- 正在导出表 d_thinksaas.ts_message 的数æ®ï¼š0 rows +DELETE FROM `ts_message`; +/*!40000 ALTER TABLE `ts_message` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_message` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_permissions 结构 +DROP TABLE IF EXISTS `ts_permissions`; +CREATE TABLE IF NOT EXISTS `ts_permissions` ( + `permissionsid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `ugid` int(11) NOT NULL DEFAULT '0' COMMENT '用户组ID', + `app` varchar(50) NOT NULL DEFAULT '' COMMENT 'APP', + `action` varchar(50) NOT NULL DEFAULT '' COMMENT 'ACTION', + `mg` varchar(50) NOT NULL DEFAULT '' COMMENT 'MG', + `api` varchar(50) NOT NULL DEFAULT '' COMMENT 'API', + `ts` varchar(50) NOT NULL DEFAULT '' COMMENT 'TS', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æƒé™çжæ€0æ— 1有', + PRIMARY KEY (`permissionsid`) +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COMMENT='用户组æƒé™è¡¨'; + +-- 正在导出表 d_thinksaas.ts_permissions 的数æ®ï¼š~25 rows (大约) +DELETE FROM `ts_permissions`; +/*!40000 ALTER TABLE `ts_permissions` DISABLE KEYS */; +INSERT INTO `ts_permissions` (`permissionsid`, `ugid`, `app`, `action`, `mg`, `api`, `ts`, `status`) VALUES + (1, 1, 'article', 'add', '', '', '', 1), + (2, 1, 'article', 'show', '', '', '', 1), + (3, 1, 'article', 'edit', '', '', '', 1), + (4, 1, 'article', 'delete', '', '', '', 1), + (5, 1, 'article', 'admin', 'options', '', '', 1), + (6, 1, 'article', 'admin', 'permissions', '', '', 1), + (7, 1, 'article', 'admin', 'cate', '', 'add', 1), + (8, 1, 'article', 'admin', 'cate', '', 'edit', 1), + (9, 1, 'article', 'api', '', 'show', '', 1), + (10, 2, 'article', 'add', '', '', '', 1), + (11, 2, 'article', 'show', '', '', '', 1), + (12, 2, 'article', 'edit', '', '', '', 1), + (13, 2, 'article', 'delete', '', '', '', 1), + (14, 2, 'article', 'admin', 'options', '', '', 1), + (15, 2, 'article', 'admin', 'permissions', '', '', 1), + (16, 2, 'article', 'admin', 'cate', '', 'add', 1), + (17, 2, 'article', 'admin', 'cate', '', 'edit', 1), + (18, 2, 'article', 'api', '', 'show', '', 1), + (19, 3, 'article', 'add', '', '', '', 1), + (20, 3, 'article', 'show', '', '', '', 1), + (21, 3, 'article', 'edit', '', '', '', 1), + (22, 3, 'article', 'delete', '', '', '', 1), + (23, 3, 'article', 'api', '', 'show', '', 1), + (24, 4, 'article', 'show', '', '', '', 1), + (25, 4, 'article', 'api', '', 'show', '', 1); +/*!40000 ALTER TABLE `ts_permissions` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_phone_code 结构 +DROP TABLE IF EXISTS `ts_phone_code`; +CREATE TABLE IF NOT EXISTS `ts_phone_code` ( + `phone` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '手机å·', + `code` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '验è¯ç ', + `nums` int(11) NOT NULL DEFAULT '0' COMMENT '错误次数', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ—¶é—´', + UNIQUE KEY `phone` (`phone`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='手机å·éªŒè¯ç '; + +-- 正在导出表 d_thinksaas.ts_phone_code 的数æ®ï¼š0 rows +DELETE FROM `ts_phone_code`; +/*!40000 ALTER TABLE `ts_phone_code` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_phone_code` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_photo 结构 +DROP TABLE IF EXISTS `ts_photo`; +CREATE TABLE IF NOT EXISTS `ts_photo` ( + `photoid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增图片ID', + `albumid` int(11) NOT NULL DEFAULT '0' COMMENT '相册ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '图片åç§°', + `phototype` char(32) NOT NULL DEFAULT '' COMMENT '图片类型', + `path` char(32) NOT NULL DEFAULT '' COMMENT '图片路径', + `photourl` varchar(64) NOT NULL DEFAULT '' COMMENT '图片地å€', + `photosize` char(32) NOT NULL DEFAULT '' COMMENT '图片大å°', + `photodesc` char(120) NOT NULL DEFAULT '' COMMENT '图片介ç»', + `count_view` int(11) NOT NULL DEFAULT '0' COMMENT '统计æµè§ˆé‡', + `count_comment` int(11) NOT NULL DEFAULT '0' COMMENT '统计评论数', + `count_love` int(11) NOT NULL DEFAULT '0' COMMENT '统计点赞喜欢数', + `isrecommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0䏿ލè1推è', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT '添加时间', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ›´æ–°æ—¶é—´', + PRIMARY KEY (`photoid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='相册图片'; + +-- 正在导出表 d_thinksaas.ts_photo 的数æ®ï¼š0 rows +DELETE FROM `ts_photo`; +/*!40000 ALTER TABLE `ts_photo` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_photo` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_photo_album 结构 +DROP TABLE IF EXISTS `ts_photo_album`; +CREATE TABLE IF NOT EXISTS `ts_photo_album` ( + `albumid` int(11) NOT NULL AUTO_INCREMENT COMMENT '相册ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `path` char(32) NOT NULL DEFAULT '' COMMENT '相册路径', + `albumface` varchar(64) NOT NULL DEFAULT '' COMMENT '相册å°é¢', + `albumname` varchar(64) NOT NULL DEFAULT '' COMMENT '相册åç§°', + `albumdesc` varchar(512) NOT NULL DEFAULT '' COMMENT '相册介ç»', + `count_photo` int(11) NOT NULL DEFAULT '0' COMMENT '统计图片数', + `count_view` int(11) NOT NULL DEFAULT '0' COMMENT '统计æµè§ˆé‡', + `isrecommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æ˜¯å¦æŽ¨è', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0审核1未审核', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT '添加时间', + `uptime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ›´æ–°æ—¶é—´', + PRIMARY KEY (`albumid`), + KEY `userid` (`userid`), + KEY `isrecommend` (`isrecommend`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='相册'; + +-- 正在导出表 d_thinksaas.ts_photo_album 的数æ®ï¼š0 rows +DELETE FROM `ts_photo_album`; +/*!40000 ALTER TABLE `ts_photo_album` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_photo_album` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_slide 结构 +DROP TABLE IF EXISTS `ts_slide`; +CREATE TABLE IF NOT EXISTS `ts_slide` ( + `slideid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `typeid` int(11) NOT NULL DEFAULT '0' COMMENT '类型ID默认0为web端轮播', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '标题', + `info` varchar(128) NOT NULL DEFAULT '' COMMENT '介ç»', + `url` varchar(64) NOT NULL DEFAULT '' COMMENT '链接', + `path` char(32) NOT NULL DEFAULT '' COMMENT '路径', + `photo` char(32) NOT NULL DEFAULT '' COMMENT '图片', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ—¶é—´', + PRIMARY KEY (`slideid`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='轮播图'; + +-- 正在导出表 d_thinksaas.ts_slide 的数æ®ï¼š1 rows +DELETE FROM `ts_slide`; +/*!40000 ALTER TABLE `ts_slide` DISABLE KEYS */; +INSERT INTO `ts_slide` (`slideid`, `typeid`, `title`, `info`, `url`, `path`, `photo`, `addtime`) VALUES + (1, 0, 'ThinkSAASå¼€æºç¤¾åŒº', 'å…³æ³¨å®˜æ–¹å¾®ä¿¡ï¼Œæ—¶åˆ»èŽ·å–æœ€æ–°ç‰ˆæœ¬æ›´æ–°é€šçŸ¥', 'https://www.thinksaas.cn', '0/0', '0/0/1.jpg', 1416533676); +/*!40000 ALTER TABLE `ts_slide` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_system_options 结构 +DROP TABLE IF EXISTS `ts_system_options`; +CREATE TABLE IF NOT EXISTS `ts_system_options` ( + `optionname` varchar(64) NOT NULL DEFAULT '' COMMENT '选项åå­—', + `optionvalue` varchar(512) NOT NULL DEFAULT '' COMMENT '选项内容', + UNIQUE KEY `optionname` (`optionname`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='系统管ç†é…ç½®'; + +-- 正在导出表 d_thinksaas.ts_system_options 的数æ®ï¼š47 rows +DELETE FROM `ts_system_options`; +/*!40000 ALTER TABLE `ts_system_options` DISABLE KEYS */; +INSERT INTO `ts_system_options` (`optionname`, `optionvalue`) VALUES + ('site_title', 'ThinkSAAS'), + ('site_subtitle', 'åˆä¸€ä¸ªThinkSAAS社区'), + ('site_key', 'thinksaas'), + ('site_desc', 'thinksaas'), + ('site_url', 'http://d.qiniao.com/'), + ('link_url', 'http://d.qiniao.com/'), + ('site_pkey', '4c523b534c11b6f5de89a53d0e6af0c4'), + ('site_email', 'admin@admin.com'), + ('site_icp', '豫ICP备00000000å·'), + ('isface', '0'), + ('isinvite', '0'), + ('regtype', '0'), + ('isplogin', '0'), + ('isverify', '0'), + ('isverifyphone', '0'), + ('istomy', '0'), + ('isauthcode', '0'), + ('istoken', '0'), + ('is_weixin', '0'), + ('weixin_appid', ''), + ('weixin_appsecret', ''), + ('is_vaptcha', '0'), + ('vaptcha_vid', ''), + ('vaptcha_key', ''), + ('timezone', 'Asia/Hong_Kong'), + ('visitor', '0'), + ('publisher', '0'), + ('isniming', '0'), + ('pubtime', ''), + ('timeblank', '0'), + ('isallowedit', '0'), + ('isallowdelete', '0'), + ('anti_word_type', '0'), + ('site_theme', 'sample'), + ('site_urltype', '1'), + ('file_upload_type', '0'), + ('alioss_accesskey_id', ''), + ('alioss_accesskey_secret', ''), + ('alioss_bucket', ''), + ('alioss_endpoint', ''), + ('alioss_bucket_url', ''), + ('photo_size', '10'), + ('photo_type', 'jpg,gif,png,jpeg'), + ('photo_check', '0'), + ('photo_driver', 'gd'), + ('attach_size', '10'), + ('attach_type', 'zip,rar,doc,txt,ppt'), + ('dayscoretop', '10'), + ('logo', 'logo.png'); +/*!40000 ALTER TABLE `ts_system_options` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag 结构 +DROP TABLE IF EXISTS `ts_tag`; +CREATE TABLE IF NOT EXISTS `ts_tag` ( + `tagid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `tagname` varchar(32) NOT NULL DEFAULT '' COMMENT '标签åç§°', + `count_user` int(11) NOT NULL DEFAULT '0' COMMENT '统计用户标签', + `count_group` int(11) NOT NULL DEFAULT '0' COMMENT '统计å°ç»„标签', + `count_topic` int(11) NOT NULL DEFAULT '0' COMMENT 'ç»Ÿè®¡å¸–å­æ ‡ç­¾', + `count_article` int(11) NOT NULL DEFAULT '0' COMMENT '统计文章标签', + `count_photo` int(11) NOT NULL DEFAULT '0' COMMENT '统计图片使用数', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å®¡æ ¸0是1å¦', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ›´æ–°æ—¶é—´', + PRIMARY KEY (`tagid`), + UNIQUE KEY `tagname` (`tagname`) +) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='标签表'; + + +-- 正在导出表 d_thinksaas.ts_tag 的数æ®ï¼š0 rows +DELETE FROM `ts_tag`; +/*!40000 ALTER TABLE `ts_tag` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag_article_index 结构 +DROP TABLE IF EXISTS `ts_tag_article_index`; +CREATE TABLE IF NOT EXISTS `ts_tag_article_index` ( + `articleid` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­ID', + `tagid` int(11) NOT NULL DEFAULT '0' COMMENT '标签ID', + UNIQUE KEY `articleid_2` (`articleid`,`tagid`), + KEY `articleid` (`articleid`), + KEY `tagid` (`tagid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='文章标签关è”'; + +-- 正在导出表 d_thinksaas.ts_tag_article_index 的数æ®ï¼š0 rows +DELETE FROM `ts_tag_article_index`; +/*!40000 ALTER TABLE `ts_tag_article_index` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag_article_index` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag_group_index 结构 +DROP TABLE IF EXISTS `ts_tag_group_index`; +CREATE TABLE IF NOT EXISTS `ts_tag_group_index` ( + `groupid` int(11) NOT NULL DEFAULT '0' COMMENT 'å°ç»„ID', + `tagid` int(11) NOT NULL DEFAULT '0' COMMENT '标签ID', + UNIQUE KEY `groupid_2` (`groupid`,`tagid`), + KEY `groupid` (`groupid`), + KEY `tagid` (`tagid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='å°ç»„标签关è”'; + +-- 正在导出表 d_thinksaas.ts_tag_group_index 的数æ®ï¼š0 rows +DELETE FROM `ts_tag_group_index`; +/*!40000 ALTER TABLE `ts_tag_group_index` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag_group_index` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag_photo_index 结构 +DROP TABLE IF EXISTS `ts_tag_photo_index`; +CREATE TABLE IF NOT EXISTS `ts_tag_photo_index` ( + `photoid` int(11) NOT NULL DEFAULT '0' COMMENT '图片ID', + `tagid` int(11) NOT NULL DEFAULT '0' COMMENT '标签ID', + UNIQUE KEY `photoid_2` (`photoid`,`tagid`), + KEY `tagid` (`tagid`), + KEY `photoid` (`photoid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='相册图片标签关è”'; + +-- 正在导出表 d_thinksaas.ts_tag_photo_index 的数æ®ï¼š0 rows +DELETE FROM `ts_tag_photo_index`; +/*!40000 ALTER TABLE `ts_tag_photo_index` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag_photo_index` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag_topic_index 结构 +DROP TABLE IF EXISTS `ts_tag_topic_index`; +CREATE TABLE IF NOT EXISTS `ts_tag_topic_index` ( + `topicid` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­ID', + `tagid` int(11) NOT NULL DEFAULT '0' COMMENT '标签ID', + UNIQUE KEY `topicid_2` (`topicid`,`tagid`), + KEY `topicid` (`topicid`), + KEY `tagid` (`tagid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='取孿 ‡ç­¾å…³è”'; + +-- 正在导出表 d_thinksaas.ts_tag_topic_index 的数æ®ï¼š0 rows +DELETE FROM `ts_tag_topic_index`; +/*!40000 ALTER TABLE `ts_tag_topic_index` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag_topic_index` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_tag_user_index 结构 +DROP TABLE IF EXISTS `ts_tag_user_index`; +CREATE TABLE IF NOT EXISTS `ts_tag_user_index` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `tagid` int(11) NOT NULL DEFAULT '0' COMMENT '标签ID', + UNIQUE KEY `userid_2` (`userid`,`tagid`), + KEY `userid` (`userid`), + KEY `tagid` (`tagid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户标签关è”'; + +-- 正在导出表 d_thinksaas.ts_tag_user_index 的数æ®ï¼š0 rows +DELETE FROM `ts_tag_user_index`; +/*!40000 ALTER TABLE `ts_tag_user_index` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_tag_user_index` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_task 结构 +DROP TABLE IF EXISTS `ts_task`; +CREATE TABLE IF NOT EXISTS `ts_task` ( + `taskid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增任务ID', + `taskkey` char(32) NOT NULL DEFAULT '' COMMENT '任务标识', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '任务标题', + `content` text NOT NULL COMMENT '任务介ç»', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ—¶é—´', + PRIMARY KEY (`taskid`), + UNIQUE KEY `taskkey` (`taskkey`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='任务'; + +-- 正在导出表 d_thinksaas.ts_task 的数æ®ï¼š0 rows +DELETE FROM `ts_task`; +/*!40000 ALTER TABLE `ts_task` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_task` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_task_user 结构 +DROP TABLE IF EXISTS `ts_task_user`; +CREATE TABLE IF NOT EXISTS `ts_task_user` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `taskkey` char(32) NOT NULL DEFAULT '' COMMENT '任务key', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ—¶é—´', + UNIQUE KEY `userid` (`userid`,`taskkey`), + KEY `taskkey` (`taskkey`), + KEY `userid_2` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户任务关è”'; + +-- 正在导出表 d_thinksaas.ts_task_user 的数æ®ï¼š0 rows +DELETE FROM `ts_task_user`; +/*!40000 ALTER TABLE `ts_task_user` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_task_user` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_topic 结构 +DROP TABLE IF EXISTS `ts_topic`; +CREATE TABLE IF NOT EXISTS `ts_topic` ( + `topicid` int(11) NOT NULL AUTO_INCREMENT COMMENT 'è¯é¢˜ID', + `ptable` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表åç§°', + `pkey` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段', + `pid` varchar(64) NOT NULL DEFAULT '' COMMENT '应用表字段值', + `pjson` varchar(512) NOT NULL DEFAULT '' COMMENT '应用jsonæ•°æ®', + `typeid` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­åˆ†ç±»ID', + `groupid` int(11) NOT NULL DEFAULT '0' COMMENT 'å°ç»„ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '取孿 ‡é¢˜', + `label` varchar(64) NOT NULL DEFAULT '' COMMENT '快速标注', + `content` longtext NOT NULL COMMENT '帖å­å†…容', + `gaiyao` varchar(256) NOT NULL DEFAULT '' COMMENT '内容概è¦', + `score` int(11) NOT NULL DEFAULT '0' COMMENT '查看需è¦ç§¯åˆ†', + `count_comment` int(11) NOT NULL DEFAULT '0' COMMENT '回å¤ç»Ÿè®¡', + `count_view` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­å±•示数', + `count_love` int(11) NOT NULL DEFAULT '0' COMMENT '喜欢数', + `istop` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦ç½®é¡¶', + `isclose` int(4) NOT NULL DEFAULT '0' COMMENT '是å¦å…³é—­å¸–å­', + `iscomment` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å…许评论', + `iscommentshow` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦è¯„è®ºåŽæ˜¾ç¤ºå†…容', + `isposts` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦ç²¾åŽå¸–å­', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0ä¸å®¡æ ¸1审核', + `isdelete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0ä¸åˆ é™¤1删除', + `isrecommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1为推è', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ›´æ–°æ—¶é—´', + PRIMARY KEY (`topicid`), + KEY `groupid` (`groupid`), + KEY `userid` (`userid`), + KEY `title` (`title`), + KEY `groupid_2` (`groupid`), + KEY `typeid` (`typeid`), + KEY `addtime` (`addtime`), + KEY `count_comment` (`count_comment`), + KEY `count_view` (`count_view`), + KEY `count_love` (`count_love`), + KEY `count_view_2` (`count_view`,`addtime`), + KEY `isshow` (`isaudit`,`uptime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='è¯é¢˜(帖å­)'; + +-- 正在导出表 d_thinksaas.ts_topic 的数æ®ï¼š0 rows +DELETE FROM `ts_topic`; +/*!40000 ALTER TABLE `ts_topic` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_topic` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_topic_edit 结构 +DROP TABLE IF EXISTS `ts_topic_edit`; +CREATE TABLE IF NOT EXISTS `ts_topic_edit` ( + `editid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编辑ID', + `topicid` int(11) NOT NULL DEFAULT '0' COMMENT 'è¯é¢˜ID', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `content` text NOT NULL COMMENT '内容', + `isupdate` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0未更新1æ›´æ–°', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT '修改时间', + PRIMARY KEY (`editid`), + UNIQUE KEY `topicid` (`topicid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='è¯é¢˜ç¼–辑'; + +-- 正在导出表 d_thinksaas.ts_topic_edit 的数æ®ï¼š0 rows +DELETE FROM `ts_topic_edit`; +/*!40000 ALTER TABLE `ts_topic_edit` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_topic_edit` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_topic_photo 结构 +DROP TABLE IF EXISTS `ts_topic_photo`; +CREATE TABLE IF NOT EXISTS `ts_topic_photo` ( + `photoid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `topicid` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­ID', + `orderid` int(11) NOT NULL DEFAULT '0' COMMENT '排åºID', + `path` varchar(50) NOT NULL DEFAULT '' COMMENT '路径', + `photo` varchar(50) NOT NULL DEFAULT '' COMMENT '图片', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`photoid`), + UNIQUE KEY `photoid` (`photoid`), + KEY `topicid` (`topicid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='帖å­å›¾ç‰‡è¡¨'; + +-- 正在导出表 d_thinksaas.ts_topic_photo 的数æ®ï¼š0 rows +DELETE FROM `ts_topic_photo`; +/*!40000 ALTER TABLE `ts_topic_photo` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_topic_photo` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_topic_type 结构 +DROP TABLE IF EXISTS `ts_topic_type`; +CREATE TABLE IF NOT EXISTS `ts_topic_type` ( + `typeid` int(11) NOT NULL AUTO_INCREMENT COMMENT '帖å­åˆ†ç±»ID', + `groupid` int(11) NOT NULL DEFAULT '0' COMMENT 'å°ç»„ID', + `typename` varchar(64) NOT NULL DEFAULT '' COMMENT '帖å­åˆ†ç±»åç§°', + `count_topic` int(11) NOT NULL DEFAULT '0' COMMENT '统计帖å­', + PRIMARY KEY (`typeid`), + KEY `groupid` (`groupid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='帖å­åˆ†ç±»'; + +-- 正在导出表 d_thinksaas.ts_topic_type 的数æ®ï¼š0 rows +DELETE FROM `ts_topic_type`; +/*!40000 ALTER TABLE `ts_topic_type` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_topic_type` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_topic_user 结构 +DROP TABLE IF EXISTS `ts_topic_user`; +CREATE TABLE IF NOT EXISTS `ts_topic_user` ( + `topicid` int(11) NOT NULL DEFAULT '0' COMMENT '帖å­ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ—¶é—´', + UNIQUE KEY `topicid_userid` (`topicid`,`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='积分帖å­ç”¨æˆ·å…³è”表'; + +-- 正在导出表 d_thinksaas.ts_topic_user 的数æ®ï¼š0 rows +DELETE FROM `ts_topic_user`; +/*!40000 ALTER TABLE `ts_topic_user` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_topic_user` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_upload 结构 +DROP TABLE IF EXISTS `ts_upload`; +CREATE TABLE IF NOT EXISTS `ts_upload` ( + `upid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `fileurl` varchar(50) NOT NULL DEFAULT '' COMMENT '文件存储地å€', + `filename` varchar(50) NOT NULL DEFAULT '' COMMENT '文件åç§°', + `filesize` varchar(50) NOT NULL DEFAULT '' COMMENT '文件大å°', + `filetype` varchar(50) NOT NULL DEFAULT '' COMMENT '文件类型', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT '添加时间', + PRIMARY KEY (`upid`) USING BTREE, + KEY `userid` (`userid`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='分å—上传临时存储'; + +-- 正在导出表 d_thinksaas.ts_upload 的数æ®ï¼š0 rows +DELETE FROM `ts_upload`; +/*!40000 ALTER TABLE `ts_upload` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_upload` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user 结构 +DROP TABLE IF EXISTS `ts_user`; +CREATE TABLE IF NOT EXISTS `ts_user` ( + `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `pwd` char(32) NOT NULL DEFAULT '' COMMENT '用户密ç ', + `salt` char(32) NOT NULL DEFAULT '' COMMENT '加点ç›', + `email` varchar(64) NOT NULL DEFAULT '' COMMENT '用户email', + `phone` varchar(64) NOT NULL DEFAULT '' COMMENT '手机å·', + `resetpwd` char(32) NOT NULL DEFAULT '' COMMENT 'é‡è®¾å¯†ç ', + `code` char(32) NOT NULL DEFAULT '' COMMENT '邮箱验è¯ç ', + PRIMARY KEY (`userid`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `phone` (`phone`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户'; + +-- 正在导出表 d_thinksaas.ts_user 的数æ®ï¼š0 rows +DELETE FROM `ts_user`; +/*!40000 ALTER TABLE `ts_user` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_follow 结构 +DROP TABLE IF EXISTS `ts_user_follow`; +CREATE TABLE IF NOT EXISTS `ts_user_follow` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `touserid` int(11) NOT NULL DEFAULT '0' COMMENT '被关注的用户ID', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + UNIQUE KEY `userid_touserid` (`userid`,`touserid`) USING BTREE, + KEY `userid` (`userid`), + KEY `touserid` (`touserid`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户关注跟éš'; + +-- 正在导出表 d_thinksaas.ts_user_follow 的数æ®ï¼š0 rows +DELETE FROM `ts_user_follow`; +/*!40000 ALTER TABLE `ts_user_follow` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_follow` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_gb 结构 +DROP TABLE IF EXISTS `ts_user_gb`; +CREATE TABLE IF NOT EXISTS `ts_user_gb` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增留言ID', + `reid` int(11) NOT NULL DEFAULT '0' COMMENT '回å¤ç•™è¨€ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '留言用户ID', + `touserid` int(11) NOT NULL DEFAULT '0' COMMENT '被留言用户ID', + `content` text NOT NULL COMMENT '内容', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT 'æ—¶é—´', + PRIMARY KEY (`id`), + KEY `userid` (`userid`), + KEY `touserid` (`touserid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='留言表'; + +-- 正在导出表 d_thinksaas.ts_user_gb 的数æ®ï¼š0 rows +DELETE FROM `ts_user_gb`; +/*!40000 ALTER TABLE `ts_user_gb` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_gb` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_group 结构 +DROP TABLE IF EXISTS `ts_user_group`; +CREATE TABLE IF NOT EXISTS `ts_user_group` ( + `ugid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增用户组ID', + `ugname` varchar(50) NOT NULL DEFAULT '' COMMENT '用户组åå­—', + `uginfo` varchar(256) NOT NULL DEFAULT '' COMMENT 'æè¿°', + PRIMARY KEY (`ugid`) USING BTREE, + UNIQUE KEY `groupname` (`ugname`) USING BTREE +) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='用户组'; + +-- 正在导出表 d_thinksaas.ts_user_group 的数æ®ï¼š4 rows +DELETE FROM `ts_user_group`; +/*!40000 ALTER TABLE `ts_user_group` DISABLE KEYS */; +INSERT INTO `ts_user_group` (`ugid`, `ugname`, `uginfo`) VALUES + (1, '系统管ç†å‘˜', 'ç³»ç»Ÿç®¡ç†æœ€é«˜æƒé™ç»„'), + (2, '内容管ç†å‘˜', '对用户å‘å¸ƒçš„å†…å®¹è¿›è¡Œç®¡ç†æ“作'), + (3, '普通用户', '默认普通用户组'), + (4, '游客', '未登录用户'); +/*!40000 ALTER TABLE `ts_user_group` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_info 结构 +DROP TABLE IF EXISTS `ts_user_info`; +CREATE TABLE IF NOT EXISTS `ts_user_info` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `fuserid` int(11) NOT NULL DEFAULT '0' COMMENT 'æ¥è‡ªé‚€è¯·ç”¨æˆ·', + `ugid` int(11) NOT NULL DEFAULT '0' COMMENT '用户组ID', + `username` char(32) NOT NULL DEFAULT '' COMMENT '用户å', + `email` varchar(64) NOT NULL DEFAULT '' COMMENT 'Email邮箱', + `sex` char(32) NOT NULL DEFAULT '女' COMMENT '性别', + `phone` varchar(64) NOT NULL DEFAULT '' COMMENT '电è¯å·ç ', + `roleid` int(11) NOT NULL DEFAULT '1' COMMENT '角色ID', + `province` varchar(64) NOT NULL DEFAULT '' COMMENT 'çœ/直辖市/自治区', + `city` varchar(64) NOT NULL DEFAULT '' COMMENT '市县区', + `district` varchar(64) NOT NULL DEFAULT '' COMMENT '区域', + `path` char(32) NOT NULL DEFAULT '' COMMENT '头åƒè·¯å¾„', + `face` char(64) NOT NULL DEFAULT '' COMMENT '会员头åƒ', + `signed` varchar(64) NOT NULL DEFAULT '' COMMENT 'ç­¾å', + `blog` char(32) NOT NULL DEFAULT '' COMMENT 'åšå®¢', + `about` varchar(255) NOT NULL DEFAULT '' COMMENT '关于我', + `ip` char(32) NOT NULL DEFAULT '' COMMENT '登陆IP', + `address` varchar(64) NOT NULL DEFAULT '' COMMENT '地å€', + `comefrom` tinyint(1) NOT NULL DEFAULT '0' COMMENT '注册æ¥è‡ª0web1手机客户端', + `allscore` int(11) NOT NULL DEFAULT '0' COMMENT '所有获得的总积分', + `count_score` int(11) NOT NULL DEFAULT '0' COMMENT '统计积分', + `count_follow` int(11) NOT NULL DEFAULT '0' COMMENT '统计用户跟éšçš„', + `count_followed` int(11) NOT NULL DEFAULT '0' COMMENT '统计用户被跟éšçš„', + `count_group` int(11) NOT NULL DEFAULT '0' COMMENT '统计å°ç»„æ•°', + `count_topic` int(11) NOT NULL DEFAULT '0' COMMENT '统计帖å­', + `count_collect` int(11) NOT NULL DEFAULT '0' COMMENT '统计收è—', + `isadmin` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æ˜¯å¦æ˜¯ç®¡ç†å‘˜', + `isenable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å¯ç”¨ï¼š0å¯ç”¨1ç¦ç”¨', + `isverify` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0未验è¯1验è¯', + `isverifyphone` tinyint(1) NOT NULL DEFAULT '0' COMMENT '手机å·éªŒè¯0未验è¯1验è¯', + `isrenzheng` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦è®¤è¯0未认è¯1认è¯', + `isrecommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'æ˜¯å¦æŽ¨è', + `verifycode` char(11) NOT NULL DEFAULT '' COMMENT '验è¯ç ', + `autologin` char(128) NOT NULL DEFAULT '' COMMENT '自动登陆', + `signin` int(11) NOT NULL DEFAULT '0' COMMENT '签到时间', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT '登陆时间', + UNIQUE KEY `email` (`email`), + UNIQUE KEY `userid` (`userid`), + UNIQUE KEY `email_2` (`email`,`autologin`), + KEY `fuserid` (`fuserid`), + KEY `isrecommend` (`isrecommend`), + KEY `isrenzheng` (`isrenzheng`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户'; + +-- 正在导出表 d_thinksaas.ts_user_info 的数æ®ï¼š0 rows +DELETE FROM `ts_user_info`; +/*!40000 ALTER TABLE `ts_user_info` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_info` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_invites 结构 +DROP TABLE IF EXISTS `ts_user_invites`; +CREATE TABLE IF NOT EXISTS `ts_user_invites` ( + `inviteid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增邀请ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `invitecode` char(32) NOT NULL DEFAULT '' COMMENT '邀请ç ', + `isused` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦ä½¿ç”¨', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`inviteid`), + UNIQUE KEY `invitecode` (`invitecode`), + KEY `isused` (`isused`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户邀请ç '; + +-- 正在导出表 d_thinksaas.ts_user_invites 的数æ®ï¼š0 rows +DELETE FROM `ts_user_invites`; +/*!40000 ALTER TABLE `ts_user_invites` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_invites` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_open 结构 +DROP TABLE IF EXISTS `ts_user_open`; +CREATE TABLE IF NOT EXISTS `ts_user_open` ( + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `sitename` varchar(64) NOT NULL DEFAULT '' COMMENT '连接网站åç§°', + `openid` varchar(64) NOT NULL DEFAULT '' COMMENT 'openid', + `access_token` varchar(128) NOT NULL DEFAULT '' COMMENT 'access_token', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ›´æ–°æ—¶é—´', + UNIQUE KEY `userid_2` (`userid`,`sitename`), + UNIQUE KEY `sitename` (`sitename`,`openid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='第三方连接登录'; + +-- 正在导出表 d_thinksaas.ts_user_open 的数æ®ï¼š0 rows +DELETE FROM `ts_user_open`; +/*!40000 ALTER TABLE `ts_user_open` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_open` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_role 结构 +DROP TABLE IF EXISTS `ts_user_role`; +CREATE TABLE IF NOT EXISTS `ts_user_role` ( + `roleid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增角色ID', + `rolename` char(32) NOT NULL DEFAULT '' COMMENT '角色åç§°', + `score_start` int(11) NOT NULL DEFAULT '0' COMMENT '积分开始', + `score_end` int(11) NOT NULL DEFAULT '0' COMMENT '积分结æŸ', + PRIMARY KEY (`roleid`) +) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COMMENT='角色'; + +-- 正在导出表 d_thinksaas.ts_user_role 的数æ®ï¼š17 rows +DELETE FROM `ts_user_role`; +/*!40000 ALTER TABLE `ts_user_role` DISABLE KEYS */; +INSERT INTO `ts_user_role` (`roleid`, `rolename`, `score_start`, `score_end`) VALUES + (1, '列兵', 0, 5000), + (2, '下士', 5000, 20000), + (3, '中士', 20000, 40000), + (4, '上士', 40000, 80000), + (5, '三级准尉', 80000, 160000), + (6, '二级准尉', 160000, 320000), + (7, '一级准尉', 320000, 640000), + (8, 'å°‘å°‰', 640000, 1280000), + (9, '中尉', 1280000, 2560000), + (10, '上尉', 2560000, 5120000), + (11, 'å°‘æ ¡', 5120000, 10240000), + (12, '中校', 10240000, 20480000), + (13, '上校', 20480000, 40960000), + (14, '准将', 40960000, 81920000), + (15, 'å°‘å°†', 81920000, 123840000), + (16, '中将', 123840000, 327680000), + (17, '上将', 327680000, 0); +/*!40000 ALTER TABLE `ts_user_role` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_score 结构 +DROP TABLE IF EXISTS `ts_user_score`; +CREATE TABLE IF NOT EXISTS `ts_user_score` ( + `scoreid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增积分ID', + `scorekey` varchar(64) NOT NULL DEFAULT '' COMMENT '积分key', + `scorename` varchar(64) NOT NULL DEFAULT '' COMMENT '积分åç§°', + `app` char(32) NOT NULL DEFAULT '' COMMENT 'APP', + `action` char(32) NOT NULL DEFAULT '' COMMENT 'ACTION', + `mg` char(32) NOT NULL DEFAULT '' COMMENT 'MG', + `api` char(32) NOT NULL DEFAULT '' COMMENT 'API', + `ts` char(32) NOT NULL DEFAULT '' COMMENT 'TS', + `score` int(11) NOT NULL DEFAULT '0' COMMENT '积分数', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0加积分1å‡ç§¯åˆ†', + PRIMARY KEY (`scoreid`), + UNIQUE KEY `app_action_mg_api_ts` (`app`,`action`,`mg`,`api`,`ts`) +) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COMMENT='用户积分设置表'; + +-- 正在导出表 d_thinksaas.ts_user_score 的数æ®ï¼š17 rows +DELETE FROM `ts_user_score`; +/*!40000 ALTER TABLE `ts_user_score` DISABLE KEYS */; +INSERT INTO `ts_user_score` (`scoreid`, `scorekey`, `scorename`, `app`, `action`, `mg`, `api`, `ts`, `score`, `status`) VALUES + (1, 'user_register', '用户注册', 'user', 'register', '', '', 'do', 10, 0), + (2, 'user_login', '用户登陆', 'user', 'login', '', '', 'do', 5, 0), + (3, 'topic_add', 'å‘帖', 'topic', 'add', '', '', 'do', 10, 0), + (4, 'pubs_comment', '评论', 'pubs', 'comment', '', '', 'do', 5, 0), + (5, 'attach_upload', '资料上传', 'attach', 'upload', '', '', 'do', 10, 0), + (6, 'user_signin', '用户签到', 'user', 'signin', '', '', '', 5, 0), + (7, 'group_topic_delete', '删除帖å­', 'group', 'do', '', '', 'deltopic', 5, 1), + (8, 'article_add', 'å‘布文章', 'article', 'add', '', '', 'do', 5, 0), + (9, 'article_delete', '删除文章', 'article', 'delete', '', '', '', 5, 1), + (11, 'article_admin_post_isaudit0', 'åŽå°æ–‡ç« å®¡æ ¸é€šè¿‡', 'article', 'admin', 'post', '', 'isaudit0', 5, 0), + (12, 'article_admin_post_isaudit1', 'åŽå°æ–‡ç« å®¡æ ¸ä¸é€šè¿‡', 'article', 'admin', 'post', '', 'isaudit1', 5, 1), + (13, 'ask_admin_topic_isaudit0', 'åŽå°é—®é¢˜å®¡æ ¸é€šè¿‡', 'ask', 'admin', 'topic', '', 'isaudit0', 5, 0), + (14, 'ask_admin_topic_isaudit1', 'åŽå°é—®é¢˜å®¡æ ¸ä¸é€šè¿‡', 'ask', 'admin', 'topic', '', 'isaudit1', 5, 1), + (15, 'ask_new_do', 'å‰å°å‘布问题', 'ask', 'new', '', '', 'do', 5, 0), + (16, 'ask_ajax_ask2commentid', 'å‰å°é—®é¢˜é‡‡çº³', 'ask', 'ajax', '', '', 'ask2commentid', 5, 0), + (17, 'article_admin_post_delete', 'åŽå°æ–‡ç« åˆ é™¤', 'article', 'admin', 'post', '', 'delete', 5, 1), + (18, 'user_phone_do', 'æ‰‹æœºå·æ³¨å†Œ', 'user', 'phone', '', '', 'do', 10, 0); +/*!40000 ALTER TABLE `ts_user_score` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_user_score_log 结构 +DROP TABLE IF EXISTS `ts_user_score_log`; +CREATE TABLE IF NOT EXISTS `ts_user_score_log` ( + `logid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增积分记录ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `scorename` varchar(64) NOT NULL DEFAULT '' COMMENT '积分说明', + `score` int(11) NOT NULL DEFAULT '0' COMMENT '得分', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0增加1å‡å°‘', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '积分时间', + PRIMARY KEY (`logid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='用户积分记录'; + +-- 正在导出表 d_thinksaas.ts_user_score_log 的数æ®ï¼š0 rows +DELETE FROM `ts_user_score_log`; +/*!40000 ALTER TABLE `ts_user_score_log` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_user_score_log` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_weibo 结构 +DROP TABLE IF EXISTS `ts_weibo`; +CREATE TABLE IF NOT EXISTS `ts_weibo` ( + `weiboid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增唠å¨ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `title` varchar(256) NOT NULL DEFAULT '' COMMENT '一å¥è¯å†…容', + `count_comment` int(11) NOT NULL DEFAULT '0' COMMENT '统计评论数', + `count_view` int(11) NOT NULL DEFAULT '0' COMMENT '统计阅读数', + `count_love` int(11) NOT NULL DEFAULT '0' COMMENT '统计点赞数', + `path` char(32) NOT NULL DEFAULT '' COMMENT '路径', + `photo` char(32) NOT NULL DEFAULT '' COMMENT '图片', + `video` char(32) NOT NULL DEFAULT '' COMMENT '视频', + `audio` char(32) NOT NULL DEFAULT '' COMMENT '音频', + `isaudit` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是å¦å®¡æ ¸', + `addtime` datetime NOT NULL DEFAULT '1970-01-01 00:00:01' COMMENT '添加时间', + `uptime` int(11) NOT NULL DEFAULT '0' COMMENT 'æ›´æ–°æ—¶é—´', + PRIMARY KEY (`weiboid`), + KEY `userid` (`userid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='å” å¨'; + +-- 正在导出表 d_thinksaas.ts_weibo 的数æ®ï¼š0 rows +DELETE FROM `ts_weibo`; +/*!40000 ALTER TABLE `ts_weibo` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_weibo` ENABLE KEYS */; + +-- 导出 表 d_thinksaas.ts_weibo_photo 结构 +DROP TABLE IF EXISTS `ts_weibo_photo`; +CREATE TABLE IF NOT EXISTS `ts_weibo_photo` ( + `photoid` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', + `userid` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', + `weiboid` int(11) NOT NULL DEFAULT '0' COMMENT 'å¾®åšID', + `orderid` int(11) NOT NULL DEFAULT '0' COMMENT '排åºID', + `path` varchar(50) NOT NULL DEFAULT '' COMMENT '路径', + `photo` varchar(50) NOT NULL DEFAULT '' COMMENT '图片', + `addtime` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', + PRIMARY KEY (`photoid`) USING BTREE, + UNIQUE KEY `photoid` (`photoid`) USING BTREE, + KEY `weiboid` (`weiboid`) USING BTREE, + KEY `userid` (`userid`) USING BTREE +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='å¾®åšå›¾ç‰‡è¡¨'; + +-- 正在导出表 d_thinksaas.ts_weibo_photo 的数æ®ï¼š0 rows +DELETE FROM `ts_weibo_photo`; +/*!40000 ALTER TABLE `ts_weibo_photo` DISABLE KEYS */; +/*!40000 ALTER TABLE `ts_weibo_photo` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */; \ No newline at end of file diff --git a/install/skin/logo.gif b/install/skin/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d7849eaee8cf3cb45f43913cceb328e9e6cf153 GIT binary patch literal 2395 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 G;P@Y_qGiPZ literal 0 HcmV?d00001 diff --git a/install/skin/style.css b/install/skin/style.css new file mode 100644 index 0000000..6b2b232 --- /dev/null +++ b/install/skin/style.css @@ -0,0 +1,20 @@ +/**框架CSS**/ + +h2{font-size:14px;padding:5px;margin:0px;} +a {color:#336699;text-decoration:none;} +/*头部*/ +.header{background:#3A81C0;width:100%;overflow:hidden;} +.header .head{width:960px;height:60px;margin:0 auto;overflow:hidden;} + +.header .head .logo{float:left;margin:10px 0 0 0;color:#FFFFFF;} + +.header .head .menu{float:right;margin:20px 0 0 0;color:#FFFFFF;} + +/*中部*/ +.midder{width:960px;margin:0 auto;overflow:hidden;} + + +/*底部*/ +.footer{background:#F0F0F0;padding:10px 0;text-align:center;color:#999999;} + +.fs12{font-size: 12px;} \ No newline at end of file diff --git a/plugins/home/article/about.php b/plugins/home/article/about.php new file mode 100644 index 0000000..6e72af2 --- /dev/null +++ b/plugins/home/article/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => '首页最新文章', + 'version' => '1.0', + 'desc' => '首页最新文章', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/article/article.html b/plugins/home/article/article.html new file mode 100644 index 0000000..f6ecf35 --- /dev/null +++ b/plugins/home/article/article.html @@ -0,0 +1,16 @@ +
      +
      最新文章
      +
      + {if $arrArticle} +
      + +
      + {else} +
      暂无文章
      + {/if} +
      +
      \ No newline at end of file diff --git a/plugins/home/article/article.php b/plugins/home/article/article.php new file mode 100644 index 0000000..55b31a8 --- /dev/null +++ b/plugins/home/article/article.php @@ -0,0 +1,24 @@ +findAll('article',array( + 'isaudit'=>0 + ),'addtime desc','articleid,cateid,userid,title,gaiyao,path,photo,count_view,count_comment,addtime',10); + foreach($arrArticle as $key=>$item){ + $arrArticle[$key]['title'] = tsTitle($item['title']); + $arrArticle[$key]['content'] = tsDecode($item['content']); + $arrArticle[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + if($item['cateid']){ + $arrArticle[$key]['cate'] = aac('article')->find('article_cate',array( + 'cateid'=>$item['cateid'], + )); + } + } + + include template('article','article'); + +} + +addAction('home_index_right','article'); \ No newline at end of file diff --git a/plugins/home/friendlinks/about.php b/plugins/home/friendlinks/about.php new file mode 100644 index 0000000..b33f354 --- /dev/null +++ b/plugins/home/friendlinks/about.php @@ -0,0 +1,14 @@ +'home_index_footer', //é’©å­ + 'name' => 'å‹é“¾', + 'version' => '1.0', + 'desc' => 'å‹é“¾', + 'url' => 'https://lmve.net', + 'email' => '1337087466@qq.com', + 'author' => '无闻风', + 'author_url' => 'https://lmve.net', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/friendlinks/friendlinks.html b/plugins/home/friendlinks/friendlinks.html new file mode 100644 index 0000000..406698b --- /dev/null +++ b/plugins/home/friendlinks/friendlinks.html @@ -0,0 +1,22 @@ +
      +
      勿ƒ…链接|å‹é“¾ç”³è¯·|
      + +
      +
      +
        + {loop $friends $key $item} +
      • + {if $item['face']} + {$item['name']} + {else} + {$item['name']} + {/if} + +
      • + {/loop} +
      +
      +
      +
      \ No newline at end of file diff --git a/plugins/home/friendlinks/friendlinks.php b/plugins/home/friendlinks/friendlinks.php new file mode 100644 index 0000000..2b33031 --- /dev/null +++ b/plugins/home/friendlinks/friendlinks.php @@ -0,0 +1,6 @@ +getfriends(20); + include template('friendlinks','friendlinks'); + } +addAction('home_index_footer','friendlinks'); diff --git a/plugins/home/hottopic/about.php b/plugins/home/hottopic/about.php new file mode 100644 index 0000000..2fdfed7 --- /dev/null +++ b/plugins/home/hottopic/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => '首页热门è¯é¢˜', + 'version' => '1.0', + 'desc' => '首页热门è¯é¢˜', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/hottopic/hottopic.php b/plugins/home/hottopic/hottopic.php new file mode 100644 index 0000000..1930293 --- /dev/null +++ b/plugins/home/hottopic/hottopic.php @@ -0,0 +1,24 @@ +findAll('group_topic',array( + 'isaudit'=>0, + ),'count_comment desc,count_view desc,isrecommend desc,addtime desc','topicid,title',25); + + echo '
      '; + echo '
      推èè¯é¢˜
      '; + echo '
      '; + echo '
      '; + echo ''; + echo '
      '; + echo '
      '; + echo '
      '; + +} + +addAction('home_index_right','hottopic'); diff --git a/plugins/home/links/about.php b/plugins/home/links/about.php new file mode 100644 index 0000000..89f3ca6 --- /dev/null +++ b/plugins/home/links/about.php @@ -0,0 +1,14 @@ +'home_index_footer', //é’©å­ + 'name' => '勿ƒ…连接æ’ä»¶', + 'version' => '1.0', + 'desc' => 'å¼€å¯å‹æƒ…连接æ’ä»¶åŽï¼Œå°†åœ¨é¦–é¡µæ˜¾ç¤ºå‹æƒ…链接', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/home/links/edit.php b/plugins/home/links/edit.php new file mode 100644 index 0000000..e6ce752 --- /dev/null +++ b/plugins/home/links/edit.php @@ -0,0 +1,39 @@ +get('plugins_home_links'); + } + + include template('edit_set','links'); + break; + + case "do": + $arrLinkName = $_POST['linkname']; + $arrLinkUrl = $_POST['linkurl']; + + foreach($arrLinkName as $key=>$item){ + $linkname = tsTrim($item); + $linkurl = tsTrim($arrLinkUrl[$key]); + if($linkname && $linkurl){ + $arrLink[] = array( + 'linkname' => $linkname, + 'linkurl' => $linkurl, + ); + } + + } + + fileWrite('plugins_home_links.php','data',$arrLink); + $tsMySqlCache->set('plugins_home_links',$arrLink); + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=links&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/home/links/edit_set.html b/plugins/home/links/edit_set.html new file mode 100644 index 0000000..723d17b --- /dev/null +++ b/plugins/home/links/edit_set.html @@ -0,0 +1,27 @@ +{php include pubTemplate("header_admin")} + + + + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + +{loop $arrLink $key $item} + +{/loop} + + + +
      链接å字链接URL
      点我增加链接(说明:如需删除æŸä¸€é¡¹ï¼Œè¯·å°†è¦åˆ é™¤çš„æŸé¡¹æ¸…ç©ºæäº¤å³å¯ã€‚)
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/links/links.html b/plugins/home/links/links.html new file mode 100644 index 0000000..5577c3e --- /dev/null +++ b/plugins/home/links/links.html @@ -0,0 +1,10 @@ +
      +
      勿ƒ…链接
      +
      + {if $arrLink} + {loop $arrLink $key $item} + {$item['linkname']} + {/loop} + {/if} +
      +
      \ No newline at end of file diff --git a/plugins/home/links/links.php b/plugins/home/links/links.php new file mode 100644 index 0000000..bb0b57f --- /dev/null +++ b/plugins/home/links/links.php @@ -0,0 +1,16 @@ +get('plugins_home_links'); + } + + include template('links','links'); + +} + +addAction('home_index_footer','links'); \ No newline at end of file diff --git a/plugins/home/login/about.php b/plugins/home/login/about.php new file mode 100644 index 0000000..c519a16 --- /dev/null +++ b/plugins/home/login/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => '首页登录框', + 'version' => '1.0', + 'desc' => '首页登录框', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/login/login.html b/plugins/home/login/login.html new file mode 100644 index 0000000..45a8901 --- /dev/null +++ b/plugins/home/login/login.html @@ -0,0 +1,186 @@ +{if $TS_USER['userid']} + +
      +
      +
      +
      +{$strUser[username]} +
      + +
      +{$strUser[username]} + +
      + +
      + + + +
      + +
      + +{if $strUser['isverify']==1}通过Email认è¯{else}未通过Email认è¯{/if} + + {if $strUser['isrenzheng']==1} + é€šè¿‡äººå·¥è®¤è¯ + {else} + æœªé€šè¿‡äººå·¥è®¤è¯ + {/if} + +
      +角色:{$strUser['rolename']} 积分:{$strUser['count_score']} + +
      +
      + + + +
      +
      + + +{else} + +
      +
      + +
      +
      + + + + + + + + + + + + + + + + +{/if} \ No newline at end of file diff --git a/plugins/home/login/login.php b/plugins/home/login/login.php new file mode 100644 index 0000000..d95e500 --- /dev/null +++ b/plugins/home/login/login.php @@ -0,0 +1,22 @@ +getOneUser($TS_USER['userid']); + $strUser['rolename'] = aac('user')->getRole($strUser['count_score']); + } + + include template('login','login'); +} + +function login_css(){ + + echo ''; + +} + +addAction('home_index_right','login'); +addAction('pub_header_top','login_css'); \ No newline at end of file diff --git a/plugins/home/login/style.css b/plugins/home/login/style.css new file mode 100644 index 0000000..10616f9 --- /dev/null +++ b/plugins/home/login/style.css @@ -0,0 +1,47 @@ +.login { + overflow: hidden; +} + +legend { + display: none; +} +fieldset { + border: 0 none; + margin: 0; + padding: 0; + margin-bottom: 0px; +} +fieldset legend { + color: #666666; + padding: 0 5px; +} +.login .item { + margin-bottom: 10px; +} +.item label { + width: 4em; +} +label { + font-family: Tahoma; + vertical-align: middle; +} +.item input { + width: 80%; + height:30px; + line-height:30px; + font-size:14px; +} +.login .item a { + font-size: 12px; +} +.login .item1 { + color: #666666; + float: left; + font-size: 12px; + margin: 0 2px 0px 0; +} +.login .item1 label { + display: inline-block; + margin-left: 4.5em; + margin-top: 4px; +} \ No newline at end of file diff --git a/plugins/home/newgroup/about.php b/plugins/home/newgroup/about.php new file mode 100644 index 0000000..1afc00b --- /dev/null +++ b/plugins/home/newgroup/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => '最新创建å°ç»„', + 'version' => '1.0', + 'desc' => '最新创建å°ç»„', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/newgroup/newgroup.html b/plugins/home/newgroup/newgroup.html new file mode 100644 index 0000000..98a830f --- /dev/null +++ b/plugins/home/newgroup/newgroup.html @@ -0,0 +1,20 @@ +
      +
      最新创建å°ç»„
      +
      + + {if $arrNewGroup} +
      + +
      + {else} + +
      暂无å°ç»„
      + + {/if} + +
      +
      \ No newline at end of file diff --git a/plugins/home/newgroup/newgroup.php b/plugins/home/newgroup/newgroup.php new file mode 100644 index 0000000..0cc622b --- /dev/null +++ b/plugins/home/newgroup/newgroup.php @@ -0,0 +1,13 @@ +findAll('group',array( + 'isaudit'=>0, + ),'addtime desc','groupid,groupname',10); + + include template('newgroup','newgroup'); + +} + +addAction('home_index_right','newgroup'); \ No newline at end of file diff --git a/plugins/home/newtopic/about.php b/plugins/home/newtopic/about.php new file mode 100644 index 0000000..811976d --- /dev/null +++ b/plugins/home/newtopic/about.php @@ -0,0 +1,14 @@ +'home_index_left', //é’©å­ + 'name' => '最新帖å­åˆ—表', + 'version' => '1.0', + 'desc' => '最新帖å­åˆ—表', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/newtopic/newtopic.html b/plugins/home/newtopic/newtopic.html new file mode 100644 index 0000000..64764de --- /dev/null +++ b/plugins/home/newtopic/newtopic.html @@ -0,0 +1,56 @@ +
      +
      最新è¯é¢˜
      + +
      +
      +
      {$pageUrl}
      +
        +{loop $arrTopic $key $item} +
      • +
        {$item['user']['username']}
        + +
        +
        + + {if $item['label']}{tsTitle($item['label'])}{/if} + + {$item[title]} +
        + +
        +
        {$item['count_comment']}
        +
        {$item['count_view']}
        +
        + +
        + {$item['gaiyao']} +
        + {if $item['photos']} +
        + {loop $item['photos'] $pkey $pitem} + + {/loop} +
        + {/if} +
        + +[{$item[group][groupname]}] + + + +{php echo getTime($item[uptime],time())} + {$item[user][username]} + +
        + +
        + +
        +
      • +{/loop} +
      +
      {$pageUrl}
      +
      +
      + +
      \ No newline at end of file diff --git a/plugins/home/newtopic/newtopic.php b/plugins/home/newtopic/newtopic.php new file mode 100644 index 0000000..7079814 --- /dev/null +++ b/plugins/home/newtopic/newtopic.php @@ -0,0 +1,35 @@ +findCount('group_topic'); + $pageUrl = pagination($topicNum, 20, $page, $url); + $arrTopic = aac('group')->findAll('group_topic',array( + 'isaudit'=>0, + ),'addtime desc','topicid,userid,groupid,title,gaiyao,label,count_comment,count_view,uptime',$lstart.',20'); + + foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title']=tsTitle($item['title']); + $arrTopic[$key]['gaiyao']=tsTitle($item['gaiyao']); + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = aac('group')->getOneGroup($item['groupid']); + $arrTopic[$key]['photos'] = aac('group')->getTopicPhoto($item['topicid'],3); + } + + include template('newtopic','newtopic'); + +} + +function newtopic_css(){ + + echo ''; + +} + +addAction('home_index_left','newtopic'); +addAction('pub_header_top','newtopic_css'); diff --git a/plugins/home/newtopic/style.css b/plugins/home/newtopic/style.css new file mode 100644 index 0000000..0149b88 --- /dev/null +++ b/plugins/home/newtopic/style.css @@ -0,0 +1,34 @@ +/*帖å­åˆ—表*/ +.topic_list{overflow:hidden;} +.topic_list ul, .topic_list ul li{list-style: none;margin:0;padding:0;} +.topic_list ul{overflow:hidden;} +.topic_list ul li{overflow:hidden;padding:15px 0;display: block;border-bottom: 1px dashed #999999;} + +.topic_list ul li .other{background: none repeat scroll 0 0 #F8F8F8; + border-left: 3px solid #EEEEEE; + margin-left: 38px; + margin-top: 5px; + padding: 5px;} +.topic_list ul li .other p{margin:0px;padding:5px 0;} + +.topic_list .userimg{float:left;width:38px;overflow:hidden;} + +.topic_list .topic_title{margin-left:40px;overflow:hidden;} + +.topic_list .topic_title .title a{color:#343434;font-size:14px;} + +.topic_list .topic_title .gaiyao{color:#999999;} + +.topic_list .topic_title .photo{} +.topic_list .topic_title .photo img{max-width: 25%;margin-right: 10px;} + +.topic_list .topic_info{overflow: hidden;font-size:12px;color:#999999;} + +.rank { + background: none repeat scroll 0 0 #BBBBBB; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + padding: 0 3px; + border-radius:5px 5px 5px 5px; +} \ No newline at end of file diff --git a/plugins/home/photo/about.php b/plugins/home/photo/about.php new file mode 100644 index 0000000..4b36698 --- /dev/null +++ b/plugins/home/photo/about.php @@ -0,0 +1,14 @@ +'home_index_footer', //é’©å­ + 'name' => '相册æ’ä»¶', + 'version' => '1.0', + 'desc' => '相册æ’ä»¶', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/photo/photo.html b/plugins/home/photo/photo.html new file mode 100644 index 0000000..e0464ca --- /dev/null +++ b/plugins/home/photo/photo.html @@ -0,0 +1,32 @@ +
      +
      推è相册 +更多 +
      +
      + + +{if $arrAlbum} +
      +
      + {loop $arrAlbum $key $item} +
      + + {$item['albumname']} + + +
      {$item['count_photo']} 张图片
      +
      + {/loop} +
      +
      + +{else} + +
      暂无推è相册
      + +{/if} + + + +
      +
      \ No newline at end of file diff --git a/plugins/home/photo/photo.php b/plugins/home/photo/photo.php new file mode 100644 index 0000000..7f6e091 --- /dev/null +++ b/plugins/home/photo/photo.php @@ -0,0 +1,24 @@ +findAll('photo_album',array( + 'isrecommend'=>1, + ),'addtime desc',null,12); + foreach($arrAlbum as $key=>$item){ + $arrAlbum[$key]['albumname']=tsTitle($item['albumname']); + } + + include template('photo','photo'); + +} + +function photo_css(){ + + echo ''; + +} + +addAction('home_index_footer','photo'); +addAction('pub_header_top','photo_css'); \ No newline at end of file diff --git a/plugins/home/photo/style.css b/plugins/home/photo/style.css new file mode 100644 index 0000000..e4d3722 --- /dev/null +++ b/plugins/home/photo/style.css @@ -0,0 +1,5 @@ +.photoalbumlist{} +.photoalbumlist ul{} +.photoalbumlist ul li{float:left;border:solid 1px #DDDDDD;margin:0 7px 7px 7px;height:220px;} +.photoalbumlist ul li .info{padding:5px;} +.photoalbumlist ul li .info p{color:#999999;margin:0px;} \ No newline at end of file diff --git a/plugins/home/recommendarticle/about.php b/plugins/home/recommendarticle/about.php new file mode 100644 index 0000000..dd6790c --- /dev/null +++ b/plugins/home/recommendarticle/about.php @@ -0,0 +1,14 @@ +'home_index_left', //é’©å­ + 'name' => 'é¦–é¡µæŽ¨èæ–‡ç« ', + 'version' => '1.0', + 'desc' => 'é¦–é¡µæŽ¨èæ–‡ç« ', + 'url' => 'https://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'https://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/home/recommendarticle/edit.php b/plugins/home/recommendarticle/edit.php new file mode 100644 index 0000000..44be874 --- /dev/null +++ b/plugins/home/recommendarticle/edit.php @@ -0,0 +1,30 @@ +get('plugins_home_recommendarticle'); + } + + include template('edit_set','recommendarticle'); + break; + + case "do": + $isrecommend = intval($_POST['isrecommend']); + + $strData = array( + 'isrecommend'=>$isrecommend, + ); + + fileWrite('plugins_home_recommendarticle.php','data',$strData); + $tsMySqlCache->set('plugins_home_recommendarticle',$strData); + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=recommendarticle&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/home/recommendarticle/edit_set.html b/plugins/home/recommendarticle/edit_set.html new file mode 100644 index 0000000..cc89b19 --- /dev/null +++ b/plugins/home/recommendarticle/edit_set.html @@ -0,0 +1,24 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + + + + + +
      å†…å®¹èŽ·å–æ–¹å¼ï¼š + + 最新内容 + 推è内容 + +
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/recommendarticle/recommendarticle.html b/plugins/home/recommendarticle/recommendarticle.html new file mode 100644 index 0000000..4931fec --- /dev/null +++ b/plugins/home/recommendarticle/recommendarticle.html @@ -0,0 +1,104 @@ +
      +
      æŽ¨èæ–‡ç« 
      +
      + + {if $arrArticle} +{loop $arrArticle $key $item} + {if $item['photo']} +
      + +
      + + + +
      +
      + +
      + {$item['title']} + {if $item['istop']=='1'} + [置顶] + {/if} +
      + +
      {$item['user']['username']} å‘表于 {$item['addtime']}
      + +
      {if $item['gaiyao']}{tsTitle($item['gaiyao'])}{else}暂无概è¦{/if} (查看全文)
      + + + + + +
      + +
      + 分类:{$item['cate']['catename']} +
      +
      + + {$item['count_view']} + {$item['count_comment']} + + +
      + +
      + + + + + + + +
      + +
      + + + {else} + +
      + {$item['title']} + {if $item['istop']=='1'} + [置顶] + {/if} +
      + +
      {$item['user']['username']} å‘表于 {$item['addtime']}
      + + {if $item['score']==0} +
      {if $item['gaiyao']}{$item['gaiyao']}{else}暂无概è¦{/if} (查看全文)
      + {/if} + + + + +
      + +
      + 分类:{$item['cate']['catename']} +
      +
      + + {$item['count_view']} + {$item['count_comment']} +
      + +
      + + + + {/if} + + + +{/loop} + +{else} + +
      æš‚æ— æŽ¨èæ–‡ç« 
      + +{/if} + +
      +
      \ No newline at end of file diff --git a/plugins/home/recommendarticle/recommendarticle.php b/plugins/home/recommendarticle/recommendarticle.php new file mode 100644 index 0000000..3a15a00 --- /dev/null +++ b/plugins/home/recommendarticle/recommendarticle.php @@ -0,0 +1,44 @@ +get('plugins_home_recommendarticle'); + } + + if($strData['isrecommend']==1){ + $where = array( + 'isrecommend'=>1, + 'isaudit'=>0 + ); + }else{ + $where = array( + 'isaudit'=>0 + ); + } + + $arrArticle = aac('article')->findAll('article',$where,'istop desc,addtime desc','articleid,cateid,userid,title,gaiyao,path,photo,count_view,count_comment,istop,addtime,uptime',10); + foreach($arrArticle as $key=>$item){ + $arrArticle[$key]['title'] = tsTitle($item['title']); + $arrArticle[$key]['gaiyao'] = tsTitle($item['gaiyao']); + $arrArticle[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + if($item['cateid']){ + $arrArticle[$key]['cate'] = aac('article')->find('article_cate',array( + 'cateid'=>$item['cateid'], + )); + } + + #å°é¢å›¾ + if($item['photo']){ + $arrArticle[$key]['photo_url'] = aac('article')->getArticlePhoto($item); + } + + } + + include template('recommendarticle','recommendarticle'); + +} + +addAction('home_index_left','recommendarticle'); \ No newline at end of file diff --git a/plugins/home/recommendgroup/about.php b/plugins/home/recommendgroup/about.php new file mode 100644 index 0000000..73fece1 --- /dev/null +++ b/plugins/home/recommendgroup/about.php @@ -0,0 +1,13 @@ +'home_index_left', //é’©å­ + 'name' => '推èå°ç»„', + 'version' => '1.0', + 'desc' => '推èå°ç»„', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/recommendgroup/recommendgroup.html b/plugins/home/recommendgroup/recommendgroup.html new file mode 100644 index 0000000..e23e050 --- /dev/null +++ b/plugins/home/recommendgroup/recommendgroup.html @@ -0,0 +1,28 @@ +
      +
      推èå°ç»„
      +
      + {if $arrRecommendGroup} +
      + {loop $arrRecommendGroup $key $item} +
      +
      +
      + + {$item['groupname']} + +
      +
      + {$item['groupname']} {$item['count_user']} æˆå‘˜ +
      {php echo cututf8(t($item['groupdesc']),0,43,false)}
      +
      +
      +
      + {/loop} +
      + {else} + +
      暂无推èå°ç»„
      + + {/if} +
      +
      \ No newline at end of file diff --git a/plugins/home/recommendgroup/recommendgroup.php b/plugins/home/recommendgroup/recommendgroup.php new file mode 100644 index 0000000..620ed14 --- /dev/null +++ b/plugins/home/recommendgroup/recommendgroup.php @@ -0,0 +1,12 @@ +getRecommendGroup('12'); + include template('recommendgroup','recommendgroup'); +} +function recommendgroup_css(){ + echo ''; +} +addAction('home_index_left','recommendgroup'); +addAction('pub_header_top','recommendgroup_css'); \ No newline at end of file diff --git a/plugins/home/recommendgroup/style.css b/plugins/home/recommendgroup/style.css new file mode 100644 index 0000000..e54b620 --- /dev/null +++ b/plugins/home/recommendgroup/style.css @@ -0,0 +1,26 @@ +.sub-item{ + border-bottom: 1px dashed #AAAAAA; + height: 72px; + margin: 0 2px 15px 0; + overflow: hidden; +} +.sub-item .pic { + float: left; + width: 48px; +} +.sub-item .info { + color: #666666; + vertical-align: top; + word-wrap: break-word; + margin-left:60px; +} +.sub-item .pic img { + height: 48px; + margin-bottom: -3px; + width: 48px; +} +.sub-item .info .content{font-size:12px;} + +.sub-item p { + margin: 0; +} \ No newline at end of file diff --git a/plugins/home/recommendtopic/about.php b/plugins/home/recommendtopic/about.php new file mode 100644 index 0000000..c8c15b5 --- /dev/null +++ b/plugins/home/recommendtopic/about.php @@ -0,0 +1,14 @@ +'home_index_left', //é’©å­ + 'name' => '推èè¯é¢˜åˆ—表', + 'version' => '1.0', + 'desc' => '推èè¯é¢˜åˆ—表', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/home/recommendtopic/edit.php b/plugins/home/recommendtopic/edit.php new file mode 100644 index 0000000..dd9d6ca --- /dev/null +++ b/plugins/home/recommendtopic/edit.php @@ -0,0 +1,30 @@ +get('plugins_home_recommendtopic'); + } + + include template('edit_set','recommendtopic'); + break; + + case "do": + $isrecommend = intval($_POST['isrecommend']); + + $strData = array( + 'isrecommend'=>$isrecommend, + ); + + fileWrite('plugins_home_recommendtopic.php','data',$strData); + $tsMySqlCache->set('plugins_home_recommendtopic',$strData); + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=recommendtopic&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/home/recommendtopic/edit_set.html b/plugins/home/recommendtopic/edit_set.html new file mode 100644 index 0000000..e053671 --- /dev/null +++ b/plugins/home/recommendtopic/edit_set.html @@ -0,0 +1,24 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + + + + + +
      å†…å®¹èŽ·å–æ–¹å¼ï¼š + + 最新内容 + 推è内容 + +
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/recommendtopic/recommendtopic.html b/plugins/home/recommendtopic/recommendtopic.html new file mode 100644 index 0000000..759f237 --- /dev/null +++ b/plugins/home/recommendtopic/recommendtopic.html @@ -0,0 +1,86 @@ +
      +
      推èè¯é¢˜
      + +
      + +{if $arrTopic} + +
      +
        +{loop $arrTopic $key $item} +
      • +
        {$item['user']['username']}
        + +
        +
        + + {if $item['label']}{tsTitle($item['label'])}{/if} + + {$item[title]} + + {if $item['istop']=='1'} + [置顶] + {/if} + +
        + +{if $item['group']['isopen']==0 && $item['score']==0 && $item['iscommentshow']==0} +
        + {$item['gaiyao']} +
        + + + {if $item['ptable']=='' && $item['pjson']} +
        + {loop $item['pjson'] $pkey $pitem} + + {/loop} +
        + {/if} + + + {if $item['ptable']=='video' && $item['pjson']['siteid']==0} +
        + {if $item['pjson']['photo']} + + {else} + + {/if} +
        + {/if} + +{/if} + + +
        +
        + {$item['user']['username']} + {php echo getTime($item['uptime'],time())} + å‘表于 + [{$item['group']['groupname']}] +
        +
        +
        {$item['count_comment']}
        +
        {$item['count_view']}
        +
        +
        + + + +
        + +
        +
      • +{/loop} +
      +
      + +{else} + +
      暂无推èè¯é¢˜
      + +{/if} + +
      + +
      \ No newline at end of file diff --git a/plugins/home/recommendtopic/recommendtopic.php b/plugins/home/recommendtopic/recommendtopic.php new file mode 100644 index 0000000..1b0b513 --- /dev/null +++ b/plugins/home/recommendtopic/recommendtopic.php @@ -0,0 +1,47 @@ +get('plugins_home_recommendtopic'); + } + + if($strData['isrecommend']==1){ + $where = array( + 'isrecommend'=>1, + 'isaudit'=>0 + ); + }else{ + $where = array( + 'isaudit'=>0 + ); + } + + //推èå¸–å­ + $arrTopic = aac('group')->findAll('topic',$where,'istop desc,uptime desc','topicid,ptable,pkey,pid,pjson,userid,groupid,title,gaiyao,score,label,count_comment,count_view,iscommentshow,istop,uptime',35); + + foreach($arrTopic as $key=>$item){ + $arrTopic[$key]['title']=tsTitle($item['title']); + $arrTopic[$key]['gaiyao']=tsTitle($item['gaiyao']); + $arrTopic[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrTopic[$key]['group'] = aac('group')->getOneGroup($item['groupid']); + #应用扩展 + if($item['pjson']){ + $arrTopic[$key]['pjson'] = json_decode($item['pjson'],true); + } + } + + include template('recommendtopic','recommendtopic'); + +} + +function recommendtopic_css(){ + + echo ''; + +} + +addAction('home_index_left','recommendtopic'); +addAction('pub_header_top','recommendtopic_css'); \ No newline at end of file diff --git a/plugins/home/recommendtopic/style.css b/plugins/home/recommendtopic/style.css new file mode 100644 index 0000000..540faec --- /dev/null +++ b/plugins/home/recommendtopic/style.css @@ -0,0 +1,34 @@ +/*帖å­åˆ—表*/ +.topic_list{overflow:hidden;} +.topic_list ul, .topic_list ul li{list-style: none;margin:0;padding:0;} +.topic_list ul{overflow:hidden;} +.topic_list ul li{overflow:hidden;padding:15px 0;display: block;border-bottom: 1px dashed #999999;} + +.topic_list ul li .other{background: none repeat scroll 0 0 #F8F8F8; + border-left: 3px solid #EEEEEE; + margin-left: 38px; + margin-top: 5px; + padding: 5px;} +.topic_list ul li .other p{margin:0px;padding:5px 0;} + +.topic_list .userimg{float:left;width:38px;overflow:hidden;} + +.topic_list .topic_title{margin-left:40px;overflow:hidden;} + +.topic_list .topic_title .title a{font-size:18px;font-weight: bold;} + +.topic_list .topic_title .gaiyao{color:#999999;} + +.topic_list .topic_title .photo{} +.topic_list .topic_title .photo img{max-width: 25%;margin-right: 10px;} + +.topic_list .topic_info{overflow: hidden;font-size:12px;color:#999999;} + +.rank { + background: none repeat scroll 0 0 #BBBBBB; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + padding: 0 3px; + border-radius:5px 5px 5px 5px; +} \ No newline at end of file diff --git a/plugins/home/signuser/about.php b/plugins/home/signuser/about.php new file mode 100644 index 0000000..3942f17 --- /dev/null +++ b/plugins/home/signuser/about.php @@ -0,0 +1,14 @@ +'home_index_left', //é’©å­ + 'name' => '最新签到用户', + 'version' => '1.0', + 'desc' => '看看哪些用户æ¥äº†å“¦', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/signuser/signuser.html b/plugins/home/signuser/signuser.html new file mode 100644 index 0000000..d94649c --- /dev/null +++ b/plugins/home/signuser/signuser.html @@ -0,0 +1,17 @@ +
      +
      最新签到用户
      +
      +
      + +
      +
      +
      \ No newline at end of file diff --git a/plugins/home/signuser/signuser.php b/plugins/home/signuser/signuser.php new file mode 100644 index 0000000..e83a874 --- /dev/null +++ b/plugins/home/signuser/signuser.php @@ -0,0 +1,9 @@ +getHotUser(20); + include template('signuser','signuser'); +} + +addAction('home_index_left','signuser'); \ No newline at end of file diff --git a/plugins/home/slide/about.php b/plugins/home/slide/about.php new file mode 100644 index 0000000..3b44161 --- /dev/null +++ b/plugins/home/slide/about.php @@ -0,0 +1,14 @@ +'home_index_header', //é’©å­ + 'name' => '首页幻ç¯ç‰‡', + 'version' => '1.0', + 'desc' => '首页幻ç¯ç‰‡', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/home/slide/edit.php b/plugins/home/slide/edit.php new file mode 100644 index 0000000..21f4ddb --- /dev/null +++ b/plugins/home/slide/edit.php @@ -0,0 +1,126 @@ +findAll('slide',null,'slideid asc'); + + foreach($arrSlide as $key=>$item){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + $arrSlide[$key]['photo_url'] = $GLOBALS['TS_SITE']['alioss_bucket_url'].'/uploadfile/slide/'.$item['photo'].'?v='.$item['addtime']; + }else{ + $arrSlide[$key]['photo_url'] = SITE_URL.'uploadfile/slide/'.$item['photo'].'?v='.$item['addtime']; + } + } + + include template('edit_set','slide'); + break; + + case "do": + + + $typeid = intval($_POST['typeid']); + $title = tsTrim($_POST['title']); + $info = tsTrim($_POST['info']); + $url = tsTrim($_POST['url']); + + $slideid = $new[$app]->create('slide',array( + 'typeid'=>$typeid, + 'title'=>$title, + 'info'=>$info, + 'url'=>$url, + 'addtime'=>time(), + )); + + + //上传 + $arrUpload = tsUpload($_FILES['photo'],$slideid,'slide',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new[$app]->update('slide',array( + 'slideid'=>$slideid, + ),array( + 'path'=>$arrUpload['path'], + 'photo'=>$arrUpload['url'], + )); + } + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=slide&in=edit&ts=set'); + break; + + case "edit": + + $slideid = intval($_GET['slideid']); + + $strSlide = $new[$app]->find('slide',array( + 'slideid'=>$slideid, + )); + + + include template('edit_edit','slide'); + break; + + case "editdo": + + $slideid = intval($_POST['slideid']); + $typeid = intval($_POST['typeid']); + $title = tsTrim($_POST['title']); + $info = tsTrim($_POST['info']); + $url = tsTrim($_POST['url']); + + $new[$app]->update('slide',array( + 'slideid'=>$slideid, + ),array( + 'typeid'=>$typeid, + 'title'=>$title, + 'info'=>$info, + 'url'=>$url, + )); + + + //上传 + $arrUpload = tsUpload($_FILES['photo'],$slideid,'slide',array('jpg','gif','png','jpeg')); + + if($arrUpload){ + + $new[$app]->update('slide',array( + 'slideid'=>$slideid, + ),array( + 'path'=>$arrUpload['path'], + 'photo'=>$arrUpload['url'], + 'addtime'=>time(), + )); + + tsDimg($arrUpload['url'],'slide','748','210',$arrUpload['path']); + + } + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=slide&in=edit&ts=set'); + + break; + + case "delete": + + $slideid = intval($_GET['slideid']); + + $strSlide = $new[$app]->find('slide',array( + 'slideid'=>$slideid, + )); + + unlink('uploadfile/slide/'.$strSlide['photo']); + + $new[$app]->delete('slide',array( + 'slideid'=>$slideid, + )); + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=slide&in=edit&ts=set'); + + break; +} \ No newline at end of file diff --git a/plugins/home/slide/edit_edit.html b/plugins/home/slide/edit_edit.html new file mode 100644 index 0000000..3645378 --- /dev/null +++ b/plugins/home/slide/edit_edit.html @@ -0,0 +1,57 @@ +{php include pubTemplate("header_admin")} + +
      + + +{include pubTemplate("plugin_menu")} + +
      + + +
      + + + + + + + + + + + + + + + +
      类型: + + + +
      标题:
      内容:
      URL:
      图片: + +{if $strSlide['photo']} + +
      +{/if} + +
      + + +
      + + + + + +
      +
      + + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/slide/edit_set.html b/plugins/home/slide/edit_set.html new file mode 100644 index 0000000..693350c --- /dev/null +++ b/plugins/home/slide/edit_set.html @@ -0,0 +1,63 @@ +{php include pubTemplate("header_admin")} + +
      + + +{php include pubTemplate("plugin_menu")} + +
      +
      + + + + + + + + + +
      类型: + + + +
      标题:
      内容:
      URL:
      图片:
      +(PC端图1110*300;手机端图640*320)
      +
      +
      + + + + + + + + + + + {loop $arrSlide $key $item} + + + + + + + + + {/loop} + + + +
      ID类型标题URL图片æ“作
      {$item['slideid']}{$item['typeid']}{$item['title']}{$item['url']} + + 修改 + + + 删除
      + +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/slide/slide.html b/plugins/home/slide/slide.html new file mode 100644 index 0000000..09fbcfe --- /dev/null +++ b/plugins/home/slide/slide.html @@ -0,0 +1,34 @@ + + \ No newline at end of file diff --git a/plugins/home/slide/slide.php b/plugins/home/slide/slide.php new file mode 100644 index 0000000..e776a98 --- /dev/null +++ b/plugins/home/slide/slide.php @@ -0,0 +1,21 @@ +findAll('slide',array( + 'typeid'=>0, + ),'addtime desc'); + + foreach($arrSlide as $key=>$item){ + if($GLOBALS['TS_SITE']['file_upload_type']==1){ + $arrSlide[$key]['photo_url'] = $GLOBALS['TS_SITE']['alioss_bucket_url'].'/uploadfile/slide/'.$item['photo'].'?v='.$item['addtime']; + }else{ + $arrSlide[$key]['photo_url'] = SITE_URL.'uploadfile/slide/'.$item['photo'].'?v='.$item['addtime']; + } + } + + include template('slide','slide'); +} + +addAction('home_index_header','slide'); \ No newline at end of file diff --git a/plugins/home/tag/about.php b/plugins/home/tag/about.php new file mode 100644 index 0000000..83e4b86 --- /dev/null +++ b/plugins/home/tag/about.php @@ -0,0 +1,14 @@ +'home_index_left', //é’©å­ + 'name' => '社区标签', + 'version' => '1.0', + 'desc' => '社区标签', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/home/tag/edit.php b/plugins/home/tag/edit.php new file mode 100644 index 0000000..ca9b3ee --- /dev/null +++ b/plugins/home/tag/edit.php @@ -0,0 +1,25 @@ +get('plugins_home_tag'); + } + + include template('edit_set','tag'); + break; + + case "do": + $tag = tsTrim($_POST['tag']); + fileWrite('plugins_home_tag.php','data',$tag); + $tsMySqlCache->set('plugins_home_tag',$tag); + + header('Location: '.SITE_URL.'index.php?app=home&ac=plugin&plugin=tag&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/home/tag/edit_set.html b/plugins/home/tag/edit_set.html new file mode 100644 index 0000000..1b45409 --- /dev/null +++ b/plugins/home/tag/edit_set.html @@ -0,0 +1,23 @@ +{php include pubTemplate("header_admin")} + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + + + + + +
      调用(仅支æŒè°ƒç”¨ä¸€ç§å†…容的标签): + + å¸–å­ + 文章 + +
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/home/tag/tag.html b/plugins/home/tag/tag.html new file mode 100644 index 0000000..410217f --- /dev/null +++ b/plugins/home/tag/tag.html @@ -0,0 +1,30 @@ +
      +
      热门标签 + {if $tag=='topic'} + 更多 + {elseif $tag=='article'} + 更多 + {/if} + +
      +
      + + {if $arrTag} + + {loop $arrTag $key $item} + {if $tag=='topic'} + {$item['tagname']} + {elseif $tag=='article'} + {$item['tagname']} + {/if} + + {/loop} + + {else} + +
      æš‚æ— æŽ¨èæ ‡ç­¾
      + + {/if} + +
      +
      \ No newline at end of file diff --git a/plugins/home/tag/tag.php b/plugins/home/tag/tag.php new file mode 100644 index 0000000..41e9a94 --- /dev/null +++ b/plugins/home/tag/tag.php @@ -0,0 +1,29 @@ +get('plugins_home_tag'); + if($tag == '') $tag='topic'; + } + + if($tag=='topic'){ + $where = "`count_topic`>'0' and `isaudit`=0"; + }elseif($tag=='article'){ + $where = "`count_article`>'0' and `isaudit`=0"; + } + + //最新标签 + $arrTag = aac('tag')->findAll('tag',$where,'uptime desc',null,30); + + foreach($arrTag as $key=>$item){ + $arrTag[$key]['tagname'] = tsTitle($item['tagname']); + } + + include template('tag','tag'); + +} + +addAction('home_index_left','tag'); \ No newline at end of file diff --git a/plugins/home/topic/about.php b/plugins/home/topic/about.php new file mode 100644 index 0000000..f0c97e7 --- /dev/null +++ b/plugins/home/topic/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => '最新è¯é¢˜', + 'version' => '1.0', + 'desc' => '首页最新è¯é¢˜', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/topic/topic.html b/plugins/home/topic/topic.html new file mode 100644 index 0000000..186a6c8 --- /dev/null +++ b/plugins/home/topic/topic.html @@ -0,0 +1,16 @@ +
      +
      最新è¯é¢˜
      +
      + {if $arrTopic} +
      + +
      + {else} +
      暂无è¯é¢˜
      + {/if} +
      +
      \ No newline at end of file diff --git a/plugins/home/topic/topic.php b/plugins/home/topic/topic.php new file mode 100644 index 0000000..5908371 --- /dev/null +++ b/plugins/home/topic/topic.php @@ -0,0 +1,13 @@ +findAll('topic',array( + 'isaudit'=>0, + ),'addtime desc','topicid,title',10); + + include template('topic','topic'); + +} + +addAction('home_index_right','topic'); \ No newline at end of file diff --git a/plugins/home/weibo/about.php b/plugins/home/weibo/about.php new file mode 100644 index 0000000..3c31195 --- /dev/null +++ b/plugins/home/weibo/about.php @@ -0,0 +1,14 @@ +'home_index_right', //é’©å­ + 'name' => 'å¾®åšè¯´', + 'version' => '1.0', + 'desc' => 'å¾®åšè¯´', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '0', +); \ No newline at end of file diff --git a/plugins/home/weibo/style.css b/plugins/home/weibo/style.css new file mode 100644 index 0000000..a6a4815 --- /dev/null +++ b/plugins/home/weibo/style.css @@ -0,0 +1,76 @@ +.weiform{} +.weiform form { + background: none repeat scroll 0 0 #0099FF; + border: 1px solid #0099FF; + margin: 0 0 10px; + height:36px; + width:100%; + position: relative; + overflow:hidden; + border-radius: 0px; +} +.weiform textarea { + background: none repeat scroll 0 0 #FFFFFF; + border: 0 none; + float: left; + font-size: 9pt; + height: 36px; + overflow: auto; + padding: 2px; + resize: none; + width: 80%; +} +.weiform input { + background: none repeat scroll 0 0 #0099FF; + border: 0 none; + color: #FFFFFF; + float: right; + font-size: 10pt; + height: 36px; + width: 20%; + cursor: pointer; +} + +.weilist{} + +.weilist ul, .weilist ul li{list-style: none;margin:0;padding:0;} + +.weilist ul li { + border-bottom: 1px dashed #DDDDDD; + margin: 0 0 5px; + padding: 0 0 8px; + display: flex; +} +.weilist ul li .portrait { + + padding-top: 3px; + width: 45px; +} +.weilist ul li .portrait img { + background: none repeat scroll 0 0 #FFFFFF; + height: 32px; + padding: 1px; + width: 32px; +} +.weilist ul li .body { + flex:1; + font-size: 9pt; + overflow: hidden; +} +.weilist ul li .user a { + +} + +.weilist ul li .log { + color: #999; + word-break: break-all; +} +.weilist ul li .time { + color: #9A9A9A; + display: block; + margin: 5px 0 0; +} +.weilist ul li .time a { + color: #9A9A9A; + text-decoration: none; +} \ No newline at end of file diff --git a/plugins/home/weibo/weibo.html b/plugins/home/weibo/weibo.html new file mode 100644 index 0000000..90f6abc --- /dev/null +++ b/plugins/home/weibo/weibo.html @@ -0,0 +1,48 @@ +
      +
      å” å” å¨å¨
      +
      +
      + + + + +
      +
      + +
      +
      +
      +
      \ No newline at end of file diff --git a/plugins/home/weibo/weibo.js b/plugins/home/weibo/weibo.js new file mode 100644 index 0000000..420d934 --- /dev/null +++ b/plugins/home/weibo/weibo.js @@ -0,0 +1,32 @@ +function sendweibo(){ + var title = $("#weibotitle").val(); + + if(title==''){ + tsNotice('å‘布内容ä¸èƒ½ä¸ºç©ºï¼');return false; + } + + $("#weibosend").attr('disabled','disabled'); + + $.post(siteUrl+'index.php?app=weibo&ac=ajax&ts=add',{'title':title},function(rs){ + if(rs==0){ + + tsNotice('请登陆åŽå†å‘布唠å¨ï¼'); + + }else if(rs==1){ + + tsNotice('å‘布内容ä¸èƒ½ä¸ºç©ºï¼'); + + }else if(rs==2){ + $("#weibotitle").val(''); + $("#weibosend").removeAttr('disabled'); + weibolist(); + + } + }); +} + +function weibolist(){ + $.get(siteUrl+'index.php?app=weibo&ac=ajax&ts=list',function(rs){ + $("#weibolist").html(rs); + }) +} \ No newline at end of file diff --git a/plugins/home/weibo/weibo.php b/plugins/home/weibo/weibo.php new file mode 100644 index 0000000..23232aa --- /dev/null +++ b/plugins/home/weibo/weibo.php @@ -0,0 +1,28 @@ +findAll('weibo',array( + 'isaudit'=>0, + ),'addtime desc',null,10); + foreach($arrWeibo as $key=>$item){ + $arrWeibo[$key]['title'] = tsTitle($item['title']); + $arrWeibo[$key]['user'] = aac('user')->getSimpleUser($item['userid']); + $arrWeibo[$key]['photo'] = aac('weibo')->getWeiboPhoto($item['weiboid'],4); + } + + include template('weibo','weibo'); +} + +function weibo_css(){ + + echo ''; + +} +function weibo_js(){ + echo ''; +} + +addAction('home_index_right','weibo'); +addAction('pub_header_top','weibo_css'); +addAction('pub_footer','weibo_js'); \ No newline at end of file diff --git a/plugins/index.php b/plugins/index.php new file mode 100644 index 0000000..04bcd52 --- /dev/null +++ b/plugins/index.php @@ -0,0 +1,17 @@ + + + + +你找的页é¢ä¸å­˜åœ¨ + + + +

      404

      +

      你找的页é¢ä¸å­˜åœ¨

      + + +'; \ No newline at end of file diff --git a/plugins/pubs/counter/about.php b/plugins/pubs/counter/about.php new file mode 100644 index 0000000..6f1ec2d --- /dev/null +++ b/plugins/pubs/counter/about.php @@ -0,0 +1,12 @@ + 'ç»Ÿè®¡ä»£ç æ’ä»¶', + 'version' => '1.0', + 'desc' => '添加第三方统计代ç ï¼Œç»Ÿè®¡ç½‘站访问信æ¯ã€‚', + 'url' => 'http://www.thinksaas.cn', + 'email' => 'thinksaas@qq.com', + 'author' => '邱å›', + 'author_url' => 'http://www.thinksaas.cn', + 'isedit' => '1', +); \ No newline at end of file diff --git a/plugins/pubs/counter/counter.php b/plugins/pubs/counter/counter.php new file mode 100644 index 0000000..73aa701 --- /dev/null +++ b/plugins/pubs/counter/counter.php @@ -0,0 +1,19 @@ +get('plugins_pubs_counter'); + } + + $code = stripslashes($code); + + echo '
      '; + echo $code; + echo '
      '; +} + +addAction('pub_footer','counter_html'); \ No newline at end of file diff --git a/plugins/pubs/counter/edit.php b/plugins/pubs/counter/edit.php new file mode 100644 index 0000000..ae238e2 --- /dev/null +++ b/plugins/pubs/counter/edit.php @@ -0,0 +1,27 @@ +get('plugins_pubs_counter'); + } + $code = stripslashes($code); + + include template('edit_set','counter'); + break; + + case "do": + $code = tsTrim($_POST['code']); + + fileWrite('plugins_pubs_counter.php','data',$code); + $tsMySqlCache->set('plugins_pubs_counter',$code); + + header('Location: '.SITE_URL.'index.php?app=pubs&ac=plugin&plugin=counter&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/pubs/counter/edit_set.html b/plugins/pubs/counter/edit_set.html new file mode 100644 index 0000000..3bfc489 --- /dev/null +++ b/plugins/pubs/counter/edit_set.html @@ -0,0 +1,19 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + + + + + +
      统计代ç ï¼š
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/pubs/feedback/about.php b/plugins/pubs/feedback/about.php new file mode 100644 index 0000000..b147206 --- /dev/null +++ b/plugins/pubs/feedback/about.php @@ -0,0 +1 @@ + 'Feedbackå馈æ’ä»¶', 'version' => '1.0', 'desc' => '在你的网站å³ä¾§åŠ å…¥æµ®åŠ¨çš„Feedbackå馈功能ï¼', 'url' => 'http://www.thinksaas.cn', 'email' => 'thinksaas@qq.com', 'author' => '邱å›', 'author_url' => 'http://www.thinksaas.cn', 'isedit' => '1', ); \ No newline at end of file diff --git a/plugins/pubs/feedback/edit.php b/plugins/pubs/feedback/edit.php new file mode 100644 index 0000000..8d3a0cc --- /dev/null +++ b/plugins/pubs/feedback/edit.php @@ -0,0 +1,29 @@ +get('plugins_pubs_feedback'); + } + + $code = stripslashes($code); + + include template('edit_set','feedback'); + break; + + case "do": + $code = tsTrim($_POST['code']); + + fileWrite('plugins_pubs_feedback.php','data',$code); + $tsMySqlCache->set('plugins_pubs_feedback',$code); + + header('Location: '.SITE_URL.'index.php?app=pubs&ac=plugin&plugin=feedback&in=edit&ts=set'); + break; +} \ No newline at end of file diff --git a/plugins/pubs/feedback/edit_set.html b/plugins/pubs/feedback/edit_set.html new file mode 100644 index 0000000..c31d2cb --- /dev/null +++ b/plugins/pubs/feedback/edit_set.html @@ -0,0 +1,19 @@ +{php include pubTemplate("header_admin")} + + +
      + +{php include pubTemplate("plugin_menu")} + +
      + + + + + + +
      å馈代ç ï¼š
      +
      +
      + +{php include pubTemplate("footer_admin")} \ No newline at end of file diff --git a/plugins/pubs/feedback/feed-back.png b/plugins/pubs/feedback/feed-back.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc4fad602c1718a709ddf8d77f82fc7766eef53 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm<3?w=JZgmAxk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*A&x0(?ST|NsBb5Vxjz&9Tra$ARpy#$P@_Db|u8zhEHuKf~{B ze8E5gJ5LwKkcwL+ebHPD1{{Z@ZvUQN$$!!C#wT&7zzCg`4h;>NnY(n%QrC<9Z#({O qU-|!}^B(FquN>36dBu!Hg25+^QS#ixrSpI$F?hQAxvXget('plugins_pubs_feedback'); + } + + echo ' + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms.html new file mode 100644 index 0000000..f0a2035 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms.html @@ -0,0 +1,185 @@ + + + + + + Qcloud\Sms | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + + +

      Classes

      + +
      +
      + +
      + 按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + 拉å–å•个手机短信状æ€ç±» +
      +
      +
      + +
      + 群å‘短信类 +
      +
      +
      + +
      + å‘é€Utilç±» +
      +
      +
      + +
      + å•å‘短信类 +
      +
      +
      + +
      + 拉å–短信状æ€ç±» +
      +
      +
      + +
      + å‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + å‘é€è¯­éŸ³éªŒè¯ç ç±» +
      +
      +
      + +
      + 指定模æ¿å‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + 上传语音文件类 +
      +
      +
      + + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/FileVoiceSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/FileVoiceSender.html new file mode 100644 index 0000000..8cb394e --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/FileVoiceSender.html @@ -0,0 +1,231 @@ + + + + + + Qcloud\Sms\FileVoiceSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + FileVoiceSender +

      + + + + +
      +

      按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(string $nationCode, string $phoneNumber, string $fid, string $playtimes = 2, string $ext = "") + +

      按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 25
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 44
      + string + send(string $nationCode, string $phoneNumber, string $fid, string $playtimes = 2, string $ext = "") + +

      +
      + + + +
      +

      按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      string$fid语音文件fid
      string$playtimes播放次数,å¯é€‰ï¼Œæœ€å¤š3次,默认2次
      string$ext用户的session内容,æœåŠ¡ç«¯åŽŸæ ·è¿”å›žï¼Œå¯é€‰å­—段,ä¸éœ€è¦å¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMobileStatusPuller.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMobileStatusPuller.html new file mode 100644 index 0000000..60eaeba --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMobileStatusPuller.html @@ -0,0 +1,301 @@ + + + + + + Qcloud\Sms\SmsMobileStatusPuller | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsMobileStatusPuller +

      + + + + +
      +

      拉å–å•个手机短信状æ€ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + pullCallback(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) + +

      拉å–回执结果

      +
      +
      +
      +
      + string +
      +
      + pullReply(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) + +

      拉å–回å¤ä¿¡æ¯

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 72
      + string + pullCallback(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) + +

      +
      + + + +
      +

      拉å–回执结果

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$mobileä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      int$beginTime开始时间(unix timestamp)
      int$endTimeç»“æŸæ—¶é—´(unix timestamp)
      int$maxæ‹‰å–æœ€å¤§æ¡æ•°ï¼Œæœ€å¤š100
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      +

      +
      at line 87
      + string + pullReply(string $nationCode, string $mobile, int $beginTime, int $endTime, int $max) + +

      +
      + + + +
      +

      拉å–回å¤ä¿¡æ¯

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$mobileä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      int$beginTime开始时间(unix timestamp)
      int$endTimeç»“æŸæ—¶é—´(unix timestamp)
      int$maxæ‹‰å–æœ€å¤§æ¡æ•°ï¼Œæœ€å¤š100
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMultiSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMultiSender.html new file mode 100644 index 0000000..89420ca --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsMultiSender.html @@ -0,0 +1,317 @@ + + + + + + Qcloud\Sms\SmsMultiSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsMultiSender +

      + + + + +
      +

      群å‘短信类

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(int $type, string $nationCode, array $phoneNumbers, string $msg, string $extend = "", string $ext = "") + +

      普通群å‘

      +
      +
      +
      +
      + string +
      +
      + sendWithParam(string $nationCode, array $phoneNumbers, int $templId, array $params, string $sign = "", string $extend = "", string $ext = "") + +

      指定模æ¿ç¾¤å‘

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 47
      + string + send(int $type, string $nationCode, array $phoneNumbers, string $msg, string $extend = "", string $ext = "") + +

      +
      + + + +
      +

      普通群å‘

      普通群å‘需明确指定内容,如果有多个签å,请在内容中以ã€ã€‘çš„æ–¹å¼æ·»åŠ åˆ°ä¿¡æ¯å†…容中, +å¦åˆ™ç³»ç»Ÿå°†ä½¿ç”¨é»˜è®¤ç­¾å。

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      int$type短信类型,0 为普通短信,1 è¥é”€çŸ­ä¿¡
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      array$phoneNumbersä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·åˆ—表
      string$msgä¿¡æ¯å†…å®¹ï¼Œå¿…é¡»ä¸Žç”³è¯·çš„æ¨¡æ¿æ ¼å¼ä¸€è‡´ï¼Œå¦åˆ™å°†è¿”回错误
      string$extend扩展ç ï¼Œå¯å¡«ç©ºä¸²
      string$extæœåŠ¡ç«¯åŽŸæ ·è¿”å›žçš„å‚æ•°ï¼Œå¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      +

      +
      at line 79
      + string + sendWithParam(string $nationCode, array $phoneNumbers, int $templId, array $params, string $sign = "", string $extend = "", string $ext = "") + +

      +
      + + + +
      +

      指定模æ¿ç¾¤å‘

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      array$phoneNumbersä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·åˆ—表
      int$templId模æ¿id
      array$params模æ¿å‚æ•°åˆ—è¡¨ï¼Œå¦‚æ¨¡æ¿ {1}...{2}...{3},那么需è¦å¸¦ä¸‰ä¸ªå‚æ•°
      string$signç­¾å,如果填空串,系统会使用默认签å
      string$extend扩展ç ï¼Œå¯å¡«ç©ºä¸²
      string$extæœåŠ¡ç«¯åŽŸæ ·è¿”å›žçš„å‚æ•°ï¼Œå¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSenderUtil.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSenderUtil.html new file mode 100644 index 0000000..ba1d81a --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSenderUtil.html @@ -0,0 +1,675 @@ + + + + + + Qcloud\Sms\SmsSenderUtil | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsSenderUtil +

      + + + + +
      +

      å‘é€Utilç±»

      + + + + +

      Methods

      + +
      +
      +
      + int +
      +
      + getRandom() + +

      生æˆéšæœºæ•°

      +
      +
      +
      +
      + string +
      +
      + calculateSig(string $appkey, string $random, string $curTime, array $phoneNumbers) + +

      生æˆç­¾å

      +
      +
      +
      +
      + string +
      +
      + calculateSigForTemplAndPhoneNumbers(string $appkey, string $random, string $curTime, array $phoneNumbers) + +

      生æˆç­¾å

      +
      +
      +
      +
      + +
      +
      + phoneNumbersToArray($nationCode, $phoneNumbers) + +

      No description

      +
      +
      +
      +
      +
      + string +
      +
      + calculateSigForTempl(string $appkey, string $random, string $curTime, array $phoneNumber) + +

      生æˆç­¾å

      +
      +
      +
      +
      + string +
      +
      + calculateSigForPuller(string $appkey, string $random, string $curTime) + +

      生æˆç­¾å

      +
      +
      +
      +
      + string +
      +
      + calculateAuth(string $appkey, string $random, string $curTime, array $fileSha1Sum) + +

      生æˆä¸Šä¼ æ–‡ä»¶æŽˆæƒ

      +
      +
      +
      +
      + string +
      +
      + sha1sum(string $content) + +

      生æˆsha1sum

      +
      +
      +
      +
      + string +
      +
      + sendCurlPost(string $url, array $dataObj) + +

      å‘é€è¯·æ±‚

      +
      +
      +
      +
      + string +
      +
      + fetch(string $req) + +

      å‘é€è¯·æ±‚

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 17
      + int + getRandom() + +

      +
      + + + +
      +

      生æˆéšæœºæ•°

      +
      + +

      Return Value

      + + + + + + +
      intéšæœºæ•°ç»“æžœ
      + + + +
      +
      + +
      +
      +

      +
      at line 31
      + string + calculateSig(string $appkey, string $random, string $curTime, array $phoneNumbers) + +

      +
      + + + +
      +

      生æˆç­¾å

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + +
      string$appkeysdkappid对应的appkey
      string$randoméšæœºæ­£æ•´æ•°
      string$curTime当剿—¶é—´
      array$phoneNumbers手机å·ç 
      + + +

      Return Value

      + + + + + + +
      stringç­¾å结果
      + + + +
      +
      + +
      +
      +

      +
      at line 51
      + string + calculateSigForTemplAndPhoneNumbers(string $appkey, string $random, string $curTime, array $phoneNumbers) + +

      +
      + + + +
      +

      生æˆç­¾å

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + +
      string$appkeysdkappid对应的appkey
      string$randoméšæœºæ­£æ•´æ•°
      string$curTime当剿—¶é—´
      array$phoneNumbers手机å·ç 
      + + +

      Return Value

      + + + + + + +
      stringç­¾å结果
      + + + +
      +
      + +
      +
      +

      +
      at line 63
      + + phoneNumbersToArray($nationCode, $phoneNumbers) + +

      +
      + + + +
      +

      Parameters

      + + + + + + + + + + + + +
      $nationCode
      $phoneNumbers
      + + + + +
      +
      + +
      +
      +

      +
      at line 86
      + string + calculateSigForTempl(string $appkey, string $random, string $curTime, array $phoneNumber) + +

      +
      + + + +
      +

      生æˆç­¾å

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + +
      string$appkeysdkappid对应的appkey
      string$randoméšæœºæ­£æ•´æ•°
      string$curTime当剿—¶é—´
      array$phoneNumber手机å·ç 
      + + +

      Return Value

      + + + + + + +
      stringç­¾å结果
      + + + +
      +
      + +
      +
      +

      +
      at line 102
      + string + calculateSigForPuller(string $appkey, string $random, string $curTime) + +

      +
      + + + +
      +

      生æˆç­¾å

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + +
      string$appkeysdkappid对应的appkey
      string$randoméšæœºæ­£æ•´æ•°
      string$curTime当剿—¶é—´
      + + +

      Return Value

      + + + + + + +
      stringç­¾å结果
      + + + +
      +
      + +
      +
      +

      +
      at line 117
      + string + calculateAuth(string $appkey, string $random, string $curTime, array $fileSha1Sum) + +

      +
      + + + +
      +

      生æˆä¸Šä¼ æ–‡ä»¶æŽˆæƒ

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + +
      string$appkeysdkappid对应的appkey
      string$randoméšæœºæ­£æ•´æ•°
      string$curTime当剿—¶é—´
      array$fileSha1Sum文件sha1sum
      + + +

      Return Value

      + + + + + + +
      string授æƒç»“æžœ
      + + + +
      +
      + +
      +
      +

      +
      at line 129
      + string + sha1sum(string $content) + +

      +
      + + + +
      +

      生æˆsha1sum

      +
      +

      Parameters

      + + + + + + + +
      string$content内容
      + + +

      Return Value

      + + + + + + +
      string内容sha1散列值
      + + + +
      +
      + +
      +
      +

      +
      at line 141
      + string + sendCurlPost(string $url, array $dataObj) + +

      +
      + + + +
      +

      å‘é€è¯·æ±‚

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$url请求地å€
      array$dataObj请求内容
      + + +

      Return Value

      + + + + + + +
      string应答json字符串
      + + + +
      +
      + +
      +
      +

      +
      at line 178
      + string + fetch(string $req) + +

      +
      + + + +
      +

      å‘é€è¯·æ±‚

      +
      +

      Parameters

      + + + + + + + +
      string$req请求对象
      + + +

      Return Value

      + + + + + + +
      string应答json字符串
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSingleSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSingleSender.html new file mode 100644 index 0000000..9f0ffcd --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsSingleSender.html @@ -0,0 +1,316 @@ + + + + + + Qcloud\Sms\SmsSingleSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsSingleSender +

      + + + + +
      +

      å•å‘短信类

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(int $type, string $nationCode, string $phoneNumber, string $msg, string $extend = "", string $ext = "") + +

      普通å•å‘

      +
      +
      +
      +
      + string +
      +
      + sendWithParam(string $nationCode, string $phoneNumber, int $templId = 0, array $params, string $sign = "", string $extend = "", string $ext = "") + +

      指定模æ¿å•å‘

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 45
      + string + send(int $type, string $nationCode, string $phoneNumber, string $msg, string $extend = "", string $ext = "") + +

      +
      + + + +
      +

      普通å•å‘

      普通å•å‘需明确指定内容,如果有多个签å,请在内容中以ã€ã€‘çš„æ–¹å¼æ·»åŠ åˆ°ä¿¡æ¯å†…容中,å¦åˆ™ç³»ç»Ÿå°†ä½¿ç”¨é»˜è®¤ç­¾å。

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      int$type短信类型,0 为普通短信,1 è¥é”€çŸ­ä¿¡
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      string$msgä¿¡æ¯å†…å®¹ï¼Œå¿…é¡»ä¸Žç”³è¯·çš„æ¨¡æ¿æ ¼å¼ä¸€è‡´ï¼Œå¦åˆ™å°†è¿”回错误
      string$extend扩展ç ï¼Œå¯å¡«ç©ºä¸²
      string$extæœåŠ¡ç«¯åŽŸæ ·è¿”å›žçš„å‚æ•°ï¼Œå¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      +

      +
      at line 82
      + string + sendWithParam(string $nationCode, string $phoneNumber, int $templId = 0, array $params, string $sign = "", string $extend = "", string $ext = "") + +

      +
      + + + +
      +

      指定模æ¿å•å‘

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      int$templIdæ¨¡æ¿ id
      array$params模æ¿å‚æ•°åˆ—è¡¨ï¼Œå¦‚æ¨¡æ¿ {1}...{2}...{3},那么需è¦å¸¦ä¸‰ä¸ªå‚æ•°
      string$signç­¾å,如果填空串,系统会使用默认签å
      string$extend扩展ç ï¼Œå¯å¡«ç©ºä¸²
      string$extæœåŠ¡ç«¯åŽŸæ ·è¿”å›žçš„å‚æ•°ï¼Œå¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsStatusPuller.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsStatusPuller.html new file mode 100644 index 0000000..ff7f138 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsStatusPuller.html @@ -0,0 +1,261 @@ + + + + + + Qcloud\Sms\SmsStatusPuller | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsStatusPuller +

      + + + + +
      +

      拉å–短信状æ€ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + pullCallback(int $max) + +

      拉å–回执结果

      +
      +
      +
      +
      + string +
      +
      + pullReply(int $max) + +

      拉å–回å¤ä¿¡æ¯

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 60
      + string + pullCallback(int $max) + +

      +
      + + + +
      +

      拉å–回执结果

      +
      +

      Parameters

      + + + + + + + +
      int$maxæ‹‰å–æœ€å¤§æ¡æ•°ï¼Œæœ€å¤š100
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      +

      +
      at line 71
      + string + pullReply(int $max) + +

      +
      + + + +
      +

      拉å–回å¤ä¿¡æ¯

      +
      +

      Parameters

      + + + + + + + +
      int$maxæ‹‰å–æœ€å¤§æ¡æ•°ï¼Œæœ€å¤š100
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoicePromptSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoicePromptSender.html new file mode 100644 index 0000000..6bed37c --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoicePromptSender.html @@ -0,0 +1,236 @@ + + + + + + Qcloud\Sms\SmsVoicePromptSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsVoicePromptSender +

      + + + + +
      +

      å‘é€è¯­éŸ³é€šçŸ¥ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(string $nationCode, string $phoneNumber, string $prompttype, string $msg, string $playtimes = 2, string $ext = "") + +

      å‘é€è¯­éŸ³é€šçŸ¥

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 44
      + string + send(string $nationCode, string $phoneNumber, string $prompttype, string $msg, string $playtimes = 2, string $ext = "") + +

      +
      + + + +
      +

      å‘é€è¯­éŸ³é€šçŸ¥

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      string$prompttype语音类型,目å‰å›ºå®šä¸º2
      string$msgä¿¡æ¯å†…å®¹ï¼Œå¿…é¡»ä¸Žç”³è¯·çš„æ¨¡æ¿æ ¼å¼ä¸€è‡´ï¼Œå¦åˆ™å°†è¿”回错误
      string$playtimes播放次数,å¯é€‰ï¼Œæœ€å¤š3次,默认2次
      string$ext用户的session内容,æœåŠ¡ç«¯åŽŸæ ·è¿”å›žï¼Œå¯é€‰å­—段,ä¸éœ€è¦å¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoiceVerifyCodeSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoiceVerifyCodeSender.html new file mode 100644 index 0000000..4cd61f8 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/SmsVoiceVerifyCodeSender.html @@ -0,0 +1,231 @@ + + + + + + Qcloud\Sms\SmsVoiceVerifyCodeSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + SmsVoiceVerifyCodeSender +

      + + + + +
      +

      å‘é€è¯­éŸ³éªŒè¯ç ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(string $nationCode, string $phoneNumber, string $msg, int $playtimes = 2, string $ext = "") + +

      å‘é€è¯­éŸ³éªŒè¯ç 

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 24
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 42
      + string + send(string $nationCode, string $phoneNumber, string $msg, int $playtimes = 2, string $ext = "") + +

      +
      + + + +
      +

      å‘é€è¯­éŸ³éªŒè¯ç 

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      string$msgä¿¡æ¯å†…å®¹ï¼Œå¿…é¡»ä¸Žç”³è¯·çš„æ¨¡æ¿æ ¼å¼ä¸€è‡´ï¼Œå¦åˆ™å°†è¿”回错误
      int$playtimes播放次数,å¯é€‰ï¼Œæœ€å¤š3次,默认2次
      string$ext用户的session内容,æœåŠ¡ç«¯åŽŸæ ·è¿”å›žï¼Œå¯é€‰å­—段,ä¸éœ€è¦å¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/TtsVoiceSender.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/TtsVoiceSender.html new file mode 100644 index 0000000..51f29a0 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/TtsVoiceSender.html @@ -0,0 +1,236 @@ + + + + + + Qcloud\Sms\TtsVoiceSender | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + TtsVoiceSender +

      + + + + +
      +

      指定模æ¿å‘é€è¯­éŸ³é€šçŸ¥ç±»

      + + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + send(string $nationCode, string $phoneNumber, int $templId, array $params, string $playtimes = 2, string $ext = "") + +

      指定模æ¿å‘é€è¯­éŸ³çŸ­ä¿¡

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 25
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 45
      + string + send(string $nationCode, string $phoneNumber, int $templId, array $params, string $playtimes = 2, string $ext = "") + +

      +
      + + + +
      +

      指定模æ¿å‘é€è¯­éŸ³çŸ­ä¿¡

      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      string$nationCode国家ç ï¼Œå¦‚ 86 为中国
      string$phoneNumberä¸å¸¦å›½å®¶ç çš„æ‰‹æœºå·
      int$templIdæ¨¡æ¿ id
      array$params模æ¿å‚æ•°åˆ—è¡¨ï¼Œå¦‚æ¨¡æ¿ {1}...{2}...{3},需è¦å¸¦ä¸‰ä¸ªå‚æ•°
      string$playtimes播放次数,å¯é€‰ï¼Œæœ€å¤š3次,默认2次
      string$ext用户的session内容,æœåŠ¡ç«¯åŽŸæ ·è¿”å›žï¼Œå¯é€‰å­—段,ä¸éœ€è¦å¯å¡«ç©ºä¸²
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/VoiceFileUploader.html b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/VoiceFileUploader.html new file mode 100644 index 0000000..a4bc888 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/Qcloud/Sms/VoiceFileUploader.html @@ -0,0 +1,235 @@ + + + + + + Qcloud\Sms\VoiceFileUploader | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + +
      +
      + + + +

      class + VoiceFileUploader +

      + + + + +
      +

      上传语音文件类

      + + +

      Constants

      + + + + + + + + + + +
      WAV +

      +

      +
      MP3 +

      +

      +
      + + + +

      Methods

      + +
      +
      +
      + +
      +
      + __construct(string $appid, string $appkey) + +

      构造函数

      +
      +
      +
      +
      + string +
      +
      + upload(string $fileContent, string $contentType) + +

      上传语音文件

      +
      +
      +
      + + +

      Details

      + +
      +
      +

      +
      at line 28
      + + __construct(string $appid, string $appkey) + +

      +
      + + + +
      +

      构造函数

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$appidsdkappid
      string$appkeysdkappid对应的appkey
      + + + + +
      +
      + +
      +
      +

      +
      at line 44
      + string + upload(string $fileContent, string $contentType) + +

      +
      + + + +
      +

      上传语音文件

      +
      +

      Parameters

      + + + + + + + + + + + + +
      string$fileContent语音文件内容
      string$contentTypeè¯­éŸ³æ–‡ä»¶ç±»åž‹ï¼Œç›®å‰æ”¯æŒ VoiceFileUploader::WAV å’Œ VoiceFileUploader::MP3
      + + +

      Return Value

      + + + + + + +
      string应答json字符串,详细内容å‚è§è…¾è®¯äº‘å议文档
      + + + +
      +
      + +
      +
      + + +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/SAMI_VERSION b/vendor/qcloudsms/qcloudsms_php/docs/SAMI_VERSION new file mode 100644 index 0000000..fc28f8e --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/SAMI_VERSION @@ -0,0 +1 @@ +4.0.14-DEV \ No newline at end of file diff --git a/vendor/qcloudsms/qcloudsms_php/docs/classes.html b/vendor/qcloudsms/qcloudsms_php/docs/classes.html new file mode 100644 index 0000000..fc150b0 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/classes.html @@ -0,0 +1,173 @@ + + + + + + All Classes | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + + + +
      +
      + +
      + 按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + 拉å–å•个手机短信状æ€ç±» +
      +
      +
      + +
      + 群å‘短信类 +
      +
      +
      + +
      + å‘é€Utilç±» +
      +
      +
      + +
      + å•å‘短信类 +
      +
      +
      + +
      + 拉å–短信状æ€ç±» +
      +
      +
      + +
      + å‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + å‘é€è¯­éŸ³éªŒè¯ç ç±» +
      +
      +
      + +
      + 指定模æ¿å‘é€è¯­éŸ³é€šçŸ¥ç±» +
      +
      +
      + +
      + 上传语音文件类 +
      +
      +
      +
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap-theme.min.css b/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap-theme.min.css new file mode 100644 index 0000000..7d213d9 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap-theme.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cb5a84c449e8302c563e) + * Config saved to config.json and https://gist.github.com/cb5a84c449e8302c563e + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #428bca 0, #2d6ca2 100%);background-image:-o-linear-gradient(top, #428bca 0, #2d6ca2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#2d6ca2));background-image:linear-gradient(to bottom, #428bca 0, #2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #428bca 0, #3071a9 100%);background-image:-o-linear-gradient(top, #428bca 0, #3071a9 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#3071a9));background-image:linear-gradient(to bottom, #428bca 0, #3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top, #428bca 0, #3278b3 100%);background-image:-o-linear-gradient(top, #428bca 0, #3278b3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#3278b3));background-image:linear-gradient(to bottom, #428bca 0, #3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap.min.css b/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap.min.css new file mode 100644 index 0000000..a517ad7 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cb5a84c449e8302c563e) + * Config saved to config.json and https://gist.github.com/cb5a84c449e8302c563e + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/vendor/qcloudsms/qcloudsms_php/docs/css/sami.css b/vendor/qcloudsms/qcloudsms_php/docs/css/sami.css new file mode 100644 index 0000000..4c089c3 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/css/sami.css @@ -0,0 +1,459 @@ +html, body, #content { + height: 100%; +} + +/* Site menu */ + +#site-nav.navbar-default { + margin: 0; + border-radius: 0; + border-bottom: 1px solid #ccc; + background-color: #EDF3FE; + background-image: none; +} + +#site-nav.navbar-default .navbar-brand, +#site-nav.navbar-default .navbar-nav > li > a { + color: #000; +} + +#site-nav.navbar-default .navbar-nav > li > a:hover { + text-decoration: underline; +} + +#navbar-elements { + float: right; +} + +@media (max-width: 768px) { + #navbar-elements { + float: none !important; + } +} + +/* Namespace breadcrumbs */ + +.namespace-breadcrumbs .breadcrumb { + margin: 0 0 12px; + border-radius: 0 0 4px 4px; + padding-left: 35px; +} + +.namespace-breadcrumbs .breadcrumb > li + li:before { + content: ""; +} +.namespace-breadcrumbs .breadcrumb > .backslash { + color: #ccc; +} + +/* Site columns */ + +#right-column { + margin-left: 20%; +} + +#page-content { + padding: 0 30px; +} + +#left-column { + width: 20%; + position: fixed; + height: 100%; + border-right: 1px solid #ccc; + line-height: 18px; + font-size: 13px; + display: flex; + flex-flow: column; +} + +@media (max-width: 991px) { + #left-column { + display: none; + } + #right-column { + width: 100%; + margin-left: 0; + } +} + +/* API Tree */ + +#api-tree { + background: linear-gradient( + to bottom, + #FFF, + #FFF 50%, + #EDF3FE 50%, + #EDF3FE + ); + background-size: 100% 56px; + overflow: auto; + height: 100%; + background-attachment: local; +} + +#api-tree ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +#api-tree ul li { + padding: 0; + margin: 0; +} + +/* Prevents the menu from jittering on lad */ +#api-tree .glyphicon-play { + width: 26px; +} + +#api-tree ul li .hd { + padding: 5px; +} + +#api-tree li .hd:nth-child(even) { + background-color: #EDF3FE; +} + +#api-tree ul li.opened > .hd span { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -o-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +#api-tree .bd { + display: none; +} + +#api-tree li.opened > .bd { + display: block; +} + +#api-tree li .hd:hover { + background-color: #eee; +} + +#api-tree li.active > .hd { + background-color: #3875D7; +} + +#api-tree li.active > .hd a { + color: #eee; + font-weight: bold; +} + +#api-tree a { + color: #222; +} + +#api-tree div.leaf a { + margin-left: 20px; +} + +#api-tree .hd span { + padding: 2px 8px; + font-size: 10px; + line-height: 85%; +} + +/* Control panel, search form, version drop-down */ + +#control-panel { + background: #e8e8e8; + border-bottom: 1px solid #666; + padding: 4px; +} + +#control-panel form { + margin: 4px 4px 5px 4px; +} + +#search-form { + position: relative; +} + +#search-form input { + width: 100%; + padding-left: 28px; +} + +#search-form span.glyphicon-search { + position: absolute; + left: 9px; + top: 9px; + font-size: 14px; + z-index: 2; +} + +/* Typeahead */ + +.twitter-typeahead { + width: 100%; + z-index: 1; +} + +.tt-dropdown-menu { + overflow: auto; + max-height: 260px; + margin-top: 9px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 8px; + box-shadow: 0 5px 10px rgba(0,0,0,.2); + padding: 8px; +} + +.tt-dropdown-menu p { + margin: 0; + padding: 0; +} + +.tt-suggestion { + padding: 8px; + border-bottom: 1px solid #ccc; + font-size: 1.1em; +} + +.tt-cursor { + background-color: #3875D7; + color: #fff; +} + +/** General typography **/ + +.navbar { + border-bottom: 0; +} + +.page-header { + margin: 0 0 20px; +} + +abbr[title], abbr[data-original-title], abbr { + border-bottom: none; + cursor: pointer; +} + +a abbr { + cursor: pointer; +} + +.method-description table, .description table { + border: solid 1px #ccc; + padding: 1em; + margin: 1em; +} + +.method-description td, .method-description th, +.description td, .description th { + padding: 0.75em 1.25em; +} + +.method-description tbody tr:nth-child(even), +.description tbody tr:nth-child(even) { + background: #edf3fe; +} + +.method-description tbody tr:nth-child(odd), +.description tbody tr:nth-child(odd) { + background: #fff; +} + +.method-description thead tr, +.description thead tr { + background: #edf3fe; +} + +/** General Sami styling **/ + +.underlined > .row { + padding: 8px 0; + border-bottom: 1px solid #ddd; +} + +#footer { + text-align: right; + margin: 30px; + font-size: 11px; +} + +.description { + margin: 10px 0; + padding: 10px; + background-color: #efefef; +} + +.description p { + padding: 0; + margin: 8px 0; +} + +.method-description { + margin: 0 0 24px 0; +} + +.details { + padding-left: 30px; +} + +#method-details .method-item { + margin-bottom: 30px; +} + +.method-item h3, +.method-item h3 code { + background-color: #eee; +} + +.method-item h3 { + padding: 4px; + margin-bottom: 20px; + font-size: 20px; +} + +.location { + font-size: 11px; + float: right; + font-style: italic; +} + +.namespace-list a { + padding: 3px 8px; + margin: 0 5px 5px 0; + border: 1px solid #ddd; + background-color: #f9f9f9; + display: inline-block; + border-radius: 4px; +} + +.no-description { + color: #ccc; + font-size: 90%; +} + +/* Namespaces page */ + +.namespaces { + clear: both; +} + +.namespaces .namespace-container { + float: left; + margin: 0 14px 14px 0; + min-width: 30%; +} + +.namespaces h2 { + margin: 0 0 20px 0; +} + +@media (max-width: 991px) { + .namespaces .namespace-container { + margin-right: 0; + width: 100%; + } +} + +/** Code and pre tags **/ + +tt, code, pre { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(0,0,0,0.04); + border-radius: 3px; + color: #333; +} + +pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border-radius: 3px; +} + +h2 { + background-color: #EDF3FE; + padding: 4px 4px 4px 8px; + font-size: 25px; + margin: 20px 0; +} + +/** Doc index **/ + +dt { + font-weight: normal; +} + +dd { + margin-left: 30px; + line-height: 1.5em; +} + +#doc-index h2 { + font-weight: bold; + margin: 30px 0; +} + +#doc-index .pagination { + margin: 0; +} + +/* Search page */ + +.search-results { + list-style-type: none; + padding: 0; + margin: 0; +} + +.search-results li { + list-style-type: none; + margin: 0; + padding: 14px 0; + border-bottom: 1px solid #ccc; +} + +.search-results h2 { + background: none; + margin: 0; + padding: 0; + font-size: 18px; +} + +.search-results h2 a { + float: left; + display: block; + margin: 0 0 4px 0; +} + +.search-results .search-type { + float: right; + margin: 0 0 4px 0; +} + +.search-results .search-from { + margin: 0 0 12px 0; + font-size: 12px; + color: #999; +} + +.search-results .search-from a { + font-style: italic; +} + +.search-results .search-description { + margin: 8px 0 0 30px; +} diff --git a/vendor/qcloudsms/qcloudsms_php/docs/doc-index.html b/vendor/qcloudsms/qcloudsms_php/docs/doc-index.html new file mode 100644 index 0000000..91b96e7 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/doc-index.html @@ -0,0 +1,161 @@ + + + + + + Index | API + + + + + + + + + + + + + + + + +
      +
      +
      + +
      + + +
      +
      + +
      + +
      +
      + + +
      + + + + + +

      C

      +
      SmsSenderUtil::calculateSig() — Method in class SmsSenderUtil
      +
      生æˆç­¾å
      SmsSenderUtil::calculateSigForTemplAndPhoneNumbers() — Method in class SmsSenderUtil
      +
      生æˆç­¾å
      SmsSenderUtil::calculateSigForTempl() — Method in class SmsSenderUtil
      +
      生æˆç­¾å
      SmsSenderUtil::calculateSigForPuller() — Method in class SmsSenderUtil
      +
      生æˆç­¾å
      SmsSenderUtil::calculateAuth() — Method in class SmsSenderUtil
      +
      生æˆä¸Šä¼ æ–‡ä»¶æŽˆæƒ

      F

      +
      FileVoiceSenderClass in namespace Qcloud\Sms
      +
      按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥ç±»
      SmsSenderUtil::fetch() — Method in class SmsSenderUtil
      +
      å‘é€è¯·æ±‚

      G

      +
      SmsSenderUtil::getRandom() — Method in class SmsSenderUtil
      +
      生æˆéšæœºæ•°

      P

      +
      SmsMobileStatusPuller::pullCallback() — Method in class SmsMobileStatusPuller
      +
      拉å–回执结果
      SmsMobileStatusPuller::pullReply() — Method in class SmsMobileStatusPuller
      +
      拉å–回å¤ä¿¡æ¯
      SmsSenderUtil::phoneNumbersToArray() — Method in class SmsSenderUtil
      +
      SmsStatusPuller::pullCallback() — Method in class SmsStatusPuller
      +
      拉å–回执结果
      SmsStatusPuller::pullReply() — Method in class SmsStatusPuller
      +
      拉å–回å¤ä¿¡æ¯

      S

      +
      FileVoiceSender::send() — Method in class FileVoiceSender
      +
      按语音文件fidå‘é€è¯­éŸ³é€šçŸ¥
      SmsMobileStatusPullerClass in namespace Qcloud\Sms
      +
      拉å–å•个手机短信状æ€ç±»
      SmsMultiSenderClass in namespace Qcloud\Sms
      +
      群å‘短信类
      SmsMultiSender::send() — Method in class SmsMultiSender
      +
      普通群å‘
      SmsMultiSender::sendWithParam() — Method in class SmsMultiSender
      +
      指定模æ¿ç¾¤å‘
      SmsSenderUtilClass in namespace Qcloud\Sms
      +
      å‘é€Utilç±»
      SmsSenderUtil::sha1sum() — Method in class SmsSenderUtil
      +
      生æˆsha1sum
      SmsSenderUtil::sendCurlPost() — Method in class SmsSenderUtil
      +
      å‘é€è¯·æ±‚
      SmsSingleSenderClass in namespace Qcloud\Sms
      +
      å•å‘短信类
      SmsSingleSender::send() — Method in class SmsSingleSender
      +
      普通å•å‘
      SmsSingleSender::sendWithParam() — Method in class SmsSingleSender
      +
      指定模æ¿å•å‘
      SmsStatusPullerClass in namespace Qcloud\Sms
      +
      拉å–短信状æ€ç±»
      SmsVoicePromptSenderClass in namespace Qcloud\Sms
      +
      å‘é€è¯­éŸ³é€šçŸ¥ç±»
      SmsVoicePromptSender::send() — Method in class SmsVoicePromptSender
      +
      å‘é€è¯­éŸ³é€šçŸ¥
      SmsVoiceVerifyCodeSenderClass in namespace Qcloud\Sms
      +
      å‘é€è¯­éŸ³éªŒè¯ç ç±»
      SmsVoiceVerifyCodeSender::send() — Method in class SmsVoiceVerifyCodeSender
      +
      å‘é€è¯­éŸ³éªŒè¯ç 
      TtsVoiceSender::send() — Method in class TtsVoiceSender
      +
      指定模æ¿å‘é€è¯­éŸ³çŸ­ä¿¡

      T

      +
      TtsVoiceSenderClass in namespace Qcloud\Sms
      +
      指定模æ¿å‘é€è¯­éŸ³é€šçŸ¥ç±»

      U

      +
      VoiceFileUploader::upload() — Method in class VoiceFileUploader
      +
      上传语音文件

      V

      +
      VoiceFileUploaderClass in namespace Qcloud\Sms
      +
      上传语音文件类

      _

      +
      FileVoiceSender::__construct() — Method in class FileVoiceSender
      +
      构造函数
      SmsMobileStatusPuller::__construct() — Method in class SmsMobileStatusPuller
      +
      构造函数
      SmsMultiSender::__construct() — Method in class SmsMultiSender
      +
      构造函数
      SmsSingleSender::__construct() — Method in class SmsSingleSender
      +
      构造函数
      SmsStatusPuller::__construct() — Method in class SmsStatusPuller
      +
      构造函数
      SmsVoicePromptSender::__construct() — Method in class SmsVoicePromptSender
      +
      构造函数
      SmsVoiceVerifyCodeSender::__construct() — Method in class SmsVoiceVerifyCodeSender
      +
      构造函数
      TtsVoiceSender::__construct() — Method in class TtsVoiceSender
      +
      构造函数
      VoiceFileUploader::__construct() — Method in class VoiceFileUploader
      +
      构造函数
      + + +
      +
      + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.eot b/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

      !oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.svg b/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..25691af --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.ttf b/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

      PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.woff b/vendor/qcloudsms/qcloudsms_php/docs/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 mX4RtsgCg#7sNO9;gUV_a~-gand+ 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 literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/images/image2.png b/vendor/qcloudsms/qcloudsms_php/docs/images/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..98dee4fe4ef4e7b60718b1d0d95357b94166c915 GIT binary patch literal 9368 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 J$%!j>{tnc(DS`k1 literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/images/image4.png b/vendor/qcloudsms/qcloudsms_php/docs/images/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..9c65ceba99eb2248e4281833dfe2d6c3cfec060b GIT binary patch literal 27388 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

        >K@Muggm}sx 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 P1ihN7df-as=i&bctF$Ko literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/images/image9.png b/vendor/qcloudsms/qcloudsms_php/docs/images/image9.png new file mode 100644 index 0000000000000000000000000000000000000000..76f6bd82a5d76438f341faacc3b6e72a5f50dbb5 GIT binary patch literal 4094 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 KT0j5t>wf`gaw&xX literal 0 HcmV?d00001 diff --git a/vendor/qcloudsms/qcloudsms_php/docs/index.html b/vendor/qcloudsms/qcloudsms_php/docs/index.html new file mode 100644 index 0000000..4875e70 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/index.html @@ -0,0 +1,90 @@ + + + + + + Namespaces | API + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/interfaces.html b/vendor/qcloudsms/qcloudsms_php/docs/interfaces.html new file mode 100644 index 0000000..479cd52 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/interfaces.html @@ -0,0 +1,83 @@ + + + + + + Interfaces | API + + + + + + + + + + + + + + + + +
        +
        +
        + +
        + + +
        +
        + +
        + +
        +
        + + +
        + + + +
        +
        +
        + + +
        +
        + + + diff --git a/vendor/qcloudsms/qcloudsms_php/docs/js/bootstrap.min.js b/vendor/qcloudsms/qcloudsms_php/docs/js/bootstrap.min.js new file mode 100644 index 0000000..051dd94 --- /dev/null +++ b/vendor/qcloudsms/qcloudsms_php/docs/js/bootstrap.min.js @@ -0,0 +1,12 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cb5a84c449e8302c563e) + * Config saved to config.json and https://gist.github.com/cb5a84c449e8302c563e + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),s=i.data("bs.alert");s||i.data("bs.alert",s=new o(this)),"string"==typeof e&&s[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.1",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var s=t(this),n=s.attr("data-target");n||(n=s.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var a=t(n);e&&e.preventDefault(),a.length||(a=s.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var s=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=s,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.button"),n="object"==typeof e&&e;s||o.data("bs.button",s=new i(this,n)),"toggle"==e?s.toggle():e&&s.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.1",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,s=o.is("input")?"val":"html",n=o.data();e+="Text",null==n.resetText&&o.data("resetText",o[s]()),setTimeout(t.proxy(function(){o[s](null==n[e]?this.options[e]:n[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.carousel"),n=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:n.slide;s||o.data("bs.carousel",s=new i(this,n)),"number"==typeof e?s.to(e):a?s[a]():n.interval&&s.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.1",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i="prev"==t?-1:1,o=this.getItemIndex(e),s=(o+i)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var s=this.$element.find(".item.active"),n=o||this.getItemForDirection(e,s),a=this.interval,r="next"==e?"left":"right",l="next"==e?"first":"last",h=this;if(!n.length){if(!this.options.wrap)return;n=this.$element.find(".item")[l]()}if(n.hasClass("active"))return this.sliding=!1;var d=n[0],p=t.Event("slide.bs.carousel",{relatedTarget:d,direction:r});if(this.$element.trigger(p),!p.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(n)]);c&&c.addClass("active")}var f=t.Event("slid.bs.carousel",{relatedTarget:d,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(n.addClass(e),n[0].offsetWidth,s.addClass(r),n.addClass(r),s.one("bsTransitionEnd",function(){n.removeClass([e,r].join(" ")).addClass("active"),s.removeClass(["active",r].join(" ")),h.sliding=!1,setTimeout(function(){h.$element.trigger(f)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(s.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger(f)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var s=function(i){var o,s=t(this),n=t(s.attr("data-target")||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var a=t.extend({},n.data(),s.data()),r=s.attr("data-slide-to");r&&(a.interval=!1),e.call(n,a),r&&n.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",s).on("click.bs.carousel.data-api","[data-slide-to]",s),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(s).remove(),t(n).each(function(){var o=t(this),s=i(o),n={relatedTarget:this};s.hasClass("open")&&(s.trigger(e=t.Event("hide.bs.dropdown",n)),e.isDefaultPrevented()||(o.attr("aria-expanded","false"),s.removeClass("open").trigger("hidden.bs.dropdown",n)))}))}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var s=".dropdown-backdrop",n='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.1",a.prototype.toggle=function(o){var s=t(this);if(!s.is(".disabled, :disabled")){var n=i(s),a=n.hasClass("open");if(e(),!a){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t('