Changeset 3ffc0d in indico


Ignore:
Timestamp:
03/02/11 14:03:37 (2 years ago)
Author:
Jose Benito <jose.benito.gonzalez@…>
Branches:
master, burotel, hello-world-walkthrough, ipv6, v0.98-series, v0.98.2, v0.98.3, v0.98b1, v0.98b2, v0.99, 051b2622c51afb171a1dedb46a0df4fbb0cbd02e, 0da0c1403bae8e51d8229f460181c71b9e6dda72
Children:
049bc3
Parents:
6ed0cd
git-author:
Alexis Castilla Hernandez <alexis.castilla.hernandez@…> (02/09/11 14:50:19)
git-committer:
Jose Benito <jose.benito.gonzalez@…> (03/02/11 14:03:37)
Message:

[IMP] New tab reviewing in call for abstracts

  • New tab reviewing with 3 subtabs
  • Refactored the code. Separated abstract reviewing from reviewing files and added abstractReviewing files
  • Renamed one .tlp file
  • Changed the menu entry reviewing by paper reviewing
Location:
indico
Files:
3 added
1 deleted
15 edited
1 moved

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/conference.py

    r717e50 r3ffc0d  
    4949from MaKaC.contributionReviewing import ReviewManager 
    5050from reviewing import ConferencePaperReview as ConferencePaperReview 
    51 from reviewing import ConferenceAbstractReview as ConferenceAbstractReview 
     51from abstractReviewing import ConferenceAbstractReview as ConferenceAbstractReview 
    5252 
    5353from pytz import timezone 
  • indico/MaKaC/reviewing.py

    r6ed0cd r3ffc0d  
    11671167 
    11681168 
    1169 class ConferenceAbstractReview(Persistent): 
    1170     """ 
    1171     This class manages the parameters of the abstract reviewing. 
    1172     """ 
    1173  
    1174     def __init__( self, conference): 
    1175         """ Constructor. 
    1176             conference must be a Conference object (not an id). 
    1177         """ 
    1178         self._conference = conference 
    1179         self._reviewingQuestions = [] 
    1180  
    1181         # by default 
    1182         self._numberOfAnswers = 7 
    1183         self._scaleLower = 0 
    1184         self._scaleHigher = 10 
    1185         self._radioButtonsLabels = ["0", "", "", "5", "", "", "10"] 
    1186         self._radioButtonsTitles = ["0", "1.7", "3.3", "5", "6.7", "8.3", "10"] 
    1187         self._questionCounter = Counter(1) 
    1188         self._answerCounter = Counter(1) 
    1189         self.notifyModification() 
    1190  
    1191     def getConference(self): 
    1192         """ Returns the parent conference of the ConferencePaperReview object 
    1193         """ 
    1194         return self._conference 
    1195  
    1196     def addReviewingQuestion(self, text): 
    1197         """ Adds this question at the end of the list of questions 
    1198         """ 
    1199         newId = self.getNewQuestionId() 
    1200         question = Question(newId,text) 
    1201         self._reviewingQuestions.append(question) 
    1202         self.notifyModification() 
    1203  
    1204     def getReviewingQuestions(self): 
    1205         """ Returns the list of questions 
    1206         """ 
    1207         # Filter the non visible questions 
    1208         #visibleQuestions = [] 
    1209         #for question in self._reviewingQuestions: 
    1210             #if question.getVisible(): 
    1211             #    visibleQuestions.append(question) 
    1212         #return visibleQuestions 
    1213         return self._reviewingQuestions 
    1214  
    1215     def removeReviewingQuestion(self, questionId, keepJud): 
    1216         """ Removes a question from the list 
    1217         """ 
    1218         question = self.getQuestionById(questionId) 
    1219  
    1220         if question: 
    1221             #if keepJud: 
    1222             #    question.setVisible(False) 
    1223             #else: 
    1224             self._reviewingQuestions.remove(question) 
    1225             self.notifyModification() 
    1226         else: 
    1227             raise MaKaCError("Cannot remove a question which doesn't exist") 
    1228  
    1229     def editReviewingQuestion(self, questionId, text): 
    1230         """ Edit the text of a question """ 
    1231         question = self.getQuestionById(questionId) 
    1232  
    1233         if question: 
    1234             question.setText(text) 
    1235             self.notifyModification() 
    1236         else: 
    1237             raise MaKaCError("Cannot edit a question which doesn't exist") 
    1238  
    1239     def getQuestionNames(self): 
    1240         """ Return the names of the questions which are shown in the webpage """ 
    1241         names = [] 
    1242         for question in self._reviewingQuestions: 
    1243             names.append(question.getName()) 
    1244         return names 
    1245  
    1246     def getQuestionById(self, questionId): 
    1247         """ Return the question with the especified id """ 
    1248         for question in self._reviewingQuestions: 
    1249             if (questionId == question.getId()): 
    1250                 return question 
    1251  
    1252     def setNumberOfAnswers(self, num): 
    1253         """ Set the number of possible answers (radio buttons) """ 
    1254         self._numberOfAnswers = num 
    1255  
    1256     def getNumberOfAnswers(self): 
    1257         """ Returns the number of possible answers """ 
    1258         try : 
    1259             if self._numberOfAnswers: 
    1260                 pass 
    1261         except AttributeError : 
    1262             self._numberOfAnswers = 7 
    1263         return self._numberOfAnswers 
    1264  
    1265     def setRadioButtonsLabels(self): 
    1266         """ Set the labels for the radio buttons """ 
    1267         self._radioButtonsLabels = [] 
    1268         i = 0 
    1269         while i<self.getNumberOfAnswers(): 
    1270             if i == 0: # first label 
    1271                 self._radioButtonsLabels.append(str(self.getScaleLower())) 
    1272             elif i == self._numberOfAnswers - 1: # last label 
    1273                 self._radioButtonsLabels.append(str(self.getScaleHigher())) 
    1274             # middle label: exist middle radio button, i has the correct value, exist middle value in the scale 
    1275             elif (self.getNumberOfAnswers() % 2 == 1) and  (i ==  (self.getNumberOfAnswers() - 1) / 2): 
    1276                 # check if we need float division 
    1277                 if ((self.getScaleLower() + self.getScaleHigher()) % 2 == 0): 
    1278                     label = str((self.getScaleLower() + self.getScaleHigher()) / 2) 
    1279                     self._radioButtonsLabels.append(label) 
    1280                 else: 
    1281                     label = str((self.getScaleLower() + self.getScaleHigher()) / float(2)) 
    1282                     self._radioButtonsLabels.append(label) 
    1283             else: 
    1284                 self._radioButtonsLabels.append("") 
    1285             i += 1 
    1286  
    1287     def setRadioButtonsTitles(self): 
    1288         """ Set the titles for the radio buttons """ 
    1289         self._radioButtonsTitles = [] 
    1290         i = 0 
    1291         while i<self.getNumberOfAnswers(): 
    1292             # check if we need float division 
    1293             if ((i*self.getScaleHigher()) % (self.getNumberOfAnswers()-1) == 0): 
    1294                 title = "%.0f" % (((self.getScaleHigher()-self.getScaleLower())/float(self.getNumberOfAnswers()-1))*i + self.getScaleLower()) 
    1295                 self._radioButtonsTitles.append(title) 
    1296             else: 
    1297                 title = "%.1f" % (((self.getScaleHigher()-self.getScaleLower())/float(self.getNumberOfAnswers()-1))*i + self.getScaleLower()) 
    1298                 self._radioButtonsTitles.append(title) 
    1299             i += 1 
    1300  
    1301     def getRadioButtonsTitles(self): 
    1302         """ Get the titles for the radio buttons """ 
    1303         try : 
    1304             if self._radioButtonsTitles: 
    1305                 pass 
    1306         except AttributeError : 
    1307             self._radioButtonsTitles = ["0", "1.7", "3.3", "5", "6.7", "8.3", "10"] 
    1308         return self._radioButtonsTitles 
    1309  
    1310     def getScaleLower(self): 
    1311         try : 
    1312             if self._scaleLower: 
    1313                 pass 
    1314         except AttributeError : 
    1315             self._scaleLower = 0 
    1316         return self._scaleLower 
    1317  
    1318     def getScaleHigher(self): 
    1319         try : 
    1320             if self._scaleHigher: 
    1321                 pass 
    1322         except AttributeError : 
    1323             self._scaleHigher = 10 
    1324         return self._scaleHigher 
    1325  
    1326     def getRadioButtonsLabels(self): 
    1327         """ Get the labels for the radio buttons """ 
    1328         try : 
    1329             if self._radioButtonsLabels: 
    1330                 pass 
    1331         except AttributeError : 
    1332             self._radioButtonsLabels = ["0", "", "", "5", "", "", "10"] 
    1333         return self._radioButtonsLabels 
    1334  
    1335     def setScale(self, min, max): 
    1336         """ Set the scale for the rating and labels """ 
    1337         self._scaleLower = min 
    1338         self._scaleHigher = max 
    1339  
    1340     def getNewQuestionId(self): 
    1341         """ Returns a new an unused questionId 
    1342             Increments the questionId counter 
    1343         """ 
    1344         return self._questionCounter.newCount() 
    1345  
    1346     def getNewAnswerId(self): 
    1347         """ Returns a new an unused answerId 
    1348             Increments the answerId counter 
    1349         """ 
    1350         return self._answerCounter.newCount() 
    1351  
    1352     def notifyModification(self): 
    1353         """ Notifies the DB that a list or dictionary attribute of this object has changed 
    1354         """ 
    1355         self._p_changed = 1 
    1356  
    1357  
    1358  
    13591169class Question(Persistent, Fossilizable): 
    13601170 
  • indico/MaKaC/services/implementation/reviewing.py

    r6ed0cd r3ffc0d  
    822822        return self.getJudgementObject().getAnswers() 
    823823 
    824 ##################################### 
    825 ###  Abstract reviewing classes 
    826 ##################################### 
    827 class AbstractReviewingBase(ConferenceModifBase): 
    828  
    829     ''' Base Clase for Abstract Reviewing''' 
    830  
    831     def _checkParams(self): 
    832         ConferenceModifBase._checkParams(self) 
    833         self._confAbstractReview = self._conf.getConfAbstractReview() 
    834  
    835  
    836 class AbstractReviewingChangeNumAnswers(AbstractReviewingBase): 
    837  
    838     ''' Change the number of answers per question ''' 
    839  
    840     def _checkParams(self): 
    841         AbstractReviewingBase._checkParams(self) 
    842         self._value = int(self._params.get("value")) 
    843  
    844     def _getAnswer(self): 
    845         self._confAbstractReview.setNumberOfAnswers(self._value) 
    846         # update the labels 
    847         self._confAbstractReview.setRadioButtonsLabels() 
    848         self._confAbstractReview.setRadioButtonsTitles() 
    849         return self._value 
    850  
    851  
    852 class AbstractReviewingChangeScale(AbstractReviewingBase): 
    853  
    854     ''' Change the limits for the ratings ''' 
    855  
    856     def _checkParams(self): 
    857         AbstractReviewingBase._checkParams(self) 
    858         self._value = self._params.get("value") 
    859         self._min = int(self._value["min"]) 
    860         self._max = int(self._value["max"]) 
    861  
    862     def _getAnswer(self): 
    863         self._confAbstractReview.setScale(self._min, self._max) 
    864         # recalculate the current values for the judgements 
    865         self._conf.getAbstractMgr().recalculateAbstractsRating(self._min, self._max) 
    866         # update the labels and titles again 
    867         self._confAbstractReview.setRadioButtonsLabels() 
    868         self._confAbstractReview.setRadioButtonsTitles() 
    869         return self._value 
    870  
    871  
    872 class AbstractReviewingUpdateExampleQuestion(AbstractReviewingBase): 
    873  
    874     ''' Get the required data for the example question ''' 
    875  
    876     def _getAnswer(self): 
    877         # get the necessary values 
    878         numAnswers = range(self._confAbstractReview.getNumberOfAnswers()) 
    879         labels = self._confAbstractReview.getRadioButtonsLabels() 
    880         rbValues = self._confAbstractReview.getRadioButtonsTitles() 
    881         return {"numberAnswers": numAnswers, "labels": labels, "rbValues": rbValues} 
    882  
    883  
    884 class AbstractReviewingGetQuestions(AbstractReviewingBase): 
    885  
    886     ''' Get the current list of questions ''' 
    887  
    888     def _getAnswer(self): 
    889         reviewingQuestions = self._confAbstractReview.getReviewingQuestions() 
    890         fossils = [] 
    891         for question in reviewingQuestions: 
    892             fossils.append(fossilize(question)) 
    893         return fossils 
    894  
    895  
    896 class AbstractReviewingAddQuestion(AbstractReviewingBase): 
    897  
    898     ''' Add a new question ''' 
    899  
    900     def _checkParams(self): 
    901         AbstractReviewingBase._checkParams(self) 
    902         self._value = self._params.get("value") # value is the question text 
    903  
    904     def _getAnswer(self): 
    905         self._confAbstractReview.addReviewingQuestion(self._value) 
    906         reviewingQuestions = self._confAbstractReview.getReviewingQuestions() 
    907         fossils = [] 
    908         for question in reviewingQuestions: 
    909             fossils.append(fossilize(question)) 
    910         return fossils 
    911  
    912  
    913 class AbstractReviewingRemoveQuestion(AbstractReviewingBase): 
    914  
    915     ''' Remove a question ''' 
    916  
    917     def _checkParams(self): 
    918         AbstractReviewingBase._checkParams(self) 
    919         self._value = self._params.get("value") # value is the question id 
    920         self._keepJud = self._params.get("keepJud") # keep the previous judgements of the question 
    921  
    922     def _getAnswer(self): 
    923         # remove the question 
    924         self._confAbstractReview.removeReviewingQuestion(self._value, self._keepJud) 
    925         if not self._keepJud: 
    926             # Purge all the judgements already exist with answers of this question 
    927             self._conf.getAbstractMgr().removeAnswersOfQuestion(self._value) 
    928             self._conf.getAbstractMgr().recalculateAbstractsRating(self._confAbstractReview.getScaleLower(), self._confAbstractReview.getScaleHigher()) 
    929         reviewingQuestions = self._confAbstractReview.getReviewingQuestions() 
    930         # Build the answer 
    931         fossils = [] 
    932         for question in reviewingQuestions: 
    933             fossils.append(fossilize(question)) 
    934         return fossils 
    935  
    936  
    937 class AbstractReviewingEditQuestion(AbstractReviewingBase): 
    938  
    939     ''' Edit a question ''' 
    940  
    941     def _checkParams(self): 
    942         AbstractReviewingBase._checkParams(self) 
    943         self._id = self._params.get("id") # value is the question id 
    944         self._text = self._params.get("text") 
    945  
    946     def _getAnswer(self): 
    947         self._confAbstractReview.editReviewingQuestion(self._id, self._text) 
    948         reviewingQuestions = self._confAbstractReview.getReviewingQuestions() 
    949         fossils = [] 
    950         for question in reviewingQuestions: 
    951             fossils.append(fossilize(question)) 
    952         return fossils 
    953  
    954824 
    955825####################################### 
     
    12051075    "contribution.setSubmitted": ContributionReviewingSetSubmitted, 
    12061076 
    1207     "abstractReviewing.changeNumberofAnswers": AbstractReviewingChangeNumAnswers, 
    1208     "abstractReviewing.changeScale": AbstractReviewingChangeScale, 
    1209     "abstractReviewing.updateExampleQuestion": AbstractReviewingUpdateExampleQuestion, 
    1210     "abstractReviewing.getQuestions": AbstractReviewingGetQuestions, 
    1211     "abstractReviewing.addQuestion": AbstractReviewingAddQuestion, 
    1212     "abstractReviewing.removeQuestion": AbstractReviewingRemoveQuestion, 
    1213     "abstractReviewing.editQuestion": AbstractReviewingEditQuestion, 
    1214  
    12151077    "paperReviewing.getContentQuestions": PaperReviewingGetContentQuestions, 
    12161078    "paperReviewing.addContentQuestion": PaperReviewingAddContentQuestion, 
  • indico/MaKaC/services/interface/rpc/handlers.py

    rc45ad8 r3ffc0d  
    5858    "timezone": importModule('MaKaC.services.implementation.timezone'), 
    5959    "scheduler": importModule('MaKaC.services.implementation.scheduler'), 
     60    "abstractReviewing": importModule('MaKaC.services.implementation.abstractReviewing'), 
    6061 
    6162    # Hermes integration 
  • indico/MaKaC/webinterface/displayMgr.py

    ra755c1 r3ffc0d  
    871871            "manageabstractreviewing": { \ 
    872872                "caption": _("Manage Abstract Reviewing"), \ 
    873                 "URL": str(str(urlHandlers.UHConfModifReviewingAbstractSetup.getURL(conf))), \ 
     873                "URL": str(str(urlHandlers.UHAbstractReviewingSetup.getURL(conf))), \ 
    874874                "staticURL": "", \ 
    875875                "parent": "mystuff"}, \ 
  • indico/MaKaC/webinterface/pages/conferences.py

    r6ed0cd r3ffc0d  
    21272127        self._generalSection.addItem( self._contribListMenuItem) 
    21282128 
    2129         self._reviewingMenuItem = wcomponents.SideMenuItem(_("Reviewing"), 
     2129        self._reviewingMenuItem = wcomponents.SideMenuItem(_("Paper Reviewing"), 
    21302130            urlHandlers.UHConfModifReviewingAccess.getURL( target = self._conf ) ) 
    21312131        self._generalSection.addItem( self._reviewingMenuItem) 
     
    22942294        self._tabAbstractList = self._tabCtrl.newTab( "abstractList", _("List of Abstracts"), urlHandlers.UHConfAbstractList.getURL( self._conf ) ) 
    22952295        self._tabBOA = self._tabCtrl.newTab("boa", _("Book of Abstracts Setup"), urlHandlers.UHConfModAbstractBook.getURL(self._conf)) 
     2296        self._tabCFAR = self._tabCtrl.newTab("reviewing", _("Reviewing"), urlHandlers.UHAbstractReviewingSetup.getURL(self._conf)) 
     2297 
     2298        # Create subtabs for the reviewing 
     2299        self._subTabARSetup = self._tabCFAR.newSubTab( "revsetup", "Setup",\ 
     2300                    urlHandlers.UHAbstractReviewingSetup.getURL(self._conf)) 
     2301        self._subTabARTeam = self._tabCFAR.newSubTab( "revteam", "Team",\ 
     2302                    urlHandlers.UHAbstractReviewingTeam.getURL(self._conf)) 
     2303        self._subTabARNotifTpl = self._tabCFAR.newSubTab( "notiftpl", "Notification templates",\ 
     2304                    urlHandlers.UHAbstractReviewingNotifTpl.getURL(self._conf)) 
    22962305 
    22972306        if not self._conf.hasEnabledSection("cfa"): 
     
    23002309            self._tabAbstractList.disable() 
    23012310            self._tabCFAPreview.disable() 
     2311            self._tabCFAR.disable() 
    23022312 
    23032313        self._setActiveTab() 
  • indico/MaKaC/webinterface/pages/reviewing.py

    r90a4562 r3ffc0d  
    2222import MaKaC.webinterface.urlHandlers as urlHandlers 
    2323from MaKaC.webinterface.pages.conferences import WPConferenceModifBase 
    24 from MaKaC.webinterface.pages.conferences import WPConferenceModifAbstractBase 
    2524from MaKaC.i18n import _ 
    2625import MaKaC.webinterface.pages.conferences as conferences 
    27 from xml.sax.saxutils import quoteattr 
    28 from MaKaC.common import Config 
    29 from MaKaC import review 
    30 from MaKaC.webinterface.common.abstractNotificator import EmailNotificator 
    3126#============================================================ 
    3227#==================== Reviewing ============================= 
     
    5954    def _createTabCtrl(self): 
    6055        self._tabCtrl = wcomponents.TabControl() 
    61  
    62         #if self._isAM or self._canModify: 
    63         if self._canModify: 
    64             self._subtabAbstractsReviewing = self._tabCtrl.newTab( "abstractsrev", "Abstracts Reviewing", \ 
    65                 urlHandlers.UHConfModifReviewingAbstractSetup.getURL( target = self._conf ) ) 
    66  
    67         #if self._isAM or self._canModify: 
    68         if self._canModify: 
    69             self._tabAbstractReviewingSetup = self._subtabAbstractsReviewing.newSubTab( "revsetup", "Setup",\ 
    70                     urlHandlers.UHConfModifReviewingAbstractSetup.getURL(target = self._conf) ) 
    71             self._tabAbstractNotifTpl = self._subtabAbstractsReviewing.newSubTab( "notiftpl", "Notification templates",\ 
    72                     urlHandlers.UHAbstractReviewingNotifTpl.getURL(target = self._conf) ) 
    73             # The following tabs are not used yet 
    74             #self._tabAbstractsReviewingControl = self._subtabAbstractsReviewing.newSubTab( "abscontrol", "Team",\ 
    75             #        urlHandlers.UHConfModifReviewingAbstractsControl.getURL( self._conf ) ) 
    76             #self._tabUserCompetencesAbstracts = self._subtabAbstractsReviewing.newSubTab( "abscompetences", "Competences",\ 
    77             #        urlHandlers.UHConfModifUserCompetencesAbstracts.getURL( self._conf ) ) 
    78             self._tabAbstractList = self._subtabAbstractsReviewing.newSubTab( "abstractList", "List of Abstracts",\ 
    79                     urlHandlers.UHConfAbstractList.getURL( self._conf ) ) 
    8056 
    8157        if self._isPRM or self._canModify: 
     
    11490            self._tabListContribToJudgeAsEditor = self._subtabPaperReviewing.newSubTab( "contributionsToJudge", "Judge as Layout Reviewer",\ 
    11591                    urlHandlers.UHConfModifListContribToJudgeAsEditor.getURL( self._conf ) ) 
    116  
    11792 
    11893        self._setActiveTab() 
     
    331306        return vars 
    332307 
    333 #classes for abstract reviewing setup tab 
    334 class WPConfModifAbstractReviewing(WPConfModifReviewingBase): 
    335     """ Tab for setup of general aspects of the abstract reviewing process 
    336     """ 
    337  
    338     def __init__(self, rh, target): 
    339         WPConfModifReviewingBase.__init__(self, rh, target) 
    340  
    341     def _setActiveTab( self ): 
    342         self._subtabAbstractsReviewing.setActive() 
    343         self._tabAbstractReviewingSetup.setActive() 
    344  
    345     def _getTabContent( self, params ): 
    346         wc = WConfModifAbstractReviewingSettings(self._conf) 
    347         params = {} 
    348         return wc.getHTML( params ) 
    349  
    350 class WPConfAbstractList( WPConfModifReviewingBase ): 
    351  
    352     def __init__(self, rh, conf, msg): 
    353         self._msg = msg 
    354         WPConfModifReviewingBase.__init__(self, rh, conf) 
    355  
    356     def _getTabContent( self, params ): 
    357         order = params.get("order","down") 
    358         websession = self._rh._getSession() 
    359         wc = conferences.WAbstracts( self._conf, params.get("filterCrit", None ), \ 
    360                             params.get("sortingCrit", None),order, params.get("fields", None), params.get("menuStatus", None), websession ) 
    361         p = {"authSearch":params.get("authSearch","")} 
    362         return wc.getHTML( p ) 
    363  
    364     def _setActiveTab(self): 
    365         self._subtabAbstractsReviewing.setActive() 
    366         self._tabAbstractReviewingSetup.setActive() 
    367  
    368 class WConfModifAbstractReviewingSettings(wcomponents.WTemplated): 
    369  
    370     def __init__(self, conference): 
    371         self._conf = conference 
    372  
    373     def getVars(self): 
    374         vars = wcomponents.WTemplated.getVars( self ) 
    375         vars["abstractReview"] = self._conf.getConfAbstractReview() 
    376         #vars["reviewingQuestions"] = self._conf.getConferenceReview().getAbstractReviewingQuestions() 
    377         return vars 
    378  
    379308#classes for control tab 
    380309class WPConfModifReviewingControl(WPConfModifReviewingBase): 
     
    404333        return wc.getHTML( p ) 
    405334 
    406 #class for setting up abstract notification templates 
    407 class WPConfModifAbstractsReviewingNotifTplBase( WPConfModifReviewingBase ): 
    408  
    409     def _setActiveTab( self ): 
    410         self._tabAbstractNotifTpl.setActive() 
    411         self._subtabAbstractsReviewing.setActive() 
    412  
    413 class WPConfModifAbstractsReviewingNotifTplList( WPConfModifAbstractsReviewingNotifTplBase ): 
    414  
    415     def _getTabContent( self, params ): 
    416         wc = WAbstractsReviewingNotifTpl( self._conf ) 
    417         return wc.getHTML() 
    418  
    419 class WAbstractsReviewingNotifTpl( wcomponents.WTemplated ): 
    420     def __init__( self, conference ): 
    421         self._conf = conference 
    422  
    423     def _getNotifTplsHTML(self): 
    424         res=[] 
    425         for tpl in self._conf.getAbstractMgr().getNotificationTplList(): 
    426             res.append(""" 
    427                 <tr> 
    428                     <td bgcolor="white" nowrap> 
    429                         <a href=%s><img src=%s border="0" alt=""></a> 
    430                         <a href=%s><img src=%s border="0" alt=""></a> 
    431                         <input type="checkbox" name="selTpls" value=%s> 
    432                     </td> 
    433                     <td bgcolor="white" align="left" nowrap><a href=%s>%s</a></td> 
    434                     <td>&nbsp;<td> 
    435                     <td bgcolor="white" align="left" width="90%%"><font size="-1">%s</font></td> 
    436                 </tr>"""%(quoteattr(str(urlHandlers.UHConfModCFANotifTplUp.getURL(tpl))),\ 
    437                             quoteattr(str(Config.getInstance().getSystemIconURL("upArrow"))),\ 
    438                             quoteattr(str(urlHandlers.UHConfModCFANotifTplDown.getURL(tpl))),\ 
    439                             quoteattr(str(Config.getInstance().getSystemIconURL("downArrow"))),\ 
    440                             quoteattr(str(tpl.getId())), \ 
    441                             quoteattr(str(urlHandlers.UHAbstractModNotifTplDisplay.getURL(tpl))), \ 
    442                             self.htmlText(tpl.getName()), \ 
    443                             self.htmlText(tpl.getDescription()))) 
    444         return "".join(res) 
    445  
    446     def getVars( self ): 
    447         vars = wcomponents.WTemplated.getVars(self) 
    448         vars["notifTpls"]=self._getNotifTplsHTML() 
    449         vars["addNotifTplURL"]=urlHandlers.UHAbstractModNotifTplNew.getURL(self._conf) 
    450         vars["remNotifTplURL"]=urlHandlers.UHAbstractModNotifTplRem.getURL(self._conf) 
    451         return vars 
    452  
    453 class NotifTplToAddrWrapper: 
    454     _id="" 
    455     _label="" 
    456     _klass=None 
    457  
    458     def getId(cls): 
    459         return cls._id 
    460     getId=classmethod(getId) 
    461  
    462     def getLabel(cls): 
    463         return _(cls._label) 
    464     getLabel=classmethod(getLabel) 
    465  
    466     def getToAddrKlass(cls): 
    467         return cls._klass 
    468     getToAddrKlass=classmethod(getToAddrKlass) 
    469  
    470     def addToAddr(cls,tpl): 
    471          tpl.addToAddr(cls._klass()) 
    472     addToAddr=classmethod(addToAddr) 
    473  
    474     def isSelectedByDefault(cls): 
    475         return False 
    476     isSelectedByDefault = classmethod(isSelectedByDefault) 
    477  
    478  
    479 class NotifTplToAddrSubmitterWrapper(NotifTplToAddrWrapper): 
    480  
    481     _id="submitter" 
    482     _klass=review.NotifTplToAddrSubmitter 
    483     _label="Submitters" 
    484  
    485     def isSelectedByDefault(cls): 
    486         return True 
    487     isSelectedByDefault = classmethod(isSelectedByDefault) 
    488  
    489 class NotifTplToAddrPrimaryAuthorsWrapper(NotifTplToAddrWrapper): 
    490  
    491     _id="primaryAuthors" 
    492     _label= "Primary authors" 
    493     _klass=review.NotifTplToAddrPrimaryAuthors 
    494  
    495  
    496 class NotifTplToAddrsFactory: 
    497  
    498     _avail_toAddrs={ 
    499         NotifTplToAddrSubmitterWrapper.getId():NotifTplToAddrSubmitterWrapper,\ 
    500         NotifTplToAddrPrimaryAuthorsWrapper.getId():NotifTplToAddrPrimaryAuthorsWrapper} 
    501  
    502     def getToAddrList(cls): 
    503         return cls._avail_toAddrs.values() 
    504     getToAddrList=classmethod(getToAddrList) 
    505  
    506     def getToAddrById(cls,id): 
    507         return cls._avail_toAddrs.get(id,None) 
    508     getToAddrById=classmethod(getToAddrById) 
    509  
    510  
    511 class WConfModCFANotifTplNew(wcomponents.WTemplated): 
    512  
    513     def __init__(self,conf): 
    514         self._conf=conf 
    515  
    516     def _getErrorHTML(self,errorMsgList): 
    517         if len(errorMsgList)==0: 
    518             return "" 
    519         res=[] 
    520         for error in errorMsgList: 
    521             res.append(self.htmlText(error)) 
    522         return """ 
    523                 <tr align="center"> 
    524                     <td bgcolor="white" nowrap colspan="3" style="color:red; padding-bottom:10px; padding-top:10px"> 
    525                         <br> 
    526                         <b><font color="red">%s</font></b> 
    527                         <br> 
    528                         <br> 
    529                     </td> 
    530                 </tr>"""%"<br>".join(res) 
    531  
    532     def _getAvailableTagsHTML(self): 
    533         res=[] 
    534         for var in EmailNotificator.getVarList(): 
    535             res.append(""" 
    536                 <tr class="legendTr"> 
    537                     <td width="100%%" nowrap class="blacktext" style="padding-left:10px;padding-right:5px; text-align:left;">|%s|</td> 
    538                     <td class="legendTd" onClick="insertTag('|%s|')">Insert</td> 
    539                 </tr>"""%(self.htmlText(var.getName()), self.htmlText(var.getName()))) 
    540         return "".join(res) 
    541  
    542     def _getToAddrsHTML(self): 
    543         res=[] 
    544         for toAddr in NotifTplToAddrsFactory.getToAddrList(): 
    545             res.append("""<input name="toAddrs" type="checkbox" value=%s>%s<br>"""%(quoteattr(toAddr.getId()),self.htmlText(toAddr.getLabel()))) 
    546         return "&nbsp;".join(res) 
    547  
    548     def getVars(self): 
    549         vars=wcomponents.WTemplated.getVars(self) 
    550         vars["postURL"]=quoteattr(str(urlHandlers.UHAbstractModNotifTplNew.getURL(self._conf))) 
    551         vars["errors"]=self._getErrorHTML(vars.get("errorList",[])) 
    552         vars["title"]=quoteattr(str(vars.get("title",""))) 
    553         vars["description"]=self.htmlText(vars.get("description","")) 
    554         vars["subject"]=quoteattr(str(vars.get("subject",""))) 
    555         vars["body"]=self.htmlText(vars.get("body","")) 
    556         vars["fromAddr"]=quoteattr(str(vars.get("fromAddr",""))) 
    557         vars["CCAddrs"]=quoteattr(str(",".join(vars.get("ccList",[])))) 
    558         vars["toAddrs"] = self._getToAddrsHTML() 
    559         vars["vars"]=self._getAvailableTagsHTML() 
    560         vars["availableConditions"]= NotifTplConditionsFactory.getConditionList() 
    561         return vars 
    562  
    563  
    564 class WConfModCFANotifTplEditData(wcomponents.WTemplated): 
    565  
    566     def __init__(self,notifTpl): 
    567         self._notifTpl=notifTpl 
    568  
    569     def _getErrorHTML(self,errorMsgList): 
    570         if len(errorMsgList)==0: 
    571             return "" 
    572         res=[] 
    573         for error in errorMsgList: 
    574             res.append(self.htmlText(error)) 
    575         return """ 
    576                 <tr align="center"> 
    577                     <td bgcolor="white" nowrap colspan="3" style="color:red; padding-bottom:10px; padding-top:10px"> 
    578                         <br> 
    579                         <b><font color="red">%s</font></b> 
    580                         <br> 
    581                         <br> 
    582                     </td> 
    583                 </tr>"""%"<br>".join(res) 
    584  
    585     def _getAvailableTagsHTML(self): 
    586         res=[] 
    587         for var in EmailNotificator.getVarList(): 
    588             res.append(""" 
    589                 <tr class="legendTr"> 
    590                     <td width="100%%" nowrap class="blacktext" style="padding-left:10px;padding-right:5px; text-align:left;">|%s|</td> 
    591                     <td class="legendTd" onClick="insertTag('|%s|')">Insert</td> 
    592                 </tr>"""%(self.htmlText(var.getName()), self.htmlText(var.getName()))) 
    593         return "".join(res) 
    594  
    595     def _getToAddrsHTML(self): 
    596         res=[] 
    597         for toAddr in NotifTplToAddrsFactory.getToAddrList(): 
    598             checked = "" 
    599             if self._notifTpl: 
    600                 if self._notifTpl.hasToAddr(toAddr.getToAddrKlass()): 
    601                     checked = "checked" 
    602             else: 
    603                 if toAddr.isSelectedByDefault(): 
    604                     checked = "checked" 
    605             res.append("""<input name="toAddrs" type="checkbox" value=%s %s>%s<br>"""%(quoteattr(toAddr.getId()),checked,self.htmlText(toAddr.getLabel()))) 
    606         return "&nbsp;".join(res) 
    607  
    608     def getVars(self): 
    609         vars=wcomponents.WTemplated.getVars(self) 
    610         vars["postURL"]=quoteattr(str(urlHandlers.UHAbstractModNotifTplEdit.getURL(self._notifTpl))) 
    611         vars["errors"]=self._getErrorHTML(vars.get("errorList",[])) 
    612         if not vars.has_key("title"): 
    613             vars["title"]=quoteattr(str(self._notifTpl.getName())) 
    614         else: 
    615             vars["title"]=quoteattr(str(vars["title"])) 
    616         if not vars.has_key("description"): 
    617             vars["description"]=self.htmlText(self._notifTpl.getDescription()) 
    618         else: 
    619             vars["description"]=self.htmlText(vars["description"]) 
    620         if not vars.has_key("subject"): 
    621             vars["subject"]=quoteattr(str(self._notifTpl.getTplSubjectShow(EmailNotificator.getVarList()))) 
    622         else: 
    623             vars["subject"]=quoteattr(str(vars["subject"])) 
    624         if not vars.has_key("body"): 
    625             vars["body"]=self.htmlText(self._notifTpl.getTplBodyShow(EmailNotificator.getVarList())) 
    626         else: 
    627             vars["body"]=self.htmlText(vars["body"]) 
    628         if not vars.has_key("fromAddr"): 
    629             vars["fromAddr"]=quoteattr(str(self._notifTpl.getFromAddr())) 
    630         else: 
    631             vars["fromAddr"]=quoteattr(str(vars["fromAddr"])) 
    632         vars["toAddrs"] = self._getToAddrsHTML() 
    633         if not vars.has_key("ccList"): 
    634             vars["CCAddrs"]=quoteattr(str(",".join(self._notifTpl.getCCAddrList()))) 
    635         else: 
    636             vars["CCAddrs"]=quoteattr(str(",".join(vars["ccList"]))) 
    637         vars["vars"]=self._getAvailableTagsHTML() 
    638         return vars 
    639  
    640 class WPModCFANotifTplNew(WPConfModifAbstractsReviewingNotifTplBase): 
    641  
    642     def _getTabContent(self,params): 
    643         wc = WConfModCFANotifTplNew(self._conf) 
    644         params["errorList"]=params.get("errorList",[]) 
    645         return wc.getHTML(params) 
    646  
    647     def getJSFiles(self): 
    648         return WPConfModifAbstractsReviewingNotifTplBase.getJSFiles(self) + \ 
    649            self._includeJSPackage('Abstracts') 
    650  
    651 class WPModCFANotifTplBase(WPConfModifReviewingBase): 
    652  
    653     def __init__(self, rh, notifTpl): 
    654         WPConfModifReviewingBase.__init__(self, rh, notifTpl.getConference()) 
    655         self._notifTpl = notifTpl 
    656  
    657     def _createTabCtrl( self ): 
    658         self._tabCtrl = wcomponents.TabControl() 
    659         self._tabMain = self._tabCtrl.newTab( "main", _("Main"), \ 
    660                 urlHandlers.UHAbstractModNotifTplDisplay.getURL( self._notifTpl ) ) 
    661         self._tabPreview = self._tabCtrl.newTab( "preview", _("Preview"), \ 
    662                 urlHandlers.UHAbstractModNotifTplPreview.getURL( self._notifTpl ) ) 
    663 #        wf = self._rh.getWebFactory() 
    664 #        if wf: 
    665 #            wf.customiseTabCtrl( self._tabCtrl ) 
    666         self._setActiveTab() 
    667  
    668     def _setActiveTab( self ): 
    669         pass 
    670  
    671 #    def _applyFrame( self, body ): 
    672 #        frame = wcomponents.WNotifTPLModifFrame( self._notifTpl, self._getAW() ) 
    673 #        p = { "categDisplayURLGen": urlHandlers.UHCategoryDisplay.getURL, \ 
    674 #            "confDisplayURLGen": urlHandlers.UHConferenceDisplay.getURL, \ 
    675 #            "confModifURLGen": urlHandlers.UHConfModifCFA.getURL} 
    676 #        return frame.getHTML( body, **p ) 
    677  
    678     def _getPageContent( self, params ): 
    679         self._createTabCtrl() 
    680         banner = wcomponents.WNotifTplBannerModif(self._notifTpl).getHTML() 
    681         body = wcomponents.WTabControl( self._tabCtrl, self._getAW() ).getHTML( self._getTabContent( params ) ) 
    682         return banner + body 
    683  
    684     def _getTabContent( self, params ): 
    685         return "nothing" 
    686  
    687  
    688 class WPModCFANotifTplDisplay(WPModCFANotifTplBase): 
    689  
    690     def __init__(self, rh, notifTpl): 
    691         WPModCFANotifTplBase.__init__(self, rh, notifTpl) 
    692         self._conf = self._notifTpl.getConference() 
    693  
    694     def _setActiveTab( self ): 
    695         self._tabMain.setActive() 
    696  
    697     def _getTabContent(self, params): 
    698         wc = WConfModCFANotifTplDisplay(self._conf, self._notifTpl) 
    699         return wc.getHTML() 
    700  
    701  
    702 class WPModCFANotifTplEdit(WPModCFANotifTplBase): 
    703  
    704     def __init__(self, rh, notifTpl): 
    705         WPConferenceModifBase.__init__(self, rh, notifTpl.getConference()) 
    706         self._notifTpl=notifTpl 
    707  
    708  
    709     def _getTabContent(self, params): 
    710         wc=WConfModCFANotifTplEditData(self._notifTpl) 
    711         params["errorList"]=params.get("errorList",[]) 
    712         return wc.getHTML(params) 
    713  
    714     def getJSFiles(self): 
    715         return WPConferenceModifBase.getJSFiles(self) + \ 
    716             self._includeJSPackage('Abstracts') 
    717  
    718  
    719  
    720 class WPModCFANotifTplPreview(WPModCFANotifTplBase): 
    721  
    722     def _setActiveTab(self): 
    723         self._tabPreview.setActive() 
    724  
    725     def _getTabContent(self, params): 
    726         wc = WConfModCFANotifTplPreview(self._notifTpl) 
    727         return wc.getHTML() 
    728  
    729  
    730 class WConfModCFANotifTplPreview(wcomponents.WTemplated): 
    731  
    732     def __init__(self,notifTpl): 
    733         self._notifTpl=notifTpl 
    734  
    735     def getVars(self): 
    736         vars = wcomponents.WTemplated.getVars(self) 
    737         conf=self._notifTpl.getConference() 
    738         if conf.getAbstractMgr().getAbstractList(): 
    739             abstract = conf.getAbstractMgr().getAbstractList()[0] 
    740             notif=EmailNotificator().apply(abstract,self._notifTpl) 
    741             vars["from"]=notif.getFromAddr() 
    742             vars["to"]=notif.getToList() 
    743             vars["cc"]=notif.getCCList() 
    744             vars["subject"]=notif.getSubject() 
    745             vars["body"] = notif.getBody() 
    746         else: 
    747             vars["from"] = _("""<center> _("No preview avaible")</center>""") 
    748             vars["to"] = _("""<center> _("No preview avaible")</center>""") 
    749             vars["cc"]= _("""<center> _("No preview avaible")</center>""") 
    750             vars["subject"] = _("""<center> _("No preview avaible")</center>""") 
    751             vars["body"] = _("""<center> _("An abstract must be submitted to display the preview")</center>""") 
    752         vars["cfaURL"]=quoteattr(str(urlHandlers.UHConfModifCFA.getURL(conf))) 
    753         return vars 
    754  
    755 class NotifTplConditionWrapper: 
    756     _id="" 
    757     _label="" 
    758     _klass=None 
    759  
    760     def getId(cls): 
    761         return cls._id 
    762     getId=classmethod(getId) 
    763  
    764     def getLabel(cls): 
    765         return _(cls._label) 
    766     getLabel=classmethod(getLabel) 
    767  
    768     def getConditionKlass(cls): 
    769         return cls._klass 
    770     getConditionKlass=classmethod(getConditionKlass) 
    771  
    772     def addCondition(cls,tpl,**data): 
    773         pass 
    774     addCondition=classmethod(addCondition) 
    775  
    776     def needsDialog(cls,**data): 
    777         return False 
    778     needsDialog=classmethod(needsDialog) 
    779  
    780     def getDialogKlass(cls): 
    781         return None 
    782     getDialogKlass=classmethod(getDialogKlass) 
    783  
    784  
    785 class NotifTplCondAcceptedWrapper(NotifTplConditionWrapper): 
    786  
    787     _id="accepted" 
    788     _label= _("in status ACCEPTED") 
    789     _klass=review.NotifTplCondAccepted 
    790  
    791     @classmethod 
    792     def addCondition(cls,tpl,**data): 
    793         cType=data.get("contribType","--any--") 
    794         t=data.get("track","--any--") 
    795         tpl.addCondition(cls._klass(track=t,contribType=cType)) 
    796  
    797     @classmethod 
    798     def needsDialog(cls,**data): 
    799         if data.has_key("contribType") and data["contribType"]!="": 
    800             return False 
    801         return True 
    802  
    803     @classmethod 
    804     def getDialogKlass(cls): 
    805         return WPModNotifTplCondAcc 
    806  
    807  
    808 class NotifTplCondRejectedWrapper(NotifTplConditionWrapper): 
    809  
    810     _id="rejected" 
    811     _label= _("in status REJECTED") 
    812     _klass=review.NotifTplCondRejected 
    813  
    814     @classmethod 
    815     def addCondition(cls,tpl,**data): 
    816         tpl.addCondition(cls._klass()) 
    817  
    818 class NotifTplCondMergedWrapper(NotifTplConditionWrapper): 
    819  
    820     _id="merged" 
    821     _label= _("in status MERGED") 
    822     _klass=review.NotifTplCondMerged 
    823  
    824     @classmethod 
    825     def addCondition(cls,tpl,**data): 
    826         tpl.addCondition(cls._klass()) 
    827  
    828  
    829 class NotifTplConditionsFactory: 
    830  
    831     _avail_conds={ 
    832         NotifTplCondAcceptedWrapper.getId():NotifTplCondAcceptedWrapper,\ 
    833         NotifTplCondRejectedWrapper.getId():NotifTplCondRejectedWrapper,\ 
    834         NotifTplCondMergedWrapper.getId():NotifTplCondMergedWrapper} 
    835  
    836     def getConditionList(cls): 
    837         return cls._avail_conds.values() 
    838     getConditionList=classmethod(getConditionList) 
    839  
    840     def getConditionById(cls,id): 
    841         return cls._avail_conds.get(id,None) 
    842     getConditionById=classmethod(getConditionById) 
    843  
    844  
    845 class WConfModNotifTplCondAcc(wcomponents.WTemplated): 
    846  
    847     def __init__(self,tpl): 
    848         self._notifTpl=tpl 
    849  
    850     def _getContribTypeItemsHTML(self): 
    851         res=["""<option value="--any--">--any--</option>""", 
    852                 """<option value="--none--">--none--</option>"""] 
    853         for t in self._notifTpl.getConference().getContribTypeList(): 
    854             res.append("""<option value=%s>%s</option>"""%(quoteattr(t.getId()),self.htmlText(t.getName()))) 
    855         return "".join(res) 
    856  
    857     def _getTrackItemsHTML(self): 
    858         res=["""<option value="--any--">--any--</option>""", 
    859                 """<option value="--none--">--none--</option>"""] 
    860         for t in self._notifTpl.getConference().getTrackList(): 
    861             res.append("""<option value=%s>%s</option>"""%(quoteattr(t.getId()),self.htmlText(t.getTitle()))) 
    862  
    863         return "".join(res) 
    864     def getVars(self): 
    865         vars=wcomponents.WTemplated.getVars(self) 
    866         vars["postURL"]=urlHandlers.UHConfModNotifTplConditionNew.getURL(self._notifTpl) 
    867         vars["condType"]=quoteattr(str(NotifTplCondAcceptedWrapper.getId())) 
    868         vars["contribTypeItems"]=self._getContribTypeItemsHTML() 
    869         vars["trackItems"]=self._getTrackItemsHTML() 
    870         return vars 
    871  
    872  
    873 class WPModNotifTplCondAcc(WPModCFANotifTplBase): 
    874  
    875     def _getTabContent( self, params ): 
    876         wc=WConfModNotifTplCondAcc(self._notifTpl) 
    877         return wc.getHTML() 
    878  
    879  
    880 class WConfModCFANotifTplDisplay(wcomponents.WTemplated): 
    881  
    882     def __init__(self, conf, notifTpl): 
    883         self._conf = conf 
    884         self._notifTpl = notifTpl 
    885  
    886     def _getConditionItemsHTML(self): 
    887         res=[] 
    888         for cond in NotifTplConditionsFactory.getConditionList(): 
    889             res.append("<option value=%s>%s</option>"""%(quoteattr(cond.getId()),self.htmlText(cond.getLabel()))) 
    890         return "".join(res) 
    891  
    892     def _getConditionsHTML(self): 
    893         res=[] 
    894         for cond in self._notifTpl.getConditionList(): 
    895             caption="" 
    896             if isinstance(cond,review.NotifTplCondAccepted): 
    897                 track=cond.getTrack() 
    898                 if track is None or track=="": 
    899                     track="--none--" 
    900                 elif track not in ["--none--","--any--"]: 
    901                     track=track.getTitle() 
    902                 cType=cond.getContribType() 
    903                 if cType is None or cType=="": 
    904                     cType="--none--" 
    905                 elif cType not in ["--none--","--any--"]: 
    906                     cType=cType.getName() 
    907                 caption= _("""ACCEPTED - type: %s - track: %s""")%(self.htmlText(cType),self.htmlText(track)) 
    908             elif isinstance(cond,review.NotifTplCondRejected): 
    909                 caption= _("""REJECTED""") 
    910             elif isinstance(cond,review.NotifTplCondMerged): 
    911                 caption= _("""MERGED""") 
    912             res.append(""" <input type="image" src="%s" onclick="javascript:this.form.selCond.value = '%s'; this.form.submit();return false;"> %s"""%(Config.getInstance().getSystemIconURL( "remove" ), cond.getId(), caption)) 
    913         return "<br>".join(res) 
    914  
    915     def _getToAddrsHTML(self): 
    916         res=[] 
    917         for toAddr in NotifTplToAddrsFactory.getToAddrList(): 
    918             if self._notifTpl.hasToAddr(toAddr.getToAddrKlass()): 
    919                 res.append("%s"%self.htmlText(toAddr.getLabel())) 
    920         return ", ".join(res) 
    921  
    922     def getVars(self): 
    923         vars = wcomponents.WTemplated.getVars(self) 
    924         vars["name"] = self._notifTpl.getName() 
    925         vars["description"] = self._notifTpl.getDescription() 
    926         vars["from"] = self._notifTpl.getFromAddr() 
    927         vars["toAddrs"] = self._getToAddrsHTML() 
    928         vars["CCAddrs"]=",".join(self._notifTpl.getCCAddrList()) 
    929         vars["subject"] = self._notifTpl.getTplSubjectShow(EmailNotificator.getVarList()) 
    930         vars["body"] = self._notifTpl.getTplBodyShow(EmailNotificator.getVarList()) 
    931         vars["conditions"]=self._getConditionsHTML() 
    932         vars["availableConditions"]=self._getConditionItemsHTML() 
    933         vars["remConditionsURL"]=quoteattr(str(urlHandlers.UHConfModNotifTplConditionRem.getURL(self._notifTpl))) 
    934         vars["newConditionURL"]=quoteattr(str(urlHandlers.UHConfModNotifTplConditionNew.getURL(self._notifTpl))) 
    935         vars["modifDataURL"]=quoteattr(str(urlHandlers.UHAbstractModNotifTplEdit.getURL(self._notifTpl))) 
    936         return vars 
    937  
    938  
    939  
    940 class WPConfReviewingAbstractList( WPConfModifReviewingBase): 
    941  
    942     def __init__(self, rh, conf, msg): 
    943         self._msg = msg 
    944         WPConfModifReviewingBase.__init__(self, rh, conf) 
    945  
    946     def _getTabContent( self, params ): 
    947         order = params.get("order","down") 
    948         websession = self._rh._getSession() 
    949         wc = conferences.WAbstracts( self._conf, params.get("filterCrit", None ), \ 
    950                             params.get("sortingCrit", None),order, params.get("fields", None), params.get("menuStatus", None), websession ) 
    951         p = {"authSearch":params.get("authSearch","")} 
    952         return wc.getHTML( p ) 
    953  
    954     def _setActiveTab(self): 
    955         self._subtabAbstractsReviewing.setActive() 
    956         self._tabAbstractList.setActive() 
    957  
    958335 
    959336class WConfModifReviewingControl(wcomponents.WTemplated): 
  • indico/MaKaC/webinterface/rh/abstractModif.py

    r6ed0cd r3ffc0d  
    3333from MaKaC.i18n import _ 
    3434from MaKaC.webinterface.rh.conferenceModif import CFAEnabled 
    35 from MaKaC.reviewing import ConferenceAbstractReview 
     35from MaKaC.abstractReviewing import ConferenceAbstractReview 
    3636from MaKaC.reviewing import Answer 
    3737 
  • indico/MaKaC/webinterface/rh/conferenceModif.py

    r4bd61a r3ffc0d  
    8888 
    8989from indico.modules.scheduler import tasks 
     90 
     91from MaKaC.webinterface.pages.abstractReviewing import * 
    9092 
    9193class RHConferenceModifBase( RHConferenceBase, RHModificationBaseProtected ): 
     
    35653567        return p.display() 
    35663568 
     3569class RHAbstractReviewingSetup(RHConfModifCFABase): 
     3570 
     3571    def _process(self): 
     3572        if self._conf.isClosed(): 
     3573            p = conferences.WPConferenceModificationClosed(self, self._target) 
     3574        else: 
     3575            p = WPAbstractReviewingSetup(self, self._target) 
     3576        return p.display() 
     3577 
     3578class RHAbstractReviewingTeam(RHConfModifCFABase): 
     3579 
     3580    def _process(self): 
     3581        if self._conf.isClosed(): 
     3582            p = conferences.WPConferenceModificationClosed(self, self._target) 
     3583        else: 
     3584            p = WPAbstractReviewingTeam(self, self._target) 
     3585        return p.display() 
     3586 
     3587 
    35673588class RHNotifTpl(RHConfModifCFABase): 
    35683589 
    35693590    def _process(self): 
    3570         p = reviewing.WPConfModifAbstractsReviewingNotifTplList(self, self._target) 
     3591        p = WPConfModifAbstractsReviewingNotifTplList(self, self._target) 
    35713592        return p.display() 
    35723593 
     
    36133634                tpl.setCCAddrList(self._ccList) 
    36143635                for toAddr in self._toList: 
    3615                     toAddrWrapper=reviewing.NotifTplToAddrsFactory.getToAddrById(toAddr) 
     3636                    toAddrWrapper=NotifTplToAddrsFactory.getToAddrById(toAddr) 
    36163637                    if toAddrWrapper: 
    36173638                        toAddrWrapper.addToAddr(tpl) 
     
    36213642                self._redirect(url) 
    36223643                return 
    3623         p=reviewing.WPModCFANotifTplNew(self,self._target) 
     3644        p=WPModCFANotifTplNew(self,self._target) 
    36243645        return p.display(title=self._title,\ 
    36253646                        description=self._description,\ 
     
    36723693 
    36733694    def _process(self): 
    3674         p = reviewing.WPModCFANotifTplDisplay(self, self._target) 
     3695        p = WPModCFANotifTplDisplay(self, self._target) 
    36753696        return p.display() 
    36763697 
     
    36793700 
    36803701    def _process(self): 
    3681         p = reviewing.WPModCFANotifTplPreview(self, self._target) 
     3702        p = WPModCFANotifTplPreview(self, self._target) 
    36823703        return p.display() 
    36833704 
     
    37063727            if len(self._toList)<=0: 
    37073728                error.append( _("""At least one "To Address" must be seleted """)) 
    3708                 p=reviewing.WPModCFANotifTplEdit(self, self._target) 
     3729                p=WPModCFANotifTplEdit(self, self._target) 
    37093730                return p.display(errorList=error, \ 
    37103731                                    title=self._title, \ 
     
    37233744                self._notifTpl.clearToAddrs() 
    37243745                for toAddr in self._toList: 
    3725                     toAddrWrapper=reviewing.NotifTplToAddrsFactory.getToAddrById(toAddr) 
     3746                    toAddrWrapper=NotifTplToAddrsFactory.getToAddrById(toAddr) 
    37263747                    if toAddrWrapper: 
    37273748                        toAddrWrapper.addToAddr(self._notifTpl) 
     
    37293750                return 
    37303751        else: 
    3731             p=reviewing.WPModCFANotifTplEdit(self, self._target) 
     3752            p=WPModCFANotifTplEdit(self, self._target) 
    37323753            return p.display() 
    37333754 
     
    37563777    def _process(self): 
    37573778        if self._action=="OK": 
    3758             condWrapper=reviewing.NotifTplConditionsFactory.getConditionById(self._condType) 
     3779            condWrapper=NotifTplConditionsFactory.getConditionById(self._condType) 
    37593780            if condWrapper: 
    37603781                if condWrapper.needsDialog(**self._otherData): 
  • indico/MaKaC/webinterface/rh/reviewingModif.py

    r4bd61a r3ffc0d  
    2323from MaKaC.errors import MaKaCError 
    2424from MaKaC.webinterface.pages.conferences import WPConferenceModificationClosed 
    25 from MaKaC.webinterface.pages.reviewing import WPConfModifReviewingPaperSetup,\ 
    26     WPConfModifAbstractReviewing 
     25from MaKaC.webinterface.pages.reviewing import WPConfModifReviewingPaperSetup 
    2726from MaKaC.webinterface.rh.conferenceBase import RHConferenceBase 
    2827from MaKaC.webinterface.rh.conferenceModif import RHConferenceModifBase,\ 
     
    102101        elif self._isPRM: 
    103102            url = urlHandlers.UHConfModifReviewingPaperSetup.getURL( self._conf ) 
    104         elif self._conf.canModify(self.getAW()): 
    105             url = urlHandlers.UHConfModifReviewingAbstractSetup.getURL( self._conf) 
    106103        elif self._isReferee: 
    107104            url = urlHandlers.UHConfModifReviewingAssignContributionsList.getURL( self._conf ) 
     
    159156 
    160157 
    161 class RHConfModifReviewingAbstractSetup( RHConferenceModifBase ): 
    162     """ Class used when the user clicks on the Abstract Setup 
    163         subtab of the Reviewing tab 
    164     """ 
    165     _uh = urlHandlers.UHConfModifReviewingAbstractSetup 
    166  
    167     def _process( self ): 
    168         if self._conf.isClosed(): 
    169             p = WPConferenceModificationClosed( self, self._target ) 
    170         else: 
    171             p = WPConfModifAbstractReviewing(self, self._target) 
    172         return p.display() 
    173  
    174158 
    175159#################################### Start of old classes that are not used anymore ############################### 
  • indico/MaKaC/webinterface/rh/trackModif.py

    r6ed0cd r3ffc0d  
    4040from MaKaC.webinterface.mail import GenericMailer, GenericNotification 
    4141from MaKaC.i18n import _ 
    42 from MaKaC.reviewing import ConferenceAbstractReview 
     42from MaKaC.abstractReviewing import ConferenceAbstractReview 
    4343from MaKaC.reviewing import Answer 
    4444 
  • indico/MaKaC/webinterface/tpls/AbstractReviewingSetup.tpl

    r90a4562 r3ffc0d  
    4141<script type="text/javascript"> 
    4242// Component for the review questions 
    43 $E('inPlaceEditQuestions').set(new IndicoUI.Widgets.Generic.manageListOfElements({'get':'reviewing.abstractReviewing.getQuestions', 
    44         'add':'reviewing.abstractReviewing.addQuestion', 'remove':'reviewing.abstractReviewing.removeQuestion', 
    45         'edit': 'reviewing.abstractReviewing.editQuestion'}, 
     43$E('inPlaceEditQuestions').set(new IndicoUI.Widgets.Generic.manageListOfElements({'get':'abstractReviewing.getQuestions', 
     44        'add':'abstractReviewing.addQuestion', 'remove':'abstractReviewing.removeQuestion', 
     45        'edit': 'abstractReviewing.editQuestion'}, 
    4646        {conference: '<%= abstractReview.getConference().getId() %>'},'question', 'abstractReviewingQuestions', true)); 
    4747 
     
    5151 
    5252// Component for example question 
    53 var previewQuestion =  new ExampleQuestionWidget('reviewing.abstractReviewing.updateExampleQuestion', 
     53var previewQuestion =  new ExampleQuestionWidget('abstractReviewing.updateExampleQuestion', 
    5454        {conference: '<%= abstractReview.getConference().getId() %>'}); 
    5555previewQuestion.draw(); 
    5656 
    5757// Components to change the number of answers and the scale 
    58 $E('inPlaceEditNumberOfAnswers').set(new NumberAnswersEditWidget('reviewing.abstractReviewing.changeNumberofAnswers', 
     58$E('inPlaceEditNumberOfAnswers').set(new NumberAnswersEditWidget('abstractReviewing.changeNumberofAnswers', 
    5959       {conference: '<%= abstractReview.getConference().getId() %>'},'<%= abstractReview.getNumberOfAnswers() %>').draw()); 
    6060 
    61 $E('inPlaceEditScale').set(new ScaleEditWidget('reviewing.abstractReviewing.changeScale', 
     61$E('inPlaceEditScale').set(new ScaleEditWidget('abstractReviewing.changeScale', 
    6262       {conference: '<%= abstractReview.getConference().getId() %>'}, 
    6363       {'min':'<%= abstractReview.getScaleLower() %>', 'max':'<%= abstractReview.getScaleHigher() %>'}).draw()); 
  • indico/MaKaC/webinterface/tpls/ConfModAbstractPropToAcc.tpl

    r8272ae r3ffc0d  
    1 <% from MaKaC.reviewing import ConferenceAbstractReview %> 
     1<% from MaKaC.abstractReviewing import ConferenceAbstractReview %> 
    22<form action=<%= postURL %> method="POST"> 
    33    <table width="60%" align="left" border="0" cellspacing="6" cellpadding="2" style="padding-top:15px; padding-left:15px;"> 
  • indico/MaKaC/webinterface/urlHandlers.py

    rf16f89 r3ffc0d  
    29622962    _relativeURL = "trackAbstractModif.py/commentRem" 
    29632963 
     2964 
    29642965class UHAbstractReviewingNotifTpl(URLHandler): 
    29652966    _relativeURL = "confModifCFA.py/notifTpl" 
     
    32763277class UHConfModAbstractBookEdit( URLHandler ): 
    32773278    _relativeURL = "confModBOA.py/edit" 
     3279 
     3280class UHAbstractReviewingSetup(URLHandler): 
     3281    _relativeURL = "confModifCFA.py/reviewingSetup" 
     3282 
     3283class UHAbstractReviewingTeam (URLHandler): 
     3284    _relativeURL = "confModifCFA.py/reviewingTeam" 
    32783285 
    32793286class UHConfModScheduleDataEdit( URLHandler ): 
     
    43654372    _relativeURL = "confModifReviewing.py/deleteTemplate" 
    43664373 
    4367 class UHConfModifReviewingAbstractSetup ( URLHandler ): 
    4368     _relativeURL = "confModifReviewing.py/abstractSetup" 
    4369  
    43704374class UHConfModifReviewingControl ( URLHandler ): 
    43714375    _relativeURL = "confModifReviewingControl.py" 
  • indico/htdocs/confModifCFA.py

    rc7428e r3ffc0d  
    5353def removeSubmitter( req, **params ): 
    5454    return conferenceModif.RHConfModifCFARemoveSubmitter( req ).process( params ) 
     55 
     56def reviewingSetup(req, **params): 
     57    return conferenceModif.RHAbstractReviewingSetup(req).process(params) 
     58 
     59def reviewingTeam(req, **params): 
     60    return conferenceModif.RHAbstractReviewingTeam(req).process(params) 
    5561 
    5662def notifTpl( req, **params ): 
  • indico/htdocs/confModifReviewing.py

    r6e9e95 r3ffc0d  
    6161def deleteTemplate(req, **params): 
    6262    return reviewingModif.RHDeleteTemplate(req).process(params) 
    63  
    64 # Abstract reviewing 
    65 def abstractSetup(req, **params): 
    66     return reviewingModif.RHConfModifReviewingAbstractSetup(req).process(params) 
Note: See TracChangeset for help on using the changeset viewer.