Changeset 3086 for trunk


Ignore:
Timestamp:
11/03/10 12:28:33 (9 years ago)
Author:
jukka
Message:

Fixes for exercise editing

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/ExerciseMaterial.py

    r3077 r3086  
    305305        return text 
    306306 
     307    def fixBrokenChoice(self): 
     308        """ If choice -type is mapped wrong, fix it """ 
     309        old_values=self.getRawBodyText() 
     310        new_values=[] 
     311        fixed=False 
     312        for vald in old_values: 
     313            if vald['type']=='choice' and isinstance(vald['text'], list): 
     314                 # [text, [correct_answers], [wrong_answers]] 
     315                 broken_text=vald['text'] 
     316                 vald['text']=broken_text[0] 
     317                 choices=[(broken_text[1][0], 1)] 
     318                 for item in broken_text[2]: 
     319                    choices.append((item, 0)) 
     320                 vald['choices']=choices 
     321                 vald['type']='multiple_choices' 
     322                 fixed=True 
     323            new_values.append(vald) 
     324        if fixed: 
     325            self.setBodyText(new_values) 
     326 
     327 
    307328registerType(ExerciseMaterial, PROJECTNAME) 
  • trunk/FieldsWidgets.py

    r3082 r3086  
    780780                value = self.updateChapterList(value) 
    781781                break 
     782            elif isinstance(chapter, dict) and chapter['type']=='choice' and isinstance(chapter['text'], list): 
     783                value=self.fixBrokenChoice(value) 
     784                break 
    782785        return value 
    783786 
     
    791794            version=None 
    792795            translation=None 
     796 
     797        fix_choice=False 
    793798        convert=False 
    794  
    795799        if version or translation: # don't cache cleaned version 
    796800            value = self.getRaw(instance, version=version, **kwargs) 
    797             if convert: 
    798                 value = self.updateChapterList(value) 
    799801            value=self.cleanChapters(instance, value) 
    800802            if translation: 
     
    807809                    convert=True 
    808810                    break 
     811                elif isinstance(chapter, dict) and chapter['type']=='choice' and isinstance(chapter['text'], list): 
     812                    fix_choice=True 
     813                    break 
    809814            if convert: 
    810815                cleaned_value=self.updateChapterList(cleaned_value) 
     816                cleaned_value=self.updateCleanedChapters(instance, cleaned_value) 
     817                return cleaned_value 
     818            if fix_choice: 
     819                cleaned_value=self.fixBrokenChoice(cleaned_value) 
    811820                cleaned_value=self.updateCleanedChapters(instance, cleaned_value) 
    812821                return cleaned_value 
     
    875884                new_scene=True 
    876885        return updated_values             
     886         
     887    def fixBrokenChoice(self, old_values): 
     888        for vald in old_values: 
     889            if vald['type']=='choice' and isinstance(vald['text'], list): 
     890                 # [text, [correct_answers], [wrong_answers]] 
     891                 broken_text=vald['text'] 
     892                 vald['text']=broken_text[0] 
     893                 choices=[(broken_text[1][0], 1)] 
     894                 for item in broken_text[2]: 
     895                    choices.append((item, 0)) 
     896                 vald['choices']=choices 
     897                 vald['type']='multiple_choices' 
     898            new_values.append(vald) 
     899        return new_values 
    877900 
    878901 
     
    883906        if 'pilot_keywords' in [ct for cv, ct in old_values]: # Pilots need little more work 
    884907            return self._updatePilot(old_values) 
    885         for cvalue, ctype in old_values:                     
    886             if ctype in ['multiple_choices','poll','choices']: 
     908        for cvalue, ctype in old_values: 
     909            if ctype in ['multiple_choices','poll','choices', 'choice']: 
    887910                q,correct,wrong=cvalue 
    888911                if ctype=='multiple_choices': 
     
    894917                    choices+=[(w, 0) for w in wrong] 
    895918                    shuffle(choices) 
     919                    ctype='multiple_choices' 
    896920                elif ctype=='poll': 
    897921                    choices=[(c,1) for c in correct+wrong] 
     922                    ctype='multiple_choices' 
    898923                new_chapter={'text':q, 'type':ctype, 'choices':choices} 
    899924            elif ctype in ['image_piece','audio_piece','media_piece']: 
     
    921946        references_to_add=[] 
    922947        references_to_remove=[]         
    923         if isinstance(old_values, list) and old_values: 
    924             # check if this needs conversion 
    925             if isinstance(old_values[0], tuple): 
    926                 old_values=self.updateChapterList(old_values) 
    927                 changed=True  
    928                 # conversion done.        
    929948        ### The normal case: widget gives a dictionary ###     
    930949        if isinstance(value, dict):   
  • trunk/MaintenanceTool.py

    r2991 r3086  
    140140        s.append(str(time.time()-t)) 
    141141        return '\n'.join(s)   
     142          
    142143 
    143144    security.declareProtected(MANAGE_PORTAL, 'cleanType') 
  • trunk/Resource.py

    r3077 r3086  
    325325        if hasattr(self, 'getRawBodyText'):             
    326326            desc=self.getRawBodyText() 
    327             if isinstance(desc, list): 
    328                 desc=desc[0] 
    329                 if isinstance(desc, tuple): 
     327            if desc:  
     328                if isinstance(desc, list) or isinstance(desc, tuple): 
    330329                    desc=desc[0] 
    331                 elif isinstance(desc, dict): 
     330                if isinstance(desc, dict) and 'text' in desc: 
    332331                    desc=desc['text'] 
     332            if not desc: 
     333                return "LeMill %s" % self.portal_type  
    333334            desc_len=0 
    334335            desc_result=[] 
  • trunk/skins/lemill/widget_chapter.pt

    r3074 r3086  
    3333        'flash':'here/piece_macros/macros/swf_macro', 
    3434        'flv-video':'here/macros_flowplayer/macros/flowplayer_chapter_view', 
    35         'kml':'here/piece_macros/macros/kml_macro'}">     
     35        'kml':'here/piece_macros/macros/kml_macro', 
     36        'video':'here/macros_flowplayer/macros/flowplayer_chapter_view'}">     
    3637        <tal:we_got_piece condition="python:piece and not piece.isDeleted()"> 
    3738            <metal:view use-macro="python:path(macro_mapping[piece_type])" /> 
  • trunk/skins/lemill/widget_exercise.pt

    r3082 r3086  
    2525         'open_ended':'here/widget_exercise/macros/view_open_ended', 
    2626         'exercise':'here/widget_exercise/macros/view_exercise', 
    27          'choice':'here/widget_exercise/macros/view_multiple_choices'};"> 
     27         'choice':'here/widget_exercise/macros/view_multiple_choices', 
     28         'choices':'here/widget_exercise/macros/view_multiple_choices'};"> 
    2829 
    2930        <metal:view_block use-macro="python:path(macro_mapping[type])" /> 
     
    7980    </tr> 
    8081    <tr> 
    81         <td> 
     82        <td tal:define="choices chapter/choices"> 
    8283            <span tal:repeat="choice chapter/choices" tal:omit-tag=""> 
    8384            <p tal:define="aindex repeat/choice/index"> 
Note: See TracChangeset for help on using the changeset viewer.