Changeset 386721 in indico


Ignore:
Timestamp:
04/19/12 18:09:13 (13 months ago)
Author:
Jose Benito <jose.benito.gonzalez@…>
Branches:
master, hello-world-walkthrough, ipv6, v0.98-series, v0.98.2, v0.98.3, v0.99, 051b2622c51afb171a1dedb46a0df4fbb0cbd02e, 0da0c1403bae8e51d8229f460181c71b9e6dda72
Children:
a829f8
Parents:
cde8e0
git-author:
Alberto Resco Perez <alberto.resco.perez@…> (04/18/12 12:40:52)
git-committer:
Jose Benito <jose.benito.gonzalez@…> (04/19/12 18:09:13)
Message:

[IMP] Improvement of abstract display

  • Refactor and redesign of abstract list display.
  • Refactor and redesign of abstract display.
  • New status widget for the abstract.
  • Deleted unused and obsolete code.
  • Close #1023.
Location:
indico
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/webinterface/pages/abstracts.py

    r4fd80c r386721  
    2121from xml.sax.saxutils import quoteattr 
    2222import urllib 
     23from pytz import timezone 
    2324 
    2425import MaKaC.webinterface.wcomponents as wcomponents 
     
    2930from MaKaC.common import Config 
    3031from MaKaC.webinterface.common.abstractStatusWrapper import AbstractStatusList 
    31 from MaKaC.webinterface.common.person_titles import TitlesRegistry 
    3232from MaKaC.i18n import _ 
    3333from indico.util.i18n import i18nformat 
     34from indico.util.date_time import format_time, format_date, format_datetime 
    3435from MaKaC.common.timezoneUtils import nowutc, getAdjustedDate, DisplayTZ 
    3536from MaKaC.common import Configuration 
     
    152153        self._conf = conf 
    153154 
     155    def _getAbstractStatus(self, abstract): 
     156        status = abstract.getCurrentStatus() 
     157        if isinstance( status, review.AbstractStatusAccepted ): 
     158            statusLabel = _("Accepted") 
     159            if status.getType() is not None and status.getType()!="": 
     160                return "%s as %s"%(statusLabel, status.getType().getName()) 
     161        elif isinstance( status, review.AbstractStatusRejected ): 
     162            return _("Rejected") 
     163        elif isinstance( status, review.AbstractStatusWithdrawn ): 
     164            return _("Withdrawn") 
     165        elif isinstance(status,review.AbstractStatusDuplicated): 
     166            return _("Duplicated") 
     167        elif isinstance(status,review.AbstractStatusMerged): 
     168            return _("Merged") 
     169        elif isinstance(status, (review.AbstractStatusProposedToAccept, review.AbstractStatusProposedToReject)): 
     170            return _("UnderReview") 
     171        return _("Submitted") 
     172 
    154173    def getVars( self ): 
    155174        vars = wcomponents.WTemplated.getVars( self ) 
    156175        cfaMgr = self._conf.getAbstractMgr() 
    157176 
    158         tzUtil = DisplayTZ(self._aw,self._conf) 
    159         tz = tzUtil.getDisplayTZ() 
    160  
    161         l = cfaMgr.getAbstractListForAvatar( self._aw.getUser() ) 
    162         l += cfaMgr.getAbstractListForAuthorEmail(self._aw.getUser().getEmail()) 
    163  
    164         l = sorted(set(l), key=lambda i:int(i.getId())) 
    165  
    166         if not l: 
    167             vars["abstracts"] = i18nformat("""<tr> 
    168                                         <td align="center" colspan="4" bgcolor="white"> 
    169                                             <br> 
    170                                             --_("No submitted abstract found within this conference")-- 
    171                                         </td> 
    172                                     </tr> 
    173                                     """) 
    174         else: 
    175             res = [] 
    176             for abstract in l: 
    177                 status = abstract.getCurrentStatus() 
    178                 statusLabel = _("SUBMITTED") 
    179                 if isinstance( status, review.AbstractStatusAccepted ): 
    180                     statusLabel = _("ACCEPTED") 
    181                     if status.getType() is not None and status.getType()!="": 
    182                         statusLabel="%s as %s"%(statusLabel,status.getType().getName()) 
    183                 elif isinstance( status, review.AbstractStatusRejected ): 
    184                     statusLabel = _("REJECTED") 
    185                 elif isinstance( status, review.AbstractStatusWithdrawn ): 
    186                     statusLabel = _("WITHDRAWN") 
    187                 elif isinstance(status,review.AbstractStatusDuplicated): 
    188                     statusLabel = _("DUPLICATED") 
    189                 elif isinstance(status,review.AbstractStatusMerged): 
    190                     statusLabel = _("MERGED") 
    191                 res.append(""" 
    192                 <tr> 
    193                     <td class="abstractLeftDataCell">%s</td> 
    194                     <td class="abstractDataCell"><input type="checkbox" name="abstracts" value=%s><a href=%s>%s</a></td> 
    195                     <td class="abstractDataCell" nowrap>%s</td> 
    196                     <td class="abstractDataCell">%s</td> 
    197                 </tr>"""%( \ 
    198         abstract.getId(), \ 
    199         quoteattr(abstract.getId()), \ 
    200         quoteattr(str(urlHandlers.UHAbstractDisplay.getURL(abstract))), \ 
    201         self.htmlText( abstract.getTitle() ), statusLabel, \ 
    202         getAdjustedDate(abstract.getModificationDate(),tz=tz).strftime("%Y-%m-%d %H:%M"))) 
    203             vars["abstracts"] = "".join(res) 
    204         vars["abstractsPDFURL"]=quoteattr(str(urlHandlers.UHAbstractsDisplayPDF.getURL(self._conf))) 
     177        abstracts = cfaMgr.getAbstractListForAvatar( self._aw.getUser() ) 
     178        abstracts += cfaMgr.getAbstractListForAuthorEmail(self._aw.getUser().getEmail()) 
     179 
     180        vars["abstracts"] = sorted(set(abstracts), key=lambda i:int(i.getId())) 
     181        vars["formatDate"] = lambda date: format_date(date, "d MMM yyyy") 
     182        vars["formatTime"] = lambda time: format_time(time, format="short", timezone=timezone(DisplayTZ(self._aw, self._conf).getDisplayTZ())) 
     183        vars["getAbstractStatus"] = lambda abstract: self._getAbstractStatus(abstract) 
     184        vars["conf"] = self._conf 
    205185        return vars 
    206186 
     
    271251        self._aw = aw 
    272252 
    273     def _getAuthorHTML( self, author ): 
    274         res = "%s, %s"%(author.getSurName().upper(), author.getFirstName()) 
    275         if author.getAffiliation() != "": 
    276             res = "%s (%s)"%(res, author.getAffiliation()) 
    277         return self.htmlText( res ) 
    278  
    279     def _getAdditionalFieldsHTML(self): 
    280         html="" 
    281         afm = self._abstract.getConference().getAbstractMgr().getAbstractFieldsMgr() 
    282         for f in afm.getActiveFields(): 
    283             id = f.getId() 
    284             caption = f.getName() 
    285             html+=""" 
    286                                         <tr> 
    287                                             <td> 
    288                                                 <table width="100%%" cellspacing="0"> 
    289                                                     <tr> 
    290                                                         <td class="displayField" valign="top" width="1%%" nowrap><b>%s:</b></td> 
    291                                                     </tr> 
    292                                                     <tr> 
    293                                                         <td valign="top"><table class="tablepre"><tr><td><pre>%s</pre></td></tr></table></td> 
    294                                                     </tr> 
    295                                                 </table> 
    296                                             </td> 
    297                                         </tr> 
    298                 """%(caption, self.htmlText(self._abstract.getField(id)) ) 
    299         return html 
    300  
    301253    def getVars( self ): 
    302254        vars = wcomponents.WTemplated.getVars( self ) 
     
    305257        tz = tzUtil.getDisplayTZ() 
    306258 
    307         vars["title"] = self.htmlText( self._abstract.getTitle() ) 
    308         vars["additionalFields"] = self._getAdditionalFieldsHTML() 
    309         vars["primary_authors"] = i18nformat("""--_("none")--""") 
    310         vars["authors"] = i18nformat("""--_("none")--""") 
    311         primary = [] 
    312         for author in self._abstract.getPrimaryAuthorList(): 
    313             primary.append( self._getAuthorHTML( author ) ) 
    314         authors = [] 
    315         for author in self._abstract.getCoAuthorList(): 
    316             authors.append( self._getAuthorHTML( author ) ) 
    317         if primary: 
    318             vars["primary_authors"] = "<br>".join( primary ) 
    319         if authors: 
    320             vars["authors"] = "<br>".join( authors ) 
    321         vars["speakers"] = i18nformat("""--_("none")--""") 
    322         speakers = [] 
    323         for spk in self._abstract.getSpeakerList(): 
    324             speakers.append( "%s"%self.htmlText( spk.getFullName() ) ) 
    325         if speakers: 
    326             vars["speakers"] = "<br>".join( speakers ) 
    327         vars["tracks"] = i18nformat("""--_("none")--""") 
    328         vars["contribType"] = i18nformat("""--_("none")--""") 
    329259        status=self._abstract.getCurrentStatus() 
    330260        if isinstance(status,review.AbstractStatusAccepted): 
    331             vars["contribType"]= i18nformat("""--_("none")--""") 
    332             if status.getType() is not None: 
    333                 vars["contribType"]=self.htmlText(status.getType().getName()) 
    334             vars["tracks"]="" 
    335             if status.getTrack() is not None: 
    336                 vars["tracks"]=self.htmlText(status.getTrack().getTitle()) 
     261            vars["contribType"]= status.getType() 
     262            vars["tracks"]= status.getTrack() 
    337263        else: 
    338             tracks = [] 
    339             for track in self._abstract.getTrackListSorted(): 
    340                 tracks.append( self.htmlText( track.getTitle() ) ) 
    341             if tracks: 
    342                 vars["tracks"] = ", ".join( tracks ) 
    343             if self._abstract.getContribType() is not None and \ 
    344                     self._abstract.getContribType()!="": 
    345                 vars["contribType"]=self.htmlText(self._abstract.getContribType().getName()) 
    346         if self._abstract.getConference().getContribTypeList() != []: 
    347             vars["contribType"]= i18nformat(""" 
    348                                 <tr> 
    349                                     <td> 
    350                                         <table width="100%%" cellspacing="0"> 
    351                                             <tr> 
    352                                                 <td nowrap class="displayField" valign="top"><b> _("Contribution type"):</b></td> 
    353                                                 <td width="100%%">%s</td> 
    354                                             </tr> 
    355                                         </table> 
    356                                     </td> 
    357                                         </tr> 
    358                                 """%vars["contribType"]) 
     264            vars["tracks"] = self._abstract.getTrackListSorted() 
     265            vars["contribType"]=self._abstract.getContribType() 
     266        vars["modifyURL"] = str(urlHandlers.UHAbstractModify.getURL(self._abstract)) 
     267        vars["withdrawURL"] = str(urlHandlers.UHAbstractWithdraw.getURL(self._abstract)) 
     268        vars["recoverURL"] = str(urlHandlers.UHAbstractRecovery.getURL(self._abstract)) 
     269 
     270        vars["attachments"] = fossilize(self._abstract.getAttachments().values(), ILocalFileAbstractMaterialFossil) 
     271        vars["abstract"] = self._abstract 
     272 
     273        vars["formatDate"] = lambda date: format_date(date, "d MMM yyyy") 
     274        vars["formatTime"] = lambda time: format_time(time, format="short", timezone=timezone(tz)) 
     275 
     276        vars["modifyDisabled"] = isinstance( status, (review.AbstractStatusSubmitted, review.AbstractStatusAccepted, 
     277                                                      review.AbstractStatusRejected, review.AbstractStatusDuplicated, review.AbstractStatusMerged ) ) 
     278        vars["withdrawDisabled"] = isinstance( status, (review.AbstractStatusAccepted, review.AbstractStatusRejected, 
     279                                                        review.AbstractStatusWithdrawn, review.AbstractStatusDuplicated, review.AbstractStatusMerged ) ) 
     280        status = self._abstract.getCurrentStatus() 
     281        if isinstance( status, review.AbstractStatusAccepted ): 
     282            vars["statusText"] = _("ACCEPTED ") 
     283            if status.getType() is not None and status.getType()!="": 
     284                vars["statusText"] += "as %s"% status.getType().getName() 
     285            vars["statusClass"] = "abstractStatusAccepted" 
     286            vars["statusComments"] = "" 
     287        elif isinstance( status, review.AbstractStatusRejected ): 
     288            vars["statusText"] = _("REJECTED") 
     289            vars["statusClass"] = "abstractStatusRejected" 
     290            vars["statusComments"] = "" 
     291        elif isinstance( status, review.AbstractStatusWithdrawn ): 
     292            vars["statusText"] = _("Withdrawn") 
     293            vars["statusClass"] = "abstractStatusWithdrawn" 
     294            vars["statusComments"] = i18nformat("""_("Withdrawn") by %s _("on") %s %s""")%(self.htmlText(status.getResponsible().getFullName()),format_date(status.getDate(), "d MMM yyyy"), format_time(status.getDate(), format="short", timezone=timezone(tz))) 
     295        elif isinstance(status,review.AbstractStatusDuplicated): 
     296            vars["statusText"] = _("Duplicated") 
     297            vars["statusClass"] = "abstractStatusDuplicated" 
     298            vars["statusComments"] = "" 
     299        elif isinstance(status,review.AbstractStatusMerged): 
     300            vars["statusText"] = _("Merged") 
     301            vars["statusClass"] = "abstractStatusMerged" 
     302            vars["statusComments"] = i18nformat("""_("Merged") into %s-%s""")%(self.htmlText(self._abstract.getId()),self.htmlText(self._abstract.getTitle())) 
     303        elif isinstance(status, (review.AbstractStatusProposedToAccept, review.AbstractStatusProposedToReject)): 
     304            vars["statusText"] = _("Under Review") 
     305            vars["statusClass"] = "abstractStatusUnderReview" 
     306            vars["statusComments"] = "" 
    359307        else: 
    360             vars["contribType"]="" 
    361         vars["submitter"] = "%s"%self.htmlText( self._abstract.getSubmitter().getFullName() ) 
    362         vars["submissionDate"] = getAdjustedDate(self._abstract.getSubmissionDate(),tz=tz).strftime("%d %B %Y %H:%M") 
    363         vars["modificationDate"] = getAdjustedDate(self._abstract.getModificationDate(),tz=tz).strftime("%d %B %Y %H:%M") 
    364         vars["modifyURL"] = quoteattr( str( urlHandlers.UHAbstractModify.getURL( self._abstract ) ) ) 
    365         vars["withdrawURL"] = quoteattr( str( urlHandlers.UHAbstractWithdraw.getURL( self._abstract ) ) ) 
    366         vars["status"] = _("SUBMITTED") 
    367         vars["btnWithdrawDisabled"] = "" 
    368         vars["btnModifyDisabled"] = "" 
    369         vars["btnRecover"] = "" 
    370         vars["btnManageMaterialDisabled"] = "disabled" 
    371         if not isinstance( status, review.AbstractStatusSubmitted ): 
    372             vars["btnModifyDisabled"] = "disabled" 
    373         if isinstance( status, review.AbstractStatusAccepted ): 
    374             vars["status"] = _("ACCEPTED") 
    375             vars["btnWithdrawDisabled"] = "disabled" 
    376             vars["btnModifyDisabled"] = "disabled" 
    377             vars["btnManageMaterialDisabled"] = "" 
    378         elif isinstance( status, review.AbstractStatusRejected ): 
    379             vars["status"] = _("REJECTED") 
    380             vars["btnModifyDisabled"] = "disabled" 
    381             vars["btnWithdrawDisabled"] = "disabled" 
    382         elif isinstance( status, review.AbstractStatusWithdrawn ): 
    383             vars["status"] = i18nformat(""" _("WITHDRAWN") <font size="-1">by %s _("on") %s</font>""")%(self.htmlText(status.getResponsible().getFullName()),getAdjustedDate(status.getDate(),tz=tz).strftime("%d %B %Y %H:%M")) 
    384             if status.getComments().strip() != "": 
    385                 vars["status"] = """%s<br><i>%s</i>"""%(vars["status"],self.htmlText(status.getComments())) 
    386             vars["btnWithdrawDisabled"] = "disabled" 
    387             vars["btnRecover"] = i18nformat("""<form action=%s method="POST"> 
    388                                         <td> 
    389                                             <input type="submit" class="btn" value="_("recover")"> 
    390                                         </td> 
    391                                     </form> 
    392                                 """)%( quoteattr( str( urlHandlers.UHAbstractRecovery.getURL( self._abstract ) ) )) 
    393         elif isinstance(status,review.AbstractStatusDuplicated): 
    394             vars["status"] = _("DUPLICATED") 
    395             vars["btnModifyDisabled"]="disabled" 
    396             vars["btnWithdrawDisabled"]="disabled" 
    397             vars["btnManageMaterialDisabled"] = "disabled" 
    398         elif isinstance(status,review.AbstractStatusMerged): 
    399             target=status.getTargetAbstract() 
    400             vars["status"] = i18nformat(""" _("MERGED") into %s-%s""")%(self.htmlText(target.getId()),self.htmlText(target.getTitle())) 
    401             vars["btnModifyDisabled"]="disabled" 
    402             vars["btnWithdrawDisabled"]="disabled" 
    403             vars["btnManageMaterialDisabled"] = "disabled" 
    404         elif isinstance(status, review.AbstractStatusProposedToAccept) or isinstance(status, review.AbstractStatusProposedToReject): 
    405             vars["status"] = "UNDER REVIEW" 
    406         vars["comments"] = self.htmlText( self._abstract.getComments() ) 
    407         vars["abstractId"] = self._abstract.getId() 
    408         vars["attachments"] = fossilize(self._abstract.getAttachments().values(), ILocalFileAbstractMaterialFossil) 
     308            vars["statusText"] = _("Submitted") 
     309            vars["statusClass"] = "abstractStatusSubmitted" 
     310            vars["statusComments"] = "" 
     311        vars["accessWrapper"] = self._aw 
    409312        return vars 
    410313 
     
    416319        wc = WAbstractDisplay( self._getAW(), self._abstract ) 
    417320        return wc.getHTML() 
    418  
    419     def _defineToolBar(self): 
    420         pdf=wcomponents.WTBItem( _("get PDF of the programme"), 
    421             icon = Config.getInstance().getSystemIconURL("pdf"), 
    422             actionURL=urlHandlers.UHAbstractDisplayPDF.getURL(self._abstract)) 
    423         self._toolBar.addItem(pdf) 
    424  
    425321 
    426322class WAbstractDataModification( wcomponents.WTemplated ): 
  • indico/MaKaC/webinterface/rh/CFADisplay.py

    r3a480c r386721  
    396396 
    397397 
    398 class RHAbstractsDisplayPDF(RHConferenceBaseDisplay): 
     398class RHUserAbstractsPDF(RHConferenceBaseDisplay): 
    399399 
    400400    def _checkProtection( self ): 
     
    403403            raise MaKaCError( _("The Call For Abstracts was disabled by the conference managers")) 
    404404 
    405     def _checkParams( self, params ): 
    406         RHConferenceBaseDisplay._checkParams( self, params ) 
    407         self._abstractIds = normaliseListParam( params.get("abstracts", []) ) 
    408  
    409405    def _process( self ): 
    410406        tz = timezoneUtils.DisplayTZ(self._aw,self._conf).getDisplayTZ() 
    411         filename = "Abstracts.pdf" 
     407        cfaMgr = self._conf.getAbstractMgr() 
     408        abstracts = cfaMgr.getAbstractListForAvatar( self._aw.getUser() ) 
     409        abstracts += cfaMgr.getAbstractListForAuthorEmail(self._aw.getUser().getEmail()) 
     410        self._abstractIds = [abstract.getId() for abstract in abstracts] 
    412411        if not self._abstractIds: 
    413412            return _("No abstract to print") 
     413 
     414        filename = "Abstracts.pdf" 
    414415        pdf = AbstractsToPDF(self._conf, self._abstractIds,tz=tz) 
    415416        data = pdf.getPDFBin() 
  • indico/MaKaC/webinterface/tpls/AbstractDisplay.tpl

    rd8fbd8 r386721  
     1<% import MaKaC.webinterface.urlHandlers as urlHandlers %> 
     2<% from MaKaC.paperReviewing import ConferencePaperReview as CPR %> 
     3<% from MaKaC.review import AbstractStatusWithdrawn %> 
    14 
    2 <table width="100%" align="center"> 
    3     <tr> 
    4         <td align="center"> 
    5             <table align="center"> 
    6                 <tr> 
    7                     <form action=${ modifyURL } method="POST"> 
    8                     <td> 
    9                         <input type="submit" class="btn" value="${ _("modify")}" ${ btnModifyDisabled }> 
    10                     </td> 
    11                     </form> 
    12                     <form action=${ withdrawURL } method="POST"> 
    13                     <td> 
    14                         <input type="submit" class="btn" value="${ _("withdraw")}" ${ btnWithdrawDisabled }> 
    15                     </td> 
    16                     </form> 
    17                     ${ btnRecover } 
    18                 </tr> 
    19             </table> 
    20         </td> 
    21     </tr> 
    22     <tr> 
    23         <td> 
    24             <table width="95%" style="border:1px solid #777777;" cellspacing="1" align="center"> 
    25              <tr> 
    26                     <td bgcolor="white"> 
    27                         <table width="90%" align="center"> 
    28                             <tr> 
    29                                 <td align="center"> 
    30                                     <font size="+1" color="black"><b>${ title }</b></font> 
    31                                 </td> 
    32                             </tr> 
    33                 <tr><td>&nbsp;</td></tr> 
    34                             <tr> 
    35                                 <td><br></td> 
    36                             </tr> 
    37                             <tr> 
    38                                 <td> 
    39                                     <table width="90%" align="center"> 
    40                                         <tr> 
    41                                             <td> 
    42                                                 <table width="100%" cellspacing="0"> 
    43                                                     <tr> 
    44                                                         <td nowrap class="displayField"><b> ${ _("Abstract ID")} :</b></td> 
    45                                                         <td width="100%">${ abstractId }</td> 
    46                                                     </tr> 
    47                                                 </table> 
    48                                             </td> 
    49                                         </tr> 
    50            ${ additionalFields } 
    51                                         <tr> 
    52                                             <td> 
    53                                                 <table width="100%" cellspacing="0"> 
    54                                                     <tr> 
    55                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Attached files")} :</b></td> 
    56                                                         <td width="100%"> 
    57                                                         % if len(attachments) == 0: 
    58                                                             <span>--none--</span> 
    59                                                         % else: 
    60                                                             % for file in attachments: 
    61                                                                 <div style="padding-bottom:3px;"><a href=${ file["url"] }>${ file["file"]["fileName"] }</a></div> 
    62                                                             % endfor 
    63                                                         % endif 
    64                                                         </td> 
    65                                                     </tr> 
    66                                                 </table> 
    67                                             </td> 
    68                                         </tr> 
    69                                         <tr> 
    70                                             <td> 
    71                                                 <table width="100%" cellspacing="0"> 
    72                                                     <tr> 
    73                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Primary authors")} :</b></td> 
    74                                                         <td width="100%">${ primary_authors }</td> 
    75                                                     </tr> 
    76                                                 </table> 
    77                                             </td> 
    78                                         </tr> 
    79                                         <tr> 
    80                                             <td> 
    81                                                 <table width="100%" cellspacing="0"> 
    82                                                     <tr> 
    83                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Co-Authors")} :</b></td> 
    84                                                         <td width="100%">${ authors }</td> 
    85                                                     </tr> 
    86                                                 </table> 
    87                                             </td> 
    88                                         </tr> 
    89                                         <tr> 
    90                                             <td><table width="100%" cellspacing="0"> 
    91                                                     <tr> 
    92                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Presenters")} :</b></td> 
    93                                                         <td width="100%">${ speakers }</td> 
    94                                                     </tr> 
    95                                                 </table> 
    96                                             </td> 
    97                                         </tr> 
    98                                         <tr> 
    99                                             <td> 
    100                                                 <table width="100%" cellspacing="0"> 
    101                                                     <tr> 
    102                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Track classification")} :</b></td> 
    103                                                         <td width="100%">${ tracks }</td> 
    104                                                     </tr> 
    105                                                 </table> 
    106                                             </td> 
    107                                         </tr> 
    108                                         ${ contribType } 
    109                                         <tr> 
    110                                             <td> 
    111                                                 <table cellspacing="0"> 
    112                                                     <tr> 
    113                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Submitted by")} :</b></td> 
    114                                                         <td>${ submitter }</td> 
    115                                                     </tr> 
    116                                                 </table> 
    117                                             </td> 
    118                                         </tr> 
    119                                         <tr> 
    120                                             <td> 
    121                                                 <table width="100%" cellspacing="0"> 
    122                                                     <tr> 
    123                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Submitted on")} :</b></td> 
    124                                                         <td width="100%">${ submissionDate }</td> 
    125                                                     </tr> 
    126                                                 </table> 
    127                                             </td> 
    128                                         </tr> 
    129                                         <tr> 
    130                                             <td> 
    131                                                 <table width="100%" cellspacing="0"> 
    132                                                     <tr> 
    133                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Last modified on")} :</b></td> 
    134                                                         <td width="100%">${ modificationDate }</td> 
    135                                                     </tr> 
    136                                                 </table> 
    137                                             </td> 
    138                                         </tr> 
    139                                         <tr> 
    140                                             <td> 
    141                                                 <table> 
    142                                                     <tr> 
    143                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Status")} :</b></td> 
    144                                                         <td>${ status }</td> 
    145                                                     </tr> 
    146                                                 </table> 
    147                                             </td> 
    148                                         </tr> 
    149                                         <tr> 
    150                                             <td> 
    151                                                 <table cellspacing="0"> 
    152                                                     <tr> 
    153                                                         <td nowrap class="displayField" valign="top"><b> ${ _("Comments")} :</b></td> 
    154                                                     </tr> 
    155                                                     <tr> 
    156                                                         <td width="30"></td> 
    157                                                         <td><pre>${ comments }</pre></td> 
    158                                                     </tr> 
    159                                                 </table> 
    160                                             </td> 
    161                                         </tr> 
    162                                     </table> 
    163                                 </td> 
    164                             </tr> 
    165                         </table> 
    166                     </td> 
    167                 </tr> 
    168             </table> 
    169         </td> 
    170     </tr> 
    171     <tr> 
    172         <td align="center"> 
    173             <table align="center"> 
    174                 <tr> 
    175                     <form action=${ modifyURL } method="POST"> 
    176                     <td> 
    177                         <input type="submit" class="btn" value="${ _("modify")}" ${ btnModifyDisabled }> 
    178                     </td> 
    179                     </form> 
    180                     <form action=${ withdrawURL } method="POST"> 
    181                     <td> 
    182                         <input type="submit" class="btn" value="${ _("withdraw")}" ${ btnWithdrawDisabled }> 
    183                     </td> 
    184                     </form> 
    185                     ${ btnRecover } 
    186                 </tr> 
    187             </table> 
    188         </td> 
    189     </tr> 
    190 </table> 
    191 <br> 
     5<div id="buttonBar" class="abstractButtonBar"> 
     6    % if abstract.canModify(accessWrapper): 
     7        % if not modifyDisabled: 
     8            <a href="${modifyURL}" style="font-weight:bold" >${_("Edit")}</a> | 
     9        % endif 
     10        % if isinstance(abstract.getCurrentStatus(), AbstractStatusWithdrawn): 
     11            <a href="${recoverURL}">${_("Recover")}</a> | 
     12        % elif not withdrawDisabled: 
     13            <a href="${withdrawURL}" ">${_("Withdraw")}</a> | 
     14        % endif 
     15    % endif 
     16    <a href="${str(urlHandlers.UHAbstractDisplayPDF.getURL(abstract))}" target="_blank">${_("PDF")}</a> 
     17</div> 
     18<h1 class="abstractTitle"> 
     19    ${abstract.getTitle()} 
     20</h1> 
     21<div> 
     22    <div class="abstractMainContent"> 
     23        <div class="abstractInformation"> 
     24            <div class="abstractSubmitter"> 
     25                ${("Submitted by")} <span style="font-weight: bold">${abstract.getSubmitter().getStraightFullName()} </span> 
     26                ${_("on")} 
     27                <span style="font-weight: bold">${formatDate(abstract.getSubmissionDate())}</span> 
     28                ${_("at")} 
     29                <span style="font-weight: bold">${formatTime(abstract.getSubmissionDate())}</span> 
     30            </div> 
     31            <div class="abstractHeader"> 
     32                <div> 
     33                    <span style="font-weight:bold">${("Id")}:</span> 
     34                    ${abstract.getId()} 
     35                </div> 
     36                <div> 
     37                    <span style="font-weight: bold">${_("Last modification")}:</span> 
     38                    ${formatDate(abstract.getModificationDate())} ${formatTime(abstract.getModificationDate())} 
     39                </div> 
     40                % if contribType: 
     41                <div> 
     42                    <span style="font-weight:bold">${("Contribution type")}:</span> 
     43                    ${contribType.getName()} 
     44                </div> 
     45                % endif 
     46                % if False: 
     47                <div> 
     48                    <span style="font-weight:bold">${("Track classification")}:</span> 
     49                    ${",".join([t.getTitle() for t in tracks])} 
     50                </div> 
     51                % endif 
     52            </div> 
     53        </div> 
     54        <div class="abstractDetail"> 
     55            % for f in abstract.getConference().getAbstractMgr().getAbstractFieldsMgr().getActiveFields(): 
     56                    % if abstract.getField(f.getId()): 
     57                    <div class="abstractSection"> 
     58                        <h2 class="abstractSectionTitle">${f.getName()}</h2> 
     59                        <div class="abstractSectionContent">${abstract.getField(f.getId())} 
     60                        </div> 
     61                    </div> 
     62                    % endif 
     63            % endfor 
     64            % if abstract.getComments(): 
     65                <div class="abstractSection"> 
     66                    <h2 class="abstractSectionTitle">${_("Comments")}</h2> 
     67                    <div class="abstractSectionContent">${abstract.getComments()}</div> 
     68                </div> 
     69            % endif 
     70        </div> 
     71    </div> 
     72 
     73    <div class="abstractRightPanel"> 
     74 
     75        <div class="abstractStatusSection" style="border-bottom:1px solid #eaeaea; padding-bottom:5px;"> 
     76            <h2 class="abstractSectionTitle">${_("Abstract status")}</h2> 
     77            <div> 
     78                <div class="abstractStatus ${statusClass}">${statusText}</div> 
     79            </div> 
     80        </div> 
     81        % if abstract.getPrimaryAuthorList(): 
     82            <div class="abstractRightPanelSection"> 
     83                <h2 class="abstractSectionTitle">${_("Primary authors")}</h2> 
     84                <ul> 
     85                % for pa in abstract.getPrimaryAuthorList(): 
     86                    <li>${pa.getStraightFullName()} 
     87                        (${pa.getAffiliation()}) 
     88                % endfor 
     89                </ul> 
     90            </div> 
     91        % endif 
     92        % if abstract.getCoAuthorList(): 
     93            <div class="abstractRightPanelSection"> 
     94                <h2 class="abstractSectionTitle">${_("Co-authors")}</h2> 
     95                <ul> 
     96                % for ca in abstract.getCoAuthorList(): 
     97                    <li>${ca.getStraightFullName()} 
     98                        (${ca.getAffiliation()}) 
     99                % endfor 
     100                </ul> 
     101            </div> 
     102        % endif 
     103        % if abstract.getSpeakerList(): 
     104            <div class="abstractRightPanelSection"> 
     105                <h2 class="abstractSectionTitle">${_("Presenters")}</h2> 
     106                <ul> 
     107                % for sp in abstract.getSpeakerList(): 
     108                    <li>${sp.getStraightFullName()} 
     109                        (${sp.getAffiliation()}) 
     110                % endfor 
     111                </ul> 
     112            </div> 
     113        % endif 
     114        % if len(attachments) != 0: 
     115            <div class="abstractRightPanelSection"> 
     116                <h2 class="abstractSectionTitle">${_("Attached files")}</h2> 
     117                <ul> 
     118                    % for file in attachments: 
     119                        <li><a href="${file['url']}">${ file["file"]["fileName"] }</a> 
     120                    % endfor 
     121                </ul> 
     122            </div> 
     123        % endif 
     124    </div> 
     125</div> 
     126<script type="text/javascript"> 
     127% if statusComments: 
     128    $(".abstractStatus").qtip({ 
     129        content: " ${statusComments}", 
     130        position :{ 
     131            at: "bottom middle", 
     132            my: "top middle" 
     133        } 
     134    }); 
     135% endif 
     136 
     137 
     138</script> 
  • indico/MaKaC/webinterface/tpls/ContributionDisplayFull.tpl

    r3982db r386721  
    4747<%block name="paperReview"> 
    4848    % if reviewingActive: 
    49     <div class="contributionReviewingSection" style="border-bottom:1px solid #eaeaea; padding-bottom:5px;"> 
     49    <div class="contributionReviewingSection"> 
    5050        <h2 class="contributionSectionTitle">${_("Call for papers")}</h2> 
    5151            <div> 
  • indico/MaKaC/webinterface/tpls/UserAbstracts.tpl

    r988cfe r386721  
     1<div style="border-bottom: 1px solid #EAEAEA; padding-bottom: 5px; margin-bottom: 15px;"> 
     2    % if abstracts: 
     3    <form action="${str(urlHandlers.UHUserAbstractsPDF.getURL(conf))}" method="post" target="_blank" id="formAbstracts"> 
     4        <span class="fakeLink" id="exportPDF">${ _("Export to PDF")}</span> 
     5    </form> 
     6    % else: 
     7        <span class="collShowBookingsText">${_("No submitted abstract found within this conference")}</span> 
     8    % endif 
     9</div> 
     10<div id="abstractList"> 
     11    % for abstract in abstracts: 
     12    <div class="abstractListAbstractItem"> 
     13        <div> 
     14            <a href="${str( urlHandlers.UHAbstractDisplay.getURL( abstract ))}" style="font-size:14px">${abstract.getTitle()} </a> 
     15        </div> 
     16        <div style="line-height:17px; font-size: 12px; color:#666666;"> 
     17            <div style="display:inline"><span style="font-weight:bold">${("Id")}: </span>${abstract.getId()}</div> 
     18            <div style="display:inline"><span style="font-weight:bold">${("Status")}: </span>${getAbstractStatus(abstract)}</div> 
     19            <div style="display:inline"><span style="font-weight:bold">${("Last modified")}: </span>${formatDate(abstract.getModificationDate()) + " "+ formatTime(abstract.getModificationDate())}</div> 
     20        </div> 
     21    </div> 
     22    % endfor 
     23</div> 
    124 
    2 <table width="100%" align="center"> 
    3     <tr> 
    4         <td><br> 
    5         </td> 
    6     </tr> 
    7     <tr> 
    8         <td> 
    9             <table style="border-left:1px solid #777777;border-top:1px solid #777777;" width="95%" align="center" cellspacing="0"> 
    10                 <tr> 
    11                     <td class="groupTitle" colspan="4" style="background:#E5E5E5; color:gray; border-top:2px solid #FFFFFF; border-left:2px solid #FFFFFF">&nbsp;&nbsp;&nbsp; ${ _("Abstracts")}</td> 
    12                 </tr> 
    13                 <tr> 
    14                     <td colspan="4">&nbsp ${ _("Click on the title of an abstract to see its details, or if you want to modify or withdraw it")}</td> 
    15                 </tr> 
    16                 <tr> 
    17                     <td nowrap class="titleCellFormat" style="border-right:5px solid #FFFFFF;border-left:5px solid #FFFFFF;border-bottom: 1px solid #5294CC;"> ${ _("ID")}</td> 
    18                     <td nowrap class="titleCellFormat" style="border-right:5px solid #FFFFFF;border-left:5px solid #FFFFFF;border-bottom: 1px solid #5294CC;"> ${ _("Title")}</td> 
    19                     <td nowrap class="titleCellFormat" style="border-right:5px solid #FFFFFF;border-left:5px solid #FFFFFF;border-bottom: 1px solid #5294CC;"> ${ _("Status")}</td> 
    20                     <td nowrap class="titleCellFormat" style="border-right:5px solid #FFFFFF;border-left:5px solid #FFFFFF;border-bottom: 1px solid #5294CC;"> ${ _("Modification date")}</td> 
    21                 </tr> 
    22                 <form action=${ abstractsPDFURL } method="post" target="_blank"> 
    23                 ${ abstracts } 
    24                 <tr><td colspan="4">&nbsp;</td></tr> 
    25                 <tr> 
    26                     <td align="center" colspan="4"> 
    27                         <input type="submit" class="btn" value="${ _("get PDF of selected abstracts")}"> 
    28                     </td> 
    29                     </form> 
    30                 </tr> 
    31             </table> 
    32         </td> 
    33     </tr> 
    34 </table> 
    35 <br> 
     25<script type="text/javascript"> 
     26IndicoUI.executeOnLoad(function(){ 
     27    $("#exportPDF").click(function(){ 
     28        $("#formAbstracts").submit(); 
     29    }); 
     30}); 
     31</script> 
  • indico/MaKaC/webinterface/urlHandlers.py

    rae6d2f r386721  
    797797    _relativeURL = "abstractDisplay.py/pdf" 
    798798 
    799 class UHAbstractsDisplayPDF( URLHandler ): 
    800     _relativeURL = "abstractDisplay.py/abstractsPdf" 
    801  
    802  
    803799class UHAbstractConfManagerDisplayPDF( URLHandler ): 
    804800    _relativeURL = "abstractManagment.py/abstractToPDF" 
     
    840836    _relativeURL = "userAbstracts.py" 
    841837 
     838class UHUserAbstractsPDF( URLHandler ): 
     839    _relativeURL = "userAbstracts.py/pdf" 
    842840 
    843841class UHAbstractModify( URLHandler ): 
  • indico/htdocs/abstractDisplay.py

    r633342 r386721  
    2525    return CFADisplay.RHAbstractDisplay( req ).process( params ) 
    2626 
    27  
    2827def pdf(req, **params): 
    2928    return CFADisplay.RHAbstractDisplayPDF( req ).process( params ) 
    3029 
    31  
    32 def abstractsPdf(req, **params): 
    33     return CFADisplay.RHAbstractsDisplayPDF( req ).process( params ) 
    34  
    3530def getAttachedFile(req,**params): 
    3631    return CFADisplay.RHGetAttachedFile(req).process(params) 
  • indico/htdocs/css/Default.css

    rae6d2f r386721  
    79667966    padding: 0 0 5px 5px; 
    79677967    z-index:999; 
     7968} 
    79687969 
    79697970.contributionListFiltersContainer { 
     
    79797980} 
    79807981 
    7981 .contributionListContribItem { 
     7982.contributionListContribItem, .abstractListAbstractItem { 
    79827983    border-bottom: 1px solid #EBEBEB; 
    79837984    padding-bottom: 5px; 
     
    80088009} 
    80098010 
    8010 .contributionListContribHeader, .contributionHeader, .subContributionHeader { 
     8011.contributionListContribHeader, .contributionHeader, .subContributionHeader, .abstractHeader { 
    80118012    line-height:17px; 
    80128013    color:#888; 
     
    80228023} 
    80238024 
    8024 .contributionButtonBar, .subContributionButtonBar, .materialButtonBar{ 
     8025.contributionButtonBar, .subContributionButtonBar, .materialButtonBar, .abstractButtonBar{ 
    80258026    text-align: right; 
    80268027    margin-bottom: 5px; 
    80278028} 
    80288029 
    8029 .contributionTitle, .subContributionTitle, .materialTitle { 
     8030.contributionTitle, .subContributionTitle, .materialTitle, .abstractTitle { 
    80308031    font-size: 18px; 
    80318032    font-weight: bold; 
     
    80378038} 
    80388039 
    8039 .contributionMainContent, .subContributionMainContent, .materialMainContent { 
     8040.contributionMainContent, .subContributionMainContent, .materialMainContent, .abstractMainContent{ 
    80408041    float:left; 
    80418042    width:500px; 
    80428043} 
    8043 .contributionRightPanel, .subContributionRightPanel { 
     8044.contributionRightPanel, .subContributionRightPanel, .materialRightPanel, .abstractRightPanel{ 
    80448045    float:right; 
    80458046    width: 200px; 
     
    80488049    border-left: 1px solid #EAEAEA; 
    80498050} 
    8050 .contributionRightPanelSection, .subContributionRightPanelSection { 
     8051.contributionRightPanelSection, .subContributionRightPanelSection, .abstractRightPanelSection{ 
    80518052    border-bottom: 1px solid #EAEAEA; 
    80528053    font-size: 11px; 
     
    80568057} 
    80578058 
    8058 .contributionRightPanelSection ul, .subContributionRightPanelSection ul, .materialSection ul { 
     8059.contributionRightPanelSection ul, .subContributionRightPanelSection ul, .materialSection ul, .abstractRightPanelSection ul{ 
    80598060    list-style: none inside none; 
    80608061    margin: 0px; 
     
    80628063} 
    80638064 
    8064 .contributionRightPanelSection li, .subContributionRightPanelSection li{ 
     8065.contributionRightPanelSection li, .subContributionRightPanelSection li, .materialSection li, .abstractRightPanelSection li{ 
    80658066    margin-bottom: 3px; 
    80668067} 
     
    80728073} 
    80738074 
    8074 .contributionRightPanelSection a, .subContributionRightPanelSection a{ 
     8075.contributionRightPanelSection a, .subContributionRightPanelSection a, .abstractRightPanelSection a{ 
    80758076    font-size: 11px; 
    80768077    word-wrap: break-word; 
     
    80878088} 
    80888089 
    8089 .contributionInformation, .subContributionInformation { 
     8090.contributionInformation, .subContributionInformation, .abstractInformation { 
    80908091    border-bottom: 1px solid #EAEAEA; 
    80918092    margin-bottom: 15px; 
     
    80938094} 
    80948095 
    8095 .contributionDetail, .subContributionDetail, .materialDetail {} 
    8096  
    8097 .contributionSection, .subContributionSection, .materialSection { 
     8096.contributionDetail, .subContributionDetail, .materialDetail, .abstractDetail {} 
     8097 
     8098.contributionSection, .subContributionSection, .materialSection, .abstractSection { 
    80988099    margin-bottom: 10px; 
    80998100} 
    8100 .contributionSectionTitle, .subContributionSectionTitle { 
     8101.contributionSectionTitle, .subContributionSectionTitle, .abstractSectionTitle { 
    81018102    color: #444; 
    81028103    font-size: 14px; 
     
    81058106    margin-top: 0; 
    81068107} 
    8107 .contributionSectionContent, .subContributionSectionContent, .materialSectionContent { 
     8108.contributionSectionContent, .subContributionSectionContent, .materialSectionContent, .abstractSectionContent { 
    81088109    font-size: 12px; 
    81098110    line-height: 1.5em; 
     
    81138114} 
    81148115 
    8115 .contributionSpeakerList,  .subContributionSpeakerList{ 
     8116.contributionSpeakerList,  .subContributionSpeakerList, .abstractSubmitter{ 
    81168117    margin-bottom:3px; 
    81178118    color:#666666; 
    81188119} 
    81198120 
    8120 .contributionReviewingSection { 
     8121.contributionReviewingSection, .abstractStatusSection { 
    81218122    margin-bottom: 5px; 
    81228123    border-radius: 5px; 
    81238124    color: #888; 
    8124 } 
    8125  
    8126 .contributionReviewingStatus { 
     8125    border-bottom:1px solid #eaeaea; 
     8126    padding-bottom:5px; 
     8127} 
     8128 
     8129.contributionReviewingStatus, .abstractStatus { 
    81278130    border-radius: 5px; 
    81288131    margin-top: 5px; 
     
    81348137} 
    81358138 
    8136 .contributionReviewingStatusRejected { 
    8137     background: none repeat scroll 0 0 #B93725; /*#881122;*/ 
    8138 } 
    8139  
    8140 .contributionReviewingStatusAccepted { 
     8139.contributionReviewingStatusRejected, .abstractStatusRejected, .abstractStatusDuplicated, .abstractStatusWithdrawn { 
     8140    background: none repeat scroll 0 0 #B93725; 
     8141} 
     8142 
     8143.contributionReviewingStatusAccepted, .abstractStatusAccepted { 
    81418144    background: none repeat scroll 0 0 #9AC33A; 
    81428145} 
    81438146 
    8144 .contributionReviewingStatusPending { 
     8147.contributionReviewingStatusPending, .abstractStatusUnderReview { 
    81458148    background: none repeat scroll 0 0 #A4CCC9; 
    81468149} 
    81478150 
    8148 .contributionReviewingStatusCorrected { 
     8151.contributionReviewingStatusCorrected, .abstractStatusMerged { 
    81498152    background: none repeat scroll 0 0 #D8B81A; 
    81508153} 
    81518154 
    8152 .contributionReviewingStatusNotSubmitted { 
     8155.contributionReviewingStatusNotSubmitted, .abstractStatusSubmitted { 
    81538156    background: none repeat scroll 0 0 #BCB8A3; 
    81548157} 
  • indico/htdocs/userAbstracts.py

    rbdd862 r386721  
    2727    return CFADisplay.RHUserAbstracts( req ).process( params ) 
    2828 
     29def pdf(req, **params): 
     30    return CFADisplay.RHUserAbstractsPDF( req ).process( params ) 
Note: See TracChangeset for help on using the changeset viewer.