def json_search_participant(self):
     _ = self.request.translate
     if self.request.method == 'POST':
         search_string = self.request.POST.get('searchstr').strip()
         if search_string == '':
             self.request.session.flash(_(u"Empty search, please provide search string."), 'error')
         else:
             participants = DBSession.query(Participant).filter(
                 or_(
                 Participant.firstname.like('%'+search_string+'%'),
                 Participant.lastname.like('%'+search_string+'%'),
                 Participant.nickname.like('%'+search_string+'%'),
                 Participant.member_no.like('%'+search_string+'%')
                 )).all()
             participants_tmp = []
             for participant in participants:
                 participant_tmp = {
                     'id':participant.id,
                     'firstname':helpers.decodeString(participant.firstname),
                     'lastname':helpers.decodeString(participant.lastname),
                 }
                 participants_tmp.append(participant_tmp)
                 
             return json.dumps(participants_tmp)
     return {}
    def security_participant_view(self):
        _ = self.request.translate

        participant_id = self.request.matchdict["participant_id"]

        participant = DBSession.query(Participant).get(participant_id)

        if (
            self.request.method == "POST"
            and self.request.POST.get("participant_new_status_id") != None
            and self.request.POST.get("participant_new_status_id").isdigit()
        ):
            participantStatus = ParticipantStatus()
            participantStatus.participant_id = participant.id
            participantStatus.status_id = int(self.request.POST.get("participant_new_status_id"))
            description = self.request.POST.get("participant_new_status_description")
            if description != None and description.strip() != "":
                participantStatus.description = description
            expected_next_change = self.request.POST.get("participant_new_status_expected_next_change")
            if expected_next_change != None and expected_next_change.strip() != "":
                participantStatus.expected_next_change = helpers.parseFinnishDateFromString(
                    expected_next_change.strip()
                )
            DBSession.add(participantStatus)
            DBSession.flush()
            participant.latest_status_key = int(self.request.POST.get("participant_new_status_id"))
            DBSession.add(participant)
            DBSession.flush()
            self.request.session.flash(_(u"Added new status for participant."), "success")
            return HTTPFound(location="/security/participant/view/" + str(participant.id) + "/")

        participant.getParticipantAddressData()
        participant.getParticipantPhoneData()
        participant.getParticipantLanguageData()
        participant.getParticipantPresenceData()
        participant.getParticipantNextOfKinData()
        participant.getParticipantMetaData()

        self.request.bread.append({"url": "/security/", "text": _("Security")})
        self.request.bread.append({"url": "/security/participant/search/", "text": _("Search")})
        self.request.bread.append(
            {
                "url": "/security/participant/view/" + participant_id + "/",
                "text": _("Participant")
                + " "
                + helpers.decodeString(participant.firstname)
                + " "
                + helpers.decodeString(participant.lastname),
            }
        )
        return {"participant": participant}
    def security_shifts_new(self):
        if self.request.redirect_forbidden:
            return HTTPFound(location="/forbidden/")
        elif userhelpers.checkUserPasswordChangeNeed(self.request):
            return HTTPFound(location="/settings/me/edit/")
        _ = self.request.translate
        shift = SecurityShift()

        if self.request.method == "POST":
            shift.starts = helpers.parseFinnishDateFromString(self.request.POST.get("starts").strip())
            shift.ends = helpers.parseFinnishDateFromString(self.request.POST.get("ends").strip())
            # shift.leader_id = helpers.decodeString(self.request.POST.get('leader_id').strip())
            shift.notes = helpers.decodeString(self.request.POST.get("notes").strip())
            if type(shift.starts) is datetime and type(shift.ends) is datetime and shift.starts < shift.ends:
                DBSession.add(shift)
                DBSession.flush()
                userAudit = UserAudit(self.request.user.id)
                userAudit.model = "SecurityShift"
                userAudit.model_id = shift.id
                userAudit.action = "Create"
                userAudit.revision = shift.metadata_revision
                DBSession.add(userAudit)
                DBSession.flush()
                self.request.session.flash(_(u"Shift created."), "success")
                return HTTPFound(location="/security/shifts/view/" + str(shift.id) + "/")
            else:
                self.request.session.flash(_(u"Error creating shift. Shift ends before it begins."), "error")

        self.request.bread.append({"url": "/security/", "text": _("Security")})
        self.request.bread.append({"url": "/security/shifts/", "text": _("Shifts")})
        self.request.bread.append({"url": "/security/shifts/new/", "text": _("Create")})
        return {"shift": shift}
    def settings_groups_edit(self):
        if self.request.redirect_forbidden:
            return HTTPFound(location='/forbidden/')
        elif userhelpers.checkUserPasswordChangeNeed(self.request):
            return HTTPFound(location='/settings/me/edit/')
        _ = self.request.translate

        tmp_group = {
            'id':'',
            'name':'',
            'leader_id':'',
            'privileges':'',
        }
        group_id = self.request.matchdict['group_id']

        group = DBSession.query(Group).filter(Group.id==group_id).first()

        if group.id:
            if group.id == 1:
                return HTTPFound(location='/settings/groups/')

#            privilege_ids = [privilege.id for privilege in group.privileges]
            tmp_group = {
                'id':group.id,
                'name':group.name,
                'leader_id':group.leader_id,
                'privileges':group.privileges
            }
            


        if self.request.method == 'POST':
            tmp_group['name'] = self.request.POST.get('name').strip()
            if not self.checkIfGroupnameExists(tmp_group['name'], tmp_group['id']):
                group.name = tmp_group['name']
                if security.has_permission("settings_users_modify_permissions", self.request.context, self.request):
                    privileges_list = ''
                    if len(self.request.POST.getall('privileges'))> 0:
                        for privilege in DBSession.query(Privilege).filter(Privilege.id.in_(self.request.POST.getall('privileges'))).all():
                            privileges_list += '|'+privilege.name + '|'
                    group.privileges = privileges_list
                DBSession.add(group)
                DBSession.flush()

                userAudit = UserAudit(self.request.user.id)
                userAudit.model = 'Group'
                userAudit.model_id = group.id
                userAudit.action = 'Update'
                userAudit.revision = group.metadata_revision
                DBSession.add(userAudit)
                DBSession.flush()
                
                self.request.session.flash(_(u"Group saved."), 'success')
                return HTTPFound(location='/settings/groups/view/'+str(group.id))
            else:
                self.request.session.flash(_(u"Group with that name allready exists."), 'error')

        privileges = DBSession.query(Privilege).all()
        self.request.bread.append({'url':'/settings/', 'text':_('Settings')})
        self.request.bread.append({'url':'/settings/groups/', 'text':_('Groups')})
        self.request.bread.append({'url':'/settings/groups/edit/'+str(group.id)+'/', 'text':_('Edit') + ' ' + helpers.decodeString(group.name)})
        return {'group':tmp_group, 'privileges':privileges}
    def settings_groups_view(self):
        if self.request.redirect_forbidden:
            return HTTPFound(location='/forbidden/')
        elif userhelpers.checkUserPasswordChangeNeed(self.request):
            return HTTPFound(location='/settings/me/edit/')
        _ = self.request.translate
        group_id = self.request.matchdict['group_id']

        group = DBSession.query(Group).filter(Group.id==group_id).first()

        if group.id:
            
#            privilege_ids = [privilege.id for privilege in group.privileges]
            tmp_group = {
                'id':group.id,
                'name':group.name,
                'leader_id':group.leader_id,
                'privileges':group.privileges
            }

            privileges = DBSession.query(Privilege).all()
            self.request.bread.append({'url':'/settings/', 'text':_('Settings')})
            self.request.bread.append({'url':'/settings/groups/', 'text':_('Groups')})
            self.request.bread.append({'url':'/settings/groups/view/'+str(group.id)+'/', 'text':_('View') + ' ' + helpers.decodeString(group.name)})
            return {'group':tmp_group, 'privileges':privileges}
        else:
            return HTTPFound(location='/settings/groups/')