import AccessControl import OFS, Globals from OFS import SimpleItem import types from TraversableWrapper import Traversable from Globals import Persistent from AccessControl import ClassSecurityInfo from Cruft import Cruft from common import add_dtml import TestiYlesanne from TestiYlesanne import TestiYlesanne class YlesandeKirjeldus( Persistent, OFS.SimpleItem.Item, Traversable, AccessControl.Role.RoleManager ): "Testi ülesande metadata" meta_type="YlesandeKirjeldus" marksonad=[] selgitus="" def kasLeidubMarksona(self, sona): "1, kui vastav märksõna olemas" return sona in self.marksonad def lisaMarksona(self, sona): "Kui märksõna puudub, siis lisatakse" if not self.kasLeidubMarksona(sona): self.marksonad.append(sona) def leivaPuru(self, viimane=0): "Teekond üles" return self.aq_parent.leivaPuru()+" > kirjeldus" def muutmisVorm(self, REQUEST): "Vorm kirjelduse muutmiseks" tulemus=leheAlgus(self, REQUEST)+"
" return tulemus+leheLopp(self, REQUEST) def muutmisLeht(self, REQUEST, selgitus, marksona): "Muutuste salvestus" self.selgitus=selgitus if type(marksona) is None: marksona=() if type(marksona) is types.StringType: marksona=(marksona,) self.marksonad=[] for x in marksona: if x.strip(): self.lisaMarksona(x) REQUEST.RESPONSE.redirect('muutmisVorm') def index_html(self): "Veebi näha olev osa" return self.selgitus+" "+str(self.marksonad) class YlesanneKoosKirjeldusega( OFS.Folder.Folder, Persistent, AccessControl.Role.RoleManager, Traversable, Cruft ): "Hoiab ülesande oma kirjeldusega koos" def __init__(self, ylesanne, kirjeldus=YlesandeKirjeldus()): self._setObject('ylesanne', ylesanne) self._setObject('kirjeldus', kirjeldus) def lisaMarksona(self, sona): "Lisab kirjelduse alla sealt puuduva märksõna" self.kirjeldus.lisaMarksona(sona) def marksonadHTML(self): "Märksõnad jadana" return asendaHTML(str(self.kirjeldus.marksonad)) def selgitusHTML(self): "Selgitus" return asendaHTML(self.kirjeldus.selgitus) def leivaPuru(self, viimane=0): "Teekond üles" nimi=self.id if viimane: tekst=nimi else: tekst="nimi+"" return self.aq_parent().leivaPuru()+ " > Kirjeldusega ülesanne " + tekst def index_html(self): "Peegel veebis" return leheAlgus(self, REQUEST)+self.ylesanne.esitlusHTML() +\ self.marksonadHTML()+self.selgitusHTML()+leheLopp(self, REQUEST) class TestiYlesanneteHoidla( OFS.Folder.Folder, OFS.SimpleItem.Item, Persistent, AccessControl.Role.RoleManager, Traversable, Cruft): "Hoidla õpetaja tarvis" #elemendid=[] nr=0 def elemendidHoidlas(self): "Hoidlas olevad ülesanded koos kirjeldustega" return self.objectValues() def kasYlesannePuudub(self, ylesanne): "1 kui vastavate väljadega ülesanne puudub" return ylesanne not in self.ylesandedHoidlas() def lisaYlesanneKoosKirjeldusega(self, element): "Ülesanne lisatakse puudumise korral" if self.kasYlesannePuudub(element.ylesanne): self.nr=self.nr+1 element.id='el'+str(self.nr) self._setObject(element.id, element) #elemendid.append(element) def lisaYlesanne(self, ylesanne): "Vaid ülesande lisamine, kirjeldus tühi" self.lisaYlesanneKoosKirjeldusega(YlesanneKoosKirjeldusega(ylesanne)) def ylesandedHoidlas(self): "Hoidlast vaid ülesanded, mitte kirjeldused." return [x.ylesanne for x in self.elemendidHoidlas()] def marksonadHoidlas(self): "Märksõnad kõikide ülesannete peale kokku" marksonad=[] for x in self.elemendidHoidlas(): if x.kirjeldus: for k in x.kirjeldus.marksonad: if k not in marksonad: marksonad.append(k) return marksonad def marksonaViideteLoetelu(self, REQUEST): "Viited leiduvatele märksõnadele" m=self.marksonadHoidlas() #m.sort() if m is None: return "Tühi märksönastik" tulemus=leheAlgus(self, REQUEST)+""+x.ylesanne.esitlusHTML()+" | "+\ " | "+x.ylesanne.vaatamineHTML()+" | "+\ ""+x.marksonadHTML()+" | "+\ ""+x.selgitusHTML()+" | "+\ ""+x.ylesanne.meta_type+" |