from zsite import ZSite from msc import Msc, makelinks import Globals, OFS import os, string, re class ZMsc(ZSite): id = 'msc' name = 'ZMsc' icon = 'misc_/ZMsc/Icon' meta_type = 'ZMsc' color = '#003366' _properties = ZSite._properties manage_options = ( ZSite.manage_options[0], ZSite.manage_options[1], { 'label' : 'Msc', 'icon' : '', 'action' : 'manage_msc', 'target' : '_self', }, ZSite.manage_options[2], ZSite.manage_options[3], ZSite.manage_options[4], ZSite.manage_options[5], ZSite.manage_options[6], ZSite.manage_options[7], ZSite.manage_options[8], ZSite.manage_options[9], ZSite.manage_options[10], ) manage_msc = Globals.DTMLFile('manage/msc', globals()) manage_msc_dtml = Globals.DTMLFile('manage/code/msc', globals()) def __init__(self, name, database, location): self._v_system = Msc(name, database, location) return def init(self): self._v_system = Msc(self.name, self.database, self.location) return def edbminit(self, path, force=0): return self._v_system.edbminit(path, force) def edbmopen(self, name, format=''): return self._v_system.edbmopen(name, format) def edbmquery(self, request, db): if request.form: return self._v_system.edbmquery(request.form, db) return None def edbmfind(self, db, query, first, last): if not query: return self.EdbmResult(error='no query') resultset = self._v_system.edbmfind(db, query, first, last) if resultset == None: return self.EdbmResult(error='invalid query') list = [] count = 0 prevsect = prevpa = '' for result in resultset: item = self.EdbmItem(first + count) for name in db._factory.schema['attrinfo'].keys(): try: setattr(item, name, getattr(result, name)) except: setattr(item, name, 'special attribute error') (prevsect, prevpa, hdr1c, hdr2c, hdr1t, hdr2t) = self.hdrs(prevsect, prevpa, item) setattr(item, 'hdr1c', hdr1c) setattr(item, 'hdr2c', hdr2c) setattr(item, 'hdr1t', hdr1t) setattr(item, 'hdr2t', hdr2t) list.append(item) count += 1 return self.EdbmResult(resultset.total, list) def hdrs(self, prevsect, prevpa, item): hdr1c = hdr2c = hdr1t = hdr2t = '' if item.level == 0: prevsect = item.an prevpa = item.an elif item.level == 1: if item.msc_section_code != prevsect: (hdr1c, hdr1t) = (item.msc_section_code, makelinks(item.msc_section_text)) prevsect = item.msc_section_code prevpa = item.an else: # item.level == 2 if item.msc_section_code != prevsect: (hdr1c, hdr1t) = (item.msc_section_code, makelinks(item.msc_section_text)) if item.pa != prevpa: (hdr2c, hdr2t) = (item.pa, makelinks(item.parent_ti)) prevsect = item.msc_section_code prevpa = item.pa return (prevsect, prevpa, hdr1c, hdr2c, hdr1t, hdr2t) def edbmeval(self, request, db=None): if db == None: db = self.edbmopen('msc') query = self.edbmquery(request, db) if query == None: return None first, last = 1, 300 if request.form.has_key('first') and request.form['first']: first = int(request.form['first']) if request.form.has_key('last') and request.form['last']: last = int(request.form['last']) result = self.edbmfind(db, query, first, last) if result: result.query = query result.first = first result.last = last return result class EdbmResult(OFS.SimpleItem.SimpleItem): def __init__(self, total=0, list=[], error=None): self.total = total self.list = list self.error = error class EdbmItem(OFS.SimpleItem.SimpleItem): def __init__(self, index): self.index = index def mscsearch(self, code): if len(code) != 5: return '' if code[-3:] == '-XX': return code[0:2] + '*' if code[-2:] == 'xx': return code[0:3] + '*' return code def mscrefine(self, code): if len(code) != 5: return '' if code[-3:] == '-XX': return code[0:2] if code[-2:] == 'xx': return code return '' manage_addZMsc = Globals.DTMLFile('manage/add', globals()) def manage_add(self, id, title, REQUEST=None): """Add a new ZMsc instance""" handle = ZMsc(REQUEST.name, REQUEST.database) handle.id = id handle.title = title handle.name = REQUEST.name handle.database = REQUEST.database handle.location = REQUEST.location self = self.this() self._setObject(id, handle) if REQUEST is not None: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') return