import AccessControl
import OFS, Globals
import types
import YlTest
#import TestiYlesanne
from OFS import SimpleItem
from TraversableWrapper import Traversable
from Globals import Persistent
from AccessControl import ClassSecurityInfo
from Cruft import Cruft


class YlVahendus(
     Persistent,
     OFS.SimpleItem.Item,
     Traversable,
     AccessControl.Role.RoleManager,
     Cruft     
     ):
     "Ülesannete import/eksport, loomine"
     ylesanneteTyybid=("ValikYlesanne","TekstivastusegaYlesanne",
      "YksikvalikYlesanne", "MitmikvalikYlesanne", 
      "OigeTekstivastusegaYlesanne", "ArvuvahemikuliseVastusegaYlesanne",
      "ProtsentYlesanne", "VastavusYlesanne", "TaisnurkneKolmnurk")
     
     def ylesanneteTolkegaTyybid(self, REQUEST):
        "Ülesannete tüübid tõlgituna"
        self.get_lang(('ivatests',), REQUEST)
        tulemus={
          "ValikYlesanne": REQUEST['L_it_check_exercise'],
          "TekstivastusegaYlesanne": REQUEST['L_it_text_answer_exercise'],
          "YksikvalikYlesanne": REQUEST['L_it_one_answer_exercise'],
          "MitmikvalikYlesanne": REQUEST['L_it_multiple_choice_exercise'],
          "OigeTekstivastusegaYlesanne": REQUEST['L_it_one_answer'],
          "ArvuvahemikuliseVastusegaYlesanne": REQUEST["L_it_number_space_exercise"],
          "ProtsentYlesanne": REQUEST["L_it_percent_excercise"] ,
          "VastavusYlesanne": REQUEST["L_it_matching_exercise"],
          "TaisnurkneKolmnurk": "T&auml;isnurkse kolmnurga h&uuml;potenuusi leidmine",
        }
        return tulemus

     def tekstistYlesanneteLaadimiseVorm(self, REQUEST):
        "Tekstiala sisestuseks"
        tulemus=YlTest.leheAlgus(self, REQUEST)+\
          "<form action='tekstistYlesanneteSalvestus'>"+\
          "<textarea name='tekst'></textarea>"+\
          "<input type='submit' value='Saada' />"+\
          "</form><br />"+\
          "<form action='tekstiFailistYlesanneteSalvestus' method='post' enctype='multipart/form-data'>"+\
          "<input type='file' name='fail' />"+\
          "<input type='submit' value='Saada' />"+\
          "</form><br />"+YlTest.leheLopp(self, REQUEST)
        return tulemus
        
     def tekstistYlesanneteSalvestus(self, REQUEST, tekst):
        "Salvestus tase kõrgemale"
        #self.tekstistYlesanneteMassiiv(tekst)
        #return "kalake"
        self.aq_parent.lisaYlesanded(self.tekstistYlesanneteMassiiv(tekst))
        #return "algus2"
        REQUEST.RESPONSE.redirect('../index_html')
        
     def tekstiFailistYlesanneteSalvestus(self, fail, REQUEST):
        "Failist lisamine tase kõrgemale"
#        return fail.readline()
        self.aq_parent.lisaYlesanded(self.tekstiRidadestYlesanneteMassiiv(fail.readlines()))
        REQUEST.RESPONSE.redirect('../index_html')
        
          
     def tekstistYlesanneteMassiiv(self, tekst):
        "HotPotatose väljundist lugemine"
        reamassiiv=tekst.split("\n")
        return self.tekstiRidadestYlesanneteMassiiv(reamassiiv)
        
     def tekstiRidadestYlesanneteMassiiv(self, reamassiiv):
        "Read sees massiivina"
        algus=0
        ylesanded=[]
        while algus<len(reamassiiv) and (reamassiiv[algus].split(":"))[1]!="TYPE":
          algus=algus+1
        if algus>=len(reamassiiv):return ylesanded
        while algus<len(reamassiiv):
         ots=algus+1
         while ots<len(reamassiiv) and (len(reamassiiv[ots].split(":"))<2 or (reamassiiv[ots].split(":"))[1]!="TYPE") :
          ots=ots+1
         ylesanded.append(self.tekstiRidadestYlesanne(reamassiiv[algus:ots]))
         algus=ots
        return ylesanded
          
                
     def tekstiRidadestYlesanne(self, reamassiiv):
        "Saabunud ridade põhjal ülesanne"
        from YlTyybid import *
        yl=None
        tyyp=self.tekstistYlesandeTyyp(reamassiiv)
        if tyyp=="OigeTekstivastusegaYlesanne":
          yl=OigeTekstivastusegaYlesanne('')
        if yl is not None:
          yl.loeTekstistYlesanne(reamassiiv)
        return yl
        
        
     def tekstistYlesandeTyyp(self, reamassiiv):
        "Tüübi üle otsustamine"
        algrida=reamassiiv[0].split(":")
        tyybitahis=algrida[2].strip()
        if not algrida[1]=="TYPE": return "Tyybita Tundmatu"
        if tyybitahis=="MC": return "MitmikvalikYlesanne"
        if tyybitahis=="M": return "VastavusYlesanne"
        if tyybitahis=="S":
          for x in reamassiiv:
            rida=x.split(":")
            if len(rida)>1:
             if rida[1]=="ANSWER1":
              if rida[4]=="0":
                return "OigeTekstivastusegaYlesanne"
              else:
                return "LynkTestYlesanne"
          return "vastuseta S"
        return "SisuTundmatu"


     def ylesanneteTyypideLoetelu(self, REQUEST):
        "Viited ülesannete tüüpidele"
        self.get_lang(('ivatests',), REQUEST)
        tulemus="<h3>"+REQUEST["L_it_choosing_exercise_type"]+"</h3>"
        for x in self.ylesanneteTyybid:
          tulemus=tulemus+"\n"+\
            ("<a href='lisaUusYlesanne?tyyp=%s'>%s</a><br />" %  (x, x))
        return tulemus
        
     def ylesanneteTyybidValikuna(self, REQUEST):
       "Valikmenüü ülesannete lisamiseks"
       self.get_lang(('ivatests',), REQUEST)
       andmed=self.ylesanneteTolkegaTyybid(REQUEST)
       tulemus="<form action='lisaUusYlesanne'> "+REQUEST['L_it_add_exercise']+"<select name='tyyp'>\n"
       for x in andmed.keys():
         tulemus=tulemus+"<option value='"+x+"'>"+andmed[x]+"</option>\n"
       tulemus=tulemus+"</select><input type='submit' value='OK'></form>"
       return tulemus
      
        
     def lisaUusYlesanne(self, REQUEST, tyyp):
        "Ülesande uus eksemplar"
        import YlTyybid
        self.get_lang(('ivatests',),REQUEST)
        from YlTyybid import *
        if tyyp=='ValikYlesanne':
          return ValikYlesanne(REQUEST["L_it_check_exercise_default_question"])
        if tyyp=='TekstivastusegaYlesanne':
          return TekstivastusegaYlesanne(REQUEST["L_it_text_answer_exercise_default_question"])
        if tyyp=='YksikvalikYlesanne':
          return YksikvalikYlesanne(REQUEST['L_it_one_answer_default_question'])
        if tyyp=='OigeTekstivastusegaYlesanne':
          return OigeTekstivastusegaYlesanne(REQUEST["L_it_one_answer_exercise_default_question"])
        if tyyp=='MitmikvalikYlesanne':
          return MitmikvalikYlesanne(REQUEST["L_it_multiple_choice_exercise_default_question"])
        if tyyp=='ArvuvahemikuliseVastusegaYlesanne':
          return ArvuvahemikuliseVastusegaYlesanne(REQUEST["L_it_number_space_exercise_default_question"])
        if tyyp=='ProtsentYlesanne':
          return ProtsentYlesanne(REQUEST["L_it_percent_exercise_default_question"]) 
        if tyyp=='VastavusYlesanne':
          return VastavusYlesanne(REQUEST["L_it_matching_exercise_default_question"])
        if tyyp=='TaisnurkneKolmnurk':
          return TaisnurkneKolmnurk("Leia täisnurkse kolmnurga hüpotenuus.")

Globals.InitializeClass(YlVahendus)
Globals.default__class_init__(YlVahendus)
