Changeset 3068 for trunk


Ignore:
Timestamp:
10/29/10 14:26:30 (9 years ago)
Author:
jukka
Message:

Fixed viewing PILOTs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/PILOTMaterial.py

    r3052 r3068  
    2727from Branchable import Branchable 
    2828from xml.dom.minidom import getDOMImplementation 
     29from config import to_unicode 
    2930 
    3031pilotmaterial_schema = Schema(( 
     
    119120    def getQuestions(self): 
    120121        """ Research questions are the last part of the bodytext, returned as a list """ 
    121         for item in self.getBodyText(): 
    122             if item['type']=='pilot_questions': 
    123                 return item['questions'] 
    124         else: 
    125             return ['']*7 
     122        chapters= self.getBodyText() 
     123        if chapters: 
     124            return chapters[-1]['questions'] 
     125        return [] 
    126126 
    127127    def getEmbedCode(self): 
     
    132132 
    133133    def buildXML(self, only_validate=False): 
     134        """ Build xml instructions for Flash app to build this PILOT """ 
    134135        lt=getToolByName(self, 'lemill_tool') 
    135136        title=self.Title() 
     
    137138        pilot = doc.documentElement 
    138139        title = doc.createElement('title') 
    139         title.appendChild(doc.createTextNode(self.Title())) 
    140         pilot.appendChild(title) 
    141                  
    142         new_scene=True 
    143         has_questions=False      
     140        title.appendChild(doc.createTextNode(to_unicode(self.Title()))) 
     141        pilot.appendChild(title)                 
    144142        for chapter in self.getBodyText(): 
    145             if new_scene: 
    146                 scene=doc.createElement('scene')  
    147                 new_scene = has_kw = False 
     143            scene=doc.createElement('scene')  
    148144            backgroundimage=doc.createElement('backgroundimage') 
    149             img_obj=lt.getObjectByUID(chapter['uid']) 
     145            img_obj=lt.getObjectByUID(chapter['image_uid']) 
    150146            if img_obj: 
    151147                backgroundimage.setAttribute('src', img_obj.absolute_url()+'/image_large')                 
    152148            scene.appendChild(backgroundimage) 
    153149            voiceover=doc.createElement('voiceover') 
    154             aud_obj=lt.getObjectByUID(chapter['uid']) 
     150            aud_obj=lt.getObjectByUID(chapter['audio_uid']) 
    155151            if aud_obj: 
    156152                voiceover.setAttribute('src', aud_obj.absolute_url()+'/file')                 
     
    158154            for word in chapter['keywords']: 
    159155                keyword=doc.createElement('keyword') 
    160                 keyword.appendChild(doc.createTextNode(word)) 
     156                keyword.appendChild(doc.createTextNode(to_unicode(word))) 
    161157                scene.appendChild(keyword) 
    162                 has_kw=True 
    163158            for word in chapter['questions']: 
    164159                keyword=doc.createElement('keyword') 
    165                 keyword.appendChild(doc.createTextNode(word)) 
     160                keyword.appendChild(doc.createTextNode(to_unicode(word))) 
    166161                scene.appendChild(keyword) 
    167                 has_questions=True 
    168             if has_kw: 
    169                 pilot.appendChild(scene) 
    170                 new_scene=True 
    171             elif has_questions: 
    172                 pilot.appendChild(scene) 
    173                 break 
    174         if has_questions: 
    175             return doc.toprettyxml(encoding='utf-8') 
    176         else: 
    177             return '' 
    178  
    179 #             
    180 # 
    181 #    def buildXMLOLD(self, only_validate=False): 
    182 #        """ builds the xml-blueprint from bodytext for flash engine """ 
    183 # 
    184 #        def kw_cutter(k,maxlength): 
    185 #            """ method to add linebreaks to long keywords """  
    186 #            if len(k)>maxlength: 
    187 #                cutend=maxlength 
    188 #                cutbegin=0 
    189 #                resl=[] 
    190 #                while cutend<len(k): 
    191 #                    while k[cutend] not in ' +-': 
    192 #                        cutend=cutend-1 
    193 #                    resl.append(k[cutbegin:cutend]) 
    194 #                    cutbegin=cutend 
    195 #                    cutend=cutend+maxlength 
    196 #                resl.append(k[cutbegin:]) 
    197 #                k=' &amp;&amp;'.join(resl) 
    198 #            return k 
    199 # 
    200 #        bodyfield=self.getField('bodyText') 
    201 #        bodytext=self.getRawBodyText() 
    202 #        title=self.title 
    203 #        failure='' 
    204 #        def setFailure(new_failure, old_failure): 
    205 #            if (new_failure == 'fatal' and old_failure in ('soft', '')) or (new_failure == 'soft' and old_failure == ''): 
    206 #                return new_failure 
    207 #            return old_failure 
    208 #        voice_urls=[] 
    209 #        bg_url=[] 
    210 #        kw=[] 
    211 #        has_title=0 
    212 #        title_begin='' 
    213 #        maxlength=40 # how many characters of keyword fits on one line 
    214 #        msg='' 
    215 #        f=-1 
    216 #        ### Collect and validate values ### 
    217 #        for (chapter, chapter_type) in bodytext: 
    218 #            f+=1 
    219 #            if chapter_type == 'image_piece':  
    220 #                # backgrounds 
    221 #                obj=bodyfield.getObjectByUID(self, chapter) 
    222 #                url='missing' 
    223 #                if obj!=None: 
    224 #                    if obj.isImage(): 
    225 #                        url='/'.join((obj.absolute_url(),'image_large')) 
    226 #                    else: 
    227 #                        msg=msg+'Background image %s is missing, using blank instead.' % str((f/3)+1) 
    228 #                        failure = setFailure('fatal', failure) 
    229 #                else: 
    230 #                    msg=msg+'Background image %s is missing, using blank instead.' % str((f/3)+1)                     
    231 #                    failure = setFailure('fatal', failure) 
    232 #                bg_url.append(url) 
    233 # 
    234 #            elif chapter_type == 'audio_piece':  
    235 #                # voiceovers 
    236 #                obj=bodyfield.getObjectByUID(self, chapter) 
    237 #                url='missing' 
    238 #                length=30 
    239 #                if obj!=None: 
    240 #                    if obj.isAudio(): 
    241 #                        url=obj.absolute_url()+'/file' 
    242 #                        length=obj.getLength() 
    243 #                    else: 
    244 #                        msg=msg+'Voiceover for scene %s is missing, using 15 seconds of ambient noise instead.' % str((f/3)+1) 
    245 #                        failure = setFailure('soft', failure) 
    246 #                else: 
    247 #                    msg=msg+'Voiceover for scene %s is missing, using 15 seconds of ambient noise instead.' % str((f/3)+1)                     
    248 #                    failure = setFailure('soft', failure) 
    249 #                voice_urls.append((url,length)) 
    250 #             
    251 #            elif chapter_type == 'pilot_keywords' or chapter_type == 'pilot_questions':  
    252 #                # keywords 
    253 #                tkw=[to_unicode(x) for x in chapter] 
    254 #                if len(tkw)>3 and f<len(bodytext)-2: 
    255 #                    tkw=tkw[:3] # three keywords max unless final scene 
    256 #                if tkw==[]: 
    257 #                    tkw=[''] 
    258 #                    msg=msg+'Keywords for scene %s are missing' % str((f/3)+1) 
    259 #                    failure = setFailure('soft', failure) 
    260 #                if voice_urls:                     
    261 #                    mplength=voice_urls[-1][1] # length of latest voiceover 
    262 #                else:  
    263 #                    mplength=15 
    264 #                if f==2: 
    265 #                    has_title=1 
    266 #                cliplen = mplength/(len(tkw)+has_title)  # time reserved for each keyword 
    267 #                i=0 
    268 #                newlist=[] 
    269 #                if has_title==1: 
    270 #                    i=1 
    271 #                    title_begin='1' 
    272 #                    title_end=str(cliplen-2) 
    273 #                    has_title=0                    
    274 #                for x in tkw: 
    275 #                    newlist.append((x, i*cliplen+1, (i+1)*cliplen-2)) 
    276 #                    i=i+1 
    277 #                kw.append(newlist) 
    278 #                # cliplen = time allocated for each keyword 
    279 #                # kw[n]=(keyword, startpoint, endpoint) 
    280 # 
    281 #        if len(voice_urls)!=len(bg_url) or len(bg_url)!=len(kw): 
    282 #            failure = setFailure('fatal', failure) 
    283 #        if title_begin=='': 
    284 #            msg=msg+"Scene doesn't have enough components, keywords are missing." 
    285 #            failure = setFailure('fatal', failure) 
    286 # 
    287 #        if only_validate==True: 
    288 #            return (failure,  
    289 #                bg_url, 
    290 #                [x[0] for x in voice_urls], 
    291 #                [x[0][0] for x in kw]) 
    292 # 
    293 #        if failure=='fatal': 
    294 #            print 'fatal failure' 
    295 #            print msg 
    296 #            lt = getToolByName(self, 'lemill_tool') 
    297 #            lt.addPortalMessage(_('Building flash file for PILOT failed. ')) 
    298 #            return '' 
    299 # 
    300 #        ### Build xml ### 
    301 # 
    302 #        scene_type=' type="title"' 
    303 #        xml=u'<?xml version="1.0" encoding="utf-8"?>\n<pilot>\n' 
    304 #        xml=xml+u'<title begin="'+title_begin+u'" end="'+title_end+u'">'+title+u'</title>\n' 
    305 #        for i in range(len(bg_url)): 
    306 #            xml=xml+u'<scene'+scene_type+u'>\n' 
    307 #            xml=xml+u'   <voiceover src="'+voice_urls[i][0]+u'" len="'+str(voice_urls[i][1])+u'"/>\n' 
    308 #            xml=xml+u'   <backgroundimage src="'+bg_url[i]+'" />\n' 
    309 #            for k in range(len(kw[i])):             
    310 #                xml=xml+u'   <keyword begin="'+str(kw[i][k][1])+u'" end="'+str(kw[i][k][2])+u'">'+kw[i][k][0]+u'</keyword>\n' 
    311 #            xml=xml+u'</scene> \n' 
    312 #            if i < len(bg_url)-2: 
    313 #                scene_type='' 
    314 #            else: 
    315 #                scene_type=u' type="questions"' 
    316 #        xml=xml+u'</pilot>' 
    317 #        # We use UTF-16 because that way we get the BOM, which Flash XML parser requires. 
    318 #        return xml.encode('utf-16') 
     162            pilot.appendChild(scene) 
     163        return doc.toxml(encoding='utf-8') 
    319164 
    320165 
Note: See TracChangeset for help on using the changeset viewer.