Changeset 4bd938 in indico


Ignore:
Timestamp:
01/18/11 19:53:44 (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, 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)
Message:

[IMP] First version of logs for chats

  • Still a couple of modifications to be done, and quite probably some bug fixing
Location:
indico
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • indico/MaKaC/plugins/InstantMessaging/XMPP/components.py

    rbc991f r4bd938  
    107107                    out.writeTag("desktop", 'false') 
    108108                if PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinWebClient'): 
    109                     out.writeTag("web", WebLinkGenerator(chatroom).generate()) 
     109                    out.writeTag("web", WebLinkGenerator(chatroom).generate(True)) 
    110110                else: 
    111111                    out.writeTag("web", 'false') 
  • indico/MaKaC/plugins/InstantMessaging/XMPP/handlers.py

    rbc991f r4bd938  
    2020## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 
    2121 
     22import urllib2, datetime, os, tempfile, stat 
    2223from MaKaC.plugins.InstantMessaging.Chatroom import XMPPChatroom 
    2324from MaKaC.plugins.InstantMessaging.handlers import ChatroomBase 
    2425from MaKaC.services.implementation.base import ServiceBase, ParameterManager 
    2526from MaKaC.services.interface.rpc.common import ServiceError, NoReportError 
     27from MaKaC.common.Configuration import Config 
    2628from MaKaC.common.contextManager import ContextManager 
    2729from MaKaC.common.logger import Logger 
     
    3133from MaKaC.plugins import Observable 
    3234from MaKaC.plugins.util import PluginFieldsWrapper 
    33 from MaKaC.plugins.helpers import DBHelpers, MailHelper 
     35from MaKaC.plugins.helpers import DBHelpers, MailHelper, DeleteLogLinkGenerator, LogLinkGenerator 
    3436 
    3537from MaKaC.plugins.InstantMessaging.XMPP.bot import IndicoXMPPBotRoomExists, IndicoXMPPBotCreateRoom, IndicoXMPPBotEditRoom, IndicoXMPPBotDeleteRoom, IndicoXMPPBotGetPreferences 
    36 from MaKaC.conference import ConferenceHolder 
     38from MaKaC.conference import ConferenceHolder, LocalFile 
    3739 
    3840 
     
    310312            self.deleteRoomXMPP(self._botJID, self._botPass, self._room, message) 
    311313 
     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 
    312319        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())) 
    313320 
     
    392399 
    393400 
     401class 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 
    394493methodMap = { 
    395494    "XMPP.createRoom": CreateChatroom, 
     
    398497    "XMPP.getRoomPreferences": GetRoomPreferences, 
    399498    "XMPP.getRoomsByUser": GetRoomsByUser, 
    400     "XMPP.addConference2Room": AddConference2Room 
     499    "XMPP.addConference2Room": AddConference2Room, 
     500    "XMPP.attachLogs": AddLogs2Material 
    401501} 
  • indico/MaKaC/plugins/InstantMessaging/pages.py

    rc1435a r4bd938  
    2727from MaKaC.common.timezoneUtils import getAdjustedDate, nowutc, setAdjustedDate, DisplayTZ, minDatetime 
    2828from MaKaC.plugins import PluginsHolder 
    29 from MaKaC.plugins.helpers import DBHelpers 
     29from MaKaC.plugins.helpers import DBHelpers, DesktopLinkGenerator, WebLinkGenerator 
    3030from MaKaC.plugins.util import PluginFieldsWrapper 
    3131 
     
    103103        vars["Conference"] = self._conf 
    104104        try: 
    105             vars["Chatrooms"] = fossilize( list(DBHelpers.getChatroomList(self._conf)) ) 
     105            chatrooms = list(DBHelpers.getChatroomList(self._conf)) 
     106            vars["Chatrooms"] = fossilize(chatrooms) 
    106107            if len(vars['Chatrooms']) is 0: 
    107108                vars['Chatrooms'] = None 
    108109        except Exception, e: 
    109110            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 
    110124        vars['DefaultServer'] = PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('chatServerHost') 
    111125        vars["EventDate"] = formatDateTime(getAdjustedDate(nowutc(), self._conf)) 
  • indico/MaKaC/plugins/InstantMessaging/rh.py

    rc1435a r4bd938  
    2121 
    2222from MaKaC.plugins import PluginsHolder 
     23from MaKaC.conference import ConferenceHolder 
     24from MaKaC.plugins.helpers import DBHelpers, LogLinkGenerator 
    2325from MaKaC.plugins.InstantMessaging.pages import WPConfModifChat, WPConferenceInstantMessaging 
    2426from MaKaC.webinterface import urlHandlers 
    2527from MaKaC.webinterface.rh.conferenceDisplay import RHConferenceBaseDisplay 
    2628from MaKaC.webinterface.rh.conferenceModif import RHConferenceModifBase 
     29import urllib2 
    2730 
    2831 
     
    5962 
    6063 
     64class 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 
    6190class RHInstantMessagingDisplay(RHConferenceBaseDisplay): 
    6291    """ For the conference display""" 
     
    6998        p = WPConferenceInstantMessaging( self, self._conf ) 
    7099        return p.display() 
     100 
  • indico/MaKaC/plugins/helpers.py

    rbc991f r4bd938  
    127127        LinkGenerator.__init__(self, chatroom) 
    128128 
    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' 
    131134 
    132135class DesktopLinkGenerator(LinkGenerator): 
     
    137140    def generate(self): 
    138141        return 'xmpp:'+ self._chatroom.getTitle()+'@'+self._chatroom.getHost()+'?join' 
     142 
     143class 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 
     164class 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  
    5151/* ------------------------------ GLOBAL VARIABLES ------------------------------- */ 
    5252 
     53<% from MaKaC.plugins.util import PluginFieldsWrapper %> 
     54 
     55var showDesktopLink = <%=jsonEncode( PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinDesktopClients') )%>; 
     56var showWebLink = <%=jsonEncode( PluginFieldsWrapper('InstantMessaging', 'XMPP').getOption('joinWebClient') )%>; 
    5357var chatrooms = $L(<%= jsonEncode(Chatrooms) %>); 
     58var links = $O(<%= jsonEncode(links) %>); 
     59 
    5460var defaultHost = <%= jsonEncode(DefaultServer) %>; 
    5561var customHost = ""; 
  • indico/MaKaC/webinterface/tpls/ConferenceInstantMessaging.tpl

    rbc991f r4bd938  
    7575        } 
    7676        if (showWebLink){ 
    77             menuItems['Using your desktop client'] = <%=jsonEncode( WebLinkGenerator(cr).generate() )%>; 
     77            menuItems['Using your desktop client'] = <%=jsonEncode( WebLinkGenerator(cr).generate(True) )%>; 
    7878        } 
    7979        joinMenu = new PopupMenu(menuItems, [joinLink], 'categoryDisplayPopupList'); 
  • indico/MaKaC/webinterface/urlHandlers.py

    ra755c1 r4bd938  
    14841484class UHConfModifChat(URLHandler): 
    14851485    _relativeURL = "confModifChat.py" 
     1486 
     1487class UHConfModifChatSeeLogs(URLHandler): 
     1488    _relativeURL = "confModifChat.py/logs" 
    14861489 
    14871490class UHConfModifCollaborationManagers(URLHandler): 
  • indico/htdocs/confModifChat.py

    ra755c1 r4bd938  
    2424def index(req, **params): 
    2525    return chatFormModif.RHChatFormModif( req ).process( params ) 
     26 
     27def logs(req, **params): 
     28    return chatFormModif.RHChatSeeLogs( req ).process( params ) 
     29 
     30def attachLogs(req, **params): 
     31    return chatFormModif.RHChatAttachLogs2Material( req ).process( params ) 
  • indico/htdocs/js/indico/Plugins/InstantMessaging.js

    rbc991f r4bd938  
    496496); 
    497497 
     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 */ 
     508type("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 
    498548/** 
    499549* Utility function to "refresh" the display of a chat room and show its updated value if it changed. 
     
    705755    row.append(cellEditRemove); 
    706756 
     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 
    707767    return row; 
    708768}; 
     769 
     770var 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 
     796var 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 
     838var 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 
     925var 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} 
    709953 
    710954/** 
Note: See TracChangeset for help on using the changeset viewer.