Update to 7.25.0

1. Added Mail Marketing Automation trigger tasks
2. Added Mail Marketing Groups Import, Export, Merge
3. Added Mail Marketing Subscribers to support paste import
4. Added Mail Marketing Template Import Export Duplicate
5. Added Mail server add timed automatic reply
6. Added HTTPS Protection function for Website (disables automatic HTTP to HTTPS redirection when enabled)
7. Optimize Website Interface Button Integration
8. Optimize the response speed of WP Toolkit interface
This commit is contained in:
Jack
2025-03-13 17:52:26 +08:00
parent a968a0d573
commit a24f2e23c6
1912 changed files with 173688 additions and 15257 deletions
+27 -27
View File
@@ -117,7 +117,7 @@ class main(databaseBase):
password = res['data_pwd']
if re.match(r"^\d+",data_name):
return public.returnMsg(False,'SQLServer databases cannot start with numbers!')
return public.returnMsg(False, public.lang("SQLServer databases cannot start with numbers!"))
reg_count = 0
regs = ['[a-z]','[A-Z]',r'\W','[0-9]']
@@ -125,7 +125,7 @@ class main(databaseBase):
if re.search(x,password): reg_count += 1
if len(password) < 8 or len(password) >128 or reg_count < 3 :
return public.returnMsg(False,'SQLServer password complexity policy does not match, should be 8-128 characters, and contain any 3 of them in upper case, lower case, digits, special symbols!')
return public.returnMsg(False, public.lang("SQLServer password complexity policy does not match, should be 8-128 characters, and contain any 3 of them in upper case, lower case, digits, special symbols!"))
try:
self.sid = int(args['sid'])
@@ -163,7 +163,7 @@ class main(databaseBase):
#添加入SQLITE
public.M('databases').add('pid,sid,db_type,name,username,password,accept,ps,addtime,type',(pid,self.sid,db_type,data_name,username,password,'127.0.0.1',args['ps'],addTime,dtype))
public.WriteLog("TYPE_DATABASE", 'DATABASE_ADD_SUCCESS',(data_name,))
return public.returnMsg(True,'ADD_SUCCESS')
return public.returnMsg(True, public.lang("Added successfully!"))
def DeleteDatabase(self,args):
"""
@@ -172,7 +172,7 @@ class main(databaseBase):
id = args['id']
find = public.M('databases').where("id=?",(id,)).field('id,pid,name,username,password,type,accept,ps,addtime,sid,db_type').find();
if not find: return public.returnMsg(False,'The specified database does not exist.')
if not find: return public.returnMsg(False, public.lang("The specified database does not exist."))
name = args['name']
username = find['username'];
@@ -190,7 +190,7 @@ class main(databaseBase):
#删除SQLITE
public.M('databases').where("id=?",(id,)).delete()
public.WriteLog("TYPE_DATABASE", 'DATABASE_DEL_SUCCESS',(name,))
return public.returnMsg(True, 'DEL_SUCCESS')
return public.returnMsg(True, public.lang("Delete successfully!"))
@@ -200,7 +200,7 @@ class main(databaseBase):
"""
id = args['id']
find = public.M('databases').where("id=?",(id,)).find()
if not find: return public.returnMsg(False,'Database does not exist!')
if not find: return public.returnMsg(False, public.lang("Database does not exist!"))
self.CheckBackupPath(args);
@@ -215,18 +215,18 @@ class main(databaseBase):
if isError != None: return isError
else:
#远程数据库
return public.returnMsg(False,'Operation failed. Remote database cannot be backed up.');
return public.returnMsg(False, public.lang("Operation failed. Remote database cannot be backed up."));
if not os.path.exists(backupName):
return public.returnMsg(False,'BACKUP_ERROR');
return public.returnMsg(False, public.lang("Backup error"));
public.M('backup').add('type,name,pid,filename,size,addtime',(1,fileName,id,backupName,0,time.strftime('%Y-%m-%d %X',time.localtime())))
public.WriteLog("TYPE_DATABASE", "DATABASE_BACKUP_SUCCESS",(find['name'],))
if os.path.getsize(backupName) < 2048:
return public.returnMsg(True, 'The backup file size is smaller than 2Kb. Check the backup integrity.')
return public.returnMsg(True, public.lang("The backup file size is smaller than 2Kb. Check the backup integrity."))
else:
return public.returnMsg(True, 'BACKUP_SUCCESS')
return public.returnMsg(True, public.lang("Backup Succeeded!"))
def DelBackup(self,args):
"""
@@ -242,13 +242,13 @@ class main(databaseBase):
file = get.file
find = public.M('databases').where("name=?",(name,)).find()
if not find: return public.returnMsg(False,'Database does not exist!')
if not find: return public.returnMsg(False, public.lang("Database does not exist!"))
tmp = file.split('.')
exts = ['sql','zip','bak']
ext = tmp[len(tmp) -1]
if ext not in exts:
return public.returnMsg(False, 'DATABASE_INPUT_ERR_FORMAT')
return public.returnMsg(False, public.lang("Select sql、gz、zip file!"))
backupPath = session['config']['backup_path'] + '/database'
@@ -264,7 +264,7 @@ class main(databaseBase):
file = dst_path + '/' + x
break
except :
return public.returnMsg(False,'The import failed because the file is not a valid ZIP file.')
return public.returnMsg(False, public.lang("The import failed because the file is not a valid ZIP file."))
mssql_obj = self.get_mssql_obj_by_sid(find['sid'])
data = mssql_obj.query("use %s ;select filename from sysfiles" % find['name'])
@@ -278,7 +278,7 @@ class main(databaseBase):
mssql_obj.execute("ALTER DATABASE %s SET ONLINE" % (find['name']))
public.WriteLog("TYPE_DATABASE", 'Description Succeeded in importing database [{}]'.format(name))
return public.returnMsg(True, 'DATABASE_INPUT_SUCCESS');
return public.returnMsg(True, public.lang("Successfully imported database!"));
#同步数据库到服务器
@@ -303,9 +303,9 @@ class main(databaseBase):
if result == 1: n +=1
if n == 1:
return public.returnMsg(True, 'Synchronization succeeded')
return public.returnMsg(True, public.lang("Synchronization succeeded"))
elif n == 0:
return public.returnMsg(False,'Sync failed')
return public.returnMsg(False, public.lang("Sync failed"))
return public.returnMsg(True,'DATABASE_SYNC_SUCCESS',(str(n),))
@@ -363,14 +363,14 @@ class main(databaseBase):
try:
if not newpassword:
return public.returnMsg(False, 'The password of database [' + username + '] cannot be empty.');
return public.returnMsg(False, public.lang("The password of database [' + username + '] cannot be empty."));
if len(re.search(r"^[\w@\.]+$", newpassword).groups()) > 0:
return public.returnMsg(False, 'The database password cannot be empty or contain special characters')
return public.returnMsg(False, public.lang("The database password cannot be empty or contain special characters"))
except :
return public.returnMsg(False, 'The database password cannot be empty or contain special characters')
return public.returnMsg(False, public.lang("The database password cannot be empty or contain special characters"))
find = public.M('databases').where("id=?",(id,)).field('id,pid,name,username,password,type,accept,ps,addtime,sid').find();
if not find: return public.returnMsg(False, 'Modify the failureThe specified database does not exist.');
if not find: return public.returnMsg(False, public.lang("Modify the failureThe specified database does not exist."));
mssql_obj = self.get_mssql_obj_by_sid(find['sid'])
mssql_obj.execute("EXEC sp_password NULL, '%s', '%s'" % (newpassword,username))
@@ -388,13 +388,13 @@ class main(databaseBase):
"""
mssql_obj = panelMssql.panelMssql()
ret = mssql_obj.get_sql_name()
if not ret : return public.returnMsg(False, 'The SQL Server is not installed or started. Install or start it first')
if not ret : return public.returnMsg(False, public.lang("The SQL Server is not installed or started. Install or start it first"))
sa_path = '{}/data/sa.pl'.format(public.get_panel_path())
if os.path.exists(sa_path):
password = public.readFile(sa_path)
return public.returnMsg(True,password)
return public.returnMsg(True,'')
return public.returnMsg(True, public.lang(""))
def set_root_pwd(self,args):
@@ -404,11 +404,11 @@ class main(databaseBase):
password = public.trim(args['password'])
try:
if not password:
return public.returnMsg(False, 'The password of database [' + username + '] cannot be empty.')
return public.returnMsg(False, public.lang("The password of database [' + username + '] cannot be empty."))
if len(re.search(r"^[\w@\.]+$", password).groups()) > 0:
return public.returnMsg(False, 'saThe password cannot be empty or have special symbols')
return public.returnMsg(False, public.lang("saThe password cannot be empty or have special symbols"))
except :
return public.returnMsg(False, 'saThe password cannot be empty or have special symbols')
return public.returnMsg(False, public.lang("saThe password cannot be empty or have special symbols"))
mssql_obj = panelMssql.panelMssql()
result = mssql_obj.execute("EXEC sp_password NULL, '%s', 'sa'" % password)
@@ -418,7 +418,7 @@ class main(databaseBase):
public.writeFile('data/sa.pl',password)
session['config']['mssql_sa'] = password
return public.returnMsg(True,'The password of sa is changed successfully.')
return public.returnMsg(True, public.lang("The password of sa is changed successfully."))
@@ -492,7 +492,7 @@ class main(databaseBase):
for i in data:
if i[0] == conn_config['db_name']:
return True
return public.returnMsg(False,'The specified database does not exist!')
return public.returnMsg(False, public.lang("The specified database does not exist!"))
except Exception as ex:
return public.returnMsg(False,ex)