def filter_actions(modeladmin, ticket, request):
    if not hasattr(modeladmin, 'change_view_actions_backup'):
        modeladmin.change_view_actions_backup = list(modeladmin.change_view_actions)
    actions = modeladmin.change_view_actions_backup
    if ticket.state == modeladmin.model.CLOSED:
        del_actions = actions
    else:
        from .actions import action_map
        del_actions = [action_map.get(ticket.state, None)]
        if ticket.owner == request.user:
            del_actions.append('take')
    exclude = lambda a: not (a == action or a.url_name == action)
    for action in del_actions:
        actions = list(filter(exclude, actions))
    return actions


def markdown_formated_changes(changes):
    markdown = ''
    for name, values in changes.items():
        context = (name.capitalize(), values[0], values[1])
        markdown += '* **%s** changed from _%s_ to _%s_\n' % context
    return markdown + '\n'


def get_ticket_changes(modeladmin, request, ticket):
    ModelForm = modeladmin.get_form(request, ticket)
    form = ModelForm(request.POST, request.FILES)
    changes = {}
    if form.is_valid():
        for attr in ['state', 'priority', 'owner', 'queue']:
            old_value = getattr(ticket, attr)
            new_value = form.cleaned_data[attr]
            if old_value != new_value:
                choices = dict(form.fields[attr].choices)
                if old_value in choices:
                    old_value = choices[old_value]
                    new_value = choices[new_value]
                changes[attr] = (old_value, new_value)
    return changes
