Browse Source

first commit

Your Name 7 months ago
commit
4a7af99f81
100 changed files with 10185 additions and 0 deletions
  1. 11
    0
      .env
  2. 10
    0
      .gitignore
  3. 191
    0
      LICENSE.txt
  4. 122
    0
      README.md
  5. 1
    0
      addons/.gitkeep
  6. 1
    0
      addons/apidoc/.addonrc
  7. 53
    0
      addons/apidoc/Apidoc.php
  8. 14
    0
      addons/apidoc/config.php
  9. 324
    0
      addons/apidoc/controller/Index.php
  10. 8
    0
      addons/apidoc/info.ini
  11. 53
    0
      addons/apidoc/install/apidoc.php
  12. 37
    0
      addons/apidoc/library/Definitions.php
  13. 583
    0
      addons/apidoc/library/Parser.php
  14. 1
    0
      addons/area/.addonrc
  15. 75
    0
      addons/area/Area.php
  16. 11
    0
      addons/area/config.php
  17. 7
    0
      addons/area/info.ini
  18. 3776
    0
      addons/area/install.sql
  19. 1
    0
      addons/cms/.addonrc
  20. 273
    0
      addons/cms/Cms.php
  21. 165
    0
      addons/cms/config.php
  22. 309
    0
      addons/cms/function.php
  23. 7
    0
      addons/cms/info.ini
  24. 120
    0
      addons/cms/install.sql
  25. 96
    0
      addons/cms/library/FulltextSearch.php
  26. 282
    0
      addons/cms/library/Service.php
  27. 317
    0
      addons/cms/testdata.sql
  28. 8
    0
      addons/cms/userSidenavAfter.html
  29. 1
    0
      addons/command/.addonrc
  30. 82
    0
      addons/command/Command.php
  31. 7
    0
      addons/command/info.ini
  32. 15
    0
      addons/command/install.sql
  33. 28
    0
      addons/command/library/Output.php
  34. 1
    0
      addons/formguide/.addonrc
  35. 118
    0
      addons/formguide/Formguide.php
  36. 7
    0
      addons/formguide/info.ini
  37. 140
    0
      addons/formguide/library/Service.php
  38. 58
    0
      addons/formguide/model/Formguide.php
  39. 35
    0
      addons/formguide/model/ModelField.php
  40. 1
    0
      addons/member/.addonrc
  41. 109
    0
      addons/member/Member.php
  42. 105
    0
      addons/member/config.php
  43. 7
    0
      addons/member/info.ini
  44. 109
    0
      addons/member/install.sql
  45. 77
    0
      addons/phpmailer/Phpmailer.php
  46. 46
    0
      addons/phpmailer/SDK/COMMITMENT
  47. 502
    0
      addons/phpmailer/SDK/LICENSE
  48. 230
    0
      addons/phpmailer/SDK/README.md
  49. 37
    0
      addons/phpmailer/SDK/SECURITY.md
  50. 1
    0
      addons/phpmailer/SDK/VERSION
  51. 78
    0
      addons/phpmailer/SDK/composer.json
  52. 182
    0
      addons/phpmailer/SDK/get_oauth_token.php
  53. 26
    0
      addons/phpmailer/SDK/language/phpmailer.lang-af.php
  54. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ar.php
  55. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-az.php
  56. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ba.php
  57. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-be.php
  58. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-bg.php
  59. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ca.php
  60. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ch.php
  61. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-cs.php
  62. 35
    0
      addons/phpmailer/SDK/language/phpmailer.lang-da.php
  63. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-de.php
  64. 33
    0
      addons/phpmailer/SDK/language/phpmailer.lang-el.php
  65. 26
    0
      addons/phpmailer/SDK/language/phpmailer.lang-eo.php
  66. 31
    0
      addons/phpmailer/SDK/language/phpmailer.lang-es.php
  67. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-et.php
  68. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-fa.php
  69. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-fi.php
  70. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-fo.php
  71. 38
    0
      addons/phpmailer/SDK/language/phpmailer.lang-fr.php
  72. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-gl.php
  73. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-he.php
  74. 35
    0
      addons/phpmailer/SDK/language/phpmailer.lang-hi.php
  75. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-hr.php
  76. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-hu.php
  77. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-hy.php
  78. 31
    0
      addons/phpmailer/SDK/language/phpmailer.lang-id.php
  79. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-it.php
  80. 29
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ja.php
  81. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ka.php
  82. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ko.php
  83. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-lt.php
  84. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-lv.php
  85. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-mg.php
  86. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-mn.php
  87. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ms.php
  88. 26
    0
      addons/phpmailer/SDK/language/phpmailer.lang-nb.php
  89. 34
    0
      addons/phpmailer/SDK/language/phpmailer.lang-nl.php
  90. 26
    0
      addons/phpmailer/SDK/language/phpmailer.lang-pl.php
  91. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-pt.php
  92. 38
    0
      addons/phpmailer/SDK/language/phpmailer.lang-pt_br.php
  93. 33
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ro.php
  94. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-ru.php
  95. 30
    0
      addons/phpmailer/SDK/language/phpmailer.lang-sk.php
  96. 36
    0
      addons/phpmailer/SDK/language/phpmailer.lang-sl.php
  97. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-sr.php
  98. 28
    0
      addons/phpmailer/SDK/language/phpmailer.lang-sr_latn.php
  99. 27
    0
      addons/phpmailer/SDK/language/phpmailer.lang-sv.php
  100. 0
    0
      addons/phpmailer/SDK/language/phpmailer.lang-tl.php

+ 11
- 0
.env View File

@@ -0,0 +1,11 @@
1
+[app]
2
+debug = true
3
+trace =true
4
+
5
+[database]
6
+hostname = 127.0.0.1
7
+database = console_zx2049_c
8
+username = console_zx2049_c
9
+password = YGfWNYTxEAC85TX7
10
+hostport = 3306
11
+prefix = yzn_

+ 10
- 0
.gitignore View File

@@ -0,0 +1,10 @@
1
+.idea
2
+.vscode
3
+*.log
4
+composer.lock
5
+/runtime/*
6
+/templates/
7
+*.zip
8
+*.rar
9
+*.7z
10
+/.idea

+ 191
- 0
LICENSE.txt View File

@@ -0,0 +1,191 @@
1
+Apache License
2
+Version 2.0, January 2004
3
+http://www.apache.org/licenses/
4
+
5
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+1. Definitions.
8
+
9
+"License" shall mean the terms and conditions for use, reproduction, and
10
+distribution as defined by Sections 1 through 9 of this document.
11
+
12
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
13
+owner that is granting the License.
14
+
15
+"Legal Entity" shall mean the union of the acting entity and all other entities
16
+that control, are controlled by, or are under common control with that entity.
17
+For the purposes of this definition, "control" means (i) the power, direct or
18
+indirect, to cause the direction or management of such entity, whether by
19
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
20
+outstanding shares, or (iii) beneficial ownership of such entity.
21
+
22
+"You" (or "Your") shall mean an individual or Legal Entity exercising
23
+permissions granted by this License.
24
+
25
+"Source" form shall mean the preferred form for making modifications, including
26
+but not limited to software source code, documentation source, and configuration
27
+files.
28
+
29
+"Object" form shall mean any form resulting from mechanical transformation or
30
+translation of a Source form, including but not limited to compiled object code,
31
+generated documentation, and conversions to other media types.
32
+
33
+"Work" shall mean the work of authorship, whether in Source or Object form, made
34
+available under the License, as indicated by a copyright notice that is included
35
+in or attached to the work (an example is provided in the Appendix below).
36
+
37
+"Derivative Works" shall mean any work, whether in Source or Object form, that
38
+is based on (or derived from) the Work and for which the editorial revisions,
39
+annotations, elaborations, or other modifications represent, as a whole, an
40
+original work of authorship. For the purposes of this License, Derivative Works
41
+shall not include works that remain separable from, or merely link (or bind by
42
+name) to the interfaces of, the Work and Derivative Works thereof.
43
+
44
+"Contribution" shall mean any work of authorship, including the original version
45
+of the Work and any modifications or additions to that Work or Derivative Works
46
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
47
+by the copyright owner or by an individual or Legal Entity authorized to submit
48
+on behalf of the copyright owner. For the purposes of this definition,
49
+"submitted" means any form of electronic, verbal, or written communication sent
50
+to the Licensor or its representatives, including but not limited to
51
+communication on electronic mailing lists, source code control systems, and
52
+issue tracking systems that are managed by, or on behalf of, the Licensor for
53
+the purpose of discussing and improving the Work, but excluding communication
54
+that is conspicuously marked or otherwise designated in writing by the copyright
55
+owner as "Not a Contribution."
56
+
57
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
58
+of whom a Contribution has been received by Licensor and subsequently
59
+incorporated within the Work.
60
+
61
+2. Grant of Copyright License.
62
+
63
+Subject to the terms and conditions of this License, each Contributor hereby
64
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
65
+irrevocable copyright license to reproduce, prepare Derivative Works of,
66
+publicly display, publicly perform, sublicense, and distribute the Work and such
67
+Derivative Works in Source or Object form.
68
+
69
+3. Grant of Patent License.
70
+
71
+Subject to the terms and conditions of this License, each Contributor hereby
72
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
73
+irrevocable (except as stated in this section) patent license to make, have
74
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
75
+such license applies only to those patent claims licensable by such Contributor
76
+that are necessarily infringed by their Contribution(s) alone or by combination
77
+of their Contribution(s) with the Work to which such Contribution(s) was
78
+submitted. If You institute patent litigation against any entity (including a
79
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
80
+Contribution incorporated within the Work constitutes direct or contributory
81
+patent infringement, then any patent licenses granted to You under this License
82
+for that Work shall terminate as of the date such litigation is filed.
83
+
84
+4. Redistribution.
85
+
86
+You may reproduce and distribute copies of the Work or Derivative Works thereof
87
+in any medium, with or without modifications, and in Source or Object form,
88
+provided that You meet the following conditions:
89
+
90
+You must give any other recipients of the Work or Derivative Works a copy of
91
+this License; and
92
+You must cause any modified files to carry prominent notices stating that You
93
+changed the files; and
94
+You must retain, in the Source form of any Derivative Works that You distribute,
95
+all copyright, patent, trademark, and attribution notices from the Source form
96
+of the Work, excluding those notices that do not pertain to any part of the
97
+Derivative Works; and
98
+If the Work includes a "NOTICE" text file as part of its distribution, then any
99
+Derivative Works that You distribute must include a readable copy of the
100
+attribution notices contained within such NOTICE file, excluding those notices
101
+that do not pertain to any part of the Derivative Works, in at least one of the
102
+following places: within a NOTICE text file distributed as part of the
103
+Derivative Works; within the Source form or documentation, if provided along
104
+with the Derivative Works; or, within a display generated by the Derivative
105
+Works, if and wherever such third-party notices normally appear. The contents of
106
+the NOTICE file are for informational purposes only and do not modify the
107
+License. You may add Your own attribution notices within Derivative Works that
108
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
109
+provided that such additional attribution notices cannot be construed as
110
+modifying the License.
111
+You may add Your own copyright statement to Your modifications and may provide
112
+additional or different license terms and conditions for use, reproduction, or
113
+distribution of Your modifications, or for any such Derivative Works as a whole,
114
+provided Your use, reproduction, and distribution of the Work otherwise complies
115
+with the conditions stated in this License.
116
+
117
+5. Submission of Contributions.
118
+
119
+Unless You explicitly state otherwise, any Contribution intentionally submitted
120
+for inclusion in the Work by You to the Licensor shall be under the terms and
121
+conditions of this License, without any additional terms or conditions.
122
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
123
+any separate license agreement you may have executed with Licensor regarding
124
+such Contributions.
125
+
126
+6. Trademarks.
127
+
128
+This License does not grant permission to use the trade names, trademarks,
129
+service marks, or product names of the Licensor, except as required for
130
+reasonable and customary use in describing the origin of the Work and
131
+reproducing the content of the NOTICE file.
132
+
133
+7. Disclaimer of Warranty.
134
+
135
+Unless required by applicable law or agreed to in writing, Licensor provides the
136
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
137
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
138
+including, without limitation, any warranties or conditions of TITLE,
139
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
140
+solely responsible for determining the appropriateness of using or
141
+redistributing the Work and assume any risks associated with Your exercise of
142
+permissions under this License.
143
+
144
+8. Limitation of Liability.
145
+
146
+In no event and under no legal theory, whether in tort (including negligence),
147
+contract, or otherwise, unless required by applicable law (such as deliberate
148
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
149
+liable to You for damages, including any direct, indirect, special, incidental,
150
+or consequential damages of any character arising as a result of this License or
151
+out of the use or inability to use the Work (including but not limited to
152
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
153
+any and all other commercial damages or losses), even if such Contributor has
154
+been advised of the possibility of such damages.
155
+
156
+9. Accepting Warranty or Additional Liability.
157
+
158
+While redistributing the Work or Derivative Works thereof, You may choose to
159
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
160
+other liability obligations and/or rights consistent with this License. However,
161
+in accepting such obligations, You may act only on Your own behalf and on Your
162
+sole responsibility, not on behalf of any other Contributor, and only if You
163
+agree to indemnify, defend, and hold each Contributor harmless for any liability
164
+incurred by, or claims asserted against, such Contributor by reason of your
165
+accepting any such warranty or additional liability.
166
+
167
+END OF TERMS AND CONDITIONS
168
+
169
+APPENDIX: How to apply the Apache License to your work
170
+
171
+To apply the Apache License to your work, attach the following boilerplate
172
+notice, with the fields enclosed by brackets "{}" replaced with your own
173
+identifying information. (Don't include the brackets!) The text should be
174
+enclosed in the appropriate comment syntax for the file format. We also
175
+recommend that a file or class name and description of purpose be included on
176
+the same "printed page" as the copyright notice for easier identification within
177
+third-party archives.
178
+
179
+   Copyright 2018 御宅男
180
+
181
+   Licensed under the Apache License, Version 2.0 (the "License");
182
+   you may not use this file except in compliance with the License.
183
+   You may obtain a copy of the License at
184
+
185
+     http://www.apache.org/licenses/LICENSE-2.0
186
+
187
+   Unless required by applicable law or agreed to in writing, software
188
+   distributed under the License is distributed on an "AS IS" BASIS,
189
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
190
+   See the License for the specific language governing permissions and
191
+   limitations under the License.

+ 122
- 0
README.md View File

@@ -0,0 +1,122 @@
1
+# YznCMS 后台开发框架
2
+### 系统基于ThinkPHP5.1的强大后端框架与Layui2.9.x轻量级的前端UI框架,承诺后台框架永久免费且商业授权无限制,更可移除前台版权信息,是个人和企业专享、高度自定义的理想后台管理系统选择。
3
+
4
+[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://gitee.com/ken678/YZNCMS/blob/master/LICENSE.txt)
5
+[![PHP Version Require](https://img.shields.io/badge/PHP-%3E%3D7.2.5-blue)](https://packagist.org/packages/yzncms/framework)
6
+[![Version](https://img.shields.io/badge/YznCMS-1.4.2-brightgreen.svg)](https://gitee.com/ken678/YZNCMS/)
7
+[![star](https://gitee.com/ken678/YZNCMS/badge/star.svg?theme=dark)](https://gitee.com/ken678/YZNCMS/stargazers)
8
+[![fork](https://gitee.com/ken678/YZNCMS/badge/fork.svg?theme=dark)](https://gitee.com/ken678/YZNCMS/members)
9
+
10
+## [插件版权]
11
+
12
+- 插件可用于个人或企业自营网站或应用或为客户定制开发
13
+- 插件(包含免费和付费插件)禁止二次转售,复制和传播等形式分发插件源码
14
+- 插件不限制域名,不限授权期限,不限建站数量!
15
+
16
+## [插件清单]
17
+
18
+|  名称 | 简介  |价格  |
19
+|---|---|---|
20
+|在线命令|可在线执行一键生成CRUD、一键生成菜单等相关命令|免费|
21
+|内容管理系统|这是一个功能强大的内容管理!自定义模型,字段不在话下,支持近二十种类型字段|免费|
22
+|会员插件|系统必备的会员基础功能!含会员组,会员投稿等强大功能|免费|
23
+|自定义表单|这是一个cms必备的表单提交插件!字段都可以任意定义,同样支持近二十种类型字段|免费|
24
+|站内消息|会员与会员之间,会员与管理员之间消息发送,支持批量|免费|
25
+|支付插件|支持支付宝(支持个人)和微信支付的所有场景|免费|
26
+|接口文档|根据注释自动生成API文档|免费|
27
+|万能采集|简单的采集工具,可以自定义字段入库,网页数据采集和内容管理的神器!|免费|
28
+|友情链接|管理第三方网站的友情链接,很常用的必备插件|免费|
29
+|网站地图|sitemap网站地图让搜索引擎对您网站的更快、更完整地进行索引,为您进行网站推广带来极大的方便|免费|
30
+|网址聚合推送|百度站长+神马搜索推送|免费|
31
+|数据库备份|简单的数据库备份|免费|
32
+|多通道短信|发送支持目前市面20+家短信服务商,自动轮询选择可用的服务商|免费|
33
+|editormd编辑器|	editor.md编辑器|免费|
34
+|七牛云|附件上传到七牛云|免费|
35
+|阿里云OSS|附件上传到阿里云oss|免费|
36
+|腾讯云COS|附件上传到腾讯云cos|免费|
37
+|返回顶部|回到顶部美化,随机或指定显示,100款样式,每天一种换,天天都用新样式|免费|
38
+|邮箱插件|邮箱插件-by赛邮|免费|
39
+|会员签到|会员签到插件,含排行榜,补签,已日历方式呈现|免费|
40
+|第三方登录|QQ,微信和新浪等近十种第三方登录|免费|
41
+|中文分词|支持百度和讯飞分词|免费|
42
+|地图位置|支持百度、高德和天地图|免费|
43
+|智能人机验证|一款免费的智能无感手势验证码|免费|
44
+|数据转换|将phpcmsV9的数据结构转换为yzncms|免费|
45
+|数据转换|将dedecmsV5.7的数据结构转换为yzncms|免费|
46
+|后台登录背景|使用必应壁纸自定义后台登录背景图|免费|
47
+|邮箱发送|采用phpmailer的方式发送邮件|免费|
48
+|消息队列|基于think-queue的队列|免费|
49
+|快递查询插件|支持阿里云,聚合数据,快递100,快递鸟快递查询|免费|
50
+|地区插件|省市区三级联动|免费|
51
+|cms小程序|传统的cms展示类型小程序|付费|
52
+|即时通讯|类似百度商桥,快商通之类的客服多坐席即时聊天工具|付费|
53
+|评论插件|类似多说,一段JS即可调用的强大评论|付费|
54
+|会员推广|生成推广链接,后台生成邀请码注册|付费|
55
+|数据导出|支持任意表和关联表导出excel等格式|付费|
56
+|在线客服|近十种不同样式的QQ在线客服|付费|
57
+|安全检测|检测文件是否篡改或丢失|付费|
58
+|阿里云邮箱|阿里云的邮箱推送|付费|
59
+|百度收录查询|查询文章是否被百度收录|付费|
60
+|蜘蛛访问统计|查看主流搜索引擎的蜘蛛访问记录|付费|
61
+|敏感词检测|支持对CMS所有页面进行敏感词检测|付费|
62
+|内容收藏|用于会员对cms的内容进行收藏|付费|
63
+|迅搜全文检索|基于迅搜(Xunsearch),支持百万以上全文数据检索|付费|
64
+|H5设计|H5端一键DIY拖拽式布局插件(支持各种小程序)|付费|
65
+|行为验证码|基于AJ-Captcha行为验证码,包含滑动拼图、文字点选两种方式|付费|
66
+|礼品卡提货系统|适用于公司节日福利发放礼品卡,大闸蟹等凭卡提货系统|付费|
67
+|IP归属地查询|根据IP离线定位库和高德API查询所属地|付费|
68
+|百度统计插件|免去百度登录,将百度统计接口集成至后台|付费|
69
+|消息通知|集合小程序,公众号模版消息,手机和邮箱通知|付费|
70
+|微信管理|管理微信公众号插件|付费|
71
+|在线投票系统|可快速创建微信H5或小程序投票网络投票活动的系统|付费|
72
+
73
+## [项目介绍]
74
+YznCMS(又名御宅男CMS)是基于最新TP5.1x框架和layui2.5x的后台管理系统。创立于2017年初,是一款完全免费开源的项目,他将是您轻松建站的首选利器。框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。
75
+- 手册地址:https://www.kancloud.cn/ken678/yzncms
76
+- 官方博客:http://blog.yzncms.com/
77
+- 视频教程:https://www.bilibili.com/video/av417106995 (即将重新录制)
78
+- 软件著作权编号:2020SR0038539
79
+
80
+## [环境要求]
81
+- WEB服务器:IIS/Apache/Nginx
82
+- PHP版本:php >= 7.2 (支持8.0,推荐7.3)
83
+- 数据库:MySQL >= 5.6 (需支持 innodb 引擎)
84
+
85
+
86
+## [常规安装]
87
+- 第一步:下载源码压缩包解压到你的项目根目录
88
+- 第二步:绑定到项目中的public目录为运行目录,ps:如果您的服务器不支持绑定目录,请查看public目录下的index.php和install.php代码注释,有详细具体操作
89
+- 第三步:访问[http://您的域名/install.php](http://www.yoursite.com/install.php)进行安装
90
+
91
+## [命令行安装]
92
+- 第一步:下载源码压缩包解压到你的项目根目录
93
+- 第二步:绑定到项目中的public目录为运行目录,ps:如果您的服务器不支持绑定目录,请查看public目录下的index.php代码注释,有详细具体操作
94
+- 第三步:进入目录  `cd yzncms`
95
+- 第四步:一键创建数据库并导入数据   `php think install -u 数据库用户名 -p 数据库密码`
96
+
97
+## [必看教程]
98
+- 伪静态(URL重写): https://www.kancloud.cn/ken678/yzncms/1003231
99
+- 开发遇到错误怎么办?: https://www.kancloud.cn/ken678/yzncms/3090278
100
+
101
+> 更多的常见问题和教程见手册
102
+
103
+## [截图预览]
104
+![输入图片说明](https://foruda.gitee.com/images/1694497052659798394/3f1a677d_555541.gif "YZNCMS后台管理系统")
105
+![输入图片说明](https://foruda.gitee.com/images/1694497169122838821/13d1e4fd_555541.png "YZNCMS后台管理系统")
106
+
107
+## [友情捐赠]  
108
+![输入图片说明](https://images.gitee.com/uploads/images/2019/0110/175836_7cb23388_555541.jpeg "1547112799941_01.jpg")
109
+![输入图片说明](https://images.gitee.com/uploads/images/2019/0110/181152_57b5113e_555541.jpeg "mm_facetoface_collect_qrcode_1547113957376_01.jpg")
110
+
111
+## [联系我们]
112
+目前只支持以下条件才能添加QQ或者微信好友,其他理由如“我要拜师”,“我要学习,我有问题”等等一律谢绝添加
113
+- 有重大安全BUG漏洞(一般漏洞提交到issues)
114
+- 有建站等项目合作(需要发送详细需求)
115
+
116
+满足以上条件请发送邮箱至530765310@qq.com,备注理由,符合条件会主动添加你为好友
117
+
118
+## [版权信息]  
119
+YznCMS遵循[Apache2.0](https://www.apache.org/licenses/LICENSE-2.0.html)开源协议发布,并允许商业使用。  
120
+本项目包含的第三方源码和二进制文件之版权信息另行标注。  
121
+版权所有Copyright © 2017-2024 by Yzncms (https://www.yzncms.com)  
122
+All rights reserved。

+ 1
- 0
addons/.gitkeep View File

@@ -0,0 +1 @@
1
+

+ 1
- 0
addons/apidoc/.addonrc View File

@@ -0,0 +1 @@
1
+{"files":["templates\/default\/apidoc\/index\/index.html","public\/static\/addons\/apidoc\/images\/logo.png","public\/static\/addons\/apidoc\/js\/chunk-vendors.ddaaaefc.js","public\/static\/addons\/apidoc\/js\/app.ac3d6e58.js","public\/static\/addons\/apidoc\/css\/app.eabda131.css","public\/static\/addons\/apidoc\/css\/chunk-vendors.fa965b11.css"]}

+ 53
- 0
addons/apidoc/Apidoc.php View File

@@ -0,0 +1,53 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | API文档插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\apidoc;
16
+
17
+use think\Addons;
18
+
19
+class Apidoc extends Addons
20
+{
21
+    //安装
22
+    public function install()
23
+    {
24
+        //复制配置文件
25
+        $route_file = ADDON_PATH . str_replace("/", DS, "apidoc/install/apidoc.php");
26
+        copy($route_file, ROOT_PATH . 'config' . DS . 'apidoc.php');
27
+        return true;
28
+    }
29
+
30
+    //卸载
31
+    public function uninstall()
32
+    {
33
+        //删除配置文件
34
+        if (file_exists(ROOT_PATH . 'config' . DS . 'apidoc.php')) {
35
+            unlink(ROOT_PATH . 'config' . DS . 'apidoc.php');
36
+        }
37
+        return true;
38
+    }
39
+
40
+    /**
41
+     * 添加命名空间
42
+     */
43
+    public function appInit()
44
+    {
45
+        /*Route::group('apidoc', function () {
46
+    Route::rule('', 'index/apidoc/Index');
47
+    Route::rule('config', 'index/apidoc/getConfig');
48
+    Route::rule('data', 'index/apidoc/getList');
49
+    Route::rule('auth', 'index/apidoc/verifyAuth');
50
+    });*/
51
+
52
+    }
53
+}

+ 14
- 0
addons/apidoc/config.php View File

@@ -0,0 +1,14 @@
1
+<?php
2
+return [
3
+    [
4
+        'name'  => 'rewrite',
5
+        'title' => '伪静态',
6
+        'type'  => 'array',
7
+        'value' => [
8
+            'index/index'      => '/apidoc$',
9
+            'index/getConfig'  => '/apidoc/config',
10
+            'index/getList'    => '/apidoc/data',
11
+            'index/verifyAuth' => '/apidoc/auth',
12
+        ],
13
+    ],
14
+];

+ 324
- 0
addons/apidoc/controller/Index.php View File

@@ -0,0 +1,324 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 接口管理
14
+// +----------------------------------------------------------------------
15
+namespace addons\apidoc\controller;
16
+
17
+use think\addons\Controller;
18
+
19
+class Index extends Controller
20
+{
21
+    protected $config = [
22
+        'title'           => 'APi接口文档',
23
+        'copyright'       => 'Powered By YznCMS',
24
+        'controllers'     => [
25
+        ],
26
+        'versions'        => [
27
+        ],
28
+        'groups'          => [],
29
+        'with_cache'      => false,
30
+        'responses'       => '{
31
+            "code":"状态码",
32
+            "message":"操作描述",
33
+            "data":"业务数据",
34
+            "timestamp":"响应时间戳"
35
+        }',
36
+        'global_auth_key' => "Authorization",
37
+        'auth'            => [
38
+            'with_auth'     => false,
39
+            'auth_password' => "123456",
40
+            'headers_key'   => "apidocToken",
41
+        ],
42
+        'definitions'     => "hg\apidoc\Definitions",
43
+        'filter_method'   => [
44
+            '_empty',
45
+        ],
46
+    ];
47
+
48
+    public function index()
49
+    {
50
+        return $this->fetch();
51
+    }
52
+
53
+    /**
54
+     * 获取配置
55
+     * @return array
56
+     */
57
+    public function getConfig()
58
+    {
59
+        $config       = config('apidoc') ? config('apidoc') : config('apidoc.');
60
+        $this->config = array_merge($this->config, $config);
61
+        if (!empty($this->config['auth'])) {
62
+            $this->config['auth'] = [
63
+                'with_auth'   => $this->config['auth']['with_auth'],
64
+                // 验证类型,password=密码验证,只在进入时做密码验证
65
+                'headers_key' => $this->config['auth']['headers_key'],
66
+            ];
67
+        }
68
+
69
+        return json($this->config);
70
+    }
71
+
72
+    /**
73
+     * 验证身份
74
+     */
75
+    public function verifyAuth()
76
+    {
77
+        $config       = config('apidoc') ? config('apidoc') : config('apidoc.');
78
+        $this->config = array_merge($this->config, $config);
79
+        $request      = Request::instance();
80
+        $params       = $request->param();
81
+        if ($this->config['auth']['with_auth'] === true) {
82
+            // 密码验证
83
+            if (md5($this->config['auth']['auth_password']) === $params['password']) {
84
+                $token = md5($params['password'] . strtotime(date('Y-m-d', time())));
85
+                return json(array("token" => $token));
86
+            } else {
87
+                throw new \think\Exception("密码不正确,请重新输入");
88
+            }
89
+        }
90
+        return json($params);
91
+    }
92
+
93
+    public function verifyToken()
94
+    {
95
+        if (!empty($this->config['auth'])) {
96
+            if ($this->config['auth']['with_auth'] === true) {
97
+                $token = $this->request->header($this->config['auth']['headers_key']);
98
+
99
+                if ($token === md5(md5($this->config['auth']['auth_password']) . strtotime(date('Y-m-d', time())))) {
100
+                    return true;
101
+                } else {
102
+                    throw new \think\exception\HttpException(401, "身份令牌已过期,请重新登录");
103
+                }
104
+            }
105
+        }
106
+        return true;
107
+    }
108
+
109
+    /**
110
+     * 获取接口列表
111
+     * @return array
112
+     */
113
+    public function getList()
114
+    {
115
+        $config       = config('apidoc') ? config('apidoc') : config('apidoc.');
116
+        $this->config = array_merge($this->config, $config);
117
+        // 验证token身份
118
+        if ($this->config['auth']['with_auth'] === true) {
119
+            $tokenRes = $this->verifyToken();
120
+        }
121
+
122
+        $params = $this->request->param();
123
+
124
+        $version = "";
125
+        if (!empty($params) && !empty($params['version'])) {
126
+            $version = $params['version'];
127
+        }
128
+        $cacheFiles = [];
129
+        $cacheName  = "";
130
+        if ($this->config['with_cache']) {
131
+            // 获取缓存数据
132
+            $cachePath = "../runtime/apidoc/" . $version;
133
+            if (file_exists($cachePath) && $params['reload'] == 'false') {
134
+                $cacheFilePath = "";
135
+                $filePaths     = glob($cachePath . '/*.json');
136
+                if (count($filePaths) > 0) {
137
+                    $cacheFilePath = $filePaths[count($filePaths) - 1];
138
+                }
139
+                if (!empty($params) && !empty($params['cacheFileName'])) {
140
+                    // 前端传入的缓存文件名
141
+                    $cacheFileName = $params['cacheFileName'];
142
+                    $cacheFilePath = $cachePath . "/" . $cacheFileName . '.json';
143
+                }
144
+
145
+                if ($cacheFilePath && file_exists($cacheFilePath)) {
146
+                    $fileContent = file_get_contents($cacheFilePath);
147
+
148
+                    if (!empty($fileContent)) {
149
+                        $fileJson  = json_decode($fileContent);
150
+                        $list      = $fileJson;
151
+                        $cacheName = str_replace(".json", "", basename($cacheFilePath));
152
+
153
+                    } else {
154
+                        $list = $this->getApiList($version);
155
+                    }
156
+                } else {
157
+                    // 不存在缓存文件,生成数据并存缓存
158
+                    $list = $this->getApiList($version);
159
+                    // 生成缓存数据
160
+                    $cacheName = $this->createJsonFile($list, $version);
161
+                }
162
+
163
+            } else {
164
+                // 不存在缓存文件,生成数据并存缓存
165
+                $list = $this->getApiList($version);
166
+                // 生成缓存数据
167
+                $cacheName = $this->createJsonFile($list, $version);
168
+            }
169
+            $filePaths = glob($cachePath . '/*.json');
170
+            if (count($filePaths) > 0) {
171
+                foreach ($filePaths as $item) {
172
+                    $cacheFiles[] = str_replace(".json", "", basename($item));
173
+                }
174
+            }
175
+        } else {
176
+            $list = $this->getApiList($version);
177
+        }
178
+        if (isset($this->config['groups']) && count($this->config['groups']) > 0) {
179
+            array_unshift($this->config['groups'], ['title' => '全部', 'name' => 0]);
180
+        }
181
+        $data = array(
182
+            "title"      => $this->config['title'],
183
+            "version"    => $version,
184
+            "copyright"  => $this->config['copyright'],
185
+            "responses"  => $this->config['responses'],
186
+            "list"       => $list,
187
+            "cacheFiles" => $cacheFiles,
188
+            "cacheName"  => $cacheName,
189
+            "groups"     => $this->config['groups'],
190
+        );
191
+
192
+        $res = [
193
+            'code' => 0,
194
+            'data' => $data,
195
+        ];
196
+        return json($res);
197
+
198
+    }
199
+
200
+    /**
201
+     * 获取api接口文档
202
+     */
203
+    public function getApiList($version)
204
+    {
205
+        $config       = config('apidoc') ? config('apidoc') : config('apidoc.');
206
+        $this->config = array_merge($this->config, $config);
207
+        $list         = [];
208
+        $controllers  = $this->config['controllers'];
209
+        $versionPath  = "";
210
+        if (!empty($version)) {
211
+            foreach ($this->config['versions'] as $item) {
212
+                if ($item['title'] == $version && !empty($item['folder'])) {
213
+                    $versionPath = $item['folder'] . "\\";
214
+                }
215
+            }
216
+        }
217
+        foreach ($controllers as $k => $class) {
218
+            $class = "app\\" . $versionPath . $class;
219
+            if (class_exists($class)) {
220
+                $reflection = new \ReflectionClass($class);
221
+                $doc_str    = $reflection->getDocComment();
222
+                $doc        = new \addons\apidoc\library\Parser($this->config);
223
+                // 解析控制器类的注释
224
+                $class_doc = $doc->parseClass($doc_str);
225
+
226
+                // 获取当前控制器Class的所有方法
227
+                $method        = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
228
+                $filter_method = array_merge(['__construct'], $this->config['filter_method']);
229
+                $actions       = [];
230
+                foreach ($method as $j => $action) {
231
+                    // 过滤不解析的方法
232
+                    if (!in_array($action->name, $filter_method)) {
233
+                        // 获取当前方法的注释
234
+                        $actionDoc    = new \addons\apidoc\library\Parser($this->config);
235
+                        $actionDocStr = $action->getDocComment();
236
+                        if ($actionDocStr) {
237
+                            // 解析当前方法的注释
238
+                            $action_doc = $actionDoc->parseAction($actionDocStr);
239
+//                                $action_doc['name'] = $class."::".$action->name;
240
+                            $action_doc['id'] = $k . "-" . $j;
241
+//                                // 解析方法
242
+                            $actions[] = $action_doc;
243
+                        }
244
+                    }
245
+                }
246
+                $class_doc['children'] = $actions;
247
+                $class_doc['id']       = $k . "";
248
+                if (empty($class_doc['title']) && empty($class_doc['controller'])) {
249
+                    $class_doc['title'] = $controllers[$k];
250
+                }
251
+                $list[] = $class_doc;
252
+            }
253
+        }
254
+        return $list;
255
+    }
256
+
257
+    /**
258
+     * 获取文件夹内的所有文件
259
+     * @param string $class
260
+     * @param string $action
261
+     *
262
+     * @return array|bool
263
+     */
264
+    protected function listDirFiles($app, $isapp = true)
265
+    {
266
+        $arr  = [];
267
+        $base = base_path();
268
+        if ($isapp) {
269
+            $dir = $base . $app;
270
+        } else {
271
+            $dir = $app;
272
+        }
273
+
274
+        if (is_dir($dir)) {
275
+//如果是目录,则进行下一步操作
276
+            $d = opendir($dir); //打开目录
277
+            if ($d) {
278
+                //目录打开正常
279
+                while (($file = readdir($d)) !== false) {
280
+                    //循环读出目录下的文件,直到读不到为止
281
+                    if ($file != '.' && $file != '..') {
282
+                        //排除一个点和两个点
283
+                        if (is_dir($dir . '/' . $file)) { //如果当前是目录
284
+                            $arr = array_merge($arr, self::listDirFiles($dir . '/' . $file, false)); //进一步获取该目录里的文件
285
+                        } else {
286
+                            if (pathinfo($dir . '/' . $file)['extension'] == 'php') {
287
+                                $arr[] = str_replace([$base, '/', '.php'], ['', '\\', ''], $dir . '/' . $file); //进一步获取该目录里的文件
288
+                            }
289
+                        }
290
+                    }
291
+                }
292
+            }
293
+            closedir($d); //关闭句柄
294
+        }
295
+        asort($arr);
296
+        return $arr;
297
+    }
298
+
299
+    /**
300
+     * 创建接口参数缓存文件
301
+     * @param $json
302
+     * @param $version
303
+     * @return bool|false|string
304
+     */
305
+    protected function createJsonFile($json, $version)
306
+    {
307
+        if (empty($json)) {
308
+            return false;
309
+        }
310
+        $fileName    = date("Y-m-d H_i_s");
311
+        $fileJson    = $json;
312
+        $fileContent = json_encode($fileJson);
313
+        $dir         = "../runtime/apidoc/" . $version;
314
+        $path        = $dir . "/" . $fileName . ".json";
315
+        //判断文件夹是否存在
316
+        if (!file_exists($dir)) {
317
+            mkdir($dir, 0777, true);
318
+        }
319
+        $myfile = fopen($path, "w") or die("Unable to open file!");
320
+        fwrite($myfile, $fileContent);
321
+        fclose($myfile);
322
+        return $fileName;
323
+    }
324
+}

+ 8
- 0
addons/apidoc/info.ini View File

@@ -0,0 +1,8 @@
1
+name = apidoc
2
+title = 接口文档
3
+description = 根据注释自动生成API文档
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.0.0
7
+has_adminlist = 0
8
+status = 1

+ 53
- 0
addons/apidoc/install/apidoc.php View File

@@ -0,0 +1,53 @@
1
+<?php
2
+return [
3
+    // 文档标题
4
+    'title'           => 'APi接口文档',
5
+    // 版权申明
6
+    'copyright'       => 'Powered By YznCMS',
7
+    //生成文档的控制器
8
+    'controllers'     => [
9
+        'api\\controller\\Ems',
10
+        'api\\controller\\Sms',
11
+    ],
12
+    // 指定公共注释定义的文件地址
13
+    'definitions'     => "addons\apidoc\library\Definitions",
14
+    // 设置可选版本
15
+    'versions'        => [
16
+        ['title' => 'V1.0', 'folder' => ''],
17
+    ],
18
+    // 控制器分组列表
19
+    'groups'          => [
20
+    ],
21
+    // 是否开启缓存
22
+    'with_cache'      => false,
23
+    // 统一的请求响应体
24
+    'responses'       => '{
25
+    "code":"状态码",
26
+    "message":"操作描述",
27
+    "data":"业务数据",
28
+    "timestamp":"响应时间戳"
29
+}',
30
+    // 设置全局Authorize时请求头headers携带的key
31
+    'global_auth_key' => "Authorization",
32
+    // 密码验证配置
33
+    'auth'            => [
34
+        // 是否启用密码验证
35
+        'with_auth'     => false,
36
+        // 验证密码
37
+        'auth_password' => "123456",
38
+        // 验证请求头中apidocToken的字段,默认即可
39
+        'headers_key'   => "apidocToken",
40
+    ],
41
+    // 过滤、不解析的方法名称
42
+    'filter_method'   => [
43
+        '_empty',
44
+        '_initialize',
45
+        '__construct',
46
+        '__destruct',
47
+        '__get',
48
+        '__set',
49
+        '__isset',
50
+        '__unset',
51
+        '__cal',
52
+    ],
53
+];

+ 37
- 0
addons/apidoc/library/Definitions.php View File

@@ -0,0 +1,37 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 定义通用注释
14
+// +----------------------------------------------------------------------
15
+namespace addons\apidoc\library;
16
+
17
+class Definitions
18
+{
19
+    /**
20
+     * @title 获取分页数据列表的参数
21
+     * @param name:pageIndex type:int require:0 default:0 desc:查询页数
22
+     * @param name:pageSize type:int require:0 default:20 desc:查询条数
23
+     */
24
+    public function pagingParam()
25
+    {}
26
+
27
+    /**
28
+     * @title 返回字典数据
29
+     * @return name:code type:int default:0 desc:错误码
30
+     * @return name:msg type:string desc:提示信息
31
+     * @return name:time type:int desc:时间戳
32
+     * @return name:data type:string desc:返回的数据
33
+     */
34
+    public function dictionary()
35
+    {}
36
+
37
+}

+ 583
- 0
addons/apidoc/library/Parser.php View File

@@ -0,0 +1,583 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 接口管理
14
+// +----------------------------------------------------------------------
15
+namespace addons\apidoc\library;
16
+
17
+use think\Db as Db5;
18
+use think\facade\Db;
19
+
20
+class Parser
21
+{
22
+    protected $config = [];
23
+
24
+    /**
25
+     * 架构方法 设置参数
26
+     * @param  array $config 配置参数
27
+     */
28
+    public function __construct($config = [])
29
+    {
30
+        $this->config = array_merge($this->config, $config);
31
+    }
32
+
33
+    /**
34
+     * 解析class类的注释
35
+     * @param string $doc
36
+     * @return array
37
+     */
38
+    public function parseClass($doc = '')
39
+    {
40
+        if ($doc == '') {
41
+            return false;
42
+        }
43
+        // Get the comment
44
+        if (preg_match('#^/\*\*(.*)\*/#s', $doc, $comment) === false) {
45
+            return false;
46
+        }
47
+
48
+        $comment = trim($comment[1]);
49
+        // Get all the lines and strip the * from the first character
50
+        if (preg_match_all('#^\s*\*(.*)#m', $comment, $lines) === false) {
51
+            return false;
52
+        }
53
+
54
+        $res = $this->parseClassLines($lines[1]);
55
+
56
+        return $res;
57
+    }
58
+
59
+    /**
60
+     * 解析class类的注释,将每条字符串,解析成key,value对象
61
+     * @param $lines
62
+     * @return array|bool
63
+     */
64
+    private function parseClassLines($lines)
65
+    {
66
+        $desc = [];
67
+        foreach ($lines as $line) {
68
+            $line = trim($line);
69
+            if (empty($line)) {
70
+                return false; // Empty line
71
+            }
72
+            if (strpos($line, '@') === 0) {
73
+                if (strpos($line, ' ') > 0) {
74
+                    // Get the parameter name
75
+                    $param = substr($line, 1, strpos($line, ' ') - 1);
76
+                    $value = substr($line, strlen($param) + 2); // Get the value
77
+                } else {
78
+                    $param = substr($line, 1);
79
+                    $value = '';
80
+                }
81
+
82
+                $desc[$param] = $value;
83
+
84
+            }
85
+
86
+        }
87
+        return $desc;
88
+    }
89
+
90
+    /**
91
+     * 解析控制器方法的注释
92
+     * @param string $doc
93
+     * @return array
94
+     */
95
+    public function parseAction($doc = '')
96
+    {
97
+        if ($doc == '') {
98
+            return false;
99
+        }
100
+        // Get the comment
101
+        if (preg_match('#^/\*\*(.*)\*/#s', $doc, $comment) === false) {
102
+            return false;
103
+        }
104
+
105
+        $comment = trim($comment[1]);
106
+        // Get all the lines and strip the * from the first character
107
+        if (preg_match_all('#^\s*\*(.*)#m', $comment, $lines) === false) {
108
+            return false;
109
+        }
110
+
111
+        $res = $this->parseActionLines($lines[1]);
112
+
113
+        return $res;
114
+    }
115
+
116
+    /**
117
+     * 解析方法的注释,将每条字符串,解析成key,value对象,并处理
118
+     * @param $lines
119
+     * @return array|bool
120
+     */
121
+    private function parseActionLines($lines)
122
+    {
123
+        $desc = [];
124
+        foreach ($lines as $line) {
125
+            $line = trim($line);
126
+            if (!empty($line)) {
127
+                if (strpos($line, '@') === 0) {
128
+                    if (strpos($line, ' ') > 0) {
129
+                        // Get the parameter name
130
+                        $param = substr($line, 1, strpos($line, ' ') - 1);
131
+                        $value = substr($line, strlen($param) + 2); // Get the value
132
+                    } else {
133
+                        $param = substr($line, 1);
134
+                        $value = '';
135
+                    }
136
+
137
+                    if ($param == 'param') {
138
+                        $valueObj = $this->formatParam($value);
139
+                        if (!empty($valueObj['params']) && empty($valueObj['name'])) {
140
+                            // 只配置参数,没配置name则直接值为参数
141
+                            if (is_array($valueObj["params"]) && count($valueObj["params"]) > 0) {
142
+                                // 数组则遍历出来
143
+                                foreach ($valueObj["params"] as $paramItem) {
144
+                                    $desc[$param][] = $paramItem;
145
+                                }
146
+                            } else {
147
+                                $desc[$param][] = $valueObj["params"];
148
+                            }
149
+
150
+                        } else if (!empty($valueObj['type']) && $valueObj['type'] === 'tree') {
151
+                            // 类型为tree的
152
+                            $childrenField = "children";
153
+                            if (!empty($valueObj['childrenField'])) {
154
+                                $childrenField = $valueObj['childrenField'];
155
+                            }
156
+                            $childrenDesc = "children";
157
+                            if (!empty($valueObj['childrenDesc'])) {
158
+                                $childrenDesc = $valueObj['childrenDesc'];
159
+                            }
160
+                            $valueObj['params'][] = array(
161
+                                'params' => $valueObj['params'],
162
+                                'name'   => $childrenField,
163
+                                'type'   => 'array',
164
+                                'desc'   => $childrenDesc,
165
+                            );
166
+                            $desc[$param][] = $valueObj;
167
+                        } else {
168
+                            $desc[$param][] = $valueObj;
169
+                        }
170
+
171
+                    } else if ($param == 'return') {
172
+                        $valueObj = $this->formatReturn($value);
173
+                        if (!empty($valueObj['params']) && empty($valueObj['name'])) {
174
+                            // 只配置参数,没配置name则直接值为参数
175
+                            if (is_array($valueObj["params"]) && count($valueObj["params"]) > 0) {
176
+                                // 数组则遍历出来
177
+                                foreach ($valueObj["params"] as $paramItem) {
178
+                                    $desc[$param][] = $paramItem;
179
+                                }
180
+                            } else {
181
+                                $desc[$param][] = $valueObj["params"];
182
+                            }
183
+                        } else if (!empty($valueObj['type']) && $valueObj['type'] === 'tree') {
184
+                            // 类型为tree的
185
+                            $childrenField = "children";
186
+                            if (!empty($valueObj['childrenField'])) {
187
+                                $childrenField = $valueObj['childrenField'];
188
+                            }
189
+                            $childrenDesc = "children";
190
+                            if (!empty($valueObj['childrenDesc'])) {
191
+                                $childrenDesc = $valueObj['childrenDesc'];
192
+                            }
193
+                            $valueObj['params'][] = array(
194
+                                'params' => $valueObj['params'],
195
+                                'name'   => $childrenField,
196
+                                'type'   => 'array',
197
+                                'desc'   => $childrenDesc,
198
+                            );
199
+                            $desc[$param][] = $valueObj;
200
+                        } else {
201
+                            $desc[$param][] = $valueObj;
202
+                        }
203
+
204
+                    } else if ($param == 'header') {
205
+                        $valueObj       = $this->formatHeaders($value);
206
+                        $desc[$param][] = $valueObj;
207
+                    } else if ($param == 'addField') {
208
+                        // 模型指定添加的字段
209
+                        $valueObj       = $this->formatHeaders($value);
210
+                        $desc[$param][] = $valueObj;
211
+                    } else {
212
+                        $desc[$param] = $value;
213
+                    }
214
+
215
+                }
216
+            }
217
+
218
+        }
219
+        return $desc;
220
+    }
221
+
222
+    // 处理Headers的解析
223
+    private function formatHeaders($string)
224
+    {
225
+        $string = $string . " ";
226
+        if (preg_match_all('/(\w+):(.*?)[\s\n]/s', $string, $meatchs)) {
227
+            $param = [];
228
+            foreach ($meatchs[1] as $key => $value) {
229
+                $paramKey         = $meatchs[1][$key];
230
+                $value            = $meatchs[2][$key];
231
+                $param[$paramKey] = $value;
232
+            }
233
+            return $param;
234
+        } else {
235
+            return '' . $string;
236
+        }
237
+    }
238
+
239
+    // 处理Param的解析
240
+    private function formatParam($string)
241
+    {
242
+        $string = $string . " ";
243
+        if (preg_match_all('/(\w+):(.*?)[\s\n]/s', $string, $meatchs)) {
244
+            $param = [];
245
+            foreach ($meatchs[1] as $key => $value) {
246
+                $paramKey = $meatchs[1][$key];
247
+                $value    = $meatchs[2][$key];
248
+                if ($paramKey == "params") {
249
+                    // 处理对象类型
250
+                    $value = $this->parseObjectLine($value);
251
+                } else if ($paramKey == "ref") {
252
+                    // 处理引用
253
+                    $value    = $this->parseRefLine($value, "param");
254
+                    $paramKey = "params";
255
+                } else if ($paramKey == "field" && !empty($param["params"])) {
256
+                    // 只取模型指定字段
257
+                    $param["params"] = $this->filterModelTableField($param["params"], $value, "field");
258
+                } else if ($paramKey == "withoutField" && !empty($param["params"])) {
259
+                    // 排除模型指定字段
260
+                    $param["params"] = $this->filterModelTableField($param["params"], $value, "withoutField");
261
+                }
262
+                $param[$paramKey] = $value;
263
+            }
264
+            return $param;
265
+        } else {
266
+            return '' . $string;
267
+        }
268
+    }
269
+
270
+    // 处理Return的解析
271
+    private function formatReturn($string)
272
+    {
273
+        $string = $string . " ";
274
+        if (preg_match_all('/(\w+):(.*?)[\s\n]/s', $string, $meatchs)) {
275
+            $param = [];
276
+            foreach ($meatchs[1] as $key => $value) {
277
+                $paramKey = $meatchs[1][$key];
278
+                $value    = $meatchs[2][$key];
279
+                if ($paramKey == "params") {
280
+                    // 处理对象类型
281
+                    $value = $this->parseObjectLine($value);
282
+                } else if ($paramKey == "ref") {
283
+                    // 处理引用
284
+                    $value = $this->parseRefLine($value, "return");
285
+                    if (!empty($value) && is_array($value) && count($value) === 1) {
286
+                        if (!empty($value[0]) && !empty($value[0]['params'])) {
287
+                            $value = $value[0]['params'];
288
+                        }
289
+                    }
290
+                    $paramKey = "params";
291
+                } else if ($paramKey == "field" && !empty($param["params"])) {
292
+                    // 只取模型指定字段
293
+                    $param["params"] = $this->filterModelTableField($param["params"], $value, "field");
294
+                } else if ($paramKey == "withoutField" && !empty($param["params"])) {
295
+                    // 排除模型指定字段
296
+                    $param["params"] = $this->filterModelTableField($param["params"], $value, "withoutField");
297
+                }
298
+//                if ($paramKey == "type" && $value === 'tree') {
299
+                //                    // 数据结构为树形结构
300
+                //                    $value =$param;
301
+                //                }
302
+                $param[$paramKey] = $value;
303
+            }
304
+            return $param;
305
+        } else {
306
+            return '' . $string;
307
+        }
308
+    }
309
+
310
+    // 解析param参数为对象类型
311
+    public function parseObjectLine($string)
312
+    {
313
+        $string = trim($string);
314
+        if (empty($string)) {
315
+            return false; // Empty line
316
+        }
317
+        $string = $string . ",";
318
+        if (preg_match_all('/(\w+):(.*?),/s', $string, $meatchs)) {
319
+            $param = [];
320
+            foreach ($meatchs[1] as $key => $value) {
321
+                $paramKey = $meatchs[1][$key];
322
+                $value    = $meatchs[2][$key];
323
+                $param[]  = array("name" => $paramKey, "type" => $value);
324
+            }
325
+            return $param;
326
+        } else {
327
+            return '' . $string;
328
+        }
329
+
330
+    }
331
+
332
+    // 解析ref引用的数据,server、model、引用定义
333
+    public function parseRefLine($string, $paramKey = "")
334
+    {
335
+        $string = trim($string);
336
+        if (empty($string)) {
337
+            return false; // Empty line
338
+        }
339
+        $value = $string;
340
+        if (strpos($string, 'app\\') !== false && strpos($string, 'model\\') === false) {
341
+            // 引用服务
342
+            $value = $this->parseServer($string, $paramKey);
343
+            if (!empty($paramKey) && !empty($value) && !empty($value[$paramKey])) {
344
+                // 存在指定取值的key,去server注释中指定的值
345
+                $value = $value[$paramKey];
346
+            }
347
+
348
+        } else if (strpos($string, 'model\\') !== false) {
349
+            // 引用模型
350
+            $value = $this->parseModel($string);
351
+        } else if (strpos($string, 'definitions\\') !== false) {
352
+            // 引用定义
353
+            $value = $this->parseDefinitions($string);
354
+            if (!empty($paramKey) && !empty($value) && !empty($value[$paramKey])) {
355
+                // 存在指定取值的key,去server注释中指定的值
356
+                $value = $value[$paramKey];
357
+            }
358
+        }
359
+        return $value;
360
+    }
361
+
362
+    // 解析服务的注释
363
+    public function parseServer($path, $paramKey)
364
+    {
365
+
366
+        $modelClassArr   = explode("\\", $path);
367
+        $modelActionName = $modelClassArr[count($modelClassArr) - 1];
368
+        $modelClassName  = $modelClassArr[count($modelClassArr) - 2];
369
+        unset($modelClassArr[count($modelClassArr) - 1]);
370
+        $modelClassPath  = implode("\\", $modelClassArr);
371
+        $classReflect    = new \ReflectionClass($modelClassPath);
372
+        $modelActionName = trim($modelActionName);
373
+        $methodAction    = $classReflect->getMethod($modelActionName);
374
+        $doc_str         = $methodAction->getDocComment();
375
+        $action_doc      = $this->parseParam($doc_str);
376
+        return $action_doc;
377
+    }
378
+
379
+    // 解析模型的注释
380
+    public function parseModel($path)
381
+    {
382
+        $modelClassArr   = explode("\\", $path);
383
+        $modelActionName = $modelClassArr[count($modelClassArr) - 1];
384
+        $modelClassName  = $modelClassArr[count($modelClassArr) - 2];
385
+        unset($modelClassArr[count($modelClassArr) - 1]);
386
+        $modelClassPath  = implode("\\", $modelClassArr);
387
+        $classReflect    = new \ReflectionClass($modelClassPath);
388
+        $modelActionName = trim($modelActionName);
389
+        $methodAction    = $classReflect->getMethod($modelActionName);
390
+        //获取模型方法的注释
391
+        $doc_str = $methodAction->getDocComment();
392
+        //解析注释
393
+        $action_doc = $this->parseParam($doc_str);
394
+        // 获取表字段
395
+        $model = $this->getModel($methodAction, $modelClassName);
396
+        $table = $this->getTableDocument($model);
397
+
398
+        //过滤field
399
+        if (!empty($action_doc) && !empty($action_doc['field'])) {
400
+            $table = $this->filterModelTableField($table, $action_doc['field'], "field");
401
+        } else if (!empty($action_doc) && !empty($action_doc['withoutField'])) {
402
+            $table = $this->filterModelTableField($table, $action_doc['withoutField'], "withoutField");
403
+        }
404
+        if (!empty($action_doc) && !empty($action_doc['addField'])) {
405
+            $table = array_merge($table, $action_doc['addField']);
406
+        }
407
+
408
+        return $table;
409
+    }
410
+
411
+    // 获取模型
412
+    private function getModel($method, $modelClassName)
413
+    {
414
+        if (!empty($method->class)) {
415
+            $relationModelClass = $this->getIncludeClassName($method->class, $modelClassName);
416
+            if ($relationModelClass) {
417
+                $modelInstance = new $relationModelClass();
418
+                return $modelInstance;
419
+            } else {
420
+                return null;
421
+            }
422
+        } else {
423
+            return null;
424
+        }
425
+
426
+    }
427
+
428
+    // 过滤模型字段
429
+    public function filterModelTableField($params, $keys, $type = "field")
430
+    {
431
+        $modelParams = [];
432
+        $fieldArr    = explode(',', $keys);
433
+        foreach ($params as $modelParam) {
434
+            if (!empty($modelParam['name']) && in_array($modelParam['name'], $fieldArr) && $type == "field") {
435
+                // 取指定字段
436
+                $modelParams[] = $modelParam;
437
+            } else if (!(!empty($modelParam['name']) && in_array($modelParam['name'], $fieldArr)) && $type == "withoutField") {
438
+                // 排除指定字段
439
+                $modelParams[] = $modelParam;
440
+            }
441
+        }
442
+        return $modelParams;
443
+    }
444
+
445
+    // 解析定义的注释
446
+    public function parseDefinitions($path)
447
+    {
448
+        $modelClassArr   = explode("\\", $path);
449
+        $modelActionName = $modelClassArr[count($modelClassArr) - 1];
450
+        $definitionsPath = !empty($this->config['definitions']) ? $this->config['definitions'] : "hg\apidoc\Definitions";
451
+        $classReflect    = new \ReflectionClass($definitionsPath);
452
+        $modelActionName = trim($modelActionName);
453
+        $methodAction    = $classReflect->getMethod($modelActionName);
454
+        $doc_str         = $methodAction->getDocComment();
455
+        $action_doc      = $this->parseParam($doc_str);
456
+        return $action_doc;
457
+    }
458
+
459
+    /**
460
+     * 解析参数的注释,server的注释解析
461
+     * @param string $doc
462
+     * @return array
463
+     */
464
+    public function parseParam($doc = '')
465
+    {
466
+        if ($doc == '') {
467
+            return false;
468
+        }
469
+        // Get the comment
470
+        if (preg_match('#^/\*\*(.*)\*/#s', $doc, $comment) === false) {
471
+            return false;
472
+        }
473
+
474
+        $comment = trim($comment[1]);
475
+        // Get all the lines and strip the * from the first character
476
+        if (preg_match_all('#^\s*\*(.*)#m', $comment, $lines) === false) {
477
+            return false;
478
+        }
479
+
480
+        $res = $this->parseActionLines($lines[1]);
481
+
482
+        return $res;
483
+    }
484
+
485
+    /**
486
+     * 根据模型获取表的注释
487
+     * @param Model $model
488
+     * @return array
489
+     */
490
+    public function getTableDocument($model)
491
+    {
492
+        $tp_version = \think\facade\App::version();
493
+        if (substr($tp_version, 0, 2) == '5.') {
494
+            $createSQL = Db5::query("show create table " . $model->getTable())[0]['Create Table'];
495
+        } else {
496
+            $createSQL = Db::query("show create table " . $model->getTable())[0]['Create Table'];
497
+        }
498
+        preg_match_all("#`(.*?)`(.*?),#", $createSQL, $matches);
499
+        $fields       = $matches[1];
500
+        $types        = $matches[2];
501
+        $fieldComment = [];
502
+        //组织注释
503
+        for ($i = 0; $i < count($matches[0]); $i++) {
504
+            $key = $fields[$i];
505
+
506
+            $typeString = $types[$i];
507
+            $typeString = trim($typeString);
508
+            $typeArr    = explode(' ', $typeString);
509
+            $type       = $typeArr[0];
510
+            $default    = "";
511
+            $require    = "0";
512
+            $desc       = "";
513
+            if (strpos($typeString, 'COMMENT') !== false) {
514
+                // 存在字段注释
515
+                preg_match_all("#COMMENT\s*'(.*?)'#", $typeString, $edscs);
516
+                if (!empty($edscs[1]) && !empty($edscs[1][0])) {
517
+                    $desc = $edscs[1][0];
518
+                }
519
+
520
+            }
521
+            if (strpos($typeString, 'DEFAULT') !== false) {
522
+                // 存在字段默认值
523
+                preg_match_all("#DEFAULT\s*'(.*?)'#", $typeString, $defaults);
524
+                if (!empty($defaults[1]) && !empty($defaults[1][0])) {
525
+                    $default = $defaults[1][0];
526
+                }
527
+
528
+            }
529
+
530
+            if (strpos($typeString, 'NOT NULL') !== false) {
531
+                // 必填字段
532
+                $require = "1";
533
+            }
534
+
535
+            $fieldComment[] = [
536
+                "name"    => $key,
537
+                "type"    => $type,
538
+                "desc"    => $desc,
539
+                "default" => $default,
540
+                "require" => $require,
541
+//                "str"=>$createSQL
542
+            ];
543
+        }
544
+        return $fieldComment;
545
+    }
546
+
547
+    /**
548
+     * 获取类文件的内容
549
+     * @param $className
550
+     * @return mixed
551
+     * @throws \Exception
552
+     */
553
+    protected function getClassFileContent($className)
554
+    {
555
+        if (class_exists($className)) {
556
+            $classReflect = new \ReflectionClass($className);
557
+        } else {
558
+            throw new \Exception("类不存在", '1');
559
+        }
560
+        if (!isset($this->classFileMaps[$className])) {
561
+            $this->classFileMaps[$className] = file_get_contents($classReflect->getFileName());
562
+        }
563
+        return $this->classFileMaps[$className];
564
+    }
565
+
566
+    public function getIncludeClassName($mainClass, $class)
567
+    {
568
+        $classFile = $this->getClassFileContent($mainClass);
569
+        $pattern   = "/use\s*(app.*?\\\\$class)/";
570
+        if (preg_match($pattern, $classFile, $matches)) {
571
+            return $matches[1];
572
+        } else {
573
+            $classReflect  = new \ReflectionClass($mainClass);
574
+            $possibleClass = $classReflect->getNamespaceName() . "\\" . $class;
575
+            if (class_exists($possibleClass)) {
576
+                return $possibleClass;
577
+            } else {
578
+                return "";
579
+            }
580
+        }
581
+    }
582
+
583
+}

+ 1
- 0
addons/area/.addonrc View File

@@ -0,0 +1 @@
1
+{"menus":["area","area\/index","area\/add","area\/edit","area\/del","area\/refresh"],"files":["application\/admin\/view\/area\/add.html","application\/admin\/view\/area\/edit.html","application\/admin\/view\/area\/index.html","application\/admin\/validate\/Area.php","application\/admin\/model\/Area.php","application\/admin\/controller\/Area.php"]}

+ 75
- 0
addons/area/Area.php View File

@@ -0,0 +1,75 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 地区插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\area;
16
+
17
+use app\common\library\Menu;
18
+use think\Addons;
19
+
20
+class Area extends Addons
21
+{
22
+    /**
23
+     * 插件安装方法
24
+     * @return bool
25
+     */
26
+    public function install()
27
+    {
28
+        $menu = [
29
+            [
30
+                "name"    => "area",
31
+                "title"   => "地区管理",
32
+                "sublist" => [
33
+                    ["name" => "area/index", "title" => "查看"],
34
+                    ["name" => "area/add", "title" => "新增"],
35
+                    ["name" => "area/edit", "title" => "编辑"],
36
+                    ["name" => "area/del", "title" => "删除"],
37
+                    ["name" => "area/refresh", "title" => "刷新"],
38
+                ],
39
+            ],
40
+        ];
41
+        Menu::create($menu);
42
+        return true;
43
+    }
44
+
45
+    /**
46
+     * 插件卸载方法
47
+     * @return bool
48
+     */
49
+    public function uninstall()
50
+    {
51
+        Menu::delete("area");
52
+        return true;
53
+    }
54
+
55
+    /**
56
+     * 插件启用方法
57
+     * @return bool
58
+     */
59
+    public function enable()
60
+    {
61
+        Menu::enable("area");
62
+        return true;
63
+    }
64
+
65
+    /**
66
+     * 插件禁用方法
67
+     * @return bool
68
+     */
69
+    public function disable()
70
+    {
71
+        Menu::disable("area");
72
+        return true;
73
+    }
74
+
75
+}

+ 11
- 0
addons/area/config.php View File

@@ -0,0 +1,11 @@
1
+<?php
2
+
3
+return [
4
+    [
5
+        'name'  => 'amap_webapi_key',
6
+        'title' => '高德地图的KEY',
7
+        'type'  => 'text',
8
+        'value' => '',
9
+        'tip'   => '',
10
+    ],
11
+];

+ 7
- 0
addons/area/info.ini View File

@@ -0,0 +1,7 @@
1
+name = area
2
+title = 地区管理
3
+description = 省市区三级联动
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.1.0
7
+status = 1

+ 3776
- 0
addons/area/install.sql
File diff suppressed because it is too large
View File


+ 1
- 0
addons/cms/.addonrc
File diff suppressed because it is too large
View File


+ 273
- 0
addons/cms/Cms.php View File

@@ -0,0 +1,273 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 内容管理插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\cms;
16
+
17
+use addons\cms\library\FulltextSearch;
18
+use app\common\library\Menu;
19
+use think\Addons;
20
+use think\Db;
21
+use think\facade\Config;
22
+use think\facade\Route;
23
+
24
+class Cms extends Addons
25
+{
26
+    protected $ext_table = '_data';
27
+
28
+    //后台菜单
29
+    protected $menu = [
30
+        [
31
+            "name"    => "cms",
32
+            "title"   => "cms内容管理",
33
+            "icon"    => "iconfont icon-draft-line",
34
+            "sublist" => [
35
+                [
36
+                    "name"      => "addons/config/name/cms",
37
+                    "title"     => "站点配置",
38
+                    "icon"      => "iconfont icon-setup",
39
+                    'ismenu'    => 1,
40
+                    "listorder" => 10,
41
+                ],
42
+                [
43
+                    "name"      => "cms.cms",
44
+                    "title"     => "管理内容",
45
+                    "icon"      => "iconfont icon-draft-line",
46
+                    "listorder" => 9,
47
+                    "sublist"   => [
48
+                        ["name" => "cms.cms/index", "title" => "查看"],
49
+                        ["name" => "cms.cms/add", "title" => "新增"],
50
+                        ["name" => "cms.cms/edit", "title" => "编辑"],
51
+                        ["name" => "cms.cms/del", "title" => "删除"],
52
+                        ["name" => "cms.cms/listorder", "title" => "排序"],
53
+                        ["name" => "cms.cms/remove", "title" => "批量移动"],
54
+                        ["name" => "cms.cms/setstate", "title" => "状态"],
55
+                        ["name" => "cms.cms/recycle", "title" => "回收站"],
56
+                        ["name" => "cms.cms/destroy", "title" => "清空回收站"],
57
+                        ["name" => "cms.cms/restore", "title" => "还原回收站"],
58
+                    ],
59
+                ],
60
+                [
61
+                    "name"      => "cms.publish",
62
+                    "title"     => "稿件管理",
63
+                    "icon"      => "iconfont icon-draft-line",
64
+                    "listorder" => 8,
65
+                    "sublist"   => [
66
+                        ["name" => "cms.publish/index", "title" => "查看"],
67
+                        ["name" => "cms.publish/del", "title" => "删除"],
68
+                        ["name" => "cms.publish/pass", "title" => "通过"],
69
+                        ["name" => "cms.publish/reject", "title" => "退稿"],
70
+                    ],
71
+                ],
72
+                [
73
+                    "name"      => "cms.order",
74
+                    "title"     => "订单管理",
75
+                    "icon"      => "iconfont icon-file-list-3-line",
76
+                    "listorder" => 7,
77
+                    "sublist"   => [
78
+                        ["name" => "cms.order/index", "title" => "查看"],
79
+                        ["name" => "cms.order/del", "title" => "删除"],
80
+                    ],
81
+                ],
82
+                [
83
+                    "name"      => "cms.tags",
84
+                    "title"     => "Tags管理",
85
+                    "icon"      => "iconfont icon-label",
86
+                    "listorder" => 6,
87
+                    "sublist"   => [
88
+                        ["name" => "cms.tags/index", "title" => "查看"],
89
+                        ["name" => "cms.tags/add", "title" => "新增"],
90
+                        ["name" => "cms.tags/edit", "title" => "编辑"],
91
+                        ["name" => "cms.tags/del", "title" => "删除"],
92
+                        ["name" => "cms.tags/create", "title" => "数据重建"],
93
+                        ["name" => "cms.tags/multi", "title" => "批量更新"],
94
+                    ],
95
+                ],
96
+                [
97
+                    "name"      => "cms.category",
98
+                    "title"     => "栏目列表",
99
+                    "icon"      => "iconfont icon-other",
100
+                    "listorder" => 5,
101
+                    "sublist"   => [
102
+                        ["name" => "cms.category/index", "title" => "查看"],
103
+                        ["name" => "cms.category/add", "title" => "新增"],
104
+                        ["name" => "cms.category/cat_priv", "title" => "栏目授权"],
105
+                        ["name" => "cms.category/edit", "title" => "编辑"],
106
+                        ["name" => "cms.category/del", "title" => "删除"],
107
+                        ["name" => "cms.category/multi", "title" => "批量更新"],
108
+                    ],
109
+                ],
110
+                [
111
+                    "name"      => "cms.models",
112
+                    "title"     => "模型管理",
113
+                    "icon"      => "iconfont icon-apartment",
114
+                    "listorder" => 4,
115
+                    "sublist"   => [
116
+                        ["name" => "cms.models/index", "title" => "查看"],
117
+                        ["name" => "cms.models/add", "title" => "新增"],
118
+                        ["name" => "cms.models/edit", "title" => "编辑"],
119
+                        ["name" => "cms.models/del", "title" => "删除"],
120
+                        ["name" => "cms.models/multi", "title" => "批量更新"],
121
+                    ],
122
+                ],
123
+                [
124
+                    "name"    => "cms.field",
125
+                    "title"   => "字段管理",
126
+                    "ismenu"  => 0,
127
+                    "sublist" => [
128
+                        ["name" => "cms.field/index", "title" => "查看"],
129
+                        ["name" => "cms.field/add", "title" => "新增"],
130
+                        ["name" => "cms.field/edit", "title" => "编辑"],
131
+                        ["name" => "cms.field/del", "title" => "删除"],
132
+                        ["name" => "cms.field/listorder", "title" => "排序"],
133
+                        ["name" => "cms.field/setstate", "title" => "状态"],
134
+                        ["name" => "cms.field/setsearch", "title" => "状态-搜索"],
135
+                        ["name" => "cms.field/setvisible", "title" => "状态-隐藏"],
136
+                        ["name" => "cms.field/setrequire", "title" => "状态-必须"],
137
+                    ],
138
+                ],
139
+            ],
140
+        ],
141
+
142
+    ];
143
+
144
+    public $cache_list = [
145
+        'Category' => [
146
+            'name'   => '栏目索引',
147
+            'model'  => 'Category',
148
+            'action' => 'category_cache',
149
+        ],
150
+    ];
151
+
152
+    //安装
153
+    public function install()
154
+    {
155
+        $info = get_addon_info('member');
156
+        if (!$info || $info['status'] != 1) {
157
+            throw new \think\Exception("请在后台插件管理中安装《会员插件》并启用后再尝试");
158
+        }
159
+        Menu::create($this->menu);
160
+        return true;
161
+    }
162
+
163
+    //卸载
164
+    public function uninstall()
165
+    {
166
+        $droptables = request()->param("droptables");
167
+        $auth       = \app\admin\service\User::instance();
168
+        //只有开启调试且为超级管理员才允许删除相关数据库
169
+        if ($droptables && Config::get("app_debug") && $auth->isAdministrator()) {
170
+            // 删除模型中建的表
171
+            $table_list = Db::name('model')->where('module', 'cms')->field('tablename,type,id')->select();
172
+            if ($table_list) {
173
+                foreach ($table_list as $val) {
174
+                    $tablename = Config::get('database.prefix') . $val['tablename'];
175
+                    Db::execute("DROP TABLE IF EXISTS `{$tablename}`;");
176
+                    if ($val['type'] == 2) {
177
+                        Db::execute("DROP TABLE IF EXISTS `{$tablename}{$this->ext_table}`;");
178
+                    }
179
+                    Db::name('model_field')->where('modelid', $val['id'])->delete();
180
+                }
181
+            }
182
+            //删除模型中的表
183
+            Db::name('model')->where(['module' => 'cms'])->delete();
184
+        }
185
+        Menu::delete("cms");
186
+        return true;
187
+    }
188
+
189
+    /**
190
+     * 插件启用方法
191
+     * @return bool
192
+     */
193
+    public function enable()
194
+    {
195
+        Menu::enable("cms");
196
+        return true;
197
+    }
198
+
199
+    /**
200
+     * 插件禁用方法
201
+     * @return bool
202
+     */
203
+    public function disable()
204
+    {
205
+        Menu::disable("cms");
206
+        return true;
207
+    }
208
+
209
+    //或者run方法
210
+    public function userSidenavAfter($content)
211
+    {
212
+        return $this->fetch('userSidenavAfter');
213
+    }
214
+
215
+    public function xunsearchIndexReset($project)
216
+    {
217
+        if ($project['name'] == 'cms') {
218
+            return FulltextSearch::reset();
219
+        }
220
+    }
221
+
222
+    /**
223
+     * 插件升级方法
224
+     */
225
+    public function upgrade()
226
+    {
227
+        Menu::upgrade('cms', $this->menu);
228
+        return true;
229
+    }
230
+
231
+    public function appInit()
232
+    {
233
+        $config = get_addon_config('cms');
234
+
235
+        //TODO 暂时这么排除后台使用此路由
236
+        //if (strpos(request()->url(), '/admin') === false) {
237
+        Route::rule('', 'cms/index/index');
238
+        Route::rule('index', 'cms/index/index');
239
+        Route::rule('lists/:catid', 'cms/index/lists')->pattern(['catid' => '\d+']);
240
+        Route::rule('shows/:catid/:id', 'cms/index/shows')->pattern(['catid' => '\d+', 'id' => '\d+']);
241
+        Route::rule('tag/[:tag]', 'cms/index/tags');
242
+        Route::rule('search', 'cms/search/index');
243
+        if ($config['site_url_mode'] == 2) {
244
+            Route::rule('d/:catdir/:id', 'cms/index/shows')->pattern(['catdir' => '[A-Za-z0-9\-\_]+', 'id' => '\d+']);
245
+            Route::rule('c/:catdir/[:condition]', 'cms/index/lists')->pattern(['catdir' => '[A-Za-z0-9\-\_]+', 'condition' => '[0-9_&=a-zA-Z]+']);
246
+        }
247
+        //}
248
+
249
+        //此函数需要全局调用
250
+        if (is_file(ADDON_PATH . 'cms' . DS . 'function.php')) {
251
+            include_once ADDON_PATH . 'cms' . DS . 'function.php';
252
+        }
253
+    }
254
+
255
+    public function contentDeleteEnd($params)
256
+    {
257
+        //参数是审核文章的数据
258
+        if (!empty($params) && isset($params['sysadd']) && $params['sysadd'] == 0) {
259
+            //删除对应的会员投稿记录信息
260
+            db("cms_content")->where(["content_id" => $params['id'], "catid" => $params['catid']])->delete();
261
+        }
262
+    }
263
+
264
+    public function contentEditEnd($params)
265
+    {
266
+        //参数是审核文章的数据
267
+        if (!empty($params)) {
268
+            //标识审核状态
269
+            db("cms_content")->where(["content_id" => $params['id'], "catid" => $params['catid']])->setField('status', $params['status']);
270
+        }
271
+    }
272
+
273
+}

+ 165
- 0
addons/cms/config.php View File

@@ -0,0 +1,165 @@
1
+<?php
2
+
3
+return array (
4
+  0 => 
5
+  array (
6
+    'name' => 'web_site_status',
7
+    'title' => '站点开关',
8
+    'type' => 'radio',
9
+    'options' => 
10
+    array (
11
+      1 => '开启',
12
+      0 => '关闭',
13
+    ),
14
+    'tip' => '站点关闭后前台将不能访问',
15
+    'value' => '1',
16
+  ),
17
+  1 => 
18
+  array (
19
+    'name' => 'site_url_mode',
20
+    'title' => 'URL模式',
21
+    'type' => 'radio',
22
+    'options' => 
23
+    array (
24
+      1 => '数字',
25
+      2 => '标识',
26
+    ),
27
+    'value' => '1',
28
+  ),
29
+  2 => 
30
+  array (
31
+    'name' => 'site_name',
32
+    'title' => '站点名称',
33
+    'type' => 'text',
34
+    'value' => '御宅男工作室',
35
+  ),
36
+  3 => 
37
+  array (
38
+    'name' => 'site_title',
39
+    'title' => '站点标题',
40
+    'type' => 'text',
41
+    'value' => '御宅男工作室',
42
+  ),
43
+  4 => 
44
+  array (
45
+    'name' => 'site_keyword',
46
+    'title' => '站点关键词',
47
+    'type' => 'text',
48
+    'value' => '御宅男CMS,CMS,YZNCMS,内容管理系统,CMS系统',
49
+  ),
50
+  5 => 
51
+  array (
52
+    'name' => 'site_description',
53
+    'title' => '站点描述',
54
+    'type' => 'textarea',
55
+    'value' => 'Yzncms(又名御宅男CMS)是基于最新TP5.1框架的CMS内容管理系统。是一款完全免费开源的项目,他将是您轻松建站的首选利器。框架易于功能扩展,代码维护,方便二次开发,帮助开发者简单高效降低二次开发成本,满足专注业务深度开发的需求。',
56
+  ),
57
+  6 => 
58
+  array (
59
+    'name' => 'site_cache_time',
60
+    'title' => '缓存时间',
61
+    'type' => 'text',
62
+    'value' => '3600',
63
+    'tip' => '单页和详情页有效',
64
+  ),
65
+  7 => 
66
+  array (
67
+    'name' => 'web_site_recycle',
68
+    'title' => '回收站',
69
+    'type' => 'radio',
70
+    'options' => 
71
+    array (
72
+      1 => '开启',
73
+      0 => '关闭',
74
+    ),
75
+    'tip' => '开启后,误删的文章可以恢复,反之不可还原',
76
+    'value' => '1',
77
+  ),
78
+  8 => 
79
+  array (
80
+    'name' => 'web_site_searchtype',
81
+    'title' => '搜索方式',
82
+    'type' => 'radio',
83
+    'options' => 
84
+    array (
85
+      'local' => '本地搜索',
86
+      'xunsearch' => '迅搜全文搜索',
87
+    ),
88
+    'tip' => '使用迅搜(xunsearch)需要安装搜索插件,支持百万以上数据检索',
89
+    'value' => 'local',
90
+  ),
91
+  9 => 
92
+  array (
93
+    'name' => 'site_category_auth',
94
+    'title' => '栏目授权',
95
+    'type' => 'radio',
96
+    'options' => 
97
+    array (
98
+      1 => '开启',
99
+      0 => '关闭',
100
+    ),
101
+    'tip' => '开启后,可在【栏目授权】单独给管理员分配可管理的内容栏目',
102
+    'value' => '1',
103
+  ),
104
+  10 => 
105
+  array (
106
+    'name' => 'web_site_weburlpush',
107
+    'title' => '站长推送',
108
+    'type' => 'radio',
109
+    'options' => 
110
+    array (
111
+      1 => '开启',
112
+      0 => '关闭',
113
+    ),
114
+    'tip' => '如果开启百度站长+神马搜索推送,将在文章发布时自动进行推送(需要安装推送插件)',
115
+    'value' => '0',
116
+  ),
117
+  11 => 
118
+  array (
119
+    'name' => 'web_site_getwords',
120
+    'title' => '中文分词',
121
+    'type' => 'radio',
122
+    'options' => 
123
+    array (
124
+      1 => '开启',
125
+      0 => '关闭',
126
+    ),
127
+    'tip' => '开启后,会将内容分词提取到关键词中(需要安装中文分词插件)',
128
+    'value' => '0',
129
+  ),
130
+  12 => 
131
+  array (
132
+    'name' => 'web_contribute_verify',
133
+    'title' => '投稿身份验证',
134
+    'type' => 'radio',
135
+    'options' => 
136
+    array (
137
+      1 => '开启',
138
+      0 => '关闭',
139
+    ),
140
+    'tip' => '开启后,用户投稿必须验证邮箱或手机',
141
+    'value' => '1',
142
+  ),
143
+  13 => 
144
+  array (
145
+    'name' => 'doc_edit_mode',
146
+    'title' => '文档编辑模式',
147
+    'type' => 'radio',
148
+    'options' => 
149
+    array (
150
+      1 => '选项卡',
151
+      0 => '弹窗',
152
+    ),
153
+    'tip' => '小屏幕可开启选项卡模式',
154
+    'value' => '1',
155
+  ),
156
+  14 => 
157
+  array (
158
+    'name' => 'autolinks',
159
+    'title' => '关键字链接',
160
+    'type' => 'textarea',
161
+    'value' => '百度|https://www.baidu.com/
162
+腾讯|https://www.qq.com/',
163
+    'tip' => '每行1组以"关键词<b class="text-danger">|</b>(半角竖线)链接"形式填写, 可用第2个竖线追加参数:<b class="text-danger">n</b>代表nofollow标记, <b class="text-danger">e</b>代表external nofollow标记, <b class="text-danger">b</b>代表本窗口打开.</br> 例: google<strong>|</strong>http://www.google.com<strong>|</strong>n 即此链接带nofollow(默认新窗口打开)',
164
+  ),
165
+);

+ 309
- 0
addons/cms/function.php View File

@@ -0,0 +1,309 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | cms函数文件
14
+// +----------------------------------------------------------------------
15
+use think\Db;
16
+use think\facade\Cache;
17
+use think\facade\Request;
18
+/**
19
+ * 获取栏目相关信息
20
+ * @param type $catid 栏目id或者栏目标识
21
+ * @param type $field 返回的字段,默认返回全部,数组
22
+ * @param type $newCache 是否强制刷新
23
+ * @return boolean
24
+ */
25
+function getCategory($cat, $fields = '', $newCache = false)
26
+{
27
+    $url_mode = get_addon_config("cms")['site_url_mode'];
28
+    if (empty($cat)) {
29
+        return false;
30
+    }
31
+    $field = is_numeric($cat) ? 'id' : 'catdir';
32
+    $key   = 'getCategory_' . $cat;
33
+    //强制刷新缓存
34
+    if ($newCache) {
35
+        Cache::rm($key, null);
36
+    }
37
+    $cache = Cache::get($key);
38
+    if ($cache === 'false') {
39
+        return false;
40
+    }
41
+    if (empty($cache)) {
42
+        //读取数据
43
+        $cache = Db::name('category')->where($field, $cat)->find();
44
+        if (empty($cache)) {
45
+            Cache::set($key, 'false', 60);
46
+            return false;
47
+        } else {
48
+            //扩展配置
49
+            $field            = 1 == $url_mode ? 'id' : 'catdir';
50
+            $cache['setting'] = unserialize($cache['setting']);
51
+            $cache['url']     = buildCatUrl($cache[$field], $cache['url']);
52
+            Cache::set($key, $cache, 3600);
53
+        }
54
+    }
55
+    if ($fields) {
56
+        //支持var.property,不过只支持一维数组
57
+        if (false !== strpos($fields, '.')) {
58
+            $vars = explode('.', $fields);
59
+            return $cache[$vars[0]][$vars[1]];
60
+        } else {
61
+            return $cache[$fields];
62
+        }
63
+    } else {
64
+        return $cache;
65
+    }
66
+}
67
+
68
+/**
69
+ * 当前路径
70
+ * 返回指定栏目路径层级
71
+ * @param $catid 栏目id
72
+ * @param $symbol 栏目间隔符
73
+ */
74
+function catpos($catid, $symbol = ' &gt; ')
75
+{
76
+    if (getCategory($catid) == false) {
77
+        return '';
78
+    }
79
+    //获取当前栏目的 父栏目列表
80
+    $arrparentid = array_filter(explode(',', getCategory($catid, 'arrparentid') . ',' . $catid));
81
+    foreach ($arrparentid as $cid) {
82
+        $parsestr[] = '<a href="' . getCategory($cid, 'url') . '" >' . getCategory($cid, 'catname') . '</a>';
83
+    }
84
+    $parsestr = implode($symbol, $parsestr);
85
+    return $parsestr;
86
+}
87
+
88
+/**
89
+ * 生成分类信息中的筛选菜单
90
+ */
91
+function filters($modelid, $catid)
92
+{
93
+    $url_mode = get_addon_config("cms")['site_url_mode'];
94
+    $data     = get_filters_field($modelid);
95
+    Request::filter('trim,strip_tags');
96
+    $param = Request::param();
97
+    unset($param['catid'], $param['catdir'], $param['page']);
98
+    $conditionParam = [];
99
+    foreach ($data as $name => $rs) {
100
+        $data[$name]['options'][0] = '不限';
101
+        //判断是否是单选条件
102
+        $ifradio = 'checkbox' == $data[$name]['type'] ? false : true;
103
+        if ($ifradio) {
104
+            //单选选中参数
105
+            if (!empty($param[$name])) {
106
+                $conditionParam[$name]['options'][$param[$name]]['active'] = true;
107
+                $nowParam                                                  = $param;
108
+                $nowParam[$name]                                           = '';
109
+                $conditionParam[$name]['options'][$param[$name]]['param']  = paramencode($nowParam);
110
+                unset($nowParam);
111
+            }
112
+        } else {
113
+            //多选选中参数
114
+            if (!empty($param[$name])) {
115
+                $paramContent = explode('_', $param[$name]);
116
+                foreach ($paramContent as $k => $v) {
117
+                    $nowParamContent = $paramContent;
118
+                    unset($nowParamContent[$k]);
119
+                    $nowParam                                       = $param;
120
+                    $nowParam[$name]                                = implode('_', $nowParamContent);
121
+                    $conditionParam[$name]['options'][$v]['active'] = true;
122
+                    $conditionParam[$name]['options'][$v]['param']  = paramencode($nowParam);
123
+                    unset($nowParam);
124
+                    unset($nowParamContent);
125
+                }
126
+                unset($paramContent);
127
+            }
128
+        }
129
+        $conditionParam[$name]['title'] = $rs['title'];
130
+        $conditionParam[$name]['name']  = $rs['name'];
131
+        //未选中 active param title url
132
+        foreach ($data[$name]['options'] as $k => $v) {
133
+            $conditionParam[$name]['options'][$k]['title'] = $v;
134
+            //未选中条件参数生成
135
+            if (!isset($conditionParam[$name]['options'][$k]['active'])) {
136
+                //未选中条件参数生成
137
+                $conditionParam[$name]['options'][$k]['active'] = 0;
138
+                if ($ifradio) {
139
+                    $nowParam                                      = $param;
140
+                    $nowParam[$name]                               = $k;
141
+                    $conditionParam[$name]['options'][$k]['param'] = paramencode($nowParam);
142
+                } else {
143
+                    $nowParam                                      = $param;
144
+                    $nowParam[$name]                               = empty($param[$name]) || !$k ? $k : $param[$name] . '_' . $k;
145
+                    $conditionParam[$name]['options'][$k]['param'] = paramencode($nowParam);
146
+                }
147
+            }
148
+            if ($url_mode == 1) {
149
+                $field = 'catid';
150
+            } else {
151
+                $field = 'catdir';
152
+                $catid = getCategory($catid, 'catdir');
153
+            }
154
+            $newParam                                    = $conditionParam[$name]['options'][$k]['param'];
155
+            $conditionParam[$name]['options'][$k]['url'] = url('cms/index/lists', [$field => $catid]) . ($newParam ? '?' . $newParam : '');
156
+            ksort($conditionParam[$name]['options']);
157
+        }
158
+        if (!isset($param[$rs['name']]) && empty($param[$rs['name']])) {
159
+            $conditionParam[$name]['options'][0]['active'] = true;
160
+        }
161
+    }
162
+    return $conditionParam;
163
+}
164
+
165
+function structure_filters_sql($modelid)
166
+{
167
+    $data       = get_filters_field($modelid);
168
+    $fields_key = array_keys($data);
169
+    $sql        = '`status` = \'1\'';
170
+    $param      = Request::param();
171
+    foreach ($param as $k => $r) {
172
+        if (isset($data[$k]['type']) && in_array($k, $fields_key) && intval($r) != 0) {
173
+            if ('radio' == $data[$k]['type']) {
174
+                $sql .= " AND `$k` = '$r'";
175
+            } elseif ('checkbox' == $data[$k]['type']) {
176
+                if (strpos($r, '_')) {
177
+                    $r    = explode('_', $r);
178
+                    $flag = [];
179
+                    foreach ($r as $key => $val) {
180
+                        $flag[] = "FIND_IN_SET($val,`$k`)";
181
+                    }
182
+                    $sql .= " AND (" . implode(' OR ', $flag) . ")";
183
+                } else {
184
+                    $sql .= " AND FIND_IN_SET($r,`$k`)";
185
+                }
186
+            }
187
+        }
188
+    }
189
+    return $sql;
190
+}
191
+
192
+function get_filters_field($modelid)
193
+{
194
+
195
+    static $filters_data = [];
196
+    if ($filters_data) {
197
+        return $filters_data;
198
+    }
199
+    $options = cache('ModelField')[$modelid];
200
+    foreach ($options as $_k => $_v) {
201
+        if (isset($_v['filtertype']) && $_v['filtertype']) {
202
+            $_v['options'] = parse_attr($_v['options']);
203
+        } else {
204
+            continue;
205
+        }
206
+        $filters_data[$_v['name']] = array_intersect_key($_v, array_flip(['name', 'title', 'type', 'options']));
207
+    }
208
+    return $filters_data;
209
+
210
+}
211
+
212
+/*function paramdecode($str)
213
+{
214
+$arr  = [];
215
+$arr1 = explode('&', $str);
216
+foreach ($arr1 as $vo) {
217
+if (!empty($vo)) {
218
+$arr2 = explode('=', $vo);
219
+if (!empty($arr2[1])) {
220
+$arr[$arr2[0]] = $arr2[1];
221
+}
222
+}
223
+}
224
+return $arr;
225
+}*/
226
+
227
+function paramencode($arr)
228
+{
229
+    $str = '';
230
+    if (!empty($arr)) {
231
+        foreach ($arr as $key => $vo) {
232
+            if (!empty($vo)) {
233
+                $str .= $key . '=' . $vo . '&';
234
+            }
235
+        }
236
+        $str = $str ? substr($str, 0, -1) : '';
237
+    }
238
+    return $str;
239
+}
240
+
241
+/**
242
+ * 生成SEO
243
+ * @param $catid        栏目ID
244
+ * @param $title        标题
245
+ * @param $description  描述
246
+ * @param $keyword      关键词
247
+ */
248
+function seo($catid = '', $title = '', $description = '', $keyword = '')
249
+{
250
+    if (!empty($title)) {
251
+        $title = strip_tags($title);
252
+    }
253
+    if (!empty($description)) {
254
+        $description = strip_tags($description);
255
+    }
256
+    if (!empty($keyword)) {
257
+        $keyword = str_replace(' ', ',', strip_tags($keyword));
258
+    }
259
+    $site = get_addon_config("cms");
260
+    if (!empty($catid)) {
261
+        $cat = getCategory($catid);
262
+    }
263
+    $seo['site_title']  = isset($site['site_title']) && !empty($site['site_title']) ? $site['site_title'] : $site['site_name'];
264
+    $seo['keyword']     = !empty($keyword) ? $keyword : $site['site_keyword'];
265
+    $seo['description'] = isset($description) && !empty($description) ? $description : (isset($cat['setting']['meta_description']) && !empty($cat['setting']['meta_description']) ? $cat['setting']['meta_description'] : (isset($site['site_description']) && !empty($site['site_description']) ? $site['site_description'] : ''));
266
+    $seo['title']       = (isset($title) && !empty($title) ? $title . ' - ' : '') . (isset($cat['setting']['meta_title']) && !empty($cat['setting']['meta_title']) ? $cat['setting']['meta_title'] . ' - ' : (isset($cat['catname']) && !empty($cat['catname']) ? $cat['catname'] . ' - ' : ''));
267
+    foreach ($seo as $k => $v) {
268
+        $seo[$k] = str_replace(["\n", "\r"], '', $v);
269
+    }
270
+    return $seo;
271
+}
272
+
273
+/**
274
+ * 生成栏目URL
275
+ */
276
+function buildCatUrl($cat, $url = '', $suffix = true, $domain = false)
277
+{
278
+    $url_mode = get_addon_config("cms")['site_url_mode'];
279
+    $category = cache("Category");
280
+
281
+    if (is_numeric($cat)) {
282
+        $field = 'catid';
283
+        if ($url_mode == 2 && isset($category[$cat])) {
284
+            $cat   = $category[$cat]['catdir'];
285
+            $field = 'catdir';
286
+        }
287
+    } else {
288
+        $field = 'catdir';
289
+    }
290
+    return empty($url) ? url('cms/index/lists', [$field => $cat], $suffix, $domain) : ((strpos($url, '://') !== false) ? $url : url($url, '', $suffix, $domain));
291
+}
292
+
293
+//创建内容链接
294
+function buildContentUrl($cat, $id, $url = '', $suffix = true, $domain = false)
295
+{
296
+    $url_mode = get_addon_config("cms")['site_url_mode'];
297
+    $category = cache("Category");
298
+
299
+    if (is_numeric($cat)) {
300
+        $field = 'catid';
301
+        if ($url_mode == 2 && isset($category[$cat])) {
302
+            $cat   = $category[$cat]['catdir'];
303
+            $field = 'catdir';
304
+        }
305
+    } else {
306
+        $field = 'catdir';
307
+    }
308
+    return empty($url) ? url('cms/index/shows', [$field => $cat, 'id' => $id], $suffix, $domain) : ((strpos($url, '://') !== false) ? $url : url($url, '', $suffix, $domain));
309
+}

+ 7
- 0
addons/cms/info.ini View File

@@ -0,0 +1,7 @@
1
+name = cms
2
+title = 内容管理系统
3
+description = 这是一个功能强大的内容管理!自定义模型,字段不在话下,支持近二十种类型字段
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.1.6
7
+status = 1

+ 120
- 0
addons/cms/install.sql View File

@@ -0,0 +1,120 @@
1
+CREATE TABLE IF NOT EXISTS `__PREFIX__category` (
2
+  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '栏目ID',
3
+  `catname` varchar(30) NOT NULL DEFAULT '' COMMENT '栏目名称',
4
+  `catdir` varchar(30) NOT NULL DEFAULT '' COMMENT '唯一标识',
5
+  `type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '类别',
6
+  `modelid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '模型ID',
7
+  `parentid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父ID',
8
+  `arrparentid` varchar(255) NOT NULL DEFAULT '' COMMENT '所有父ID',
9
+  `arrchildid` mediumtext COMMENT '所有子栏目ID',
10
+  `child` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否存在子栏目,1存在',
11
+  `image` varchar(255) NOT NULL DEFAULT '' COMMENT '栏目图片',
12
+  `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '栏目图标',
13
+  `description` mediumtext NOT NULL COMMENT '栏目描述',
14
+  `url` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址',
15
+  `items` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '文档数量',
16
+  `setting` text COMMENT '相关配置信息',
17
+  `listorder` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
18
+  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
19
+  PRIMARY KEY (`id`),
20
+  UNIQUE KEY `catdir` (`catdir`),
21
+  KEY `parentid` (`parentid`)
22
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='栏目表';
23
+
24
+CREATE TABLE IF NOT EXISTS `__PREFIX__category_priv` (
25
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0',
26
+  `roleid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '角色或者组ID',
27
+  `is_admin` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否为管理员 1、管理员',
28
+  `action` varchar(30) NOT NULL DEFAULT '' COMMENT '动作',
29
+  KEY `catid` (`catid`,`roleid`,`is_admin`,`action`)
30
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='栏目权限表';
31
+
32
+CREATE TABLE IF NOT EXISTS `__PREFIX__page` (
33
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
34
+  `title` varchar(160) NOT NULL DEFAULT '' COMMENT '标题',
35
+  `keywords` varchar(255) NOT NULL DEFAULT '' COMMENT '关键字',
36
+  `description` varchar(255) NOT NULL DEFAULT '' COMMENT 'SEO描述',
37
+  `content` text COMMENT '内容',
38
+  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
39
+  `hits` mediumint(8) unsigned DEFAULT '0' COMMENT '点击量',
40
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
41
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
42
+  PRIMARY KEY (`catid`)
43
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='单页内容表';
44
+
45
+CREATE TABLE IF NOT EXISTS `__PREFIX__tags` (
46
+  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'tagID',
47
+  `tag` varchar(20) NOT NULL DEFAULT '' COMMENT 'tag名称',
48
+  `seo_title` varchar(255) NOT NULL DEFAULT '' COMMENT 'seo标题',
49
+  `seo_keyword` varchar(255) NOT NULL DEFAULT '' COMMENT 'seo关键字',
50
+  `seo_description` varchar(255) NOT NULL DEFAULT '' COMMENT 'seo简介',
51
+  `usetimes` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '信息总数',
52
+  `hits` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '点击数',
53
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '添加时间',
54
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
55
+  `listorder` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
56
+  PRIMARY KEY (`id`),
57
+  UNIQUE KEY `tag` (`tag`),
58
+  KEY `usetimes` (`usetimes`,`listorder`),
59
+  KEY `hits` (`hits`,`listorder`)
60
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='tags主表';
61
+
62
+CREATE TABLE IF NOT EXISTS `__PREFIX__tags_content` (
63
+  `tag` varchar(20) NOT NULL COMMENT 'tag名称',
64
+  `modelid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '模型ID',
65
+  `contentid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '信息ID',
66
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
67
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
68
+  KEY `modelid` (`modelid`,`contentid`),
69
+  KEY `tag` (`tag`(10))
70
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='tags数据表';
71
+
72
+CREATE TABLE IF NOT EXISTS `__PREFIX__cms_order` (
73
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
74
+  `trade_sn` varchar(50) DEFAULT '' COMMENT '订单ID',
75
+  `user_id` int(10) unsigned DEFAULT '0' COMMENT '会员ID',
76
+  `contentid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '信息ID',
77
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
78
+  `title` varchar(100) DEFAULT NULL COMMENT '订单标题',
79
+  `type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1金钱or2点数',
80
+  `total_price` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '订单总价',
81
+  `pay_price` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '实际支付金额',
82
+  `pay_type` varchar(50) DEFAULT NULL COMMENT '支付类型',
83
+  `method` varchar(100) NULL DEFAULT '' COMMENT '支付方法',
84
+  `ip` varchar(50) DEFAULT NULL COMMENT 'IP地址',
85
+  `useragent` varchar(255) DEFAULT NULL COMMENT '用户访问端标识',
86
+  `remark` varchar(255) NOT NULL COMMENT '备注说明',
87
+  `pay_time` int(10) unsigned DEFAULT NULL COMMENT '支付时间',
88
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '添加时间',
89
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
90
+  `status` enum('succ','failed','error','cancel','unpay') NOT NULL DEFAULT 'unpay' COMMENT '状态',
91
+  PRIMARY KEY (`id`),
92
+  KEY `catid` (`catid`,`contentid`),
93
+  KEY `trade_sn` (`trade_sn`)
94
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='订单表';
95
+
96
+CREATE TABLE IF NOT EXISTS `__PREFIX__cms_content` (
97
+  `id` int(10) NOT NULL AUTO_INCREMENT,
98
+  `catid` smallint(5) NOT NULL COMMENT '栏目ID',
99
+  `content_id` int(10) NOT NULL COMMENT '信息ID',
100
+  `uid` mediumint(8) NOT NULL COMMENT '会员ID',
101
+  `username` varchar(16) NOT NULL COMMENT '用户名',
102
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '添加时间',
103
+  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态',
104
+  PRIMARY KEY (`id`),
105
+  KEY `uid` (`catid`,`content_id`,`status`)
106
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员投稿信息记录表';
107
+
108
+-- 1.1.0 --
109
+ALTER TABLE `__PREFIX__category` ENGINE = InnoDB;
110
+ALTER TABLE `__PREFIX__category_priv` ENGINE = InnoDB;
111
+ALTER TABLE `__PREFIX__page` ENGINE = InnoDB;
112
+ALTER TABLE `__PREFIX__tags` ENGINE = InnoDB;
113
+ALTER TABLE `__PREFIX__tags_content` ENGINE = InnoDB;
114
+ALTER TABLE `__PREFIX__cms_order` ENGINE = InnoDB;
115
+ALTER TABLE `__PREFIX__cms_content` ENGINE = InnoDB;
116
+
117
+-- 1.1.2 --
118
+ALTER TABLE `__PREFIX__page` CHANGE COLUMN `inputtime` `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间';
119
+ALTER TABLE `__PREFIX__page` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';
120
+ALTER TABLE `__PREFIX__tags_content` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';

+ 96
- 0
addons/cms/library/FulltextSearch.php View File

@@ -0,0 +1,96 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | cms全文搜索类
14
+// +----------------------------------------------------------------------
15
+namespace addons\cms\library;
16
+
17
+use addons\xunsearch\library\Xunsearch;
18
+use think\Db;
19
+
20
+class FulltextSearch
21
+{
22
+
23
+    //重置搜索索引数据库
24
+    public static function reset()
25
+    {
26
+        $models   = array_values(cache('Model'));
27
+        $category = Db::name('category')->where('type', 2)->column('modelid', 'id');
28
+        if (count($models) > 0) {
29
+            foreach ($models as $k => $v) {
30
+                if ($v['type'] == 1) {
31
+                    //独立表
32
+                    Db::name($v['tablename'])->where('status', 1)->chunk(100, function ($list) use ($category) {
33
+                        foreach ($list as $val) {
34
+                            self::update(($category[$val['catid']] ?? 0), $val['catid'], $val['id'], $val);
35
+                        }
36
+                    });
37
+                } elseif ($v['type'] == 2) {
38
+                    Db::view($v['tablename'], '*')
39
+                        ->where('status', 1)->view($v['tablename'] . '_data', '*', $v['tablename'] . '.id=' . $v['tablename'] . '_data' . '.did', 'LEFT')
40
+                        ->chunk(100, function ($list) use ($category) {
41
+                            foreach ($list as $val) {
42
+                                self::update(($category[$val['catid']] ?? 0), $val['catid'], $val['id'], $val, $val);
43
+                            }
44
+                        });
45
+                }
46
+            }
47
+        }
48
+        return true;
49
+    }
50
+
51
+    /**
52
+     * 新增/更新索引
53
+     */
54
+    public static function update($modelid, $catid, $id, $data, $dataExt)
55
+    {
56
+        $res                = [];
57
+        $res['pid']         = $catid . '_' . $id;
58
+        $res['catid']       = $catid;
59
+        $res['id']          = $id;
60
+        $res['modelid']     = $modelid;
61
+        $res['title']       = isset($data['title']) ? $data['title'] : '';
62
+        $res['content']     = isset($dataExt['content']) ? strip_tags(htmlspecialchars_decode($dataExt['content'])) : '';
63
+        $res['create_time'] = isset($data['create_time']) ? $data['create_time'] : 0;
64
+        $res['url']         = buildContentUrl($catid, $id);
65
+        Xunsearch::instance('cms')->update($res);
66
+    }
67
+
68
+    /**
69
+     * 删除
70
+     */
71
+    public static function del($catid, $id)
72
+    {
73
+        Xunsearch::instance('cms')->del($catid . '_' . $id);
74
+    }
75
+
76
+    public static function setQuery($query, $fulltext = true, $fuzzy = false, $synonyms = false)
77
+    {
78
+        return Xunsearch::instance('cms')->setQuery($query, $fulltext, $fuzzy, $synonyms);
79
+    }
80
+
81
+    /**
82
+     * 获取搜索结果
83
+     */
84
+    public static function search($page = 1, $pagesize = 20, $order = '', $query = [])
85
+    {
86
+        return Xunsearch::instance('cms')->search($page, $pagesize, $order, $query);
87
+    }
88
+
89
+    /**
90
+     * 获取搜索热门关键字
91
+     */
92
+    public static function hot()
93
+    {
94
+        return Xunsearch::instance('cms')->getXS()->search->getHotQuery();
95
+    }
96
+}

+ 282
- 0
addons/cms/library/Service.php View File

@@ -0,0 +1,282 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | cms处理类
14
+// +----------------------------------------------------------------------
15
+namespace addons\cms\library;
16
+
17
+use app\cms\model\ModelField;
18
+use think\Db;
19
+use think\facade\Validate;
20
+
21
+class Service
22
+{
23
+    private static $ext_table = '_data';
24
+
25
+    //查询解析模型数据用以构造from表单
26
+    public static function getFieldList($modelId, $id = null)
27
+    {
28
+        $list = ModelField::where('modelid', $modelId)->where('status', 1)->order('listorder DESC,id DESC')->select();
29
+        if (!empty($list)) {
30
+            //编辑信息时查询出已有信息
31
+            if ($id) {
32
+                $modelInfo = Db::name('Model')->where('id', $modelId)->field('tablename,type')->find();
33
+                $dataInfo  = Db::name($modelInfo['tablename'])->where('id', $id)->find();
34
+                //查询附表信息
35
+                if ($modelInfo['type'] == 2 && !empty($dataInfo)) {
36
+                    $dataInfoExt = Db::name($modelInfo['tablename'] . self::$ext_table)->where('did', $dataInfo['id'])->find();
37
+                }
38
+            }
39
+            foreach ($list as $key => &$value) {
40
+                //内部字段不显示
41
+                if ($value['iscore']) {
42
+                    unset($list[$key]);
43
+                }
44
+                //核心字段做标记
45
+                if ($value['ifsystem']) {
46
+                    $value['fieldArr'] = 'modelField';
47
+                    if (isset($dataInfo[$value['name']])) {
48
+                        $value['value'] = $dataInfo[$value['name']];
49
+                    }
50
+                } else {
51
+                    $value['fieldArr'] = 'modelFieldExt';
52
+                    if (isset($dataInfoExt[$value['name']])) {
53
+                        $value['value'] = $dataInfoExt[$value['name']];
54
+                    }
55
+                }
56
+
57
+                //扩展配置
58
+                $value['setting'] = unserialize($value['setting']);
59
+                $value['options'] = $value['setting']['options'] ?? '';
60
+                //在新增时候添加默认值
61
+                if (!$id) {
62
+                    $value['value'] = $value['setting']['value'] ?? '';
63
+                }
64
+                if ($value['type'] == 'custom') {
65
+                    if ($value['options'] != '') {
66
+                        $tpar             = explode(".", $value['options'], 2);
67
+                        $value['options'] = \think\Response::create('admin@custom/' . $tpar[0], 'view')->assign('vo', $value)->getContent();
68
+                        unset($tpar);
69
+                    }
70
+                } elseif ($value['options'] != '') {
71
+                    $value['options'] = parse_attr($value['options']);
72
+                }
73
+                /*if ('' != $value['options']) {
74
+                $value['options'] = parse_attr($value['options']);
75
+                }*/
76
+                if ($value['type'] == 'checkbox') {
77
+                    $value['value'] = empty($value['value']) ? [] : explode(',', $value['value']);
78
+                }
79
+                if ($value['type'] == 'datetime') {
80
+                    $value['value'] = empty($value['value']) ? date('Y-m-d H:i:s') : date('Y-m-d H:i:s', $value['value']);
81
+                }
82
+                if ($value['type'] == 'date') {
83
+                    $value['value'] = empty($value['value']) ? '' : date('Y-m-d', $value['value']);
84
+                }
85
+                if ($value['type'] == 'Ueditor' || $value['type'] == 'markdown') {
86
+                    $value['value'] = isset($value['value']) ? htmlspecialchars_decode($value['value']) : '';
87
+                }
88
+            }
89
+        }
90
+        return $list;
91
+    }
92
+
93
+    //处理post提交的模型数据
94
+    public static function dealModelPostData($modeId, $data, $dataExt = [], $ignoreField = [])
95
+    {
96
+        //字段类型
97
+        $query = ModelField::where('modelid', $modeId)->where('status', 1);
98
+        if ([] != $ignoreField) {
99
+            $query = $query->where('name', 'not in', $ignoreField);
100
+        }
101
+        $filedTypeList = $query->order('listorder DESC, id DESC')->column('name,title,type,ifsystem,ifrequire,pattern,errortips');
102
+
103
+        foreach ($filedTypeList as $name => $vo) {
104
+            $arr = $vo['ifsystem'] ? 'data' : 'dataExt';
105
+            if (!isset(${$arr}[$name])) {
106
+                switch ($vo['type']) {
107
+                    // 开关
108
+                    case 'switch':
109
+                        ${$arr}[$name] = 0;
110
+                        break;
111
+                    case 'checkbox':
112
+                        ${$arr}[$name] = '';
113
+                        break;
114
+                }
115
+            } else {
116
+                if (is_array(${$arr}[$name])) {
117
+                    ${$arr}[$name] = implode(',', ${$arr}[$name]);
118
+                }
119
+                switch ($vo['type']) {
120
+                    // 开关
121
+                    case 'switch':
122
+                        ${$arr}[$name] = 1;
123
+                        break;
124
+                    // 日期+时间
125
+                    case 'datetime':
126
+                        //if ($vo['ifeditable']) {
127
+                        ${$arr}[$name] = strtotime(${$arr}[$name]);
128
+                        //}
129
+                        break;
130
+                    // 日期
131
+                    case 'date':
132
+                        ${$arr}[$name] = strtotime(${$arr}[$name]);
133
+                        break;
134
+                    // 编辑器
135
+                    case 'markdown':
136
+                    case 'Ueditor':
137
+                        ${$arr}[$name] = htmlspecialchars(stripslashes(${$arr}[$name]));
138
+                        break;
139
+                }
140
+            }
141
+            //数据必填验证
142
+            if ($vo['ifrequire'] && (!isset(${$arr}[$name]) || ${$arr}[$name] == '')) {
143
+                throw new \Exception("'" . $vo['title'] . "'必须填写~");
144
+            }
145
+            //正则校验
146
+            if (isset(${$arr}[$name]) && ${$arr}[$name] && $vo['pattern'] && !Validate::regex(${$arr}[$name], $vo['pattern'])) {
147
+                throw new \Exception("'" . $vo['title'] . "'" . (!empty($vo['errortips']) ? $vo['errortips'] : '正则校验失败') . "");
148
+            }
149
+            //数据格式验证
150
+            if (!empty(${$arr}[$name]) && in_array($vo['type'], ['number']) && !Validate::isNumber(${$arr}[$name])) {
151
+                throw new \Exception("'" . $vo['title'] . "'格式错误~");
152
+                //安全过滤
153
+            } else {
154
+
155
+            }
156
+        }
157
+        return [$data, $dataExt];
158
+    }
159
+
160
+    /**
161
+     * 数据处理 前端显示
162
+     * @param  $fieldinfo
163
+     * @param  $data
164
+     */
165
+    public static function dealModelShowData($fieldinfo, $data)
166
+    {
167
+        $newdata = [];
168
+        foreach ($data as $key => $value) {
169
+            if (isset($fieldinfo[$key])) {
170
+                switch ($fieldinfo[$key]['type']) {
171
+                    case 'array':
172
+                        $newdata[$key] = (array) json_decode($value, true);
173
+                        break;
174
+                    case 'radio':
175
+                    case 'select':
176
+                        if (!empty($value)) {
177
+                            if (!empty($fieldinfo[$key]['options'])) {
178
+                                $optionArr               = parse_attr($fieldinfo[$key]['options']);
179
+                                $newdata[$key . '_text'] = isset($optionArr[$value]) ? $optionArr[$value] : $value;
180
+                            }
181
+                        }
182
+                        $newdata[$key] = $value;
183
+                        break;
184
+                    case 'selects':
185
+                    case 'checkbox':
186
+                        if (!empty($value)) {
187
+                            if (!empty($fieldinfo[$key]['options'])) {
188
+                                $optionArr = parse_attr($fieldinfo[$key]['options']);
189
+                                $valueArr  = explode(',', $value);
190
+                                foreach ($valueArr as $v) {
191
+                                    if (isset($optionArr[$v])) {
192
+                                        $newdata[$key][$v] = $optionArr[$v];
193
+                                    } elseif ($v) {
194
+                                        $newdata[$key][$v] = $v;
195
+                                    }
196
+                                }
197
+                                //其他表关联
198
+                            } else {
199
+                                $newdata[$key] = [];
200
+                            }
201
+                        }
202
+                        break;
203
+                    case 'files':
204
+                    case 'images':
205
+                        $newdata[$key] = empty($value) ? [] : explode(',', $value);
206
+                        break;
207
+                    /*case 'tags':
208
+                    $newdata[$key] = empty($value) ? [] : explode(',', $value);
209
+                    break;*/
210
+                    case 'markdown':
211
+                        $parser        = new \util\Parser;
212
+                        $newdata[$key] = $parser->makeHtml(htmlspecialchars_decode($value));
213
+                        break;
214
+                    case 'Ueditor':
215
+                        $newdata[$key] = htmlspecialchars_decode($value);
216
+                        break;
217
+                    default:
218
+                        $newdata[$key] = $value;
219
+                        break;
220
+                }
221
+            }
222
+            if (!isset($newdata[$key])) {
223
+                $newdata[$key] = '';
224
+            }
225
+        }
226
+        return $newdata;
227
+    }
228
+
229
+    /**
230
+     * 文本处理
231
+     */
232
+    public static function getAfterText(&$data, &$dataExt)
233
+    {
234
+        //自动提取摘要,如果有设置自动提取,且description为空,且有内容字段才执行
235
+        if (isset($data['get_introduce']) && $data['description'] == '' && (isset($dataExt['content']) || isset($data['content']))) {
236
+            $content             = isset($dataExt['content']) ? $dataExt['content'] : (isset($data['content']) ? $data['content'] : '');
237
+            $data['description'] = mb_substr(str_replace(["\r\n", "\t", '&ldquo;', '&rdquo;', '&nbsp;'], '', strip_tags($content)), 0, 200);
238
+        }
239
+        //自动提取缩略图
240
+        if (isset($data['auto_thumb']) && empty($data['thumb']) && (isset($dataExt['content']) || isset($data['content']))) {
241
+            $thumb         = isset($dataExt['content'])?\util\GetImgSrc::src($dataExt['content']) : (isset($data['content'])?\util\GetImgSrc::src($data['content']) : false);
242
+            $data['thumb'] = $thumb ? $thumb : '';
243
+        }
244
+        //关键词加链接
245
+        $autolinks = get_addon_config('cms')['autolinks'];
246
+        if (!empty($autolinks) && isset($dataExt['content'])) {
247
+            if (strpos($autolinks, '|')) {
248
+                //解析关键词数组
249
+                $kwsets = array_filter(preg_split("/(\r|\n|\r\n)/", $autolinks));
250
+                foreach ($kwsets as $kwset) {
251
+                    $kwarray[] = explode('|', $kwset);
252
+                }
253
+            }
254
+            foreach ($kwarray as $i => $row) {
255
+                $txt  = isset($row[0]) ? trim($row[0]) : '';
256
+                $link = isset($row[1]) ? trim($row[1]) : '';
257
+                $set  = isset($row[2]) ? trim($row[2]) : '';
258
+                if ($txt && $link) {
259
+                    $rel  = '';
260
+                    $open = '_blank';
261
+
262
+                    //处理标记与打开方式
263
+                    if ($set) {
264
+                        if (false !== stripos($set, 'e')) {
265
+                            $rel = ' rel="external nofollow"';
266
+                        } elseif (false !== stripos($set, 'n')) {
267
+                            $rel = ' rel="nofollow"';
268
+                        }
269
+                        $open = false !== stripos($set, 'b') ? '_self' : $open;
270
+                    }
271
+
272
+                    $dataExt['content'] = false !== strpos($dataExt['content'], $txt)
273
+                    //正则排除参数和链接
274
+                     ? preg_replace('/(?!<[^>]*)' . $txt . '(?![^<]*(>|<\/[a|sc]))/s'
275
+                        , '<a href="' . $link . '"' . $rel . 'target="' . $open . '" title="' . $txt . '">' . $txt . '</a>', $dataExt['content']) : $dataExt['content'];
276
+                }
277
+            }
278
+        }
279
+        unset($data['get_introduce']);
280
+        unset($data['auto_thumb']);
281
+    }
282
+}

+ 317
- 0
addons/cms/testdata.sql View File

@@ -0,0 +1,317 @@
1
+CREATE TABLE IF NOT EXISTS `__PREFIX__article` (
2
+  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
3
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
4
+  `title` varchar(255) DEFAULT '' COMMENT '标题',
5
+  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
6
+  `flag` varchar(32) DEFAULT '' COMMENT '属性',
7
+  `keywords` varchar(255) DEFAULT '' COMMENT 'SEO关键词',
8
+  `description` varchar(255) DEFAULT '' COMMENT 'SEO描述',
9
+  `tags` varchar(255) DEFAULT '' COMMENT 'Tags标签',
10
+  `listorder` smallint(5) unsigned NOT NULL DEFAULT '100' COMMENT '排序',
11
+  `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
12
+  `username` varchar(20) DEFAULT '' COMMENT '用户名',
13
+  `sysadd` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否后台添加',
14
+  `hits` mediumint(8) unsigned DEFAULT '0' COMMENT '点击量',
15
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
16
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
17
+  `url` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址',
18
+  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态',
19
+  PRIMARY KEY (`id`),
20
+  KEY `status` (`catid`,`status`)
21
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='文章模型模型表';
22
+
23
+CREATE TABLE IF NOT EXISTS `__PREFIX__article_data` (
24
+  `did` mediumint(8) unsigned NOT NULL DEFAULT '0',
25
+  `content` mediumtext COMMENT '内容',
26
+  PRIMARY KEY (`did`)
27
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='文章模型模型表';
28
+
29
+CREATE TABLE IF NOT EXISTS `__PREFIX__picture` (
30
+  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
31
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
32
+  `title` varchar(255) DEFAULT '' COMMENT '标题',
33
+  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
34
+  `flag` varchar(32) DEFAULT '' COMMENT '属性',
35
+  `keywords` varchar(255) DEFAULT '' COMMENT 'SEO关键词',
36
+  `description` varchar(255) DEFAULT '' COMMENT 'SEO描述',
37
+  `tags` varchar(255) DEFAULT '' COMMENT 'Tags标签',
38
+  `listorder` smallint(5) unsigned NOT NULL DEFAULT '100' COMMENT '排序',
39
+  `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
40
+  `username` varchar(20) DEFAULT '' COMMENT '用户名',
41
+  `sysadd` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否后台添加',
42
+  `hits` mediumint(8) unsigned DEFAULT '0' COMMENT '点击量',
43
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
44
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
45
+  `url` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址',
46
+  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态',
47
+  PRIMARY KEY (`id`),
48
+  KEY `status` (`catid`,`status`)
49
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='图片模型模型表';
50
+
51
+CREATE TABLE IF NOT EXISTS `__PREFIX__picture_data` (
52
+  `did` mediumint(8) unsigned NOT NULL DEFAULT '0',
53
+  `content` mediumtext COMMENT '内容',
54
+  PRIMARY KEY (`did`)
55
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='图片模型模型表';
56
+
57
+CREATE TABLE IF NOT EXISTS `__PREFIX__download` (
58
+  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
59
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
60
+  `title` varchar(255) DEFAULT '' COMMENT '标题',
61
+  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
62
+  `flag` varchar(32) DEFAULT '' COMMENT '属性',
63
+  `keywords` varchar(255) DEFAULT '' COMMENT 'SEO关键词',
64
+  `description` varchar(255) DEFAULT '' COMMENT 'SEO描述',
65
+  `tags` varchar(255) DEFAULT '' COMMENT 'Tags标签',
66
+  `listorder` smallint(5) unsigned NOT NULL DEFAULT '100' COMMENT '排序',
67
+  `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
68
+  `username` varchar(20) DEFAULT '' COMMENT '用户名',
69
+  `sysadd` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否后台添加',
70
+  `hits` mediumint(8) unsigned DEFAULT '0' COMMENT '点击量',
71
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
72
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
73
+  `url` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址',
74
+  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态',
75
+  PRIMARY KEY (`id`),
76
+  KEY `status` (`catid`,`status`)
77
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='下载模型模型表';
78
+
79
+CREATE TABLE IF NOT EXISTS `__PREFIX__download_data` (
80
+  `did` mediumint(8) unsigned NOT NULL DEFAULT '0',
81
+  `content` mediumtext COMMENT '内容',
82
+  PRIMARY KEY (`did`)
83
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='下载模型模型表';
84
+
85
+CREATE TABLE IF NOT EXISTS `__PREFIX__product` (
86
+  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文档ID',
87
+  `catid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '栏目ID',
88
+  `title` varchar(255) DEFAULT '' COMMENT '标题',
89
+  `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '缩略图',
90
+  `flag` varchar(32) DEFAULT '' COMMENT '属性',
91
+  `keywords` varchar(255) DEFAULT '' COMMENT 'SEO关键词',
92
+  `description` varchar(255) DEFAULT '' COMMENT 'SEO描述',
93
+  `tags` varchar(255) DEFAULT '' COMMENT 'Tags标签',
94
+  `listorder` smallint(5) unsigned NOT NULL DEFAULT '100' COMMENT '排序',
95
+  `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
96
+  `username` varchar(20) DEFAULT '' COMMENT '用户名',
97
+  `sysadd` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否后台添加',
98
+  `hits` mediumint(8) unsigned DEFAULT '0' COMMENT '点击量',
99
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
100
+  `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间',
101
+  `url` varchar(100) NOT NULL DEFAULT '' COMMENT '链接地址',
102
+  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态',
103
+  `type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '类型',
104
+  `trade` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '行业',
105
+  `price` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '价格',
106
+  PRIMARY KEY (`id`),
107
+  KEY `status` (`catid`,`status`)
108
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='产品模型模型表';
109
+
110
+CREATE TABLE IF NOT EXISTS `__PREFIX__product_data` (
111
+  `did` mediumint(8) unsigned NOT NULL DEFAULT '0',
112
+  `content` mediumtext COMMENT '内容',
113
+  PRIMARY KEY (`did`)
114
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='产品模型模型表';
115
+
116
+INSERT INTO `__PREFIX__category` (`id`, `catname`, `catdir`, `type`, `modelid`, `parentid`, `arrparentid`, `arrchildid`, `child`, `image`, `icon`, `description`, `url`, `items`, `setting`, `listorder`, `status`) VALUES
117
+(1, '关于我们', 'about', 3, 0, 0, '0', '1,2,3,4', 1, '', '', '', 'cms/index/lists?catid=2', 0, 'a:4:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:13:\"page_template\";s:9:\"page.html\";}', 3, 1),
118
+(2, '公司简介', 'Introduction', 1, 0, 1, '0,1', '2', 0, '', '', '', '', 0, 'a:4:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:13:\"page_template\";s:9:\"page.html\";}', 1, 1),
119
+(3, '企业文化', 'culture', 1, 0, 1, '0,1', '3', 0, '', '', '', '', 0, 'a:4:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:13:\"page_template\";s:9:\"page.html\";}', 2, 1),
120
+(4, '公司荣誉', 'honor', 2, 2, 1, '0,1', '4', 0, '', '', '', '', 5, 'a:7:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:21:\"category_picture.html\";s:13:\"list_template\";s:17:\"list_picture.html\";s:13:\"show_template\";s:17:\"show_picture.html\";s:13:\"page_template\";s:9:\"page.html\";}', 3, 1),
121
+(5, '案例展示', 'case', 2, 3, 0, '0', '5', 0, '', '', '', '', 9, 'a:7:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:18:\"category_case.html\";s:13:\"list_template\";s:14:\"list_case.html\";s:13:\"show_template\";s:17:\"show_picture.html\";s:13:\"page_template\";s:9:\"page.html\";}', 2, 1),
122
+(6, '新闻中心', 'news', 2, 1, 0, '0', '6,9,10,14', 1, '', '', '', '', 0, 'a:7:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";s:13:\"page_template\";s:9:\"page.html\";}', 1, 1),
123
+(8, '联系我们', 'contact', 1, 0, 0, '0', '8,18,19', 1, '', '', '', 'cms/index/lists?catid=18', 0, 'a:4:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:13:\"page_template\";s:9:\"page.html\";}', 0, 1),
124
+(9, '网络营销', 'marketing', 2, 1, 6, '0,6', '9', 0, '', '', '', '', 2, 'a:6:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";}', 1, 1),
125
+(10, '网站知识', 'knowledge', 2, 1, 6, '0,6', '10', 0, '', '', '', '', 2, 'a:7:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";s:13:\"page_template\";s:9:\"page.html\";}', 2, 1),
126
+(14, '备案知识', 'record', 2, 1, 6, '0,6', '14', 0, '', '', '', '', 2, 'a:7:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";s:13:\"page_template\";s:9:\"page.html\";}', 3, 1),
127
+(18, '联系方式', 'fangshi', 1, 0, 8, '0,8', '18', 0, '', '', '', '', 0, 'a:4:{s:10:\"meta_title\";s:0:\"\";s:13:\"meta_keywords\";s:0:\"\";s:16:\"meta_description\";s:0:\"\";s:13:\"page_template\";s:9:\"page.html\";}', 0, 1);
128
+
129
+INSERT INTO `__PREFIX__model` (`id`, `module`, `name`, `tablename`, `description`, `setting`, `type`, `create_time`, `update_time`, `listorders`, `status`) VALUES
130
+(1, 'cms', '文章模型', 'article', '文章模型', 'a:3:{s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";}', 2, 1546574975, 1566893866, 0, 1),
131
+(2, 'cms', '图片模型', 'picture', '图片模型', 'a:3:{s:17:\"category_template\";s:21:\"category_picture.html\";s:13:\"list_template\";s:17:\"list_picture.html\";s:13:\"show_template\";s:17:\"show_picture.html\";}', 2, 1548754193, 1566896531, 0, 1),
132
+(3, 'cms', '产品模型', 'product', '产品模型', 'a:3:{s:17:\"category_template\";s:21:\"category_picture.html\";s:13:\"list_template\";s:17:\"list_picture.html\";s:13:\"show_template\";s:17:\"show_picture.html\";}', 2, 1549165800, 1566894329, 0, 1),
133
+(4, 'cms', '下载模型', 'download', '下载模型', 'a:3:{s:17:\"category_template\";s:13:\"category.html\";s:13:\"list_template\";s:9:\"list.html\";s:13:\"show_template\";s:9:\"show.html\";}', 2, 1549624988, 1566894292, 0, 1);
134
+
135
+INSERT INTO `__PREFIX__model_field` (`id`, `modelid`, `name`, `title`, `remark`, `pattern`, `errortips`, `type`, `extend`, `setting`, `ifsystem`, `iscore`, `iffixed`, `ifrequire`, `ifsearch`, `isadd`, `create_time`, `update_time`, `listorder`, `status`) VALUES
136
+(1, 1, 'id', '文档id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1546574975, 1546574975, 100, 1),
137
+(2, 1, 'catid', '栏目id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1546574975, 1546574975, 100, 1),
138
+(3, 1, 'title', '标题', '', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 1, 1, 1, 1546574975, 1546574975, 300, 1),
139
+(4, 1, 'flag', '属性', '', '', '', 'checkbox', '', 'a:3:{s:6:\"define\";s:31:\"varchar(32) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:76:\"1:置顶[1]\r\n2:头条[2]\r\n3:特荐[3]\r\n4:推荐[4]\r\n5:热点[5]\r\n6:幻灯[6]\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1551846870, 1551846870, 295, 1),
140
+(5, 1, 'keywords', 'SEO关键词', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1546574975, 1546574975, 290, 1),
141
+(6, 1, 'description', 'SEO摘要', '如不填写,则自动截取附表中编辑器的200字符', '', '', 'textarea', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1546574975, 1546574975, 285, 1),
142
+(7, 1, 'tags', 'Tags标签', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 0, 1546574975, 1546574975, 280, 1),
143
+(8, 1, 'uid', '用户id', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1546574975, 1546574975, 100, 1),
144
+(9, 1, 'username', '用户名', '', '', '', 'text', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
145
+(10, 1, 'sysadd', '是否后台添加', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
146
+(11, 1, 'listorder', '排序', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(3) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:3:\"100\";}', 1, 0, 1, 0, 0, 0, 1546574975, 1546574975, 260, 1),
147
+(12, 1, 'status', '状态', '', '', '', 'radio', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:21:\"0:待审核\r\n1:通过\";s:5:\"value\";s:1:\"1\";}', 1, 0, 1, 0, 0, 0, 1546574975, 1546574975, 240, 1),
148
+(13, 1, 'create_time', '创建时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1546574975, 1546574975, 250, 1),
149
+(14, 1, 'update_time', '更新时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 1, 1, 0, 0, 0, 1546574975, 1546574975, 245, 1),
150
+(15, 1, 'hits', '点击量', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:42:\"mediumint(8) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:1:\"0\";}', 1, 0, 1, 0, 0, 0, 1546574975, 1546574975, 265, 1),
151
+(16, 1, 'did', '附表文档id', '', '', '', 'hidden', '', '', 0, 1, 1, 0, 0, 0, 1546574975, 1546574975, 100, 1),
152
+(17, 1, 'content', '内容', '', '', '', 'Ueditor', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 0, 0, 0, 0, 0, 1, 1546574975, 1546574975, 270, 1),
153
+(18, 2, 'id', '文档id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1548754192, 1548754192, 100, 1),
154
+(19, 2, 'catid', '栏目id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1548754192, 1548754192, 100, 1),
155
+(20, 2, 'title', '标题', '', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 1, 1, 1, 1548754192, 1548754192, 300, 1),
156
+(21, 2, 'flag', '属性', '', '', '', 'checkbox', '', 'a:3:{s:6:\"define\";s:31:\"varchar(32) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:76:\"1:置顶[1]\r\n2:头条[2]\r\n3:特荐[3]\r\n4:推荐[4]\r\n5:热点[5]\r\n6:幻灯[6]\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1551846870, 1551846870, 295, 1),
157
+(22, 2, 'keywords', 'SEO关键词', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1548754192, 1548754192, 290, 1),
158
+(23, 2, 'description', 'SEO摘要', '如不填写,则自动截取附表中编辑器的200字符', '', '', 'textarea', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1548754192, 1548754192, 285, 1),
159
+(24, 2, 'tags', 'Tags标签', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 0, 1546574975, 1546574975, 280, 1),
160
+(25, 2, 'uid', '用户id', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1548754192, 1548754192, 100, 1),
161
+(26, 2, 'username', '用户名', '', '', '', 'text', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
162
+(27, 2, 'sysadd', '是否后台添加', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
163
+(28, 2, 'listorder', '排序', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(3) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:3:\"100\";}', 1, 0, 1, 0, 0, 0, 1548754192, 1548754192, 260, 1),
164
+(29, 2, 'status', '状态', '', '', '', 'radio', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:21:\"0:待审核\r\n1:通过\";s:5:\"value\";s:1:\"1\";}', 1, 0, 1, 0, 0, 0, 1548754192, 1548754192, 240, 1),
165
+(30, 2, 'create_time', '创建时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1548754192, 1548754192, 250, 1),
166
+(31, 2, 'update_time', '更新时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 1, 1, 0, 0, 0, 1548754192, 1548754192, 245, 1),
167
+(32, 2, 'hits', '点击量', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:42:\"mediumint(8) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:1:\"0\";}', 1, 0, 1, 0, 0, 0, 1548754192, 1548754192, 265, 1),
168
+(33, 2, 'did', '附表文档id', '', '', '', 'hidden', '', '', 0, 1, 1, 0, 0, 0, 1548754192, 1548754192, 100, 1),
169
+(34, 2, 'content', '内容', '', '', '', 'Ueditor', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 0, 0, 0, 0, 0, 1, 1548754192, 1548754192, 270, 1),
170
+(35, 3, 'id', '文档id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1549165800, 1549165800, 100, 1),
171
+(36, 3, 'catid', '栏目id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1549165800, 1549165800, 100, 1),
172
+(37, 3, 'title', '标题', '', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 1, 1, 1, 1549165800, 1549165800, 300, 1),
173
+(38, 3, 'flag', '属性', '', '', '', 'checkbox', '', 'a:3:{s:6:\"define\";s:31:\"varchar(32) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:76:\"1:置顶[1]\r\n2:头条[2]\r\n3:特荐[3]\r\n4:推荐[4]\r\n5:热点[5]\r\n6:幻灯[6]\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1551846870, 1551846870, 295, 1),
174
+(39, 3, 'keywords', 'SEO关键词', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1549165800, 1549165800, 290, 1),
175
+(40, 3, 'description', 'SEO摘要', '如不填写,则自动截取附表中编辑器的200字符', '', '', 'textarea', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1549165800, 1549165800, 285, 1),
176
+(41, 3, 'tags', 'Tags标签', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 0, 1546574975, 1546574975, 280, 1),
177
+(42, 3, 'uid', '用户id', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1549165800, 1549165800, 100, 1),
178
+(43, 3, 'username', '用户名', '', '', '', 'text', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
179
+(44, 3, 'sysadd', '是否后台添加', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
180
+(45, 3, 'listorder', '排序', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(3) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:3:\"100\";}', 1, 0, 1, 0, 0, 0, 1549165800, 1549165800, 260, 1),
181
+(46, 3, 'status', '状态', '', '', '', 'radio', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:21:\"0:待审核\r\n1:通过\";s:5:\"value\";s:1:\"1\";}', 1, 0, 1, 0, 0, 0, 1549165800, 1549165800, 240, 1),
182
+(47, 3, 'create_time', '创建时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1549165800, 1549165800, 250, 1),
183
+(48, 3, 'update_time', '更新时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 1, 1, 0, 0, 0, 1549165800, 1549165800, 245, 1),
184
+(49, 3, 'hits', '点击量', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:42:\"mediumint(8) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:1:\"0\";}', 1, 0, 1, 0, 0, 0, 1549165800, 1549165800, 265, 1),
185
+(50, 3, 'did', '附表文档id', '', '', '', 'hidden', '', '', 0, 1, 1, 0, 0, 0, 1549165800, 1549165800, 100, 1),
186
+(51, 3, 'content', '内容', '', '', '', 'Ueditor', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 0, 0, 0, 0, 0, 1, 1549165800, 1549165800, 270, 1),
187
+(52, 3, 'type', '类型', '', '', '', 'radio', '', 'a:4:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:91:\"1:营销网站\r\n2:电商网站\r\n3:响应式网站\r\n4:手机网站\r\n5:外贸网站\r\n6:其他\";s:10:\"filtertype\";s:1:\"1\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 1, 0, 1, 1552368369, 1552372294, 0, 1),
188
+(53, 3, 'trade', '行业', '', '', '', 'radio', '', 'a:4:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:78:\"1:机械设备\r\n2:车辆物流\r\n3:地产建筑装修\r\n4:教育培训\r\n5:其他\";s:10:\"filtertype\";s:1:\"1\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 1, 0, 1, 1552372387, 1552372387, 0, 1),
189
+(54, 3, 'price', '价格', '', '', '', 'radio', '', 'a:4:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:42:\"1:≤2500\r\n2:≤5000\r\n3:≤8000\r\n4:≥1万\";s:10:\"filtertype\";s:1:\"1\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 1, 0, 1, 1552372433, 1552372433, 0, 1),
190
+(55, 4, 'id', '文档id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1549624988, 1549624988, 100, 1),
191
+(56, 4, 'catid', '栏目id', '', '', '', 'hidden', '', '', 1, 0, 1, 0, 0, 1, 1549624988, 1549624988, 100, 1),
192
+(57, 4, 'title', '标题', '', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 1, 1, 1, 1549624988, 1549624988, 300, 1),
193
+(58, 4, 'flag', '属性', '', '', '', 'checkbox', '', 'a:3:{s:6:\"define\";s:31:\"varchar(32) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:76:\"1:置顶[1]\r\n2:头条[2]\r\n3:特荐[3]\r\n4:推荐[4]\r\n5:热点[5]\r\n6:幻灯[6]\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1551846870, 1551846870, 295, 1),
194
+(59, 4, 'keywords', 'SEO关键词', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1549624988, 1549624988, 290, 1),
195
+(60, 4, 'description', 'SEO摘要', '如不填写,则自动截取附表中编辑器的200字符', '', '', 'textarea', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1549624988, 1549624988, 285, 1),
196
+(61, 4, 'tags', 'Tags标签', '关键词用回车确认', '', '', 'tags', '', 'a:3:{s:6:\"define\";s:32:\"varchar(255) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 0, 1546574975, 1546574975, 280, 1),
197
+(62, 4, 'uid', '用户id', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1549624988, 1549624988, 100, 1),
198
+(63, 4, 'username', '用户名', '', '', '', 'text', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
199
+(64, 4, 'sysadd', '是否后台添加', '', '', '', 'number', '', NULL, 1, 1, 1, 0, 0, 0, 1558767044, 1558767044, 100, 1),
200
+(65, 4, 'listorder', '排序', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(3) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:3:\"100\";}', 1, 0, 1, 0, 0, 0, 1549624988, 1549624988, 260, 1),
201
+(66, 4, 'status', '状态', '', '', '', 'radio', '', 'a:3:{s:6:\"define\";s:40:\"tinyint(2) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:21:\"0:待审核\r\n1:通过\";s:5:\"value\";s:1:\"1\";}', 1, 0, 1, 0, 0, 0, 1549624988, 1549624988, 240, 1),
202
+(67, 4, 'create_time', '创建时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1549624988, 1549624988, 250, 1),
203
+(68, 4, 'update_time', '更新时间', '', '', '', 'datetime', '', 'a:3:{s:6:\"define\";s:29:\"int(10) UNSIGNED DEFAULT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 1, 1, 0, 0, 0, 1549624988, 1549624988, 245, 1),
204
+(69, 4, 'hits', '点击量', '', '', '', 'number', '', 'a:3:{s:6:\"define\";s:42:\"mediumint(8) UNSIGNED NOT NULL DEFAULT \'0\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:1:\"0\";}', 1, 0, 1, 0, 0, 0, 1549624988, 1549624988, 265, 1),
205
+(70, 4, 'did', '附表文档id', '', '', '', 'hidden', '', '', 0, 1, 1, 0, 0, 0, 1549624988, 1549624988, 100, 1),
206
+(71, 4, 'content', '内容', '', '', '', 'Ueditor', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 0, 0, 0, 0, 0, 1, 1549624988, 1549624988, 270, 1),
207
+(72, 1, 'thumb', '缩略图', '', '', '', 'image', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1565948216, 1565948216, 275, 1),
208
+(73, 2, 'thumb', '缩略图', '', '', '', 'image', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1565948216, 1565948216, 275, 1),
209
+(74, 3, 'thumb', '缩略图', '', '', '', 'image', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1565948216, 1565948216, 275, 1),
210
+(75, 4, 'thumb', '缩略图', '', '', '', 'image', '', 'a:3:{s:6:\"define\";s:13:\"text NOT NULL\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 0, 0, 0, 1, 1565948216, 1565948216, 275, 1),
211
+(76, 1, 'url', '链接地址', '有值时生效,内部链接格式:模块/控制器/操作?参数=参数值&...,外部链接则必须http://开头', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(100) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1608023551, 1608023551, 255, 1),
212
+(77, 2, 'url', '链接地址', '有值时生效,内部链接格式:模块/控制器/操作?参数=参数值&...,外部链接则必须http://开头', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(100) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1608023551, 1608023551, 255, 1),
213
+(78, 3, 'url', '链接地址', '有值时生效,内部链接格式:模块/控制器/操作?参数=参数值&...,外部链接则必须http://开头', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(100) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1608023551, 1608023551, 255, 1),
214
+(79, 4, 'url', '链接地址', '有值时生效,内部链接格式:模块/控制器/操作?参数=参数值&...,外部链接则必须http://开头', '', '', 'text', '', 'a:3:{s:6:\"define\";s:32:\"varchar(100) NOT NULL DEFAULT \'\'\";s:7:\"options\";s:0:\"\";s:5:\"value\";s:0:\"\";}', 1, 0, 1, 0, 0, 0, 1608023551, 1608023551, 255, 1);
215
+
216
+INSERT INTO `__PREFIX__article` (`id`, `catid`, `title`, `thumb`, `flag`, `keywords`, `description`, `tags`, `listorder`, `uid`, `username`, `sysadd`, `hits`, `create_time`, `update_time`, `url`, `status`) VALUES
217
+(1, 9, '让客户留住更长时间访问你的网站', '', '', '', '什么能让您的客户“一见钟情”?除了网站的界面,没有其他因素。网站的界面是非常重要的因素之一。因为这是客户访问网站时的第一印象。那时,您需要为客户提供一个吸引人且引人注目的界面。要做到这一点非常容易,你只需要有一个合理布局的界面,整洁不要分散读者的注意力。在与网站互动时,客户可以轻松搜索他们需要学习的信息。此外,您还可以使用一些额外的注释来使界面更加美观:首先,效果的最大效果用于避免分散用户的注意力。这些效果甚至会使网站更重,并且加载速度更慢。其次,您可以创建更多可用空间并消除不重要的信息,从而使关键消息更', '', 100, 1, 'admin', 1, 0, 1550188136, 1550476672, '', 1),
218
+(2, 9, '移动网站需要吸引哪些观众并将其转化为客户', '', '', '', '在移动设备上设计网站以吸引观众并使他们成为他们的客户并不容易。移动网站是否只有两个友好元素,下载速度是否足够快?使用移动设备访问网站的人是那些时间很少的人,所以他们总是希望事情快速而正确。', '', 100, 1, 'admin', 1, 0, 1550202861, 1550450153, '', 1),
219
+(3, 14, '空壳网站是什么?如何避免成为空壳网站?空壳网站怎么处理?', '', '', '', '一、备案数据,包括:主体信息、网站信息、接入信息。\r\n(1)主体信息是指,网站主办者(网站开办者)的注册信息。\r\n(2)网站信息是指,网站主办者开办的(一个或多个)网站的注册信息。\r\n(3)接入信息是指,网站主办者(每个)网站的数据存放的虚拟空间的接入信息。', '', 100, 1, 'admin', 1, 0, 1550448808, 1550476816, '', 1),
220
+(4, 14, '单位或网站涉及金融类关键词,办理网站备案注意事项', '', '', '', '1.根据《国务院办公厅关于印发互联网金融风险专项整治工作实施方案的通知(国办发〔2016〕21号)》要求,公司注册名称或经营范围中使用“交易所”、“交易中心”、“金融”、“资产管理”、“理财”、“基金”、“基金管理”、“投资管理(包括投资)”、“财富管理”、“股权投资基金”、“网贷”、“网络借贷”、“P2P”、“股权众筹”、“互联网保险”、“支付”、“信托”等字样的企业,在做网站备案业务办理时,需提供金融管理部门的专项审批文件。', '', 100, 1, 'admin', 1, 0, 1550449235, 1550449733, '', 1),
221
+(5, 10, '个人建设网站有哪些步骤?', '', '', '', '虽然互联网上付费提供网站建设和网站制作服务的公司或者个人有很多,都是为企业或者个人提供网站建设和网页设计服务的,但是对于那些刚刚走出校门或者刚刚参加工作的朋友来说,如果想通过互联网创业,想要做一个自己的网站,但是又没有明确的经营理念,只是想要尝试一下互联网创业,这时候大部分人都会选择自己建网站,一方面是为了能够节省较高的网站建设费用,另一方面也可以简单的学习一些网站建设或网站制作的一些基本知识,那么自己建网站到底应该如何入手呢今天小编就跟大家写一篇自己建网站的全攻略,希望能够帮助那些想要自己建网站的朋友有', '', 100, 1, 'admin', 1, 0, 1550449817, 1550476910, '', 1),
222
+(6, 10, '企业建设手机网站注意的事项?', '', '', '', ' 虽然很多企业都专门弄起了APP软件,不过从综合层面来说,还是网站更加靠谱一些,因为网站比制作APP成本要低廉很多,而且受传统思维习惯的影响,大部分的会主动寻找相关内容的人来说,他们还是更加习惯利用搜索引擎去进行寻找。并且这一群人在社会上面也拥有一定的社会经验以及地位,像是销售人员、采购人员等等,如果他们不再办公室,正好在上班途中或者是出差途中的话,肯定是需要使用手机来搜索某些信息的,所以从实用性角度来看的话,反倒是企业网站比APP更好一些,那么,企业建设手机网站的时候要注意什么?', '', 100, 1, 'admin', 1, 0, 1550450424, 1550476700, '', 1);
223
+
224
+INSERT INTO `__PREFIX__article_data` (`did`, `content`) VALUES
225
+(1, '&lt;p&gt;&lt;strong&gt;通过网站让客户“一见钟情”&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;什么能让您的客户“一见钟情”?除了网站的界面,没有其他因素。网站的界面是非常重要的因素之一。因为这是客户访问网站时的第一印象。那时,您需要为客户提供一个吸引人且引人注目的界面。要做到这一点非常容易,你只需要有一个合理布局的界面,整洁不要分散读者的注意力。在与网站互动时,客户可以轻松搜索他们需要学习的信息。此外,您还可以使用一些额外的注释来使界面更加美观:首先,效果的最大效果用于避免分散用户的注意力。这些效果甚至会使网站更重,并且加载速度更慢。其次,您可以创建更多可用空间并消除不重要的信息,从而使关键消息更容易,更快地到达客户。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;内容不仅要有回报,还应该精美呈现&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对客户有用的内容是让客户保持更长时间的首要因素之一。但是,不仅昂贵的信息足够,内容的呈现和格式是您的网站有更长的时间留在客户的技巧。您可以设计一个白色背景的网站,以便所有信息变得更加突出。绝对不要使用色彩鲜艳的花朵和图案的深色背景,因为它可能使读者难以获取信息。此外,字体用法和段落间距同样重要。选择的字体不应该太挑剔,时尚,但应该是简单,易于看到的字体和显示专业性。附加,线条之间应该是合理的距离,内容布局的段落更加开放。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;优化网站以与所有设备兼容&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通常情况下,企业只能优化显示在计算机或笔记本电脑上,但往往会忽略各种其他重要设备,如智能手机或平板电脑等。但是,用户数量的情况随着移动设备的访问越来越多,新网站可确保与设备(包括移动设备)的兼容性。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;适当地浏览网站中的信息&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果您通过主页给客户留下了深刻印象,客户一直渴望了解您的业务。为了使此过程更好地运行,您需要确保子页面的所有链接与前面提到的链接标题的内容一致。\r\n您还可以为关键位置的内容创建重音,以提高点击率。而且您也不要忘记确保您没有基本错误,例如链接到损坏的页面,丢失图像甚至丢失链接。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;定期更新网站内容&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;内容不需要质量,但在网站上也需要有数量。这里的金额并不意味着猖獗的金额,而是每天都是偶数。如果客户返回您的网站但仍然是旧内容,则您可能会失去客户,因为客户不想返回网站更新旧内容。\r\n有了这些提示,您需要立即更新缺少的元素以完成网站并留住客户。做好这些事情后,您会很快注意到您网站的跳出率大&lt;/p&gt;'),
226
+(2, '&lt;p&gt;在移动设备上设计网站以吸引观众并使他们成为他们的客户并不容易。移动网站是否只有两个友好元素,下载速度是否足够快?&lt;br/&gt;&lt;/p&gt;&lt;p&gt;使用移动设备访问网站的人是那些时间很少的人,所以他们总是希望事情快速而正确。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1:并非计算机上显示的所有内容都需要显示在移动设备上&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很容易看出微小的移动屏幕不能像计算机那样宽,因此需要选择出现在移动屏幕上的网站内容。重要内容,您需要将它们推上去,以便它们可以显示在移动屏幕上&lt;/p&gt;&lt;p&gt;还需要选择移动屏幕上显示的网站内容&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2:网站下载速度&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;专业网站设计师应该始终关注的一件事是下载网站的速度。根据一项研究,谷歌正在研究,53%的用户将离开一个网站,如果下载需要超过3秒。提高网站的下载速度有时只是为了删除图像,减少图像的大小是网站可以更快下载。但是,有时原因比我们想象的更复杂,例如,原因来自网站代码,或者可能是因为您的网站开发的内容远远超过原始网站,而且当前主机不再响应了。&lt;/p&gt;&lt;p&gt;所以你需要找出你的网站下载速度慢的原因以及在哪里立即修复它。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3:添加通话按钮&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于移动用户,尤其是移动用户访问网站,他们说话的时间非常重要。因此,在查看产品信息之后,他们会立即打电话询问产品。但你确定他们会耐心等待撤回并找到你的电话号码吗?绝对不是。现在,移动屏幕上始终可用的简单呼叫按钮是可以立即按下客户想要呼叫的最全面的解决方案。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4:集成返回顶部按钮&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于网站,菜单始终是一个重要的导航栏,可帮助用户导航到网站内的子页面。对于某些网站,当用户向下滚动并阅读下面的内容时,此菜单栏将始终显示在屏幕上。但是,其他一些网站没有。因此,当用户在网站底部附近阅读时,想要查看菜单,他们必须进行大量冲浪,现在,返回顶部按钮将非常有效并让用户感到舒适。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5:网站上的菜单&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;与网站显示在计算机上的不同,手机上显示的网站菜单将减少到一行。当您想要查看时,用户将单击以显示子菜单。菜单图标现在是3个图块,但不是每个人都知道图标是菜单,因此如果您想让它更容易理解,您可以立即编写菜单字母。&lt;/p&gt;'),
227
+(3, '&lt;p&gt;一、备案数据,包括:主体信息、网站信息、接入信息。&lt;/p&gt;&lt;p&gt;(1)主体信息是指,网站主办者(网站开办者)的注册信息。&lt;/p&gt;&lt;p&gt;(2)网站信息是指,网站主办者开办的(一个或多个)网站的注册信息。&lt;/p&gt;&lt;p&gt;(3)接入信息是指,网站主办者(每个)网站的数据存放的虚拟空间的接入信息。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;二、空壳类备案数据,包括:空壳主体和空壳网站。&lt;/p&gt;&lt;p&gt;(1)空壳主体是指,在工业和信息化部备案系统中,网站主办者的历史备案信息只存在主体信息,没有网站信息和接入信息。&lt;/p&gt;&lt;p&gt;(2)空壳网站是指,在工业和信息化部备案系统中,网站主办者的历史备案信息中含有主体信息和网站信息,但(一个或多个网站)没有接入信息(即网站有备案号,但由于网站实际使用空间IP地址变更,之前空间接入商已将网站的备案信息取消接入,同时网站主办者并没有在新的空间接入商办理备案信息转接入)。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 通俗来讲,空壳网站是指,用户域名绑定IP发生变更(主要是更换了不同空间接入商IP),但备案信息没有及时变更,因此就变成了空壳网站。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;三、空壳类备案数据处理方式。&lt;/p&gt;&lt;p&gt;(1)若网站主办者存在空壳主体信息,则唯一解决方式:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 需网站主办者携带相关证件到网站实际的接入商重新办理备案。已被注销(收回)的备案号及备案信息无法恢复。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;四、如何避免成为空壳类数据。&lt;/p&gt;&lt;p&gt;(1)不可随意变更域名绑定IP(若需变更请及时联系网站实际使用的空间接入商);&lt;/p&gt;&lt;p&gt;以此避免因未及时变更网站备案接入信息,而成为空壳类备案数据,从而被当地省通信管理局注销(收回)备案号。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;五、办理网站备案真实性核验,请网站负责人携带以下材料:&lt;/p&gt;&lt;p&gt;(1)本人身份证原件&lt;/p&gt;&lt;p&gt;(2)单位有效证件(含年检页)原件&lt;/p&gt;&lt;p&gt;(3)企业法人身份证原件&lt;/p&gt;&lt;p&gt;(4)单位公章&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;'),
228
+(4, '&lt;ol class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: decimal;&quot;&gt;&lt;li&gt;&lt;p&gt;根据《国务院办公厅关于印发互联网金融风险专项整治工作实施方案的通知(国办发〔2016〕21号)》要求,公司注册名称或经营范围中使用“交易所”、“交易中心”、“金融”、“资产管理”、“理财”、“基金”、“基金管理”、“投资管理(包括投资)”、“财富管理”、“股权投资基金”、“网贷”、“网络借贷”、“P2P”、“股权众筹”、“互联网保险”、“支付”、“信托”等字样的企业,在做网站备案业务办理时,需提供金融管理部门的专项审批文件。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;2.无相关金融许可的不允许接入。若网站内容确实和金融活动无关的,需要用户更改公司注册名称或经营范围,否则不予备案。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;3.对于上述存量网站,备案中心将会不定期进行核查,一旦发现违规从事金融活动,将直接予以注销备案号处置。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;4.(仅供参考)涉及金融类业务相关许可证办理部门:&lt;/p&gt;&lt;p&gt;&amp;nbsp; ① p2p网站需要金融办和银监会两家一起发的许可证;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ② 股票、公募基金是证监会发的证;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ③ 私募基金是证券协会的备案(股权投资指的就是私募基金);&lt;/p&gt;&lt;p&gt;&amp;nbsp; ④ 小额贷款是银监会发证;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ⑤ 第三方支付是人民银行发证;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ⑥ 保险是保监会发证;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ⑦ 金融机构发证比如银行什么的都是银监会;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ⑧ 证券公司发证都是证监会;&lt;/p&gt;&lt;p&gt;&amp;nbsp; ⑨ 信托公司是银监会;&lt;/p&gt;'),
229
+(5, '&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;虽然互联网上付费提供网站建设和网站制作服务的公司或者个人有很多,都是为企业或者个人提供网站建设和网页设计服务的,但是对于那些刚刚走出校门或者刚刚参加工作的朋友来说,如果想通过互联网创业,想要做一个自己的网站,但是又没有明确的经营理念,只是想要尝试一下互联网创业,这时候大部分人都会选择自己建网站,一方面是为了能够节省较高的网站建设费用,另一方面也可以简单的学习一些网站建设或网站制作的一些基本知识,那么自己建网站到底应该如何入手呢今天小编就跟大家写一篇自己建网站的全攻略,希望能够帮助那些想要自己建网站的朋友有一个系统的认识和了解。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、了解基础的脚本语言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  无论你是打算用网络上分享出来的免费源代码做网站还是用自助建站系统来建网站,首先应该学习和了解的就是网站前台脚本语言,网站前台脚本语言主要是html/js/css这三种,其中html是客户端网页源代码的主要语言,js脚本语言用来实现各种网页特效,css脚本语言用来实现网站的各种布局及网页色调的调整。&lt;/p&gt;&lt;p&gt;  相对于php、java等编程语言来说,脚本语言更加容易记忆和学习,所以一般想要接触网站建设的朋友都应该首先学习和认识上边说道的三种脚本语言。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、免费的源码程序&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  对于刚学网站建设的朋友来说,自己建网站肯定不可能上来就自己写一套强大的网站CMS系统,这几乎是不可能的,而且也是不现实的,毕竟一套功能强大的网站管理系统往往都是很多人开发测试很久才能完成的,依靠一个人的力量快速的完全一套建站系统显然难度很大,所以这就需要借助网络上已经分享出来的免费网站源码程序来快速完成自己建网站的目的。&lt;/p&gt;&lt;p&gt;  自建网站虽然除了使用免费的源码程序还可以通过选择一些免费的自助建站平台来完成,但是小编这里推荐大家使用免费的源码程序来做网站,这样一方面是保证网站最终的控制权在自己手里,另一方面也有助于更好的提升自己的网站建设的认识和熟悉,如果你使用自助建站平台,永远都不可能明白网站开发的基本框架设计,但是你通过研究别人分享出来的免费源码就可以很好的掌握整个程序的框架结构和页面设计方面的一些知识,能够更好的提升自己的专业技能。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3、服务器及域名&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  通过学习第一步骤的那些前台脚本语言,然后按照第二步骤说的去下载和研究别人的源码程序,相信很快你就可以自己建网站了,但是建立好的网站如果只是在本地运行,那只有你自己可以访问和看到,如何才能让网络上的所有人都看到自己做的网站呢,这就涉及到了网站的发布,网站发布就需要使用服务器和域名,这时候就需要我们去接触服务器和域名。&lt;/p&gt;&lt;p&gt;  虽然说大部分的新手自己建网站都不希望花费太高的成本,但是服务器和域名的成本是每一个做网站的人都要承担的,而且一个稳定的服务器直接影响到你网站将来的打开速度、网站性能及搜索引擎收录情况,所以建议新手们在购买服务器的时候还是要选择性价比比较高的服务器。&lt;/p&gt;&lt;p&gt;  哦,最后还得补充一下,要想自己建网站,除了上边说道的这些都必须要学习和了解之外,还有两个重要的软件需要下载安装和学习怎么使用,一个是Dreamweaver(简称DW)另一个就是Photoshop(简称PS)这两款软件即使你不打算自己开发设计,你就是研究和修改别人的源码程序也一样需要用到,比如你在步骤二中需要修改别人的网页代码,肯定需要用DW打开网页文件来编辑,需要修改别人程序的中图标或者图片就肯定需要使用PS来作图,所以这两款软件也是自己建网站过程中必须要学习使用的。&lt;/p&gt;'),
230
+(6, '&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;虽然很多企业都专门弄起了APP软件,不过从综合层面来说,还是网站更加靠谱一些,因为网站比制作APP成本要低廉很多,而且受传统思维习惯的影响,大部分的会主动寻找相关内容的人来说,他们还是更加习惯利用搜索引擎去进行寻找。并且这一群人在社会上面也拥有一定的社会经验以及地位,像是销售人员、采购人员等等,如果他们不再办公室,正好在上班途中或者是出差途中的话,肯定是需要使用手机来搜索某些信息的,所以从实用性角度来看的话,反倒是企业网站比APP更好一些,那么,企业建设手机网站的时候要注意什么?&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;第一、图片设计&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  虽然当前的手机企业网站在建设的时候都是弄成的响应式网站,它可以按照上网具体设备的不同,而自动调整成符合当前屏幕大小的格式,但是只要稍微留心一些,就会发现,就算是那些超级大型的网站,他们在图片处理方面都已经十分谨慎了,还是会出现因为图片出现一些问题,因为只要出现图片就会消耗流量,另外如果图片太多的话,也会导致企业网站页面的加载速度变得非常慢,导致用户体验严重受到影响,因此在不是特别有必要的情况之下,最好还是少使用图片比较合适。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;  &lt;strong&gt;第二、页面简洁&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  既然是建设手机企业网站,那在设计的时候建议还是弄得简单一些更合适,不需要像电脑PC端的网站一样弄很多的内容,因为手机本身的屏幕就要比PC端小很多,如果手机企业网站建设的时候设计很多的内容,会导致人们浏览起来变得比较困难的,特别是用内容作为主导倾向的网站,建设成简洁的形式,更加容易让网友找到自己需要的信息&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;  &lt;strong&gt;第三、断点功能&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  对于移动网站的断点设置,在CSS模式样式中,都支持断点功能设置,而传统PC端网站就缺少这个功能设置,所以经常会出现网站显示不合理,大量乱码等现象。但是,网站断点功能并非就保证网站访问流畅,对于断点技术的研究,还在进一步探讨中,比如说,在移动设备显示不错的网站,可是反过来用PC端却显示紊乱,在特别注重移动端网站的时候,也要注意到传统网站的感受,只要这样全兼容的设计,才符合未来网站的发展方向。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;');
231
+
232
+INSERT INTO `__PREFIX__picture` (`id`, `catid`, `title`, `thumb`, `flag`, `keywords`, `description`, `tags`, `listorder`, `uid`, `username`, `sysadd`, `hits`, `create_time`, `update_time`, `url`, `status`) VALUES
233
+(1, 4, 'ISO9001证书', '', '', '', '', '', 100, 1, 'admin', 1, 0, 1550552511, 1550554247, '', 1),
234
+(2, 4, 'ISO14001证书', '', '', '', '', '', 100, 1, 'admin', 1, 0, 1550554284, 1550554288, '', 1),
235
+(3, 4, 'OHSAS18001证书', '', '', '', '', '', 100, 1, 'admin', 1, 0, 1550554298, 1550554301, '', 1),
236
+(4, 4, '企业信用等级评价', '', '', '', '', '', 100, 1, 'admin', 1, 0, 1550554307, 1550554309, '', 1),
237
+(5, 4, '企业荣誉证书', '', '', '', '', '', 100, 1, 'admin', 1, 0, 1550554314, 1550554316, '', 1);
238
+
239
+INSERT INTO `__PREFIX__product` (`id`, `catid`, `title`, `thumb`, `flag`, `keywords`, `description`, `tags`, `listorder`, `uid`, `username`, `sysadd`, `hits`, `create_time`, `update_time`, `url`, `status`, `type`, `trade`, `price`) VALUES
240
+(1, 5, '苏州欧泊**机电进出口有限公司', '', '', '', '苏州欧伯**机电进出口有限公司成立于2014年,是德国HUK/DOPAG/METER MIX定量注脂、打胶产品正式授权的代理商,另经销德国CAPTRON、NORELEM等众多国外知名品牌,可为客户提供从技术咨询、产品销售、技术支持到售后服务的全程服务。公司自成立以来,一直致力于为客户提供德国及欧美地区原产的各类工业备品、备件,并确保100%原厂全新正品。', '注脂,打胶', 100, 1, 'admin', 1, 0, 1552365964, 1553067407, '', 1, 4, 1, 1),
241
+(2, 5, '海安华**仓储有限公司', '', '', '', '海安华**仓储有限公司主要以海安物流、仓储为主。 公司秉承“诚信经营、服务至上”的核心价值观;先进的物流理念和丰富的物流操作经验,为不同客户量身定做及提供专业物流方案和优质、高效的物流服务,从而帮客户降低成本,提升市场竞争力。  公司已和众多知名企业携手合作,共创辉煌;承运范围涵盖了化工、机械、建材、纺织、电子电器、食品、制药、高科技产品等各行各业。', '物流服务', 100, 1, 'admin', 1, 0, 1552366267, 1553067377, '', 1, 5, 2, 3),
242
+(3, 5, '苏州领*线教育科技有限公司', '', '4', '', '苏州领*线教育科技有限公司是一家专注于高品质少儿培训和智能课程开发、提供精品化与专业化相结合的少儿教育科技机构。我们多年来,始终致力于将我们的课堂打造成为孩子快乐成长的乐园与成功的起点,并且成为江苏校外教育的品牌。我们已在苏州市区、常熟、张家港、吴江、昆山、太仓、常州、无锡、杭州、江西九江、内蒙古通辽、山东淄博等地成功开办了教学基地。', '校外教育,智能课程', 100, 1, 'admin', 1, 0, 1552366358, 1553067339, '', 1, 3, 4, 4),
243
+(4, 5, '南通红*居餐饮管理有限公司', '', '4', '', '南通红*居餐饮管理有限公司是一家具有自己的厨师团队,具备丰富的经验,专业承包及管理企事业机关单位、学校、医院、大型工业园区、工厂,建筑工地、写字楼的食堂及营养配餐等后勤项目的大型餐饮承包企业,在上海、江苏、浙江、都有设立公司营业部。团队有500余人,并可为各企业提供专业厨师团队、厨工,勤杂工,免费厨房餐饮管理;餐饮服务,保洁服务,家庭服务;停车场管理服务;劳务派遣经营;绿化维护,食品经营;婚庆礼仪服务;会...', '餐饮管理,婚庆礼仪,劳务派遣', 100, 1, 'admin', 1, 0, 1552366803, 1553067319, '', 1, 3, 5, 3),
244
+(5, 5, '苏州威*莱斯升降机械设备有限公司', '', '4', '', '苏州威*莱斯升降机械设备有限公司是专业提供各类升降平台出租租赁服务的厂家,自公司创立以来,经过长期对液压升降机、升降平台、高空作业车的研制和探索,积累了丰富的专业经验。凭借丰富的专业技术及不断开拓创新的精神,致力于产品的开发和创新,以自身专业特长,创造高品质的产品。', '机械设备,升降机,租赁服务', 100, 1, 'admin', 1, 0, 1552366872, 1553067296, '', 1, 3, 1, 2),
245
+(6, 5, '苏州非*搬运包装有限公司', '', '4', '', '苏州非*搬运安装有限公司于2016年7月在苏州工业园区这块沸腾的热土上重组合并挂牌成立。随着经济的发展,,公司秉承创新、创优、与时共进的原则把原有四家搬运公司重组洗牌、强强联手。作为一家专业承接各类精密机器设备搬运、装卸、安装定位工程的大企业,公司装备齐全、技术力量雄厚。施工人员均受过国家安全生产监督部门正规的专业培训,持有相应的资格证书,对各种精密机器设备的搬运、安装工程有着丰富的工作经验。施工车辆都是...', '精密机器,专业培训,资格证书', 100, 1, 'admin', 1, 0, 1552366920, 1553067267, '', 1, 1, 5, 1),
246
+(7, 5, '上海朗**业科技有限公司', '', '', '', '上海朗**业科技有限公司,成立于2016年,致力于进口国外先进的工业设备、仪器和耗材。团队成员均由长期从事科学研究、仪器销售与服务人士组成,有着丰富的售前和售后服务经验,可为国内科研、工业客户提供一站式解决方案。“朗助工业,喜翼科技!”一直以来都是团队的奋斗方向, 多年的经营与市场反馈赢得了市场客户的信赖。', '', 100, 1, 'admin', 1, 0, 1589007525, 1589007618, '', 1, 3, 4, 4),
247
+(8, 5, '盐城万**力资源有限公司', '', '', '', '公司以严守合同,诚信服务与客户为本企业的基本操守,坚持“真诚  高效 共赢”的文化理念,先后在城市周边、射阳、大丰、阜宁、徐州、昆山等地设办事处,依托强大、广泛的社会资源和一支团结奋进、具有良好亲和力以及丰富人力资源服务实践和管理经验的团队', '', 100, 1, 'admin', 1, 0, 1589007678, 1589007750, '', 1, 3, 4, 2),
248
+(9, 5, '江苏森**设集团有限公司', '', '', '', '江苏森**设集团有限公司是按照中华人民共和国公司法,于2006 年9 月5 日经过企业改制重组,在江苏省盐城市工商行政管理局亭湖分局注册成立,其性质为有限责任公司,注册资金10088万元。', '', 100, 1, 'admin', 1, 0, 1589007934, 1589008001, '', 1, 1, 1, 2);
249
+
250
+INSERT INTO `__PREFIX__product_data` (`did`, `content`) VALUES
251
+(1, '&lt;p&gt;苏州欧伯**机电进出口有限公司成立于2014年,是德国HUK/DOPAG/METER MIX定量注脂、打胶产品正式授权的代理商,另经销德国CAPTRON、NORELEM等众多国外知名品牌,可为客户提供从技术咨询、产品销售、技术支持到售后服务的全程服务。公司自成立以来,一直致力于为客户提供德国及欧美地区原产的各类工业备品、备件,并确保100%原厂全新正品。&lt;/p&gt;'),
252
+(2, '&lt;p&gt;海安华**仓储有限公司主要以海安物流、仓储为主。 公司秉承“诚信经营、服务至上”的核心价值观;先进的物流理念和丰富的物流操作经验,为不同客户量身定做及提供专业物流方案和优质、高效的物流服务,从而帮客户降低成本,提升市场竞争力。\r\n  公司已和众多知名企业携手合作,共创辉煌;承运范围涵盖了化工、机械、建材、纺织、电子电器、食品、制药、高科技产品等各行各业。&lt;/p&gt;'),
253
+(3, '&lt;p&gt;苏州领*线教育科技有限公司是一家专注于高品质少儿培训和智能课程开发、提供精品化与专业化相结合的少儿教育科技机构。我们多年来,始终致力于将我们的课堂打造成为孩子快乐成长的乐园与成功的起点,并且成为江苏校外教育的品牌。我们已在苏州市区、常熟、张家港、吴江、昆山、太仓、常州、无锡、杭州、江西九江、内蒙古通辽、山东淄博等地成功开办了教学基地。&lt;/p&gt;'),
254
+(4, '&lt;p&gt;南通红*居餐饮管理有限公司是一家具有自己的厨师团队,具备丰富的经验,专业承包及管理企事业机关单位、学校、医院、大型工业园区、工厂,建筑工地、写字楼的食堂及营养配餐等后勤项目的大型餐饮承包企业,在上海、江苏、浙江、都有设立公司营业部。团队有500余人,并可为各企业提供专业厨师团队、厨工,勤杂工,免费厨房餐饮管理;餐饮服务,保洁服务,家庭服务;停车场管理服务;劳务派遣经营;绿化维护,食品经营;婚庆礼仪服务;会务服务;展览展示服务;厨房设备及用品、餐具、办公用品的销售、餐厅规划设计,厨具设计、出售、安装等服务&lt;/p&gt;'),
255
+(5, '&lt;p&gt;苏州威*莱斯升降机械设备有限公司是专业提供各类升降平台出租租赁服务的厂家,自公司创立以来,经过长期对液压升降机、升降平台、高空作业车的研制和探索,积累了丰富的专业经验。凭借丰富的专业技术及不断开拓创新的精神,致力于产品的开发和创新,以自身专业特长,创造高品质的产品。&lt;/p&gt;'),
256
+(6, '&lt;p&gt;苏州非*搬运安装有限公司于2016年7月在苏州工业园区这块沸腾的热土上重组合并挂牌成立。随着经济的发展,,公司秉承创新、创优、与时共进的原则把原有四家搬运公司重组洗牌、强强联手。作为一家专业承接各类精密机器设备搬运、装卸、安装定位工程的大企业,公司装备齐全、技术力量雄厚。施工人员均受过国家安全生产监督部门正规的专业培训,持有相应的资格证书,对各种精密机器设备的搬运、安装工程有着丰富的工作经验。施工车辆都是定期由特种设备监督局定期安检的,搬运工具都是领先的。长期与多家财险、寿险公司合作,保证客户利益的最大化,员工利益的最大保障。&lt;/p&gt;'),
257
+(7, '&lt;p&gt;上海朗**业科技有限公司,成立于2016年,致力于进口国外先进的工业设备、仪器和耗材。团队成员均由长期从事科学研究、仪器销售与服务人士组成,有着丰富的售前和售后服务经验,可为国内科研、工业客户提供一站式解决方案。\r\n\r\n“朗助工业,喜翼科技!”一直以来都是团队的奋斗方向, 多年的经营与市场反馈赢得了市场客户的信赖。\r\n&amp;nbsp;&lt;/p&gt;&lt;p&gt;旗下代理合作涵盖了Mettler Toledo, Brand, EIMINC, Leica, CBS, Astero, Thermofisher, UnionMicronClean, Technoflex, SPC, &amp;nbsp;Oxypharm, FRITSCH, Copley等众多一线品牌产品。&lt;/p&gt;'),
258
+(8, '&lt;p&gt;公司以严守合同,诚信服务与客户为本企业的基本操守,坚持“真诚&amp;nbsp; 高效 共赢”的文化理念,先后在城市周边、射阳、大丰、阜宁、徐州、昆山等地设办事处,依托强大、广泛的社会资源和一支团结奋进、具有良好亲和力以及丰富人力资源服务实践和管理经验的团队,在企业人力资源业务外包服务领域、劳务派遣服务以及劳务输出、劳动事务代理、劳动政策咨询等服务领域形成了独特资源和业务优势,积累了丰富的人力资源业务服务经验,专注于将“道万**力”打招成江苏人力资源及其管理领域的专业服务品牌。&lt;/p&gt;'),
259
+(9, '&lt;p&gt;&amp;nbsp; 江苏森**设集团有限公司是按照中华人民共和国公司法,于2006 年9 月5 日经过企业改制重组,在江苏省盐城市工商行政管理局亭湖分局注册成立,其性质为有限责任公司,注册资金10088万元。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 公司是自主经营、独立核算、自负盈亏、具有独立法人资格的经济实体,主要从事高空维修、高空安装、高空建筑、高空防腐、高空清洗、高空加固、特种防腐、 地下堵漏以及铁塔防护等方面的高空作业。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 公司设有工程部、施工部、设备部、财务部和法务部,是集工程方案设计、工程施工和质量安全管理等为一体的综合性高空作业工程公司。目前,公司下辖六个分公司,22个项目部。公司本部设有党总支、工会、办公室(兼投标办)、质量安全部、施工技术部、材料设备部。人事教育部和计划财务部,共有员工1086人,具有专业技术人员166人,其中高级工程师12人,项目经理22人。拥有大中型机械设备68台(件),企业固定资产目前己达亿。年施工产值2亿。&lt;/p&gt;');
260
+
261
+INSERT INTO `__PREFIX__page` (`catid`, `title`, `keywords`, `description`, `content`, `thumb`, `hits`, `create_time`, `update_time`) VALUES
262
+(2, '关于我们', '', '', '<p>&nbsp; &nbsp; xxx网络科技股份有限公司是一家集策略咨询、创意创新、视觉设计、技术研发、内容制造、营销推广为一体的综合型数字化创新服务企业,其利用公司持续积累的核心技术和互联网思维,提供以互联网、移动互联网为核心的网络技术服务和互动整合营销服务,为传统企业实现“互联网+”升级提供整套解决方案。公司定位于中大型企业为核心客户群,可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网数字综合需求。</p><p><br/></p><p>&nbsp; &nbsp; xxx网络科技股份有限公司作为一家互联网数字服务综合商,其主营业务包括移动互联网应用开发服务、数字互动整合营销服务、互联网网站建设综合服务和电子商务综合服务。</p><p><br/></p><p>&nbsp; &nbsp; xxx网络科技股份有限公司秉承实现全网价值营销的理念,通过实现互联网与移动互联网的精准数字营销和用户数据分析,日益深入到客户互联网技术建设及运维营销的方方面面,在帮助客户形成自身互联网运作体系的同时,有效对接BAT(百度,阿里,腾讯)等平台即百度搜索、阿里电商、腾讯微信,通过平台的推广来推进互联网综合服务,实现企业、用户、平台三者完美对接,并形成高效互动的枢纽,在帮助客户获取互联网高附加价值的同时获得自身的不断成长和壮大。</p>', '', 0, 0, 0),
263
+(3, '企业文化', '', '', '<p>【愿景】</p><ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"><li><p>不断倾听和满足用户需求,引导并超越用户需求,赢得用户尊敬</p></li><li><p>通过提升品牌形象,使员工具有高度企业荣誉感,赢得员工尊敬&nbsp;</p></li><li><p>推动互联网行业的健康发展,与合作伙伴共成长,赢得行业尊敬</p></li><li><p>注重企业责任,用心服务,关爱社会、回馈社会,赢得社会尊敬</p></li></ul><p><br/></p><p>【使命】</p><ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"><li><p>使产品和服务像水和电融入人们的生活,为人们带来便捷和愉悦</p></li><li><p>关注不同地域、群体,并针对不同对象提供差异化的产品和服务</p></li><li><p>打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境</p></li></ul><p><br/></p><p>【管理理念】</p><ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"><li><p>为员工提供良好的工作环境和激励机制&nbsp;</p></li><li><p>完善员工培养体系和职业发展通道,使员工与企业同步成长</p></li><li><p>充分尊重和信任员工,不断引导和鼓励,使其获得成就的喜悦</p></li></ul>', '', 0, 0, 0),
264
+(18, '联系我们', '', '', '<p>手 机:158-88888888</p><p>传 真:0512-88888888</p><p>邮 编:215000</p><p>邮 箱:admin@admin.com</p><p>地 址:江苏省苏州市吴中区某某工业园一区</p><p><br/></p><p><img width=\"530\" height=\"340\" src=\"http://api.map.baidu.com/staticimage?center=116.404,39.915&zoom=10&width=530&height=340&markers=116.404,39.915\"/></p>', '', 0, 0, 0);
265
+
266
+INSERT INTO `__PREFIX__tags` (`id`, `tag`, `seo_title`, `seo_keyword`, `seo_description`, `usetimes`, `hits`, `create_time`, `update_time`, `listorder`) VALUES
267
+(1, '精密机器', '', '', '', 1, 0, 1553067267, 1553067267, 0),
268
+(2, '专业培训', '', '', '', 1, 0, 1553067267, 1553067267, 0),
269
+(3, '资格证书', '', '', '', 1, 0, 1553067267, 1553067267, 0),
270
+(4, '机械设备', '', '', '', 1, 0, 1553067296, 1553067296, 0),
271
+(5, '升降机', '', '', '', 1, 0, 1553067296, 1553067296, 0),
272
+(6, '租赁服务', '', '', '', 1, 0, 1553067296, 1553067296, 0),
273
+(7, '餐饮管理', '', '', '', 1, 0, 1553067319, 1553067319, 0),
274
+(8, '婚庆礼仪', '', '', '', 1, 0, 1553067319, 1553067319, 0),
275
+(9, '劳务派遣', '', '', '', 1, 0, 1553067319, 1553067319, 0),
276
+(10, '校外教育', '', '', '', 1, 0, 1553067339, 1553067339, 0),
277
+(11, '智能课程', '', '', '', 1, 0, 1553067339, 1553067339, 0),
278
+(12, '物流服务', '', '', '', 1, 0, 1553067377, 1553067377, 0),
279
+(13, '注脂', '', '', '', 1, 0, 1553067408, 1553067408, 0),
280
+(14, '打胶', '', '', '', 1, 0, 1553067408, 1553067408, 0);
281
+
282
+INSERT INTO `__PREFIX__tags_content` (`tag`, `modelid`, `contentid`, `catid`, `update_time`) VALUES
283
+('精密机器', 3, 6, 5, 1553067267),
284
+('专业培训', 3, 6, 5, 1553067267),
285
+('资格证书', 3, 6, 5, 1553067267),
286
+('机械设备', 3, 5, 5, 1553067296),
287
+('升降机', 3, 5, 5, 1553067296),
288
+('租赁服务', 3, 5, 5, 1553067296),
289
+('餐饮管理', 3, 4, 5, 1553067319),
290
+('婚庆礼仪', 3, 4, 5, 1553067319),
291
+('劳务派遣', 3, 4, 5, 1553067319),
292
+('校外教育', 3, 3, 5, 1553067339),
293
+('智能课程', 3, 3, 5, 1553067339),
294
+('物流服务', 3, 2, 5, 1553067377),
295
+('注脂', 3, 1, 5, 1553067408),
296
+('打胶', 3, 1, 5, 1553067408);
297
+
298
+-- 1.1.0 --
299
+ALTER TABLE `__PREFIX__article` ENGINE = InnoDB;
300
+ALTER TABLE `__PREFIX__article_data` ENGINE = InnoDB;
301
+ALTER TABLE `__PREFIX__picture` ENGINE = InnoDB;
302
+ALTER TABLE `__PREFIX__picture_data` ENGINE = InnoDB;
303
+ALTER TABLE `__PREFIX__download` ENGINE = InnoDB;
304
+ALTER TABLE `__PREFIX__download_data` ENGINE = InnoDB;
305
+ALTER TABLE `__PREFIX__product` ENGINE = InnoDB;
306
+ALTER TABLE `__PREFIX__product_data` ENGINE = InnoDB;
307
+
308
+-- 1.1.2 --
309
+ALTER TABLE `__PREFIX__article` CHANGE COLUMN `inputtime` `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间';
310
+ALTER TABLE `__PREFIX__picture` CHANGE COLUMN `inputtime` `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间';
311
+ALTER TABLE `__PREFIX__download` CHANGE COLUMN `inputtime` `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间';
312
+ALTER TABLE `__PREFIX__product` CHANGE COLUMN `inputtime` `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间';
313
+
314
+ALTER TABLE `__PREFIX__article` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';
315
+ALTER TABLE `__PREFIX__picture` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';
316
+ALTER TABLE `__PREFIX__download` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';
317
+ALTER TABLE `__PREFIX__product` CHANGE COLUMN `updatetime` `update_time` int(10) unsigned DEFAULT NULL COMMENT '更新时间';

+ 8
- 0
addons/cms/userSidenavAfter.html View File

@@ -0,0 +1,8 @@
1
+<li class="layui-nav-item {if $Request.module=='cms' && $Request.controller=='Content'}layui-nav-itemed{/if}">
2
+    <a href="javascript:;"><i class="iconfont icon-draft-line"></i>&nbsp;内容管理</a>
3
+    <dl class="layui-nav-child">
4
+    	<dd class="{if $Request.action=='publish' && $Request.module=='cms' }layui-this{/if}"><a href="{:url('cms/content/publish')}"><i class="iconfont icon-circle-line"></i>&nbsp;在线投稿</a></dd>
5
+        <dd class="{if $Request.action=='published' && $Request.module=='cms' }layui-this{/if}"><a href="{:url('cms/content/published')}"><i class="iconfont icon-circle-line"></i>&nbsp;我的稿件</a></dd>
6
+        <dd class="{if $Request.action=='order' && $Request.module=='cms' }layui-this{/if}"><a href="{:url('cms/content/order')}"><i class="iconfont icon-circle-line"></i>&nbsp;我的订单</a></dd>
7
+    </dl>
8
+</li>

+ 1
- 0
addons/command/.addonrc View File

@@ -0,0 +1 @@
1
+{"menus":["command","command\/index","command\/add","command\/detail","command\/command","command\/execute","command\/del","command\/multi"],"files":["application\/admin\/view\/command\/add.html","application\/admin\/view\/command\/index.html","application\/admin\/view\/command\/detail.html","application\/admin\/validate\/Command.php","application\/admin\/model\/Command.php","application\/admin\/controller\/Command.php"]}

+ 82
- 0
addons/command/Command.php View File

@@ -0,0 +1,82 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 一键CRUD插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\command;
16
+
17
+use app\common\library\Menu;
18
+use think\Addons;
19
+
20
+/**
21
+ * 在线命令插件
22
+ */
23
+class Command extends Addons
24
+{
25
+
26
+    /**
27
+     * 插件安装方法
28
+     * @return bool
29
+     */
30
+    public function install()
31
+    {
32
+        $menu = [
33
+            [
34
+                'name'    => 'command',
35
+                'title'   => '在线命令管理',
36
+                "icon"    => "iconfont icon-code-s-slash-fill",
37
+                'sublist' => [
38
+                    ['name' => 'command/index', 'title' => '查看'],
39
+                    ['name' => 'command/add', 'title' => '添加'],
40
+                    ['name' => 'command/detail', 'title' => '详情'],
41
+                    ['name' => 'command/command', 'title' => '生成并执行命令'],
42
+                    ['name' => 'command/execute', 'title' => '再次执行命令'],
43
+                    ['name' => 'command/del', 'title' => '删除'],
44
+                    ['name' => 'command/multi', 'title' => '批量更新'],
45
+                ],
46
+            ],
47
+        ];
48
+        Menu::create($menu);
49
+        return true;
50
+    }
51
+
52
+    /**
53
+     * 插件卸载方法
54
+     * @return bool
55
+     */
56
+    public function uninstall()
57
+    {
58
+        Menu::delete('command');
59
+        return true;
60
+    }
61
+
62
+    /**
63
+     * 插件启用方法
64
+     * @return bool
65
+     */
66
+    public function enable()
67
+    {
68
+        Menu::enable('command');
69
+        return true;
70
+    }
71
+
72
+    /**
73
+     * 插件禁用方法
74
+     * @return bool
75
+     */
76
+    public function disable()
77
+    {
78
+        Menu::disable('command');
79
+        return true;
80
+    }
81
+
82
+}

+ 7
- 0
addons/command/info.ini View File

@@ -0,0 +1,7 @@
1
+name = command
2
+title = 在线命令
3
+description = 可在线执行一键生成CRUD、一键生成菜单等相关命令
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.1.1
7
+status = 1

+ 15
- 0
addons/command/install.sql View File

@@ -0,0 +1,15 @@
1
+CREATE TABLE IF NOT EXISTS `__PREFIX__command`  (
2
+  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
3
+  `type` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '类型',
4
+  `params` varchar(1500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '参数',
5
+  `command` varchar(1500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '命令',
6
+  `content` text COMMENT '返回结果',
7
+  `execute_time` int(10) UNSIGNED DEFAULT NULL COMMENT '执行时间',
8
+  `create_time` int(10) UNSIGNED DEFAULT NULL COMMENT '创建时间',
9
+  `update_time` int(10) UNSIGNED DEFAULT NULL COMMENT '更新时间',
10
+  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0失败,1正常',
11
+  PRIMARY KEY (`id`) USING BTREE
12
+) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='在线命令表';
13
+
14
+-- 1.1.0 --
15
+ALTER TABLE `__PREFIX__command` ENGINE = InnoDB;

+ 28
- 0
addons/command/library/Output.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+namespace addons\command\library;
4
+
5
+/**
6
+ * Class Output
7
+ */
8
+class Output extends \think\console\Output
9
+{
10
+
11
+    protected $message = [];
12
+
13
+    public function __construct($driver = 'console')
14
+    {
15
+        parent::__construct($driver);
16
+    }
17
+
18
+    protected function block($style, $message)
19
+    {
20
+        $this->message[] = $message;
21
+    }
22
+
23
+    public function getMessage()
24
+    {
25
+        return $this->message;
26
+    }
27
+
28
+}

+ 1
- 0
addons/formguide/.addonrc View File

@@ -0,0 +1 @@
1
+{"menus":["formguide","formguide.formguide","formguide.formguide\/index","formguide.formguide\/add","formguide.formguide\/edit","formguide.formguide\/del","formguide.field","formguide.field\/index","formguide.field\/add","formguide.field\/edit","formguide.field\/del","formguide.info\/index","formguide.info\/public_view","formguide.info\/del"],"files":["application\/index\/controller\/Formguide.php","application\/admin\/view\/formguide\/formguide\/add.html","application\/admin\/view\/formguide\/formguide\/edit.html","application\/admin\/view\/formguide\/formguide\/index.html","application\/admin\/view\/formguide\/field\/add.html","application\/admin\/view\/formguide\/field\/edit.html","application\/admin\/view\/formguide\/field\/index.html","application\/admin\/view\/formguide\/info\/public_view.html","application\/admin\/view\/formguide\/info\/index.html","application\/admin\/validate\/formguide\/Models.php","application\/admin\/validate\/formguide\/ModelField.php","application\/admin\/model\/formguide\/Models.php","application\/admin\/model\/formguide\/Formguide.php","application\/admin\/model\/formguide\/ModelField.php","application\/admin\/controller\/formguide\/Field.php","application\/admin\/controller\/formguide\/Info.php","application\/admin\/controller\/formguide\/Formguide.php","templates\/default\/index\/formguide\/show.html","templates\/default\/index\/formguide\/inputItem.html"]}

+ 118
- 0
addons/formguide/Formguide.php View File

@@ -0,0 +1,118 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 表单插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\formguide;
16
+
17
+use app\common\library\Menu;
18
+use think\Addons;
19
+use think\Db;
20
+use think\facade\Config;
21
+
22
+class Formguide extends Addons
23
+{
24
+    //后台菜单
25
+    public $menu = [
26
+        [
27
+            "name"    => "formguide",
28
+            "title"   => "表单管理",
29
+            "icon"    => "iconfont icon-file-list-3-line",
30
+            "sublist" => [
31
+                [
32
+                    "name"    => "formguide.formguide",
33
+                    "title"   => "表单管理",
34
+                    "icon"    => "iconfont icon-file-list-3-line",
35
+                    "sublist" => [
36
+                        ["name" => "formguide.formguide/index", "title" => "查看"],
37
+                        ["name" => "formguide.formguide/add", "title" => "新增"],
38
+                        ["name" => "formguide.formguide/edit", "title" => "编辑"],
39
+                        ["name" => "formguide.formguide/del", "title" => "删除"],
40
+                    ],
41
+                ],
42
+                [
43
+                    "name"    => "formguide.field",
44
+                    "title"   => "字段管理",
45
+                    "ismenu"  => 0,
46
+                    "sublist" => [
47
+                        ["name" => "formguide.field/index", "title" => "查看"],
48
+                        ["name" => "formguide.field/add", "title" => "新增"],
49
+                        ["name" => "formguide.field/edit", "title" => "编辑"],
50
+                        ["name" => "formguide.field/del", "title" => "删除"],
51
+                        ["name" => "formguide.info/index", "title" => "信息列表"],
52
+                        ["name" => "formguide.info/public_view", "title" => "信息查看"],
53
+                        ["name" => "formguide.info/del", "title" => "信息删除"],
54
+                    ],
55
+                ],
56
+
57
+            ],
58
+        ],
59
+    ];
60
+
61
+    //安装
62
+    public function install()
63
+    {
64
+        $info = get_addon_info('cms');
65
+        if (!$info || $info['status'] != 1) {
66
+            throw new \think\Exception("请在后台插件管理中安装《内容管理系统》并启用后再尝试");
67
+        }
68
+        Menu::create($this->menu);
69
+        return true;
70
+    }
71
+
72
+    /**
73
+     * 插件卸载方法
74
+     * @return bool
75
+     */
76
+    public function uninstall()
77
+    {
78
+        $droptables = request()->param("droptables");
79
+        $auth       = \app\admin\service\User::instance();
80
+        //只有开启调试且为超级管理员才允许删除相关数据库
81
+        if ($droptables && Config::get("app_debug") && $auth->isAdministrator()) {
82
+            //删除模型中建的表
83
+            $table_list = Db::name('model')->where('module', 'formguide')->field('tablename,id')->select();
84
+            if ($table_list) {
85
+                foreach ($table_list as $val) {
86
+                    $tablename = Config::get('database.prefix') . $val['tablename'];
87
+                    Db::execute("DROP TABLE IF EXISTS `{$tablename}`;");
88
+                    Db::name('model_field')->where('modelid', $val['id'])->delete();
89
+                }
90
+            }
91
+        }
92
+        //删除模型中的表
93
+        Db::name('model')->where('module', 'formguide')->delete();
94
+        Menu::delete("formguide");
95
+        return true;
96
+    }
97
+
98
+    /**
99
+     * 插件启用方法
100
+     * @return bool
101
+     */
102
+    public function enable()
103
+    {
104
+        Menu::enable("formguide");
105
+        return true;
106
+    }
107
+
108
+    /**
109
+     * 插件禁用方法
110
+     * @return bool
111
+     */
112
+    public function disable()
113
+    {
114
+        Menu::disable("formguide");
115
+        return true;
116
+    }
117
+
118
+}

+ 7
- 0
addons/formguide/info.ini View File

@@ -0,0 +1,7 @@
1
+name = formguide
2
+title = 自定义表单
3
+description = 这是一个cms必备的表单提交插件!字段都可以任意定义,同样支持近二十种类型字段
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.1.2
7
+status = 1

+ 140
- 0
addons/formguide/library/Service.php View File

@@ -0,0 +1,140 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 表单处理类
14
+// +----------------------------------------------------------------------
15
+namespace addons\formguide\library;
16
+
17
+use addons\formguide\model\ModelField;
18
+use think\Db;
19
+use think\facade\Validate;
20
+
21
+class Service
22
+{
23
+
24
+    //查询解析模型数据用以构造from表单
25
+    public static function getFieldList($modelId, $id = null)
26
+    {
27
+        $list = ModelField::where('modelid', $modelId)->where('status', 1)->order('listorder DESC,id DESC')->select();
28
+        if (!empty($list)) {
29
+            //编辑信息时查询出已有信息
30
+            if ($id) {
31
+                $modelInfo = Db::name('Model')->where('id', $modelId)->field('tablename,type')->find();
32
+                $dataInfo  = Db::name($modelInfo['tablename'])->where('id', $id)->find();
33
+            }
34
+            foreach ($list as $key => &$value) {
35
+                //内部字段不显示
36
+                if ($value['iscore']) {
37
+                    unset($list[$key]);
38
+                }
39
+                //核心字段做标记
40
+                $value['fieldArr'] = 'modelField';
41
+                if (isset($dataInfo[$value['name']])) {
42
+                    $value['value'] = $dataInfo[$value['name']];
43
+                }
44
+                //扩展配置
45
+                $value['setting'] = unserialize($value['setting']);
46
+                $value['options'] = $value['setting']['options'] ?? '';
47
+                //在新增时候添加默认值
48
+                if (!$id) {
49
+                    $value['value'] = $value['setting']['value'] ?? '';
50
+                }
51
+                if ($value['type'] == 'custom') {
52
+                    if ($value['options'] != '') {
53
+                        $tpar             = explode(".", $value['options'], 2);
54
+                        $value['options'] = \think\Response::create('admin@custom/' . $tpar[0], 'view')->assign('vo', $value)->getContent();
55
+                        unset($tpar);
56
+                    }
57
+                } elseif ($value['options'] != '') {
58
+                    $value['options'] = parse_attr($value['options']);
59
+                }
60
+                if ($value['type'] == 'checkbox') {
61
+                    $value['value'] = empty($value['value']) ? [] : explode(',', $value['value']);
62
+                }
63
+                if ($value['type'] == 'datetime') {
64
+                    $value['value'] = empty($value['value']) ? date('Y-m-d H:i:s') : date('Y-m-d H:i:s', $value['value']);
65
+                }
66
+                if ($value['type'] == 'date') {
67
+                    $value['value'] = empty($value['value']) ? '' : date('Y-m-d', $value['value']);
68
+                }
69
+                if ($value['type'] == 'Ueditor' || $value['type'] == 'markdown') {
70
+                    $value['value'] = isset($value['value']) ? htmlspecialchars_decode($value['value']) : '';
71
+                }
72
+            }
73
+        }
74
+        return $list;
75
+    }
76
+
77
+    //处理post提交的模型数据
78
+    public static function dealModelPostData($modelid, $data)
79
+    {
80
+        //字段类型
81
+        $query = ModelField::where('modelid', $modelid)->where('status', 1);
82
+
83
+        $filedTypeList = $query->order('listorder DESC, id DESC')->column('name,title,type,ifsystem,ifrequire,pattern,errortips');
84
+
85
+        foreach ($filedTypeList as $name => $vo) {
86
+            if (!isset($data[$name])) {
87
+                switch ($vo['type']) {
88
+                    // 开关
89
+                    case 'switch':
90
+                        $data[$name] = 0;
91
+                        break;
92
+                    case 'checkbox':
93
+                        $data[$name] = '';
94
+                        break;
95
+                }
96
+            } else {
97
+                if (is_array($data[$name])) {
98
+                    $data[$name] = implode(',', $data[$name]);
99
+                }
100
+                switch ($vo['type']) {
101
+                    // 开关
102
+                    case 'switch':
103
+                        $data[$name] = 1;
104
+                        break;
105
+                    // 日期+时间
106
+                    case 'datetime':
107
+                        //if ($vo['ifeditable']) {
108
+                        $data[$name] = strtotime($data[$name]);
109
+                        //}
110
+                        break;
111
+                    // 日期
112
+                    case 'date':
113
+                        $data[$name] = strtotime($data[$name]);
114
+                        break;
115
+                    // 编辑器
116
+                    case 'markdown':
117
+                    case 'Ueditor':
118
+                        $data[$name] = htmlspecialchars(stripslashes($data[$name]));
119
+                        break;
120
+                }
121
+            }
122
+            //数据必填验证
123
+            if ($vo['ifrequire'] && (!isset($data[$name]) || $data[$name] == '')) {
124
+                throw new \Exception("'" . $vo['title'] . "'必须填写~");
125
+            }
126
+            //正则校验
127
+            if (isset($data[$name]) && $data[$name] && $vo['pattern'] && !Validate::regex($data[$name], $vo['pattern'])) {
128
+                throw new \Exception("'" . $vo['title'] . "'" . (!empty($vo['errortips']) ? $vo['errortips'] : '正则校验失败') . "");
129
+            }
130
+            //数据格式验证
131
+            if (!empty($data[$name]) && in_array($vo['type'], ['number']) && !Validate::isNumber($data[$name])) {
132
+                throw new \Exception("'" . $vo['title'] . "'格式错误~");
133
+                //安全过滤
134
+            } else {
135
+
136
+            }
137
+        }
138
+        return $data;
139
+    }
140
+}

+ 58
- 0
addons/formguide/model/Formguide.php View File

@@ -0,0 +1,58 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 表单模型
14
+// +----------------------------------------------------------------------
15
+namespace addons\formguide\model;
16
+
17
+use addons\formguide\library\Service;
18
+use think\Db;
19
+use think\Model;
20
+
21
+class Formguide extends Model
22
+{
23
+    protected $name               = 'ModelField';
24
+    protected $autoWriteTimestamp = false;
25
+
26
+    //添加模型内容
27
+    public function addFormguideData($formid, $data)
28
+    {
29
+        //完整表名获取
30
+        $tablename        = $this->getModelTableName($formid);
31
+        $data['user_id']  = \app\member\service\User::instance()->id;
32
+        $data['username'] = \app\member\service\User::instance()->username ?: '游客';
33
+        //处理数据
34
+        $data                = Service::dealModelPostData($formid, $data);
35
+        $data['create_time'] = request()->time();
36
+        $data['ip']          = request()->ip();
37
+        try {
38
+            //主表
39
+            $id = Db::name($tablename)->insertGetId($data);
40
+        } catch (\Exception $e) {
41
+            throw new \Exception($e->getMessage());
42
+        }
43
+        return $id;
44
+    }
45
+
46
+    /**
47
+     * 根据模型ID,返回表名
48
+     * @param type $modelid
49
+     * @return string
50
+     */
51
+    protected function getModelTableName($modelid)
52
+    {
53
+        //读取模型配置 以后优化缓存形式
54
+        $model_cache = cache("Model");
55
+        //表名获取
56
+        return $model_cache[$modelid]['tablename'];
57
+    }
58
+}

+ 35
- 0
addons/formguide/model/ModelField.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 字段模型
14
+// +----------------------------------------------------------------------
15
+namespace addons\formguide\model;
16
+
17
+use think\Model;
18
+
19
+/**
20
+ * 字段模型
21
+ */
22
+class ModelField extends Model
23
+{
24
+    protected $autoWriteTimestamp = true;
25
+
26
+    public function getExtendHtmlAttr($value, $data)
27
+    {
28
+        $result = preg_replace_callback("/\{([a-zA-Z]+)\}/", function ($matches) use ($data) {
29
+            if (isset($data[$matches[1]])) {
30
+                return $data[$matches[1]];
31
+            }
32
+        }, $data['extend']);
33
+        return $result;
34
+    }
35
+}

+ 1
- 0
addons/member/.addonrc View File

@@ -0,0 +1 @@
1
+{"menus":["member","member.member","member.member\/index","member.member\/add","member.member\/edit","member.member\/del","member.member\/pass","member.member\/userverify","member.group","member.group\/index","member.group\/add","member.group\/edit","member.group\/del"],"files":["application\/api\/controller\/Member.php","application\/member\/validate\/MemberGroup.php","application\/member\/validate\/Member.php","application\/member\/service\/User.php","application\/member\/library\/token\/driver\/Redis.php","application\/member\/library\/token\/driver\/Mysql.php","application\/member\/library\/token\/Driver.php","application\/member\/library\/Token.php","application\/member\/model\/MemberGroup.php","application\/member\/model\/PointLog.php","application\/member\/model\/AmountLog.php","application\/member\/model\/Member.php","application\/member\/controller\/MemberBase.php","application\/member\/controller\/Index.php","application\/member\/controller\/Attachments.php","application\/member\/controller\/MemberApi.php","application\/member\/controller\/Ajax.php","application\/member\/controller\/AddonController.php","application\/admin\/view\/member\/member\/userverify.html","application\/admin\/view\/member\/member\/add.html","application\/admin\/view\/member\/member\/edit.html","application\/admin\/view\/member\/member\/index.html","application\/admin\/view\/member\/group\/add.html","application\/admin\/view\/member\/group\/edit.html","application\/admin\/view\/member\/group\/index.html","application\/admin\/validate\/member\/MemberGroup.php","application\/admin\/validate\/member\/Member.php","application\/admin\/model\/member\/MemberGroup.php","application\/admin\/model\/member\/MemberContent.php","application\/admin\/model\/member\/Member.php","application\/admin\/controller\/member\/Group.php","application\/admin\/controller\/member\/Member.php","templates\/default\/member\/actmobile.html","templates\/default\/member\/login.html","templates\/default\/member\/register.html","templates\/default\/member\/footer.html","templates\/default\/member\/upgrade.html","templates\/default\/member\/actemail.html","templates\/default\/member\/layui.html","templates\/default\/member\/profile.html","templates\/default\/member\/index.html","templates\/default\/member\/forget.html","templates\/default\/member\/attachment.html","templates\/default\/member\/changemobile.html","templates\/default\/member\/header.html","templates\/default\/member\/changeemail.html","public\/static\/addons\/member\/img\/logo.png","public\/static\/addons\/member\/img\/avatar.png","public\/static\/addons\/member\/css\/style.css","public\/static\/addons\/member\/css\/global.css","public\/static\/addons\/member\/mods\/index.js"]}

+ 109
- 0
addons/member/Member.php View File

@@ -0,0 +1,109 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 会员插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\member;
16
+
17
+use app\common\library\Menu;
18
+use think\Addons;
19
+
20
+class Member extends Addons
21
+{
22
+    public $cache_list = [
23
+        'Member_Group' => [
24
+            'name'   => '会员组',
25
+            'model'  => 'MemberGroup',
26
+            'action' => 'membergroup_cache',
27
+        ],
28
+    ];
29
+
30
+    /**
31
+     * 插件安装方法
32
+     * @return bool
33
+     */
34
+    public function install()
35
+    {
36
+        $menu = [
37
+            [
38
+                "name"    => "member",
39
+                "title"   => "会员管理",
40
+                "icon"    => "iconfont icon-user-line",
41
+                "sublist" => [
42
+                    [
43
+                        "name"      => "member.member",
44
+                        "title"     => "会员管理",
45
+                        "icon"      => "iconfont icon-user-line",
46
+                        "listorder" => 99,
47
+                        "sublist"   => [
48
+                            ["name" => "member.member/index", "title" => "查看"],
49
+                            ["name" => "member.member/add", "title" => "新增"],
50
+                            ["name" => "member.member/edit", "title" => "编辑"],
51
+                            ["name" => "member.member/del", "title" => "删除"],
52
+                            ["name" => "member.member/pass", "title" => "审核"],
53
+                        ],
54
+                    ],
55
+                    [
56
+                        "name"      => "member.member/userverify",
57
+                        "title"     => "审核会员",
58
+                        "icon"      => "iconfont icon-user-star-line",
59
+                        "listorder" => 98,
60
+                        "ismenu"    => 1,
61
+                    ],
62
+                    [
63
+                        "name"    => "member.group",
64
+                        "title"   => "会员组管理",
65
+                        "icon"    => "iconfont icon-user-settings-line",
66
+                        "sublist" => [
67
+                            ["name" => "member.group/index", "title" => "查看"],
68
+                            ["name" => "member.group/add", "title" => "新增"],
69
+                            ["name" => "member.group/edit", "title" => "编辑"],
70
+                            ["name" => "member.group/del", "title" => "删除"],
71
+                        ],
72
+                    ],
73
+                ],
74
+            ],
75
+        ];
76
+        Menu::create($menu);
77
+        return true;
78
+    }
79
+
80
+    /**
81
+     * 插件卸载方法
82
+     * @return bool
83
+     */
84
+    public function uninstall()
85
+    {
86
+        Menu::delete("member");
87
+        return true;
88
+    }
89
+
90
+    /**
91
+     * 插件启用方法
92
+     * @return bool
93
+     */
94
+    public function enable()
95
+    {
96
+        Menu::enable("member");
97
+        return true;
98
+    }
99
+
100
+    /**
101
+     * 插件禁用方法
102
+     * @return bool
103
+     */
104
+    public function disable()
105
+    {
106
+        Menu::disable("member");
107
+        return true;
108
+    }
109
+}

+ 105
- 0
addons/member/config.php View File

@@ -0,0 +1,105 @@
1
+<?php
2
+/**
3
+ * 会员系统,默认配置
4
+ */
5
+return [
6
+    [
7
+        'name'    => 'allowregister',
8
+        'title'   => '新会员注册',
9
+        'type'    => 'radio',
10
+        'options' => [
11
+            1 => '允许',
12
+            0 => '禁止',
13
+        ],
14
+        'value'   => 1,
15
+    ],
16
+    [
17
+        'name'    => 'registerverify',
18
+        'title'   => '注册审核',
19
+        'type'    => 'radio',
20
+        'options' => [
21
+            1 => '是',
22
+            0 => '否',
23
+        ],
24
+        'value'   => 0,
25
+    ],
26
+    [
27
+        'name'    => 'register_mobile_verify',
28
+        'title'   => '注册手机认证',
29
+        'type'    => 'radio',
30
+        'options' => [
31
+            1 => '是',
32
+            0 => '否',
33
+        ],
34
+        'value'   => 0,
35
+    ],
36
+    [
37
+        'name'    => 'register_email_verify',
38
+        'title'   => '注册邮箱认证',
39
+        'type'    => 'radio',
40
+        'options' => [
41
+            1 => '是',
42
+            0 => '否',
43
+        ],
44
+        'value'   => 0,
45
+    ],
46
+    [
47
+        'name'    => 'openverification',
48
+        'title'   => '登陆验证码',
49
+        'type'    => 'radio',
50
+        'options' => [
51
+            1 => '开启',
52
+            0 => '关闭',
53
+        ],
54
+        'value'   => 1,
55
+    ],
56
+    [
57
+        'name'    => 'password_confirm',
58
+        'title'   => '显示密码确认',
59
+        'type'    => 'radio',
60
+        'options' => [
61
+            1 => '是',
62
+            0 => '否',
63
+        ],
64
+        'value'   => 0,
65
+        'tip'     => '显示或隐藏注册时候的密码确认',
66
+    ],
67
+    [
68
+        'name'    => 'remove_nickname',
69
+        'title'   => '注册不显示昵称',
70
+        'type'    => 'radio',
71
+        'options' => [
72
+            1 => '是',
73
+            0 => '否',
74
+        ],
75
+        'value'   => 0,
76
+    ],
77
+    [
78
+        'name'    => 'user_letter_avatar',
79
+        'title'   => '是否启用会员字母头像',
80
+        'type'    => 'radio',
81
+        'options' => [
82
+            1 => '是',
83
+            0 => '否',
84
+        ],
85
+        'value'   => 1,
86
+    ],
87
+    [
88
+        'name'  => 'rmb_point_rate',
89
+        'title' => '1元购买积分',
90
+        'type'  => 'text',
91
+        'value' => 10,
92
+    ],
93
+    [
94
+        'name'  => 'defualtpoint',
95
+        'title' => '会员默认积分',
96
+        'type'  => 'text',
97
+        'value' => 0,
98
+    ],
99
+    [
100
+        'name'  => 'defualtamount',
101
+        'title' => '会员默认资金',
102
+        'type'  => 'text',
103
+        'value' => 0,
104
+    ],
105
+];

+ 7
- 0
addons/member/info.ini View File

@@ -0,0 +1,7 @@
1
+name = member
2
+title = 会员插件
3
+description = 系统必备的会员基础功能!含会员组,会员投稿等强大功能
4
+author = 御宅男
5
+website = https://www.yzncms.com
6
+version = 1.1.4
7
+status = 1

+ 109
- 0
addons/member/install.sql View File

@@ -0,0 +1,109 @@
1
+CREATE TABLE IF NOT EXISTS `__PREFIX__member` (
2
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
3
+  `username` varchar(16) NOT NULL COMMENT '用户名',
4
+  `nickname` varchar(16) NOT NULL DEFAULT '' COMMENT '昵称',
5
+  `password` varchar(32) NOT NULL COMMENT '密码',
6
+  `encrypt` varchar(6) DEFAULT NULL COMMENT '加密因子',
7
+  `point` mediumint(8) NOT NULL DEFAULT '0' COMMENT '用户积分',
8
+  `amount` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '钱金总额',
9
+  `login` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数',
10
+  `email` varchar(32) NOT NULL DEFAULT '' COMMENT '电子邮箱',
11
+  `mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
12
+  `gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别:0=未知,1=男,2=女',
13
+  `birthday` date DEFAULT NULL COMMENT '生日',
14
+  `motto` varchar(255) DEFAULT '' COMMENT '签名',
15
+  `avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '头像',
16
+  `groupid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '用户组ID',
17
+  `modelid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '用户模型ID',
18
+  `vip` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'VIP会员',
19
+  `overduedate` int(10) unsigned DEFAULT NULL COMMENT '过期时间',
20
+  `reg_ip` varchar(50) NOT NULL DEFAULT '' COMMENT '注册IP',
21
+  `reg_time` int(10) unsigned DEFAULT NULL COMMENT '注册时间',
22
+  `last_login_ip` varchar(50) NOT NULL DEFAULT '' COMMENT '最后登录IP',
23
+  `last_login_time` int(10) unsigned DEFAULT NULL COMMENT '最后登录时间',
24
+  `ischeck_email` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否验证过邮箱',
25
+  `ischeck_mobile` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否验证过手机',
26
+  `token` varchar(50) DEFAULT '' COMMENT 'Token',
27
+  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
28
+  PRIMARY KEY (`id`),
29
+  UNIQUE KEY `username` (`username`),
30
+  KEY `email` (`email`),
31
+  KEY `mobile` (`mobile`)
32
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员表';
33
+
34
+CREATE TABLE IF NOT EXISTS `__PREFIX__member_group` (
35
+  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT '会员组id',
36
+  `name` varchar(15) NOT NULL COMMENT '用户组名称',
37
+  `issystem` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否是系统组',
38
+  `starnum` tinyint(2) unsigned NOT NULL COMMENT '会员组星星数',
39
+  `point` smallint(6) unsigned NOT NULL COMMENT '积分范围',
40
+  `allowmessage` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '许允发短消息数量',
41
+  `allowvisit` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否允许访问',
42
+  `allowpost` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否允许发稿',
43
+  `allowpostverify` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否投稿不需审核',
44
+  `allowsearch` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否允许搜索',
45
+  `allowupgrade` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否允许自主升级',
46
+  `allowsendmessage` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '允许发送短消息',
47
+  `allowpostnum` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '每天允许发文章数',
48
+  `allowattachment` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否允许上传附件',
49
+  `price_y` decimal(8,2) unsigned NOT NULL DEFAULT '0.00',
50
+  `price_m` decimal(8,2) unsigned NOT NULL DEFAULT '0.00',
51
+  `price_d` decimal(8,2) unsigned NOT NULL DEFAULT '0.00',
52
+  `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '用户组图标',
53
+  `usernamecolor` varchar(7) NOT NULL DEFAULT '' COMMENT '用户名颜色',
54
+  `description` varchar(100) NOT NULL DEFAULT '' COMMENT '描述',
55
+  `listorder` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
56
+  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
57
+  `expand` mediumtext COMMENT '拓展',
58
+  PRIMARY KEY (`id`)
59
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员组';
60
+
61
+CREATE TABLE IF NOT EXISTS `__PREFIX__member_token` (
62
+  `token` varchar(50) NOT NULL COMMENT 'Token',
63
+  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID',
64
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
65
+  `expire_time` int(10) unsigned DEFAULT NULL COMMENT '过期时间',
66
+  PRIMARY KEY (`token`)
67
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员Token表';
68
+
69
+CREATE TABLE IF NOT EXISTS `__PREFIX__member_amount_log` (
70
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
71
+  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID',
72
+  `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更余额',
73
+  `before` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更前余额',
74
+  `after` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '变更后余额',
75
+  `remark` varchar(255) DEFAULT '' COMMENT '备注',
76
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
77
+  PRIMARY KEY (`id`)
78
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员余额变动表';
79
+
80
+CREATE TABLE IF NOT EXISTS `__PREFIX__member_point_log` (
81
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
82
+  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '会员ID',
83
+  `point` int(10) NOT NULL DEFAULT '0' COMMENT '变更积分',
84
+  `before` int(10) NOT NULL DEFAULT '0' COMMENT '变更前积分',
85
+  `after` int(10) NOT NULL DEFAULT '0' COMMENT '变更后积分',
86
+  `remark` varchar(255) DEFAULT '' COMMENT '备注',
87
+  `create_time` int(10) unsigned DEFAULT NULL COMMENT '创建时间',
88
+  PRIMARY KEY (`id`)
89
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT='会员积分变动表';
90
+
91
+INSERT INTO `__PREFIX__member_group` VALUES ('1', '禁止访问', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '0','0.00','0.00', '0.00', '', '', '0', '10', '1', '');
92
+INSERT INTO `__PREFIX__member_group` VALUES ('2', '新手上路', '1', '1', '50', '100', '1', '1', '0', '0', '1', '1', '0', '0','50.00', '10.00', '1.00' ,'', '', '', '8', '1', '');
93
+INSERT INTO `__PREFIX__member_group` VALUES ('6', '注册会员', '1', '2', '100', '150', '0', '1', '0', '0', '1', '1', '0', '0','300.00', '30.00', '1.00', '', '', '', '7', '1', '');
94
+INSERT INTO `__PREFIX__member_group` VALUES ('4', '中级会员', '1', '3', '150', '500', '1', '1', '0', '1', '1', '1', '0', '0','360.00', '60.00', '1.00', '', '', '', '6', '1', '');
95
+INSERT INTO `__PREFIX__member_group` VALUES ('5', '高级会员', '1', '5', '300', '999', '1', '1', '0', '1', '1', '1', '0', '0','500.00', '90.00', '1.00', '', '', '', '5', '1', '');
96
+INSERT INTO `__PREFIX__member_group` VALUES ('7', '邮件认证', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0.00', '0.00', '0.00','', '#000000', '', '4', '1', '');
97
+INSERT INTO `__PREFIX__member_group` VALUES ('8', '游客', '1', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0','0.00', '0.00', '0.00', '', '', '', '9', '1', '');
98
+
99
+-- 1.1.0 --
100
+ALTER TABLE `__PREFIX__member` ENGINE = InnoDB;
101
+ALTER TABLE `__PREFIX__member_group` ENGINE = InnoDB;
102
+ALTER TABLE `__PREFIX__member_token` ENGINE = InnoDB;
103
+ALTER TABLE `__PREFIX__member_amount_log` ENGINE = InnoDB;
104
+ALTER TABLE `__PREFIX__member_point_log` ENGINE = InnoDB;
105
+
106
+-- 1.1.1 --
107
+ALTER TABLE `__PREFIX__member` ADD COLUMN `gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别:0=未知,1=男,2=女' AFTER `mobile`,
108
+ADD COLUMN `birthday` date DEFAULT NULL COMMENT '生日' AFTER `gender`,
109
+ADD COLUMN `motto` varchar(255) DEFAULT '' COMMENT '签名' AFTER `birthday`;

+ 77
- 0
addons/phpmailer/Phpmailer.php View File

@@ -0,0 +1,77 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | Yzncms [ 御宅男工作室 ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2018 http://yzncms.com All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 御宅男 <530765310@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 邮件插件
14
+// +----------------------------------------------------------------------
15
+namespace addons\phpmailer;
16
+
17
+use addons\phpmailer\library\Mailer;
18
+use think\Addons;
19
+use think\Loader;
20
+
21
+class Phpmailer extends Addons
22
+{
23
+    //安装
24
+    public function install()
25
+    {
26
+        return true;
27
+    }
28
+
29
+    //卸载
30
+    public function uninstall()
31
+    {
32
+        return true;
33
+    }
34
+
35
+    /**
36
+     * 邮箱发送行为
37
+     * @param   Sms     $params
38
+     * @return  boolean
39
+     */
40
+    public function emsSend($params)
41
+    {
42
+        $obj    = new Mailer($this->getAddonConfig());
43
+        $result = $obj->to($params['email'])->subject('邮件验证')->message("你的邮件验证码是:{$params['code']}")->send();
44
+        return $result;
45
+    }
46
+
47
+    /**
48
+     * 邮箱发送通知
49
+     * @param   array   $params
50
+     * @return  boolean
51
+     */
52
+    public function emsNotice($params)
53
+    {
54
+        $obj    = new Mailer($this->getAddonConfig());
55
+        $result = $obj->to($params['email'])->subject($params['title'])->message($params['msg'])->send();
56
+        return $result;
57
+    }
58
+
59
+    /**
60
+     * 检测验证是否正确
61
+     * @param   Sms     $params
62
+     * @return  boolean
63
+     */
64
+    public function emsCheck($params)
65
+    {
66
+        return true;
67
+    }
68
+
69
+    /**
70
+     * 添加命名空间
71
+     */
72
+    public function appInit()
73
+    {
74
+        Loader::addNamespace('PHPMailer\\PHPMailer', ADDON_PATH . 'phpmailer' . DS . 'SDK' . DS . 'src' . DS);
75
+    }
76
+
77
+}

+ 46
- 0
addons/phpmailer/SDK/COMMITMENT View File

@@ -0,0 +1,46 @@
1
+GPL Cooperation Commitment
2
+Version 1.0
3
+
4
+Before filing or continuing to prosecute any legal proceeding or claim
5
+(other than a Defensive Action) arising from termination of a Covered
6
+License, we commit to extend to the person or entity ('you') accused
7
+of violating the Covered License the following provisions regarding
8
+cure and reinstatement, taken from GPL version 3. As used here, the
9
+term 'this License' refers to the specific Covered License being
10
+enforced.
11
+
12
+    However, if you cease all violation of this License, then your
13
+    license from a particular copyright holder is reinstated (a)
14
+    provisionally, unless and until the copyright holder explicitly
15
+    and finally terminates your license, and (b) permanently, if the
16
+    copyright holder fails to notify you of the violation by some
17
+    reasonable means prior to 60 days after the cessation.
18
+
19
+    Moreover, your license from a particular copyright holder is
20
+    reinstated permanently if the copyright holder notifies you of the
21
+    violation by some reasonable means, this is the first time you
22
+    have received notice of violation of this License (for any work)
23
+    from that copyright holder, and you cure the violation prior to 30
24
+    days after your receipt of the notice.
25
+
26
+We intend this Commitment to be irrevocable, and binding and
27
+enforceable against us and assignees of or successors to our
28
+copyrights.
29
+
30
+Definitions
31
+
32
+'Covered License' means the GNU General Public License, version 2
33
+(GPLv2), the GNU Lesser General Public License, version 2.1
34
+(LGPLv2.1), or the GNU Library General Public License, version 2
35
+(LGPLv2), all as published by the Free Software Foundation.
36
+
37
+'Defensive Action' means a legal proceeding or claim that We bring
38
+against you in response to a prior proceeding or claim initiated by
39
+you or your affiliate.
40
+
41
+'We' means each contributor to this repository as of the date of
42
+inclusion of this file, including subsidiaries of a corporate
43
+contributor.
44
+
45
+This work is available under a Creative Commons Attribution-ShareAlike
46
+4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/).

+ 502
- 0
addons/phpmailer/SDK/LICENSE View File

@@ -0,0 +1,502 @@
1
+                  GNU LESSER GENERAL PUBLIC LICENSE
2
+                       Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+[This is the first released version of the Lesser GPL.  It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+                            Preamble
14
+
15
+  The licenses for most software are designed to take away your
16
+freedom to share and change it.  By contrast, the GNU General Public
17
+Licenses are intended to guarantee your freedom to share and change
18
+free software--to make sure the software is free for all its users.
19
+
20
+  This license, the Lesser General Public License, applies to some
21
+specially designated software packages--typically libraries--of the
22
+Free Software Foundation and other authors who decide to use it.  You
23
+can use it too, but we suggest you first think carefully about whether
24
+this license or the ordinary General Public License is the better
25
+strategy to use in any particular case, based on the explanations below.
26
+
27
+  When we speak of free software, we are referring to freedom of use,
28
+not price.  Our General Public Licenses are designed to make sure that
29
+you have the freedom to distribute copies of free software (and charge
30
+for this service if you wish); that you receive source code or can get
31
+it if you want it; that you can change the software and use pieces of
32
+it in new free programs; and that you are informed that you can do
33
+these things.
34
+
35
+  To protect your rights, we need to make restrictions that forbid
36
+distributors to deny you these rights or to ask you to surrender these
37
+rights.  These restrictions translate to certain responsibilities for
38
+you if you distribute copies of the library or if you modify it.
39
+
40
+  For example, if you distribute copies of the library, whether gratis
41
+or for a fee, you must give the recipients all the rights that we gave
42
+you.  You must make sure that they, too, receive or can get the source
43
+code.  If you link other code with the library, you must provide
44
+complete object files to the recipients, so that they can relink them
45
+with the library after making changes to the library and recompiling
46
+it.  And you must show them these terms so they know their rights.
47
+
48
+  We protect your rights with a two-step method: (1) we copyright the
49
+library, and (2) we offer you this license, which gives you legal
50
+permission to copy, distribute and/or modify the library.
51
+
52
+  To protect each distributor, we want to make it very clear that
53
+there is no warranty for the free library.  Also, if the library is
54
+modified by someone else and passed on, the recipients should know
55
+that what they have is not the original version, so that the original
56
+author's reputation will not be affected by problems that might be
57
+introduced by others.
58
+
59
+  Finally, software patents pose a constant threat to the existence of
60
+any free program.  We wish to make sure that a company cannot
61
+effectively restrict the users of a free program by obtaining a
62
+restrictive license from a patent holder.  Therefore, we insist that
63
+any patent license obtained for a version of the library must be
64
+consistent with the full freedom of use specified in this license.
65
+
66
+  Most GNU software, including some libraries, is covered by the
67
+ordinary GNU General Public License.  This license, the GNU Lesser
68
+General Public License, applies to certain designated libraries, and
69
+is quite different from the ordinary General Public License.  We use
70
+this license for certain libraries in order to permit linking those
71
+libraries into non-free programs.
72
+
73
+  When a program is linked with a library, whether statically or using
74
+a shared library, the combination of the two is legally speaking a
75
+combined work, a derivative of the original library.  The ordinary
76
+General Public License therefore permits such linking only if the
77
+entire combination fits its criteria of freedom.  The Lesser General
78
+Public License permits more lax criteria for linking other code with
79
+the library.
80
+
81
+  We call this license the "Lesser" General Public License because it
82
+does Less to protect the user's freedom than the ordinary General
83
+Public License.  It also provides other free software developers Less
84
+of an advantage over competing non-free programs.  These disadvantages
85
+are the reason we use the ordinary General Public License for many
86
+libraries.  However, the Lesser license provides advantages in certain
87
+special circumstances.
88
+
89
+  For example, on rare occasions, there may be a special need to
90
+encourage the widest possible use of a certain library, so that it becomes
91
+a de-facto standard.  To achieve this, non-free programs must be
92
+allowed to use the library.  A more frequent case is that a free
93
+library does the same job as widely used non-free libraries.  In this
94
+case, there is little to gain by limiting the free library to free
95
+software only, so we use the Lesser General Public License.
96
+
97
+  In other cases, permission to use a particular library in non-free
98
+programs enables a greater number of people to use a large body of
99
+free software.  For example, permission to use the GNU C Library in
100
+non-free programs enables many more people to use the whole GNU
101
+operating system, as well as its variant, the GNU/Linux operating
102
+system.
103
+
104
+  Although the Lesser General Public License is Less protective of the
105
+users' freedom, it does ensure that the user of a program that is
106
+linked with the Library has the freedom and the wherewithal to run
107
+that program using a modified version of the Library.
108
+
109
+  The precise terms and conditions for copying, distribution and
110
+modification follow.  Pay close attention to the difference between a
111
+"work based on the library" and a "work that uses the library".  The
112
+former contains code derived from the library, whereas the latter must
113
+be combined with the library in order to run.
114
+
115
+                  GNU LESSER GENERAL PUBLIC LICENSE
116
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+  0. This License Agreement applies to any software library or other
119
+program which contains a notice placed by the copyright holder or
120
+other authorized party saying it may be distributed under the terms of
121
+this Lesser General Public License (also called "this License").
122
+Each licensee is addressed as "you".
123
+
124
+  A "library" means a collection of software functions and/or data
125
+prepared so as to be conveniently linked with application programs
126
+(which use some of those functions and data) to form executables.
127
+
128
+  The "Library", below, refers to any such software library or work
129
+which has been distributed under these terms.  A "work based on the
130
+Library" means either the Library or any derivative work under
131
+copyright law: that is to say, a work containing the Library or a
132
+portion of it, either verbatim or with modifications and/or translated
133
+straightforwardly into another language.  (Hereinafter, translation is
134
+included without limitation in the term "modification".)
135
+
136
+  "Source code" for a work means the preferred form of the work for
137
+making modifications to it.  For a library, complete source code means
138
+all the source code for all modules it contains, plus any associated
139
+interface definition files, plus the scripts used to control compilation
140
+and installation of the library.
141
+
142
+  Activities other than copying, distribution and modification are not
143
+covered by this License; they are outside its scope.  The act of
144
+running a program using the Library is not restricted, and output from
145
+such a program is covered only if its contents constitute a work based
146
+on the Library (independent of the use of the Library in a tool for
147
+writing it).  Whether that is true depends on what the Library does
148
+and what the program that uses the Library does.
149
+
150
+  1. You may copy and distribute verbatim copies of the Library's
151
+complete source code as you receive it, in any medium, provided that
152
+you conspicuously and appropriately publish on each copy an
153
+appropriate copyright notice and disclaimer of warranty; keep intact
154
+all the notices that refer to this License and to the absence of any
155
+warranty; and distribute a copy of this License along with the
156
+Library.
157
+
158
+  You may charge a fee for the physical act of transferring a copy,
159
+and you may at your option offer warranty protection in exchange for a
160
+fee.
161
+
162
+  2. You may modify your copy or copies of the Library or any portion
163
+of it, thus forming a work based on the Library, and copy and
164
+distribute such modifications or work under the terms of Section 1
165
+above, provided that you also meet all of these conditions:
166
+
167
+    a) The modified work must itself be a software library.
168
+
169
+    b) You must cause the files modified to carry prominent notices
170
+    stating that you changed the files and the date of any change.
171
+
172
+    c) You must cause the whole of the work to be licensed at no
173
+    charge to all third parties under the terms of this License.
174
+
175
+    d) If a facility in the modified Library refers to a function or a
176
+    table of data to be supplied by an application program that uses
177
+    the facility, other than as an argument passed when the facility
178
+    is invoked, then you must make a good faith effort to ensure that,
179
+    in the event an application does not supply such function or
180
+    table, the facility still operates, and performs whatever part of
181
+    its purpose remains meaningful.
182
+
183
+    (For example, a function in a library to compute square roots has
184
+    a purpose that is entirely well-defined independent of the
185
+    application.  Therefore, Subsection 2d requires that any
186
+    application-supplied function or table used by this function must
187
+    be optional: if the application does not supply it, the square
188
+    root function must still compute square roots.)
189
+
190
+These requirements apply to the modified work as a whole.  If
191
+identifiable sections of that work are not derived from the Library,
192
+and can be reasonably considered independent and separate works in
193
+themselves, then this License, and its terms, do not apply to those
194
+sections when you distribute them as separate works.  But when you
195
+distribute the same sections as part of a whole which is a work based
196
+on the Library, the distribution of the whole must be on the terms of
197
+this License, whose permissions for other licensees extend to the
198
+entire whole, and thus to each and every part regardless of who wrote
199
+it.
200
+
201
+Thus, it is not the intent of this section to claim rights or contest
202
+your rights to work written entirely by you; rather, the intent is to
203
+exercise the right to control the distribution of derivative or
204
+collective works based on the Library.
205
+
206
+In addition, mere aggregation of another work not based on the Library
207
+with the Library (or with a work based on the Library) on a volume of
208
+a storage or distribution medium does not bring the other work under
209
+the scope of this License.
210
+
211
+  3. You may opt to apply the terms of the ordinary GNU General Public
212
+License instead of this License to a given copy of the Library.  To do
213
+this, you must alter all the notices that refer to this License, so
214
+that they refer to the ordinary GNU General Public License, version 2,
215
+instead of to this License.  (If a newer version than version 2 of the
216
+ordinary GNU General Public License has appeared, then you can specify
217
+that version instead if you wish.)  Do not make any other change in
218
+these notices.
219
+
220
+  Once this change is made in a given copy, it is irreversible for
221
+that copy, so the ordinary GNU General Public License applies to all
222
+subsequent copies and derivative works made from that copy.
223
+
224
+  This option is useful when you wish to copy part of the code of
225
+the Library into a program that is not a library.
226
+
227
+  4. You may copy and distribute the Library (or a portion or
228
+derivative of it, under Section 2) in object code or executable form
229
+under the terms of Sections 1 and 2 above provided that you accompany
230
+it with the complete corresponding machine-readable source code, which
231
+must be distributed under the terms of Sections 1 and 2 above on a
232
+medium customarily used for software interchange.
233
+
234
+  If distribution of object code is made by offering access to copy
235
+from a designated place, then offering equivalent access to copy the
236
+source code from the same place satisfies the requirement to
237
+distribute the source code, even though third parties are not
238
+compelled to copy the source along with the object code.
239
+
240
+  5. A program that contains no derivative of any portion of the
241
+Library, but is designed to work with the Library by being compiled or
242
+linked with it, is called a "work that uses the Library".  Such a
243
+work, in isolation, is not a derivative work of the Library, and
244
+therefore falls outside the scope of this License.
245
+
246
+  However, linking a "work that uses the Library" with the Library
247
+creates an executable that is a derivative of the Library (because it
248
+contains portions of the Library), rather than a "work that uses the
249
+library".  The executable is therefore covered by this License.
250
+Section 6 states terms for distribution of such executables.
251
+
252
+  When a "work that uses the Library" uses material from a header file
253
+that is part of the Library, the object code for the work may be a
254
+derivative work of the Library even though the source code is not.
255
+Whether this is true is especially significant if the work can be
256
+linked without the Library, or if the work is itself a library.  The
257
+threshold for this to be true is not precisely defined by law.
258
+
259
+  If such an object file uses only numerical parameters, data
260
+structure layouts and accessors, and small macros and small inline
261
+functions (ten lines or less in length), then the use of the object
262
+file is unrestricted, regardless of whether it is legally a derivative
263
+work.  (Executables containing this object code plus portions of the
264
+Library will still fall under Section 6.)
265
+
266
+  Otherwise, if the work is a derivative of the Library, you may
267
+distribute the object code for the work under the terms of Section 6.
268
+Any executables containing that work also fall under Section 6,
269
+whether or not they are linked directly with the Library itself.
270
+
271
+  6. As an exception to the Sections above, you may also combine or
272
+link a "work that uses the Library" with the Library to produce a
273
+work containing portions of the Library, and distribute that work
274
+under terms of your choice, provided that the terms permit
275
+modification of the work for the customer's own use and reverse
276
+engineering for debugging such modifications.
277
+
278
+  You must give prominent notice with each copy of the work that the
279
+Library is used in it and that the Library and its use are covered by
280
+this License.  You must supply a copy of this License.  If the work
281
+during execution displays copyright notices, you must include the
282
+copyright notice for the Library among them, as well as a reference
283
+directing the user to the copy of this License.  Also, you must do one
284
+of these things:
285
+
286
+    a) Accompany the work with the complete corresponding
287
+    machine-readable source code for the Library including whatever
288
+    changes were used in the work (which must be distributed under
289
+    Sections 1 and 2 above); and, if the work is an executable linked
290
+    with the Library, with the complete machine-readable "work that
291
+    uses the Library", as object code and/or source code, so that the
292
+    user can modify the Library and then relink to produce a modified
293
+    executable containing the modified Library.  (It is understood
294
+    that the user who changes the contents of definitions files in the
295
+    Library will not necessarily be able to recompile the application
296
+    to use the modified definitions.)
297
+
298
+    b) Use a suitable shared library mechanism for linking with the
299
+    Library.  A suitable mechanism is one that (1) uses at run time a
300
+    copy of the library already present on the user's computer system,
301
+    rather than copying library functions into the executable, and (2)
302
+    will operate properly with a modified version of the library, if
303
+    the user installs one, as long as the modified version is
304
+    interface-compatible with the version that the work was made with.
305
+
306
+    c) Accompany the work with a written offer, valid for at
307
+    least three years, to give the same user the materials
308
+    specified in Subsection 6a, above, for a charge no more
309
+    than the cost of performing this distribution.
310
+
311
+    d) If distribution of the work is made by offering access to copy
312
+    from a designated place, offer equivalent access to copy the above
313
+    specified materials from the same place.
314
+
315
+    e) Verify that the user has already received a copy of these
316
+    materials or that you have already sent this user a copy.
317
+
318
+  For an executable, the required form of the "work that uses the
319
+Library" must include any data and utility programs needed for
320
+reproducing the executable from it.  However, as a special exception,
321
+the materials to be distributed need not include anything that is
322
+normally distributed (in either source or binary form) with the major
323
+components (compiler, kernel, and so on) of the operating system on
324
+which the executable runs, unless that component itself accompanies
325
+the executable.
326
+
327
+  It may happen that this requirement contradicts the license
328
+restrictions of other proprietary libraries that do not normally
329
+accompany the operating system.  Such a contradiction means you cannot
330
+use both them and the Library together in an executable that you
331
+distribute.
332
+
333
+  7. You may place library facilities that are a work based on the
334
+Library side-by-side in a single library together with other library
335
+facilities not covered by this License, and distribute such a combined
336
+library, provided that the separate distribution of the work based on
337
+the Library and of the other library facilities is otherwise
338
+permitted, and provided that you do these two things:
339
+
340
+    a) Accompany the combined library with a copy of the same work
341
+    based on the Library, uncombined with any other library
342
+    facilities.  This must be distributed under the terms of the
343
+    Sections above.
344
+
345
+    b) Give prominent notice with the combined library of the fact
346
+    that part of it is a work based on the Library, and explaining
347
+    where to find the accompanying uncombined form of the same work.
348
+
349
+  8. You may not copy, modify, sublicense, link with, or distribute
350
+the Library except as expressly provided under this License.  Any
351
+attempt otherwise to copy, modify, sublicense, link with, or
352
+distribute the Library is void, and will automatically terminate your
353
+rights under this License.  However, parties who have received copies,
354
+or rights, from you under this License will not have their licenses
355
+terminated so long as such parties remain in full compliance.
356
+
357
+  9. You are not required to accept this License, since you have not
358
+signed it.  However, nothing else grants you permission to modify or
359
+distribute the Library or its derivative works.  These actions are
360
+prohibited by law if you do not accept this License.  Therefore, by
361
+modifying or distributing the Library (or any work based on the
362
+Library), you indicate your acceptance of this License to do so, and
363
+all its terms and conditions for copying, distributing or modifying
364
+the Library or works based on it.
365
+
366
+  10. Each time you redistribute the Library (or any work based on the
367
+Library), the recipient automatically receives a license from the
368
+original licensor to copy, distribute, link with or modify the Library
369
+subject to these terms and conditions.  You may not impose any further
370
+restrictions on the recipients' exercise of the rights granted herein.
371
+You are not responsible for enforcing compliance by third parties with
372
+this License.
373
+
374
+  11. If, as a consequence of a court judgment or allegation of patent
375
+infringement or for any other reason (not limited to patent issues),
376
+conditions are imposed on you (whether by court order, agreement or
377
+otherwise) that contradict the conditions of this License, they do not
378
+excuse you from the conditions of this License.  If you cannot
379
+distribute so as to satisfy simultaneously your obligations under this
380
+License and any other pertinent obligations, then as a consequence you
381
+may not distribute the Library at all.  For example, if a patent
382
+license would not permit royalty-free redistribution of the Library by
383
+all those who receive copies directly or indirectly through you, then
384
+the only way you could satisfy both it and this License would be to
385
+refrain entirely from distribution of the Library.
386
+
387
+If any portion of this section is held invalid or unenforceable under any
388
+particular circumstance, the balance of the section is intended to apply,
389
+and the section as a whole is intended to apply in other circumstances.
390
+
391
+It is not the purpose of this section to induce you to infringe any
392
+patents or other property right claims or to contest validity of any
393
+such claims; this section has the sole purpose of protecting the
394
+integrity of the free software distribution system which is
395
+implemented by public license practices.  Many people have made
396
+generous contributions to the wide range of software distributed
397
+through that system in reliance on consistent application of that
398
+system; it is up to the author/donor to decide if he or she is willing
399
+to distribute software through any other system and a licensee cannot
400
+impose that choice.
401
+
402
+This section is intended to make thoroughly clear what is believed to
403
+be a consequence of the rest of this License.
404
+
405
+  12. If the distribution and/or use of the Library is restricted in
406
+certain countries either by patents or by copyrighted interfaces, the
407
+original copyright holder who places the Library under this License may add
408
+an explicit geographical distribution limitation excluding those countries,
409
+so that distribution is permitted only in or among countries not thus
410
+excluded.  In such case, this License incorporates the limitation as if
411
+written in the body of this License.
412
+
413
+  13. The Free Software Foundation may publish revised and/or new
414
+versions of the Lesser General Public License from time to time.
415
+Such new versions will be similar in spirit to the present version,
416
+but may differ in detail to address new problems or concerns.
417
+
418
+Each version is given a distinguishing version number.  If the Library
419
+specifies a version number of this License which applies to it and
420
+"any later version", you have the option of following the terms and
421
+conditions either of that version or of any later version published by
422
+the Free Software Foundation.  If the Library does not specify a
423
+license version number, you may choose any version ever published by
424
+the Free Software Foundation.
425
+
426
+  14. If you wish to incorporate parts of the Library into other free
427
+programs whose distribution conditions are incompatible with these,
428
+write to the author to ask for permission.  For software which is
429
+copyrighted by the Free Software Foundation, write to the Free
430
+Software Foundation; we sometimes make exceptions for this.  Our
431
+decision will be guided by the two goals of preserving the free status
432
+of all derivatives of our free software and of promoting the sharing
433
+and reuse of software generally.
434
+
435
+                            NO WARRANTY
436
+
437
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+DAMAGES.
457
+
458
+                     END OF TERMS AND CONDITIONS
459
+
460
+           How to Apply These Terms to Your New Libraries
461
+
462
+  If you develop a new library, and you want it to be of the greatest
463
+possible use to the public, we recommend making it free software that
464
+everyone can redistribute and change.  You can do so by permitting
465
+redistribution under these terms (or, alternatively, under the terms of the
466
+ordinary General Public License).
467
+
468
+  To apply these terms, attach the following notices to the library.  It is
469
+safest to attach them to the start of each source file to most effectively
470
+convey the exclusion of warranty; and each file should have at least the
471
+"copyright" line and a pointer to where the full notice is found.
472
+
473
+    <one line to give the library's name and a brief idea of what it does.>
474
+    Copyright (C) <year>  <name of author>
475
+
476
+    This library is free software; you can redistribute it and/or
477
+    modify it under the terms of the GNU Lesser General Public
478
+    License as published by the Free Software Foundation; either
479
+    version 2.1 of the License, or (at your option) any later version.
480
+
481
+    This library is distributed in the hope that it will be useful,
482
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
484
+    Lesser General Public License for more details.
485
+
486
+    You should have received a copy of the GNU Lesser General Public
487
+    License along with this library; if not, write to the Free Software
488
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
489
+
490
+Also add information on how to contact you by electronic and paper mail.
491
+
492
+You should also get your employer (if you work as a programmer) or your
493
+school, if any, to sign a "copyright disclaimer" for the library, if
494
+necessary.  Here is a sample; alter the names:
495
+
496
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+  <signature of Ty Coon>, 1 April 1990
500
+  Ty Coon, President of Vice
501
+
502
+That's all there is to it!

+ 230
- 0
addons/phpmailer/SDK/README.md View File

@@ -0,0 +1,230 @@
1
+[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://supportukrainenow.org/)
2
+
3
+![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png)
4
+
5
+# PHPMailer – A full-featured email creation and transfer class for PHP
6
+
7
+[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions)
8
+[![codecov.io](https://codecov.io/gh/PHPMailer/PHPMailer/branch/master/graph/badge.svg?token=iORZpwmYmM)](https://codecov.io/gh/PHPMailer/PHPMailer)
9
+[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer)
10
+[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer)
11
+[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer)
12
+[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/)
13
+[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer/badge)](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer)
14
+
15
+## Features
16
+- Probably the world's most popular code for sending email from PHP!
17
+- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more
18
+- Integrated SMTP support – send without a local mail server
19
+- Send emails with multiple To, CC, BCC, and Reply-to addresses
20
+- Multipart/alternative emails for mail clients that do not read HTML email
21
+- Add attachments, including inline
22
+- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings
23
+- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports
24
+- Validates email addresses automatically
25
+- Protects against header injection attacks
26
+- Error messages in over 50 languages!
27
+- DKIM and S/MIME signing support
28
+- Compatible with PHP 5.5 and later, including PHP 8.2
29
+- Namespaced to prevent name clashes
30
+- Much more!
31
+
32
+## Why you might need it
33
+Many PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments.
34
+
35
+Formatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe!
36
+
37
+The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost.
38
+
39
+*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that
40
+you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/)
41
+, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail), etc.
42
+
43
+## License
44
+This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution.
45
+
46
+## Installation & loading
47
+PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file:
48
+
49
+```json
50
+"phpmailer/phpmailer": "^6.8.0"
51
+```
52
+
53
+or run
54
+
55
+```sh
56
+composer require phpmailer/phpmailer
57
+```
58
+
59
+Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer.
60
+
61
+If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`.
62
+
63
+Alternatively, if you're not using Composer, you
64
+can [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually:
65
+
66
+```php
67
+<?php
68
+use PHPMailer\PHPMailer\PHPMailer;
69
+use PHPMailer\PHPMailer\Exception;
70
+
71
+require 'path/to/PHPMailer/src/Exception.php';
72
+require 'path/to/PHPMailer/src/PHPMailer.php';
73
+require 'path/to/PHPMailer/src/SMTP.php';
74
+```
75
+
76
+If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally.
77
+
78
+## Legacy versions
79
+PHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases.
80
+
81
+### Upgrading from 5.2
82
+The biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details.
83
+
84
+### Minimal installation
85
+While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP (*very* unlikely!), you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer!
86
+
87
+## A Simple Example
88
+
89
+```php
90
+<?php
91
+//Import PHPMailer classes into the global namespace
92
+//These must be at the top of your script, not inside a function
93
+use PHPMailer\PHPMailer\PHPMailer;
94
+use PHPMailer\PHPMailer\SMTP;
95
+use PHPMailer\PHPMailer\Exception;
96
+
97
+//Load Composer's autoloader
98
+require 'vendor/autoload.php';
99
+
100
+//Create an instance; passing `true` enables exceptions
101
+$mail = new PHPMailer(true);
102
+
103
+try {
104
+    //Server settings
105
+    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
106
+    $mail->isSMTP();                                            //Send using SMTP
107
+    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
108
+    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
109
+    $mail->Username   = 'user@example.com';                     //SMTP username
110
+    $mail->Password   = 'secret';                               //SMTP password
111
+    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
112
+    $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
113
+
114
+    //Recipients
115
+    $mail->setFrom('from@example.com', 'Mailer');
116
+    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
117
+    $mail->addAddress('ellen@example.com');               //Name is optional
118
+    $mail->addReplyTo('info@example.com', 'Information');
119
+    $mail->addCC('cc@example.com');
120
+    $mail->addBCC('bcc@example.com');
121
+
122
+    //Attachments
123
+    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
124
+    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name
125
+
126
+    //Content
127
+    $mail->isHTML(true);                                  //Set email format to HTML
128
+    $mail->Subject = 'Here is the subject';
129
+    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
130
+    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
131
+
132
+    $mail->send();
133
+    echo 'Message has been sent';
134
+} catch (Exception $e) {
135
+    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
136
+}
137
+```
138
+
139
+You'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through Gmail, building contact forms, sending to mailing lists, and more.
140
+
141
+If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance.
142
+
143
+That's it. You should now be ready to use PHPMailer!
144
+
145
+## Localization
146
+PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder, you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this:
147
+
148
+```php
149
+//To load the French version
150
+$mail->setLanguage('fr', '/optional/path/to/language/directory/');
151
+```
152
+
153
+We welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations.
154
+
155
+## Documentation
156
+Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated.
157
+
158
+Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps).
159
+
160
+To reduce PHPMailer's deployed code footprint, examples are not included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly.
161
+
162
+Complete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/).
163
+
164
+You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption.
165
+
166
+If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting).
167
+
168
+## Tests
169
+[PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions.
170
+
171
+[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions)
172
+
173
+If this isn't passing, is there something you can do to help?
174
+
175
+## Security
176
+Please disclose any vulnerabilities found responsibly – report security issues to the maintainers privately.
177
+
178
+See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). 
179
+
180
+## Contributing
181
+Please submit bug reports, suggestions, and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).
182
+
183
+We're particularly interested in fixing edge cases, expanding test coverage, and updating translations.
184
+
185
+If you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it.
186
+
187
+If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone:
188
+
189
+```sh
190
+git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
191
+```
192
+
193
+Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.
194
+
195
+## Sponsorship
196
+Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system.
197
+
198
+<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="550" alt="Smartmessages.net privacy-first email marketing logo"></a>
199
+
200
+Donations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say "thank you" to PHPMailer's maintainers and contributors – just click the "Sponsor" button [on the project page](https://github.com/PHPMailer/PHPMailer). If your company uses PHPMailer, consider taking part in Tidelift's enterprise support programme.
201
+
202
+## PHPMailer For Enterprise
203
+
204
+Available as part of the Tidelift Subscription.
205
+
206
+The maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial
207
+support and maintenance for the open-source packages you use to build your applications. Save time, reduce risk, and
208
+improve code health, while paying the maintainers of the exact packages you
209
+use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
210
+
211
+## Changelog
212
+See [changelog](changelog.md).
213
+
214
+## History
215
+- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/).
216
+- [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004.
217
+- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski.
218
+- Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008.
219
+- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013.
220
+- PHPMailer moves to [the PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013.
221
+
222
+### What's changed since moving from SourceForge?
223
+- Official successor to the SourceForge and Google Code projects.
224
+- Test suite.
225
+- Continuous integration with GitHub Actions.
226
+- Composer support.
227
+- Public development.
228
+- Additional languages and language strings.
229
+- CRAM-MD5 authentication support.
230
+- Preserves full repo history of authors, commits, and branches from the original SourceForge project.

+ 37
- 0
addons/phpmailer/SDK/SECURITY.md View File

@@ -0,0 +1,37 @@
1
+# Security notices relating to PHPMailer
2
+
3
+Please disclose any security issues or vulnerabilities found through [Tidelift's coordinated disclosure system](https://tidelift.com/security) or to the maintainers privately.
4
+
5
+PHPMailer 6.4.1 and earlier contain a vulnerability that can result in untrusted code being called (if such code is injected into the host project's scope by other means). If the `$patternselect` parameter to `validateAddress()` is set to `'php'` (the default, defined by `PHPMailer::$validator`), and the global namespace contains a function called `php`, it will be called in preference to the built-in validator of the same name. Mitigated in PHPMailer 6.5.0 by denying the use of simple strings as validator function names. Recorded as [CVE-2021-3603](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-3603). Reported by [Vikrant Singh Chauhan](mailto:vi@hackberry.xyz) via [huntr.dev](https://www.huntr.dev/).
6
+
7
+PHPMailer versions 6.4.1 and earlier contain a possible remote code execution vulnerability through the `$lang_path` parameter of the `setLanguage()` method. If the `$lang_path` parameter is passed unfiltered from user input, it can be set to [a UNC path](https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#unc-paths), and if an attacker is also able to persuade the server to load a file from that UNC path, a script file under their control may be executed. This vulnerability only applies to systems that resolve UNC paths, typically only Microsoft Windows.
8
+PHPMailer 6.5.0 mitigates this by no longer treating translation files as PHP code, but by parsing their text content directly. This approach avoids the possibility of executing unknown code while retaining backward compatibility. This isn't ideal, so the current translation format is deprecated and will be replaced in the next major release. Recorded as [CVE-2021-34551](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-34551). Reported by [Jilin Diting Information Technology Co., Ltd](https://listensec.com) via Tidelift.
9
+
10
+PHPMailer versions between 6.1.8 and 6.4.0 contain a regression of the earlier CVE-2018-19296 object injection vulnerability as a result of [a fix for Windows UNC paths in 6.1.8](https://github.com/PHPMailer/PHPMailer/commit/e2e07a355ee8ff36aba21d0242c5950c56e4c6f9). Recorded as [CVE-2020-36326](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-36326). Reported by Fariskhi Vidyan via Tidelift. 6.4.1 fixes this issue, and also enforces stricter checks for URL schemes in local path contexts.
11
+
12
+PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security.
13
+
14
+PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr.
15
+
16
+PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project.
17
+
18
+PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.
19
+
20
+PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).
21
+
22
+PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).
23
+
24
+PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending.
25
+
26
+PHPMailer versions prior to 5.2.10 (released May 2015) are vulnerable to [CVE-2008-5619](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5619), a remote code execution vulnerability in the bundled html2text library. This file was removed in 5.2.10, so if you are using a version prior to that and make use of the html2text function, it's vitally important that you upgrade and remove this file.
27
+
28
+PHPMailer versions prior to 2.0.7 and 2.2.1 are vulnerable to [CVE-2012-0796](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-0796), an email header injection attack.
29
+
30
+Joomla 1.6.0 uses PHPMailer in an unsafe way, allowing it to reveal local file paths, reported in [CVE-2011-3747](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3747).
31
+
32
+PHPMailer didn't sanitise the `$lang_path` parameter in `SetLanguage`. This wasn't a problem in itself, but some apps (PHPClassifieds, ATutor) also failed to sanitise user-provided parameters passed to it, permitting semi-arbitrary local file inclusion, reported in [CVE-2010-4914](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4914), [CVE-2007-2021](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2021) and [CVE-2006-5734](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-5734).
33
+
34
+PHPMailer 1.7.2 and earlier contained a possible DDoS vulnerability reported in [CVE-2005-1807](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-1807).
35
+
36
+PHPMailer 1.7 and earlier (June 2003) have a possible vulnerability in the `SendmailSend` method where shell commands may not be sanitised. Reported in [CVE-2007-3215](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3215).
37
+

+ 1
- 0
addons/phpmailer/SDK/VERSION View File

@@ -0,0 +1 @@
1
+6.8.0

+ 78
- 0
addons/phpmailer/SDK/composer.json View File

@@ -0,0 +1,78 @@
1
+{
2
+    "name": "phpmailer/phpmailer",
3
+    "type": "library",
4
+    "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
5
+    "authors": [
6
+        {
7
+            "name": "Marcus Bointon",
8
+            "email": "phpmailer@synchromedia.co.uk"
9
+        },
10
+        {
11
+            "name": "Jim Jagielski",
12
+            "email": "jimjag@gmail.com"
13
+        },
14
+        {
15
+            "name": "Andy Prevost",
16
+            "email": "codeworxtech@users.sourceforge.net"
17
+        },
18
+        {
19
+            "name": "Brent R. Matzelle"
20
+        }
21
+    ],
22
+    "funding": [
23
+        {
24
+            "url": "https://github.com/Synchro",
25
+            "type": "github"
26
+        }
27
+    ],
28
+    "config": {
29
+        "allow-plugins": {
30
+            "dealerdirect/phpcodesniffer-composer-installer": true
31
+        }
32
+    },
33
+    "require": {
34
+        "php": ">=5.5.0",
35
+        "ext-ctype": "*",
36
+        "ext-filter": "*",
37
+        "ext-hash": "*"
38
+    },
39
+    "require-dev": {
40
+        "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
41
+        "doctrine/annotations": "^1.2.6 || ^1.13.3",
42
+        "php-parallel-lint/php-console-highlighter": "^1.0.0",
43
+        "php-parallel-lint/php-parallel-lint": "^1.3.2",
44
+        "phpcompatibility/php-compatibility": "^9.3.5",
45
+        "roave/security-advisories": "dev-latest",
46
+        "squizlabs/php_codesniffer": "^3.7.2",
47
+        "yoast/phpunit-polyfills": "^1.0.4"
48
+    },
49
+    "suggest": {
50
+        "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
51
+        "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
52
+        "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
53
+        "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
54
+        "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
55
+        "psr/log": "For optional PSR-3 debug logging",
56
+        "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication",
57
+        "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
58
+    },
59
+    "autoload": {
60
+        "psr-4": {
61
+            "PHPMailer\\PHPMailer\\": "src/"
62
+        }
63
+    },
64
+    "autoload-dev": {
65
+        "psr-4": {
66
+            "PHPMailer\\Test\\": "test/"
67
+        }
68
+    },
69
+    "license": "LGPL-2.1-only",
70
+    "scripts": {
71
+        "check": "./vendor/bin/phpcs",
72
+        "test": "./vendor/bin/phpunit --no-coverage",
73
+        "coverage": "./vendor/bin/phpunit",
74
+        "lint": [
75
+            "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . --show-deprecated -e php,phps --exclude vendor --exclude .git --exclude build"
76
+        ]
77
+    }
78
+}

+ 182
- 0
addons/phpmailer/SDK/get_oauth_token.php View File

@@ -0,0 +1,182 @@
1
+<?php
2
+
3
+/**
4
+ * PHPMailer - PHP email creation and transport class.
5
+ * PHP Version 5.5
6
+ * @package PHPMailer
7
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
8
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
9
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
10
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
11
+ * @author Brent R. Matzelle (original founder)
12
+ * @copyright 2012 - 2020 Marcus Bointon
13
+ * @copyright 2010 - 2012 Jim Jagielski
14
+ * @copyright 2004 - 2009 Andy Prevost
15
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
16
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
17
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18
+ * FITNESS FOR A PARTICULAR PURPOSE.
19
+ */
20
+
21
+/**
22
+ * Get an OAuth2 token from an OAuth2 provider.
23
+ * * Install this script on your server so that it's accessible
24
+ * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
25
+ * e.g.: http://localhost/phpmailer/get_oauth_token.php
26
+ * * Ensure dependencies are installed with 'composer install'
27
+ * * Set up an app in your Google/Yahoo/Microsoft account
28
+ * * Set the script address as the app's redirect URL
29
+ * If no refresh token is obtained when running this file,
30
+ * revoke access to your app and run the script again.
31
+ */
32
+
33
+namespace PHPMailer\PHPMailer;
34
+
35
+/**
36
+ * Aliases for League Provider Classes
37
+ * Make sure you have added these to your composer.json and run `composer install`
38
+ * Plenty to choose from here:
39
+ * @see http://oauth2-client.thephpleague.com/providers/thirdparty/
40
+ */
41
+//@see https://github.com/thephpleague/oauth2-google
42
+use League\OAuth2\Client\Provider\Google;
43
+//@see https://packagist.org/packages/hayageek/oauth2-yahoo
44
+use Hayageek\OAuth2\Client\Provider\Yahoo;
45
+//@see https://github.com/stevenmaguire/oauth2-microsoft
46
+use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
47
+//@see https://github.com/greew/oauth2-azure-provider
48
+use Greew\OAuth2\Client\Provider\Azure;
49
+
50
+if (!isset($_GET['code']) && !isset($_POST['provider'])) {
51
+    ?>
52
+<html>
53
+<body>
54
+<form method="post">
55
+    <h1>Select Provider</h1>
56
+    <input type="radio" name="provider" value="Google" id="providerGoogle">
57
+    <label for="providerGoogle">Google</label><br>
58
+    <input type="radio" name="provider" value="Yahoo" id="providerYahoo">
59
+    <label for="providerYahoo">Yahoo</label><br>
60
+    <input type="radio" name="provider" value="Microsoft" id="providerMicrosoft">
61
+    <label for="providerMicrosoft">Microsoft</label><br>
62
+    <input type="radio" name="provider" value="Azure" id="providerAzure">
63
+    <label for="providerAzure">Azure</label><br>
64
+    <h1>Enter id and secret</h1>
65
+    <p>These details are obtained by setting up an app in your provider's developer console.
66
+    </p>
67
+    <p>ClientId: <input type="text" name="clientId"><p>
68
+    <p>ClientSecret: <input type="text" name="clientSecret"></p>
69
+    <p>TenantID (only relevant for Azure): <input type="text" name="tenantId"></p>
70
+    <input type="submit" value="Continue">
71
+</form>
72
+</body>
73
+</html>
74
+    <?php
75
+    exit;
76
+}
77
+
78
+require 'vendor/autoload.php';
79
+
80
+session_start();
81
+
82
+$providerName = '';
83
+$clientId = '';
84
+$clientSecret = '';
85
+$tenantId = '';
86
+
87
+if (array_key_exists('provider', $_POST)) {
88
+    $providerName = $_POST['provider'];
89
+    $clientId = $_POST['clientId'];
90
+    $clientSecret = $_POST['clientSecret'];
91
+    $tenantId = $_POST['tenantId'];
92
+    $_SESSION['provider'] = $providerName;
93
+    $_SESSION['clientId'] = $clientId;
94
+    $_SESSION['clientSecret'] = $clientSecret;
95
+    $_SESSION['tenantId'] = $tenantId;
96
+} elseif (array_key_exists('provider', $_SESSION)) {
97
+    $providerName = $_SESSION['provider'];
98
+    $clientId = $_SESSION['clientId'];
99
+    $clientSecret = $_SESSION['clientSecret'];
100
+    $tenantId = $_SESSION['tenantId'];
101
+}
102
+
103
+//If you don't want to use the built-in form, set your client id and secret here
104
+//$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
105
+//$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
106
+
107
+//If this automatic URL doesn't work, set it yourself manually to the URL of this script
108
+$redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
109
+//$redirectUri = 'http://localhost/PHPMailer/redirect';
110
+
111
+$params = [
112
+    'clientId' => $clientId,
113
+    'clientSecret' => $clientSecret,
114
+    'redirectUri' => $redirectUri,
115
+    'accessType' => 'offline'
116
+];
117
+
118
+$options = [];
119
+$provider = null;
120
+
121
+switch ($providerName) {
122
+    case 'Google':
123
+        $provider = new Google($params);
124
+        $options = [
125
+            'scope' => [
126
+                'https://mail.google.com/'
127
+            ]
128
+        ];
129
+        break;
130
+    case 'Yahoo':
131
+        $provider = new Yahoo($params);
132
+        break;
133
+    case 'Microsoft':
134
+        $provider = new Microsoft($params);
135
+        $options = [
136
+            'scope' => [
137
+                'wl.imap',
138
+                'wl.offline_access'
139
+            ]
140
+        ];
141
+        break;
142
+    case 'Azure':
143
+        $params['tenantId'] = $tenantId;
144
+
145
+        $provider = new Azure($params);
146
+        $options = [
147
+            'scope' => [
148
+                'https://outlook.office.com/SMTP.Send',
149
+                'offline_access'
150
+            ]
151
+        ];
152
+        break;
153
+}
154
+
155
+if (null === $provider) {
156
+    exit('Provider missing');
157
+}
158
+
159
+if (!isset($_GET['code'])) {
160
+    //If we don't have an authorization code then get one
161
+    $authUrl = $provider->getAuthorizationUrl($options);
162
+    $_SESSION['oauth2state'] = $provider->getState();
163
+    header('Location: ' . $authUrl);
164
+    exit;
165
+    //Check given state against previously stored one to mitigate CSRF attack
166
+} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
167
+    unset($_SESSION['oauth2state']);
168
+    unset($_SESSION['provider']);
169
+    exit('Invalid state');
170
+} else {
171
+    unset($_SESSION['provider']);
172
+    //Try to get an access token (using the authorization code grant)
173
+    $token = $provider->getAccessToken(
174
+        'authorization_code',
175
+        [
176
+            'code' => $_GET['code']
177
+        ]
178
+    );
179
+    //Use this to interact with an API on the users behalf
180
+    //Use this to get a new access token if the old one expires
181
+    echo 'Refresh Token: ', $token->getRefreshToken();
182
+}

+ 26
- 0
addons/phpmailer/SDK/language/phpmailer.lang-af.php View File

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+/**
4
+ * Afrikaans PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: kon nie geverifieer word nie.';
9
+$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon nie aan SMTP-verbind nie.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data nie aanvaar nie.';
11
+$PHPMAILER_LANG['empty_message']        = 'Boodskapliggaam leeg.';
12
+$PHPMAILER_LANG['encoding']             = 'Onbekende kodering: ';
13
+$PHPMAILER_LANG['execute']              = 'Kon nie uitvoer nie: ';
14
+$PHPMAILER_LANG['file_access']          = 'Kon nie lêer oopmaak nie: ';
15
+$PHPMAILER_LANG['file_open']            = 'Lêerfout: Kon nie lêer oopmaak nie: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Die volgende Van adres misluk: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Kon nie posfunksie instansieer nie.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Ongeldige adres: ';
19
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer word nie ondersteun nie.';
20
+$PHPMAILER_LANG['provide_address']      = 'U moet ten minste een ontvanger e-pos adres verskaf.';
21
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: Die volgende ontvangers het misluk: ';
22
+$PHPMAILER_LANG['signing']              = 'Ondertekening Fout: ';
23
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP-verbinding () misluk.';
24
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-bediener fout: ';
25
+$PHPMAILER_LANG['variable_set']         = 'Kan nie veranderlike instel of herstel nie: ';
26
+$PHPMAILER_LANG['extension_missing']    = 'Uitbreiding ontbreek: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ar.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Arabic PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author bahjat al mostafa <bahjat983@hotmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'خطأ SMTP : لا يمكن تأكيد الهوية.';
10
+$PHPMAILER_LANG['connect_host']         = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'خطأ SMTP: لم يتم قبول المعلومات .';
12
+$PHPMAILER_LANG['empty_message']        = 'نص الرسالة فارغ';
13
+$PHPMAILER_LANG['encoding']             = 'ترميز غير معروف: ';
14
+$PHPMAILER_LANG['execute']              = 'لا يمكن تنفيذ : ';
15
+$PHPMAILER_LANG['file_access']          = 'لا يمكن الوصول للملف: ';
16
+$PHPMAILER_LANG['file_open']            = 'خطأ في الملف: لا يمكن فتحه: ';
17
+$PHPMAILER_LANG['from_failed']          = 'خطأ على مستوى عنوان المرسل : ';
18
+$PHPMAILER_LANG['instantiate']          = 'لا يمكن توفير خدمة البريد.';
19
+$PHPMAILER_LANG['invalid_address']      = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.';
21
+$PHPMAILER_LANG['provide_address']      = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'خطأ SMTP: الأخطاء التالية فشل في الارسال لكل من : ';
23
+$PHPMAILER_LANG['signing']              = 'خطأ في التوقيع: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() غير ممكن.';
25
+$PHPMAILER_LANG['smtp_error']           = 'خطأ على مستوى الخادم SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'لا يمكن تعيين أو إعادة تعيين متغير: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'الإضافة غير موجودة: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-az.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Azerbaijani PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author @mirjalal
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP xətası: Giriş uğursuz oldu.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP xətası: SMTP serverinə qoşulma uğursuz oldu.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP xətası: Verilənlər qəbul edilməyib.';
12
+$PHPMAILER_LANG['empty_message']        = 'Boş mesaj göndərilə bilməz.';
13
+$PHPMAILER_LANG['encoding']             = 'Qeyri-müəyyən kodlaşdırma: ';
14
+$PHPMAILER_LANG['execute']              = 'Əmr yerinə yetirilmədi: ';
15
+$PHPMAILER_LANG['file_access']          = 'Fayla giriş yoxdur: ';
16
+$PHPMAILER_LANG['file_open']            = 'Fayl xətası: Fayl açıla bilmədi: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Göstərilən poçtlara göndərmə uğursuz oldu: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Mail funksiyası işə salına bilmədi.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Düzgün olmayan e-mail adresi: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' - e-mail kitabxanası dəstəklənmir.';
21
+$PHPMAILER_LANG['provide_address']      = 'Ən azı bir e-mail adresi daxil edilməlidir.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP xətası: Aşağıdakı ünvanlar üzrə alıcılara göndərmə uğursuzdur: ';
23
+$PHPMAILER_LANG['signing']              = 'İmzalama xətası: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP serverinə qoşulma uğursuz oldu.';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri xətası: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Dəyişənin quraşdırılması uğursuz oldu: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ba.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Bosnian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Ermin Islamagić <ermin@islamagic.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela prijava.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';
12
+$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
13
+$PHPMAILER_LANG['encoding']             = 'Nepoznata kriptografija: ';
14
+$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';
15
+$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';
16
+$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';
17
+$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje sa navedenih e-mail adresa nije uspjelo: ';
18
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedene e-mail adrese nije uspjelo: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';
20
+$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
22
+$PHPMAILER_LANG['provide_address']      = 'Definišite barem jednu adresu primaoca.';
23
+$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP server nije uspjelo.';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP greška: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Nije moguće postaviti varijablu ili je vratiti nazad: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Nedostaje ekstenzija: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-be.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Belarusian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Aleksander Maksymiuk <info@setpro.pl>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Памылка SMTP: памылка ідэнтыфікацыі.';
10
+$PHPMAILER_LANG['connect_host']         = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Памылка SMTP: звесткі непрынятыя.';
12
+$PHPMAILER_LANG['empty_message']        = 'Пустое паведамленне.';
13
+$PHPMAILER_LANG['encoding']             = 'Невядомая кадыроўка тэксту: ';
14
+$PHPMAILER_LANG['execute']              = 'Нельга выканаць каманду: ';
15
+$PHPMAILER_LANG['file_access']          = 'Няма доступу да файла: ';
16
+$PHPMAILER_LANG['file_open']            = 'Нельга адкрыць файл: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Няправільны адрас адпраўніка: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Нельга прымяніць функцыю mail().';
19
+$PHPMAILER_LANG['invalid_address']      = 'Нельга даслаць паведамленне, няправільны email атрымальніка: ';
20
+$PHPMAILER_LANG['provide_address']      = 'Запоўніце, калі ласка, правільны email атрымальніка.';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'Памылка SMTP: няправільныя атрымальнікі: ';
23
+$PHPMAILER_LANG['signing']              = 'Памылка подпісу паведамлення: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Памылка сувязі з SMTP-серверам.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Памылка SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-bg.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Bulgarian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Mikhail Kyosev <mialygk@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: Не може да се удостовери пред сървъра.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: Не може да се свърже с SMTP хоста.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: данните не са приети.';
12
+$PHPMAILER_LANG['empty_message']        = 'Съдържанието на съобщението е празно';
13
+$PHPMAILER_LANG['encoding']             = 'Неизвестно кодиране: ';
14
+$PHPMAILER_LANG['execute']              = 'Не може да се изпълни: ';
15
+$PHPMAILER_LANG['file_access']          = 'Няма достъп до файл: ';
16
+$PHPMAILER_LANG['file_open']            = 'Файлова грешка: Не може да се отвори файл: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Следните адреси за подател са невалидни: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Не може да се инстанцира функцията mail.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Невалиден адрес: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.';
21
+$PHPMAILER_LANG['provide_address']      = 'Трябва да предоставите поне един email адрес за получател.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: Следните адреси за Получател са невалидни: ';
23
+$PHPMAILER_LANG['signing']              = 'Грешка при подписване: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP провален connect().';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP сървърна грешка: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Не може да се установи или възстанови променлива: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Липсва разширение: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ca.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Catalan PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Ivan <web AT microstudi DOT com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Error SMTP: No s’ha pogut autenticar.';
10
+$PHPMAILER_LANG['connect_host']         = 'Error SMTP: No es pot connectar al servidor SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Dades no acceptades.';
12
+$PHPMAILER_LANG['empty_message']        = 'El cos del missatge està buit.';
13
+$PHPMAILER_LANG['encoding']             = 'Codificació desconeguda: ';
14
+$PHPMAILER_LANG['execute']              = 'No es pot executar: ';
15
+$PHPMAILER_LANG['file_access']          = 'No es pot accedir a l’arxiu: ';
16
+$PHPMAILER_LANG['file_open']            = 'Error d’Arxiu: No es pot obrir l’arxiu: ';
17
+$PHPMAILER_LANG['from_failed']          = 'La(s) següent(s) adreces de remitent han fallat: ';
18
+$PHPMAILER_LANG['instantiate']          = 'No s’ha pogut crear una instància de la funció Mail.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Adreça d’email invalida: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';
21
+$PHPMAILER_LANG['provide_address']      = 'S’ha de proveir almenys una adreça d’email com a destinatari.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Els següents destinataris han fallat: ';
23
+$PHPMAILER_LANG['signing']              = 'Error al signar: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ha fallat el SMTP Connect().';
25
+$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'No s’ha pogut establir o restablir la variable: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ch.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Chinese PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author LiuXin <http://www.80x86.cn/blog/>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP 错误:身份验证失败。';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP 错误: 不能连接SMTP主机。';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误: 数据不可接受。';
12
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
13
+$PHPMAILER_LANG['encoding']             = '未知编码:';
14
+$PHPMAILER_LANG['execute']              = '不能执行: ';
15
+$PHPMAILER_LANG['file_access']          = '不能访问文件:';
16
+$PHPMAILER_LANG['file_open']            = '文件错误:不能打开文件:';
17
+$PHPMAILER_LANG['from_failed']          = '下面的发送地址邮件发送失败了: ';
18
+$PHPMAILER_LANG['instantiate']          = '不能实现mail方法。';
19
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
21
+$PHPMAILER_LANG['provide_address']      = '您必须提供至少一个 收信人的email地址。';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误: 下面的 收件人失败了: ';
23
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
24
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
25
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
26
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-cs.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Czech PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'Chyba SMTP: Autentizace selhala.';
9
+$PHPMAILER_LANG['connect_host']         = 'Chyba SMTP: Nelze navázat spojení se SMTP serverem.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'Chyba SMTP: Data nebyla přijata.';
11
+$PHPMAILER_LANG['empty_message']        = 'Prázdné tělo zprávy';
12
+$PHPMAILER_LANG['encoding']             = 'Neznámé kódování: ';
13
+$PHPMAILER_LANG['execute']              = 'Nelze provést: ';
14
+$PHPMAILER_LANG['file_access']          = 'Nelze získat přístup k souboru: ';
15
+$PHPMAILER_LANG['file_open']            = 'Chyba souboru: Nelze otevřít soubor pro čtení: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Následující adresa odesílatele je nesprávná: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Nelze vytvořit instanci emailové funkce.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Neplatná adresa: ';
19
+$PHPMAILER_LANG['invalid_hostentry']    = 'Záznam hostitele je nesprávný: ';
20
+$PHPMAILER_LANG['invalid_host']         = 'Hostitel je nesprávný: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.';
22
+$PHPMAILER_LANG['provide_address']      = 'Musíte zadat alespoň jednu emailovou adresu příjemce.';
23
+$PHPMAILER_LANG['recipients_failed']    = 'Chyba SMTP: Následující adresy příjemců nejsou správně: ';
24
+$PHPMAILER_LANG['signing']              = 'Chyba přihlašování: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() selhal.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Chyba SMTP serveru: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Nelze nastavit nebo změnit proměnnou: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Chybí rozšíření: ';

+ 35
- 0
addons/phpmailer/SDK/language/phpmailer.lang-da.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+/**
4
+ * Danish PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author John Sebastian <jms@iwb.dk>
7
+ * Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
8
+ *
9
+ */
10
+
11
+$PHPMAILER_LANG['authenticate']         = 'SMTP fejl: Login mislykkedes.';
12
+$PHPMAILER_LANG['connect_host']         = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.';
13
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fejl: Data blev ikke accepteret.';
14
+$PHPMAILER_LANG['empty_message']        = 'Meddelelsen er uden indhold';
15
+$PHPMAILER_LANG['encoding']             = 'Ukendt encode-format: ';
16
+$PHPMAILER_LANG['execute']              = 'Kunne ikke afvikle: ';
17
+$PHPMAILER_LANG['extension_missing']    = 'Udvidelse mangler: ';
18
+$PHPMAILER_LANG['file_access']          = 'Kunne ikke tilgå filen: ';
19
+$PHPMAILER_LANG['file_open']            = 'Fil fejl: Kunne ikke åbne filen: ';
20
+$PHPMAILER_LANG['from_failed']          = 'Følgende afsenderadresse er forkert: ';
21
+$PHPMAILER_LANG['instantiate']          = 'Email funktionen kunne ikke initialiseres.';
22
+$PHPMAILER_LANG['invalid_address']      = 'Udgyldig adresse: ';
23
+$PHPMAILER_LANG['invalid_header']       = 'Ugyldig header navn eller værdi';
24
+$PHPMAILER_LANG['invalid_hostentry']    = 'Ugyldig hostentry: ';
25
+$PHPMAILER_LANG['invalid_host']         = 'Ugyldig vært: ';
26
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
27
+$PHPMAILER_LANG['provide_address']      = 'Indtast mindst en modtagers email adresse.';
28
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP fejl: Følgende modtagere fejlede: ';
29
+$PHPMAILER_LANG['signing']              = 'Signeringsfejl: ';
30
+$PHPMAILER_LANG['smtp_code']            = 'SMTP kode: ';
31
+$PHPMAILER_LANG['smtp_code_ex']         = 'Yderligere SMTP info: ';
32
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fejlede.';
33
+$PHPMAILER_LANG['smtp_detail']          = 'Detalje: ';
34
+$PHPMAILER_LANG['smtp_error']           = 'SMTP server fejl: ';
35
+$PHPMAILER_LANG['variable_set']         = 'Kunne ikke definere eller nulstille variablen: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-de.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * German PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
9
+$PHPMAILER_LANG['connect_host']         = 'SMTP-Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-Fehler: Daten werden nicht akzeptiert.';
11
+$PHPMAILER_LANG['empty_message']        = 'E-Mail-Inhalt ist leer.';
12
+$PHPMAILER_LANG['encoding']             = 'Unbekannte Kodierung: ';
13
+$PHPMAILER_LANG['execute']              = 'Konnte folgenden Befehl nicht ausführen: ';
14
+$PHPMAILER_LANG['file_access']          = 'Zugriff auf folgende Datei fehlgeschlagen: ';
15
+$PHPMAILER_LANG['file_open']            = 'Dateifehler: Konnte folgende Datei nicht öffnen: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Die folgende Absenderadresse ist nicht korrekt: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Mail-Funktion konnte nicht initialisiert werden.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Die Adresse ist ungültig: ';
19
+$PHPMAILER_LANG['invalid_hostentry']    = 'Ungültiger Hosteintrag: ';
20
+$PHPMAILER_LANG['invalid_host']         = 'Ungültiger Host: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
22
+$PHPMAILER_LANG['provide_address']      = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
23
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';
24
+$PHPMAILER_LANG['signing']              = 'Fehler beim Signieren: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Verbindung zum SMTP-Server fehlgeschlagen.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Fehler vom SMTP-Server: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Kann Variable nicht setzen oder zurücksetzen: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Fehlende Erweiterung: ';

+ 33
- 0
addons/phpmailer/SDK/language/phpmailer.lang-el.php View File

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+/**
4
+ * Greek PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'Σφάλμα SMTP: Αδυναμία πιστοποίησης.';
9
+$PHPMAILER_LANG['buggy_php']            = 'Η έκδοση PHP που χρησιμοποιείτε παρουσιάζει σφάλμα που μπορεί να έχει ως αποτέλεσμα κατεστραμένα μηνύματα. Για να το διορθώσετε, αλλάξτε τον τρόπο αποστολής σε SMTP, απενεργοποιήστε την επιλογή mail.add_x_header στο αρχείο php.ini, αλλάξτε λειτουργικό σε MacOS ή Linux ή αναβαθμίστε την PHP σε έκδοση 7.0.17+ ή 7.1.3+.';
10
+$PHPMAILER_LANG['connect_host']         = 'Σφάλμα SMTP: Αδυναμία σύνδεσης με τον φιλοξενητή SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Σφάλμα SMTP: Μη αποδεκτά δεδομένα.';
12
+$PHPMAILER_LANG['empty_message']        = 'Η ηλεκτρονική επιστολή δεν έχει περιεχόμενο.';
13
+$PHPMAILER_LANG['encoding']             = 'Άγνωστη μορφή κωδικοποίησης: ';
14
+$PHPMAILER_LANG['execute']              = 'Αδυναμία εκτέλεσης: ';
15
+$PHPMAILER_LANG['extension_missing']    = 'Απουσία επέκτασης: ';
16
+$PHPMAILER_LANG['file_access']          = 'Αδυναμία πρόσβασης στο αρχείο: ';
17
+$PHPMAILER_LANG['file_open']            = 'Σφάλμα Αρχείου: Αδυναμία ανοίγματος αρχείου: ';
18
+$PHPMAILER_LANG['from_failed']          = 'Η ακόλουθη διεύθυνση αποστολέα δεν είναι σωστή: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Αδυναμία εκκίνησης συνάρτησης Mail.';
20
+$PHPMAILER_LANG['invalid_address']      = 'Μη έγκυρη διεύθυνση: ';
21
+$PHPMAILER_LANG['invalid_header']       = 'Μη έγκυρο όνομα κεφαλίδας ή τιμή';
22
+$PHPMAILER_LANG['invalid_hostentry']    = 'Μη έγκυρη εισαγωγή φιλοξενητή: ';
23
+$PHPMAILER_LANG['invalid_host']         = 'Μη έγκυρος φιλοξενητής: ';
24
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
25
+$PHPMAILER_LANG['provide_address']      = 'Δώστε τουλάχιστον μια ηλεκτρονική διεύθυνση παραλήπτη.';
26
+$PHPMAILER_LANG['recipients_failed']    = 'Σφάλμα SMTP: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
27
+$PHPMAILER_LANG['signing']              = 'Σφάλμα υπογραφής: ';
28
+$PHPMAILER_LANG['smtp_code']            = 'Κώδικάς SMTP: ';
29
+$PHPMAILER_LANG['smtp_code_ex']         = 'Πρόσθετες πληροφορίες SMTP: ';
30
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Αποτυχία σύνδεσης SMTP.';
31
+$PHPMAILER_LANG['smtp_detail']          = 'Λεπτομέρεια: ';
32
+$PHPMAILER_LANG['smtp_error']           = 'Σφάλμα με τον διακομιστή SMTP: ';
33
+$PHPMAILER_LANG['variable_set']         = 'Αδυναμία ορισμού ή επαναφοράς μεταβλητής: ';

+ 26
- 0
addons/phpmailer/SDK/language/phpmailer.lang-eo.php View File

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+/**
4
+ * Esperanto PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'Eraro de servilo SMTP : aŭtentigo malsukcesis.';
9
+$PHPMAILER_LANG['connect_host']         = 'Eraro de servilo SMTP : konektado al servilo malsukcesis.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'Eraro de servilo SMTP : neĝustaj datumoj.';
11
+$PHPMAILER_LANG['empty_message']        = 'Teksto de mesaĝo mankas.';
12
+$PHPMAILER_LANG['encoding']             = 'Nekonata kodoprezento: ';
13
+$PHPMAILER_LANG['execute']              = 'Lanĉi rulumadon ne eblis: ';
14
+$PHPMAILER_LANG['file_access']          = 'Aliro al dosiero ne sukcesis: ';
15
+$PHPMAILER_LANG['file_open']            = 'Eraro de dosiero: malfermo neeblas: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Jena adreso de sendinto malsukcesis: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Genero de retmesaĝa funkcio neeblis.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Retadreso ne validas: ';
19
+$PHPMAILER_LANG['mailer_not_supported'] = ' mesaĝilo ne subtenata.';
20
+$PHPMAILER_LANG['provide_address']      = 'Vi devas tajpi almenaŭ unu recevontan retadreson.';
21
+$PHPMAILER_LANG['recipients_failed']    = 'Eraro de servilo SMTP : la jenaj poŝtrecivuloj kaŭzis eraron: ';
22
+$PHPMAILER_LANG['signing']              = 'Eraro de subskribo: ';
23
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP konektado malsukcesis.';
24
+$PHPMAILER_LANG['smtp_error']           = 'Eraro de servilo SMTP : ';
25
+$PHPMAILER_LANG['variable_set']         = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';
26
+$PHPMAILER_LANG['extension_missing']    = 'Mankas etendo: ';

+ 31
- 0
addons/phpmailer/SDK/language/phpmailer.lang-es.php View File

@@ -0,0 +1,31 @@
1
+<?php
2
+
3
+/**
4
+ * Spanish PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Matt Sturdy <matt.sturdy@gmail.com>
7
+ * @author Crystopher Glodzienski Cardoso <crystopher.glodzienski@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'Error SMTP: Imposible autentificar.';
11
+$PHPMAILER_LANG['connect_host']         = 'Error SMTP: Imposible conectar al servidor SMTP.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Datos no aceptados.';
13
+$PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío.';
14
+$PHPMAILER_LANG['encoding']             = 'Codificación desconocida: ';
15
+$PHPMAILER_LANG['execute']              = 'Imposible ejecutar: ';
16
+$PHPMAILER_LANG['file_access']          = 'Imposible acceder al archivo: ';
17
+$PHPMAILER_LANG['file_open']            = 'Error de Archivo: Imposible abrir el archivo: ';
18
+$PHPMAILER_LANG['from_failed']          = 'La(s) siguiente(s) direcciones de remitente fallaron: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Imposible crear una instancia de la función Mail.';
20
+$PHPMAILER_LANG['invalid_address']      = 'Imposible enviar: dirección de email inválido: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';
22
+$PHPMAILER_LANG['provide_address']      = 'Debe proporcionar al menos una dirección de email de destino.';
23
+$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Los siguientes destinos fallaron: ';
24
+$PHPMAILER_LANG['signing']              = 'Error al firmar: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falló.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';
27
+$PHPMAILER_LANG['variable_set']         = 'No se pudo configurar la variable: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Extensión faltante: ';
29
+$PHPMAILER_LANG['smtp_code']            = 'Código del servidor SMTP: ';
30
+$PHPMAILER_LANG['smtp_code_ex']         = 'Información adicional del servidor SMTP: ';
31
+$PHPMAILER_LANG['invalid_header']       = 'Nombre o valor de encabezado no válido';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-et.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Estonian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Indrek Päri
7
+ * @author Elan Ruusamäe <glen@delfi.ee>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP Viga: Autoriseerimise viga.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Viga: Vigased andmed.';
13
+$PHPMAILER_LANG['empty_message']        = 'Tühi kirja sisu';
14
+$PHPMAILER_LANG["encoding"]             = 'Tundmatu kodeering: ';
15
+$PHPMAILER_LANG['execute']              = 'Tegevus ebaõnnestus: ';
16
+$PHPMAILER_LANG['file_access']          = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';
17
+$PHPMAILER_LANG['file_open']            = 'Faili Viga: Faili avamine ebaõnnestus: ';
18
+$PHPMAILER_LANG['from_failed']          = 'Järgnev saatja e-posti aadress on vigane: ';
19
+$PHPMAILER_LANG['instantiate']          = 'mail funktiooni käivitamine ebaõnnestus.';
20
+$PHPMAILER_LANG['invalid_address']      = 'Saatmine peatatud, e-posti address vigane: ';
21
+$PHPMAILER_LANG['provide_address']      = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';
22
+$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';
23
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';
24
+$PHPMAILER_LANG["signing"]              = 'Viga allkirjastamisel: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() ebaõnnestus.';
26
+$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri viga: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Ei õnnestunud määrata või lähtestada muutujat: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Nõutud laiendus on puudu: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-fa.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Persian/Farsi PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Ali Jazayeri <jaza.ali@gmail.com>
7
+ * @author Mohammad Hossein Mojtahedi <mhm5000@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'خطای SMTP: احراز هویت با شکست مواجه شد.';
11
+$PHPMAILER_LANG['connect_host']         = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'خطای SMTP: داده‌ها نا‌درست هستند.';
13
+$PHPMAILER_LANG['empty_message']        = 'بخش متن پیام خالی است.';
14
+$PHPMAILER_LANG['encoding']             = 'کد‌گذاری نا‌شناخته: ';
15
+$PHPMAILER_LANG['execute']              = 'امکان اجرا وجود ندارد: ';
16
+$PHPMAILER_LANG['file_access']          = 'امکان دسترسی به فایل وجود ندارد: ';
17
+$PHPMAILER_LANG['file_open']            = 'خطای File: امکان بازکردن فایل وجود ندارد: ';
18
+$PHPMAILER_LANG['from_failed']          = 'آدرس فرستنده اشتباه است: ';
19
+$PHPMAILER_LANG['instantiate']          = 'امکان معرفی تابع ایمیل وجود ندارد.';
20
+$PHPMAILER_LANG['invalid_address']      = 'آدرس ایمیل معتبر نیست: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.';
22
+$PHPMAILER_LANG['provide_address']      = 'باید حداقل یک آدرس گیرنده وارد کنید.';
23
+$PHPMAILER_LANG['recipients_failed']    = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: ';
24
+$PHPMAILER_LANG['signing']              = 'خطا در امضا: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'خطا در اتصال به SMTP.';
26
+$PHPMAILER_LANG['smtp_error']           = 'خطا در SMTP Server: ';
27
+$PHPMAILER_LANG['variable_set']         = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'افزونه موجود نیست: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-fi.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Finnish PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Jyry Kuukanen
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-virhe: data on virheellinen.';
12
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
13
+$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
14
+$PHPMAILER_LANG['execute']              = 'Suoritus epäonnistui: ';
15
+$PHPMAILER_LANG['file_access']          = 'Seuraavaan tiedostoon ei ole oikeuksia: ';
16
+$PHPMAILER_LANG['file_open']            = 'Tiedostovirhe: Ei voida avata tiedostoa: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Seuraava lähettäjän osoite on virheellinen: ';
18
+$PHPMAILER_LANG['instantiate']          = 'mail-funktion luonti epäonnistui.';
19
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';
21
+$PHPMAILER_LANG['provide_address']      = 'Aseta vähintään yksi vastaanottajan sähk&ouml;postiosoite.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';
23
+$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';
24
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
25
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
26
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
27
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
28
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-fo.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Faroese PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Dávur Sørensen <http://www.profo-webdesign.dk>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP feilur: Kundi ikki góðkenna.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP feilur: Data ikki góðkent.';
12
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
13
+$PHPMAILER_LANG['encoding']             = 'Ókend encoding: ';
14
+$PHPMAILER_LANG['execute']              = 'Kundi ikki útføra: ';
15
+$PHPMAILER_LANG['file_access']          = 'Kundi ikki tilganga fílu: ';
16
+$PHPMAILER_LANG['file_open']            = 'Fílu feilur: Kundi ikki opna fílu: ';
17
+$PHPMAILER_LANG['from_failed']          = 'fylgjandi Frá/From adressa miseydnaðist: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Kuni ikki instantiera mail funktión.';
19
+//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';
21
+$PHPMAILER_LANG['provide_address']      = 'Tú skal uppgeva minst móttakara-emailadressu(r).';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';
23
+//$PHPMAILER_LANG['signing']              = 'Signing Error: ';
24
+//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
25
+//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';
26
+//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 38
- 0
addons/phpmailer/SDK/language/phpmailer.lang-fr.php View File

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+/**
4
+ * French PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * Some French punctuation requires a thin non-breaking space (U+202F) character before it,
7
+ * for example before a colon or exclamation mark.
8
+ * There is one of these characters between these quotes: " "
9
+ * @see http://unicode.org/udhr/n/notes_fra.html
10
+ */
11
+
12
+$PHPMAILER_LANG['authenticate']         = 'Erreur SMTP : échec de l’authentification.';
13
+$PHPMAILER_LANG['buggy_php']            = 'Votre version de PHP est affectée par un bug qui peut entraîner des messages corrompus. Pour résoudre ce problème, passez à l’envoi par SMTP, désactivez l’option mail.add_x_header dans le fichier php.ini, passez à MacOS ou Linux, ou passez PHP à la version 7.0.17+ ou 7.1.3+.';
14
+$PHPMAILER_LANG['connect_host']         = 'Erreur SMTP : impossible de se connecter au serveur SMTP.';
15
+$PHPMAILER_LANG['data_not_accepted']    = 'Erreur SMTP : données incorrectes.';
16
+$PHPMAILER_LANG['empty_message']        = 'Corps du message vide.';
17
+$PHPMAILER_LANG['encoding']             = 'Encodage inconnu : ';
18
+$PHPMAILER_LANG['execute']              = 'Impossible de lancer l’exécution : ';
19
+$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';
20
+$PHPMAILER_LANG['file_access']          = 'Impossible d’accéder au fichier : ';
21
+$PHPMAILER_LANG['file_open']            = 'Ouverture du fichier impossible : ';
22
+$PHPMAILER_LANG['from_failed']          = 'L’adresse d’expéditeur suivante a échoué : ';
23
+$PHPMAILER_LANG['instantiate']          = 'Impossible d’instancier la fonction mail.';
24
+$PHPMAILER_LANG['invalid_address']      = 'Adresse courriel non valide : ';
25
+$PHPMAILER_LANG['invalid_header']       = 'Nom ou valeur de l’en-tête non valide';
26
+$PHPMAILER_LANG['invalid_hostentry']    = 'Entrée d’hôte non valide : ';
27
+$PHPMAILER_LANG['invalid_host']         = 'Hôte non valide : ';
28
+$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
29
+$PHPMAILER_LANG['provide_address']      = 'Vous devez fournir au moins une adresse de destinataire.';
30
+$PHPMAILER_LANG['recipients_failed']    = 'Erreur SMTP : les destinataires suivants ont échoué : ';
31
+$PHPMAILER_LANG['signing']              = 'Erreur de signature : ';
32
+$PHPMAILER_LANG['smtp_code']            = 'Code SMTP : ';
33
+$PHPMAILER_LANG['smtp_code_ex']         = 'Informations supplémentaires SMTP : ';
34
+$PHPMAILER_LANG['smtp_connect_failed']  = 'La fonction SMTP connect() a échouée.';
35
+$PHPMAILER_LANG['smtp_detail']          = 'Détails : ';
36
+$PHPMAILER_LANG['smtp_error']           = 'Erreur du serveur SMTP : ';
37
+$PHPMAILER_LANG['variable_set']         = 'Impossible d’initialiser ou de réinitialiser une variable : ';
38
+$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-gl.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Galician PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author by Donato Rouco <donatorouco@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Erro SMTP: Non puido ser autentificado.';
10
+$PHPMAILER_LANG['connect_host']         = 'Erro SMTP: Non puido conectar co servidor SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro SMTP: Datos non aceptados.';
12
+$PHPMAILER_LANG['empty_message']        = 'Corpo da mensaxe vacía';
13
+$PHPMAILER_LANG['encoding']             = 'Codificación descoñecida: ';
14
+$PHPMAILER_LANG['execute']              = 'Non puido ser executado: ';
15
+$PHPMAILER_LANG['file_access']          = 'Nob puido acceder ó arquivo: ';
16
+$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: No puido abrir o arquivo: ';
17
+$PHPMAILER_LANG['from_failed']          = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Non puido crear unha instancia da función Mail.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Non puido envia-lo correo: dirección de email inválida: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.';
21
+$PHPMAILER_LANG['provide_address']      = 'Debe engadir polo menos unha dirección de email coma destino.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'Erro SMTP: Os seguintes destinos fallaron: ';
23
+$PHPMAILER_LANG['signing']              = 'Erro ó firmar: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallou.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Erro do servidor SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Non puidemos axustar ou reaxustar a variábel: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-he.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Hebrew PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Ronny Sherer <ronny@hoojima.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'שגיאת SMTP: פעולת האימות נכשלה.';
10
+$PHPMAILER_LANG['connect_host']         = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'שגיאת SMTP: מידע לא התקבל.';
12
+$PHPMAILER_LANG['empty_message']        = 'גוף ההודעה ריק';
13
+$PHPMAILER_LANG['invalid_address']      = 'כתובת שגויה: ';
14
+$PHPMAILER_LANG['encoding']             = 'קידוד לא מוכר: ';
15
+$PHPMAILER_LANG['execute']              = 'לא הצלחתי להפעיל את: ';
16
+$PHPMAILER_LANG['file_access']          = 'לא ניתן לגשת לקובץ: ';
17
+$PHPMAILER_LANG['file_open']            = 'שגיאת קובץ: לא ניתן לגשת לקובץ: ';
18
+$PHPMAILER_LANG['from_failed']          = 'כתובות הנמענים הבאות נכשלו: ';
19
+$PHPMAILER_LANG['instantiate']          = 'לא הצלחתי להפעיל את פונקציית המייל.';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.';
21
+$PHPMAILER_LANG['provide_address']      = 'חובה לספק לפחות כתובת אחת של מקבל המייל.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'שגיאת SMTP: הנמענים הבאים נכשלו: ';
23
+$PHPMAILER_LANG['signing']              = 'שגיאת חתימה: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';
25
+$PHPMAILER_LANG['smtp_error']           = 'שגיאת שרת SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'לא ניתן לקבוע או לשנות את המשתנה: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 35
- 0
addons/phpmailer/SDK/language/phpmailer.lang-hi.php View File

@@ -0,0 +1,35 @@
1
+<?php
2
+
3
+/**
4
+ * Hindi PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Yash Karanke <mr.karanke@gmail.com>
7
+ * Rewrite and extension of the work by Jayanti Suthar <suthar.jayanti93@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। ';
11
+$PHPMAILER_LANG['buggy_php']            = 'PHP का आपका संस्करण एक बग से प्रभावित है जिसके परिणामस्वरूप संदेश दूषित हो सकते हैं. इसे ठीक करने हेतु, भेजने के लिए SMTP का उपयोग करे, अपने php.ini में mail.add_x_header विकल्प को अक्षम करें, MacOS या Linux पर जाए, या अपने PHP संस्करण को 7.0.17+ या 7.1.3+ बदले.';
12
+$PHPMAILER_LANG['connect_host']         = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। ';
13
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। ';
14
+$PHPMAILER_LANG['empty_message']        = 'संदेश खाली है। ';
15
+$PHPMAILER_LANG['encoding']             = 'अज्ञात एन्कोडिंग प्रकार। ';
16
+$PHPMAILER_LANG['execute']              = 'आदेश को निष्पादित करने में विफल। ';
17
+$PHPMAILER_LANG['extension_missing']    = 'एक्सटेन्षन गायब है: ';
18
+$PHPMAILER_LANG['file_access']          = 'फ़ाइल उपलब्ध नहीं है। ';
19
+$PHPMAILER_LANG['file_open']            = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। ';
20
+$PHPMAILER_LANG['from_failed']          = 'प्रेषक का पता गलत है। ';
21
+$PHPMAILER_LANG['instantiate']          = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।';
22
+$PHPMAILER_LANG['invalid_address']      = 'पता गलत है। ';
23
+$PHPMAILER_LANG['invalid_header']       = 'अमान्य हेडर नाम या मान';
24
+$PHPMAILER_LANG['invalid_hostentry']    = 'अमान्य hostentry: ';
25
+$PHPMAILER_LANG['invalid_host']         = 'अमान्य होस्ट: ';
26
+$PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। ';
27
+$PHPMAILER_LANG['provide_address']      = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।';
28
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। ';
29
+$PHPMAILER_LANG['signing']              = 'साइनअप त्रुटि: ';
30
+$PHPMAILER_LANG['smtp_code']            = 'SMTP कोड: ';
31
+$PHPMAILER_LANG['smtp_code_ex']         = 'अतिरिक्त SMTP जानकारी: ';
32
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP का connect () फ़ंक्शन विफल हुआ। ';
33
+$PHPMAILER_LANG['smtp_detail']          = 'विवरण: ';
34
+$PHPMAILER_LANG['smtp_error']           = 'SMTP सर्वर त्रुटि। ';
35
+$PHPMAILER_LANG['variable_set']         = 'चर को बना या संशोधित नहीं किया जा सकता। ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-hr.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Croatian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Hrvoj3e <hrvoj3e@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela autentikacija.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';
12
+$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
13
+$PHPMAILER_LANG['encoding']             = 'Nepoznati encoding: ';
14
+$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';
15
+$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';
16
+$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';
17
+$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: ';
18
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';
20
+$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
22
+$PHPMAILER_LANG['provide_address']      = 'Definirajte barem jednu adresu primatelja.';
23
+$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP poslužitelj nije uspjelo.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP poslužitelja: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Ne mogu postaviti varijablu niti ju vratiti nazad: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-hu.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Hungarian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author @dominicus-75
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP hiba: az azonosítás sikertelen.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP hiba: nem lehet kapcsolódni az SMTP-szerverhez.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP hiba: adatok visszautasítva.';
12
+$PHPMAILER_LANG['empty_message']        = 'Üres az üzenettörzs.';
13
+$PHPMAILER_LANG['encoding']             = 'Ismeretlen kódolás: ';
14
+$PHPMAILER_LANG['execute']              = 'Nem lehet végrehajtani: ';
15
+$PHPMAILER_LANG['file_access']          = 'A következő fájl nem elérhető: ';
16
+$PHPMAILER_LANG['file_open']            = 'Fájl hiba: a következő fájlt nem lehet megnyitni: ';
17
+$PHPMAILER_LANG['from_failed']          = 'A feladóként megadott következő cím hibás: ';
18
+$PHPMAILER_LANG['instantiate']          = 'A PHP mail() függvényt nem sikerült végrehajtani.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Érvénytelen cím: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' a mailer-osztály nem támogatott.';
21
+$PHPMAILER_LANG['provide_address']      = 'Legalább egy címzettet fel kell tüntetni.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP hiba: a címzettként megadott következő címek hibásak: ';
23
+$PHPMAILER_LANG['signing']              = 'Hibás aláírás: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Hiba az SMTP-kapcsolatban.';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-szerver hiba: ';
26
+$PHPMAILER_LANG['variable_set']         = 'A következő változók beállítása nem sikerült: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Bővítmény hiányzik: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-hy.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Armenian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Hrayr Grigoryan <hrayr@bits.am>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';
12
+$PHPMAILER_LANG['empty_message']        = 'Հաղորդագրությունը դատարկ է';
13
+$PHPMAILER_LANG['encoding']             = 'Կոդավորման անհայտ տեսակ: ';
14
+$PHPMAILER_LANG['execute']              = 'Չհաջողվեց իրականացնել հրամանը: ';
15
+$PHPMAILER_LANG['file_access']          = 'Ֆայլը հասանելի չէ: ';
16
+$PHPMAILER_LANG['file_open']            = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Ուղարկողի հետևյալ հասցեն սխալ է: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Հնարավոր չէ կանչել mail ֆունկցիան.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Հասցեն սխալ է: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.';
21
+$PHPMAILER_LANG['provide_address']      = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: ';
23
+$PHPMAILER_LANG['signing']              = 'Ստորագրման սխալ: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP -ի connect() ֆունկցիան չի հաջողվել';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP սերվերի սխալ: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Հավելվածը բացակայում է: ';

+ 31
- 0
addons/phpmailer/SDK/language/phpmailer.lang-id.php View File

@@ -0,0 +1,31 @@
1
+<?php
2
+
3
+/**
4
+ * Indonesian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Cecep Prawiro <cecep.prawiro@gmail.com>
7
+ * @author @januridp
8
+ * @author Ian Mustafa <mail@ianmustafa.com>
9
+ */
10
+
11
+$PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';
12
+$PHPMAILER_LANG['connect_host']         = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';
13
+$PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima.';
14
+$PHPMAILER_LANG['empty_message']        = 'Isi pesan kosong';
15
+$PHPMAILER_LANG['encoding']             = 'Pengkodean karakter tidak dikenali: ';
16
+$PHPMAILER_LANG['execute']              = 'Tidak dapat menjalankan proses: ';
17
+$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses berkas: ';
18
+$PHPMAILER_LANG['file_open']            = 'Kesalahan Berkas: Berkas tidak dapat dibuka: ';
19
+$PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan kesalahan: ';
20
+$PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi surel.';
21
+$PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat surel tidak sesuai: ';
22
+$PHPMAILER_LANG['invalid_hostentry']    = 'Gagal terkirim, entri host tidak sesuai: ';
23
+$PHPMAILER_LANG['invalid_host']         = 'Gagal terkirim, host tidak sesuai: ';
24
+$PHPMAILER_LANG['provide_address']      = 'Harus tersedia minimal satu alamat tujuan';
25
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';
26
+$PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: ';
27
+$PHPMAILER_LANG['signing']              = 'Kesalahan dalam penandatangan SSL: ';
28
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() gagal.';
29
+$PHPMAILER_LANG['smtp_error']           = 'Kesalahan pada pelayan SMTP: ';
30
+$PHPMAILER_LANG['variable_set']         = 'Tidak dapat mengatur atau mengatur ulang variabel: ';
31
+$PHPMAILER_LANG['extension_missing']    = 'Ekstensi PHP tidak tersedia: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-it.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Italian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Ilias Bartolini <brain79@inwind.it>
7
+ * @author Stefano Sabatini <sabas88@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Impossibile autenticarsi.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Impossibile connettersi all\'host SMTP.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dati non accettati dal server.';
13
+$PHPMAILER_LANG['empty_message']        = 'Il corpo del messaggio è vuoto';
14
+$PHPMAILER_LANG['encoding']             = 'Codifica dei caratteri sconosciuta: ';
15
+$PHPMAILER_LANG['execute']              = 'Impossibile eseguire l\'operazione: ';
16
+$PHPMAILER_LANG['file_access']          = 'Impossibile accedere al file: ';
17
+$PHPMAILER_LANG['file_open']            = 'File Error: Impossibile aprire il file: ';
18
+$PHPMAILER_LANG['from_failed']          = 'I seguenti indirizzi mittenti hanno generato errore: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Impossibile istanziare la funzione mail';
20
+$PHPMAILER_LANG['invalid_address']      = 'Impossibile inviare, l\'indirizzo email non è valido: ';
21
+$PHPMAILER_LANG['provide_address']      = 'Deve essere fornito almeno un indirizzo ricevente';
22
+$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';
23
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: ';
24
+$PHPMAILER_LANG['signing']              = 'Errore nella firma: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallita.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Errore del server SMTP: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Impossibile impostare o resettare la variabile: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Estensione mancante: ';

+ 29
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ja.php View File

@@ -0,0 +1,29 @@
1
+<?php
2
+
3
+/**
4
+ * Japanese PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Mitsuhiro Yoshida <http://mitstek.com/>
7
+ * @author Yoshi Sakai <http://bluemooninc.jp/>
8
+ * @author Arisophy <https://github.com/arisophy/>
9
+ */
10
+
11
+$PHPMAILER_LANG['authenticate']         = 'SMTPエラー: 認証できませんでした。';
12
+$PHPMAILER_LANG['connect_host']         = 'SMTPエラー: SMTPホストに接続できませんでした。';
13
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTPエラー: データが受け付けられませんでした。';
14
+$PHPMAILER_LANG['empty_message']        = 'メール本文が空です。';
15
+$PHPMAILER_LANG['encoding']             = '不明なエンコーディング: ';
16
+$PHPMAILER_LANG['execute']              = '実行できませんでした: ';
17
+$PHPMAILER_LANG['file_access']          = 'ファイルにアクセスできません: ';
18
+$PHPMAILER_LANG['file_open']            = 'ファイルエラー: ファイルを開けません: ';
19
+$PHPMAILER_LANG['from_failed']          = 'Fromアドレスを登録する際にエラーが発生しました: ';
20
+$PHPMAILER_LANG['instantiate']          = 'メール関数が正常に動作しませんでした。';
21
+$PHPMAILER_LANG['invalid_address']      = '不正なメールアドレス: ';
22
+$PHPMAILER_LANG['provide_address']      = '少なくとも1つメールアドレスを 指定する必要があります。';
23
+$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';
24
+$PHPMAILER_LANG['recipients_failed']    = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';
25
+$PHPMAILER_LANG['signing']              = '署名エラー: ';
26
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP接続に失敗しました。';
27
+$PHPMAILER_LANG['smtp_error']           = 'SMTPサーバーエラー: ';
28
+$PHPMAILER_LANG['variable_set']         = '変数が存在しません: ';
29
+$PHPMAILER_LANG['extension_missing']    = '拡張機能が見つかりません: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ka.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Georgian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.';
12
+$PHPMAILER_LANG['encoding']             = 'კოდირების უცნობი ტიპი: ';
13
+$PHPMAILER_LANG['execute']              = 'შეუძლებელია შემდეგი ბრძანების შესრულება: ';
14
+$PHPMAILER_LANG['file_access']          = 'შეუძლებელია წვდომა ფაილთან: ';
15
+$PHPMAILER_LANG['file_open']            = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: ';
16
+$PHPMAILER_LANG['from_failed']          = 'გამგზავნის არასწორი მისამართი: ';
17
+$PHPMAILER_LANG['instantiate']          = 'mail ფუნქციის გაშვება ვერ ხერხდება.';
18
+$PHPMAILER_LANG['provide_address']      = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.';
19
+$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.';
20
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: ';
21
+$PHPMAILER_LANG['empty_message']        = 'შეტყობინება ცარიელია';
22
+$PHPMAILER_LANG['invalid_address']      = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: ';
23
+$PHPMAILER_LANG['signing']              = 'ხელმოწერის შეცდომა: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'შეცდომა SMTP სერვერთან დაკავშირებისას';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP სერვერის შეცდომა: ';
26
+$PHPMAILER_LANG['variable_set']         = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'ბიბლიოთეკა არ არსებობს: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ko.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Korean PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author ChalkPE <amato0617@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP 오류: 인증할 수 없습니다.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.';
12
+$PHPMAILER_LANG['empty_message']        = '메세지 내용이 없습니다';
13
+$PHPMAILER_LANG['encoding']             = '알 수 없는 인코딩: ';
14
+$PHPMAILER_LANG['execute']              = '실행 불가: ';
15
+$PHPMAILER_LANG['file_access']          = '파일 접근 불가: ';
16
+$PHPMAILER_LANG['file_open']            = '파일 오류: 파일을 열 수 없습니다: ';
17
+$PHPMAILER_LANG['from_failed']          = '다음 From 주소에서 오류가 발생했습니다: ';
18
+$PHPMAILER_LANG['instantiate']          = 'mail 함수를 인스턴스화할 수 없습니다';
19
+$PHPMAILER_LANG['invalid_address']      = '잘못된 주소: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.';
21
+$PHPMAILER_LANG['provide_address']      = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: ';
23
+$PHPMAILER_LANG['signing']              = '서명 오류: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 연결을 실패하였습니다.';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP 서버 오류: ';
26
+$PHPMAILER_LANG['variable_set']         = '변수 설정 및 초기화 불가: ';
27
+$PHPMAILER_LANG['extension_missing']    = '확장자 없음: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-lt.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Lithuanian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Dainius Kaupaitis <dk@sum.lt>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP klaida: autentifikacija nepavyko.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP klaida: duomenys nepriimti.';
12
+$PHPMAILER_LANG['empty_message']        = 'Laiško turinys tuščias';
13
+$PHPMAILER_LANG['encoding']             = 'Neatpažinta koduotė: ';
14
+$PHPMAILER_LANG['execute']              = 'Nepavyko įvykdyti komandos: ';
15
+$PHPMAILER_LANG['file_access']          = 'Byla nepasiekiama: ';
16
+$PHPMAILER_LANG['file_open']            = 'Bylos klaida: Nepavyksta atidaryti: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Neteisingas siuntėjo adresas: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Nepavyko paleisti mail funkcijos.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Neteisingas adresas: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.';
21
+$PHPMAILER_LANG['provide_address']      = 'Nurodykite bent vieną gavėjo adresą.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: ';
23
+$PHPMAILER_LANG['signing']              = 'Prisijungimo klaida: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP susijungimo klaida';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP stoties klaida: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Nepavyko priskirti reikšmės kintamajam: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-lv.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Latvian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Eduards M. <e@npd.lv>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP kļūda: Autorizācija neizdevās.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Kļūda: Nepieņem informāciju.';
12
+$PHPMAILER_LANG['empty_message']        = 'Ziņojuma teksts ir tukšs';
13
+$PHPMAILER_LANG['encoding']             = 'Neatpazīts kodējums: ';
14
+$PHPMAILER_LANG['execute']              = 'Neizdevās izpildīt komandu: ';
15
+$PHPMAILER_LANG['file_access']          = 'Fails nav pieejams: ';
16
+$PHPMAILER_LANG['file_open']            = 'Faila kļūda: Nevar atvērt failu: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Nepareiza sūtītāja adrese: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Nevar palaist sūtīšanas funkciju.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Nepareiza adrese: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.';
21
+$PHPMAILER_LANG['provide_address']      = 'Lūdzu, norādiet vismaz vienu adresātu.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: ';
23
+$PHPMAILER_LANG['signing']              = 'Autorizācijas kļūda: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP savienojuma kļūda';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP servera kļūda: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Nevar piešķirt mainīgā vērtību: ';
27
+//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-mg.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Malagasy PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Hackinet <piyushjha8164@gmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP diso: tsy voarakitra ny angona.';
12
+$PHPMAILER_LANG['empty_message']        = 'Tsy misy ny votoaty mailaka.';
13
+$PHPMAILER_LANG['encoding']             = 'Tsy fantatra encoding: ';
14
+$PHPMAILER_LANG['execute']              = 'Tsy afaka manatanteraka ity baiko manaraka ity: ';
15
+$PHPMAILER_LANG['file_access']          = 'Tsy nahomby ny fidirana amin\'ity rakitra ity: ';
16
+$PHPMAILER_LANG['file_open']            = 'Hadisoana diso: Tsy afaka nanokatra ity file manaraka ity: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Ny adiresy iraka manaraka dia diso: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Tsy afaka nanomboka ny hetsika mail.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Tsy mety ny adiresy: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tsy manohana.';
21
+$PHPMAILER_LANG['provide_address']      = 'Alefaso azafady iray adiresy iray farafahakeliny.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Tsy mety ireo mpanaraka ireto: ';
23
+$PHPMAILER_LANG['signing']              = 'Error nandritra ny sonia:';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Tsy nahomby ny fifandraisana tamin\'ny server SMTP.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Fahadisoana tamin\'ny server SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Tsy azo atao ny mametraka na mamerina ny variable: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Tsy hita ny ampahany: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-mn.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Mongolian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author @wispas
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Алдаа SMTP: Холбогдож чадсангүй.';
10
+$PHPMAILER_LANG['connect_host']         = 'Алдаа SMTP: SMTP- сервертэй холбогдож болохгүй байна.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Алдаа SMTP: зөвшөөрөгдсөнгүй.';
12
+$PHPMAILER_LANG['encoding']             = 'Тодорхойгүй кодчилол: ';
13
+$PHPMAILER_LANG['execute']              = 'Коммандыг гүйцэтгэх боломжгүй байна: ';
14
+$PHPMAILER_LANG['file_access']          = 'Файлд хандах боломжгүй байна: ';
15
+$PHPMAILER_LANG['file_open']            = 'Файлын алдаа: файлыг нээх боломжгүй байна: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Илгээгчийн хаяг буруу байна: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Mail () функцийг ажиллуулах боломжгүй байна.';
18
+$PHPMAILER_LANG['provide_address']      = 'Хүлээн авагчийн имэйл хаягийг оруулна уу.';
19
+$PHPMAILER_LANG['mailer_not_supported'] = ' — мэйл серверийг дэмжсэнгүй.';
20
+$PHPMAILER_LANG['recipients_failed']    = 'Алдаа SMTP: ийм хаягийг илгээж чадсангүй: ';
21
+$PHPMAILER_LANG['empty_message']        = 'Хоосон мессэж';
22
+$PHPMAILER_LANG['invalid_address']      = 'И-Мэйл буруу форматтай тул илгээх боломжгүй: ';
23
+$PHPMAILER_LANG['signing']              = 'Гарын үсгийн алдаа: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP сервертэй холбогдоход алдаа гарлаа';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP серверийн алдаа: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Хувьсагчийг тохируулах эсвэл дахин тохируулах боломжгүй байна: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Өргөтгөл байхгүй: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ms.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Malaysian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Nawawi Jamili <nawawi@rutweb.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Ralat SMTP: Tidak dapat pengesahan.';
10
+$PHPMAILER_LANG['connect_host']         = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Ralat SMTP: Data tidak diterima oleh pelayan.';
12
+$PHPMAILER_LANG['empty_message']        = 'Tiada isi untuk mesej';
13
+$PHPMAILER_LANG['encoding']             = 'Pengekodan tidak diketahui: ';
14
+$PHPMAILER_LANG['execute']              = 'Tidak dapat melaksanakan: ';
15
+$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses fail: ';
16
+$PHPMAILER_LANG['file_open']            = 'Ralat Fail: Tidak dapat membuka fail: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Berikut merupakan ralat dari alamat e-mel: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Tidak dapat memberi contoh fungsi e-mel.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Alamat emel tidak sah: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.';
21
+$PHPMAILER_LANG['provide_address']      = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'Ralat SMTP: Penerima e-mel berikut telah gagal: ';
23
+$PHPMAILER_LANG['signing']              = 'Ralat pada tanda tangan: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() telah gagal.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Ralat pada pelayan SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Sambungan hilang: ';

+ 26
- 0
addons/phpmailer/SDK/language/phpmailer.lang-nb.php View File

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+/**
4
+ * Norwegian Bokmål PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'SMTP Feil: Kunne ikke autentisere.';
9
+$PHPMAILER_LANG['connect_host']         = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Feil: Datainnhold ikke akseptert.';
11
+$PHPMAILER_LANG['empty_message']        = 'Meldingsinnhold mangler';
12
+$PHPMAILER_LANG['encoding']             = 'Ukjent koding: ';
13
+$PHPMAILER_LANG['execute']              = 'Kunne ikke utføre: ';
14
+$PHPMAILER_LANG['file_access']          = 'Får ikke tilgang til filen: ';
15
+$PHPMAILER_LANG['file_open']            = 'Fil Feil: Kunne ikke åpne filen: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Følgende Frå adresse feilet: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere post funksjon.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Ugyldig adresse: ';
19
+$PHPMAILER_LANG['mailer_not_supported'] = ' sender er ikke støttet.';
20
+$PHPMAILER_LANG['provide_address']      = 'Du må opppgi minst en mottakeradresse.';
21
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feil: Følgende mottakeradresse feilet: ';
22
+$PHPMAILER_LANG['signing']              = 'Signering Feil: ';
23
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP connect() feilet.';
24
+$PHPMAILER_LANG['smtp_error']           = 'SMTP server feil: ';
25
+$PHPMAILER_LANG['variable_set']         = 'Kan ikke skrive eller omskrive variabel: ';
26
+$PHPMAILER_LANG['extension_missing']    = 'Utvidelse mangler: ';

+ 34
- 0
addons/phpmailer/SDK/language/phpmailer.lang-nl.php View File

@@ -0,0 +1,34 @@
1
+<?php
2
+
3
+/**
4
+ * Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.
5
+ * @package PHPMailer
6
+ * @author Tuxion <team@tuxion.nl>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: authenticatie mislukt.';
10
+$PHPMAILER_LANG['buggy_php']            = 'PHP versie gededecteerd die onderhavig is aan een bug die kan resulteren in gecorrumpeerde berichten. Om dit te voorkomen, gebruik SMTP voor het verzenden van berichten, zet de mail.add_x_header optie in uw php.ini file uit, gebruik MacOS of Linux, of pas de gebruikte PHP versie aan naar versie 7.0.17+ or 7.1.3+.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon niet verbinden met SMTP-host.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data niet geaccepteerd.';
13
+$PHPMAILER_LANG['empty_message']        = 'Berichttekst is leeg';
14
+$PHPMAILER_LANG['encoding']             = 'Onbekende codering: ';
15
+$PHPMAILER_LANG['execute']              = 'Kon niet uitvoeren: ';
16
+$PHPMAILER_LANG['extension_missing']    = 'Extensie afwezig: ';
17
+$PHPMAILER_LANG['file_access']          = 'Kreeg geen toegang tot bestand: ';
18
+$PHPMAILER_LANG['file_open']            = 'Bestandsfout: kon bestand niet openen: ';
19
+$PHPMAILER_LANG['from_failed']          = 'Het volgende afzendersadres is mislukt: ';
20
+$PHPMAILER_LANG['instantiate']          = 'Kon mailfunctie niet initialiseren.';
21
+$PHPMAILER_LANG['invalid_address']      = 'Ongeldig adres: ';
22
+$PHPMAILER_LANG['invalid_header']       = 'Ongeldige header naam of waarde';
23
+$PHPMAILER_LANG['invalid_hostentry']    = 'Ongeldige hostentry: ';
24
+$PHPMAILER_LANG['invalid_host']         = 'Ongeldige host: ';
25
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
26
+$PHPMAILER_LANG['provide_address']      = 'Er moet minstens één ontvanger worden opgegeven.';
27
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';
28
+$PHPMAILER_LANG['signing']              = 'Signeerfout: ';
29
+$PHPMAILER_LANG['smtp_code']            = 'SMTP code: ';
30
+$PHPMAILER_LANG['smtp_code_ex']         = 'Aanvullende SMTP informatie: ';
31
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Verbinding mislukt.';
32
+$PHPMAILER_LANG['smtp_detail']          = 'Detail: ';
33
+$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfout: ';
34
+$PHPMAILER_LANG['variable_set']         = 'Kan de volgende variabele niet instellen of resetten: ';

+ 26
- 0
addons/phpmailer/SDK/language/phpmailer.lang-pl.php View File

@@ -0,0 +1,26 @@
1
+<?php
2
+
3
+/**
4
+ * Polish PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';
9
+$PHPMAILER_LANG['connect_host']         = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
10
+$PHPMAILER_LANG['data_not_accepted']    = 'Błąd SMTP: Dane nie zostały przyjęte.';
11
+$PHPMAILER_LANG['empty_message']        = 'Wiadomość jest pusta.';
12
+$PHPMAILER_LANG['encoding']             = 'Błędny sposób kodowania znaków: ';
13
+$PHPMAILER_LANG['execute']              = 'Nie można uruchomić: ';
14
+$PHPMAILER_LANG['file_access']          = 'Brak dostępu do pliku: ';
15
+$PHPMAILER_LANG['file_open']            = 'Nie można otworzyć pliku: ';
16
+$PHPMAILER_LANG['from_failed']          = 'Następujący adres nadawcy jest nieprawidłowy lub nie istnieje: ';
17
+$PHPMAILER_LANG['instantiate']          = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
18
+$PHPMAILER_LANG['invalid_address']      = 'Nie można wysłać wiadomości, ' . 'następujący adres odbiorcy jest nieprawidłowy lub nie istnieje: ';
19
+$PHPMAILER_LANG['provide_address']      = 'Należy podać prawidłowy adres email odbiorcy.';
20
+$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
21
+$PHPMAILER_LANG['recipients_failed']    = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi lub nie istnieją: ';
22
+$PHPMAILER_LANG['signing']              = 'Błąd podpisywania wiadomości: ';
23
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Wywołanie funkcji SMTP Connect() zostało zakończone niepowodzeniem.';
24
+$PHPMAILER_LANG['smtp_error']           = 'Błąd SMTP: ';
25
+$PHPMAILER_LANG['variable_set']         = 'Nie można ustawić lub zmodyfikować zmiennej: ';
26
+$PHPMAILER_LANG['extension_missing']    = 'Brakujące rozszerzenie: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-pt.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Portuguese (European) PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Jonadabe <jonadabe@hotmail.com>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'Erro do SMTP: Não foi possível realizar a autenticação.';
10
+$PHPMAILER_LANG['connect_host']         = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro do SMTP: Os dados foram rejeitados.';
12
+$PHPMAILER_LANG['empty_message']        = 'A mensagem no e-mail está vazia.';
13
+$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
14
+$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
15
+$PHPMAILER_LANG['file_access']          = 'Não foi possível aceder o ficheiro: ';
16
+$PHPMAILER_LANG['file_open']            = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Ocorreram falhas nos endereços dos seguintes remententes: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Não foi possível iniciar uma instância da função mail.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: ';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
21
+$PHPMAILER_LANG['provide_address']      = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'Erro do SMTP: O endereço do seguinte destinatário falhou: ';
23
+$PHPMAILER_LANG['signing']              = 'Erro ao assinar: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
25
+$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Extensão em falta: ';

+ 38
- 0
addons/phpmailer/SDK/language/phpmailer.lang-pt_br.php View File

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+/**
4
+ * Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Paulo Henrique Garcia <paulo@controllerweb.com.br>
7
+ * @author Lucas Guimarães <lucas@lucasguimaraes.com>
8
+ * @author Phelipe Alves <phelipealvesdesouza@gmail.com>
9
+ * @author Fabio Beneditto <fabiobeneditto@gmail.com>
10
+ * @author Geidson Benício Coelho <geidsonc@gmail.com>
11
+ */
12
+
13
+$PHPMAILER_LANG['authenticate']         = 'Erro de SMTP: Não foi possível autenticar.';
14
+$PHPMAILER_LANG['buggy_php']            = 'Sua versão do PHP é afetada por um bug que por resultar em messagens corrompidas. Para corrigir, mude para enviar usando SMTP, desative a opção mail.add_x_header em seu php.ini, mude para MacOS ou Linux, ou atualize seu PHP para versão 7.0.17+ ou 7.1.3+ ';
15
+$PHPMAILER_LANG['connect_host']         = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.';
16
+$PHPMAILER_LANG['data_not_accepted']    = 'Erro de SMTP: Dados rejeitados.';
17
+$PHPMAILER_LANG['empty_message']        = 'Mensagem vazia';
18
+$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';
19
+$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';
20
+$PHPMAILER_LANG['extension_missing']    = 'Extensão não existe: ';
21
+$PHPMAILER_LANG['file_access']          = 'Não foi possível acessar o arquivo: ';
22
+$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';
23
+$PHPMAILER_LANG['from_failed']          = 'Os seguintes remetentes falharam: ';
24
+$PHPMAILER_LANG['instantiate']          = 'Não foi possível instanciar a função mail.';
25
+$PHPMAILER_LANG['invalid_address']      = 'Endereço de e-mail inválido: ';
26
+$PHPMAILER_LANG['invalid_header']       = 'Nome ou valor de cabeçalho inválido';
27
+$PHPMAILER_LANG['invalid_hostentry']    = 'hostentry inválido: ';
28
+$PHPMAILER_LANG['invalid_host']         = 'host inválido: ';
29
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
30
+$PHPMAILER_LANG['provide_address']      = 'Você deve informar pelo menos um destinatário.';
31
+$PHPMAILER_LANG['recipients_failed']    = 'Erro de SMTP: Os seguintes destinatários falharam: ';
32
+$PHPMAILER_LANG['signing']              = 'Erro de Assinatura: ';
33
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';
34
+$PHPMAILER_LANG['smtp_code']            = 'Código do servidor SMTP: ';
35
+$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
36
+$PHPMAILER_LANG['smtp_code_ex']         = 'Informações adicionais do servidor SMTP: ';
37
+$PHPMAILER_LANG['smtp_detail']          = 'Detalhes do servidor SMTP: ';
38
+$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';

+ 33
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ro.php View File

@@ -0,0 +1,33 @@
1
+<?php
2
+
3
+/**
4
+ * Romanian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ */
7
+
8
+$PHPMAILER_LANG['authenticate']         = 'Eroare SMTP: Autentificarea a eșuat.';
9
+$PHPMAILER_LANG['buggy_php']            = 'Versiunea instalată de PHP este afectată de o problemă care poate duce la coruperea mesajelor Pentru a preveni această problemă, folosiți SMTP, dezactivați opțiunea mail.add_x_header din php.ini, folosiți MacOS/Linux sau actualizați versiunea de PHP la 7.0.17+ sau 7.1.3+.';
10
+$PHPMAILER_LANG['connect_host']         = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'Eroare SMTP: Datele nu au fost acceptate.';
12
+$PHPMAILER_LANG['empty_message']        = 'Mesajul este gol.';
13
+$PHPMAILER_LANG['encoding']             = 'Encodare necunoscută: ';
14
+$PHPMAILER_LANG['execute']              = 'Nu se poate executa următoarea comandă:  ';
15
+$PHPMAILER_LANG['extension_missing']    = 'Lipsește extensia: ';
16
+$PHPMAILER_LANG['file_access']          = 'Nu se poate accesa următorul fișier: ';
17
+$PHPMAILER_LANG['file_open']            = 'Eroare fișier: Nu se poate deschide următorul fișier: ';
18
+$PHPMAILER_LANG['from_failed']          = 'Următoarele adrese From au dat eroare: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Funcția mail nu a putut fi inițializată.';
20
+$PHPMAILER_LANG['invalid_address']      = 'Adresa de email nu este validă: ';
21
+$PHPMAILER_LANG['invalid_header']       = 'Numele sau valoarea header-ului nu este validă: ';
22
+$PHPMAILER_LANG['invalid_hostentry']    = 'Hostentry invalid: ';
23
+$PHPMAILER_LANG['invalid_host']         = 'Host invalid: ';
24
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';
25
+$PHPMAILER_LANG['provide_address']      = 'Trebuie să adăugați cel puțin o adresă de email.';
26
+$PHPMAILER_LANG['recipients_failed']    = 'Eroare SMTP: Următoarele adrese de email au eșuat: ';
27
+$PHPMAILER_LANG['signing']              = 'A aparut o problemă la semnarea emailului. ';
28
+$PHPMAILER_LANG['smtp_code']            = 'Cod SMTP: ';
29
+$PHPMAILER_LANG['smtp_code_ex']         = 'Informații SMTP adiționale: ';
30
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Conectarea la serverul SMTP a eșuat.';
31
+$PHPMAILER_LANG['smtp_detail']          = 'Detalii SMTP: ';
32
+$PHPMAILER_LANG['smtp_error']           = 'Eroare server SMTP: ';
33
+$PHPMAILER_LANG['variable_set']         = 'Nu se poate seta/reseta variabila. ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-ru.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Russian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Alexey Chumakov <alex@chumakov.ru>
7
+ * @author Foster Snowhill <i18n@forstwoof.ru>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'Ошибка SMTP: ошибка авторизации.';
11
+$PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'Ошибка SMTP: данные не приняты.';
13
+$PHPMAILER_LANG['encoding']             = 'Неизвестная кодировка: ';
14
+$PHPMAILER_LANG['execute']              = 'Невозможно выполнить команду: ';
15
+$PHPMAILER_LANG['file_access']          = 'Нет доступа к файлу: ';
16
+$PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удаётся открыть файл: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Неверный адрес отправителя: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail().';
19
+$PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один email-адрес получателя.';
20
+$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
21
+$PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: не удалась отправка таким адресатам: ';
22
+$PHPMAILER_LANG['empty_message']        = 'Пустое сообщение';
23
+$PHPMAILER_LANG['invalid_address']      = 'Не отправлено из-за неправильного формата email-адреса: ';
24
+$PHPMAILER_LANG['signing']              = 'Ошибка подписи: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ошибка соединения с SMTP-сервером';
26
+$PHPMAILER_LANG['smtp_error']           = 'Ошибка SMTP-сервера: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Невозможно установить или сбросить переменную: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Расширение отсутствует: ';

+ 30
- 0
addons/phpmailer/SDK/language/phpmailer.lang-sk.php View File

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+/**
4
+ * Slovak PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Michal Tinka <michaltinka@gmail.com>
7
+ * @author Peter Orlický <pcmanik91@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Chyba autentifikácie.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dáta neboli prijaté';
13
+$PHPMAILER_LANG['empty_message']        = 'Prázdne telo správy.';
14
+$PHPMAILER_LANG['encoding']             = 'Neznáme kódovanie: ';
15
+$PHPMAILER_LANG['execute']              = 'Nedá sa vykonať: ';
16
+$PHPMAILER_LANG['file_access']          = 'Súbor nebol nájdený: ';
17
+$PHPMAILER_LANG['file_open']            = 'File Error: Súbor sa otvoriť pre čítanie: ';
18
+$PHPMAILER_LANG['from_failed']          = 'Následujúca adresa From je nesprávna: ';
19
+$PHPMAILER_LANG['instantiate']          = 'Nedá sa vytvoriť inštancia emailovej funkcie.';
20
+$PHPMAILER_LANG['invalid_address']      = 'Neodoslané, emailová adresa je nesprávna: ';
21
+$PHPMAILER_LANG['invalid_hostentry']    = 'Záznam hostiteľa je nesprávny: ';
22
+$PHPMAILER_LANG['invalid_host']         = 'Hostiteľ je nesprávny: ';
23
+$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.';
24
+$PHPMAILER_LANG['provide_address']      = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.';
25
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Adresy príjemcov niesu správne ';
26
+$PHPMAILER_LANG['signing']              = 'Chyba prihlasovania: ';
27
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zlyhalo.';
28
+$PHPMAILER_LANG['smtp_error']           = 'SMTP chyba serveru: ';
29
+$PHPMAILER_LANG['variable_set']         = 'Nemožno nastaviť alebo resetovať premennú: ';
30
+$PHPMAILER_LANG['extension_missing']    = 'Chýba rozšírenie: ';

+ 36
- 0
addons/phpmailer/SDK/language/phpmailer.lang-sl.php View File

@@ -0,0 +1,36 @@
1
+<?php
2
+
3
+/**
4
+ * Slovene PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Klemen Tušar <techouse@gmail.com>
7
+ * @author Filip Š <projects@filips.si>
8
+ * @author Blaž Oražem <blaz@orazem.si>
9
+ */
10
+
11
+$PHPMAILER_LANG['authenticate']         = 'SMTP napaka: Avtentikacija ni uspela.';
12
+$PHPMAILER_LANG['buggy_php']            = 'Na vašo PHP različico vpliva napaka, ki lahko povzroči poškodovana sporočila. Če želite težavo odpraviti, preklopite na pošiljanje prek SMTP, onemogočite možnost mail.add_x_header v vaši php.ini datoteki, preklopite na MacOS ali Linux, ali nadgradite vašo PHP zaličico na 7.0.17+ ali 7.1.3+.';
13
+$PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.';
14
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP napaka: Strežnik zavrača podatke.';
15
+$PHPMAILER_LANG['empty_message']        = 'E-poštno sporočilo nima vsebine.';
16
+$PHPMAILER_LANG['encoding']             = 'Nepoznan tip kodiranja: ';
17
+$PHPMAILER_LANG['execute']              = 'Operacija ni uspela: ';
18
+$PHPMAILER_LANG['extension_missing']    = 'Manjkajoča razširitev: ';
19
+$PHPMAILER_LANG['file_access']          = 'Nimam dostopa do datoteke: ';
20
+$PHPMAILER_LANG['file_open']            = 'Ne morem odpreti datoteke: ';
21
+$PHPMAILER_LANG['from_failed']          = 'Neveljaven e-naslov pošiljatelja: ';
22
+$PHPMAILER_LANG['instantiate']          = 'Ne morem inicializirati mail funkcije.';
23
+$PHPMAILER_LANG['invalid_address']      = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
24
+$PHPMAILER_LANG['invalid_header']       = 'Neveljavno ime ali vrednost glave';
25
+$PHPMAILER_LANG['invalid_hostentry']    = 'Neveljaven vnos gostitelja: ';
26
+$PHPMAILER_LANG['invalid_host']         = 'Neveljaven gostitelj: ';
27
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
28
+$PHPMAILER_LANG['provide_address']      = 'Prosimo, vnesite vsaj enega naslovnika.';
29
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
30
+$PHPMAILER_LANG['signing']              = 'Napaka pri podpisovanju: ';
31
+$PHPMAILER_LANG['smtp_code']            = 'SMTP koda: ';
32
+$PHPMAILER_LANG['smtp_code_ex']         = 'Dodatne informacije o SMTP: ';
33
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';
34
+$PHPMAILER_LANG['smtp_detail']          = 'Podrobnosti: ';
35
+$PHPMAILER_LANG['smtp_error']           = 'Napaka SMTP strežnika: ';
36
+$PHPMAILER_LANG['variable_set']         = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-sr.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Serbian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Александар Јевремовић <ajevremovic@gmail.com>
7
+ * @author Miloš Milanović <mmilanovic016@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: аутентификација није успела.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: повезивање са SMTP сервером није успело.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: подаци нису прихваћени.';
13
+$PHPMAILER_LANG['empty_message']        = 'Садржај поруке је празан.';
14
+$PHPMAILER_LANG['encoding']             = 'Непознато кодирање: ';
15
+$PHPMAILER_LANG['execute']              = 'Није могуће извршити наредбу: ';
16
+$PHPMAILER_LANG['file_access']          = 'Није могуће приступити датотеци: ';
17
+$PHPMAILER_LANG['file_open']            = 'Није могуће отворити датотеку: ';
18
+$PHPMAILER_LANG['from_failed']          = 'SMTP грешка: слање са следећих адреса није успело: ';
19
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: слање на следеће адресе није успело: ';
20
+$PHPMAILER_LANG['instantiate']          = 'Није могуће покренути mail функцију.';
21
+$PHPMAILER_LANG['invalid_address']      = 'Порука није послата. Неисправна адреса: ';
22
+$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';
23
+$PHPMAILER_LANG['provide_address']      = 'Дефинишите бар једну адресу примаоца.';
24
+$PHPMAILER_LANG['signing']              = 'Грешка приликом пријаве: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Повезивање са SMTP сервером није успело.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Грешка SMTP сервера: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Није могуће задати нити ресетовати променљиву: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Недостаје проширење: ';

+ 28
- 0
addons/phpmailer/SDK/language/phpmailer.lang-sr_latn.php View File

@@ -0,0 +1,28 @@
1
+<?php
2
+
3
+/**
4
+ * Serbian PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Александар Јевремовић <ajevremovic@gmail.com>
7
+ * @author Miloš Milanović <mmilanovic016@gmail.com>
8
+ */
9
+
10
+$PHPMAILER_LANG['authenticate']         = 'SMTP greška: autentifikacija nije uspela.';
11
+$PHPMAILER_LANG['connect_host']         = 'SMTP greška: povezivanje sa SMTP serverom nije uspelo.';
12
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP greška: podaci nisu prihvaćeni.';
13
+$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
14
+$PHPMAILER_LANG['encoding']             = 'Nepoznato kodiranje: ';
15
+$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';
16
+$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';
17
+$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';
18
+$PHPMAILER_LANG['from_failed']          = 'SMTP greška: slanje sa sledećih adresa nije uspelo: ';
19
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP greška: slanje na sledeće adrese nije uspelo: ';
20
+$PHPMAILER_LANG['instantiate']          = 'Nije moguće pokrenuti mail funkciju.';
21
+$PHPMAILER_LANG['invalid_address']      = 'Poruka nije poslata. Neispravna adresa: ';
22
+$PHPMAILER_LANG['mailer_not_supported'] = ' majler nije podržan.';
23
+$PHPMAILER_LANG['provide_address']      = 'Definišite bar jednu adresu primaoca.';
24
+$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';
25
+$PHPMAILER_LANG['smtp_connect_failed']  = 'Povezivanje sa SMTP serverom nije uspelo.';
26
+$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP servera: ';
27
+$PHPMAILER_LANG['variable_set']         = 'Nije moguće zadati niti resetovati promenljivu: ';
28
+$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';

+ 27
- 0
addons/phpmailer/SDK/language/phpmailer.lang-sv.php View File

@@ -0,0 +1,27 @@
1
+<?php
2
+
3
+/**
4
+ * Swedish PHPMailer language file: refer to English translation for definitive list
5
+ * @package PHPMailer
6
+ * @author Johan Linnér <johan@linner.biz>
7
+ */
8
+
9
+$PHPMAILER_LANG['authenticate']         = 'SMTP fel: Kunde inte autentisera.';
10
+$PHPMAILER_LANG['connect_host']         = 'SMTP fel: Kunde inte ansluta till SMTP-server.';
11
+$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fel: Data accepterades inte.';
12
+//$PHPMAILER_LANG['empty_message']        = 'Message body empty';
13
+$PHPMAILER_LANG['encoding']             = 'Okänt encode-format: ';
14
+$PHPMAILER_LANG['execute']              = 'Kunde inte köra: ';
15
+$PHPMAILER_LANG['file_access']          = 'Ingen åtkomst till fil: ';
16
+$PHPMAILER_LANG['file_open']            = 'Fil fel: Kunde inte öppna fil: ';
17
+$PHPMAILER_LANG['from_failed']          = 'Följande avsändaradress är felaktig: ';
18
+$PHPMAILER_LANG['instantiate']          = 'Kunde inte initiera e-postfunktion.';
19
+$PHPMAILER_LANG['invalid_address']      = 'Felaktig adress: ';
20
+$PHPMAILER_LANG['provide_address']      = 'Du måste ange minst en mottagares e-postadress.';
21
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
22
+$PHPMAILER_LANG['recipients_failed']    = 'SMTP fel: Följande mottagare är felaktig: ';
23
+$PHPMAILER_LANG['signing']              = 'Signeringsfel: ';
24
+$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() misslyckades.';
25
+$PHPMAILER_LANG['smtp_error']           = 'SMTP serverfel: ';
26
+$PHPMAILER_LANG['variable_set']         = 'Kunde inte definiera eller återställa variabel: ';
27
+$PHPMAILER_LANG['extension_missing']    = 'Tillägg ej tillgängligt: ';

+ 0
- 0
addons/phpmailer/SDK/language/phpmailer.lang-tl.php View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save