Changeset 1361 for HelpIM3

Show
Ignore:
Timestamp:
12/22/10 18:02:08 (17 months ago)
Author:
zeank
Message:

removed code copied over from chat/pages/ShowChat.py
started with new code for displaying log messages

refs #247

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • HelpIM3/branches/chatgroups/HelpIM/chatgroup/pages/ShowChat.py

    r1340 r1361  
    1 from HelpIM.chat.templates.ShowChatPanel import ShowChatPanel 
     1from HelpIM.web.pageBase import PageBase 
    22from HelpIM.ui.services import fieldsAsElements, fieldsAsAttributes 
    33from HelpIM.chat.db.databaseMetadata import ChatConversation 
    44import datetime 
    55 
    6 class Handler(ShowChatPanel): 
    7     """Show login panel - (does what it says) 
    8        Offers the user a panel to login to the system 
    9     """ 
     6class Handler(PageBase): 
     7   
    108    def __init__(self, *args, **kwargs): 
    11         ShowChatPanel.__init__(self, *args, **kwargs) 
    12         import logging 
    13         self.log = logging.getLogger('HelpIM.setup.pages.ShowChat.Handler') 
    14         self.panelName = 'Toon gesprek' 
    15         self.panelId = 'ShowChat'  
    16         self.submitText = 'self.submitText' 
    17         self.function = 'ShowChat' 
     9        super(Handler, self).__init__(*args, **kwargs) 
     10        self.panelName = 'Chatgroup Session' 
    1811        self.chatLineTablePath = 'ChatConversations/chat_lines' 
    19         # make these depending on the userIdIsEmail site setting, 
    20         # A bit of a hack, might need better settings later on 
    21         if kwargs['him_request'].site.siteConfig.userIdIsEmail: 
    22             self.showInvitation = True 
    23             self.showQuestionPanels = False 
    24         elif kwargs['him_request'].site.siteConfig.siteName == "HelpIM Chat Groups": 
    25             self.showInvitation = False 
    26             self.showQuestionPanels = False 
    27         else: 
    28             self.showInvitation = False 
    29             self.showQuestionPanels = True 
     12 
     13        self.chatConv_DataElements = {'ChatgroupMeeting': ['conv_id', 
     14                                                           'conv_start_time', 
     15                                                           'conv_messages'], 
     16                                      'ChatMessage'     : ['conv_msg_id', 
     17                                                           'conv_msg_time', 
     18                                                           'conv_msg_time.time()', 
     19                                                           'conv_msg_name', 
     20                                                           'conv_msg_text', 
     21                                                           'conv_msg_comments'] 
     22                                      } 
     23 
     24 
    3025        self.chat_conv = None 
    3126 
    32     def validate(self, *pargs, **kwargs): 
    33         self.log.debug('.validate() %s' % self.parameters) 
    34         self.errors = [] 
     27    def getPanelDef(self, *pargs, **kwargs): 
    3528 
    36         if self.checkParam('action', 'addComment'): 
    37             self.checkNotEmpty('comment_text', 'nothing to say, eh?') 
    38         elif self.checkNotEmpty('conv_id', 'Fout: conv_id mist!'): 
    39             __conv_Question_answerText = 'conv_Question_answer_' 
    40             conv_id = self.parameters['conv_id'] 
     29        chat_conv_id = {  'detail_field': [ [ {  'label':       [  { 'name': 'Id', 
     30                                                                     'width':'20%' 
     31                                                                    } ] }, 
     32                                              {  'data_text':   [  { 'valueTable':'ChatgroupMeeting', 
     33                                                                     'valueAttr':'conv_id', 
     34                                                                     'width':'80%' 
     35                                                                    } 
     36                                                                ]  
     37                                          } ] ]  
     38                        } 
     39        chat_conv_start_time = {  'detail_field': [ [ {  'label':       [  { 'name': 'Aanvang' } ] }, 
     40                                                      {  'data_text':   [  { 'valueTable':'ChatgroupMeeting', 
     41                                                                             'valueAttr':'conv_start_time' 
     42                                                                            } 
     43                                                                        ]  
     44                                                  } ] ]  
     45                                } 
    4146 
    42             chat = self.getChatConversation(conv_id, *pargs, **kwargs) 
    43             for cw in self.chat_conv.conv_care_workers: 
    44                 cw.care_worker_registration_questions = self.panelDataToObject(registration_questions=cw.care_worker_registration_questions) 
     47        chat_conv_detail_panel = { 'detail_Panel': [ { 'panelName': 'Gesprek', 
     48                                                       'panelText': "Algemene gegevens", 
     49                                                       'dataTable':'ChatgroupMeeting'}, 
     50                                                    [ chat_conv_id, 
     51                                                      chat_conv_start_time 
     52                                                    ] 
     53                                                   ]   
     54                      } 
    4555 
    46             performValidations = True 
     56         
     57        chatLogTable = self.getChatLogTableDef() 
     58        panelDef = [ chat_conv_detail_panel, 
     59                     chatLogTable ] 
     60        return panelDef 
    4761 
    48             for cw in chat.conv_care_workers: 
    49                 registration_questions = self.selectConversationQuestionsByQuestionairName(cw.conv_participant_questions, ['CW_REG']) 
    50                 for registration_question in registration_questions: 
    51                     if performValidations: 
    52                         parm_name = '%s%s' % (__conv_Question_answerText, registration_question.conv_Question_id) 
    53                         parmValue = "" 
    54                         if self.parameters.has_key(parm_name): 
    55                             parmValue = self.parameters[parm_name] 
    56                         if not registration_question.validAnswer(parmValue): 
    57                             self.errors.append({parm_name:registration_question.conv_Question_error}) 
    58                         else: 
    59                             for fixedChoiceAnswer in registration_question.conv_Question_FixedChoiceAnswers: 
    60                                 if fixedChoiceAnswer.conv_FCAnswer_answerCode == parmValue: 
    61                                     if fixedChoiceAnswer.conv_FCAnswer_action == 'HIDE': 
    62                                         performValidations = False 
     62    def getChatLogTableDef(self): 
     63        chat_line_time = {  'table_column': [  { 'heading':'Tijd', 
     64                                                 'valueAttr':'conv_msg_time.time' 
     65                                               } 
     66                                            ]  
     67                          } 
     68        chat_line_name = {  'table_column': [  { 'heading':'Naam', 
     69                                                 'valueAttr': 'conv_msg_name' 
     70                                                  } 
     71                                               ]  
     72                             } 
     73        chat_line_text = {  'table_column': [  {    'heading':'Text', 
     74                                                     'valueAttr': 'conv_msg_text' 
     75                                                     } 
     76                                                 ]  
     77                          } 
     78         
     79        chatLineTable = {  'table_panel': [ {   'panelName': 'Log', 
     80                                                'panelText': "Verslag van het gesprek, klik op '+' om commentaar te lezen of toe te voegen.", 
     81                                                'dataTable':'ChatgroupMeeting', 
     82                                                'dataRecord':'ChatMessage', 
     83                                                'location':   'ShowChat?conv_id=%s' % self.parameters['conv_id'], 
     84                                                'submitText': 'Opslaan', 
     85                                             }, 
     86                                     [    chat_line_time, 
     87                                          chat_line_name, 
     88                                          chat_line_text 
     89                                      ] 
     90                         ] } 
     91         
     92        return chatLineTable 
    6393 
    64         if self.checkParam('action', 'inviteCW'): 
    65             self.checkNotEmpty('conv_id', 'Fout: conv_id mist!') 
    66             if self.checkNotEmpty('invite_cw_email', 'Geef een e-mailadres op voor de uitnodiging'): 
    67                 self.checkEmailValid('invite_cw_email', 'Geef AUB een correct e-mailadres') 
    68             self.checkNotEmpty('invite_cw_text', 'Geef AUB een tekstbericht om mee te sturen met uw uitnodiging') 
    69              
    70         self.log.debug('.validate() errors : %s' % self.errors) 
    71         return self.errors 
    7294 
    7395    def getPanelData(self, *pargs, **kwargs): 
    74         """ Method that returns a 'panel_data'-element. 
    75         This method overrides the one from the superclass to provide the actual 'panel_data' 
    76         """        
    77         self.log.debug('.getPanelData()') 
     96        chat = self.site.getChatGroupMeetingById(self.site, self.getParam('conv_id')) 
    7897 
    79         user = self.him_request.session.session_user 
    80         conv_id = self.parameters['conv_id'] 
    81         if not self.site.isConversationParticipant( 
    82             site=self.site, 
    83             conv_id=conv_id, 
    84             user_id=user.user_id 
    85         ) and not self.site.isConversationCoordinator( 
    86             site=self.site, 
    87             user_role_id=user.user_role_id, 
    88             conv_id=conv_id, 
    89             user_department_id=user.user_department_id 
    90         ) and not self.site.isConversationMaster( 
    91             site=self.site, 
    92             user_role_id=user.user_role_id 
    93         ): 
     98        self.dbg('*') 
     99        for msg in chat.conv_messages: 
     100            self.log.debug(msg.conv_msg_text) 
    94101 
    95             raise Exception("Attempt to request chat the user is not authorized to view. Possible hacking attempt") 
    96          
    97         chat = ChatConversation() 
    98         if conv_id: 
    99             chat = self.getChatConversation(conv_id, *pargs, **kwargs) 
    100              
    101         panelDataArray = self.getPanelDataArray(chat) 
     102        chatData = self.site.pythonObjectAsTuple( 
     103            chat, 
     104            self.chatConv_DataElements, 
     105            escape=['conv_Question_answerText']) 
    102106 
    103         chatData = self.site.pythonObjectAsTuple(chat, 
    104                                                  self.chatConv_DataElements, 
    105                                                  escape=['conv_Question_answerText']) 
    106         panelDataArray.append(chatData) 
    107          
    108         panel_data = {  'panel_data': [  panelDataArray  ] } 
     107        self.dbg(chatData) 
     108 
     109        panel_data = {  'panel_data': [  chatData  ] } 
    109110        fieldErrors = { 'fieldErrors': [ self.errors ] } 
    110111        panelMessage = { 'panelMessage': self.panelMessage} 
    111112         
    112113        return [panel_data, fieldErrors, panelMessage] 
    113      
    114      
    115     def getPanelDataArray(self, chat_conv, *pargs, **kwargs): 
    116         panelDataArray = [] 
    117          
    118         listOf_CodeClassId = {} 
    119         for cw in chat_conv.conv_care_workers: 
    120             care_worker_registration_questions = self.selectConversationQuestionsByQuestionairName(cw.conv_participant_questions, ['CW_REG']) 
    121             listOf_CodeClassId = self.getListOf_CodeClassId(conv_questions=care_worker_registration_questions, listOf_CodeClassId=listOf_CodeClassId) 
    122              
    123         codeIdList = {} 
    124         for code_class_id in listOf_CodeClassId.keys(): 
    125             codeDataElements = ['answerClass', 'codeList', 'code_class_id', 'code_class_description', 'allow_sub_codes', 
    126                                 'code_id', 'code_description', 'main_code_id'] 
    127             codeList = self.site.getCodeList(self.site, code_class_id) 
    128             codeData = self.site.getTableData("CodeClass_%s" % code_class_id, "Code", codeList, codeDataElements, fieldsAsAttributes) 
    129             #panelDataArray.append(codeData) 
    130              
    131             answerCode = AnswerCode(codeList) 
    132             answerCodeData = self.site.pythonObjectAsTuple(answerCode, codeDataElements) 
    133             panelDataArray.append(answerCodeData) 
    134              
    135             for code in codeList: 
    136                 codeIdList[code.code_id] = "" 
    137                      
    138         for main_code_id in codeIdList.keys(): 
    139             codeList = self.site.getCodeListbyMainCodeId(self.site, main_code_id) 
    140             if len(codeList) > 0: 
    141                 answerSubCode = AnswerSubCode(codeList, codeList[0].code_class_id) 
    142                 answerSubCodeData = self.site.pythonObjectAsTuple(answerSubCode, codeDataElements) 
    143                 panelDataArray.append(answerSubCodeData) 
    144  
    145         return panelDataArray 
    146  
    147     def getListOf_CodeClassId(self, conv_questions=[], listOf_CodeClassId={}): 
    148         for conv_question in conv_questions: 
    149             if conv_question.conv_Question_answer_type == 'CLASS': 
    150                 listOf_CodeClassId[conv_question.conv_Question_answer_class_id] = conv_question.conv_Question_answer_class_id 
    151         return listOf_CodeClassId 
    152      
    153     def performAction(self, *pargs, **kwargs): 
    154         self.log.debug('.performAction') 
    155         if self.parameters.has_key('conv_id'): 
    156             chat = self.getChatConversation(self.parameters['conv_id'], *pargs, **kwargs) 
    157         if self.checkParam('action', 'addComment'): 
    158              
    159             if self.checkNotEmpty('comment_msg_id'): 
    160                 """ append this comment to a message """ 
    161                 self.site.addComment(self.site, 
    162                                      self.him_request.session.session_user.user_id, 
    163                                      self.parameters['comment_text'], 
    164                                      self.parameters['comment_msg_id']) 
    165             elif self.checkNotEmpty('comment_parent_id'): 
    166                 """ append this comment to a comment """ 
    167                 self.site.addComment(self.site, 
    168                                      self.him_request.session.session_user.user_id, 
    169                                      self.parameters['comment_text'], 
    170                                      0, 
    171                                      self.parameters['comment_parent_id']) 
    172  
    173         if self.checkParam('action', 'inviteCW'): 
    174             from HelpIM.utils import sendMail 
    175             invitee = self.site.getUserByEmail(self.site, self.getParam('invite_cw_email')) 
    176             if invitee: 
    177                 """ add user as reviewer """ 
    178                 self.site.addConversationReviewer(self.site, chat, invitee) 
    179                 """ send email notification """ 
    180                 me = self.him_request.session.session_user 
    181                 subject = 'Uitnodiging voor feedback op chat' 
    182                 body = '%s heeft je uitgenodigd om feedback te geven op een chatgesprek op\n\nhttp://%s%s/%s?conv_id=%s\n\n%s' % \ 
    183                        (me.user_name, 
    184                         kwargs['him_request'].environment['HTTP_HOST'], 
    185                         self.him_request.SCRIPT_NAME, 
    186                         self.function, 
    187                         self.getParam('conv_id'), 
    188                         self.getParam('invite_cw_text')) 
    189                 sendMail(self.site, 
    190                          invitee.user_email, 
    191                          invitee.user_name, 
    192                          subject, 
    193                          body) 
    194                 self.panelMessage = 'Uitnodiging is verstuurd' 
    195             else: 
    196                 self.addError('invite_cw_email', 'Sorry, er is geen gebruiker met dit e-mailadres bekend') 
    197  
    198         self.site.flush(self.site)   
    199      
    200      
    201     def panelDataToObject(self, *pargs, **kwargs): 
    202         registration_questions = kwargs['registration_questions'] 
    203         __conv_Question_answerText = 'conv_Question_answer_' 
    204         visibility = True 
    205         for registration_question in registration_questions: 
    206             parm_name = '%s%s' % (__conv_Question_answerText, registration_question.conv_Question_id) 
    207             if self.parameters.has_key(parm_name) : 
    208                 answeredValue = self.parameters[parm_name] 
    209                 self.log.debug('.panelDataToObject() parm(%s) value(%s)' % (parm_name, answeredValue)) 
    210                 registration_question.setAnswer(answeredValue) 
    211                 registration_question.conv_Question_isVisible = visibility 
    212                 fc_answerText = "" 
    213                 for fixedChoiceAnswer in registration_question.conv_Question_FixedChoiceAnswers: 
    214                     fixedChoiceAnswer.conv_FCAnswer_selected = False 
    215                     if not isinstance(answeredValue, type([])): 
    216                         answeredValue = [answeredValue] 
    217                     for answer in answeredValue:  
    218                         if fixedChoiceAnswer.conv_FCAnswer_answerCode == answer: 
    219                             fixedChoiceAnswer.conv_FCAnswer_selected = True 
    220                             if len(fc_answerText) > 0: 
    221                                 fc_answerText += ", " 
    222                             fc_answerText += fixedChoiceAnswer.conv_FCAnswer_answerText 
    223                             if fixedChoiceAnswer.conv_FCAnswer_action == 'HIDE': 
    224                                 visibility = False 
    225                 if registration_question.conv_Question_type == 'MK': 
    226                     registration_question.conv_Question_answerText = fc_answerText 
    227                     if registration_question.conv_Question_answer_type == 'CLASS': 
    228                         if self.parameters.has_key(parm_name): 
    229                             code_id = self.parameters[parm_name] 
    230                             code = self.site.getCodeById(self.site, code_id) 
    231                             if code.main_code_id == 0: 
    232                                 registration_question.conv_Question_answer_main_code_id = code_id 
    233                                 registration_question.conv_Question_answer_sub_code_id = None 
    234                             else: 
    235                                 registration_question.conv_Question_answer_main_code_id = code.main_code_id 
    236                                 registration_question.conv_Question_answer_sub_code_id = code_id 
    237                             registration_question.conv_Question_answerText = code.code_description 
    238                     if registration_question.conv_Question_answer_type == 'CITY': 
    239                         if self.parameters.has_key(parm_name): 
    240                             registration_question.conv_Question_answer_main_code_id = self.parameters[parm_name] 
    241                             registration_question.conv_Question_answer_sub_code_id = None 
    242                             registration_question.conv_Question_answerText = self.site.getProvincie(self.parameters[parm_name]) 
    243  
    244         return registration_questions 
    245      
    246      
    247     def getChatConversation(self, conv_id, *pargs, **kwargs): 
    248         if self.chat_conv is None or self.chat_conv.conv_id != conv_id: 
    249             self.chat_conv = self.site.getChatConversationById(self.site, conv_id) 
    250  
    251             " touch the conv_messages to get them loaded by SqlAlchemy " 
    252             self.chat_conv.conv_messages 
    253              
    254             for cs in self.chat_conv.conv_care_seekers: 
    255                 self.log.debug('Processing CareSeeker id(%s)' % cs.conv_participant_id) 
    256                 cs.care_seeker_chat_questions = self.selectConversationQuestionsByQuestionairName(cs.conv_participant_questions, ['CS_PRE_CHAT', 'CS_POST_CHAT']) 
    257                 self.log.debug('Processing CareSeeker offered %s questions, got %s questions returned' % (len(cs.conv_participant_questions), len(cs.care_seeker_chat_questions))) 
    258             for cw in self.chat_conv.conv_care_workers: 
    259                 self.log.debug('Processing CareWorker id(%s)' % cs.conv_participant_id) 
    260                 cw.care_worker_chat_questions = self.selectConversationQuestionsByQuestionairName(cw.conv_participant_questions, ['CW_PRE_CHAT', 'CW_POST_CHAT']) 
    261                 self.log.debug('Select CareWorker.["CW_PRE_CHAT", "CW_POST_CHAT"].Questions offered %s questions, got %s questions returned' % (len(cw.conv_participant_questions), len(cw.care_worker_chat_questions))) 
    262                 cw.care_worker_registration_questions = self.selectConversationQuestionsByQuestionairName(cw.conv_participant_questions, ['CW_REG']) 
    263                 self.log.debug('Select CareWorker.CW_REG.Questions offered %s questions, got %s questions returned' % (len(cw.conv_participant_questions), len(cw.care_worker_registration_questions))) 
    264                  
    265         return self.chat_conv 
    266          
    267  
    268     def selectConversationQuestionsByQuestionairName(self, listOfQuestions, questionairNames): 
    269         questionairNames = dict(zip(questionairNames, questionairNames)) 
    270         result = [] 
    271         for question in listOfQuestions: 
    272             if questionairNames.has_key(question.conv_Question_questionairName): 
    273                 result.append(question) 
    274         return result 
    275      
    276      
    277 class AnswerCode(object): 
    278     def __init__(self, codeList): 
    279         self.codeList = codeList 
    280         self.answerClass = codeList[0].code_class 
    281          
    282  
    283 class AnswerSubCode(object): 
    284     def __init__(self, codeList, code_class_id): 
    285         self.codeList = codeList 
    286         self.answerClass = code_class_id 
    287         self.main_code_id = codeList[0].main_code_id 
    288