Changeset 4bd938 in indico
- Timestamp:
- 01/18/11 19:53:44 (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, d9941f8582b36b24821a11ea5ba16fda6a457fb1
- Children:
- 474924
- Parents:
- bc991f
- git-author:
- Cesar Munoz Orena <cesar.munoz.orena@…> (11/15/10 15:56:25)
- git-committer:
- Jose Benito <jose.benito.gonzalez@…> (01/18/11 19:53:44)
- Location:
- indico
- Files:
-
- 10 edited
-
MaKaC/plugins/InstantMessaging/XMPP/components.py (modified) (1 diff)
-
MaKaC/plugins/InstantMessaging/XMPP/handlers.py (modified) (5 diffs)
-
MaKaC/plugins/InstantMessaging/pages.py (modified) (2 diffs)
-
MaKaC/plugins/InstantMessaging/rh.py (modified) (3 diffs)
-
MaKaC/plugins/helpers.py (modified) (2 diffs)
-
MaKaC/webinterface/tpls/ConfModifChat.tpl (modified) (1 diff)
-
MaKaC/webinterface/tpls/ConferenceInstantMessaging.tpl (modified) (1 diff)
-
MaKaC/webinterface/urlHandlers.py (modified) (1 diff)
-
htdocs/confModifChat.py (modified) (1 diff)
-
htdocs/js/indico/Plugins/InstantMessaging.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
indico/MaKaC/plugins/InstantMessaging/XMPP/components.py
rbc991f r4bd938 107 107 out.writeTag("desktop", 'false') 108 108 if PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinWebClient'): 109 out.writeTag("web", WebLinkGenerator(chatroom).generate( ))109 out.writeTag("web", WebLinkGenerator(chatroom).generate(True)) 110 110 else: 111 111 out.writeTag("web", 'false') -
indico/MaKaC/plugins/InstantMessaging/XMPP/handlers.py
rbc991f r4bd938 20 20 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 21 21 22 import urllib2, datetime, os, tempfile, stat 22 23 from MaKaC.plugins.InstantMessaging.Chatroom import XMPPChatroom 23 24 from MaKaC.plugins.InstantMessaging.handlers import ChatroomBase 24 25 from MaKaC.services.implementation.base import ServiceBase, ParameterManager 25 26 from MaKaC.services.interface.rpc.common import ServiceError, NoReportError 27 from MaKaC.common.Configuration import Config 26 28 from MaKaC.common.contextManager import ContextManager 27 29 from MaKaC.common.logger import Logger … … 31 33 from MaKaC.plugins import Observable 32 34 from MaKaC.plugins.util import PluginFieldsWrapper 33 from MaKaC.plugins.helpers import DBHelpers, MailHelper 35 from MaKaC.plugins.helpers import DBHelpers, MailHelper, DeleteLogLinkGenerator, LogLinkGenerator 34 36 35 37 from MaKaC.plugins.InstantMessaging.XMPP.bot import IndicoXMPPBotRoomExists, IndicoXMPPBotCreateRoom, IndicoXMPPBotEditRoom, IndicoXMPPBotDeleteRoom, IndicoXMPPBotGetPreferences 36 from MaKaC.conference import ConferenceHolder 38 from MaKaC.conference import ConferenceHolder, LocalFile 37 39 38 40 … … 310 312 self.deleteRoomXMPP(self._botJID, self._botPass, self._room, message) 311 313 314 # make the log folder unaccessible in the future 315 url = DeleteLogLinkGenerator(self._chatroom).generate() 316 req = urllib2.Request(url, None, {'Accept-Charset' : 'utf-8'}) 317 document = urllib2.urlopen(req) 318 312 319 Logger.get('InstantMessaging (XMPP-Indico server)').info("The room %s has been deleted by the user %s at %s hours" %(self._title, self._user.getName(), nowutc())) 313 320 … … 392 399 393 400 401 class AddLogs2Material( ServiceBase ): 402 403 def __init__(self, params, remoteHost, session): 404 ServiceBase.__init__(self, params, remoteHost, session) 405 406 def _checkParams(self): 407 self._conf = ConferenceHolder().getById(self._params['confId']) 408 self._chatroom = DBHelpers.getChatroom(self._params['crId']) 409 self._sdate = self._params['sdate'] if self._params.has_key('sdate') else None 410 self._edate = self._params['edate'] if self._params.has_key('edate') else None 411 self._forEvent = bool(self._params['forEvent']) if self._params.has_key('forEvent') else None 412 self._getAll = bool(self._params['getAll']) if self._params.has_key('getAll') else None 413 self._matName = self._params['matName'] 414 self._repositoryId = None 415 416 def getNewId(self): 417 # get the list of custom materials 418 matList = self._conf.getMaterialList() 419 maxId = -1 420 for material in matList: 421 if material.getId() > maxId: 422 maxId = material.getId() 423 # we want the next id 424 return maxId+1 425 426 def _getNewTempFile( self ): 427 cfg = Config.getInstance() 428 tempPath = cfg.getUploadedFilesTempDir() 429 tempFileName = tempfile.mkstemp( suffix="Indico.tmp", dir = tempPath )[1] 430 return tempFileName 431 432 #XXX: improve routine to avoid saving in temporary file 433 def _saveFileToTemp( self, doc ): 434 fileName = self._getNewTempFile() 435 f = open( fileName, "wb" ) 436 f.write( doc ) 437 f.close() 438 return fileName 439 440 def _getAnswer( self ): 441 if self._getAll: 442 url = LogLinkGenerator(self._chatroom).generate() 443 elif self._forEvent: 444 url = LogLinkGenerator(self._chatroom).generate(str(self._conf.getStartDate().date()), str(self._conf.getEndDate().date())) 445 else: 446 url = LogLinkGenerator(self._chatroom).generate(self._sdate, self._edate) 447 448 req = urllib2.Request(url, None, {'Accept-Charset' : 'utf-8'}) 449 document = urllib2.urlopen(req).read() 450 451 # create the file 452 fDict = {} 453 fDict["filePath"]=self._saveFileToTemp(document) 454 455 self._tempFilesToDelete.append(fDict["filePath"]) 456 457 fDict["fileName"]= "Logs.html" 458 fDict["size"] = int(os.stat(fDict["filePath"])[stat.ST_SIZE]) 459 self._file = fDict 460 461 # create the material 462 registry = self._conf.getMaterialRegistry() 463 self._materialId = str(self.getNewId()) 464 465 mf = registry.getById(self._materialId) 466 mat = mf.create(self._conf) 467 468 # create the resource 469 resource = LocalFile() 470 resource.setFileName(self._file["fileName"]) 471 resource.setFilePath(self._file["filePath"]) 472 resource.setDescription("Chat logs for the chat room %s" %self._chatroom.getTitle()) 473 resource.setName(resource.getFileName()) 474 475 self._conf.getLogHandler().logAction({"subject":"Added file %s%s" % (self._file["fileName"],'')},"Files",self._aw.getUser()) 476 477 status = "OK" 478 info = resource 479 480 # forcedFileId - in case there is a conflict, use the file that is 481 # already stored 482 mat.addResource(resource, forcedFileId=self._repositoryId) 483 484 485 # store the repo id, for files 486 if isinstance(resource, LocalFile): 487 self._repositoryId = resource.getRepositoryId() 488 489 protectedObject = resource 490 protectedObject.setProtection(1) 491 492 394 493 methodMap = { 395 494 "XMPP.createRoom": CreateChatroom, … … 398 497 "XMPP.getRoomPreferences": GetRoomPreferences, 399 498 "XMPP.getRoomsByUser": GetRoomsByUser, 400 "XMPP.addConference2Room": AddConference2Room 499 "XMPP.addConference2Room": AddConference2Room, 500 "XMPP.attachLogs": AddLogs2Material 401 501 } -
indico/MaKaC/plugins/InstantMessaging/pages.py
rc1435a r4bd938 27 27 from MaKaC.common.timezoneUtils import getAdjustedDate, nowutc, setAdjustedDate, DisplayTZ, minDatetime 28 28 from MaKaC.plugins import PluginsHolder 29 from MaKaC.plugins.helpers import DBHelpers 29 from MaKaC.plugins.helpers import DBHelpers, DesktopLinkGenerator, WebLinkGenerator 30 30 from MaKaC.plugins.util import PluginFieldsWrapper 31 31 … … 103 103 vars["Conference"] = self._conf 104 104 try: 105 vars["Chatrooms"] = fossilize( list(DBHelpers.getChatroomList(self._conf)) ) 105 chatrooms = list(DBHelpers.getChatroomList(self._conf)) 106 vars["Chatrooms"] = fossilize(chatrooms) 106 107 if len(vars['Chatrooms']) is 0: 107 108 vars['Chatrooms'] = None 108 109 except Exception, e: 109 110 vars["Chatrooms"] = None 111 chatrooms = {} 112 vars['links'] = {} 113 for cr in chatrooms: 114 vars['links'][cr.getId() ] = {} 115 if PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinDesktopClients'): 116 vars['links'][cr.getId()]['web'] = DesktopLinkGenerator(cr).generate() 117 if PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinWebClient'): 118 vars['links'][cr.getId()]['desktop'] = WebLinkGenerator(cr).generate(True) 119 120 vars['links'][cr.getId()]['logs'] = urlHandlers.UHConfModifChatSeeLogs.getURL(self._conf) 121 vars['links'][cr.getId()]['logs'].addParam('chatroom', cr.getId()) 122 vars['links'][cr.getId()]['logs'] = vars['links'][cr.getId()]['logs'].__str__() 123 110 124 vars['DefaultServer'] = PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('chatServerHost') 111 125 vars["EventDate"] = formatDateTime(getAdjustedDate(nowutc(), self._conf)) -
indico/MaKaC/plugins/InstantMessaging/rh.py
rc1435a r4bd938 21 21 22 22 from MaKaC.plugins import PluginsHolder 23 from MaKaC.conference import ConferenceHolder 24 from MaKaC.plugins.helpers import DBHelpers, LogLinkGenerator 23 25 from MaKaC.plugins.InstantMessaging.pages import WPConfModifChat, WPConferenceInstantMessaging 24 26 from MaKaC.webinterface import urlHandlers 25 27 from MaKaC.webinterface.rh.conferenceDisplay import RHConferenceBaseDisplay 26 28 from MaKaC.webinterface.rh.conferenceModif import RHConferenceModifBase 29 import urllib2 27 30 28 31 … … 59 62 60 63 64 class RHChatSeeLogs(RHChatModifBase): 65 """ For the conference modification""" 66 _uh = urlHandlers.UHConfModifChatSeeLogs 67 68 def _checkParams(self, params): 69 RHChatModifBase._checkParams(self, params) 70 self._conf = ConferenceHolder().getById(params['confId']) 71 self._chatroom = DBHelpers.getChatroom(params['chatroom']) 72 self._sdate = params['sdate'] if params.has_key('sdate') else None 73 self._edate = params['edate'] if params.has_key('edate') else None 74 self._forEvent = bool(params['forEvent']) if params.has_key('forEvent') else None 75 self._getAll = not self._sdate and not self._edate and not self._forEvent 76 77 def _process( self ): 78 if self._getAll: 79 url = LogLinkGenerator(self._chatroom).generate() 80 elif self._forEvent: 81 url = LogLinkGenerator(self._chatroom).generate(str(self._conf.getStartDate().date()), str(self._conf.getEndDate().date())) 82 else: 83 url = LogLinkGenerator(self._chatroom).generate(self._sdate, self._edate) 84 85 req = urllib2.Request(url, None, {'Accept-Charset' : 'utf-8'}) 86 document = urllib2.urlopen(req).read() 87 return document 88 89 61 90 class RHInstantMessagingDisplay(RHConferenceBaseDisplay): 62 91 """ For the conference display""" … … 69 98 p = WPConferenceInstantMessaging( self, self._conf ) 70 99 return p.display() 100 -
indico/MaKaC/plugins/helpers.py
rbc991f r4bd938 127 127 LinkGenerator.__init__(self, chatroom) 128 128 129 def generate(self): 130 return 'http://'+ self._chatroom.getHost()+ '/?r=' +self._chatroom.getTitle()+'@conference.'+self._chatroom.getHost()+'?join' 129 def generate(self, anonymous = False): 130 if anonymous: 131 return 'https://'+ self._chatroom.getHost()+ '/?r=' +self._chatroom.getTitle()+'@conference.'+self._chatroom.getHost()+'?join' 132 else: 133 return 'https://'+ self._chatroom.getHost()+ '/?x=' +self._chatroom.getTitle()+'@conference.'+self._chatroom.getHost()+'?join' 131 134 132 135 class DesktopLinkGenerator(LinkGenerator): … … 137 140 def generate(self): 138 141 return 'xmpp:'+ self._chatroom.getTitle()+'@'+self._chatroom.getHost()+'?join' 142 143 class LogLinkGenerator(LinkGenerator): 144 145 def __init__(self, chatroom): 146 LinkGenerator.__init__(self, chatroom) 147 148 def generate(self, sDate = None, eDate = None): 149 dates = '' 150 if sDate != None: 151 dates = '&sdate='+sDate 152 elif eDate != None: 153 dates = '&edate='+eDate 154 if eDate != None and sDate != None: 155 dates += '&edate='+eDate 156 return 'https://'+ \ 157 PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('chatServerHost') + \ 158 '/code.py/?cr=' + \ 159 self._chatroom.getTitle() + \ 160 '@conference.' + \ 161 self._chatroom.getHost() + \ 162 dates 163 164 class DeleteLogLinkGenerator(LinkGenerator): 165 def __init__(self, chatroom): 166 LinkGenerator.__init__(self, chatroom) 167 168 def generate(self): 169 return 'https://'+ \ 170 PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('chatServerHost') + \ 171 '/code.py/delete?cr=' + \ 172 self._chatroom.getTitle() + \ 173 '@conference.' + \ 174 self._chatroom.getHost() -
indico/MaKaC/webinterface/tpls/ConfModifChat.tpl
rc1435a r4bd938 51 51 /* ------------------------------ GLOBAL VARIABLES ------------------------------- */ 52 52 53 <% from MaKaC.plugins.util import PluginFieldsWrapper %> 54 55 var showDesktopLink = <%=jsonEncode( PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinDesktopClients') )%>; 56 var showWebLink = <%=jsonEncode( PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinWebClient') )%>; 53 57 var chatrooms = $L(<%= jsonEncode(Chatrooms) %>); 58 var links = $O(<%= jsonEncode(links) %>); 59 54 60 var defaultHost = <%= jsonEncode(DefaultServer) %>; 55 61 var customHost = ""; -
indico/MaKaC/webinterface/tpls/ConferenceInstantMessaging.tpl
rbc991f r4bd938 75 75 } 76 76 if (showWebLink){ 77 menuItems['Using your desktop client'] = <%=jsonEncode( WebLinkGenerator(cr).generate( ) )%>;77 menuItems['Using your desktop client'] = <%=jsonEncode( WebLinkGenerator(cr).generate(True) )%>; 78 78 } 79 79 joinMenu = new PopupMenu(menuItems, [joinLink], 'categoryDisplayPopupList'); -
indico/MaKaC/webinterface/urlHandlers.py
ra755c1 r4bd938 1484 1484 class UHConfModifChat(URLHandler): 1485 1485 _relativeURL = "confModifChat.py" 1486 1487 class UHConfModifChatSeeLogs(URLHandler): 1488 _relativeURL = "confModifChat.py/logs" 1486 1489 1487 1490 class UHConfModifCollaborationManagers(URLHandler): -
indico/htdocs/confModifChat.py
ra755c1 r4bd938 24 24 def index(req, **params): 25 25 return chatFormModif.RHChatFormModif( req ).process( params ) 26 27 def logs(req, **params): 28 return chatFormModif.RHChatSeeLogs( req ).process( params ) 29 30 def attachLogs(req, **params): 31 return chatFormModif.RHChatAttachLogs2Material( req ).process( params ) -
indico/htdocs/js/indico/Plugins/InstantMessaging.js
rbc991f r4bd938 496 496 ); 497 497 498 499 /** 500 * Utility function to display a simple alert popup. 501 * You can think of it as an "confirm" replacement. 502 * It will have a title, a close button, an OK button and a Cancel button. 503 * @param {Html or String} title The title of the error popup. 504 * @param {Element} content Anything you want to put inside. 505 * @param {function} handler A function that will be called with a boolean as argument: 506 * true if the user pressers "ok", or false if the user presses "cancel" 507 */ 508 type("LogPopup", ["ExclusivePopupWithButtons"], 509 { 510 draw: function() { 511 var self = this; 512 513 var okButton = Html.input('button', {style:{marginRight: pixels(3)}}, $T('OK')); 514 okButton.observeClick(function(){ 515 result = self.handler(true); 516 if (result){ 517 self.close(); 518 window.location = result; 519 } 520 }); 521 522 var cancelButton = Html.input('button', {style:{marginLeft: pixels(3)}}, $T('Cancel')); 523 cancelButton.observeClick(function(){ 524 self.handler(false); 525 self.close(); 526 }); 527 528 return this.ExclusivePopupWithButtons.prototype.draw.call(this, 529 this.content, 530 Html.div({}, okButton, cancelButton)); 531 } 532 }, 533 534 function(title, content, handler) { 535 var self = this; 536 537 this.content = content; 538 this.handler = handler; 539 this.ExclusivePopupWithButtons(Html.div({style:{textAlign: 'center'}}, title), function(){ 540 self.handler(false); 541 return true; 542 }); 543 } 544 ); 545 546 547 498 548 /** 499 549 * Utility function to "refresh" the display of a chat room and show its updated value if it changed. … … 705 755 row.append(cellEditRemove); 706 756 757 var joinNow = Html.td({id:"joinLink", name:"joinLink", className : "dropDownMenu highlight", style:{fontWeight: "bold", whiteSpace: "nowrap"}}, Html.a({href: "#"}, $T("Join now!")) ); 758 row.append(joinNow); 759 showLinkMenu(joinNow, chatroom); 760 761 if(chatroom.createdInLocalServer && links.get(chatroom.id)){ 762 var logs = Html.td({id:"logsLink", name:"logsLink", className : "dropDownMenu highlight", style:{fontWeight: "bold", whiteSpace: "nowrap"}}, " | ", Html.a({href: "#"}, $T("Logs")) ); 763 row.append(logs); 764 showLogOptions(logs, chatroom); 765 } 766 707 767 return row; 708 768 }; 769 770 var showLinkMenu = function(element, chatroom){ 771 var joinLink = $E('joinLink'); 772 var joinMenu = null; 773 if(element){ 774 element.observeClick(function(e) { 775 // Close the menu if clicking the link when menu is open 776 if (joinMenu != null && joinMenu.isOpen()) { 777 joinMenu.close(); 778 joinMenu = null; 779 return; 780 } 781 var menuItems = {}; 782 if (showDesktopLink){ 783 menuItems['Using web client'] = links.get(chatroom.id).desktop; 784 } 785 if (showWebLink){ 786 menuItems['Using your desktop client'] = links.get(chatroom.id).web; 787 } 788 joinMenu = new PopupMenu(menuItems, [element], 'categoryDisplayPopupList'); 789 var pos = element.getAbsolutePosition(); 790 joinMenu.open(pos.x - 5, pos.y + element.dom.offsetHeight + 2); 791 return false; 792 }); 793 } 794 } 795 796 var createBaseForm = function(){ 797 var startDate = new DateTimeSelector(); 798 var endDate = new DateTimeSelector(); 799 800 var getAll = Html.radio({id:"getall", name:"rangetype"}); 801 getAll.observe(function(value){ 802 if (value){ 803 startDate.disable(); 804 endDate.disable(); 805 } 806 }); 807 var forEvent = Html.radio({id:"forevent", name:"rangetype"}, true); 808 forEvent.observe(function(value){ 809 if (value){ 810 startDate.disable(); 811 endDate.disable(); 812 } 813 }); 814 var ownRange = Html.radio({id:"ownrange", name:"rangetype"}); 815 ownRange.observe(function(value){ 816 if (value){ 817 startDate.enable(); 818 endDate.enable(); 819 } 820 }); 821 startDate.disable(); 822 endDate.disable(); 823 824 var content = Html.div({style: {marginTop:pixels(7), marginBottom:pixels(7)}}, 825 Html.div({style: {marginTop:pixels(5)}}, forEvent, $T('Get logs for this chat room in this event') ), 826 Html.div({style: {marginTop:pixels(5)}}, getAll, $T('Get the logs for this chat room in this event and the past ones') ), 827 Html.div({style: {marginTop:pixels(8)}}, ownRange, $T('Create your own range')), 828 Html.div( {style: {marginLeft:pixels(10),marginTop:pixels(15), marginBottom:pixels(5)}}, 829 Html.span({style: {marginRight:pixels(10)}}, $T("from")), 830 startDate.draw(), 831 Html.span({style: {margin:pixels(10)}}, $T("to")), 832 endDate.draw() 833 ) 834 ); 835 return {'content': content, 'sdate': startDate, 'edate': endDate, 'getall': getAll, 'forevent': forEvent, 'ownrange': ownRange}; 836 } 837 838 var showLogOptions = function(element, chatroom){ 839 var logsLink = $E('logsLink'); 840 var logsMenu = null; 841 if(element){ 842 element.observeClick(function(e) { 843 // Close the menu if clicking the link when menu is open 844 if (logsMenu != null && logsMenu.isOpen()) { 845 logsMenu.close(); 846 logsMenu = null; 847 return; 848 } 849 var menuItems = {}; 850 851 var form = createBaseForm(); 852 853 menuItems['See logs'] = new LogPopup($T('Select the dates to retrieve the logs'), 854 form.content, 855 function(value){ 856 if (value){ 857 // replace all the / with - to avoid problems in the URL 858 return buildLogURL(chatroom, 859 form.sdate.get()?form.sdate.get().replace(/\//g,"-"):null, 860 form.edate.get()?form.edate.get().replace(/\//g,"-"):null, 861 form.getall.get(), 862 form.forevent.get(), 863 form.ownrange.get()); 864 } 865 }); 866 var parameterManager = new IndicoUtil.parameterManager(); 867 868 var form2 = createBaseForm(); 869 var materialName = Html.input('text',{style: {marginLeft:pixels(7)}}); 870 parameterManager.add(materialName, 'text', false) 871 var materialContent = form2.content 872 materialContent.addContent(Html.div({style: {fontWeight: "bold", maxWidth:pixels(500),marginTop:pixels(25)}}, 873 $T('Have in mind that due to security policy logs will be private. If you want to change the protection level you will have to do it manually.')) 874 ); 875 materialContent.addContent(Html.div({style: {float: 'right',marginTop:pixels(10)}}, 876 $T("Material name"), 877 materialName) 878 ); 879 menuItems['Attach logs to event material'] = new LogPopup($T('Select the name that logs will have in the material section'), 880 materialContent, 881 function(value){ 882 if(value){ 883 checkOk = parameterManager.check(); 884 if(checkOk){ 885 var killProgress = IndicoUI.Dialogs.Util.progress($T("Adding...")); 886 // make ajax request 887 indicoRequest( 888 'XMPP.attachLogs', 889 { 890 confId: conferenceID, 891 crId: chatroom.id, 892 sdate: form2.sdate.get()?form.sdate.get().replace(/\//g,"-"):null, 893 edate: form2.edate.get()?form.edate.get().replace(/\//g,"-"):null, 894 getAll: form2.getall.get(), 895 forEvent: form2.forevent.get(), 896 matName: materialName.get() 897 }, 898 function(result,error) { 899 if (!error) { 900 // If the server found no problems, we remove the chatroom from the watchlist and remove the corresponding iframe. 901 if (result && result.error) { 902 killProgress(); 903 } else { 904 905 } 906 killProgress(); 907 } else { 908 killProgress(); 909 IndicoUtil.errorReport(error); 910 } 911 } 912 ); 913 } 914 } 915 }); 916 //links.get(chatroom.id).web; 917 logsMenu = new PopupMenu(menuItems, [element], 'categoryDisplayPopupList'); 918 var pos = element.getAbsolutePosition(); 919 logsMenu.open(pos.x - 5, pos.y + element.dom.offsetHeight + 2); 920 return false; 921 }); 922 } 923 } 924 925 var buildLogURL = function(chatroom, sdate, edate, selectAll, forEvent, ownRange){ 926 /* Builds the url to make the request to web.py and get the logs 927 * sdate and edate: range of dates to get the logs 928 * selectAll: we want to retrieve all the logs for the chat room 929 * forEvent: we want to retrieve the logs for the current event 930 * ownRange: we want to specify the range of dates 931 */ 932 url = links.get(chatroom.id).logs; 933 if (selectAll){ 934 return url; 935 } 936 else if (forEvent){ 937 url += '&forEvent=true'; 938 return url; 939 } 940 else if (ownRange){ 941 if ( sdate && !edate){ 942 url += '&sdate=' + sdate; 943 } 944 else if ( !sdate && edate){ 945 url += '&edate=' + edate; 946 } 947 else if (sdate && edate){ 948 url += '&sdate=' + sdate + '&edate=' + edate; 949 } 950 } 951 return url; 952 } 709 953 710 954 /**
Note: See TracChangeset
for help on using the changeset viewer.
