# -*- coding: utf-8 -*- from lybmods.lybformauth import member_of, any_of from urllib.request import FancyURLopener from lybmods.lybclasses import Cat from random import random from lybmods import lybshared import lybmods.lybhtdata as lybhtdata import cherrypy import lybmods.lybtools as lybtools class URLOpener(FancyURLopener): version = 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0.6) Gecko/20100101 Firefox/10.0.6 Iceweasel/10.0.6' class Edit: '''Управление хранилищем''' _cp_config = { 'auth.require': [any_of(member_of('admins'),member_of('editors'))] } def __init__(self, root): self.root = root @cherrypy.expose def index(self): cherrypy.HTTPRedirect("/") @cherrypy.expose def nejs(self): return lybhtdata.ne_js() @cherrypy.expose def negif(self): response = cherrypy.response response.headers['Content-Type'] = 'image/gif' return lybhtdata.ne_gif() @cherrypy.expose def upl(self, catid = 0): catid = int(catid) cat = Cat(catid) catname = cat.name return self.root.buildhtml('Архив [Загрузка документа в архив]', lybhtdata.form_upload.format(catid = catid, catname = catname) + '\n← Обратно в раздел "' + catname + '"\n\n') @cherrypy.expose def upload(self, catid = 0, filein=''): if catid: catid = int(catid) url = filein try: res = URLOpener().open(url) except: cat = Cat(catid) catname = cat.name return self.root.buildhtml('Архив [Загрузка документа в архив]', lybhtdata.form_upload.format(catid = catid, catname = catname) + '
Ошибка загрузки документа
\n← Обратно в раздел "' + catname + '"\n\n
') return self.root.buildhtml('Архив [Обработка файла закончена]', self.fileproc(catid, res.url, lybtools.ctype(res.headers['Content-Type']), res.read())) @cherrypy.expose def tmpstore(self, lybsrcobj=None): sess = cherrypy.session cherrypy.response.headers["Content-Type"] = sess[lybsrcobj]['type'] res = sess[lybsrcobj]['body'] try: return res except: pass def fileproc(self, catid, url, ctype, htfile): if ctype == 'text/html': return self.html(catid, url, htfile) if ctype == 'text/plain': htxt = self.txt(htfile) return self.html(catid, url, htxt) def txt(self, text): text = "".join(lybtools.edit_esc.get(c,c) for c in text) return text.replace('\n', '
\n') def html(self, catid, url, htfile, md = None, sub = False, ins = False): return lybshared.html(self, catid, url, htfile, md, sub, ins) def ne(self, catid, url = None, html = None, md = None, docname = "Новый документ"): return lybshared.ne(self, catid, url, html, md, docname) @cherrypy.expose def newcat(self, catid = 0, catname = None): catid = int(catid) category = Cat(catid) if not catname or catname == '': return self.root.buildhtml('Архив[Ошибка создания раздела]', '

Имя раздела не должно быть пустым

\n
\n← Обратно в раздел "' + category.name + '"\n\n
') catname = catname.strip() if category.newcat(catname): return self.root.category(catid = catid) else: return self.root.buildhtml('Архив[Ошибка создания раздела]', '

Ошибка создания раздела "' + catname + '"

\n
\n← Обратно в раздел "' + category.name + '"\n\n
') @cherrypy.expose def catrename(self, catid = None, catname = None): if catid: catid = int(catid) if not catname: return self.catedit(submit = 'Переименовать', catid = catid, err = '!!!Пустое имя раздела!!!') catname = catname.strip() cat = Cat(catid) parent = cat.parent for subc in parent.categories: if subc.name == catname: return self.catedit(submit = 'Переименовать', catid = catid, err = '!!!В разделе "' + parent.name + '" есть подраздел с именем "' + catname + '"!!!') if catname == cat.name: return self.catedit(submit = 'Переименовать', catid = catid, err = '!!!Исходное имя равно новому!!!') cat.setname(catname) return self.root.category(catid = parent.id) @cherrypy.expose def catdelete(self, catid = None): if catid: catid = int(catid) cat = Cat(catid) parent = cat.parent cat.delete() return self.root.category(catid = parent.id) @cherrypy.expose def catmove(self, catid = None, toid = None): if not catid: return if not toid: return self.catedit(submit = 'Перенести', catid = catid, err = '!!!Не выбран раздел!!!') catid = int(catid) toid = int(toid) cat = Cat(catid) tocat = Cat(toid) if catid == toid: return self.catedit(submit = 'Перенести', catid = catid, err = '!!!Нельзя перенести себя в себя!!!') if toid == cat.parent.id: return self.catedit(submit = 'Перенести', catid = catid, err = '!!!Раздел уже в этом месте!!!') if cat.name in [x.name for x in tocat.categories]: return self.catedit(submit = 'Перенести', catid = catid, err = '!!!В разделе "' + cat.parent.name + '" уже есть подраздел с таким именем!!!') cat.setparentid(toid) return self.root.category(catid = cat.parent.id) @cherrypy.expose def catedit(self, submit = None, catid = None, err = ''): if submit and catid: catid = int(catid) cat = Cat(catid) catname = cat.name parent = cat.parent if submit == 'Переименовать': html = '
Сменить имя раздела "' + catname + '" на
← Обратно в раздел "' + parent.name + '"
' title, document = ('Архив[Переименовать раздел "' + catname + '"]' + err, html) elif submit == 'Перенести': l = '\n' lo = '\n' lopts = '' def lgen(lopts, mod = '', cid = 0): c = Cat(cid) lopts += lo.format(id = cid, name = mod + c.name) for subcat in c.categories: if subcat.id == catid: continue lopts = lgen(lopts, mod = mod + '...', cid = subcat.id) return lopts lopts = lgen(lopts) sel = l.format(lbody = lopts) html = '
Переместить раздел "' + catname + '" в\n{sel}
← Обратно в раздел "' + parent.name + '"
' title, document = ('Архив[Переместить раздел "' + catname + '"]' + err, html) elif submit == 'Удалить': html = '
Действительно удалить раздел "' + catname + '"?
Все хранящиеся в нём подразделы и документы будут перенесены в родительский раздел.
← Обратно в раздел "' + parent.name + '"
' title, document = ('Архив[Удалить раздел "' + catname + '"]', html) return self.root.buildhtml(title, document) @cherrypy.expose def insert_doc(self, catid = 0, url = None, html = None, doc_name = '', md = None): return lybshared.insert_doc(self, catid, url, html, doc_name, md) @cherrypy.expose def docedit(self, catid = None, doc = None, submit = None, err = ''): if catid: catid = int(catid) if doc: doc = int(doc) if not doc or not submit: return cat = Cat(catid) doco = cat[doc] catname = cat.name docname = doco.name if submit == 'Редактировать': return self.root.buildhtml('Архив[Редактирование документа "' + docname + '"]', self.html(catid, '/', self.root.get_doc(doc=doc, catid=catid, plain=True), md = str(doc))) if submit == 'Переименовать': html = '
\n
\n\n\nСменить имя документа "' + docname + '" на \n\n
\n
\n
\n\n← Обратно в раздел "' + catname + '"\n\n
' title, document = ('Архив[Переименовать документ "' + doco.name + '"]' + err, html) elif submit == 'Удалить': shtml = '
\nУдалить документ "' + docname + '"?\n
\n\n\n\n
\n
\n\n← Обратно в раздел "' + catname + '"\n\n
' title, document = ('Архив[Удалить Документ "' + doco.name + '"]' + err, shtml) elif submit == 'Перенести': if len(Cat(0).categories) == 0: shtml = '
Других разделов нет\n
← Обратно в раздел "' + catname + '"
' else: l = '\n' lo = '\n' lopts = '' def lgen(lopts, mod = '', cid = 0): c = Cat(cid) lopts += lo.format(id = cid, name = mod + c.name) for subcat in c.categories: lopts = lgen(lopts, mod = mod + '...', cid = subcat.id) return lopts lopts = lgen(lopts) sel = l.format(lbody = lopts) shtml = '
Перенести документ "' + docname + '"
\nв категорию ' + sel + ' ?

\n
← Обратно в раздел "' + catname + '"
' title, document = ('Архив[Перенос документов]' + err, shtml) return self.root.buildhtml(title, document) @cherrypy.expose def docdelete(self, catid = None, doc = None): if not catid or not doc: return catid = int(catid) doc = int(doc) cat = Cat(catid) try: del cat[doc] except: doco = cat[doc] docname = doco.name return self.root.buildhtml('Архив[Документ "' + docname + '" не удалён]', '
Документ "' + docname + '" не удалён.
← Обратно в раздел "' + cat.name + '"
') return self.root.category(catid = catid) @cherrypy.expose def docrename(self, catid = None, doc = None, doc_name = None): if catid: catid = int(catid) if not doc_name or not doc: return self.docedit(submit = 'Переименовать', catid = catid, doc = doc, err = '!!!Пустое имя документа!!!') doc = int(doc) doc_name = doc_name.strip() cat = Cat(catid) doco = cat[doc] if doc_name == doco.name: return self.docedit(submit = 'Переименовать', catid = catid, doc = doc, err = '!!!Исходное имя равно новому!!!') for docs in cat.documents: if docs.name == doc_name: return self.docedit(submit = 'Переименовать', catid = catid, doc = doc, err = '!!!В разделе "' + cat.name + '" есть документ с именем "' + doc_name + '"!!!') doco.setname(doc_name) return self.root.category(catid = catid) @cherrypy.expose def newdoc(self, catid = 0): url = 'http://new.doc/' + (str(random() * int(random() * 10)) + str(random() * int(random() * 10)) + str(random() * int(random() * 10))).replace('.', '') return self.root.buildhtml('Архив[Новый документ]', self.fileproc(catid, url, 'text/html', '
')) @cherrypy.expose def docmove(self, catid = None, doc = None, toid = None): if not catid or not doc: return if not toid: return self.docedit(submit = 'Перенести', catid = catid, doc = doc, err = '!!!Не выбран раздел!!!') catid = int(catid) doc = int(doc) toid = int(toid) cat = Cat(catid) tocat = Cat(toid) doco = cat[doc] catname = cat.name tocatname = tocat.name docname = doco.name if catid == toid: return self.docedit(submit = 'Перенести', catid = catid, doc = doc, err = '!!!Документ "' + docname + '" уже в разделе "' + catname + '"!!!') if toid == catid: return self.docedit(submit = 'Перенести', catid = catid, doc = doc, err = '!!!Раздел уже в этом месте!!!') if doc in list(tocat.keys()): return self.docedit(submit = 'Перенести', catid = catid, doc = doc, err = '!!!В разделе "' + tocatname + '" уже есть документ с таким содержимым!!!') if tocat.docidbyname(doco.name): return self.docedit(submit = 'Перенести', catid = catid, doc = doc, err = '!!!В разделе "' + tocatname + '" уже есть документ с именем"' + docname + '"!!!') doco.setcatid(toid) return self.root.category(catid = catid)