bugfix
This commit is contained in:
parent
a947a57eca
commit
cbfa9806d3
@ -60,11 +60,29 @@ class FileMgr:
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def del_file(self, request, params_kw):
|
async def del_folder(self, id):
|
||||||
fid = params_kw.id
|
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
return await self.del_folder(sor, id)
|
||||||
|
|
||||||
|
async def _del_folder(self, sor, id):
|
||||||
|
fs = []
|
||||||
|
async for f in self._folder_files(sor, id):
|
||||||
|
fs.append(f)
|
||||||
|
for f in fs:
|
||||||
|
if f.filetype == 'folder':
|
||||||
|
await self._del_folder(sor, f.id)
|
||||||
|
else:
|
||||||
|
await self._del_file(sor, f.id)
|
||||||
|
|
||||||
|
async def del_file(self, fid):
|
||||||
|
db = DBPools()
|
||||||
|
dbname = get_dbname()
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
return await self._del_file(sor, fid)
|
||||||
|
|
||||||
|
async def _del_file(self, sor, fid):
|
||||||
recs = await sor.R('file', {'id': fid})
|
recs = await sor.R('file', {'id': fid})
|
||||||
if recs:
|
if recs:
|
||||||
delrec = recs[0]
|
delrec = recs[0]
|
||||||
@ -75,7 +93,7 @@ class FileMgr:
|
|||||||
rf = RegisterFunction()
|
rf = RegisterFunction()
|
||||||
await rf.exe('filedeleted', delrec)
|
await rf.exe('filedeleted', delrec)
|
||||||
|
|
||||||
async def has_sub(self, request, sor, folderid):
|
async def has_sub(self, sor, folderid):
|
||||||
sql = """select unique a.* from folder a
|
sql = """select unique a.* from folder a
|
||||||
left join folder b on a.id = b.parentid
|
left join folder b on a.id = b.parentid
|
||||||
left join file c on a.id=c.folderid
|
left join file c on a.id=c.folderid
|
||||||
@ -85,35 +103,32 @@ where id=${folderid}$"""
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def folder_files(self, request, params):
|
async def folder_files(self, id):
|
||||||
id = params.id
|
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
dbanme = get_dbname()
|
dbanme = get_dbname()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
for r in self._folder_files(sor, request, id):
|
for r in self._folder_files(sor, id):
|
||||||
yield r
|
yield r
|
||||||
|
|
||||||
async def _folder_files(self, sor, request, id):
|
async def _folder_files(self, sor, id):
|
||||||
recs = await self.sor_get_subfile(sor, request, id)
|
recs = await self.sor_get_subfile(sor, id)
|
||||||
for r in recs:
|
for r in recs:
|
||||||
yield r
|
yield r
|
||||||
folders = await self.sor_get_subfolder(sor, request, id)
|
folders = await self.sor_get_subfolder(sor, id)
|
||||||
for f in folders:
|
for f in folders:
|
||||||
for r in self._folder_files(request, f.id):
|
for r in self._folder_files(f.id):
|
||||||
yield r
|
yield r
|
||||||
|
|
||||||
async def get_subs(self, request, params):
|
async def get_subs(self, id):
|
||||||
id = params.id
|
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
dbname = get_dbname()
|
dbname = get_dbname()
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
ret = await self.sor_get_subfolder(sor, request, id)
|
ret = await self.sor_get_subfolder(sor, id)
|
||||||
ret += await self.sor_get_subfile(sor, request, id)
|
ret += await self.sor_get_subfile(sor, id)
|
||||||
return ret
|
return ret
|
||||||
return []
|
return []
|
||||||
|
|
||||||
async def sor_get_subfolder(self, sor, request, fid):
|
async def sor_get_subfolder(self, sor, fid):
|
||||||
sql = """select x.*, 'folder' as filetype,
|
sql = """select x.*, 'folder' as filetype,
|
||||||
case when y.id is null then 1
|
case when y.id is null then 1
|
||||||
else 0 end as is_left
|
else 0 end as is_left
|
||||||
@ -132,8 +147,7 @@ where x.parentid = ${fid}$
|
|||||||
recs = await sor.sqlExe(sql, ns)
|
recs = await sor.sqlExe(sql, ns)
|
||||||
return recs
|
return recs
|
||||||
|
|
||||||
async def sor_get_subfile(self, sor, request, fid):
|
async def sor_get_subfile(self, sor, fid):
|
||||||
userinfo = await get_session_userinfo(request)
|
|
||||||
sql = """select *, 1 as is_leaf from file where folderid=${fid}$"""
|
sql = """select *, 1 as is_leaf from file where folderid=${fid}$"""
|
||||||
ns = {
|
ns = {
|
||||||
'fid':fid
|
'fid':fid
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
},
|
},
|
||||||
"edit_exclouded_fields":["id", "fiid" ],
|
"edit_exclouded_fields":["id", "fiid" ],
|
||||||
"get_data_url":"{{entire_url('/filemgr/get_folder_subs.dspy')}}",
|
"get_data_url":"{{entire_url('/filemgr/get_folder_subs.dspy')}}",
|
||||||
|
"delete_data_url": "{{entire_url('/filemgr/delete_folder_or_file.dspy')}}",
|
||||||
"params":{
|
"params":{
|
||||||
"id":"{{params_kw.id or '' }}"
|
"id":"{{params_kw.id or '' }}"
|
||||||
},
|
},
|
||||||
|
|||||||
7
wwwroot/conformed_delete.dspy
Normal file
7
wwwroot/conformed_delete.dspy
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
dbname = get_module_dbname('filemgr')
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
filemgr = Filemgr()
|
||||||
|
await filemgr._del_folder(sor, params_kw.id)
|
||||||
|
return UiMessage(title='delete folder', message='delete success')
|
||||||
|
return Error(title='delete folder', message='delete failed')
|
||||||
30
wwwroot/delete_folder_or_file.dspy
Normal file
30
wwwroot/delete_folder_or_file.dspy
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
dbname = get_module_nmae('filemgr')
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
filemgr = FileMgr()
|
||||||
|
if params_kw.filetype == 'folder':
|
||||||
|
has_sub = await filemgr.has_sub(sor, params_kw.id)
|
||||||
|
if has_sub:
|
||||||
|
return UiComform(title='Delete Conform',
|
||||||
|
message='This folder has subitem, are you sure to delete it?', binds=[
|
||||||
|
{
|
||||||
|
"wid":"self",
|
||||||
|
"event":"conformed",
|
||||||
|
"actiontype":"urlwidget",
|
||||||
|
"target":"self",
|
||||||
|
"options":{
|
||||||
|
"params":{
|
||||||
|
"id":params_kw.id,
|
||||||
|
"filetype": params_kw.filetype
|
||||||
|
}
|
||||||
|
url: entire_url('conformed_delete.dspy')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
else:
|
||||||
|
await filemgr._del_folder(sor, params_kw.id)
|
||||||
|
else:
|
||||||
|
await filemgr._del_file(sor, params_kw.id)
|
||||||
|
return UiMessage(title='delete file', message='delete success')
|
||||||
|
return Error(title='delete file', message='delete failed')
|
||||||
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
debug(f'{params_kw=}')
|
debug(f'{params_kw=}')
|
||||||
filemgr = FileMgr()
|
filemgr = FileMgr()
|
||||||
f = await filemgr.get_subs(request, params_kw)
|
f = await filemgr.get_subs( params_kw.id)
|
||||||
return f
|
return f
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user