Changeset 3ffc0d in indico
- Timestamp:
- 03/02/11 14:03:37 (2 years ago)
- 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)
- Location:
- indico
- Files:
-
- 3 added
- 1 deleted
- 15 edited
- 1 moved
-
MaKaC/abstractReviewing.py (added)
-
MaKaC/conference.py (modified) (1 diff)
-
MaKaC/reviewing.py (modified) (1 diff)
-
MaKaC/services/implementation/abstractReviewing.py (added)
-
MaKaC/services/implementation/reviewing.py (modified) (2 diffs)
-
MaKaC/services/interface/rpc/handlers.py (modified) (1 diff)
-
MaKaC/webinterface/displayMgr.py (modified) (1 diff)
-
MaKaC/webinterface/pages/abstractReviewing.py (added)
-
MaKaC/webinterface/pages/conferences.py (modified) (3 diffs)
-
MaKaC/webinterface/pages/reviewing.py (modified) (5 diffs)
-
MaKaC/webinterface/rh/abstractModif.py (modified) (1 diff)
-
MaKaC/webinterface/rh/conferenceModif.py (modified) (10 diffs)
-
MaKaC/webinterface/rh/reviewingModif.py (modified) (3 diffs)
-
MaKaC/webinterface/rh/trackModif.py (modified) (1 diff)
-
MaKaC/webinterface/tpls/AbstractReviewingSetup.tpl (moved) (moved from indico/MaKaC/webinterface/tpls/ConfModifAbstractReviewingSettings.tpl) (2 diffs)
-
MaKaC/webinterface/tpls/ConfModAbstractPropToAcc.tpl (modified) (1 diff)
-
MaKaC/webinterface/urlHandlers.py (modified) (3 diffs)
-
htdocs/confModifAbstractsReviewingControl.py (deleted)
-
htdocs/confModifCFA.py (modified) (1 diff)
-
htdocs/confModifReviewing.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
indico/MaKaC/conference.py
r717e50 r3ffc0d 49 49 from MaKaC.contributionReviewing import ReviewManager 50 50 from reviewing import ConferencePaperReview as ConferencePaperReview 51 from reviewing import ConferenceAbstractReview as ConferenceAbstractReview51 from abstractReviewing import ConferenceAbstractReview as ConferenceAbstractReview 52 52 53 53 from pytz import timezone -
indico/MaKaC/reviewing.py
r6ed0cd r3ffc0d 1167 1167 1168 1168 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 = conference1179 self._reviewingQuestions = []1180 1181 # by default1182 self._numberOfAnswers = 71183 self._scaleLower = 01184 self._scaleHigher = 101185 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 object1193 """1194 return self._conference1195 1196 def addReviewingQuestion(self, text):1197 """ Adds this question at the end of the list of questions1198 """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 questions1206 """1207 # Filter the non visible questions1208 #visibleQuestions = []1209 #for question in self._reviewingQuestions:1210 #if question.getVisible():1211 # visibleQuestions.append(question)1212 #return visibleQuestions1213 return self._reviewingQuestions1214 1215 def removeReviewingQuestion(self, questionId, keepJud):1216 """ Removes a question from the list1217 """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 names1245 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 question1251 1252 def setNumberOfAnswers(self, num):1253 """ Set the number of possible answers (radio buttons) """1254 self._numberOfAnswers = num1255 1256 def getNumberOfAnswers(self):1257 """ Returns the number of possible answers """1258 try :1259 if self._numberOfAnswers:1260 pass1261 except AttributeError :1262 self._numberOfAnswers = 71263 return self._numberOfAnswers1264 1265 def setRadioButtonsLabels(self):1266 """ Set the labels for the radio buttons """1267 self._radioButtonsLabels = []1268 i = 01269 while i<self.getNumberOfAnswers():1270 if i == 0: # first label1271 self._radioButtonsLabels.append(str(self.getScaleLower()))1272 elif i == self._numberOfAnswers - 1: # last label1273 self._radioButtonsLabels.append(str(self.getScaleHigher()))1274 # middle label: exist middle radio button, i has the correct value, exist middle value in the scale1275 elif (self.getNumberOfAnswers() % 2 == 1) and (i == (self.getNumberOfAnswers() - 1) / 2):1276 # check if we need float division1277 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 += 11286 1287 def setRadioButtonsTitles(self):1288 """ Set the titles for the radio buttons """1289 self._radioButtonsTitles = []1290 i = 01291 while i<self.getNumberOfAnswers():1292 # check if we need float division1293 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 += 11300 1301 def getRadioButtonsTitles(self):1302 """ Get the titles for the radio buttons """1303 try :1304 if self._radioButtonsTitles:1305 pass1306 except AttributeError :1307 self._radioButtonsTitles = ["0", "1.7", "3.3", "5", "6.7", "8.3", "10"]1308 return self._radioButtonsTitles1309 1310 def getScaleLower(self):1311 try :1312 if self._scaleLower:1313 pass1314 except AttributeError :1315 self._scaleLower = 01316 return self._scaleLower1317 1318 def getScaleHigher(self):1319 try :1320 if self._scaleHigher:1321 pass1322 except AttributeError :1323 self._scaleHigher = 101324 return self._scaleHigher1325 1326 def getRadioButtonsLabels(self):1327 """ Get the labels for the radio buttons """1328 try :1329 if self._radioButtonsLabels:1330 pass1331 except AttributeError :1332 self._radioButtonsLabels = ["0", "", "", "5", "", "", "10"]1333 return self._radioButtonsLabels1334 1335 def setScale(self, min, max):1336 """ Set the scale for the rating and labels """1337 self._scaleLower = min1338 self._scaleHigher = max1339 1340 def getNewQuestionId(self):1341 """ Returns a new an unused questionId1342 Increments the questionId counter1343 """1344 return self._questionCounter.newCount()1345 1346 def getNewAnswerId(self):1347 """ Returns a new an unused answerId1348 Increments the answerId counter1349 """1350 return self._answerCounter.newCount()1351 1352 def notifyModification(self):1353 """ Notifies the DB that a list or dictionary attribute of this object has changed1354 """1355 self._p_changed = 11356 1357 1358 1359 1169 class Question(Persistent, Fossilizable): 1360 1170 -
indico/MaKaC/services/implementation/reviewing.py
r6ed0cd r3ffc0d 822 822 return self.getJudgementObject().getAnswers() 823 823 824 #####################################825 ### Abstract reviewing classes826 #####################################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 labels847 self._confAbstractReview.setRadioButtonsLabels()848 self._confAbstractReview.setRadioButtonsTitles()849 return self._value850 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 judgements865 self._conf.getAbstractMgr().recalculateAbstractsRating(self._min, self._max)866 # update the labels and titles again867 self._confAbstractReview.setRadioButtonsLabels()868 self._confAbstractReview.setRadioButtonsTitles()869 return self._value870 871 872 class AbstractReviewingUpdateExampleQuestion(AbstractReviewingBase):873 874 ''' Get the required data for the example question '''875 876 def _getAnswer(self):877 # get the necessary values878 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 fossils894 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 text903 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 fossils911 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 id920 self._keepJud = self._params.get("keepJud") # keep the previous judgements of the question921 922 def _getAnswer(self):923 # remove the question924 self._confAbstractReview.removeReviewingQuestion(self._value, self._keepJud)925 if not self._keepJud:926 # Purge all the judgements already exist with answers of this question927 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 answer931 fossils = []932 for question in reviewingQuestions:933 fossils.append(fossilize(question))934 return fossils935 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 id944 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 fossils953 954 824 955 825 ####################################### … … 1205 1075 "contribution.setSubmitted": ContributionReviewingSetSubmitted, 1206 1076 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 1215 1077 "paperReviewing.getContentQuestions": PaperReviewingGetContentQuestions, 1216 1078 "paperReviewing.addContentQuestion": PaperReviewingAddContentQuestion, -
indico/MaKaC/services/interface/rpc/handlers.py
rc45ad8 r3ffc0d 58 58 "timezone": importModule('MaKaC.services.implementation.timezone'), 59 59 "scheduler": importModule('MaKaC.services.implementation.scheduler'), 60 "abstractReviewing": importModule('MaKaC.services.implementation.abstractReviewing'), 60 61 61 62 # Hermes integration -
indico/MaKaC/webinterface/displayMgr.py
ra755c1 r3ffc0d 871 871 "manageabstractreviewing": { \ 872 872 "caption": _("Manage Abstract Reviewing"), \ 873 "URL": str(str(urlHandlers.UH ConfModifReviewingAbstractSetup.getURL(conf))), \873 "URL": str(str(urlHandlers.UHAbstractReviewingSetup.getURL(conf))), \ 874 874 "staticURL": "", \ 875 875 "parent": "mystuff"}, \ -
indico/MaKaC/webinterface/pages/conferences.py
r6ed0cd r3ffc0d 2127 2127 self._generalSection.addItem( self._contribListMenuItem) 2128 2128 2129 self._reviewingMenuItem = wcomponents.SideMenuItem(_(" Reviewing"),2129 self._reviewingMenuItem = wcomponents.SideMenuItem(_("Paper Reviewing"), 2130 2130 urlHandlers.UHConfModifReviewingAccess.getURL( target = self._conf ) ) 2131 2131 self._generalSection.addItem( self._reviewingMenuItem) … … 2294 2294 self._tabAbstractList = self._tabCtrl.newTab( "abstractList", _("List of Abstracts"), urlHandlers.UHConfAbstractList.getURL( self._conf ) ) 2295 2295 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)) 2296 2305 2297 2306 if not self._conf.hasEnabledSection("cfa"): … … 2300 2309 self._tabAbstractList.disable() 2301 2310 self._tabCFAPreview.disable() 2311 self._tabCFAR.disable() 2302 2312 2303 2313 self._setActiveTab() -
indico/MaKaC/webinterface/pages/reviewing.py
r90a4562 r3ffc0d 22 22 import MaKaC.webinterface.urlHandlers as urlHandlers 23 23 from MaKaC.webinterface.pages.conferences import WPConferenceModifBase 24 from MaKaC.webinterface.pages.conferences import WPConferenceModifAbstractBase25 24 from MaKaC.i18n import _ 26 25 import MaKaC.webinterface.pages.conferences as conferences 27 from xml.sax.saxutils import quoteattr28 from MaKaC.common import Config29 from MaKaC import review30 from MaKaC.webinterface.common.abstractNotificator import EmailNotificator31 26 #============================================================ 32 27 #==================== Reviewing ============================= … … 59 54 def _createTabCtrl(self): 60 55 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 yet74 #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 ) )80 56 81 57 if self._isPRM or self._canModify: … … 114 90 self._tabListContribToJudgeAsEditor = self._subtabPaperReviewing.newSubTab( "contributionsToJudge", "Judge as Layout Reviewer",\ 115 91 urlHandlers.UHConfModifListContribToJudgeAsEditor.getURL( self._conf ) ) 116 117 92 118 93 self._setActiveTab() … … 331 306 return vars 332 307 333 #classes for abstract reviewing setup tab334 class WPConfModifAbstractReviewing(WPConfModifReviewingBase):335 """ Tab for setup of general aspects of the abstract reviewing process336 """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 = msg354 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 = conference372 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 vars378 379 308 #classes for control tab 380 309 class WPConfModifReviewingControl(WPConfModifReviewingBase): … … 404 333 return wc.getHTML( p ) 405 334 406 #class for setting up abstract notification templates407 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 = conference422 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> <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 vars452 453 class NotifTplToAddrWrapper:454 _id=""455 _label=""456 _klass=None457 458 def getId(cls):459 return cls._id460 getId=classmethod(getId)461 462 def getLabel(cls):463 return _(cls._label)464 getLabel=classmethod(getLabel)465 466 def getToAddrKlass(cls):467 return cls._klass468 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 False476 isSelectedByDefault = classmethod(isSelectedByDefault)477 478 479 class NotifTplToAddrSubmitterWrapper(NotifTplToAddrWrapper):480 481 _id="submitter"482 _klass=review.NotifTplToAddrSubmitter483 _label="Submitters"484 485 def isSelectedByDefault(cls):486 return True487 isSelectedByDefault = classmethod(isSelectedByDefault)488 489 class NotifTplToAddrPrimaryAuthorsWrapper(NotifTplToAddrWrapper):490 491 _id="primaryAuthors"492 _label= "Primary authors"493 _klass=review.NotifTplToAddrPrimaryAuthors494 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=conf515 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 " ".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 vars562 563 564 class WConfModCFANotifTplEditData(wcomponents.WTemplated):565 566 def __init__(self,notifTpl):567 self._notifTpl=notifTpl568 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 " ".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 vars639 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 = notifTpl656 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 pass670 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 + body683 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=notifTpl707 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=notifTpl734 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 vars754 755 class NotifTplConditionWrapper:756 _id=""757 _label=""758 _klass=None759 760 def getId(cls):761 return cls._id762 getId=classmethod(getId)763 764 def getLabel(cls):765 return _(cls._label)766 getLabel=classmethod(getLabel)767 768 def getConditionKlass(cls):769 return cls._klass770 getConditionKlass=classmethod(getConditionKlass)771 772 def addCondition(cls,tpl,**data):773 pass774 addCondition=classmethod(addCondition)775 776 def needsDialog(cls,**data):777 return False778 needsDialog=classmethod(needsDialog)779 780 def getDialogKlass(cls):781 return None782 getDialogKlass=classmethod(getDialogKlass)783 784 785 class NotifTplCondAcceptedWrapper(NotifTplConditionWrapper):786 787 _id="accepted"788 _label= _("in status ACCEPTED")789 _klass=review.NotifTplCondAccepted790 791 @classmethod792 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 @classmethod798 def needsDialog(cls,**data):799 if data.has_key("contribType") and data["contribType"]!="":800 return False801 return True802 803 @classmethod804 def getDialogKlass(cls):805 return WPModNotifTplCondAcc806 807 808 class NotifTplCondRejectedWrapper(NotifTplConditionWrapper):809 810 _id="rejected"811 _label= _("in status REJECTED")812 _klass=review.NotifTplCondRejected813 814 @classmethod815 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.NotifTplCondMerged823 824 @classmethod825 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=tpl849 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 vars871 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 = conf884 self._notifTpl = notifTpl885 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 vars937 938 939 940 class WPConfReviewingAbstractList( WPConfModifReviewingBase):941 942 def __init__(self, rh, conf, msg):943 self._msg = msg944 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 958 335 959 336 class WConfModifReviewingControl(wcomponents.WTemplated): -
indico/MaKaC/webinterface/rh/abstractModif.py
r6ed0cd r3ffc0d 33 33 from MaKaC.i18n import _ 34 34 from MaKaC.webinterface.rh.conferenceModif import CFAEnabled 35 from MaKaC. reviewing import ConferenceAbstractReview35 from MaKaC.abstractReviewing import ConferenceAbstractReview 36 36 from MaKaC.reviewing import Answer 37 37 -
indico/MaKaC/webinterface/rh/conferenceModif.py
r4bd61a r3ffc0d 88 88 89 89 from indico.modules.scheduler import tasks 90 91 from MaKaC.webinterface.pages.abstractReviewing import * 90 92 91 93 class RHConferenceModifBase( RHConferenceBase, RHModificationBaseProtected ): … … 3565 3567 return p.display() 3566 3568 3569 class 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 3578 class 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 3567 3588 class RHNotifTpl(RHConfModifCFABase): 3568 3589 3569 3590 def _process(self): 3570 p = reviewing.WPConfModifAbstractsReviewingNotifTplList(self, self._target)3591 p = WPConfModifAbstractsReviewingNotifTplList(self, self._target) 3571 3592 return p.display() 3572 3593 … … 3613 3634 tpl.setCCAddrList(self._ccList) 3614 3635 for toAddr in self._toList: 3615 toAddrWrapper= reviewing.NotifTplToAddrsFactory.getToAddrById(toAddr)3636 toAddrWrapper=NotifTplToAddrsFactory.getToAddrById(toAddr) 3616 3637 if toAddrWrapper: 3617 3638 toAddrWrapper.addToAddr(tpl) … … 3621 3642 self._redirect(url) 3622 3643 return 3623 p= reviewing.WPModCFANotifTplNew(self,self._target)3644 p=WPModCFANotifTplNew(self,self._target) 3624 3645 return p.display(title=self._title,\ 3625 3646 description=self._description,\ … … 3672 3693 3673 3694 def _process(self): 3674 p = reviewing.WPModCFANotifTplDisplay(self, self._target)3695 p = WPModCFANotifTplDisplay(self, self._target) 3675 3696 return p.display() 3676 3697 … … 3679 3700 3680 3701 def _process(self): 3681 p = reviewing.WPModCFANotifTplPreview(self, self._target)3702 p = WPModCFANotifTplPreview(self, self._target) 3682 3703 return p.display() 3683 3704 … … 3706 3727 if len(self._toList)<=0: 3707 3728 error.append( _("""At least one "To Address" must be seleted """)) 3708 p= reviewing.WPModCFANotifTplEdit(self, self._target)3729 p=WPModCFANotifTplEdit(self, self._target) 3709 3730 return p.display(errorList=error, \ 3710 3731 title=self._title, \ … … 3723 3744 self._notifTpl.clearToAddrs() 3724 3745 for toAddr in self._toList: 3725 toAddrWrapper= reviewing.NotifTplToAddrsFactory.getToAddrById(toAddr)3746 toAddrWrapper=NotifTplToAddrsFactory.getToAddrById(toAddr) 3726 3747 if toAddrWrapper: 3727 3748 toAddrWrapper.addToAddr(self._notifTpl) … … 3729 3750 return 3730 3751 else: 3731 p= reviewing.WPModCFANotifTplEdit(self, self._target)3752 p=WPModCFANotifTplEdit(self, self._target) 3732 3753 return p.display() 3733 3754 … … 3756 3777 def _process(self): 3757 3778 if self._action=="OK": 3758 condWrapper= reviewing.NotifTplConditionsFactory.getConditionById(self._condType)3779 condWrapper=NotifTplConditionsFactory.getConditionById(self._condType) 3759 3780 if condWrapper: 3760 3781 if condWrapper.needsDialog(**self._otherData): -
indico/MaKaC/webinterface/rh/reviewingModif.py
r4bd61a r3ffc0d 23 23 from MaKaC.errors import MaKaCError 24 24 from MaKaC.webinterface.pages.conferences import WPConferenceModificationClosed 25 from MaKaC.webinterface.pages.reviewing import WPConfModifReviewingPaperSetup,\ 26 WPConfModifAbstractReviewing 25 from MaKaC.webinterface.pages.reviewing import WPConfModifReviewingPaperSetup 27 26 from MaKaC.webinterface.rh.conferenceBase import RHConferenceBase 28 27 from MaKaC.webinterface.rh.conferenceModif import RHConferenceModifBase,\ … … 102 101 elif self._isPRM: 103 102 url = urlHandlers.UHConfModifReviewingPaperSetup.getURL( self._conf ) 104 elif self._conf.canModify(self.getAW()):105 url = urlHandlers.UHConfModifReviewingAbstractSetup.getURL( self._conf)106 103 elif self._isReferee: 107 104 url = urlHandlers.UHConfModifReviewingAssignContributionsList.getURL( self._conf ) … … 159 156 160 157 161 class RHConfModifReviewingAbstractSetup( RHConferenceModifBase ):162 """ Class used when the user clicks on the Abstract Setup163 subtab of the Reviewing tab164 """165 _uh = urlHandlers.UHConfModifReviewingAbstractSetup166 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 174 158 175 159 #################################### Start of old classes that are not used anymore ############################### -
indico/MaKaC/webinterface/rh/trackModif.py
r6ed0cd r3ffc0d 40 40 from MaKaC.webinterface.mail import GenericMailer, GenericNotification 41 41 from MaKaC.i18n import _ 42 from MaKaC. reviewing import ConferenceAbstractReview42 from MaKaC.abstractReviewing import ConferenceAbstractReview 43 43 from MaKaC.reviewing import Answer 44 44 -
indico/MaKaC/webinterface/tpls/AbstractReviewingSetup.tpl
r90a4562 r3ffc0d 41 41 <script type="text/javascript"> 42 42 // 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'}, 46 46 {conference: '<%= abstractReview.getConference().getId() %>'},'question', 'abstractReviewingQuestions', true)); 47 47 … … 51 51 52 52 // Component for example question 53 var previewQuestion = new ExampleQuestionWidget(' reviewing.abstractReviewing.updateExampleQuestion',53 var previewQuestion = new ExampleQuestionWidget('abstractReviewing.updateExampleQuestion', 54 54 {conference: '<%= abstractReview.getConference().getId() %>'}); 55 55 previewQuestion.draw(); 56 56 57 57 // 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', 59 59 {conference: '<%= abstractReview.getConference().getId() %>'},'<%= abstractReview.getNumberOfAnswers() %>').draw()); 60 60 61 $E('inPlaceEditScale').set(new ScaleEditWidget(' reviewing.abstractReviewing.changeScale',61 $E('inPlaceEditScale').set(new ScaleEditWidget('abstractReviewing.changeScale', 62 62 {conference: '<%= abstractReview.getConference().getId() %>'}, 63 63 {'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 %> 2 2 <form action=<%= postURL %> method="POST"> 3 3 <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 2962 2962 _relativeURL = "trackAbstractModif.py/commentRem" 2963 2963 2964 2964 2965 class UHAbstractReviewingNotifTpl(URLHandler): 2965 2966 _relativeURL = "confModifCFA.py/notifTpl" … … 3276 3277 class UHConfModAbstractBookEdit( URLHandler ): 3277 3278 _relativeURL = "confModBOA.py/edit" 3279 3280 class UHAbstractReviewingSetup(URLHandler): 3281 _relativeURL = "confModifCFA.py/reviewingSetup" 3282 3283 class UHAbstractReviewingTeam (URLHandler): 3284 _relativeURL = "confModifCFA.py/reviewingTeam" 3278 3285 3279 3286 class UHConfModScheduleDataEdit( URLHandler ): … … 4365 4372 _relativeURL = "confModifReviewing.py/deleteTemplate" 4366 4373 4367 class UHConfModifReviewingAbstractSetup ( URLHandler ):4368 _relativeURL = "confModifReviewing.py/abstractSetup"4369 4370 4374 class UHConfModifReviewingControl ( URLHandler ): 4371 4375 _relativeURL = "confModifReviewingControl.py" -
indico/htdocs/confModifCFA.py
rc7428e r3ffc0d 53 53 def removeSubmitter( req, **params ): 54 54 return conferenceModif.RHConfModifCFARemoveSubmitter( req ).process( params ) 55 56 def reviewingSetup(req, **params): 57 return conferenceModif.RHAbstractReviewingSetup(req).process(params) 58 59 def reviewingTeam(req, **params): 60 return conferenceModif.RHAbstractReviewingTeam(req).process(params) 55 61 56 62 def notifTpl( req, **params ): -
indico/htdocs/confModifReviewing.py
r6e9e95 r3ffc0d 61 61 def deleteTemplate(req, **params): 62 62 return reviewingModif.RHDeleteTemplate(req).process(params) 63 64 # Abstract reviewing65 def abstractSetup(req, **params):66 return reviewingModif.RHConfModifReviewingAbstractSetup(req).process(params)
Note: See TracChangeset
for help on using the changeset viewer.
