示例#1
0
def restore_event(orm, user, event_id, historic, d_time=None):
    LOG.info("Restoring event %d", event_id)

    d_time = historic and d_time or None
    event, event_v, d_time = get_deleted_entity(
        orm, Event, Event_v, "event_id", event_id, "event_v_id", d_time)
    d_time = historic and d_time or None

    if event:
        LOG.warning("Event %d already exists.", event_id)
        return event

    if not event_v:
        LOG.error(
            "Cannot restore event %d because no recently "
            "deleted versions exist.",
            event_id)
        return None

    LOG.info("deleted time: %s", d_time)

    event = Event(
        event_v.name, event_v.start_date, event_v.end_date,
        event_v.description, event_v.start_time, event_v.end_time,
        user, event_v.public)
    event.event_id = event_v.event_id
    del event_v
    orm.add(event)


    eventtag_id_list = get_deleted_child_id_list(
        orm, "event_eventtag", "event_eventtag_v",
        "event_id", event_id, "eventtag_id", d_time)

    for eventtag_id in eventtag_id_list:
        eventtag = restore_eventtag(orm, user, eventtag_id)
        if not eventtag:
            continue
        if eventtag in event.eventtag_list:
            LOG.warning(
                "Not linking eventtag %s, already linked to this event.",
                eventtag_id)
            continue
        event.eventtag_list.append(eventtag)


    address_id_list = get_deleted_child_id_list(
        orm, "event_address", "event_address_v",
        "event_id", event_id, "address_id", d_time)

    for address_id in address_id_list:
        address = restore_address(orm, user, address_id, historic, d_time)
        if not address:
            continue
        if address.org_list or address.event_list:
            LOG.warning(
                "Not linking address %s, already linked to another entity.",
                address_id)
            continue
        if address in event.address_list:
            LOG.warning(
                "Not linking address %s, already linked to this event.",
                address_id)
            continue
        event.address_list.append(address)


    note_id_list = get_deleted_child_id_list(
        orm, "event_note", "event_note_v",
        "event_id", event_id, "note_id", d_time)

    for note_id in note_id_list:
        note = restore_note(orm, user, note_id, historic, d_time)
        if not note:
            continue
        if note in event.note_list:
            LOG.warning(
                "Not linking note %s, already linked to this event.",
                note_id)
            continue
        event.note_list.append(note)


    org_id_list = get_deleted_child_id_list(
        orm, "org_event", "org_event_v", "event_id", event_id, "org_id", d_time)

    for org_id in org_id_list:
        org = get_existing_entity(orm, Org, "org_id", org_id)
        if org:
            if org in event.org_list:
                LOG.warning(
                    "Not linking org %s, already linked to this event.",
                    org_id)
                continue
            event.org_list.append(org)
        else:
            LOG.warning("Not restoring link to deleted org %d.", org_id)


    return event