diff --git a/.gitignore b/.gitignore index 5651064..7f2a45e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ 01.web/.vscode 01.web/.vscode/* 02.php/.vscode -02.php/.vscode/* \ No newline at end of file +02.php/.vscode/* diff --git a/01.web/src/main.js b/01.web/src/main.js index b434e2b..e703cd3 100644 --- a/01.web/src/main.js +++ b/01.web/src/main.js @@ -84,7 +84,7 @@ axios.interceptors.request.use(function (config) { */ axios.interceptors.response.use(function (response) { if (response.data.code != undefined && response.data.code != '') { - if (response.data.code != 200) { + if (response.data.code == 401) { sessionStorage.removeItem('token'); sessionStorage.removeItem('user_name'); sessionStorage.removeItem('user_role_id'); diff --git a/01.web/src/views/advance/index.vue b/01.web/src/views/advance/index.vue index baf89f3..81bbe0c 100644 --- a/01.web/src/views/advance/index.vue +++ b/01.web/src/views/advance/index.vue @@ -4,7 +4,7 @@ -
+ @@ -63,7 +63,7 @@ - + - + - + - svnserve绑定主机名 - 管理系统主机名 + 绑定主机 + 自定义主机 @@ -150,8 +150,8 @@ - - + + - - + + - + + + + + + + + + + + + + SSL + + + TLS + + + + + + + + - + + - + - + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + - + + - + - + + - + + + - + - + - - + @@ -254,16 +345,6 @@ - - - - - - - - - - @@ -358,6 +439,8 @@ export default { tempBindHost: "", //管理系统主机名称 tempManageHost: "", + //测试邮箱 + tempTestEmail: "", /** * 控制修改状态 @@ -384,6 +467,8 @@ export default { loadingEditPort: false, //更换管理系统地址 loadingEditManageHost: false, + //发送测试邮件 + loadingSendTest: false, /** * subversion信息 @@ -406,20 +491,31 @@ export default { /** * 对话框 */ - //新建仓库 - modalAddRep: false, - //编辑仓库信息 - modalEditRepName: false, /** * 表单 */ - //新建仓库 - formRepAdd: {}, - //编辑仓库 - formRepEdit: { - repNameOld: "", - repNameNew: "", + //邮件服务 + formMailSmtp: { + host: "", + auth: "", + user: "", + pass: "", + encryption: "", + autotls: true, + port: 0, + to: "", + from: "", + + // autotls: true, + // auth: false, + // host: "", + // encryption: "none", + // port: 25, + // user: "", + // pass: "", + // from: "", + status: false, }, }; }, @@ -433,6 +529,7 @@ export default { } this.GetDetail(); this.GetConfig(); + this.GetEmail(); }, methods: { /** @@ -449,7 +546,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=subversion&a=GetDetail&t=web", data) + .post("/api/Svn/GetDetail?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -501,6 +598,106 @@ export default { this.disabledEditManageHost = false; } }, + /** + * 获取邮件配置信息 + */ + GetEmail() { + var that = this; + var data = {}; + that.$axios + .post("/api/Mail/GetEmail?t=web", data) + .then(function (response) { + var result = response.data; + if (result.status == 1) { + that.formMailSmtp = result.data; + } else { + that.$Message.error(result.message); + } + }) + .catch(function (error) { + console.log(error); + that.$Message.error("出错了 请联系管理员!"); + }); + }, + /** + * 更换加密选择 触发 + */ + ChangeEncryption(value) { + //自动推荐默认端口 + if (value == "none") { + this.formMailSmtp.port = 25; + } else if (value == "SSL") { + this.formMailSmtp.port = 465; + } else if (value == "TLS") { + this.formMailSmtp.port = 587; + } + }, + /** + * 修改邮件配置信息 + */ + EditEmail() { + var that = this; + var data = { + host: that.formMailSmtp.host, + auth: that.formMailSmtp.auth, + user: that.formMailSmtp.user, + pass: that.formMailSmtp.pass, + encryption: that.formMailSmtp.encryption, + autotls: that.formMailSmtp.autotls, + port: that.formMailSmtp.port, + from: that.formMailSmtp.from, + status: that.formMailSmtp.status, + }; + that.$axios + .post("/api/Mail/EditEmail?t=web", data) + .then(function (response) { + var result = response.data; + if (result.status == 1) { + that.$Message.success(result.message); + that.GetEmail(); + } else { + that.$Message.error(result.message); + } + }) + .catch(function (error) { + console.log(error); + that.$Message.error("出错了 请联系管理员!"); + }); + }, + /** + * 发送测试邮件 + */ + SendTest() { + var that = this; + that.loadingSendTest = true; + var data = { + host: that.formMailSmtp.host, + auth: that.formMailSmtp.auth, + user: that.formMailSmtp.user, + pass: that.formMailSmtp.pass, + encryption: that.formMailSmtp.encryption, + autotls: that.formMailSmtp.autotls, + port: that.formMailSmtp.port, + to: that.formMailSmtp.to, + from: that.formMailSmtp.from, + }; + that.$axios + .post("/api/Mail/SendTest?t=web", data) + .then(function (response) { + that.loadingSendTest = false; + var result = response.data; + if (result.status == 1) { + that.$Message.success(result.message); + } else { + that.$Message.error(result.message); + } + }) + .catch(function (error) { + that.loadingSendTest = false; + console.log(error); + that.$Message.error("出错了 请联系管理员!"); + }); + }, /** * 获取配置文件信息 */ @@ -508,7 +705,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=subversion&a=GetConfig&t=web", data) + .post("/api/Svn/GetConfig?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -542,7 +739,7 @@ export default { that.loadingSvnserveStart = true; var data = {}; that.$axios - .post("/api.php?c=subversion&a=Start&t=web", data) + .post("/api/Svn/Start?t=web", data) .then(function (response) { that.loadingSvnserveStart = false; var result = response.data; @@ -573,7 +770,7 @@ export default { that.loadingSvnserveStop = true; var data = {}; that.$axios - .post("/api.php?c=subversion&a=Stop&t=web", data) + .post("/api/Svn/Stop?t=web", data) .then(function (response) { that.loadingSvnserveStop = false; var result = response.data; @@ -607,7 +804,7 @@ export default { bindPort: that.tempBindPort, }; that.$axios - .post("/api.php?c=subversion&a=EditPort&t=web", data) + .post("/api/Svn/EditPort?t=web", data) .then(function (response) { that.loadingEditPort = false; var result = response.data; @@ -642,7 +839,7 @@ export default { bindHost: that.tempBindHost, }; that.$axios - .post("/api.php?c=subversion&a=EditHost&t=web", data) + .post("/api/Svn/EditHost?t=web", data) .then(function (response) { that.loadingEditHost = false; var result = response.data; @@ -677,7 +874,7 @@ export default { manageHost: that.tempManageHost, }; that.$axios - .post("/api.php?c=subversion&a=EditManageHost&t=web", data) + .post("/api/Svn/EditManageHost?t=web", data) .then(function (response) { that.loadingEditManageHost = false; var result = response.data; @@ -706,7 +903,7 @@ export default { enable: value, }; that.$axios - .post("/api.php?c=subversion&a=EditEnable&t=web", data) + .post("/api/Svn/EditEnable?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/index/index.vue b/01.web/src/views/index/index.vue index dc0776a..7235708 100644 --- a/01.web/src/views/index/index.vue +++ b/01.web/src/views/index/index.vue @@ -235,7 +235,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=statistics&a=GetDisk&t=web", data) + .post("/api/Statistics/GetDisk?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -257,7 +257,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=statistics&a=GetSystemStatus&t=web", data) + .post("/api/Statistics/GetSystemStatus?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -279,7 +279,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=statistics&a=GetSystemAnalysis&t=web", data) + .post("/api/Statistics/GetSystemAnalysis?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/layout/basicLayout/index.vue b/01.web/src/views/layout/basicLayout/index.vue index a09adc9..7898137 100644 --- a/01.web/src/views/layout/basicLayout/index.vue +++ b/01.web/src/views/layout/basicLayout/index.vue @@ -140,7 +140,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=common&a=Logout&t=web", data) + .post("/api/Unimportant/Logout?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/login/index.vue b/01.web/src/views/login/index.vue index b80339c..0650d2f 100644 --- a/01.web/src/views/login/index.vue +++ b/01.web/src/views/login/index.vue @@ -153,7 +153,7 @@ export default { that.loadingGetVeryfyCode = "loading......"; var data = {}; that.$axios - .post("/api.php?c=common&a=GetVeryfyCode&t=web", data) + .post("/api/Unimportant/GetVeryfyCode?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -180,7 +180,7 @@ export default { code: that.formUserLogin.code, }; that.$axios - .post("/api.php?c=common&a=Login&t=web", data) + .post("/api/Unimportant/Login?t=web", data) .then(function (response) { that.loadingLogin = false; var result = response.data; diff --git a/01.web/src/views/personal/index.vue b/01.web/src/views/personal/index.vue index e79b040..43dafea 100644 --- a/01.web/src/views/personal/index.vue +++ b/01.web/src/views/personal/index.vue @@ -79,12 +79,7 @@
- +
@@ -92,14 +87,22 @@ + + + +
+ +
- +
@@ -107,7 +110,20 @@ + + + +
+ +
@@ -125,8 +141,8 @@ export default { /** * 加载 */ - loadingEditAdminUserName: true, - loadingEditAdminUserPass: true, + loadingEditAdminUserName: false, + loadingEditAdminUserPass: false, loadingEditSvnUserPass: false, /** * 表单 @@ -160,24 +176,27 @@ export default { }, EditAdminUserName() { var that = this; + that.loadingEditAdminUserName = true; var data = { userName: that.formEditAdminUserName.userName, confirm: that.formEditAdminUserName.confirm, }; that.$axios - .post("/api.php?c=personal&a=EditAdminUserName&t=web", data) + .post("/api/Personal/EditAdminUserName?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { + that.loadingEditAdminUserName = false; + that.modalEditAdminUserName = false; that.$Message.success(result.message); that.LogOut(); } else { + that.loadingEditAdminUserName = false; that.$Message.error(result.message); } - that.modalEditAdminUserName = false; }) .catch(function (error) { - that.modalEditAdminUserName = false; + that.loadingEditAdminUserName = false; console.log(error); that.$Message.error("出错了 请联系管理员!"); }); @@ -190,24 +209,27 @@ export default { }, EditAdminUserPass() { var that = this; + that.loadingEditAdminUserPass = true; var data = { password: that.formEditAdminUserPass.password, confirm: that.formEditAdminUserPass.confirm, }; that.$axios - .post("/api.php?c=personal&a=EditAdminUserPass&t=web", data) + .post("/api/Personal/EditAdminUserPass?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { + that.loadingEditAdminUserPass = false; + that.modalEditAdminUserPass = false; that.$Message.success(result.message); that.LogOut(); } else { + that.loadingEditAdminUserPass = false; that.$Message.error(result.message); } - that.modalEditAdminUserPass = false; }) .catch(function (error) { - that.modalEditAdminUserPass = false; + that.loadingEditAdminUserPass = false; console.log(error); that.$Message.error("出错了 请联系管理员!"); }); @@ -225,7 +247,7 @@ export default { confirm: that.formEditSvnUserPass.confirm, }; that.$axios - .post("/api.php?c=personal&a=EditSvnUserPass&t=web", data) + .post("/api/Personal/EditSvnUserPass?t=web", data) .then(function (response) { that.loadingEditSvnUserPass = false; var result = response.data; @@ -250,7 +272,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=common&a=Logout&t=web", data) + .post("/api/Unimportant/Logout?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/repositoryGroup/index.vue b/01.web/src/views/repositoryGroup/index.vue index 05b78c7..b91fd18 100644 --- a/01.web/src/views/repositoryGroup/index.vue +++ b/01.web/src/views/repositoryGroup/index.vue @@ -362,10 +362,10 @@ export default { * 获取SVN分组列表 */ SearchGetGroupList() { - if (this.searchKeywordGroup == "") { - this.$Message.error("请输入搜索内容"); - return; - } + // if (this.searchKeywordGroup == "") { + // this.$Message.error("请输入搜索内容"); + // return; + // } this.GetGroupList(); }, GetGroupList() { @@ -381,7 +381,7 @@ export default { sortType: that.sortType, }; that.$axios - .post("/api.php?c=svngroup&a=GetGroupList&t=web", data) + .post("/api/Svngroup/GetGroupList?t=web", data) .then(function (response) { that.loadingGroup = false; var result = response.data; @@ -409,7 +409,7 @@ export default { svn_group_note: that.tableGroupData[index].svn_group_note, }; that.$axios - .post("/api.php?c=svngroup&a=EditGroupNote&t=web", data) + .post("/api/Svngroup/EditGroupNote?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -436,7 +436,7 @@ export default { svn_group_name: that.formCreateGroup.svn_group_name, }; that.$axios - .post("/api.php?c=svngroup&a=CreateGroup&t=web", data) + .post("/api/Svngroup/CreateGroup?t=web", data) .then(function (response) { that.loadingCreateGroup = false; var result = response.data; @@ -475,7 +475,7 @@ export default { groupNameNew: that.formEditGroupName.groupNameNew, }; that.$axios - .post("/api.php?c=svngroup&a=EditGroupName&t=web", data) + .post("/api/Svngroup/EditGroupName?t=web", data) .then(function (response) { that.loadingEditGroupName = false; var result = response.data; @@ -506,7 +506,7 @@ export default { svn_group_name: svn_group_name, }; that.$axios - .post("/api.php?c=svngroup&a=DelGroup&t=web", data) + .post("/api/Svngroup/DelGroup?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -549,7 +549,7 @@ export default { svn_group_name: that.currentSelectGroupName, }; that.$axios - .post("/api.php?c=svngroup&a=GetGroupMember&t=web", data) + .post("/api/Svngroup/GetGroupMember?t=web", data) .then(function (response) { that.loadingRepAllUser = false; that.loadingRepAllGroup = false; @@ -598,7 +598,7 @@ export default { svn_user_name: userName, }; that.$axios - .post("/api.php?c=svngroup&a=GroupAddUser&t=web", data) + .post("/api/Svngroup/GroupAddUser?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -624,7 +624,7 @@ export default { svn_user_name: userName, }; that.$axios - .post("/api.php?c=svngroup&a=GroupRemoveUser&t=web", data) + .post("/api/Svngroup/GroupRemoveUser?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -650,7 +650,7 @@ export default { svn_group_name_add: groupName, }; that.$axios - .post("/api.php?c=svngroup&a=GroupAddGroup&t=web", data) + .post("/api/Svngroup/GroupAddGroup?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -676,7 +676,7 @@ export default { svn_group_name_del: groupName, }; that.$axios - .post("/api.php?c=svngroup&a=GroupRemoveGroup&t=web", data) + .post("/api/Svngroup/GroupRemoveGroup?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/repositoryInfo/index.vue b/01.web/src/views/repositoryInfo/index.vue index 054d15c..17beb71 100644 --- a/01.web/src/views/repositoryInfo/index.vue +++ b/01.web/src/views/repositoryInfo/index.vue @@ -462,7 +462,7 @@ multiple :on-success="UploadSuccess" :before-upload="BeforeUpload" - action="/api.php?c=svnrep&a=UploadBackup&t=web" + action="/api/Svnrep/UploadBackup?t=web" name="file" :headers="{ token: token }" > @@ -1088,7 +1088,7 @@ export default { var that = this; var data = {}; that.$axios - .post("/api.php?c=subversion&a=GetStatus&t=web", data) + .post("/api/Svn/GetStatus?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -1118,9 +1118,10 @@ export default { rep_type: that.formRepAdd.rep_type, }; that.$axios - .post("/api.php?c=svnrep&a=CreateRep&t=web", data) + .post("/api/Svnrep/CreateRep?t=web", data) .then(function (response) { that.loadingCreateRep = false; + that.modalCreateRep = false; var result = response.data; if (result.status == 1) { that.$Message.success(result.message); @@ -1140,10 +1141,10 @@ export default { * 获取仓库列表 */ SearchGetRepList() { - if (this.searchKeywordRep == "") { - this.$Message.error("请输入搜索内容"); - return; - } + // if (this.searchKeywordRep == "") { + // this.$Message.error("请输入搜索内容"); + // return; + // } this.GetRepList(); }, GetRepList() { @@ -1159,7 +1160,7 @@ export default { sortType: that.sortType, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepList&t=web", data) + .post("/api/Svnrep/GetRepList?t=web", data) .then(function (response) { that.loadingRep = false; var result = response.data; @@ -1219,7 +1220,7 @@ export default { sortType: that.sortType, }; that.$axios - .post("/api.php?c=svnrep&a=GetSvnUserRepList&t=web", data) + .post("/api/Svnrep/GetSvnUserRepList?t=web", data) .then(function (response) { that.loadingUserRep = false; var result = response.data; @@ -1274,7 +1275,7 @@ export default { rep_note: that.tableDataRep[index].rep_note, }; that.$axios - .post("/api.php?c=svnrep&a=EditRepNote&t=web", data) + .post("/api/Svnrep/EditRepNote?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -1359,7 +1360,7 @@ export default { var data = {}; return new Promise(function (resolve, reject) { that.$axios - .post("/api.php?c=subversion&a=GetCheckout&t=web", data) + .post("/api/Svn/GetCheckout?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -1388,7 +1389,7 @@ export default { path: that.currentRepTreePath, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepCon&t=web", data) + .post("/api/Svnrep/GetRepCon?t=web", data) .then(function (response) { that.loadingRepCon = false; var result = response.data; @@ -1423,7 +1424,7 @@ export default { path: that.currentRepTreePath, }; that.$axios - .post("/api.php?c=svnrep&a=GetUserRepCon&t=web", data) + .post("/api/Svnrep/GetUserRepCon?t=web", data) .then(function (response) { that.loadingRepCon = false; var result = response.data; @@ -1508,7 +1509,7 @@ export default { that.tableDataBackup = []; var data = {}; that.$axios - .post("/api.php?c=svnrep&a=GetBackupList&t=web", data) + .post("/api/Svnrep/GetBackupList?t=web", data) .then(function (response) { that.loadingRepBackupList = false; var result = response.data; @@ -1531,7 +1532,7 @@ export default { rep_name: that.currentRepName, }; that.$axios - .post("/api.php?c=svnrep&a=RepDump&t=web", data) + .post("/api/Svnrep/RepDump?t=web", data) .then(function (response) { that.loadingRepDump = false; var result = response.data; @@ -1558,7 +1559,7 @@ export default { }; that.$axios.setAttribute; that.$axios - .post("/api.php?c=svnrep&a=DownloadRepBackup&t=web", data, { + .post("/api/Svnrep/DownloadRepBackup?t=web", data, { responseType: "blob", }) .then(function (response) { @@ -1594,7 +1595,7 @@ export default { fileName: fileName, }; that.$axios - .post("/api.php?c=svnrep&a=DelRepBackup&t=web", data) + .post("/api/Svnrep/DelRepBackup?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -1655,7 +1656,7 @@ export default { }; return new Promise(function (resolve, reject) { that.$axios - .post("/api.php?c=svnrep&a=GetRepTree&t=web", data) + .post("/api/Svnrep/GetRepTree?t=web", data) .then(function (response) { resolve(response); }) @@ -1745,7 +1746,7 @@ export default { path: that.currentRepTreePriPath, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepPathUserPri&t=web", data) + .post("/api/Svnrep/GetRepPathUserPri?t=web", data) .then(function (response) { that.loadingRepPathUserPri = false; var result = response.data; @@ -1803,7 +1804,7 @@ export default { user: that.currentRepPriUser, }; that.$axios - .post("/api.php?c=svnrep&a=DelRepPathUserPri&t=web", data) + .post("/api/Svnrep/DelRepPathUserPri?t=web", data) .then(function (response) { that.loadingDelRepPathUserPri = false; var result = response.data; @@ -1838,7 +1839,7 @@ export default { .userName, }; that.$axios - .post("/api.php?c=svnrep&a=EditRepPathUserPri&t=web", data) + .post("/api/Svnrep/EditRepPathUserPri?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -1865,7 +1866,7 @@ export default { user: that.currentRepPriAddUser, }; that.$axios - .post("/api.php?c=svnrep&a=AddRepPathUserPri&t=web", data) + .post("/api/Svnrep/AddRepPathUserPri?t=web", data) .then(function (response) { that.modalRepAllUser = false; var result = response.data; @@ -1901,7 +1902,7 @@ export default { that.loadingAllUserList = true; var data = {}; that.$axios - .post("/api.php?c=svnuser&a=GetAllUserList&t=web", data) + .post("/api/Svnuser/GetAllUserList?t=web", data) .then(function (response) { that.loadingAllUserList = false; var result = response.data; @@ -1941,7 +1942,7 @@ export default { path: that.currentRepTreePriPath, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepPathGroupPri&t=web", data) + .post("/api/Svnrep/GetRepPathGroupPri?t=web", data) .then(function (response) { that.loadingRepPathGroupPri = false; var result = response.data; @@ -2003,7 +2004,7 @@ export default { group: that.currentRepPriGroup, }; that.$axios - .post("/api.php?c=svnrep&a=DelRepPathGroupPri&t=web", data) + .post("/api/Svnrep/DelRepPathGroupPri?t=web", data) .then(function (response) { that.loadingDelRepPathGroupPri = false; var result = response.data; @@ -2039,7 +2040,7 @@ export default { that.tableDataRepPathGroupPri[that.currentRepPriGroupIndex].groupName, }; that.$axios - .post("/api.php?c=svnrep&a=EditRepPathGroupPri&t=web", data) + .post("/api/Svnrep/EditRepPathGroupPri?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -2066,7 +2067,7 @@ export default { group: that.currentRepPriAddGroup, }; that.$axios - .post("/api.php?c=svnrep&a=AddRepPathGroupPri&t=web", data) + .post("/api/Svnrep/AddRepPathGroupPri?t=web", data) .then(function (response) { that.modalRepAllGroup = false; var result = response.data; @@ -2102,7 +2103,7 @@ export default { that.loadingAllGroupList = true; var data = {}; that.$axios - .post("/api.php?c=svngroup&a=GetAllGroupList&t=web", data) + .post("/api/Svngroup/GetAllGroupList?t=web", data) .then(function (response) { that.loadingAllGroupList = false; var result = response.data; @@ -2147,7 +2148,7 @@ export default { rep_name: that.currentRepName, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepHooks&t=web", data) + .post("/api/Svnrep/GetRepHooks?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -2172,7 +2173,7 @@ export default { content: that.formRepHooks.type[that.formRepHooks.select].shell, }; that.$axios - .post("/api.php?c=svnrep&a=EditRepHook&t=web", data) + .post("/api/Svnrep/EditRepHook?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -2215,7 +2216,7 @@ export default { rep_name: that.currentRepName, }; that.$axios - .post("/api.php?c=svnrep&a=GetRepDetail&t=web", data) + .post("/api/Svnrep/GetRepDetail?t=web", data) .then(function (response) { that.loadingRepDetail = false; var result = response.data; @@ -2292,7 +2293,7 @@ export default { fileName: that.formUploadBackup.fileName, }; that.$axios - .post("/api.php?c=svnrep&a=ImportRep&t=web", data) + .post("/api/Svnrep/ImportRep?t=web", data) .then(function (response) { that.loadingImportBackup = false; var result = response.data; @@ -2332,7 +2333,7 @@ export default { new_rep_name: that.formRepEdit.new_rep_name, }; that.$axios - .post("/api.php?c=svnrep&a=EditRepName&t=web", data) + .post("/api/Svnrep/EditRepName?t=web", data) .then(function (response) { that.loadingEditRepName = false; var result = response.data; @@ -2365,7 +2366,7 @@ export default { rep_name: rep_name, }; that.$axios - .post("/api.php?c=svnrep&a=DelRep&t=web", data) + .post("/api/Svnrep/DelRep?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/repositoryUser/index.vue b/01.web/src/views/repositoryUser/index.vue index d370e98..c1ccdc1 100644 --- a/01.web/src/views/repositoryUser/index.vue +++ b/01.web/src/views/repositoryUser/index.vue @@ -273,10 +273,10 @@ export default { * 获取SVN用户列表 */ SearchGetUserList() { - if (this.searchKeywordUser == "") { - this.$Message.error("请输入搜索内容"); - return; - } + // if (this.searchKeywordUser == "") { + // this.$Message.error("请输入搜索内容"); + // return; + // } this.GetUserList(); }, GetUserList() { @@ -292,7 +292,7 @@ export default { sortType: that.sortType, }; that.$axios - .post("/api.php?c=svnuser&a=GetUserList&t=web", data) + .post("/api/Svnuser/GetUserList?t=web", data) .then(function (response) { that.loadingUser = false; var result = response.data; @@ -329,7 +329,7 @@ export default { svn_user_name: svn_user_name, }; that.$axios - .post("/api.php?c=svnuser&a=EnableUser&t=web", data) + .post("/api/Svnuser/EnableUser?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -352,7 +352,7 @@ export default { svn_user_name: svn_user_name, }; that.$axios - .post("/api.php?c=svnuser&a=DisableUser&t=web", data) + .post("/api/Svnuser/DisableUser?t=web", data) .then(function (response) { that.loadingUser = false; var result = response.data; @@ -377,7 +377,7 @@ export default { svn_user_note: that.tableDataUser[index].svn_user_note, }; that.$axios - .post("/api.php?c=svnuser&a=EditUserNote&t=web", data) + .post("/api/Svnuser/EditUserNote?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { @@ -415,7 +415,7 @@ export default { svn_user_pass: that.formCreateUser.svn_user_pass, }; that.$axios - .post("/api.php?c=svnuser&a=CreateUser&t=web", data) + .post("/api/Svnuser/CreateUser?t=web", data) .then(function (response) { that.loadingCreateUser = false; var result = response.data; @@ -458,7 +458,7 @@ export default { that.tableDataUser[that.formEditUser.index].svn_user_status, }; that.$axios - .post("/api.php?c=svnuser&a=EditUserPass&t=web", data) + .post("/api/Svnuser/EditUserPass?t=web", data) .then(function (response) { that.loadingEditUserPass = false; var result = response.data; @@ -491,7 +491,7 @@ export default { svn_user_status: that.tableDataUser[index].svn_user_status, }; that.$axios - .post("/api.php?c=svnuser&a=DelUser&t=web", data) + .post("/api/Svnuser/DelUser?t=web", data) .then(function (response) { var result = response.data; if (result.status == 1) { diff --git a/01.web/src/views/systemLog/index.vue b/01.web/src/views/systemLog/index.vue index 54445a2..c080b3f 100644 --- a/01.web/src/views/systemLog/index.vue +++ b/01.web/src/views/systemLog/index.vue @@ -146,10 +146,10 @@ export default { * 获取日志 */ SearchGetLogList() { - if (this.searchKeywordLog == "") { - this.$Message.error("请输入搜索内容"); - return; - } + // if (this.searchKeywordLog == "") { + // this.$Message.error("请输入搜索内容"); + // return; + // } this.GetLogList(); }, GetLogList() { @@ -163,7 +163,7 @@ export default { searchKeyword: that.searchKeywordLog, }; that.$axios - .post("/api.php?c=logs&a=GetLogList&t=web", data) + .post("/api/Logs/GetLogList?t=web", data) .then(function (response) { that.loadingGetLogList = false; var result = response.data; @@ -193,7 +193,7 @@ export default { that.loadingClearLogs = true; var data = {}; that.$axios - .post("/api.php?c=logs&a=ClearLogs&t=web", data) + .post("/api/Logs/ClearLogs?t=web", data) .then(function (response) { that.loadingClearLogs = false; var result = response.data; diff --git a/01.web/webpack.dev.config.js b/01.web/webpack.dev.config.js index a7ac354..b8515ea 100644 --- a/01.web/webpack.dev.config.js +++ b/01.web/webpack.dev.config.js @@ -45,10 +45,10 @@ module.exports = merge(webpackBaseConfig, { hotOnly: false, disableHostCheck: true, proxy: { - '/api.php': { - target: 'http://dev.witersen.com/api.php', + '/api': { + target: 'http://workman.witersen.com:8787', changeOrigin: true, - // pathRewrite: { '^/api': '' } + pathRewrite: { '^/api': '' } } } } diff --git a/02.php/api.php b/02.php/api.php deleted file mode 100644 index f71c47b..0000000 --- a/02.php/api.php +++ /dev/null @@ -1,114 +0,0 @@ -CheckBlack(); - - //开始调用 - $controller = new $controller_perifx(); - if (is_callable(array($controller, $action))) { - //检查SVN用户的路由表 - if ($controller->globalUserRoleId == 2) { - if (!in_array($controller_perifx . '/' . $action, $ROUTERS['SVN_USER_ROUTERS'])) { - FunMessageExit(401, 0, '无权限'); - } - } - //执行请求 - $controller->$action(); - } else { - FunMessageExit(401, 0, '无效的方法名'); - } -} else { - FunMessageExit(401, 0, '无效的控制器名'); -} diff --git a/02.php/app/controller/blacktoken.class.php b/02.php/app/controller/blacktoken.class.php deleted file mode 100644 index e11247f..0000000 --- a/02.php/app/controller/blacktoken.class.php +++ /dev/null @@ -1,64 +0,0 @@ -token); - $this->database->insert('black_token', [ - 'token' => $this->token, - 'start_time' => $arr[2], - 'end_time' => $arr[3], - 'insert_time' => date('Y-m-d H:i:s') - ]); - } - - /** - * 扫描黑名单中的token 发现过期的则删除 - * - * 目的:不给搜索增加压力 - */ - function CleanBlack() - { - $this->database->delete('black_token', [ - 'end_time[<]' => time() - ]); - } - - /** - * 检查token是否存在于黑名单 - */ - function CheckBlack() - { - $result = $this->database->get('black_token', [ - 'token_id' - ], [ - 'token' => $this->token - ]); - if ($result != null) { - FunMessageExit(401, 0, 'token已注销'); - } - } -} diff --git a/02.php/app/controller/personal.class.php b/02.php/app/controller/personal.class.php deleted file mode 100644 index dc052c9..0000000 --- a/02.php/app/controller/personal.class.php +++ /dev/null @@ -1,122 +0,0 @@ -payload['userName'] != $this->payload['confirm']) { - FunMessageExit(200, 0, '输入不一致'); - } - - if (trim($this->payload['userName']) == '') { - FunMessageExit(200, 0, '用户名不合法'); - } - - $info = $this->database->get('admin_users', [ - 'admin_user_name' - ], [ - 'admin_user_name' => $this->payload['userName'] - ]); - if ($info != null) { - FunMessageExit(200, 0, '与已有用户冲突'); - } - - $this->database->update('admin_users', [ - 'admin_user_name' => $this->payload['userName'] - ], [ - 'admin_user_name' => $this->globalUserName - ]); - - FunMessageExit(); - } - - /** - * 管理人员修改自己的密码 - */ - function EditAdminUserPass() - { - if ($this->payload['password'] != $this->payload['confirm']) { - FunMessageExit(200, 0, '输入不一致'); - } - - if (trim($this->payload['password']) == '') { - FunMessageExit(200, 0, '密码不合法'); - } - - $this->database->update('admin_users', [ - 'admin_user_pass' => $this->payload['password'] - ], [ - 'admin_user_name' => $this->globalUserName - ]); - - FunMessageExit(); - } - - /** - * SVN用户修改自己的密码 - */ - function EditSvnUserPass() - { - if ($this->payload['newPassword'] != $this->payload['confirm']) { - FunMessageExit(200, 0, '输入不一致'); - } - - //获取SVN指定用户的密码 - $result = $this->SVNAdminUser->GetPassByUser($this->globalPasswdContent, $this->globalUserName); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '用户不存在'); - } - - if (trim($this->payload['newPassword']) == '') { - FunMessageExit(200, 0, '密码不合法'); - } - - if ($result != $this->payload['oldPassword']) { - FunMessageExit(200, 0, '旧密码输入错误'); - } - - //修改SVN指定用户的密码 - $result = $this->SVNAdminUser->UpdSvnUserPass($this->globalPasswdContent, $this->globalUserName, $this->payload['newPassword']); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '用户不存在'); - } - - FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); - - $this->database->update('svn_users', [ - 'svn_user_pass' => $this->payload['newPassword'] - ], [ - 'svn_user_name' => $this->globalUserName - ]); - - FunMessageExit(); - } -} diff --git a/02.php/app/controller/safe.class.php b/02.php/app/controller/safe.class.php deleted file mode 100644 index 416a5b1..0000000 --- a/02.php/app/controller/safe.class.php +++ /dev/null @@ -1,23 +0,0 @@ -database->get('options', [ - 'option_value' - ], [ - 'option_name' => 'svnserve_listen' - ]); - - $insert = [ - "bindPort" => $bindPort == '' ? 3690 : $bindPort, - "bindHost" => $bindHost == '' ? '0.0.0.0' : $bindHost, - "manageHost" => "127.0.0.1", - "enable" => "manageHost" - ]; - - if ($svnserve_listen == null) { - //插入 - $this->database->insert('options', [ - 'option_name' => 'svnserve_listen', - 'option_value' => serialize($insert), - 'option_description' => '' - ]); - } else if ($svnserve_listen['option_value'] == '') { - //更新 - $this->database->update('options', [ - 'option_value' => serialize($insert), - ], [ - 'option_name' => 'svnserve_listen', - ]); - } else { - //更新 - $svnserve_listen = unserialize($svnserve_listen['option_value']); - $insert['manageHost'] = $svnserve_listen['manageHost'] == '' ? '127.0.0.1' : $svnserve_listen['manageHost']; - $insert['enable'] = $svnserve_listen['enable'] == '' ? 'manageHost' : $svnserve_listen['enable']; - $this->database->update('options', [ - 'option_value' => serialize($insert), - ], [ - 'option_name' => 'svnserve_listen', - ]); - } - - return $insert; - } - - /** - * 获取Subversion的检出地址前缀 - * - * 先从Subversion配置文件获取绑定端口和主机 - * 然后与listen.json配置文件中的端口和主机进行对比和同步 - */ - function GetCheckout() - { - $result = $this->GetSvnserveListen(); - $checkoutHost = $result[$result['enable']]; - if ($result['bindPort'] != 3690) { - $checkoutHost .= ':' . $result['bindPort']; - } - FunMessageExit(200, 1, '成功', [ - 'protocal' => 'svn://', - 'prefix' => $checkoutHost - ]); - } - - /** - * 获取Subversion的详细信息 - */ - function GetDetail() - { - //获取绑定主机、端口等信息 - $bindInfo = $this->GetSvnserveListen(); - - //检测运行信息 - $runInfo = FunShellExec('ps auxf|grep -v "grep"|grep svnserve'); - $runInfo = $runInfo['result']; - - //检测安装信息 - $installInfo = file_exists('/usr/bin/svnserve'); - - //检测安装状态 - //未知状态 - $installInfo = -1; - if ($runInfo == '' && !$installInfo) { - //未安装 - $installed = 0; - } else if ($runInfo == '' && $installInfo) { - //安装未启动 - $installed = 1; - } else if ($runInfo != '' && $installInfo) { - //运行中 - $installed = 2; - } - - //检测subversion版本 - $version = '-'; - if ($installed != 0) { - $versionInfo = FunShellExec('svnserve --version'); - $versionInfo = $versionInfo['result']; - preg_match_all(REG_SUBVERSION_VERSION, $versionInfo, $versionInfoPreg); - if (array_key_exists(0, $versionInfoPreg[0])) { - $version = trim($versionInfoPreg[1][0]); - } else { - $version = '-'; - } - } - - FunMessageExit(200, 1, '成功', [ - 'version' => $version, - 'installed' => $installed, - 'bindPort' => (int)$bindInfo['bindPort'], - 'bindHost' => $bindInfo['bindHost'], - 'manageHost' => $bindInfo['manageHost'], - 'enable' => $bindInfo['enable'], - 'svnserveLog' => SVNSERVE_LOG_FILE - ]); - } - - /** - * 安装SVN - */ - function Install() - { - } - - /** - * 卸载SVN - */ - function UnInstall() - { - } - - /** - * 启动SVN - */ - function Start() - { - FunShellExec("systemctl start svnserve"); - FunMessageExit(); - } - - /** - * 停止SVN - */ - function Stop() - { - FunShellExec("systemctl stop svnserve"); - FunMessageExit(); - } - - /** - * 修改svnserve的绑定端口 - */ - function EditPort() - { - //port不能为空 - - //获取现在的端口与要修改的端口对比检查是否相同 - $result = $this->GetSvnserveListen(); - - if ($this->payload['bindPort'] == $result['bindPort']) { - FunMessageExit(200, 0, '无需更换,端口相同'); - } - - //停止svnserve - FunShellExec('systemctl stop svnserve'); - - //重新构建配置文件内容 - $config = sprintf("OPTIONS=\"-r '%s' --config-file '%s' --log-file '%s' --listen-port %s --listen-host %s\"", SVN_REPOSITORY_PATH, SVN_CONF_FILE, SVNSERVE_LOG_FILE, $this->payload['bindPort'], $result['bindHost']); - - //写入配置文件 - FunShellExec('echo \'' . $config . '\' > ' . SVNSERVE_ENV_FILE); - - //启动svnserve - $result = FunShellExec('systemctl start svnserve'); - - if ($result['resultCode'] != 0) { - FunMessageExit(200, 0, '启动异常' . $result['error']); - } else { - FunMessageExit(); - } - } - - /** - * 修改svnserve的绑定主机 - */ - function EditHost() - { - //host不能为空 - //不能带前缀如http或者https - - //获取现在的绑定主机与要修改的主机对比检查是否相同 - $result = $this->GetSvnserveListen(); - - if ($this->payload['bindHost'] == $result['bindHost']) { - FunMessageExit(200, 0, '无需更换,地址相同'); - } - - //停止svnserve - FunShellExec('systemctl stop svnserve'); - - //重新构建配置文件内容 - $config = sprintf("OPTIONS=\"-r '%s' --config-file '%s' --log-file '%s' --listen-port %s --listen-host %s\"", SVN_REPOSITORY_PATH, SVN_CONF_FILE, SVNSERVE_LOG_FILE, $result['bindPort'], $this->payload['bindHost']); - - //写入配置文件 - FunShellExec('echo \'' . $config . '\' > ' . SVNSERVE_ENV_FILE); - - //启动svnserve - $result = FunShellExec('systemctl start svnserve'); - - if ($result['resultCode'] != 0) { - FunMessageExit(200, 0, '启动异常' . $result['error']); - } else { - FunMessageExit(); - } - } - - /** - * 修改管理系统主机名 - */ - function EditManageHost() - { - //不能为空 - //不能带前缀如http或者https - - $result = $this->GetSvnserveListen(); - - if ($this->payload['manageHost'] == $result['manageHost']) { - FunMessageExit(200, 0, '无需更换,地址相同'); - } - - //更新 - $result['manageHost'] = $this->payload['manageHost']; - $this->database->update('options', [ - 'option_value' => serialize($result), - ], [ - 'option_name' => 'svnserve_listen', - ]); - - FunMessageExit(); - } - - /** - * 修改检出地址 - */ - function EditEnable() - { - $result = $this->GetSvnserveListen(); - - //enable的值可为 manageHost、bindHost - - //更新 - $result['enable'] = $this->payload['enable']; - $this->database->update('options', [ - 'option_value' => serialize($result), - ], [ - 'option_name' => 'svnserve_listen', - ]); - - FunMessageExit(); - } - - /** - * 获取配置文件列表 - */ - function GetConfig() - { - FunMessageExit(200, 1, '成功', [ - [ - 'key' => '仓库父目录', - 'value' => SVN_REPOSITORY_PATH - ], - [ - 'key' => '仓库配置文件', - 'value' => SVN_CONF_FILE - ], - [ - 'key' => '仓库权限文件', - 'value' => SVN_AUTHZ_FILE - ], - [ - 'key' => '用户账号文件', - 'value' => SVN_PASSWD_FILE - ], - [ - 'key' => '备份目录', - 'value' => SVN_BACHUP_PATH - ], - [ - 'key' => 'svnserve环境变量文件', - 'value' => SVNSERVE_ENV_FILE - ], - ]); - } -} diff --git a/02.php/app/controller/svnuser.class.php b/02.php/app/controller/svnuser.class.php deleted file mode 100644 index 588f035..0000000 --- a/02.php/app/controller/svnuser.class.php +++ /dev/null @@ -1,300 +0,0 @@ -SVNAdminUser->GetSvnUserPassList($this->globalPasswdContent); - if ($svnUserPassList == 0) { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - $dbUserPassList = $this->database->select('svn_users', [ - 'svn_user_id', - 'svn_user_name', - 'svn_user_pass', - 'svn_user_status', - 'svn_user_note' - ]); - - $combinArray1 = array_combine(FunArrayColumn($svnUserPassList, 'userName'), FunArrayColumn($svnUserPassList, 'disabled')); - $combinArray2 = array_combine(FunArrayColumn($svnUserPassList, 'userName'), FunArrayColumn($svnUserPassList, 'userPass')); - foreach ($dbUserPassList as $value) { - if (!in_array($value['svn_user_name'], FunArrayColumn($svnUserPassList, 'userName'))) { - $this->database->delete('svn_users', [ - 'svn_user_name' => $value['svn_user_name'] - ]); - } else { - //更新启用状态和密码 - $this->database->update('svn_users', [ - 'svn_user_pass' => $combinArray2[$value['svn_user_name']], - 'svn_user_status' => !$combinArray1[$value['svn_user_name']] - ], [ - 'svn_user_name' => $value['svn_user_name'] - ]); - } - } - - foreach ($svnUserPassList as $value) { - if (!in_array($value['userName'], FunArrayColumn($dbUserPassList, 'svn_user_name'))) { - $this->database->insert('svn_users', [ - 'svn_user_name' => $value['userName'], - 'svn_user_pass' => $value['userPass'], - 'svn_user_status' => !$value['disabled'], - 'svn_user_note' => '' - ]); - } - } - } - - /** - * 获取全部的SVN用户 - * - * 只包含用户名和启用状态 - */ - function GetAllUserList() - { - $svnUserList = $this->SVNAdminUser->GetSvnUserList($this->globalPasswdContent); - if ($svnUserList == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } else { - FunMessageExit(200, 1, '成功', $svnUserList); - } - } - - /** - * 获取带有分页的SVN用户 - * - * 只包含用户名和启用状态 - */ - function GetUserList() - { - //将SVN用户数据同步到数据库 - $this->SyncUserToDb(); - - $pageSize = $this->payload['pageSize']; - $currentPage = $this->payload['currentPage']; - $searchKeyword = trim($this->payload['searchKeyword']); - - //分页 - $begin = $pageSize * ($currentPage - 1); - - $list = $this->database->select('svn_users', [ - 'svn_user_id', - 'svn_user_name', - 'svn_user_pass', - 'svn_user_status', - 'svn_user_note' - ], [ - 'AND' => [ - 'OR' => [ - 'svn_user_name[~]' => $searchKeyword, - // 'svn_user_pass[~]' => $searchKeyword, - 'svn_user_note[~]' => $searchKeyword, - ], - ], - 'LIMIT' => [$begin, $pageSize], - 'ORDER' => [ - $this->payload['sortName'] => strtoupper($this->payload['sortType']) - ] - ]); - - $total = $this->database->count('svn_users', [ - 'svn_user_id' - ], [ - 'AND' => [ - 'OR' => [ - 'svn_user_name[~]' => $searchKeyword, - // 'svn_user_pass[~]' => $searchKeyword, - 'svn_user_note[~]' => $searchKeyword, - ], - ], - ]); - - foreach ($list as $key => $value) { - $list[$key]['svn_user_status'] = $value['svn_user_status'] == '1' ? true : false; - } - - FunMessageExit(200, 1, '成功', [ - 'data' => $list, - 'total' => $total - ]); - } - - /** - * 启用SVN用户 - */ - function EnableUser() - { - $result = $this->SVNAdminUser->EnabledUser($this->globalPasswdContent, $this->payload['svn_user_name']); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '要启用的用户不存在'); - } - - FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); - - FunMessageExit(); - } - - /** - * 禁用SVN用户 - */ - function DisableUser() - { - $result = $this->SVNAdminUser->DisabledUser($this->globalPasswdContent, $this->payload['svn_user_name']); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '要禁用的用户不存在'); - } - - FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); - - FunMessageExit(); - } - - /** - * 修改SVN用户的备注信息 - */ - function EditUserNote() - { - $this->database->update('svn_users', [ - 'svn_user_note' => $this->payload['svn_user_note'] - ], [ - 'svn_user_name' => $this->payload['svn_user_name'] - ]); - - FunMessageExit(); - } - - /** - * 新建SVN用户 - */ - function CreateUser() - { - //检查用户名是否合法 - FunCheckRepUser($this->payload['svn_user_name']); - - //检查用户是否已存在 - $result = $this->SVNAdminUser->AddSvnUser($this->globalPasswdContent, $this->payload['svn_user_name'], $this->payload['svn_user_pass']); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '用户已存在'); - } - - //检查密码是否不为空 - if (trim($this->payload['svn_user_pass']) == '') { - FunMessageExit(200, 0, '密码不能为空'); - } - - //写入配置文件 - FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); - - //写入数据库 - $this->database->insert('svn_users', [ - 'svn_user_name' => $this->payload['svn_user_name'], - 'svn_user_pass' => $this->payload['svn_user_pass'], - 'svn_user_status' => 1, - 'svn_user_note' => '' - ]); - - FunMessageExit(); - } - - /** - * 修改SVN用户的密码 - */ - function EditUserPass() - { - //检查用户是否已存在 - $result = $this->SVNAdminUser->UpdSvnUserPass($this->globalPasswdContent, $this->payload['svn_user_name'], $this->payload['svn_user_pass'], !$this->payload['svn_user_status']); - if ($result == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($result == '1') { - FunMessageExit(200, 0, '用户不存在 请刷新重试'); - } - - //检查密码是否不为空 - if (trim($this->payload['svn_user_pass']) == '') { - FunMessageExit(200, 0, '密码不能为空'); - } - - //写入配置文件 - FunShellExec('echo \'' . $result . '\' > ' . SVN_PASSWD_FILE); - - //写入数据库 - $this->database->update('svn_users', [ - 'svn_user_pass' => $this->payload['svn_user_pass'], - ], [ - 'svn_user_name' => $this->payload['svn_user_name'] - ]); - - FunMessageExit(); - } - - /** - * 删除SVN用户 - */ - function DelUser() - { - //从passwd文件中全局删除 - $resultPasswd = $this->SVNAdminUser->DelSvnUserPasswd($this->globalPasswdContent, $this->payload['svn_user_name'], !$this->payload['svn_user_status']); - - if ($resultPasswd == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - if ($resultPasswd == '1') { - FunMessageExit(200, 0, '用户不存在'); - } - - //从authz文件中删除 - $resultAuthz = $this->SVNAdminUser->DelUserAuthz($this->globalAuthzContent, $this->payload['svn_user_name']); - - if ($resultAuthz == '0') { - FunMessageExit(200, 0, '文件格式错误(不存在[users]标识)'); - } - - //从数据删除 - $this->database->delete('svn_users', [ - 'svn_user_name' => $this->payload['svn_user_name'] - ]); - - FunShellExec('echo \'' . $resultAuthz . '\' > ' . SVN_AUTHZ_FILE); - - FunShellExec('echo \'' . $resultPasswd . '\' > ' . SVN_PASSWD_FILE); - - FunMessageExit(); - } -} diff --git a/02.php/app/core/controller.class.php b/02.php/app/core/controller.class.php deleted file mode 100644 index b18ef19..0000000 --- a/02.php/app/core/controller.class.php +++ /dev/null @@ -1,165 +0,0 @@ -token = $token; - - /** - * 用户身份 - */ - $this->globalUserName = $this->GetUserNameByToken(); - $this->globalUserRoleId = $this->GetUserRoleByToken(); - - /** - * SVN配置文件相关 - */ - $this->globalAuthzContent = file_exists(SVN_AUTHZ_FILE) ? file_get_contents(SVN_AUTHZ_FILE) : ''; - $this->globalPasswdContent = file_exists(SVN_PASSWD_FILE) ? file_get_contents(SVN_PASSWD_FILE) : ''; - - /** - * 请求载体 - */ - global $payload; - $this->payload = $payload; - - /** - * 数据库连接 - */ - $this->database = (new conn())->GetConn(); - - /** - * svnadmin对象 - */ - $this->SVNAdminGroup = new \SVNAdmin\SVN\Group($this->globalAuthzContent, $this->globalPasswdContent); - $this->SVNAdminHooks = new \SVNAdmin\SVN\Hooks($this->globalAuthzContent, $this->globalPasswdContent); - $this->SVNAdminRep = new \SVNAdmin\SVN\Rep($this->globalAuthzContent, $this->globalPasswdContent); - $this->SVNAdminUser = new \SVNAdmin\SVN\User($this->globalAuthzContent, $this->globalPasswdContent); - } - - /** - * 根据token获取用户角色id - */ - final function GetUserRoleByToken() - { - if (!isset($this->token) || empty($this->token)) { - return ''; - } - $arr = explode('.', $this->token); - return $arr[0]; - } - - /** - * 根据token获取用户名称 - */ - final function GetUserNameByToken() - { - if (!isset($this->token) || empty($this->token)) { - return ''; - } - $arr = explode('.', $this->token); - return $arr[1]; - } - - /** - * 重新从authz文件中读取内容 - * - * 由于有些操作会更改authz文件内容且其它操作依赖这一实时结果 因此需要及时更新 - */ - final function UPdateAuthz() - { - $this->globalAuthzContent = file_exists(SVN_AUTHZ_FILE) ? file_get_contents(SVN_AUTHZ_FILE) : ''; - } -} diff --git a/02.php/app/function/regular.function.php b/02.php/app/function/regular.function.php deleted file mode 100644 index 01d1af9..0000000 --- a/02.php/app/function/regular.function.php +++ /dev/null @@ -1,49 +0,0 @@ - $code, - 'status' => $status, - 'message' => $message, - 'data' => $data - ])); -} diff --git a/02.php/app/function/socket.function.php b/02.php/app/function/socket.function.php deleted file mode 100644 index 6ebb230..0000000 --- a/02.php/app/function/socket.function.php +++ /dev/null @@ -1,50 +0,0 @@ -= SOCKET_READ_LENGTH) { - FunMessageExit(200, 0, '数据长度超过' . SOCKET_READ_LENGTH . ' 请向上调整参数:SOCKET_READ_LENGTH'); - } - $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("error:" . socket_strerror(socket_last_error())); - $server = socket_connect($socket, IPC_ADDRESS, (int)IPC_PORT); - socket_write($socket, $shell); - $reply = socket_read($socket, (int)SOCKET_READ_LENGTH); - socket_close($socket); - return unserialize($reply); -} - -/** - * 守护进程状态探测 - * 0 超时 - * 1 打开 - * 2 关闭 - */ -function FunDetectState() -{ - $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); - - @socket_connect($sock, IPC_ADDRESS, (int)IPC_PORT); - - socket_set_nonblock($sock); - - socket_set_block($sock); - - $v = array($sock); - - $state = @socket_select($r = $v, $w = $v, $f = $v, 5); - - socket_close($sock); - - return $state; -} diff --git a/02.php/app/function/token.function.php b/02.php/app/function/token.function.php deleted file mode 100644 index 01f42f4..0000000 --- a/02.php/app/function/token.function.php +++ /dev/null @@ -1,55 +0,0 @@ - $arr[3]) { - FunMessageExit(401, 0, '登录过期'); - } -} diff --git a/02.php/app/model/conn.model.php b/02.php/app/model/conn.model.php deleted file mode 100644 index 085a55b..0000000 --- a/02.php/app/model/conn.model.php +++ /dev/null @@ -1,31 +0,0 @@ -database_medoo = new Medoo(unserialize(DATABASE_ENABLE)); - } - - function GetConn() - { - return $this->database_medoo; - } -} diff --git a/02.php/config/curl.config.php b/02.php/config/curl.config.php deleted file mode 100644 index 8cb16e0..0000000 --- a/02.php/config/curl.config.php +++ /dev/null @@ -1,13 +0,0 @@ - 'mysql', - 'database_name' => 'svnadmin', - 'server' => 'sas2.witersen.com', - 'username' => 'svnadmin', - 'password' => 'svnadmin', - 'charset' => 'utf-8', - 'port' => 3306 - ])); - -/** - * SQLite配置信息 - */ -define('SQLITE_CONFIG', serialize([ - 'database_type' => 'sqlite', - 'database_file' => CONFIG_PATH . '/svnadmin.db', -])); - -/** - * 启用信息 - */ -define('DATABASE_ENABLE', MYSQL_CONFIG); diff --git a/02.php/config/reg.config.php b/02.php/config/reg.config.php deleted file mode 100644 index b0fc75e..0000000 --- a/02.php/config/reg.config.php +++ /dev/null @@ -1,53 +0,0 @@ - $key - */ -define('REG_CONFIG', "/define\(\"*'*%s'*\"*\s*,\s*'*(.*?)'*\)/"); - -/** - * 匹配subversion版本号 - */ -define('REG_SUBVERSION_VERSION', "/\bversion[\s]+(.*?)[\s]+/m"); diff --git a/02.php/config/router.config.php b/02.php/config/router.config.php deleted file mode 100644 index 02f8876..0000000 --- a/02.php/config/router.config.php +++ /dev/null @@ -1,45 +0,0 @@ - [ - 'common/Login', - 'common/GetVeryfyCode' - ], - - /** - * 小程序白名单路由 - */ - 'MINI_PUBLIC_ROUTERS' => [], - - /** - * SVN用户有权限路由 - */ - 'SVN_USER_ROUTERS' => [ - 'svnrep/GetSvnUserRepList', - 'svnrep/GetUserRepCon', - - 'common/Logout', - - 'subversion/GetCheckout', - 'subversion/GetStatus', - - 'svnuser/EditSvnUserPass', - ], -]; diff --git a/02.php/config/subversion.config.php b/02.php/config/subversion.config.php deleted file mode 100644 index 6e15c11..0000000 --- a/02.php/config/subversion.config.php +++ /dev/null @@ -1,69 +0,0 @@ -type = strtolower($options[ 'database_type' ]); - - if ($this->type === 'mariadb') - { - $this->type = 'mysql'; - } - } - - if (isset($options[ 'prefix' ])) - { - $this->prefix = $options[ 'prefix' ]; - } - - if (isset($options[ 'logging' ]) && is_bool($options[ 'logging' ])) - { - $this->logging = $options[ 'logging' ]; - } - - $option = isset($options[ 'option' ]) ? $options[ 'option' ] : []; - $commands = (isset($options[ 'command' ]) && is_array($options[ 'command' ])) ? $options[ 'command' ] : []; - - switch ($this->type) - { - case 'mysql': - // Make MySQL using standard quoted identifier - $commands[] = 'SET SQL_MODE=ANSI_QUOTES'; - - break; - - case 'mssql': - // Keep MSSQL QUOTED_IDENTIFIER is ON for standard quoting - $commands[] = 'SET QUOTED_IDENTIFIER ON'; - - // Make ANSI_NULLS is ON for NULL value - $commands[] = 'SET ANSI_NULLS ON'; - - break; - } - - if (isset($options[ 'pdo' ])) - { - if (!$options[ 'pdo' ] instanceof PDO) - { - throw new InvalidArgumentException('Invalid PDO object supplied'); - } - - $this->pdo = $options[ 'pdo' ]; - - foreach ($commands as $value) - { - $this->pdo->exec($value); - } - - return; - } - - if (isset($options[ 'dsn' ])) - { - if (is_array($options[ 'dsn' ]) && isset($options[ 'dsn' ][ 'driver' ])) - { - $attr = $options[ 'dsn' ]; - } - else - { - throw new InvalidArgumentException('Invalid DSN option supplied'); - } - } - else - { - if ( - isset($options[ 'port' ]) && - is_int($options[ 'port' ] * 1) - ) - { - $port = $options[ 'port' ]; - } - - $is_port = isset($port); - - switch ($this->type) - { - case 'mysql': - $attr = [ - 'driver' => 'mysql', - 'dbname' => $options[ 'database_name' ] - ]; - - if (isset($options[ 'socket' ])) - { - $attr[ 'unix_socket' ] = $options[ 'socket' ]; - } - else - { - $attr[ 'host' ] = $options[ 'server' ]; - - if ($is_port) - { - $attr[ 'port' ] = $port; - } - } - - break; - - case 'pgsql': - $attr = [ - 'driver' => 'pgsql', - 'host' => $options[ 'server' ], - 'dbname' => $options[ 'database_name' ] - ]; - - if ($is_port) - { - $attr[ 'port' ] = $port; - } - - break; - - case 'sybase': - $attr = [ - 'driver' => 'dblib', - 'host' => $options[ 'server' ], - 'dbname' => $options[ 'database_name' ] - ]; - - if ($is_port) - { - $attr[ 'port' ] = $port; - } - - break; - - case 'oracle': - $attr = [ - 'driver' => 'oci', - 'dbname' => $options[ 'server' ] ? - '//' . $options[ 'server' ] . ($is_port ? ':' . $port : ':1521') . '/' . $options[ 'database_name' ] : - $options[ 'database_name' ] - ]; - - if (isset($options[ 'charset' ])) - { - $attr[ 'charset' ] = $options[ 'charset' ]; - } - - break; - - case 'mssql': - if (isset($options[ 'driver' ]) && $options[ 'driver' ] === 'dblib') - { - $attr = [ - 'driver' => 'dblib', - 'host' => $options[ 'server' ] . ($is_port ? ':' . $port : ''), - 'dbname' => $options[ 'database_name' ] - ]; - - if (isset($options[ 'appname' ])) - { - $attr[ 'appname' ] = $options[ 'appname' ]; - } - - if (isset($options[ 'charset' ])) - { - $attr[ 'charset' ] = $options[ 'charset' ]; - } - } - else - { - $attr = [ - 'driver' => 'sqlsrv', - 'Server' => $options[ 'server' ] . ($is_port ? ',' . $port : ''), - 'Database' => $options[ 'database_name' ] - ]; - - if (isset($options[ 'appname' ])) - { - $attr[ 'APP' ] = $options[ 'appname' ]; - } - - $config = [ - 'ApplicationIntent', - 'AttachDBFileName', - 'Authentication', - 'ColumnEncryption', - 'ConnectionPooling', - 'Encrypt', - 'Failover_Partner', - 'KeyStoreAuthentication', - 'KeyStorePrincipalId', - 'KeyStoreSecret', - 'LoginTimeout', - 'MultipleActiveResultSets', - 'MultiSubnetFailover', - 'Scrollable', - 'TraceFile', - 'TraceOn', - 'TransactionIsolation', - 'TransparentNetworkIPResolution', - 'TrustServerCertificate', - 'WSID', - ]; - - foreach ($config as $value) - { - $keyname = strtolower(preg_replace(['/([a-z\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $value)); - - if (isset($options[ $keyname ])) - { - $attr[ $value ] = $options[ $keyname ]; - } - } - } - - break; - - case 'sqlite': - $attr = [ - 'driver' => 'sqlite', - $options[ 'database_file' ] - ]; - - break; - } - } - - if (!isset($attr)) - { - throw new InvalidArgumentException('Incorrect connection options'); - } - - $driver = $attr[ 'driver' ]; - - if (!in_array($driver, PDO::getAvailableDrivers())) - { - throw new InvalidArgumentException("Unsupported PDO driver: {$driver}"); - } - - unset($attr[ 'driver' ]); - - $stack = []; - - foreach ($attr as $key => $value) - { - $stack[] = is_int($key) ? $value : $key . '=' . $value; - } - - $dsn = $driver . ':' . implode(';', $stack); - - if ( - in_array($this->type, ['mysql', 'pgsql', 'sybase', 'mssql']) && - isset($options[ 'charset' ]) - ) - { - $commands[] = "SET NAMES '{$options[ 'charset' ]}'" . ( - $this->type === 'mysql' && isset($options[ 'collation' ]) ? - " COLLATE '{$options[ 'collation' ]}'" : '' - ); - } - - $this->dsn = $dsn; - - try { - $this->pdo = new PDO( - $dsn, - isset($options[ 'username' ]) ? $options[ 'username' ] : null, - isset($options[ 'password' ]) ? $options[ 'password' ] : null, - $option - ); - - foreach ($commands as $value) - { - $this->pdo->exec($value); - } - } - catch (PDOException $e) { - throw new PDOException($e->getMessage()); - } - } - - public function query($query, $map = []) - { - $raw = $this->raw($query, $map); - - $query = $this->buildRaw($raw, $map); - - return $this->exec($query, $map); - } - - public function exec($query, $map = []) - { - $this->statement = null; - - if ($this->debug_mode) - { - echo $this->generate($query, $map); - - $this->debug_mode = false; - - return false; - } - - if ($this->logging) - { - $this->logs[] = [$query, $map]; - } - else - { - $this->logs = [[$query, $map]]; - } - - $statement = $this->pdo->prepare($query); - - if (!$statement) - { - $this->errorInfo = $this->pdo->errorInfo(); - $this->statement = null; - - return false; - } - - $this->statement = $statement; - - foreach ($map as $key => $value) - { - $statement->bindValue($key, $value[ 0 ], $value[ 1 ]); - } - - $execute = $statement->execute(); - - $this->errorInfo = $statement->errorInfo(); - - if (!$execute) - { - $this->statement = null; - } - - return $statement; - } - - protected function generate($query, $map) - { - $identifier = [ - 'mysql' => '`$1`', - 'mssql' => '[$1]' - ]; - - $query = preg_replace( - '/"([a-zA-Z0-9_]+)"/i', - isset($identifier[ $this->type ]) ? $identifier[ $this->type ] : '"$1"', - $query - ); - - foreach ($map as $key => $value) - { - if ($value[ 1 ] === PDO::PARAM_STR) - { - $replace = $this->quote($value[ 0 ]); - } - elseif ($value[ 1 ] === PDO::PARAM_NULL) - { - $replace = 'NULL'; - } - elseif ($value[ 1 ] === PDO::PARAM_LOB) - { - $replace = '{LOB_DATA}'; - } - else - { - $replace = $value[ 0 ]; - } - - $query = str_replace($key, $replace, $query); - } - - return $query; - } - - public static function raw($string, $map = []) - { - $raw = new Raw(); - - $raw->map = $map; - $raw->value = $string; - - return $raw; - } - - protected function isRaw($object) - { - return $object instanceof Raw; - } - - protected function buildRaw($raw, &$map) - { - if (!$this->isRaw($raw)) - { - return false; - } - - $query = preg_replace_callback( - '/(([`\']).*?)?((FROM|TABLE|INTO|UPDATE|JOIN)\s*)?\<(([a-zA-Z0-9_]+)(\.[a-zA-Z0-9_]+)?)\>(.*?\2)?/i', - function ($matches) - { - if (!empty($matches[ 2 ]) && isset($matches[ 8 ])) - { - return $matches[ 0 ]; - } - - if (!empty($matches[ 4 ])) - { - return $matches[ 1 ] . $matches[ 4 ] . ' ' . $this->tableQuote($matches[ 5 ]); - } - - return $matches[ 1 ] . $this->columnQuote($matches[ 5 ]); - }, - $raw->value); - - $raw_map = $raw->map; - - if (!empty($raw_map)) - { - foreach ($raw_map as $key => $value) - { - $map[ $key ] = $this->typeMap($value, gettype($value)); - } - } - - return $query; - } - - public function quote($string) - { - return $this->pdo->quote($string); - } - - protected function tableQuote($table) - { - if (!preg_match('/^[a-zA-Z0-9_]+$/i', $table)) - { - throw new InvalidArgumentException("Incorrect table name \"$table\""); - } - - return '"' . $this->prefix . $table . '"'; - } - - protected function mapKey() - { - return ':MeDoO_' . $this->guid++ . '_mEdOo'; - } - - protected function typeMap($value, $type) - { - $map = [ - 'NULL' => PDO::PARAM_NULL, - 'integer' => PDO::PARAM_INT, - 'double' => PDO::PARAM_STR, - 'boolean' => PDO::PARAM_BOOL, - 'string' => PDO::PARAM_STR, - 'object' => PDO::PARAM_STR, - 'resource' => PDO::PARAM_LOB - ]; - - if ($type === 'boolean') - { - $value = ($value ? '1' : '0'); - } - elseif ($type === 'NULL') - { - $value = null; - } - - return [$value, $map[ $type ]]; - } - - protected function columnQuote($string) - { - if (!preg_match('/^[a-zA-Z0-9_]+(\.?[a-zA-Z0-9_]+)?$/i', $string)) - { - throw new InvalidArgumentException("Incorrect column name \"$string\""); - } - - if (strpos($string, '.') !== false) - { - return '"' . $this->prefix . str_replace('.', '"."', $string) . '"'; - } - - return '"' . $string . '"'; - } - - protected function columnPush(&$columns, &$map, $root, $is_join = false) - { - if ($columns === '*') - { - return $columns; - } - - $stack = []; - - if (is_string($columns)) - { - $columns = [$columns]; - } - - foreach ($columns as $key => $value) - { - if (!is_int($key) && is_array($value) && $root && count(array_keys($columns)) === 1) - { - $stack[] = $this->columnQuote($key); - - $stack[] = $this->columnPush($value, $map, false, $is_join); - } - elseif (is_array($value)) - { - $stack[] = $this->columnPush($value, $map, false, $is_join); - } - elseif (!is_int($key) && $raw = $this->buildRaw($value, $map)) - { - preg_match('/(?[a-zA-Z0-9_\.]+)(\s*\[(?(String|Bool|Int|Number))\])?/i', $key, $match); - - $stack[] = $raw . ' AS ' . $this->columnQuote($match[ 'column' ]); - } - elseif (is_int($key) && is_string($value)) - { - if ($is_join && strpos($value, '*') !== false) - { - throw new InvalidArgumentException('Cannot use table.* to select all columns while joining table'); - } - - preg_match('/(?[a-zA-Z0-9_\.]+)(?:\s*\((?[a-zA-Z0-9_]+)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/i', $value, $match); - - if (!empty($match[ 'alias' ])) - { - $stack[] = $this->columnQuote($match[ 'column' ]) . ' AS ' . $this->columnQuote($match[ 'alias' ]); - - $columns[ $key ] = $match[ 'alias' ]; - - if (!empty($match[ 'type' ])) - { - $columns[ $key ] .= ' [' . $match[ 'type' ] . ']'; - } - } - else - { - $stack[] = $this->columnQuote($match[ 'column' ]); - } - } - } - - return implode(',', $stack); - } - - protected function arrayQuote($array) - { - $stack = []; - - foreach ($array as $value) - { - $stack[] = is_int($value) ? $value : $this->pdo->quote($value); - } - - return implode(',', $stack); - } - - protected function innerConjunct($data, $map, $conjunctor, $outer_conjunctor) - { - $stack = []; - - foreach ($data as $value) - { - $stack[] = '(' . $this->dataImplode($value, $map, $conjunctor) . ')'; - } - - return implode($outer_conjunctor . ' ', $stack); - } - - protected function dataImplode($data, &$map, $conjunctor) - { - $stack = []; - - foreach ($data as $key => $value) - { - $type = gettype($value); - - if ( - $type === 'array' && - preg_match("/^(AND|OR)(\s+#.*)?$/", $key, $relation_match) - ) - { - $relationship = $relation_match[ 1 ]; - - $stack[] = $value !== array_keys(array_keys($value)) ? - '(' . $this->dataImplode($value, $map, ' ' . $relationship) . ')' : - '(' . $this->innerConjunct($value, $map, ' ' . $relationship, $conjunctor) . ')'; - - continue; - } - - $map_key = $this->mapKey(); - - if ( - is_int($key) && - preg_match('/([a-zA-Z0-9_\.]+)\[(?\>\=?|\<\=?|\!?\=)\]([a-zA-Z0-9_\.]+)/i', $value, $match) - ) - { - $stack[] = $this->columnQuote($match[ 1 ]) . ' ' . $match[ 'operator' ] . ' ' . $this->columnQuote($match[ 3 ]); - } - else - { - preg_match('/([a-zA-Z0-9_\.]+)(\[(?\>\=?|\<\=?|\!|\<\>|\>\<|\!?~|REGEXP)\])?/i', $key, $match); - $column = $this->columnQuote($match[ 1 ]); - - if (isset($match[ 'operator' ])) - { - $operator = $match[ 'operator' ]; - - if (in_array($operator, ['>', '>=', '<', '<='])) - { - $condition = $column . ' ' . $operator . ' '; - - if (is_numeric($value)) - { - $condition .= $map_key; - $map[ $map_key ] = [$value, is_float($value) ? PDO::PARAM_STR : PDO::PARAM_INT]; - } - elseif ($raw = $this->buildRaw($value, $map)) - { - $condition .= $raw; - } - else - { - $condition .= $map_key; - $map[ $map_key ] = [$value, PDO::PARAM_STR]; - } - - $stack[] = $condition; - } - elseif ($operator === '!') - { - switch ($type) - { - case 'NULL': - $stack[] = $column . ' IS NOT NULL'; - break; - - case 'array': - $placeholders = []; - - foreach ($value as $index => $item) - { - $stack_key = $map_key . $index . '_i'; - - $placeholders[] = $stack_key; - $map[ $stack_key ] = $this->typeMap($item, gettype($item)); - } - - $stack[] = $column . ' NOT IN (' . implode(', ', $placeholders) . ')'; - break; - - case 'object': - if ($raw = $this->buildRaw($value, $map)) - { - $stack[] = $column . ' != ' . $raw; - } - break; - - case 'integer': - case 'double': - case 'boolean': - case 'string': - $stack[] = $column . ' != ' . $map_key; - $map[ $map_key ] = $this->typeMap($value, $type); - break; - } - } - elseif ($operator === '~' || $operator === '!~') - { - if ($type !== 'array') - { - $value = [ $value ]; - } - - $connector = ' OR '; - $data = array_values($value); - - if (is_array($data[ 0 ])) - { - if (isset($value[ 'AND' ]) || isset($value[ 'OR' ])) - { - $connector = ' ' . array_keys($value)[ 0 ] . ' '; - $value = $data[ 0 ]; - } - } - - $like_clauses = []; - - foreach ($value as $index => $item) - { - $item = strval($item); - - if (!preg_match('/(\[.+\]|[\*\?\!\%#^-_]|%.+|.+%)/', $item)) - { - $item = '%' . $item . '%'; - } - - $like_clauses[] = $column . ($operator === '!~' ? ' NOT' : '') . ' LIKE ' . $map_key . 'L' . $index; - $map[ $map_key . 'L' . $index ] = [$item, PDO::PARAM_STR]; - } - - $stack[] = '(' . implode($connector, $like_clauses) . ')'; - } - elseif ($operator === '<>' || $operator === '><') - { - if ($type === 'array') - { - if ($operator === '><') - { - $column .= ' NOT'; - } - - $stack[] = '(' . $column . ' BETWEEN ' . $map_key . 'a AND ' . $map_key . 'b)'; - - $data_type = (is_numeric($value[ 0 ]) && is_numeric($value[ 1 ])) ? PDO::PARAM_INT : PDO::PARAM_STR; - - $map[ $map_key . 'a' ] = [$value[ 0 ], $data_type]; - $map[ $map_key . 'b' ] = [$value[ 1 ], $data_type]; - } - } - elseif ($operator === 'REGEXP') - { - $stack[] = $column . ' REGEXP ' . $map_key; - $map[ $map_key ] = [$value, PDO::PARAM_STR]; - } - } - else - { - switch ($type) - { - case 'NULL': - $stack[] = $column . ' IS NULL'; - break; - - case 'array': - $placeholders = []; - - foreach ($value as $index => $item) - { - $stack_key = $map_key . $index . '_i'; - - $placeholders[] = $stack_key; - $map[ $stack_key ] = $this->typeMap($item, gettype($item)); - } - - $stack[] = $column . ' IN (' . implode(', ', $placeholders) . ')'; - break; - - case 'object': - if ($raw = $this->buildRaw($value, $map)) - { - $stack[] = $column . ' = ' . $raw; - } - break; - - case 'integer': - case 'double': - case 'boolean': - case 'string': - $stack[] = $column . ' = ' . $map_key; - $map[ $map_key ] = $this->typeMap($value, $type); - break; - } - } - } - } - - return implode($conjunctor . ' ', $stack); - } - - protected function whereClause($where, &$map) - { - $where_clause = ''; - - if (is_array($where)) - { - $where_keys = array_keys($where); - - $conditions = array_diff_key($where, array_flip( - ['GROUP', 'ORDER', 'HAVING', 'LIMIT', 'LIKE', 'MATCH'] - )); - - if (!empty($conditions)) - { - $where_clause = ' WHERE ' . $this->dataImplode($conditions, $map, ' AND'); - } - - if (isset($where[ 'MATCH' ]) && $this->type === 'mysql') - { - $MATCH = $where[ 'MATCH' ]; - - if (is_array($MATCH) && isset($MATCH[ 'columns' ], $MATCH[ 'keyword' ])) - { - $mode = ''; - - $mode_array = [ - 'natural' => 'IN NATURAL LANGUAGE MODE', - 'natural+query' => 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION', - 'boolean' => 'IN BOOLEAN MODE', - 'query' => 'WITH QUERY EXPANSION' - ]; - - if (isset($MATCH[ 'mode' ], $mode_array[ $MATCH[ 'mode' ] ])) - { - $mode = ' ' . $mode_array[ $MATCH[ 'mode' ] ]; - } - - $columns = implode(', ', array_map([$this, 'columnQuote'], $MATCH[ 'columns' ])); - $map_key = $this->mapKey(); - $map[ $map_key ] = [$MATCH[ 'keyword' ], PDO::PARAM_STR]; - - $where_clause .= ($where_clause !== '' ? ' AND ' : ' WHERE') . ' MATCH (' . $columns . ') AGAINST (' . $map_key . $mode . ')'; - } - } - - if (isset($where[ 'GROUP' ])) - { - $GROUP = $where[ 'GROUP' ]; - - if (is_array($GROUP)) - { - $stack = []; - - foreach ($GROUP as $column => $value) - { - $stack[] = $this->columnQuote($value); - } - - $where_clause .= ' GROUP BY ' . implode(',', $stack); - } - elseif ($raw = $this->buildRaw($GROUP, $map)) - { - $where_clause .= ' GROUP BY ' . $raw; - } - else - { - $where_clause .= ' GROUP BY ' . $this->columnQuote($GROUP); - } - - if (isset($where[ 'HAVING' ])) - { - if ($raw = $this->buildRaw($where[ 'HAVING' ], $map)) - { - $where_clause .= ' HAVING ' . $raw; - } - else - { - $where_clause .= ' HAVING ' . $this->dataImplode($where[ 'HAVING' ], $map, ' AND'); - } - } - } - - if (isset($where[ 'ORDER' ])) - { - $ORDER = $where[ 'ORDER' ]; - - if (is_array($ORDER)) - { - $stack = []; - - foreach ($ORDER as $column => $value) - { - if (is_array($value)) - { - $stack[] = 'FIELD(' . $this->columnQuote($column) . ', ' . $this->arrayQuote($value) . ')'; - } - elseif ($value === 'ASC' || $value === 'DESC') - { - $stack[] = $this->columnQuote($column) . ' ' . $value; - } - elseif (is_int($column)) - { - $stack[] = $this->columnQuote($value); - } - } - - $where_clause .= ' ORDER BY ' . implode(',', $stack); - } - elseif ($raw = $this->buildRaw($ORDER, $map)) - { - $where_clause .= ' ORDER BY ' . $raw; - } - else - { - $where_clause .= ' ORDER BY ' . $this->columnQuote($ORDER); - } - - if ( - isset($where[ 'LIMIT' ]) && - in_array($this->type, ['oracle', 'mssql']) - ) - { - $LIMIT = $where[ 'LIMIT' ]; - - if (is_numeric($LIMIT)) - { - $LIMIT = [0, $LIMIT]; - } - - if ( - is_array($LIMIT) && - is_numeric($LIMIT[ 0 ]) && - is_numeric($LIMIT[ 1 ]) - ) - { - $where_clause .= ' OFFSET ' . $LIMIT[ 0 ] . ' ROWS FETCH NEXT ' . $LIMIT[ 1 ] . ' ROWS ONLY'; - } - } - } - - if (isset($where[ 'LIMIT' ]) && !in_array($this->type, ['oracle', 'mssql'])) - { - $LIMIT = $where[ 'LIMIT' ]; - - if (is_numeric($LIMIT)) - { - $where_clause .= ' LIMIT ' . $LIMIT; - } - elseif ( - is_array($LIMIT) && - is_numeric($LIMIT[ 0 ]) && - is_numeric($LIMIT[ 1 ]) - ) - { - $where_clause .= ' LIMIT ' . $LIMIT[ 1 ] . ' OFFSET ' . $LIMIT[ 0 ]; - } - } - } - elseif ($raw = $this->buildRaw($where, $map)) - { - $where_clause .= ' ' . $raw; - } - - return $where_clause; - } - - protected function selectContext($table, &$map, $join, &$columns = null, $where = null, $column_fn = null) - { - preg_match('/(?[a-zA-Z0-9_]+)\s*\((?[a-zA-Z0-9_]+)\)/i', $table, $table_match); - - if (isset($table_match[ 'table' ], $table_match[ 'alias' ])) - { - $table = $this->tableQuote($table_match[ 'table' ]); - - $table_query = $table . ' AS ' . $this->tableQuote($table_match[ 'alias' ]); - } - else - { - $table = $this->tableQuote($table); - - $table_query = $table; - } - - $is_join = false; - $join_key = is_array($join) ? array_keys($join) : null; - - if ( - isset($join_key[ 0 ]) && - strpos($join_key[ 0 ], '[') === 0 - ) - { - $is_join = true; - $table_query .= ' ' . $this->buildJoin($table, $join); - } - else - { - if (is_null($columns)) - { - if ( - !is_null($where) || - (is_array($join) && isset($column_fn)) - ) - { - $where = $join; - $columns = null; - } - else - { - $where = null; - $columns = $join; - } - } - else - { - $where = $columns; - $columns = $join; - } - } - - if (isset($column_fn)) - { - if ($column_fn === 1) - { - $column = '1'; - - if (is_null($where)) - { - $where = $columns; - } - } - elseif ($raw = $this->buildRaw($column_fn, $map)) - { - $column = $raw; - } - else - { - if (empty($columns) || $this->isRaw($columns)) - { - $columns = '*'; - $where = $join; - } - - $column = $column_fn . '(' . $this->columnPush($columns, $map, true) . ')'; - } - } - else - { - $column = $this->columnPush($columns, $map, true, $is_join); - } - - return 'SELECT ' . $column . ' FROM ' . $table_query . $this->whereClause($where, $map); - } - - protected function buildJoin($table, $join) - { - $table_join = []; - - $join_array = [ - '>' => 'LEFT', - '<' => 'RIGHT', - '<>' => 'FULL', - '><' => 'INNER' - ]; - - foreach($join as $sub_table => $relation) - { - preg_match('/(\[(?\<\>?|\>\[a-zA-Z0-9_]+)\s?(\((?[a-zA-Z0-9_]+)\))?/', $sub_table, $match); - - if ($match[ 'join' ] !== '' && $match[ 'table' ] !== '') - { - if (is_string($relation)) - { - $relation = 'USING ("' . $relation . '")'; - } - - if (is_array($relation)) - { - // For ['column1', 'column2'] - if (isset($relation[ 0 ])) - { - $relation = 'USING ("' . implode('", "', $relation) . '")'; - } - else - { - $joins = []; - - foreach ($relation as $key => $value) - { - $joins[] = ( - strpos($key, '.') > 0 ? - // For ['tableB.column' => 'column'] - $this->columnQuote($key) : - - // For ['column1' => 'column2'] - $table . '."' . $key . '"' - ) . - ' = ' . - $this->tableQuote(isset($match[ 'alias' ]) ? $match[ 'alias' ] : $match[ 'table' ]) . '."' . $value . '"'; - } - - $relation = 'ON ' . implode(' AND ', $joins); - } - } - - $table_name = $this->tableQuote($match[ 'table' ]) . ' '; - - if (isset($match[ 'alias' ])) - { - $table_name .= 'AS ' . $this->tableQuote($match[ 'alias' ]) . ' '; - } - - $table_join[] = $join_array[ $match[ 'join' ] ] . ' JOIN ' . $table_name . $relation; - } - } - - return implode(' ', $table_join); - } - - protected function columnMap($columns, &$stack, $root) - { - if ($columns === '*') - { - return $stack; - } - - foreach ($columns as $key => $value) - { - if (is_int($key)) - { - preg_match('/([a-zA-Z0-9_]+\.)?(?[a-zA-Z0-9_]+)(?:\s*\((?[a-zA-Z0-9_]+)\))?(?:\s*\[(?(?:String|Bool|Int|Number|Object|JSON))\])?/i', $value, $key_match); - - $column_key = !empty($key_match[ 'alias' ]) ? - $key_match[ 'alias' ] : - $key_match[ 'column' ]; - - if (isset($key_match[ 'type' ])) - { - $stack[ $value ] = [$column_key, $key_match[ 'type' ]]; - } - else - { - $stack[ $value ] = [$column_key, 'String']; - } - } - elseif ($this->isRaw($value)) - { - preg_match('/([a-zA-Z0-9_]+\.)?(?[a-zA-Z0-9_]+)(\s*\[(?(String|Bool|Int|Number))\])?/i', $key, $key_match); - - $column_key = $key_match[ 'column' ]; - - if (isset($key_match[ 'type' ])) - { - $stack[ $key ] = [$column_key, $key_match[ 'type' ]]; - } - else - { - $stack[ $key ] = [$column_key, 'String']; - } - } - elseif (!is_int($key) && is_array($value)) - { - if ($root && count(array_keys($columns)) === 1) - { - $stack[ $key ] = [$key, 'String']; - } - - $this->columnMap($value, $stack, false); - } - } - - return $stack; - } - - protected function dataMap($data, $columns, $column_map, &$stack, $root, &$result) - { - if ($root) - { - $columns_key = array_keys($columns); - - if (count($columns_key) === 1 && is_array($columns[$columns_key[0]])) - { - $index_key = array_keys($columns)[0]; - $data_key = preg_replace("/^[a-zA-Z0-9_]+\./i", "", $index_key); - - $current_stack = []; - - foreach ($data as $item) - { - $this->dataMap($data, $columns[ $index_key ], $column_map, $current_stack, false, $result); - - $index = $data[ $data_key ]; - - $result[ $index ] = $current_stack; - } - } - else - { - $current_stack = []; - - $this->dataMap($data, $columns, $column_map, $current_stack, false, $result); - - $result[] = $current_stack; - } - - return; - } - - foreach ($columns as $key => $value) - { - $isRaw = $this->isRaw($value); - - if (is_int($key) || $isRaw) - { - $map = $column_map[ $isRaw ? $key : $value ]; - - $column_key = $map[ 0 ]; - - $item = $data[ $column_key ]; - - if (isset($map[ 1 ])) - { - if ($isRaw && in_array($map[ 1 ], ['Object', 'JSON'])) - { - continue; - } - - if (is_null($item)) - { - $stack[ $column_key ] = null; - continue; - } - - switch ($map[ 1 ]) - { - case 'Number': - $stack[ $column_key ] = (double) $item; - break; - - case 'Int': - $stack[ $column_key ] = (int) $item; - break; - - case 'Bool': - $stack[ $column_key ] = (bool) $item; - break; - - case 'Object': - $stack[ $column_key ] = unserialize($item); - break; - - case 'JSON': - $stack[ $column_key ] = json_decode($item, true); - break; - - case 'String': - $stack[ $column_key ] = $item; - break; - } - } - else - { - $stack[ $column_key ] = $item; - } - } - else - { - $current_stack = []; - - $this->dataMap($data, $value, $column_map, $current_stack, false, $result); - - $stack[ $key ] = $current_stack; - } - } - } - - public function create($table, $columns, $options = null) - { - $stack = []; - - $tableName = $this->prefix . $table; - - foreach ($columns as $name => $definition) - { - if (is_int($name)) - { - $stack[] = preg_replace('/\<([a-zA-Z0-9_]+)\>/i', '"$1"', $definition); - } - elseif (is_array($definition)) - { - $stack[] = $name . ' ' . implode(' ', $definition); - } - elseif (is_string($definition)) - { - $stack[] = $name . ' ' . $this->query($definition); - } - } - - $table_option = ''; - - if (is_array($options)) - { - $option_stack = []; - - foreach ($options as $key => $value) - { - if (is_string($value) || is_int($value)) - { - $option_stack[] = "$key = $value"; - } - } - - $table_option = ' ' . implode(', ', $option_stack); - } - elseif (is_string($options)) - { - $table_option = ' ' . $options; - } - - return $this->exec("CREATE TABLE IF NOT EXISTS $tableName (" . implode(', ', $stack) . ")$table_option"); - } - - public function drop($table) - { - $tableName = $this->prefix . $table; - - return $this->exec("DROP TABLE IF EXISTS $tableName"); - } - - public function select($table, $join, $columns = null, $where = null) - { - $map = []; - $result = []; - $column_map = []; - - $index = 0; - - $column = $where === null ? $join : $columns; - - $is_single = (is_string($column) && $column !== '*'); - - $query = $this->exec($this->selectContext($table, $map, $join, $columns, $where), $map); - - $this->columnMap($columns, $column_map, true); - - if (!$this->statement) - { - return false; - } - - if ($columns === '*') - { - return $query->fetchAll(PDO::FETCH_ASSOC); - } - - while ($data = $query->fetch(PDO::FETCH_ASSOC)) - { - $current_stack = []; - - $this->dataMap($data, $columns, $column_map, $current_stack, true, $result); - } - - if ($is_single) - { - $single_result = []; - $result_key = $column_map[ $column ][ 0 ]; - - foreach ($result as $item) - { - $single_result[] = $item[ $result_key ]; - } - - return $single_result; - } - - return $result; - } - - public function insert($table, $datas) - { - $stack = []; - $columns = []; - $fields = []; - $map = []; - - if (!isset($datas[ 0 ])) - { - $datas = [$datas]; - } - - foreach ($datas as $data) - { - foreach ($data as $key => $value) - { - $columns[] = $key; - } - } - - $columns = array_unique($columns); - - foreach ($datas as $data) - { - $values = []; - - foreach ($columns as $key) - { - if ($raw = $this->buildRaw($data[ $key ], $map)) - { - $values[] = $raw; - continue; - } - - $map_key = $this->mapKey(); - - $values[] = $map_key; - - if (!isset($data[ $key ])) - { - $map[ $map_key ] = [null, PDO::PARAM_NULL]; - } - else - { - $value = $data[ $key ]; - - $type = gettype($value); - - switch ($type) - { - case 'array': - $map[ $map_key ] = [ - strpos($key, '[JSON]') === strlen($key) - 6 ? - json_encode($value) : - serialize($value), - PDO::PARAM_STR - ]; - break; - - case 'object': - $value = serialize($value); - - case 'NULL': - case 'resource': - case 'boolean': - case 'integer': - case 'double': - case 'string': - $map[ $map_key ] = $this->typeMap($value, $type); - break; - } - } - } - - $stack[] = '(' . implode(', ', $values) . ')'; - } - - foreach ($columns as $key) - { - $fields[] = $this->columnQuote(preg_replace("/(\s*\[JSON\]$)/i", '', $key)); - } - - return $this->exec('INSERT INTO ' . $this->tableQuote($table) . ' (' . implode(', ', $fields) . ') VALUES ' . implode(', ', $stack), $map); - } - - public function update($table, $data, $where = null) - { - $fields = []; - $map = []; - - foreach ($data as $key => $value) - { - $column = $this->columnQuote(preg_replace("/(\s*\[(JSON|\+|\-|\*|\/)\]$)/i", '', $key)); - - if ($raw = $this->buildRaw($value, $map)) - { - $fields[] = $column . ' = ' . $raw; - continue; - } - - $map_key = $this->mapKey(); - - preg_match('/(?[a-zA-Z0-9_]+)(\[(?\+|\-|\*|\/)\])?/i', $key, $match); - - if (isset($match[ 'operator' ])) - { - if (is_numeric($value)) - { - $fields[] = $column . ' = ' . $column . ' ' . $match[ 'operator' ] . ' ' . $value; - } - } - else - { - $fields[] = $column . ' = ' . $map_key; - - $type = gettype($value); - - switch ($type) - { - case 'array': - $map[ $map_key ] = [ - strpos($key, '[JSON]') === strlen($key) - 6 ? - json_encode($value) : - serialize($value), - PDO::PARAM_STR - ]; - break; - - case 'object': - $value = serialize($value); - - case 'NULL': - case 'resource': - case 'boolean': - case 'integer': - case 'double': - case 'string': - $map[ $map_key ] = $this->typeMap($value, $type); - break; - } - } - } - - return $this->exec('UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $fields) . $this->whereClause($where, $map), $map); - } - - public function delete($table, $where) - { - $map = []; - - return $this->exec('DELETE FROM ' . $this->tableQuote($table) . $this->whereClause($where, $map), $map); - } - - public function replace($table, $columns, $where = null) - { - if (!is_array($columns) || empty($columns)) - { - return false; - } - - $map = []; - $stack = []; - - foreach ($columns as $column => $replacements) - { - if (is_array($replacements)) - { - foreach ($replacements as $old => $new) - { - $map_key = $this->mapKey(); - - $stack[] = $this->columnQuote($column) . ' = REPLACE(' . $this->columnQuote($column) . ', ' . $map_key . 'a, ' . $map_key . 'b)'; - - $map[ $map_key . 'a' ] = [$old, PDO::PARAM_STR]; - $map[ $map_key . 'b' ] = [$new, PDO::PARAM_STR]; - } - } - } - - if (!empty($stack)) - { - return $this->exec('UPDATE ' . $this->tableQuote($table) . ' SET ' . implode(', ', $stack) . $this->whereClause($where, $map), $map); - } - - return false; - } - - public function get($table, $join = null, $columns = null, $where = null) - { - $map = []; - $result = []; - $column_map = []; - $current_stack = []; - - if ($where === null) - { - $column = $join; - unset($columns[ 'LIMIT' ]); - } - else - { - $column = $columns; - unset($where[ 'LIMIT' ]); - } - - $is_single = (is_string($column) && $column !== '*'); - - $query = $this->exec($this->selectContext($table, $map, $join, $columns, $where) . ' LIMIT 1', $map); - - if (!$this->statement) - { - return false; - } - - $data = $query->fetchAll(PDO::FETCH_ASSOC); - - if (isset($data[ 0 ])) - { - if ($column === '*') - { - return $data[ 0 ]; - } - - $this->columnMap($columns, $column_map, true); - - $this->dataMap($data[ 0 ], $columns, $column_map, $current_stack, true, $result); - - if ($is_single) - { - return $result[ 0 ][ $column_map[ $column ][ 0 ] ]; - } - - return $result[ 0 ]; - } - } - - public function has($table, $join, $where = null) - { - $map = []; - $column = null; - - if ($this->type === 'mssql') - { - $query = $this->exec($this->selectContext($table, $map, $join, $column, $where, Medoo::raw('TOP 1 1')), $map); - } - else - { - $query = $this->exec('SELECT EXISTS(' . $this->selectContext($table, $map, $join, $column, $where, 1) . ')', $map); - } - - if (!$this->statement) - { - return false; - } - - $result = $query->fetchColumn(); - - return $result === '1' || $result === 1 || $result === true; - } - - public function rand($table, $join = null, $columns = null, $where = null) - { - $type = $this->type; - - $order = 'RANDOM()'; - - if ($type === 'mysql') - { - $order = 'RAND()'; - } - elseif ($type === 'mssql') - { - $order = 'NEWID()'; - } - - $order_raw = $this->raw($order); - - if ($where === null) - { - if ($columns === null) - { - $columns = [ - 'ORDER' => $order_raw - ]; - } - else - { - $column = $join; - unset($columns[ 'ORDER' ]); - - $columns[ 'ORDER' ] = $order_raw; - } - } - else - { - unset($where[ 'ORDER' ]); - - $where[ 'ORDER' ] = $order_raw; - } - - return $this->select($table, $join, $columns, $where); - } - - private function aggregate($type, $table, $join = null, $column = null, $where = null) - { - $map = []; - - $query = $this->exec($this->selectContext($table, $map, $join, $column, $where, strtoupper($type)), $map); - - if (!$this->statement) - { - return false; - } - - $number = $query->fetchColumn(); - - return is_numeric($number) ? $number + 0 : $number; - } - - public function count($table, $join = null, $column = null, $where = null) - { - return $this->aggregate('count', $table, $join, $column, $where); - } - - public function avg($table, $join, $column = null, $where = null) - { - return $this->aggregate('avg', $table, $join, $column, $where); - } - - public function max($table, $join, $column = null, $where = null) - { - return $this->aggregate('max', $table, $join, $column, $where); - } - - public function min($table, $join, $column = null, $where = null) - { - return $this->aggregate('min', $table, $join, $column, $where); - } - - public function sum($table, $join, $column = null, $where = null) - { - return $this->aggregate('sum', $table, $join, $column, $where); - } - - public function action($actions) - { - if (is_callable($actions)) - { - $this->pdo->beginTransaction(); - - try { - $result = $actions($this); - - if ($result === false) - { - $this->pdo->rollBack(); - } - else - { - $this->pdo->commit(); - } - } - catch (Exception $e) { - $this->pdo->rollBack(); - - throw $e; - } - - return $result; - } - - return false; - } - - public function id() - { - if ($this->statement == null) - { - return null; - } - - $type = $this->type; - - if ($type === 'oracle') - { - return 0; - } - elseif ($type === 'pgsql') - { - return $this->pdo->query('SELECT LASTVAL()')->fetchColumn(); - } - - $lastId = $this->pdo->lastInsertId(); - - if ($lastId != "0" && $lastId != "") - { - return $lastId; - } - - return null; - } - - public function debug() - { - $this->debug_mode = true; - - return $this; - } - - public function error() - { - return $this->errorInfo; - } - - public function last() - { - $log = end($this->logs); - - return $this->generate($log[ 0 ], $log[ 1 ]); - } - - public function log() - { - return array_map(function ($log) - { - return $this->generate($log[ 0 ], $log[ 1 ]); - }, - $this->logs - ); - } - - public function info() - { - $output = [ - 'server' => 'SERVER_INFO', - 'driver' => 'DRIVER_NAME', - 'client' => 'CLIENT_VERSION', - 'version' => 'SERVER_VERSION', - 'connection' => 'CONNECTION_STATUS' - ]; - - foreach ($output as $key => $value) - { - $output[ $key ] = @$this->pdo->getAttribute(constant('PDO::ATTR_' . $value)); - } - - $output[ 'dsn' ] = $this->dsn; - - return $output; - } -} \ No newline at end of file diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-af.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-af.php deleted file mode 100644 index 0b2a72d..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-af.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'خطأ SMTP : لا يمكن تأكيد الهوية.'; -$PHPMAILER_LANG['connect_host'] = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'خطأ SMTP: لم يتم قبول المعلومات .'; -$PHPMAILER_LANG['empty_message'] = 'نص الرسالة فارغ'; -$PHPMAILER_LANG['encoding'] = 'ترميز غير معروف: '; -$PHPMAILER_LANG['execute'] = 'لا يمكن تنفيذ : '; -$PHPMAILER_LANG['file_access'] = 'لا يمكن الوصول للملف: '; -$PHPMAILER_LANG['file_open'] = 'خطأ في الملف: لا يمكن فتحه: '; -$PHPMAILER_LANG['from_failed'] = 'خطأ على مستوى عنوان المرسل : '; -$PHPMAILER_LANG['instantiate'] = 'لا يمكن توفير خدمة البريد.'; -$PHPMAILER_LANG['invalid_address'] = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.'; -$PHPMAILER_LANG['provide_address'] = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.'; -$PHPMAILER_LANG['recipients_failed'] = 'خطأ SMTP: الأخطاء التالية فشل في الارسال لكل من : '; -$PHPMAILER_LANG['signing'] = 'خطأ في التوقيع: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() غير ممكن.'; -$PHPMAILER_LANG['smtp_error'] = 'خطأ على مستوى الخادم SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'لا يمكن تعيين أو إعادة تعيين متغير: '; -$PHPMAILER_LANG['extension_missing'] = 'الإضافة غير موجودة: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-az.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-az.php deleted file mode 100644 index 552167e..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-az.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela prijava.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.'; -$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.'; -$PHPMAILER_LANG['encoding'] = 'Nepoznata kriptografija: '; -$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: '; -$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: '; -$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: '; -$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje sa navedenih e-mail adresa nije uspjelo: '; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedene e-mail adrese nije uspjelo: '; -$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.'; -$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.'; -$PHPMAILER_LANG['provide_address'] = 'Definišite barem jednu adresu primaoca.'; -$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP server nije uspjelo.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP greška: '; -$PHPMAILER_LANG['variable_set'] = 'Nije moguće postaviti varijablu ili je vratiti nazad: '; -$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-be.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-be.php deleted file mode 100644 index 9e92dda..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-be.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Памылка SMTP: памылка ідэнтыфікацыі.'; -$PHPMAILER_LANG['connect_host'] = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Памылка SMTP: звесткі непрынятыя.'; -$PHPMAILER_LANG['empty_message'] = 'Пустое паведамленне.'; -$PHPMAILER_LANG['encoding'] = 'Невядомая кадыроўка тэксту: '; -$PHPMAILER_LANG['execute'] = 'Нельга выканаць каманду: '; -$PHPMAILER_LANG['file_access'] = 'Няма доступу да файла: '; -$PHPMAILER_LANG['file_open'] = 'Нельга адкрыць файл: '; -$PHPMAILER_LANG['from_failed'] = 'Няправільны адрас адпраўніка: '; -$PHPMAILER_LANG['instantiate'] = 'Нельга прымяніць функцыю mail().'; -$PHPMAILER_LANG['invalid_address'] = 'Нельга даслаць паведамленне, няправільны email атрымальніка: '; -$PHPMAILER_LANG['provide_address'] = 'Запоўніце, калі ласка, правільны email атрымальніка.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.'; -$PHPMAILER_LANG['recipients_failed'] = 'Памылка SMTP: няправільныя атрымальнікі: '; -$PHPMAILER_LANG['signing'] = 'Памылка подпісу паведамлення: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Памылка сувязі з SMTP-серверам.'; -$PHPMAILER_LANG['smtp_error'] = 'Памылка SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-bg.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-bg.php deleted file mode 100644 index c41f675..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-bg.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: Не може да се удостовери пред сървъра.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: Не може да се свърже с SMTP хоста.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: данните не са приети.'; -$PHPMAILER_LANG['empty_message'] = 'Съдържанието на съобщението е празно'; -$PHPMAILER_LANG['encoding'] = 'Неизвестно кодиране: '; -$PHPMAILER_LANG['execute'] = 'Не може да се изпълни: '; -$PHPMAILER_LANG['file_access'] = 'Няма достъп до файл: '; -$PHPMAILER_LANG['file_open'] = 'Файлова грешка: Не може да се отвори файл: '; -$PHPMAILER_LANG['from_failed'] = 'Следните адреси за подател са невалидни: '; -$PHPMAILER_LANG['instantiate'] = 'Не може да се инстанцира функцията mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Невалиден адрес: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.'; -$PHPMAILER_LANG['provide_address'] = 'Трябва да предоставите поне един email адрес за получател.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: Следните адреси за Получател са невалидни: '; -$PHPMAILER_LANG['signing'] = 'Грешка при подписване: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP провален connect().'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP сървърна грешка: '; -$PHPMAILER_LANG['variable_set'] = 'Не може да се установи или възстанови променлива: '; -$PHPMAILER_LANG['extension_missing'] = 'Липсва разширение: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ca.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ca.php deleted file mode 100644 index 3468485..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ca.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Error SMTP: No s’ha pogut autenticar.'; -$PHPMAILER_LANG['connect_host'] = 'Error SMTP: No es pot connectar al servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Dades no acceptades.'; -$PHPMAILER_LANG['empty_message'] = 'El cos del missatge està buit.'; -$PHPMAILER_LANG['encoding'] = 'Codificació desconeguda: '; -$PHPMAILER_LANG['execute'] = 'No es pot executar: '; -$PHPMAILER_LANG['file_access'] = 'No es pot accedir a l’arxiu: '; -$PHPMAILER_LANG['file_open'] = 'Error d’Arxiu: No es pot obrir l’arxiu: '; -$PHPMAILER_LANG['from_failed'] = 'La(s) següent(s) adreces de remitent han fallat: '; -$PHPMAILER_LANG['instantiate'] = 'No s’ha pogut crear una instància de la funció Mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Adreça d’email invalida: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat'; -$PHPMAILER_LANG['provide_address'] = 'S’ha de proveir almenys una adreça d’email com a destinatari.'; -$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Els següents destinataris han fallat: '; -$PHPMAILER_LANG['signing'] = 'Error al signar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ha fallat el SMTP Connect().'; -$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'No s’ha pogut establir o restablir la variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ch.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ch.php deleted file mode 100644 index 500c952..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ch.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。'; -$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; -$PHPMAILER_LANG['encoding'] = '未知编码:'; -$PHPMAILER_LANG['execute'] = '不能执行: '; -$PHPMAILER_LANG['file_access'] = '不能访问文件:'; -$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:'; -$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: '; -$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。'; -//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。'; -$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: '; -//$PHPMAILER_LANG['signing'] = 'Signing Error: '; -//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; -//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-cs.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-cs.php deleted file mode 100644 index e770a1a..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-cs.php +++ /dev/null @@ -1,28 +0,0 @@ - - * Rewrite and extension of the work by Mikael Stokkebro - * - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.'; -$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold'; -$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: '; -$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: '; -$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: '; -$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: '; -$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: '; -$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.'; -$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.'; -$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: '; -$PHPMAILER_LANG['signing'] = 'Signeringsfejl: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: '; -$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: '; -$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-de.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-de.php deleted file mode 100644 index e7e59d2..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-de.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.'; -$PHPMAILER_LANG['connect_host'] = 'Error SMTP: Imposible conectar al servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.'; -$PHPMAILER_LANG['empty_message'] = 'El cuerpo del mensaje está vacío.'; -$PHPMAILER_LANG['encoding'] = 'Codificación desconocida: '; -$PHPMAILER_LANG['execute'] = 'Imposible ejecutar: '; -$PHPMAILER_LANG['file_access'] = 'Imposible acceder al archivo: '; -$PHPMAILER_LANG['file_open'] = 'Error de Archivo: Imposible abrir el archivo: '; -$PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: '; -$PHPMAILER_LANG['instantiate'] = 'Imposible crear una instancia de la función Mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Imposible enviar: dirección de email inválido: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.'; -$PHPMAILER_LANG['provide_address'] = 'Debe proporcionar al menos una dirección de email de destino.'; -$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinos fallaron: '; -$PHPMAILER_LANG['signing'] = 'Error al firmar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.'; -$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-et.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-et.php deleted file mode 100644 index 93addc9..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-et.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Viga: Autoriseerimise viga.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Viga: Vigased andmed.'; -$PHPMAILER_LANG['empty_message'] = 'Tühi kirja sisu'; -$PHPMAILER_LANG["encoding"] = 'Tundmatu kodeering: '; -$PHPMAILER_LANG['execute'] = 'Tegevus ebaõnnestus: '; -$PHPMAILER_LANG['file_access'] = 'Pole piisavalt õiguseid järgneva faili avamiseks: '; -$PHPMAILER_LANG['file_open'] = 'Faili Viga: Faili avamine ebaõnnestus: '; -$PHPMAILER_LANG['from_failed'] = 'Järgnev saatja e-posti aadress on vigane: '; -$PHPMAILER_LANG['instantiate'] = 'mail funktiooni käivitamine ebaõnnestus.'; -$PHPMAILER_LANG['invalid_address'] = 'Saatmine peatatud, e-posti address vigane: '; -$PHPMAILER_LANG['provide_address'] = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: '; -$PHPMAILER_LANG["signing"] = 'Viga allkirjastamisel: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() ebaõnnestus.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP serveri viga: '; -$PHPMAILER_LANG['variable_set'] = 'Ei õnnestunud määrata või lähtestada muutujat: '; -$PHPMAILER_LANG['extension_missing'] = 'Nõutud laiendus on puudu: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fa.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fa.php deleted file mode 100644 index 295a47f..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fa.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @author Mohammad Hossein Mojtahedi - */ - -$PHPMAILER_LANG['authenticate'] = 'خطای SMTP: احراز هویت با شکست مواجه شد.'; -$PHPMAILER_LANG['connect_host'] = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.'; -$PHPMAILER_LANG['data_not_accepted'] = 'خطای SMTP: داده‌ها نا‌درست هستند.'; -$PHPMAILER_LANG['empty_message'] = 'بخش متن پیام خالی است.'; -$PHPMAILER_LANG['encoding'] = 'کد‌گذاری نا‌شناخته: '; -$PHPMAILER_LANG['execute'] = 'امکان اجرا وجود ندارد: '; -$PHPMAILER_LANG['file_access'] = 'امکان دسترسی به فایل وجود ندارد: '; -$PHPMAILER_LANG['file_open'] = 'خطای File: امکان بازکردن فایل وجود ندارد: '; -$PHPMAILER_LANG['from_failed'] = 'آدرس فرستنده اشتباه است: '; -$PHPMAILER_LANG['instantiate'] = 'امکان معرفی تابع ایمیل وجود ندارد.'; -$PHPMAILER_LANG['invalid_address'] = 'آدرس ایمیل معتبر نیست: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.'; -$PHPMAILER_LANG['provide_address'] = 'باید حداقل یک آدرس گیرنده وارد کنید.'; -$PHPMAILER_LANG['recipients_failed'] = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: '; -$PHPMAILER_LANG['signing'] = 'خطا در امضا: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'خطا در اتصال به SMTP.'; -$PHPMAILER_LANG['smtp_error'] = 'خطا در SMTP Server: '; -$PHPMAILER_LANG['variable_set'] = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: '; -$PHPMAILER_LANG['extension_missing'] = 'افزونه موجود نیست: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fi.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fi.php deleted file mode 100644 index 243c054..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fi.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP feilur: Kundi ikki góðkenna.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP feilur: Data ikki góðkent.'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; -$PHPMAILER_LANG['encoding'] = 'Ókend encoding: '; -$PHPMAILER_LANG['execute'] = 'Kundi ikki útføra: '; -$PHPMAILER_LANG['file_access'] = 'Kundi ikki tilganga fílu: '; -$PHPMAILER_LANG['file_open'] = 'Fílu feilur: Kundi ikki opna fílu: '; -$PHPMAILER_LANG['from_failed'] = 'fylgjandi Frá/From adressa miseydnaðist: '; -$PHPMAILER_LANG['instantiate'] = 'Kuni ikki instantiera mail funktión.'; -//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.'; -$PHPMAILER_LANG['provide_address'] = 'Tú skal uppgeva minst móttakara-emailadressu(r).'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: '; -//$PHPMAILER_LANG['signing'] = 'Signing Error: '; -//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; -//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fr.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fr.php deleted file mode 100644 index 38a7a8e..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-fr.php +++ /dev/null @@ -1,38 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Erro SMTP: Non puido ser autentificado.'; -$PHPMAILER_LANG['connect_host'] = 'Erro SMTP: Non puido conectar co servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Erro SMTP: Datos non aceptados.'; -$PHPMAILER_LANG['empty_message'] = 'Corpo da mensaxe vacía'; -$PHPMAILER_LANG['encoding'] = 'Codificación descoñecida: '; -$PHPMAILER_LANG['execute'] = 'Non puido ser executado: '; -$PHPMAILER_LANG['file_access'] = 'Nob puido acceder ó arquivo: '; -$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: No puido abrir o arquivo: '; -$PHPMAILER_LANG['from_failed'] = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: '; -$PHPMAILER_LANG['instantiate'] = 'Non puido crear unha instancia da función Mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Non puido envia-lo correo: dirección de email inválida: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.'; -$PHPMAILER_LANG['provide_address'] = 'Debe engadir polo menos unha dirección de email coma destino.'; -$PHPMAILER_LANG['recipients_failed'] = 'Erro SMTP: Os seguintes destinos fallaron: '; -$PHPMAILER_LANG['signing'] = 'Erro ó firmar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallou.'; -$PHPMAILER_LANG['smtp_error'] = 'Erro do servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Non puidemos axustar ou reaxustar a variábel: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-he.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-he.php deleted file mode 100644 index b123aa5..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-he.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'שגיאת SMTP: פעולת האימות נכשלה.'; -$PHPMAILER_LANG['connect_host'] = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'שגיאת SMTP: מידע לא התקבל.'; -$PHPMAILER_LANG['empty_message'] = 'גוף ההודעה ריק'; -$PHPMAILER_LANG['invalid_address'] = 'כתובת שגויה: '; -$PHPMAILER_LANG['encoding'] = 'קידוד לא מוכר: '; -$PHPMAILER_LANG['execute'] = 'לא הצלחתי להפעיל את: '; -$PHPMAILER_LANG['file_access'] = 'לא ניתן לגשת לקובץ: '; -$PHPMAILER_LANG['file_open'] = 'שגיאת קובץ: לא ניתן לגשת לקובץ: '; -$PHPMAILER_LANG['from_failed'] = 'כתובות הנמענים הבאות נכשלו: '; -$PHPMAILER_LANG['instantiate'] = 'לא הצלחתי להפעיל את פונקציית המייל.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.'; -$PHPMAILER_LANG['provide_address'] = 'חובה לספק לפחות כתובת אחת של מקבל המייל.'; -$PHPMAILER_LANG['recipients_failed'] = 'שגיאת SMTP: הנמענים הבאים נכשלו: '; -$PHPMAILER_LANG['signing'] = 'שגיאת חתימה: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -$PHPMAILER_LANG['smtp_error'] = 'שגיאת שרת SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'לא ניתן לקבוע או לשנות את המשתנה: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hi.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hi.php deleted file mode 100644 index d973a35..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hi.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। '; -$PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। '; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। '; -$PHPMAILER_LANG['empty_message'] = 'संदेश खाली है। '; -$PHPMAILER_LANG['encoding'] = 'अज्ञात एन्कोडिंग प्रकार। '; -$PHPMAILER_LANG['execute'] = 'आदेश को निष्पादित करने में विफल। '; -$PHPMAILER_LANG['file_access'] = 'फ़ाइल उपलब्ध नहीं है। '; -$PHPMAILER_LANG['file_open'] = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। '; -$PHPMAILER_LANG['from_failed'] = 'प्रेषक का पता गलत है। '; -$PHPMAILER_LANG['instantiate'] = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।'; -$PHPMAILER_LANG['invalid_address'] = 'पता गलत है। '; -$PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। '; -$PHPMAILER_LANG['provide_address'] = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। '; -$PHPMAILER_LANG['signing'] = 'साइनअप त्रुटि:। '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP का connect () फ़ंक्शन विफल हुआ। '; -$PHPMAILER_LANG['smtp_error'] = 'SMTP सर्वर त्रुटि। '; -$PHPMAILER_LANG['variable_set'] = 'चर को बना या संशोधित नहीं किया जा सकता। '; -$PHPMAILER_LANG['extension_missing'] = 'एक्सटेन्षन गायब है: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hr.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hr.php deleted file mode 100644 index cacb6c3..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hr.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela autentikacija.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.'; -$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.'; -$PHPMAILER_LANG['encoding'] = 'Nepoznati encoding: '; -$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: '; -$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: '; -$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: '; -$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: '; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: '; -$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.'; -$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.'; -$PHPMAILER_LANG['provide_address'] = 'Definirajte barem jednu adresu primatelja.'; -$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP poslužitelj nije uspjelo.'; -$PHPMAILER_LANG['smtp_error'] = 'Greška SMTP poslužitelja: '; -$PHPMAILER_LANG['variable_set'] = 'Ne mogu postaviti varijablu niti ju vratiti nazad: '; -$PHPMAILER_LANG['extension_missing'] = 'Nedostaje proširenje: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hu.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hu.php deleted file mode 100644 index e6b58b0..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-hu.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP -ի սխալ: տվյալները ընդունված չեն.'; -$PHPMAILER_LANG['empty_message'] = 'Հաղորդագրությունը դատարկ է'; -$PHPMAILER_LANG['encoding'] = 'Կոդավորման անհայտ տեսակ: '; -$PHPMAILER_LANG['execute'] = 'Չհաջողվեց իրականացնել հրամանը: '; -$PHPMAILER_LANG['file_access'] = 'Ֆայլը հասանելի չէ: '; -$PHPMAILER_LANG['file_open'] = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: '; -$PHPMAILER_LANG['from_failed'] = 'Ուղարկողի հետևյալ հասցեն սխալ է: '; -$PHPMAILER_LANG['instantiate'] = 'Հնարավոր չէ կանչել mail ֆունկցիան.'; -$PHPMAILER_LANG['invalid_address'] = 'Հասցեն սխալ է: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.'; -$PHPMAILER_LANG['provide_address'] = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: '; -$PHPMAILER_LANG['signing'] = 'Ստորագրման սխալ: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP -ի connect() ֆունկցիան չի հաջողվել'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP սերվերի սխալ: '; -$PHPMAILER_LANG['variable_set'] = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: '; -$PHPMAILER_LANG['extension_missing'] = 'Հավելվածը բացակայում է: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-id.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-id.php deleted file mode 100644 index 212a11f..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-id.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @author @januridp - * @author Ian Mustafa - */ - -$PHPMAILER_LANG['authenticate'] = 'Kesalahan SMTP: Tidak dapat mengotentikasi.'; -$PHPMAILER_LANG['connect_host'] = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Kesalahan SMTP: Data tidak diterima.'; -$PHPMAILER_LANG['empty_message'] = 'Isi pesan kosong'; -$PHPMAILER_LANG['encoding'] = 'Pengkodean karakter tidak dikenali: '; -$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses: '; -$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas: '; -$PHPMAILER_LANG['file_open'] = 'Kesalahan Berkas: Berkas tidak dapat dibuka: '; -$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan: '; -$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel.'; -$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak sesuai: '; -$PHPMAILER_LANG['invalid_hostentry'] = 'Gagal terkirim, entri host tidak sesuai: '; -$PHPMAILER_LANG['invalid_host'] = 'Gagal terkirim, host tidak sesuai: '; -$PHPMAILER_LANG['provide_address'] = 'Harus tersedia minimal satu alamat tujuan'; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung'; -$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: '; -$PHPMAILER_LANG['signing'] = 'Kesalahan dalam penandatangan SSL: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() gagal.'; -$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variabel: '; -$PHPMAILER_LANG['extension_missing'] = 'Ekstensi PHP tidak tersedia: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-it.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-it.php deleted file mode 100644 index 08a6b73..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-it.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @author Stefano Sabatini - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Impossibile autenticarsi.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Impossibile connettersi all\'host SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dati non accettati dal server.'; -$PHPMAILER_LANG['empty_message'] = 'Il corpo del messaggio è vuoto'; -$PHPMAILER_LANG['encoding'] = 'Codifica dei caratteri sconosciuta: '; -$PHPMAILER_LANG['execute'] = 'Impossibile eseguire l\'operazione: '; -$PHPMAILER_LANG['file_access'] = 'Impossibile accedere al file: '; -$PHPMAILER_LANG['file_open'] = 'File Error: Impossibile aprire il file: '; -$PHPMAILER_LANG['from_failed'] = 'I seguenti indirizzi mittenti hanno generato errore: '; -$PHPMAILER_LANG['instantiate'] = 'Impossibile istanziare la funzione mail'; -$PHPMAILER_LANG['invalid_address'] = 'Impossibile inviare, l\'indirizzo email non è valido: '; -$PHPMAILER_LANG['provide_address'] = 'Deve essere fornito almeno un indirizzo ricevente'; -$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: '; -$PHPMAILER_LANG['signing'] = 'Errore nella firma: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallita.'; -$PHPMAILER_LANG['smtp_error'] = 'Errore del server SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Impossibile impostare o resettare la variabile: '; -$PHPMAILER_LANG['extension_missing'] = 'Estensione mancante: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ja.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ja.php deleted file mode 100644 index c76f526..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ja.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @author Yoshi Sakai - * @author Arisophy - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。'; -$PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。'; -$PHPMAILER_LANG['empty_message'] = 'メール本文が空です。'; -$PHPMAILER_LANG['encoding'] = '不明なエンコーディング: '; -$PHPMAILER_LANG['execute'] = '実行できませんでした: '; -$PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: '; -$PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: '; -$PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: '; -$PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。'; -$PHPMAILER_LANG['invalid_address'] = '不正なメールアドレス: '; -$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; -$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: '; -$PHPMAILER_LANG['signing'] = '署名エラー: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP接続に失敗しました。'; -$PHPMAILER_LANG['smtp_error'] = 'SMTPサーバーエラー: '; -$PHPMAILER_LANG['variable_set'] = '変数が存在しません: '; -$PHPMAILER_LANG['extension_missing'] = '拡張機能が見つかりません: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ka.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ka.php deleted file mode 100644 index 51fe403..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ka.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.'; -$PHPMAILER_LANG['encoding'] = 'კოდირების უცნობი ტიპი: '; -$PHPMAILER_LANG['execute'] = 'შეუძლებელია შემდეგი ბრძანების შესრულება: '; -$PHPMAILER_LANG['file_access'] = 'შეუძლებელია წვდომა ფაილთან: '; -$PHPMAILER_LANG['file_open'] = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: '; -$PHPMAILER_LANG['from_failed'] = 'გამგზავნის არასწორი მისამართი: '; -$PHPMAILER_LANG['instantiate'] = 'mail ფუნქციის გაშვება ვერ ხერხდება.'; -$PHPMAILER_LANG['provide_address'] = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: '; -$PHPMAILER_LANG['empty_message'] = 'შეტყობინება ცარიელია'; -$PHPMAILER_LANG['invalid_address'] = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: '; -$PHPMAILER_LANG['signing'] = 'ხელმოწერის შეცდომა: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'შეცდომა SMTP სერვერთან დაკავშირებისას'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP სერვერის შეცდომა: '; -$PHPMAILER_LANG['variable_set'] = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: '; -$PHPMAILER_LANG['extension_missing'] = 'ბიბლიოთეკა არ არსებობს: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ko.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ko.php deleted file mode 100644 index 8c97dd9..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ko.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP 오류: 인증할 수 없습니다.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.'; -$PHPMAILER_LANG['empty_message'] = '메세지 내용이 없습니다'; -$PHPMAILER_LANG['encoding'] = '알 수 없는 인코딩: '; -$PHPMAILER_LANG['execute'] = '실행 불가: '; -$PHPMAILER_LANG['file_access'] = '파일 접근 불가: '; -$PHPMAILER_LANG['file_open'] = '파일 오류: 파일을 열 수 없습니다: '; -$PHPMAILER_LANG['from_failed'] = '다음 From 주소에서 오류가 발생했습니다: '; -$PHPMAILER_LANG['instantiate'] = 'mail 함수를 인스턴스화할 수 없습니다'; -$PHPMAILER_LANG['invalid_address'] = '잘못된 주소: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.'; -$PHPMAILER_LANG['provide_address'] = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: '; -$PHPMAILER_LANG['signing'] = '서명 오류: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 연결을 실패하였습니다.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP 서버 오류: '; -$PHPMAILER_LANG['variable_set'] = '변수 설정 및 초기화 불가: '; -$PHPMAILER_LANG['extension_missing'] = '확장자 없음: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lt.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lt.php deleted file mode 100644 index 4f115b1..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lt.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP klaida: autentifikacija nepavyko.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP klaida: duomenys nepriimti.'; -$PHPMAILER_LANG['empty_message'] = 'Laiško turinys tuščias'; -$PHPMAILER_LANG['encoding'] = 'Neatpažinta koduotė: '; -$PHPMAILER_LANG['execute'] = 'Nepavyko įvykdyti komandos: '; -$PHPMAILER_LANG['file_access'] = 'Byla nepasiekiama: '; -$PHPMAILER_LANG['file_open'] = 'Bylos klaida: Nepavyksta atidaryti: '; -$PHPMAILER_LANG['from_failed'] = 'Neteisingas siuntėjo adresas: '; -$PHPMAILER_LANG['instantiate'] = 'Nepavyko paleisti mail funkcijos.'; -$PHPMAILER_LANG['invalid_address'] = 'Neteisingas adresas: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.'; -$PHPMAILER_LANG['provide_address'] = 'Nurodykite bent vieną gavėjo adresą.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: '; -$PHPMAILER_LANG['signing'] = 'Prisijungimo klaida: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP susijungimo klaida'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP stoties klaida: '; -$PHPMAILER_LANG['variable_set'] = 'Nepavyko priskirti reikšmės kintamajam: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lv.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lv.php deleted file mode 100644 index 679b18c..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-lv.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP kļūda: Autorizācija neizdevās.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Kļūda: Nepieņem informāciju.'; -$PHPMAILER_LANG['empty_message'] = 'Ziņojuma teksts ir tukšs'; -$PHPMAILER_LANG['encoding'] = 'Neatpazīts kodējums: '; -$PHPMAILER_LANG['execute'] = 'Neizdevās izpildīt komandu: '; -$PHPMAILER_LANG['file_access'] = 'Fails nav pieejams: '; -$PHPMAILER_LANG['file_open'] = 'Faila kļūda: Nevar atvērt failu: '; -$PHPMAILER_LANG['from_failed'] = 'Nepareiza sūtītāja adrese: '; -$PHPMAILER_LANG['instantiate'] = 'Nevar palaist sūtīšanas funkciju.'; -$PHPMAILER_LANG['invalid_address'] = 'Nepareiza adrese: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.'; -$PHPMAILER_LANG['provide_address'] = 'Lūdzu, norādiet vismaz vienu adresātu.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: '; -$PHPMAILER_LANG['signing'] = 'Autorizācijas kļūda: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP savienojuma kļūda'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP servera kļūda: '; -$PHPMAILER_LANG['variable_set'] = 'Nevar piešķirt mainīgā vērtību: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-mg.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-mg.php deleted file mode 100644 index 8a94f6a..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-mg.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP diso: tsy voarakitra ny angona.'; -$PHPMAILER_LANG['empty_message'] = 'Tsy misy ny votoaty mailaka.'; -$PHPMAILER_LANG['encoding'] = 'Tsy fantatra encoding: '; -$PHPMAILER_LANG['execute'] = 'Tsy afaka manatanteraka ity baiko manaraka ity: '; -$PHPMAILER_LANG['file_access'] = 'Tsy nahomby ny fidirana amin\'ity rakitra ity: '; -$PHPMAILER_LANG['file_open'] = 'Hadisoana diso: Tsy afaka nanokatra ity file manaraka ity: '; -$PHPMAILER_LANG['from_failed'] = 'Ny adiresy iraka manaraka dia diso: '; -$PHPMAILER_LANG['instantiate'] = 'Tsy afaka nanomboka ny hetsika mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Tsy mety ny adiresy: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tsy manohana.'; -$PHPMAILER_LANG['provide_address'] = 'Alefaso azafady iray adiresy iray farafahakeliny.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Tsy mety ireo mpanaraka ireto: '; -$PHPMAILER_LANG['signing'] = 'Error nandritra ny sonia:'; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Tsy nahomby ny fifandraisana tamin\'ny server SMTP.'; -$PHPMAILER_LANG['smtp_error'] = 'Fahadisoana tamin\'ny server SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Tsy azo atao ny mametraka na mamerina ny variable: '; -$PHPMAILER_LANG['extension_missing'] = 'Tsy hita ny ampahany: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ms.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ms.php deleted file mode 100644 index 71db338..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ms.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Ralat SMTP: Tidak dapat pengesahan.'; -$PHPMAILER_LANG['connect_host'] = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Ralat SMTP: Data tidak diterima oleh pelayan.'; -$PHPMAILER_LANG['empty_message'] = 'Tiada isi untuk mesej'; -$PHPMAILER_LANG['encoding'] = 'Pengekodan tidak diketahui: '; -$PHPMAILER_LANG['execute'] = 'Tidak dapat melaksanakan: '; -$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses fail: '; -$PHPMAILER_LANG['file_open'] = 'Ralat Fail: Tidak dapat membuka fail: '; -$PHPMAILER_LANG['from_failed'] = 'Berikut merupakan ralat dari alamat e-mel: '; -$PHPMAILER_LANG['instantiate'] = 'Tidak dapat memberi contoh fungsi e-mel.'; -$PHPMAILER_LANG['invalid_address'] = 'Alamat emel tidak sah: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.'; -$PHPMAILER_LANG['provide_address'] = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.'; -$PHPMAILER_LANG['recipients_failed'] = 'Ralat SMTP: Penerima e-mel berikut telah gagal: '; -$PHPMAILER_LANG['signing'] = 'Ralat pada tanda tangan: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() telah gagal.'; -$PHPMAILER_LANG['smtp_error'] = 'Ralat pada pelayan SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: '; -$PHPMAILER_LANG['extension_missing'] = 'Sambungan hilang: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-nb.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-nb.php deleted file mode 100644 index 65793ce..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-nb.php +++ /dev/null @@ -1,26 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: authenticatie mislukt.'; -$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+.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon niet verbinden met SMTP-host.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data niet geaccepteerd.'; -$PHPMAILER_LANG['empty_message'] = 'Berichttekst is leeg'; -$PHPMAILER_LANG['encoding'] = 'Onbekende codering: '; -$PHPMAILER_LANG['execute'] = 'Kon niet uitvoeren: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensie afwezig: '; -$PHPMAILER_LANG['file_access'] = 'Kreeg geen toegang tot bestand: '; -$PHPMAILER_LANG['file_open'] = 'Bestandsfout: kon bestand niet openen: '; -$PHPMAILER_LANG['from_failed'] = 'Het volgende afzendersadres is mislukt: '; -$PHPMAILER_LANG['instantiate'] = 'Kon mailfunctie niet initialiseren.'; -$PHPMAILER_LANG['invalid_address'] = 'Ongeldig adres: '; -$PHPMAILER_LANG['invalid_header'] = 'Ongeldige header naam of waarde'; -$PHPMAILER_LANG['invalid_hostentry'] = 'Ongeldige hostentry: '; -$PHPMAILER_LANG['invalid_host'] = 'Ongeldige host: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.'; -$PHPMAILER_LANG['provide_address'] = 'Er moet minstens één ontvanger worden opgegeven.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: de volgende ontvangers zijn mislukt: '; -$PHPMAILER_LANG['signing'] = 'Signeerfout: '; -$PHPMAILER_LANG['smtp_code'] = 'SMTP code: '; -$PHPMAILER_LANG['smtp_code_ex'] = 'Aanvullende SMTP informatie: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Verbinding mislukt.'; -$PHPMAILER_LANG['smtp_detail'] = 'Detail: '; -$PHPMAILER_LANG['smtp_error'] = 'SMTP-serverfout: '; -$PHPMAILER_LANG['variable_set'] = 'Kan de volgende variabele niet instellen of resetten: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pl.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pl.php deleted file mode 100644 index 23caa71..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pl.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Erro do SMTP: Não foi possível realizar a autenticação.'; -$PHPMAILER_LANG['connect_host'] = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Erro do SMTP: Os dados foram rejeitados.'; -$PHPMAILER_LANG['empty_message'] = 'A mensagem no e-mail está vazia.'; -$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; -$PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; -$PHPMAILER_LANG['file_access'] = 'Não foi possível aceder o ficheiro: '; -$PHPMAILER_LANG['file_open'] = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: '; -$PHPMAILER_LANG['from_failed'] = 'Ocorreram falhas nos endereços dos seguintes remententes: '; -$PHPMAILER_LANG['instantiate'] = 'Não foi possível iniciar uma instância da função mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; -$PHPMAILER_LANG['provide_address'] = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.'; -$PHPMAILER_LANG['recipients_failed'] = 'Erro do SMTP: O endereço do seguinte destinatário falhou: '; -$PHPMAILER_LANG['signing'] = 'Erro ao assinar: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; -$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensão em falta: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pt_br.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pt_br.php deleted file mode 100644 index 5239865..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-pt_br.php +++ /dev/null @@ -1,38 +0,0 @@ - - * @author Lucas Guimarães - * @author Phelipe Alves - * @author Fabio Beneditto - * @author Geidson Benício Coelho - */ - -$PHPMAILER_LANG['authenticate'] = 'Erro de SMTP: Não foi possível autenticar.'; -$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+ '; -$PHPMAILER_LANG['connect_host'] = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Erro de SMTP: Dados rejeitados.'; -$PHPMAILER_LANG['empty_message'] = 'Mensagem vazia'; -$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: '; -$PHPMAILER_LANG['execute'] = 'Não foi possível executar: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: '; -$PHPMAILER_LANG['file_access'] = 'Não foi possível acessar o arquivo: '; -$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: Não foi possível abrir o arquivo: '; -$PHPMAILER_LANG['from_failed'] = 'Os seguintes remetentes falharam: '; -$PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.'; -$PHPMAILER_LANG['invalid_address'] = 'Endereço de e-mail inválido: '; -$PHPMAILER_LANG['invalid_header'] = 'Nome ou valor de cabeçalho inválido'; -$PHPMAILER_LANG['invalid_hostentry'] = 'hostentry inválido: '; -$PHPMAILER_LANG['invalid_host'] = 'host inválido: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.'; -$PHPMAILER_LANG['provide_address'] = 'Você deve informar pelo menos um destinatário.'; -$PHPMAILER_LANG['recipients_failed'] = 'Erro de SMTP: Os seguintes destinatários falharam: '; -$PHPMAILER_LANG['signing'] = 'Erro de Assinatura: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.'; -$PHPMAILER_LANG['smtp_code'] = 'Código do servidor SMTP: '; -$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: '; -$PHPMAILER_LANG['smtp_code_ex'] = 'Informações adicionais do servidor SMTP: '; -$PHPMAILER_LANG['smtp_detail'] = 'Detalhes do servidor SMTP: '; -$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ro.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ro.php deleted file mode 100644 index 45bef91..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-ro.php +++ /dev/null @@ -1,33 +0,0 @@ - - * @author Foster Snowhill - */ - -$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.'; -$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.'; -$PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: '; -$PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: '; -$PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: '; -$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: '; -$PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: '; -$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().'; -$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.'; -$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: '; -$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение'; -$PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: '; -$PHPMAILER_LANG['signing'] = 'Ошибка подписи: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером'; -$PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: '; -$PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: '; -$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sk.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sk.php deleted file mode 100644 index 028f5bc..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sk.php +++ /dev/null @@ -1,30 +0,0 @@ - - * @author Peter Orlický - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Chyba autentifikácie.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dáta neboli prijaté'; -$PHPMAILER_LANG['empty_message'] = 'Prázdne telo správy.'; -$PHPMAILER_LANG['encoding'] = 'Neznáme kódovanie: '; -$PHPMAILER_LANG['execute'] = 'Nedá sa vykonať: '; -$PHPMAILER_LANG['file_access'] = 'Súbor nebol nájdený: '; -$PHPMAILER_LANG['file_open'] = 'File Error: Súbor sa otvoriť pre čítanie: '; -$PHPMAILER_LANG['from_failed'] = 'Následujúca adresa From je nesprávna: '; -$PHPMAILER_LANG['instantiate'] = 'Nedá sa vytvoriť inštancia emailovej funkcie.'; -$PHPMAILER_LANG['invalid_address'] = 'Neodoslané, emailová adresa je nesprávna: '; -$PHPMAILER_LANG['invalid_hostentry'] = 'Záznam hostiteľa je nesprávny: '; -$PHPMAILER_LANG['invalid_host'] = 'Hostiteľ je nesprávny: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.'; -$PHPMAILER_LANG['provide_address'] = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy príjemcov niesu správne '; -$PHPMAILER_LANG['signing'] = 'Chyba prihlasovania: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zlyhalo.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP chyba serveru: '; -$PHPMAILER_LANG['variable_set'] = 'Nemožno nastaviť alebo resetovať premennú: '; -$PHPMAILER_LANG['extension_missing'] = 'Chýba rozšírenie: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sl.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sl.php deleted file mode 100644 index 3e00c25..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sl.php +++ /dev/null @@ -1,36 +0,0 @@ - - * @author Filip Š - * @author Blaž Oražem - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.'; -$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+.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP napaka: Strežnik zavrača podatke.'; -$PHPMAILER_LANG['empty_message'] = 'E-poštno sporočilo nima vsebine.'; -$PHPMAILER_LANG['encoding'] = 'Nepoznan tip kodiranja: '; -$PHPMAILER_LANG['execute'] = 'Operacija ni uspela: '; -$PHPMAILER_LANG['extension_missing'] = 'Manjkajoča razširitev: '; -$PHPMAILER_LANG['file_access'] = 'Nimam dostopa do datoteke: '; -$PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: '; -$PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: '; -$PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.'; -$PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: '; -$PHPMAILER_LANG['invalid_header'] = 'Neveljavno ime ali vrednost glave'; -$PHPMAILER_LANG['invalid_hostentry'] = 'Neveljaven vnos gostitelja: '; -$PHPMAILER_LANG['invalid_host'] = 'Neveljaven gostitelj: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.'; -$PHPMAILER_LANG['provide_address'] = 'Prosimo, vnesite vsaj enega naslovnika.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: '; -$PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: '; -$PHPMAILER_LANG['smtp_code'] = 'SMTP koda: '; -$PHPMAILER_LANG['smtp_code_ex'] = 'Dodatne informacije o SMTP: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.'; -$PHPMAILER_LANG['smtp_detail'] = 'Podrobnosti: '; -$PHPMAILER_LANG['smtp_error'] = 'Napaka SMTP strežnika: '; -$PHPMAILER_LANG['variable_set'] = 'Ne morem nastaviti oz. ponastaviti spremenljivke: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr.php deleted file mode 100644 index 0b5280f..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @author Miloš Milanović - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: аутентификација није успела.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: повезивање са SMTP сервером није успело.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: подаци нису прихваћени.'; -$PHPMAILER_LANG['empty_message'] = 'Садржај поруке је празан.'; -$PHPMAILER_LANG['encoding'] = 'Непознато кодирање: '; -$PHPMAILER_LANG['execute'] = 'Није могуће извршити наредбу: '; -$PHPMAILER_LANG['file_access'] = 'Није могуће приступити датотеци: '; -$PHPMAILER_LANG['file_open'] = 'Није могуће отворити датотеку: '; -$PHPMAILER_LANG['from_failed'] = 'SMTP грешка: слање са следећих адреса није успело: '; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: слање на следеће адресе није успело: '; -$PHPMAILER_LANG['instantiate'] = 'Није могуће покренути mail функцију.'; -$PHPMAILER_LANG['invalid_address'] = 'Порука није послата. Неисправна адреса: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.'; -$PHPMAILER_LANG['provide_address'] = 'Дефинишите бар једну адресу примаоца.'; -$PHPMAILER_LANG['signing'] = 'Грешка приликом пријаве: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Повезивање са SMTP сервером није успело.'; -$PHPMAILER_LANG['smtp_error'] = 'Грешка SMTP сервера: '; -$PHPMAILER_LANG['variable_set'] = 'Није могуће задати нити ресетовати променљиву: '; -$PHPMAILER_LANG['extension_missing'] = 'Недостаје проширење: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr_latn.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr_latn.php deleted file mode 100644 index 6213832..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sr_latn.php +++ /dev/null @@ -1,28 +0,0 @@ - - * @author Miloš Milanović - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP greška: autentifikacija nije uspela.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP greška: povezivanje sa SMTP serverom nije uspelo.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP greška: podaci nisu prihvaćeni.'; -$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.'; -$PHPMAILER_LANG['encoding'] = 'Nepoznato kodiranje: '; -$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: '; -$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: '; -$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: '; -$PHPMAILER_LANG['from_failed'] = 'SMTP greška: slanje sa sledećih adresa nije uspelo: '; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP greška: slanje na sledeće adrese nije uspelo: '; -$PHPMAILER_LANG['instantiate'] = 'Nije moguće pokrenuti mail funkciju.'; -$PHPMAILER_LANG['invalid_address'] = 'Poruka nije poslata. Neispravna adresa: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' majler nije podržan.'; -$PHPMAILER_LANG['provide_address'] = 'Definišite bar jednu adresu primaoca.'; -$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Povezivanje sa SMTP serverom nije uspelo.'; -$PHPMAILER_LANG['smtp_error'] = 'Greška SMTP servera: '; -$PHPMAILER_LANG['variable_set'] = 'Nije moguće zadati niti resetovati promenljivu: '; -$PHPMAILER_LANG['extension_missing'] = 'Nedostaje proširenje: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sv.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sv.php deleted file mode 100644 index 9872c19..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-sv.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP fel: Kunde inte autentisera.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP fel: Kunde inte ansluta till SMTP-server.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fel: Data accepterades inte.'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; -$PHPMAILER_LANG['encoding'] = 'Okänt encode-format: '; -$PHPMAILER_LANG['execute'] = 'Kunde inte köra: '; -$PHPMAILER_LANG['file_access'] = 'Ingen åtkomst till fil: '; -$PHPMAILER_LANG['file_open'] = 'Fil fel: Kunde inte öppna fil: '; -$PHPMAILER_LANG['from_failed'] = 'Följande avsändaradress är felaktig: '; -$PHPMAILER_LANG['instantiate'] = 'Kunde inte initiera e-postfunktion.'; -$PHPMAILER_LANG['invalid_address'] = 'Felaktig adress: '; -$PHPMAILER_LANG['provide_address'] = 'Du måste ange minst en mottagares e-postadress.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP fel: Följande mottagare är felaktig: '; -$PHPMAILER_LANG['signing'] = 'Signeringsfel: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() misslyckades.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP serverfel: '; -$PHPMAILER_LANG['variable_set'] = 'Kunde inte definiera eller återställa variabel: '; -$PHPMAILER_LANG['extension_missing'] = 'Tillägg ej tillgängligt: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tl.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tl.php deleted file mode 100644 index d15bed1..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tl.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Hindi mapatotohanan.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Hindi makakonekta sa SMTP host.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Ang datos ay hindi naitanggap.'; -$PHPMAILER_LANG['empty_message'] = 'Walang laman ang mensahe'; -$PHPMAILER_LANG['encoding'] = 'Hindi alam ang encoding: '; -$PHPMAILER_LANG['execute'] = 'Hindi maisasagawa: '; -$PHPMAILER_LANG['file_access'] = 'Hindi ma-access ang file: '; -$PHPMAILER_LANG['file_open'] = 'File Error: Hindi mabuksan ang file: '; -$PHPMAILER_LANG['from_failed'] = 'Ang sumusunod na address ay nabigo: '; -$PHPMAILER_LANG['instantiate'] = 'Hindi maisimulan ang instance ng mail function.'; -$PHPMAILER_LANG['invalid_address'] = 'Hindi wasto ang address na naibigay: '; -$PHPMAILER_LANG['mailer_not_supported'] = 'Ang mailer ay hindi suportado.'; -$PHPMAILER_LANG['provide_address'] = 'Kailangan mong magbigay ng kahit isang email address na tatanggap.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Ang mga sumusunod na tatanggap ay nabigo: '; -$PHPMAILER_LANG['signing'] = 'Hindi ma-sign: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Ang SMTP connect() ay nabigo.'; -$PHPMAILER_LANG['smtp_error'] = 'Ang server ng SMTP ay nabigo: '; -$PHPMAILER_LANG['variable_set'] = 'Hindi matatakda o ma-reset ang mga variables: '; -$PHPMAILER_LANG['extension_missing'] = 'Nawawala ang extension: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tr.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tr.php deleted file mode 100644 index f938f80..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-tr.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @fixed by Boris Yurchenko - */ - -$PHPMAILER_LANG['authenticate'] = 'Помилка SMTP: помилка авторизації.'; -$PHPMAILER_LANG['connect_host'] = 'Помилка SMTP: не вдається під\'єднатися до SMTP-серверу.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Помилка SMTP: дані не прийнято.'; -$PHPMAILER_LANG['encoding'] = 'Невідоме кодування: '; -$PHPMAILER_LANG['execute'] = 'Неможливо виконати команду: '; -$PHPMAILER_LANG['file_access'] = 'Немає доступу до файлу: '; -$PHPMAILER_LANG['file_open'] = 'Помилка файлової системи: не вдається відкрити файл: '; -$PHPMAILER_LANG['from_failed'] = 'Невірна адреса відправника: '; -$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail().'; -$PHPMAILER_LANG['provide_address'] = 'Будь ласка, введіть хоча б одну email-адресу отримувача.'; -$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.'; -$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: '; -$PHPMAILER_LANG['empty_message'] = 'Пусте повідомлення'; -$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через неправильний формат email-адреси: '; -$PHPMAILER_LANG['signing'] = 'Помилка підпису: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання з SMTP-сервером'; -$PHPMAILER_LANG['smtp_error'] = 'Помилка SMTP-сервера: '; -$PHPMAILER_LANG['variable_set'] = 'Неможливо встановити або скинути змінну: '; -$PHPMAILER_LANG['extension_missing'] = 'Розширення відсутнє: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-vi.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-vi.php deleted file mode 100644 index d65576e..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-vi.php +++ /dev/null @@ -1,27 +0,0 @@ - - */ - -$PHPMAILER_LANG['authenticate'] = 'Lỗi SMTP: Không thể xác thực.'; -$PHPMAILER_LANG['connect_host'] = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.'; -$PHPMAILER_LANG['data_not_accepted'] = 'Lỗi SMTP: Dữ liệu không được chấp nhận.'; -$PHPMAILER_LANG['empty_message'] = 'Không có nội dung'; -$PHPMAILER_LANG['encoding'] = 'Mã hóa không xác định: '; -$PHPMAILER_LANG['execute'] = 'Không thực hiện được: '; -$PHPMAILER_LANG['file_access'] = 'Không thể truy cập tệp tin '; -$PHPMAILER_LANG['file_open'] = 'Lỗi Tập tin: Không thể mở tệp tin: '; -$PHPMAILER_LANG['from_failed'] = 'Lỗi địa chỉ gửi đi: '; -$PHPMAILER_LANG['instantiate'] = 'Không dùng được các hàm gửi thư.'; -$PHPMAILER_LANG['invalid_address'] = 'Đại chỉ emai không đúng: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.'; -$PHPMAILER_LANG['provide_address'] = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.'; -$PHPMAILER_LANG['recipients_failed'] = 'Lỗi SMTP: lỗi địa chỉ người nhận: '; -$PHPMAILER_LANG['signing'] = 'Lỗi đăng nhập: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Lỗi kết nối với SMTP'; -$PHPMAILER_LANG['smtp_error'] = 'Lỗi máy chủ smtp '; -$PHPMAILER_LANG['variable_set'] = 'Không thể thiết lập hoặc thiết lập lại biến: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh.php deleted file mode 100644 index 35e4e70..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @author Peter Dave Hello <@PeterDaveHello/> - * @author Jason Chiang - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP 錯誤:登入失敗。'; -$PHPMAILER_LANG['connect_host'] = 'SMTP 錯誤:無法連線到 SMTP 主機。'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 錯誤:無法接受的資料。'; -$PHPMAILER_LANG['empty_message'] = '郵件內容為空'; -$PHPMAILER_LANG['encoding'] = '未知編碼: '; -$PHPMAILER_LANG['execute'] = '無法執行:'; -$PHPMAILER_LANG['file_access'] = '無法存取檔案:'; -$PHPMAILER_LANG['file_open'] = '檔案錯誤:無法開啟檔案:'; -$PHPMAILER_LANG['from_failed'] = '發送地址錯誤:'; -$PHPMAILER_LANG['instantiate'] = '未知函數呼叫。'; -$PHPMAILER_LANG['invalid_address'] = '因為電子郵件地址無效,無法傳送: '; -$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。'; -$PHPMAILER_LANG['provide_address'] = '必須提供至少一個收件人地址。'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP 錯誤:以下收件人地址錯誤:'; -$PHPMAILER_LANG['signing'] = '電子簽章錯誤: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 連線失敗'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP 伺服器錯誤: '; -$PHPMAILER_LANG['variable_set'] = '無法設定或重設變數: '; -$PHPMAILER_LANG['extension_missing'] = '遺失模組 Extension: '; diff --git a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh_cn.php b/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh_cn.php deleted file mode 100644 index 728a499..0000000 --- a/02.php/extension/PHPMailer-6.6.0/language/phpmailer.lang-zh_cn.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @author young - * @author Teddysun - */ - -$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。'; -$PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。'; -$PHPMAILER_LANG['empty_message'] = '邮件正文为空。'; -$PHPMAILER_LANG['encoding'] = '未知编码:'; -$PHPMAILER_LANG['execute'] = '无法执行:'; -$PHPMAILER_LANG['file_access'] = '无法访问文件:'; -$PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:'; -$PHPMAILER_LANG['from_failed'] = '发送地址错误:'; -$PHPMAILER_LANG['instantiate'] = '未知函数调用。'; -$PHPMAILER_LANG['invalid_address'] = '发送失败,电子邮箱地址是无效的:'; -$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。'; -$PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:'; -$PHPMAILER_LANG['signing'] = '登录失败:'; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP服务器连接失败。'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP服务器出错:'; -$PHPMAILER_LANG['variable_set'] = '无法设置或重置变量:'; -$PHPMAILER_LANG['extension_missing'] = '丢失模块 Extension:'; diff --git a/02.php/extension/PHPMailer-6.6.0/src/Exception.php b/02.php/extension/PHPMailer-6.6.0/src/Exception.php deleted file mode 100644 index 52eaf95..0000000 --- a/02.php/extension/PHPMailer-6.6.0/src/Exception.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2020 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer exception handler. - * - * @author Marcus Bointon - */ -class Exception extends \Exception -{ - /** - * Prettify error message output. - * - * @return string - */ - public function errorMessage() - { - return '' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "
\n"; - } -} diff --git a/02.php/extension/PHPMailer-6.6.0/src/OAuth.php b/02.php/extension/PHPMailer-6.6.0/src/OAuth.php deleted file mode 100644 index c1d5b77..0000000 --- a/02.php/extension/PHPMailer-6.6.0/src/OAuth.php +++ /dev/null @@ -1,139 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2020 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -use League\OAuth2\Client\Grant\RefreshToken; -use League\OAuth2\Client\Provider\AbstractProvider; -use League\OAuth2\Client\Token\AccessToken; - -/** - * OAuth - OAuth2 authentication wrapper class. - * Uses the oauth2-client package from the League of Extraordinary Packages. - * - * @see http://oauth2-client.thephpleague.com - * - * @author Marcus Bointon (Synchro/coolbru) - */ -class OAuth implements OAuthTokenProvider -{ - /** - * An instance of the League OAuth Client Provider. - * - * @var AbstractProvider - */ - protected $provider; - - /** - * The current OAuth access token. - * - * @var AccessToken - */ - protected $oauthToken; - - /** - * The user's email address, usually used as the login ID - * and also the from address when sending email. - * - * @var string - */ - protected $oauthUserEmail = ''; - - /** - * The client secret, generated in the app definition of the service you're connecting to. - * - * @var string - */ - protected $oauthClientSecret = ''; - - /** - * The client ID, generated in the app definition of the service you're connecting to. - * - * @var string - */ - protected $oauthClientId = ''; - - /** - * The refresh token, used to obtain new AccessTokens. - * - * @var string - */ - protected $oauthRefreshToken = ''; - - /** - * OAuth constructor. - * - * @param array $options Associative array containing - * `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements - */ - public function __construct($options) - { - $this->provider = $options['provider']; - $this->oauthUserEmail = $options['userName']; - $this->oauthClientSecret = $options['clientSecret']; - $this->oauthClientId = $options['clientId']; - $this->oauthRefreshToken = $options['refreshToken']; - } - - /** - * Get a new RefreshToken. - * - * @return RefreshToken - */ - protected function getGrant() - { - return new RefreshToken(); - } - - /** - * Get a new AccessToken. - * - * @return AccessToken - */ - protected function getToken() - { - return $this->provider->getAccessToken( - $this->getGrant(), - ['refresh_token' => $this->oauthRefreshToken] - ); - } - - /** - * Generate a base64-encoded OAuth token. - * - * @return string - */ - public function getOauth64() - { - //Get a new token if it's not available or has expired - if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { - $this->oauthToken = $this->getToken(); - } - - return base64_encode( - 'user=' . - $this->oauthUserEmail . - "\001auth=Bearer " . - $this->oauthToken . - "\001\001" - ); - } -} diff --git a/02.php/extension/PHPMailer-6.6.0/src/OAuthTokenProvider.php b/02.php/extension/PHPMailer-6.6.0/src/OAuthTokenProvider.php deleted file mode 100644 index 1155507..0000000 --- a/02.php/extension/PHPMailer-6.6.0/src/OAuthTokenProvider.php +++ /dev/null @@ -1,44 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2020 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * OAuthTokenProvider - OAuth2 token provider interface. - * Provides base64 encoded OAuth2 auth strings for SMTP authentication. - * - * @see OAuth - * @see SMTP::authenticate() - * - * @author Peter Scopes (pdscopes) - * @author Marcus Bointon (Synchro/coolbru) - */ -interface OAuthTokenProvider -{ - /** - * Generate a base64-encoded OAuth token ensuring that the access token has not expired. - * The string to be base 64 encoded should be in the form: - * "user=\001auth=Bearer \001\001" - * - * @return string - */ - public function getOauth64(); -} diff --git a/02.php/extension/PHPMailer-6.6.0/src/PHPMailer.php b/02.php/extension/PHPMailer-6.6.0/src/PHPMailer.php deleted file mode 100644 index 3ad1446..0000000 --- a/02.php/extension/PHPMailer-6.6.0/src/PHPMailer.php +++ /dev/null @@ -1,5072 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2020 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer - PHP email creation and transport class. - * - * @author Marcus Bointon (Synchro/coolbru) - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - */ -class PHPMailer -{ - const CHARSET_ASCII = 'us-ascii'; - // const CHARSET_ISO88591 = 'iso-8859-1'; - const CHARSET_ISO88591 = 'utf-8'; - const CHARSET_UTF8 = 'utf-8'; - - const CONTENT_TYPE_PLAINTEXT = 'text/plain'; - const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar'; - const CONTENT_TYPE_TEXT_HTML = 'text/html'; - const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative'; - const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed'; - const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related'; - - const ENCODING_7BIT = '7bit'; - const ENCODING_8BIT = '8bit'; - const ENCODING_BASE64 = 'base64'; - const ENCODING_BINARY = 'binary'; - const ENCODING_QUOTED_PRINTABLE = 'quoted-printable'; - - const ENCRYPTION_STARTTLS = 'tls'; - const ENCRYPTION_SMTPS = 'ssl'; - - const ICAL_METHOD_REQUEST = 'REQUEST'; - const ICAL_METHOD_PUBLISH = 'PUBLISH'; - const ICAL_METHOD_REPLY = 'REPLY'; - const ICAL_METHOD_ADD = 'ADD'; - const ICAL_METHOD_CANCEL = 'CANCEL'; - const ICAL_METHOD_REFRESH = 'REFRESH'; - const ICAL_METHOD_COUNTER = 'COUNTER'; - const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER'; - - /** - * Email priority. - * Options: null (default), 1 = High, 3 = Normal, 5 = low. - * When null, the header is not set at all. - * - * @var int|null - */ - public $Priority; - - /** - * The character set of the message. - * - * @var string - */ - public $CharSet = self::CHARSET_ISO88591; - - /** - * The MIME Content-type of the message. - * - * @var string - */ - public $ContentType = self::CONTENT_TYPE_PLAINTEXT; - - /** - * The message encoding. - * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable". - * - * @var string - */ - public $Encoding = self::ENCODING_8BIT; - - /** - * Holds the most recent mailer error message. - * - * @var string - */ - public $ErrorInfo = ''; - - /** - * The From email address for the message. - * - * @var string - */ - public $From = ''; - - /** - * The From name of the message. - * - * @var string - */ - public $FromName = ''; - - /** - * The envelope sender of the message. - * This will usually be turned into a Return-Path header by the receiver, - * and is the address that bounces will be sent to. - * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP. - * - * @var string - */ - public $Sender = ''; - - /** - * The Subject of the message. - * - * @var string - */ - public $Subject = ''; - - /** - * An HTML or plain text message body. - * If HTML then call isHTML(true). - * - * @var string - */ - public $Body = ''; - - /** - * The plain-text message body. - * This body can be read by mail clients that do not have HTML email - * capability such as mutt & Eudora. - * Clients that can read HTML will view the normal Body. - * - * @var string - */ - public $AltBody = ''; - - /** - * An iCal message part body. - * Only supported in simple alt or alt_inline message types - * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. - * - * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ - * @see http://kigkonsult.se/iCalcreator/ - * - * @var string - */ - public $Ical = ''; - - /** - * Value-array of "method" in Contenttype header "text/calendar" - * - * @var string[] - */ - protected static $IcalMethods = [ - self::ICAL_METHOD_REQUEST, - self::ICAL_METHOD_PUBLISH, - self::ICAL_METHOD_REPLY, - self::ICAL_METHOD_ADD, - self::ICAL_METHOD_CANCEL, - self::ICAL_METHOD_REFRESH, - self::ICAL_METHOD_COUNTER, - self::ICAL_METHOD_DECLINECOUNTER, - ]; - - /** - * The complete compiled MIME message body. - * - * @var string - */ - protected $MIMEBody = ''; - - /** - * The complete compiled MIME message headers. - * - * @var string - */ - protected $MIMEHeader = ''; - - /** - * Extra headers that createHeader() doesn't fold in. - * - * @var string - */ - protected $mailHeader = ''; - - /** - * Word-wrap the message body to this number of chars. - * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance. - * - * @see static::STD_LINE_LENGTH - * - * @var int - */ - public $WordWrap = 0; - - /** - * Which method to use to send mail. - * Options: "mail", "sendmail", or "smtp". - * - * @var string - */ - public $Mailer = 'mail'; - - /** - * The path to the sendmail program. - * - * @var string - */ - public $Sendmail = '/usr/sbin/sendmail'; - - /** - * Whether mail() uses a fully sendmail-compatible MTA. - * One which supports sendmail's "-oi -f" options. - * - * @var bool - */ - public $UseSendmailOptions = true; - - /** - * The email address that a reading confirmation should be sent to, also known as read receipt. - * - * @var string - */ - public $ConfirmReadingTo = ''; - - /** - * The hostname to use in the Message-ID header and as default HELO string. - * If empty, PHPMailer attempts to find one with, in order, - * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value - * 'localhost.localdomain'. - * - * @see PHPMailer::$Helo - * - * @var string - */ - public $Hostname = ''; - - /** - * An ID to be used in the Message-ID header. - * If empty, a unique id will be generated. - * You can set your own, but it must be in the format "", - * as defined in RFC5322 section 3.6.4 or it will be ignored. - * - * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 - * - * @var string - */ - public $MessageID = ''; - - /** - * The message Date to be used in the Date header. - * If empty, the current date will be added. - * - * @var string - */ - public $MessageDate = ''; - - /** - * SMTP hosts. - * Either a single hostname or multiple semicolon-delimited hostnames. - * You can also specify a different port - * for each host by using this format: [hostname:port] - * (e.g. "smtp1.example.com:25;smtp2.example.com"). - * You can also specify encryption type, for example: - * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465"). - * Hosts will be tried in order. - * - * @var string - */ - public $Host = 'localhost'; - - /** - * The default SMTP server port. - * - * @var int - */ - public $Port = 25; - - /** - * The SMTP HELO/EHLO name used for the SMTP connection. - * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find - * one with the same method described above for $Hostname. - * - * @see PHPMailer::$Hostname - * - * @var string - */ - public $Helo = ''; - - /** - * What kind of encryption to use on the SMTP connection. - * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS. - * - * @var string - */ - public $SMTPSecure = ''; - - /** - * Whether to enable TLS encryption automatically if a server supports it, - * even if `SMTPSecure` is not set to 'tls'. - * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. - * - * @var bool - */ - public $SMTPAutoTLS = true; - - /** - * Whether to use SMTP authentication. - * Uses the Username and Password properties. - * - * @see PHPMailer::$Username - * @see PHPMailer::$Password - * - * @var bool - */ - public $SMTPAuth = false; - - /** - * Options array passed to stream_context_create when connecting via SMTP. - * - * @var array - */ - public $SMTPOptions = []; - - /** - * SMTP username. - * - * @var string - */ - public $Username = ''; - - /** - * SMTP password. - * - * @var string - */ - public $Password = ''; - - /** - * SMTP auth type. - * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. - * - * @var string - */ - public $AuthType = ''; - - /** - * An implementation of the PHPMailer OAuthTokenProvider interface. - * - * @var OAuthTokenProvider - */ - protected $oauth; - - /** - * The SMTP server timeout in seconds. - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. - * - * @var int - */ - public $Timeout = 300; - - /** - * Comma separated list of DSN notifications - * 'NEVER' under no circumstances a DSN must be returned to the sender. - * If you use NEVER all other notifications will be ignored. - * 'SUCCESS' will notify you when your mail has arrived at its destination. - * 'FAILURE' will arrive if an error occurred during delivery. - * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual - * delivery's outcome (success or failure) is not yet decided. - * - * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY - */ - public $dsn = ''; - - /** - * SMTP class debug output mode. - * Debug output level. - * Options: - * @see SMTP::DEBUG_OFF: No output - * @see SMTP::DEBUG_CLIENT: Client messages - * @see SMTP::DEBUG_SERVER: Client and server messages - * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status - * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed - * - * @see SMTP::$do_debug - * - * @var int - */ - public $SMTPDebug = 0; - - /** - * How to handle debug output. - * Options: - * * `echo` Output plain-text as-is, appropriate for CLI - * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output - * * `error_log` Output to error log as configured in php.ini - * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise. - * Alternatively, you can provide a callable expecting two params: a message string and the debug level: - * - * ```php - * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; - * ``` - * - * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` - * level output is used: - * - * ```php - * $mail->Debugoutput = new myPsr3Logger; - * ``` - * - * @see SMTP::$Debugoutput - * - * @var string|callable|\Psr\Log\LoggerInterface - */ - public $Debugoutput = 'echo'; - - /** - * Whether to keep the SMTP connection open after each message. - * If this is set to true then the connection will remain open after a send, - * and closing the connection will require an explicit call to smtpClose(). - * It's a good idea to use this if you are sending multiple messages as it reduces overhead. - * See the mailing list example for how to use it. - * - * @var bool - */ - public $SMTPKeepAlive = false; - - /** - * Whether to split multiple to addresses into multiple messages - * or send them all in one message. - * Only supported in `mail` and `sendmail` transports, not in SMTP. - * - * @var bool - * - * @deprecated 6.0.0 PHPMailer isn't a mailing list manager! - */ - public $SingleTo = false; - - /** - * Storage for addresses when SingleTo is enabled. - * - * @var array - */ - protected $SingleToArray = []; - - /** - * Whether to generate VERP addresses on send. - * Only applicable when sending via SMTP. - * - * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Postfix VERP info - * - * @var bool - */ - public $do_verp = false; - - /** - * Whether to allow sending messages with an empty body. - * - * @var bool - */ - public $AllowEmpty = false; - - /** - * DKIM selector. - * - * @var string - */ - public $DKIM_selector = ''; - - /** - * DKIM Identity. - * Usually the email address used as the source of the email. - * - * @var string - */ - public $DKIM_identity = ''; - - /** - * DKIM passphrase. - * Used if your key is encrypted. - * - * @var string - */ - public $DKIM_passphrase = ''; - - /** - * DKIM signing domain name. - * - * @example 'example.com' - * - * @var string - */ - public $DKIM_domain = ''; - - /** - * DKIM Copy header field values for diagnostic use. - * - * @var bool - */ - public $DKIM_copyHeaderFields = true; - - /** - * DKIM Extra signing headers. - * - * @example ['List-Unsubscribe', 'List-Help'] - * - * @var array - */ - public $DKIM_extraHeaders = []; - - /** - * DKIM private key file path. - * - * @var string - */ - public $DKIM_private = ''; - - /** - * DKIM private key string. - * - * If set, takes precedence over `$DKIM_private`. - * - * @var string - */ - public $DKIM_private_string = ''; - - /** - * Callback Action function name. - * - * The function that handles the result of the send email action. - * It is called out by send() for each email sent. - * - * Value can be any php callable: http://www.php.net/is_callable - * - * Parameters: - * bool $result result of the send action - * array $to email addresses of the recipients - * array $cc cc email addresses - * array $bcc bcc email addresses - * string $subject the subject - * string $body the email body - * string $from email address of sender - * string $extra extra information of possible use - * "smtp_transaction_id' => last smtp transaction id - * - * @var string - */ - public $action_function = ''; - - /** - * What to put in the X-Mailer header. - * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use. - * - * @var string|null - */ - public $XMailer = ''; - - /** - * Which validator to use by default when validating email addresses. - * May be a callable to inject your own validator, but there are several built-in validators. - * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option. - * - * @see PHPMailer::validateAddress() - * - * @var string|callable - */ - public static $validator = 'php'; - - /** - * An instance of the SMTP sender class. - * - * @var SMTP - */ - protected $smtp; - - /** - * The array of 'to' names and addresses. - * - * @var array - */ - protected $to = []; - - /** - * The array of 'cc' names and addresses. - * - * @var array - */ - protected $cc = []; - - /** - * The array of 'bcc' names and addresses. - * - * @var array - */ - protected $bcc = []; - - /** - * The array of reply-to names and addresses. - * - * @var array - */ - protected $ReplyTo = []; - - /** - * An array of all kinds of addresses. - * Includes all of $to, $cc, $bcc. - * - * @see PHPMailer::$to - * @see PHPMailer::$cc - * @see PHPMailer::$bcc - * - * @var array - */ - protected $all_recipients = []; - - /** - * An array of names and addresses queued for validation. - * In send(), valid and non duplicate entries are moved to $all_recipients - * and one of $to, $cc, or $bcc. - * This array is used only for addresses with IDN. - * - * @see PHPMailer::$to - * @see PHPMailer::$cc - * @see PHPMailer::$bcc - * @see PHPMailer::$all_recipients - * - * @var array - */ - protected $RecipientsQueue = []; - - /** - * An array of reply-to names and addresses queued for validation. - * In send(), valid and non duplicate entries are moved to $ReplyTo. - * This array is used only for addresses with IDN. - * - * @see PHPMailer::$ReplyTo - * - * @var array - */ - protected $ReplyToQueue = []; - - /** - * The array of attachments. - * - * @var array - */ - protected $attachment = []; - - /** - * The array of custom headers. - * - * @var array - */ - protected $CustomHeader = []; - - /** - * The most recent Message-ID (including angular brackets). - * - * @var string - */ - protected $lastMessageID = ''; - - /** - * The message's MIME type. - * - * @var string - */ - protected $message_type = ''; - - /** - * The array of MIME boundary strings. - * - * @var array - */ - protected $boundary = []; - - /** - * The array of available text strings for the current language. - * - * @var array - */ - protected $language = []; - - /** - * The number of errors encountered. - * - * @var int - */ - protected $error_count = 0; - - /** - * The S/MIME certificate file path. - * - * @var string - */ - protected $sign_cert_file = ''; - - /** - * The S/MIME key file path. - * - * @var string - */ - protected $sign_key_file = ''; - - /** - * The optional S/MIME extra certificates ("CA Chain") file path. - * - * @var string - */ - protected $sign_extracerts_file = ''; - - /** - * The S/MIME password for the key. - * Used only if the key is encrypted. - * - * @var string - */ - protected $sign_key_pass = ''; - - /** - * Whether to throw exceptions for errors. - * - * @var bool - */ - protected $exceptions = false; - - /** - * Unique ID used for message ID and boundaries. - * - * @var string - */ - protected $uniqueid = ''; - - /** - * The PHPMailer Version number. - * - * @var string - */ - const VERSION = '6.6.0'; - - /** - * Error severity: message only, continue processing. - * - * @var int - */ - const STOP_MESSAGE = 0; - - /** - * Error severity: message, likely ok to continue processing. - * - * @var int - */ - const STOP_CONTINUE = 1; - - /** - * Error severity: message, plus full stop, critical error reached. - * - * @var int - */ - const STOP_CRITICAL = 2; - - /** - * The SMTP standard CRLF line break. - * If you want to change line break format, change static::$LE, not this. - */ - const CRLF = "\r\n"; - - /** - * "Folding White Space" a white space string used for line folding. - */ - const FWS = ' '; - - /** - * SMTP RFC standard line ending; Carriage Return, Line Feed. - * - * @var string - */ - protected static $LE = self::CRLF; - - /** - * The maximum line length supported by mail(). - * - * Background: mail() will sometimes corrupt messages - * with headers headers longer than 65 chars, see #818. - * - * @var int - */ - const MAIL_MAX_LINE_LENGTH = 63; - - /** - * The maximum line length allowed by RFC 2822 section 2.1.1. - * - * @var int - */ - const MAX_LINE_LENGTH = 998; - - /** - * The lower maximum line length allowed by RFC 2822 section 2.1.1. - * This length does NOT include the line break - * 76 means that lines will be 77 or 78 chars depending on whether - * the line break format is LF or CRLF; both are valid. - * - * @var int - */ - const STD_LINE_LENGTH = 76; - - /** - * Constructor. - * - * @param bool $exceptions Should we throw external exceptions? - */ - public function __construct($exceptions = null) - { - if (null !== $exceptions) { - $this->exceptions = (bool) $exceptions; - } - //Pick an appropriate debug output format automatically - $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); - } - - /** - * Destructor. - */ - public function __destruct() - { - //Close any open SMTP connection nicely - $this->smtpClose(); - } - - /** - * Call mail() in a safe_mode-aware fashion. - * Also, unless sendmail_path points to sendmail (or something that - * claims to be sendmail), don't pass params (not a perfect fix, - * but it will do). - * - * @param string $to To - * @param string $subject Subject - * @param string $body Message Body - * @param string $header Additional Header(s) - * @param string|null $params Params - * - * @return bool - */ - private function mailPassthru($to, $subject, $body, $header, $params) - { - //Check overloading of mail function to avoid double-encoding - if (ini_get('mbstring.func_overload') & 1) { - $subject = $this->secureHeader($subject); - } else { - $subject = $this->encodeHeader($this->secureHeader($subject)); - } - //Calling mail() with null params breaks - $this->edebug('Sending with mail()'); - $this->edebug('Sendmail path: ' . ini_get('sendmail_path')); - $this->edebug("Envelope sender: {$this->Sender}"); - $this->edebug("To: {$to}"); - $this->edebug("Subject: {$subject}"); - $this->edebug("Headers: {$header}"); - if (!$this->UseSendmailOptions || null === $params) { - $result = @mail($to, $subject, $body, $header); - } else { - $this->edebug("Additional params: {$params}"); - $result = @mail($to, $subject, $body, $header, $params); - } - $this->edebug('Result: ' . ($result ? 'true' : 'false')); - return $result; - } - - /** - * Output debugging info via a user-defined method. - * Only generates output if debug output is enabled. - * - * @see PHPMailer::$Debugoutput - * @see PHPMailer::$SMTPDebug - * - * @param string $str - */ - protected function edebug($str) - { - if ($this->SMTPDebug <= 0) { - return; - } - //Is this a PSR-3 logger? - if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); - - return; - } - //Avoid clash with built-in function names - if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { - call_user_func($this->Debugoutput, $str, $this->SMTPDebug); - - return; - } - switch ($this->Debugoutput) { - case 'error_log': - //Don't output, just log - /** @noinspection ForgottenDebugOutputInspection */ - error_log($str); - break; - case 'html': - //Cleans up output a bit for a better looking, HTML-safe output - echo htmlentities( - preg_replace('/[\r\n]+/', '', $str), - ENT_QUOTES, - 'UTF-8' - ), "
\n"; - break; - case 'echo': - default: - //Normalize line breaks - $str = preg_replace('/\r\n|\r/m', "\n", $str); - echo gmdate('Y-m-d H:i:s'), - "\t", - //Trim trailing space - trim( - //Indent for readability, except for trailing break - str_replace( - "\n", - "\n \t ", - trim($str) - ) - ), - "\n"; - } - } - - /** - * Sets message type to HTML or plain. - * - * @param bool $isHtml True for HTML mode - */ - public function isHTML($isHtml = true) - { - if ($isHtml) { - $this->ContentType = static::CONTENT_TYPE_TEXT_HTML; - } else { - $this->ContentType = static::CONTENT_TYPE_PLAINTEXT; - } - } - - /** - * Send messages using SMTP. - */ - public function isSMTP() - { - $this->Mailer = 'smtp'; - } - - /** - * Send messages using PHP's mail() function. - */ - public function isMail() - { - $this->Mailer = 'mail'; - } - - /** - * Send messages using $Sendmail. - */ - public function isSendmail() - { - $ini_sendmail_path = ini_get('sendmail_path'); - - if (false === stripos($ini_sendmail_path, 'sendmail')) { - $this->Sendmail = '/usr/sbin/sendmail'; - } else { - $this->Sendmail = $ini_sendmail_path; - } - $this->Mailer = 'sendmail'; - } - - /** - * Send messages using qmail. - */ - public function isQmail() - { - $ini_sendmail_path = ini_get('sendmail_path'); - - if (false === stripos($ini_sendmail_path, 'qmail')) { - $this->Sendmail = '/var/qmail/bin/qmail-inject'; - } else { - $this->Sendmail = $ini_sendmail_path; - } - $this->Mailer = 'qmail'; - } - - /** - * Add a "To" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addAddress($address, $name = '') - { - return $this->addOrEnqueueAnAddress('to', $address, $name); - } - - /** - * Add a "CC" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addCC($address, $name = '') - { - return $this->addOrEnqueueAnAddress('cc', $address, $name); - } - - /** - * Add a "BCC" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addBCC($address, $name = '') - { - return $this->addOrEnqueueAnAddress('bcc', $address, $name); - } - - /** - * Add a "Reply-To" address. - * - * @param string $address The email address to reply to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addReplyTo($address, $name = '') - { - return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); - } - - /** - * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer - * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still - * be modified after calling this function), addition of such addresses is delayed until send(). - * Addresses that have been added already return false, but do not throw exceptions. - * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' - * @param string $address The email address to send, resp. to reply to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - protected function addOrEnqueueAnAddress($kind, $address, $name) - { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - $pos = strrpos($address, '@'); - if (false === $pos) { - //At-sign is missing. - $error_message = sprintf( - '%s (%s): %s', - $this->lang('invalid_address'), - $kind, - $address - ); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - $params = [$kind, $address, $name]; - //Enqueue addresses with IDN until we know the PHPMailer::$CharSet. - if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { - if ('Reply-To' !== $kind) { - if (!array_key_exists($address, $this->RecipientsQueue)) { - $this->RecipientsQueue[$address] = $params; - - return true; - } - } elseif (!array_key_exists($address, $this->ReplyToQueue)) { - $this->ReplyToQueue[$address] = $params; - - return true; - } - - return false; - } - - //Immediately add standard addresses without IDN. - return call_user_func_array([$this, 'addAnAddress'], $params); - } - - /** - * Add an address to one of the recipient arrays or to the ReplyTo array. - * Addresses that have been added already return false, but do not throw exceptions. - * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' - * @param string $address The email address to send, resp. to reply to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - protected function addAnAddress($kind, $address, $name = '') - { - if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { - $error_message = sprintf( - '%s: %s', - $this->lang('Invalid recipient kind'), - $kind - ); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - if (!static::validateAddress($address)) { - $error_message = sprintf( - '%s (%s): %s', - $this->lang('invalid_address'), - $kind, - $address - ); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - if ('Reply-To' !== $kind) { - if (!array_key_exists(strtolower($address), $this->all_recipients)) { - $this->{$kind}[] = [$address, $name]; - $this->all_recipients[strtolower($address)] = true; - - return true; - } - } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) { - $this->ReplyTo[strtolower($address)] = [$address, $name]; - - return true; - } - - return false; - } - - /** - * Parse and validate a string containing one or more RFC822-style comma-separated email addresses - * of the form "display name
" into an array of name/address pairs. - * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. - * Note that quotes in the name part are removed. - * - * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation - * - * @param string $addrstr The address list string - * @param bool $useimap Whether to use the IMAP extension to parse the list - * @param string $charset The charset to use when decoding the address list string. - * - * @return array - */ - public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591) - { - $addresses = []; - if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { - //Use this built-in parser if it's available - $list = imap_rfc822_parse_adrlist($addrstr, ''); - // Clear any potential IMAP errors to get rid of notices being thrown at end of script. - imap_errors(); - foreach ($list as $address) { - if ( - '.SYNTAX-ERROR.' !== $address->host && - static::validateAddress($address->mailbox . '@' . $address->host) - ) { - //Decode the name part if it's present and encoded - if ( - property_exists($address, 'personal') && - //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled - defined('MB_CASE_UPPER') && - preg_match('/^=\?.*\?=$/s', $address->personal) - ) { - $origCharset = mb_internal_encoding(); - mb_internal_encoding($charset); - //Undo any RFC2047-encoded spaces-as-underscores - $address->personal = str_replace('_', '=20', $address->personal); - //Decode the name - $address->personal = mb_decode_mimeheader($address->personal); - mb_internal_encoding($origCharset); - } - - $addresses[] = [ - 'name' => (property_exists($address, 'personal') ? $address->personal : ''), - 'address' => $address->mailbox . '@' . $address->host, - ]; - } - } - } else { - //Use this simpler parser - $list = explode(',', $addrstr); - foreach ($list as $address) { - $address = trim($address); - //Is there a separate name part? - if (strpos($address, '<') === false) { - //No separate name, just use the whole thing - if (static::validateAddress($address)) { - $addresses[] = [ - 'name' => '', - 'address' => $address, - ]; - } - } else { - list($name, $email) = explode('<', $address); - $email = trim(str_replace('>', '', $email)); - $name = trim($name); - if (static::validateAddress($email)) { - //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled - //If this name is encoded, decode it - if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) { - $origCharset = mb_internal_encoding(); - mb_internal_encoding($charset); - //Undo any RFC2047-encoded spaces-as-underscores - $name = str_replace('_', '=20', $name); - //Decode the name - $name = mb_decode_mimeheader($name); - mb_internal_encoding($origCharset); - } - $addresses[] = [ - //Remove any surrounding quotes and spaces from the name - 'name' => trim($name, '\'" '), - 'address' => $email, - ]; - } - } - } - } - - return $addresses; - } - - /** - * Set the From and FromName properties. - * - * @param string $address - * @param string $name - * @param bool $auto Whether to also set the Sender address, defaults to true - * - * @throws Exception - * - * @return bool - */ - public function setFrom($address, $name = '', $auto = true) - { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - //Don't validate now addresses with IDN. Will be done in send(). - $pos = strrpos($address, '@'); - if ( - (false === $pos) - || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported()) - && !static::validateAddress($address)) - ) { - $error_message = sprintf( - '%s (From): %s', - $this->lang('invalid_address'), - $address - ); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - $this->From = $address; - $this->FromName = $name; - if ($auto && empty($this->Sender)) { - $this->Sender = $address; - } - - return true; - } - - /** - * Return the Message-ID header of the last email. - * Technically this is the value from the last time the headers were created, - * but it's also the message ID of the last sent message except in - * pathological cases. - * - * @return string - */ - public function getLastMessageID() - { - return $this->lastMessageID; - } - - /** - * Check that a string looks like an email address. - * Validation patterns supported: - * * `auto` Pick best pattern automatically; - * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0; - * * `pcre` Use old PCRE implementation; - * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; - * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. - * * `noregex` Don't use a regex: super fast, really dumb. - * Alternatively you may pass in a callable to inject your own validator, for example: - * - * ```php - * PHPMailer::validateAddress('user@example.com', function($address) { - * return (strpos($address, '@') !== false); - * }); - * ``` - * - * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. - * - * @param string $address The email address to check - * @param string|callable $patternselect Which pattern to use - * - * @return bool - */ - public static function validateAddress($address, $patternselect = null) - { - if (null === $patternselect) { - $patternselect = static::$validator; - } - //Don't allow strings as callables, see SECURITY.md and CVE-2021-3603 - if (is_callable($patternselect) && !is_string($patternselect)) { - return call_user_func($patternselect, $address); - } - //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 - if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) { - return false; - } - switch ($patternselect) { - case 'pcre': //Kept for BC - case 'pcre8': - /* - * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL - * is based. - * In addition to the addresses allowed by filter_var, also permits: - * * dotless domains: `a@b` - * * comments: `1234 @ local(blah) .machine .example` - * * quoted elements: `'"test blah"@example.org'` - * * numeric TLDs: `a@b.123` - * * unbracketed IPv4 literals: `a@192.168.0.1` - * * IPv6 literals: 'first.last@[IPv6:a1::]' - * Not all of these will necessarily work for sending! - * - * @see http://squiloople.com/2009/12/20/email-address-validation/ - * @copyright 2009-2010 Michael Rushton - * Feel free to use and redistribute this code. But please keep this copyright notice. - */ - return (bool) preg_match( - '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . - '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . - '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . - '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . - '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . - '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . - '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . - '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . - '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', - $address - ); - case 'html5': - /* - * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. - * - * @see https://html.spec.whatwg.org/#e-mail-state-(type=email) - */ - return (bool) preg_match( - '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . - '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', - $address - ); - case 'php': - default: - return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; - } - } - - /** - * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the - * `intl` and `mbstring` PHP extensions. - * - * @return bool `true` if required functions for IDN support are present - */ - public static function idnSupported() - { - return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding'); - } - - /** - * Converts IDN in given email address to its ASCII form, also known as punycode, if possible. - * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet. - * This function silently returns unmodified address if: - * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form) - * - Conversion to punycode is impossible (e.g. required PHP functions are not available) - * or fails for any reason (e.g. domain contains characters not allowed in an IDN). - * - * @see PHPMailer::$CharSet - * - * @param string $address The email address to convert - * - * @return string The encoded address in ASCII form - */ - public function punyencodeAddress($address) - { - //Verify we have required functions, CharSet, and at-sign. - $pos = strrpos($address, '@'); - if ( - !empty($this->CharSet) && - false !== $pos && - static::idnSupported() - ) { - $domain = substr($address, ++$pos); - //Verify CharSet string is a valid one, and domain properly encoded in this CharSet. - if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) { - //Convert the domain from whatever charset it's in to UTF-8 - $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet); - //Ignore IDE complaints about this line - method signature changed in PHP 5.4 - $errorcode = 0; - if (defined('INTL_IDNA_VARIANT_UTS46')) { - //Use the current punycode standard (appeared in PHP 7.2) - $punycode = idn_to_ascii( - $domain, - \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI | - \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII, - \INTL_IDNA_VARIANT_UTS46 - ); - } elseif (defined('INTL_IDNA_VARIANT_2003')) { - //Fall back to this old, deprecated/removed encoding - $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003); - } else { - //Fall back to a default we don't know about - $punycode = idn_to_ascii($domain, $errorcode); - } - if (false !== $punycode) { - return substr($address, 0, $pos) . $punycode; - } - } - } - - return $address; - } - - /** - * Create a message and send it. - * Uses the sending method specified by $Mailer. - * - * @throws Exception - * - * @return bool false on error - See the ErrorInfo property for details of the error - */ - public function send() - { - try { - if (!$this->preSend()) { - return false; - } - - return $this->postSend(); - } catch (Exception $exc) { - $this->mailHeader = ''; - $this->setError($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - - return false; - } - } - - /** - * Prepare a message for sending. - * - * @throws Exception - * - * @return bool - */ - public function preSend() - { - if ( - 'smtp' === $this->Mailer - || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0)) - ) { - //SMTP mandates RFC-compliant line endings - //and it's also used with mail() on Windows - static::setLE(self::CRLF); - } else { - //Maintain backward compatibility with legacy Linux command line mailers - static::setLE(PHP_EOL); - } - //Check for buggy PHP versions that add a header with an incorrect line break - if ( - 'mail' === $this->Mailer - && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017) - || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103)) - && ini_get('mail.add_x_header') === '1' - && stripos(PHP_OS, 'WIN') === 0 - ) { - trigger_error($this->lang('buggy_php'), E_USER_WARNING); - } - - try { - $this->error_count = 0; //Reset errors - $this->mailHeader = ''; - - //Dequeue recipient and Reply-To addresses with IDN - foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { - $params[1] = $this->punyencodeAddress($params[1]); - call_user_func_array([$this, 'addAnAddress'], $params); - } - if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { - throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); - } - - //Validate From, Sender, and ConfirmReadingTo addresses - foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { - $this->$address_kind = trim($this->$address_kind); - if (empty($this->$address_kind)) { - continue; - } - $this->$address_kind = $this->punyencodeAddress($this->$address_kind); - if (!static::validateAddress($this->$address_kind)) { - $error_message = sprintf( - '%s (%s): %s', - $this->lang('invalid_address'), - $address_kind, - $this->$address_kind - ); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - } - - //Set whether the message is multipart/alternative - if ($this->alternativeExists()) { - $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE; - } - - $this->setMessageType(); - //Refuse to send an empty message unless we are specifically allowing it - if (!$this->AllowEmpty && empty($this->Body)) { - throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); - } - - //Trim subject consistently - $this->Subject = trim($this->Subject); - //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) - $this->MIMEHeader = ''; - $this->MIMEBody = $this->createBody(); - //createBody may have added some headers, so retain them - $tempheaders = $this->MIMEHeader; - $this->MIMEHeader = $this->createHeader(); - $this->MIMEHeader .= $tempheaders; - - //To capture the complete message when using mail(), create - //an extra header list which createHeader() doesn't fold in - if ('mail' === $this->Mailer) { - if (count($this->to) > 0) { - $this->mailHeader .= $this->addrAppend('To', $this->to); - } else { - $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;'); - } - $this->mailHeader .= $this->headerLine( - 'Subject', - $this->encodeHeader($this->secureHeader($this->Subject)) - ); - } - - //Sign with DKIM if enabled - if ( - !empty($this->DKIM_domain) - && !empty($this->DKIM_selector) - && (!empty($this->DKIM_private_string) - || (!empty($this->DKIM_private) - && static::isPermittedPath($this->DKIM_private) - && file_exists($this->DKIM_private) - ) - ) - ) { - $header_dkim = $this->DKIM_Add( - $this->MIMEHeader . $this->mailHeader, - $this->encodeHeader($this->secureHeader($this->Subject)), - $this->MIMEBody - ); - $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE . - static::normalizeBreaks($header_dkim) . static::$LE; - } - - return true; - } catch (Exception $exc) { - $this->setError($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - - return false; - } - } - - /** - * Actually send a message via the selected mechanism. - * - * @throws Exception - * - * @return bool - */ - public function postSend() - { - try { - //Choose the mailer and send through it - switch ($this->Mailer) { - case 'sendmail': - case 'qmail': - return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody); - case 'smtp': - return $this->smtpSend($this->MIMEHeader, $this->MIMEBody); - case 'mail': - return $this->mailSend($this->MIMEHeader, $this->MIMEBody); - default: - $sendMethod = $this->Mailer . 'Send'; - if (method_exists($this, $sendMethod)) { - return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); - } - - return $this->mailSend($this->MIMEHeader, $this->MIMEBody); - } - } catch (Exception $exc) { - if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) { - $this->smtp->reset(); - } - $this->setError($exc->getMessage()); - $this->edebug($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - } - - return false; - } - - /** - * Send mail using the $Sendmail program. - * - * @see PHPMailer::$Sendmail - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function sendmailSend($header, $body) - { - if ($this->Mailer === 'qmail') { - $this->edebug('Sending with qmail'); - } else { - $this->edebug('Sending with sendmail'); - } - $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; - //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver - //A space after `-f` is optional, but there is a long history of its presence - //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html - //Example problem: https://www.drupal.org/node/1057954 - - //PHP 5.6 workaround - $sendmail_from_value = ini_get('sendmail_from'); - if (empty($this->Sender) && !empty($sendmail_from_value)) { - //PHP config has a sender address we can use - $this->Sender = ini_get('sendmail_from'); - } - //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { - if ($this->Mailer === 'qmail') { - $sendmailFmt = '%s -f%s'; - } else { - $sendmailFmt = '%s -oi -f%s -t'; - } - } else { - //allow sendmail to choose a default envelope sender. It may - //seem preferable to force it to use the From header as with - //SMTP, but that introduces new problems (see - //), and - //it has historically worked this way. - $sendmailFmt = '%s -oi -t'; - } - - $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); - $this->edebug('Sendmail path: ' . $this->Sendmail); - $this->edebug('Sendmail command: ' . $sendmail); - $this->edebug('Envelope sender: ' . $this->Sender); - $this->edebug("Headers: {$header}"); - - if ($this->SingleTo) { - foreach ($this->SingleToArray as $toAddr) { - $mail = @popen($sendmail, 'w'); - if (!$mail) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - $this->edebug("To: {$toAddr}"); - fwrite($mail, 'To: ' . $toAddr . "\n"); - fwrite($mail, $header); - fwrite($mail, $body); - $result = pclose($mail); - $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); - $this->doCallback( - ($result === 0), - [[$addrinfo['address'], $addrinfo['name']]], - $this->cc, - $this->bcc, - $this->Subject, - $body, - $this->From, - [] - ); - $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); - if (0 !== $result) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - } else { - $mail = @popen($sendmail, 'w'); - if (!$mail) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fwrite($mail, $header); - fwrite($mail, $body); - $result = pclose($mail); - $this->doCallback( - ($result === 0), - $this->to, - $this->cc, - $this->bcc, - $this->Subject, - $body, - $this->From, - [] - ); - $this->edebug("Result: " . ($result === 0 ? 'true' : 'false')); - if (0 !== $result) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - - return true; - } - - /** - * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters. - * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. - * - * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report - * - * @param string $string The string to be validated - * - * @return bool - */ - protected static function isShellSafe($string) - { - //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg, - //but some hosting providers disable it, creating a security problem that we don't want to have to deal with, - //so we don't. - if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) { - return false; - } - - if ( - escapeshellcmd($string) !== $string - || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) - ) { - return false; - } - - $length = strlen($string); - - for ($i = 0; $i < $length; ++$i) { - $c = $string[$i]; - - //All other characters have a special meaning in at least one common shell, including = and +. - //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. - //Note that this does permit non-Latin alphanumeric characters based on the current locale. - if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { - return false; - } - } - - return true; - } - - /** - * Check whether a file path is of a permitted type. - * Used to reject URLs and phar files from functions that access local file paths, - * such as addAttachment. - * - * @param string $path A relative or absolute path to a file - * - * @return bool - */ - protected static function isPermittedPath($path) - { - //Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1 - return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path); - } - - /** - * Check whether a file path is safe, accessible, and readable. - * - * @param string $path A relative or absolute path to a file - * - * @return bool - */ - protected static function fileIsAccessible($path) - { - if (!static::isPermittedPath($path)) { - return false; - } - $readable = file_exists($path); - //If not a UNC path (expected to start with \\), check read permission, see #2069 - if (strpos($path, '\\\\') !== 0) { - $readable = $readable && is_readable($path); - } - return $readable; - } - - /** - * Send mail using the PHP mail() function. - * - * @see http://www.php.net/manual/en/book.mail.php - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function mailSend($header, $body) - { - $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; - - $toArr = []; - foreach ($this->to as $toaddr) { - $toArr[] = $this->addrFormat($toaddr); - } - $to = implode(', ', $toArr); - - $params = null; - //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver - //A space after `-f` is optional, but there is a long history of its presence - //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html - //Example problem: https://www.drupal.org/node/1057954 - //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - - //PHP 5.6 workaround - $sendmail_from_value = ini_get('sendmail_from'); - if (empty($this->Sender) && !empty($sendmail_from_value)) { - //PHP config has a sender address we can use - $this->Sender = ini_get('sendmail_from'); - } - if (!empty($this->Sender) && static::validateAddress($this->Sender)) { - if (self::isShellSafe($this->Sender)) { - $params = sprintf('-f%s', $this->Sender); - } - $old_from = ini_get('sendmail_from'); - ini_set('sendmail_from', $this->Sender); - } - $result = false; - if ($this->SingleTo && count($toArr) > 1) { - foreach ($toArr as $toAddr) { - $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); - $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet); - $this->doCallback( - $result, - [[$addrinfo['address'], $addrinfo['name']]], - $this->cc, - $this->bcc, - $this->Subject, - $body, - $this->From, - [] - ); - } - } else { - $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); - $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); - } - if (isset($old_from)) { - ini_set('sendmail_from', $old_from); - } - if (!$result) { - throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL); - } - - return true; - } - - /** - * Get an instance to use for SMTP operations. - * Override this function to load your own SMTP implementation, - * or set one with setSMTPInstance. - * - * @return SMTP - */ - public function getSMTPInstance() - { - if (!is_object($this->smtp)) { - $this->smtp = new SMTP(); - } - - return $this->smtp; - } - - /** - * Provide an instance to use for SMTP operations. - * - * @return SMTP - */ - public function setSMTPInstance(SMTP $smtp) - { - $this->smtp = $smtp; - - return $this->smtp; - } - - /** - * Send mail via SMTP. - * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. - * - * @see PHPMailer::setSMTPInstance() to use a different class. - * - * @uses \PHPMailer\PHPMailer\SMTP - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function smtpSend($header, $body) - { - $header = static::stripTrailingWSP($header) . static::$LE . static::$LE; - $bad_rcpt = []; - if (!$this->smtpConnect($this->SMTPOptions)) { - throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); - } - //Sender already validated in preSend() - if ('' === $this->Sender) { - $smtp_from = $this->From; - } else { - $smtp_from = $this->Sender; - } - if (!$this->smtp->mail($smtp_from)) { - $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); - throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); - } - - $callbacks = []; - //Attempt to send to all recipients - foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { - foreach ($togroup as $to) { - if (!$this->smtp->recipient($to[0], $this->dsn)) { - $error = $this->smtp->getError(); - $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; - $isSent = false; - } else { - $isSent = true; - } - - $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]]; - } - } - - //Only send the DATA command if we have viable recipients - if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { - throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); - } - - $smtp_transaction_id = $this->smtp->getLastTransactionID(); - - if ($this->SMTPKeepAlive) { - $this->smtp->reset(); - } else { - $this->smtp->quit(); - $this->smtp->close(); - } - - foreach ($callbacks as $cb) { - $this->doCallback( - $cb['issent'], - [[$cb['to'], $cb['name']]], - [], - [], - $this->Subject, - $body, - $this->From, - ['smtp_transaction_id' => $smtp_transaction_id] - ); - } - - //Create error message for any bad addresses - if (count($bad_rcpt) > 0) { - $errstr = ''; - foreach ($bad_rcpt as $bad) { - $errstr .= $bad['to'] . ': ' . $bad['error']; - } - throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE); - } - - return true; - } - - /** - * Initiate a connection to an SMTP server. - * Returns false if the operation failed. - * - * @param array $options An array of options compatible with stream_context_create() - * - * @throws Exception - * - * @uses \PHPMailer\PHPMailer\SMTP - * - * @return bool - */ - public function smtpConnect($options = null) - { - if (null === $this->smtp) { - $this->smtp = $this->getSMTPInstance(); - } - - //If no options are provided, use whatever is set in the instance - if (null === $options) { - $options = $this->SMTPOptions; - } - - //Already connected? - if ($this->smtp->connected()) { - return true; - } - - $this->smtp->setTimeout($this->Timeout); - $this->smtp->setDebugLevel($this->SMTPDebug); - $this->smtp->setDebugOutput($this->Debugoutput); - $this->smtp->setVerp($this->do_verp); - $hosts = explode(';', $this->Host); - $lastexception = null; - - foreach ($hosts as $hostentry) { - $hostinfo = []; - if ( - !preg_match( - '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/', - trim($hostentry), - $hostinfo - ) - ) { - $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); - //Not a valid host entry - continue; - } - //$hostinfo[1]: optional ssl or tls prefix - //$hostinfo[2]: the hostname - //$hostinfo[3]: optional port number - //The host string prefix can temporarily override the current setting for SMTPSecure - //If it's not specified, the default value is used - - //Check the host name is a valid name or IP address before trying to use it - if (!static::isValidHost($hostinfo[2])) { - $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]); - continue; - } - $prefix = ''; - $secure = $this->SMTPSecure; - $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); - if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { - $prefix = 'ssl://'; - $tls = false; //Can't have SSL and TLS at the same time - $secure = static::ENCRYPTION_SMTPS; - } elseif ('tls' === $hostinfo[1]) { - $tls = true; - //TLS doesn't use a prefix - $secure = static::ENCRYPTION_STARTTLS; - } - //Do we need the OpenSSL extension? - $sslext = defined('OPENSSL_ALGO_SHA256'); - if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) { - //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled - if (!$sslext) { - throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); - } - } - $host = $hostinfo[2]; - $port = $this->Port; - if ( - array_key_exists(3, $hostinfo) && - is_numeric($hostinfo[3]) && - $hostinfo[3] > 0 && - $hostinfo[3] < 65536 - ) { - $port = (int) $hostinfo[3]; - } - if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { - try { - if ($this->Helo) { - $hello = $this->Helo; - } else { - $hello = $this->serverHostname(); - } - $this->smtp->hello($hello); - //Automatically enable TLS encryption if: - //* it's not disabled - //* we have openssl extension - //* we are not already using SSL - //* the server offers STARTTLS - if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { - $tls = true; - } - if ($tls) { - if (!$this->smtp->startTLS()) { - $message = $this->getSmtpErrorMessage('connect_host'); - throw new Exception($message); - } - //We must resend EHLO after TLS negotiation - $this->smtp->hello($hello); - } - if ( - $this->SMTPAuth && !$this->smtp->authenticate( - $this->Username, - $this->Password, - $this->AuthType, - $this->oauth - ) - ) { - throw new Exception($this->lang('authenticate')); - } - - return true; - } catch (Exception $exc) { - $lastexception = $exc; - $this->edebug($exc->getMessage()); - //We must have connected, but then failed TLS or Auth, so close connection nicely - $this->smtp->quit(); - } - } - } - //If we get here, all connection attempts have failed, so close connection hard - $this->smtp->close(); - //As we've caught all exceptions, just report whatever the last one was - if ($this->exceptions && null !== $lastexception) { - throw $lastexception; - } elseif ($this->exceptions) { - // no exception was thrown, likely $this->smtp->connect() failed - $message = $this->getSmtpErrorMessage('connect_host'); - throw new Exception($message); - } - - return false; - } - - /** - * Close the active SMTP session if one exists. - */ - public function smtpClose() - { - if ((null !== $this->smtp) && $this->smtp->connected()) { - $this->smtp->quit(); - $this->smtp->close(); - } - } - - /** - * Set the language for error messages. - * The default language is English. - * - * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") - * Optionally, the language code can be enhanced with a 4-character - * script annotation and/or a 2-character country annotation. - * @param string $lang_path Path to the language file directory, with trailing separator (slash) - * Do not set this from user input! - * - * @return bool Returns true if the requested language was loaded, false otherwise. - */ - public function setLanguage($langcode = 'en', $lang_path = '') - { - //Backwards compatibility for renamed language codes - $renamed_langcodes = [ - 'br' => 'pt_br', - 'cz' => 'cs', - 'dk' => 'da', - 'no' => 'nb', - 'se' => 'sv', - 'rs' => 'sr', - 'tg' => 'tl', - 'am' => 'hy', - ]; - - if (array_key_exists($langcode, $renamed_langcodes)) { - $langcode = $renamed_langcodes[$langcode]; - } - - //Define full set of translatable strings in English - $PHPMAILER_LANG = [ - 'authenticate' => 'SMTP Error: Could not authenticate.', - 'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' . - ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . - ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', - 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', - 'data_not_accepted' => 'SMTP Error: data not accepted.', - 'empty_message' => 'Message body empty', - 'encoding' => 'Unknown encoding: ', - 'execute' => 'Could not execute: ', - 'extension_missing' => 'Extension missing: ', - 'file_access' => 'Could not access file: ', - 'file_open' => 'File Error: Could not open file: ', - 'from_failed' => 'The following From address failed: ', - 'instantiate' => 'Could not instantiate mail function.', - 'invalid_address' => 'Invalid address: ', - 'invalid_header' => 'Invalid header name or value', - 'invalid_hostentry' => 'Invalid hostentry: ', - 'invalid_host' => 'Invalid host: ', - 'mailer_not_supported' => ' mailer is not supported.', - 'provide_address' => 'You must provide at least one recipient email address.', - 'recipients_failed' => 'SMTP Error: The following recipients failed: ', - 'signing' => 'Signing Error: ', - 'smtp_code' => 'SMTP code: ', - 'smtp_code_ex' => 'Additional SMTP info: ', - 'smtp_connect_failed' => 'SMTP connect() failed.', - 'smtp_detail' => 'Detail: ', - 'smtp_error' => 'SMTP server error: ', - 'variable_set' => 'Cannot set or reset variable: ', - ]; - if (empty($lang_path)) { - //Calculate an absolute path so it can work if CWD is not here - $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; - } - - //Validate $langcode - $foundlang = true; - $langcode = strtolower($langcode); - if ( - !preg_match('/^(?P[a-z]{2})(?P