def handle_post(self, request, user, *args, **kwargs):
        """Handles POST requests to find all logs by search parameters.

        URLs: /eventlog/find/
        """

        self.log.info('find all logs')

        try:
            # Common validations

            # User permission
            if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.READ_OPERATION):
                self.log.error(
                    'User does not have permission to perform this operation.')
                return self.not_authorized()

            # Business Validations

            # Here starts the stuff

            functionalities = Functionality.objects

            acoes = ['Alterar', 'Cadastrar', 'Remover']
            usuarios = EventLog.uniqueUsers()

            funcionalidades = functionalities.all()

            usuarios = UsersList(usuarios)
            funcionalidades = FunctionalitiesList(funcionalidades)

            choices_map = dict()

            choices_map['usuario'] = usuarios
            choices_map['acao'] = acoes
            choices_map['funcionalidade'] = funcionalidades

            return self.response(dumps_networkapi(choices_map))

        except InvalidValueError, e:
            self.log.error(
                u'Parameter %s is invalid. Value: %s.', e.param, e.value)
            return self.response_error(269, e.param, e.value)
                    id_objeto=id_objeto, funcionalidade=classe.__name__).order_by('-hora_evento')[0]
            except:
                parametro_anterior = ''

        else:
            parametro_anterior = "parametro anterior"

        event['acao'] = 'Alterar'
        event['funcionalidade'] = classe.__name__
        event['parametro_anterior'] = parametro_anterior
        event['parametro_atual'] = parametro_atual
        event['id_objeto'] = id_objeto

        #event = 'Alterar a tabela ' + instance._meta.db_table + '. Registro alterado: ' + values_map.__repr__() + '.'

    EventLog.log(user, event)

# Método que processará o signal enviado após a invocação do método delete
# dos models


def networkapi_post_delete(sender, instance, **kwargs):
    # Define dados do log

    event = dict()

    try:
        user = instance.authenticated_user
    except Exception, e:
        raise MissingUserError(e)
def save_audit(instance, operation, kwargs={}):
    """
    Saves the audit.
    However, the variable persist_audit controls if the audit should be really
    saved to the database or not. This variable is only affected in a change operation. If no
    change is detected than it is setted to False.

    Keyword arguments:
    instance -- instance
    operation -- operation type (add, change, delete)
    kwargs -- kwargs dict sent from m2m signal
    """

    m2m_change = kwargs.get('m2m_change', False)
    event = dict()
    action = None
    try:
        persist_audit = True

        new_state = to_dict(instance)
        old_state = {}
        try:
            if operation == EventLog.CHANGE and instance.pk:
                if not m2m_change:
                    old_state = to_dict(
                        instance.__class__.objects.get(pk=instance.pk))
                else:
                    # m2m change
                    LOG.debug('m2m change detected')
                    new_state = kwargs.get('new_state', {})
                    old_state = kwargs.get('old_state', {})
        except:
            pass

        if m2m_change:
            # m2m_change returns a list of changes
            changed_fields = m2m_audit.m2m_dict_diff(old_state, new_state)
        else:
            changed_fields = dict_diff(old_state, new_state)

        ########################
        # CHANGE OPERATION
        ########################
        if operation == EventLog.CHANGE:
            action = 'Alterar'
            # is there any change?
            if not changed_fields:
                persist_audit = False

            if m2m_change:
                descriptions = []
                for changed_field in changed_fields:
                    description = u'\n'.join([u'%s %s: %s %s %s %s' %
                                              (
                                                  _('field'),
                                                  k,
                                                  _('was changed from'),
                                                  format_value(v[0]),
                                                  _('to'),
                                                  format_value(v[1]),
                                              ) for k, v in changed_field.items()])
                    descriptions.append(description)
            else:
                description = u'\n'.join([u'%s %s: %s %s %s %s' %
                                          (
                                              _('field'),
                                              k,
                                              _('was changed from'),
                                              format_value(v[0]),
                                              _('to'),
                                              format_value(v[1]),
                                          ) for k, v in changed_fields.items()])
        elif operation == EventLog.DELETE:
            action = 'Remover'
            description = _('Deleted %s') % unicode(instance)
        elif operation == EventLog.ADD:
            action = 'Cadastrar'
            description = _('Added %s') % unicode(instance)

        # LOG.debug("called audit with operation=%s instance=%s persist=%s" % (operation, instance, persist_audit))
        if persist_audit:
            if m2m_change:
                for description in descriptions:
                    # obj_description = (
                    #     instance and unicode(instance) and '')[:100]
                    audit_request = AuditRequest.current_request(True)

                    changed_field = changed_fields.pop(0)
                    old_value_list = {}
                    new_value_list = {}
                    for field, (old_value, new_value) in changed_field.items():
                        old_value_list.update(
                            {field: handle_unicode(old_value)})
                        new_value_list.update(
                            {field: handle_unicode(new_value)})

                    event['acao'] = 'Alterar' if action is None else action
                    event['funcionalidade'] = instance.__class__.__name__
                    event['parametro_anterior'] = old_value_list
                    event['parametro_atual'] = new_value_list
                    event['id_objeto'] = instance.pk
                    event['audit_request'] = audit_request
                    # save the event log
                    if audit_request:
                        EventLog.log(audit_request.user, event)
                        if LOG_QUEUE:
                            EventLogQueue.log(audit_request.user, event)
                    else:
                        EventLog.log(None, event)
                        if LOG_QUEUE:
                            EventLogQueue.log(None, event)

            else:
                # obj_description = (instance and unicode(instance) and '')[:100]
                audit_request = AuditRequest.current_request(True)

                old_value_list = {}
                new_value_list = {}
                for field, (old_value, new_value) in changed_fields.items():
                    old_value_list.update({field: handle_unicode(old_value)})
                    new_value_list.update({field: handle_unicode(new_value)})

                event['acao'] = 'Alterar' if action is None else action
                event['funcionalidade'] = instance.__class__.__name__
                event['parametro_anterior'] = old_value_list
                event['parametro_atual'] = new_value_list
                event['id_objeto'] = instance.pk
                event['audit_request'] = audit_request
                if audit_request:
                    EventLog.log(audit_request.user, event)
                    if LOG_QUEUE:
                        EventLogQueue.log(audit_request.user, event)
                else:
                    EventLog.log(None, event)
                    if LOG_QUEUE:
                        EventLogQueue.log(None, event)
    except:
        LOG.error(u'Error registering auditing to %s: (%s) %s',
                  repr(instance), type(instance), getattr(instance, '__dict__', None), exc_info=True)