def index() -> str: tables = {'overview': Table(paging=False, defs='[{className: "dt-body-right", targets: 1}]'), 'bookmarks': Table(['name', 'class', 'first', 'last'], defs='[{className: "dt-body-right", targets: [2,3]}]'), 'notes': Table(['name', 'class', 'first', 'last', _('note')], defs='[{className: "dt-body-right", targets: [2,3]}]'), 'latest': Table(['name', 'class', 'first', 'last', 'date', 'user'], order='[[4, "desc"]]', defs='[{className: "dt-body-right", targets: [2,3]}]')} if current_user.is_authenticated and hasattr(current_user, 'bookmarks'): for entity_id in current_user.bookmarks: entity = EntityMapper.get_by_id(entity_id) tables['bookmarks'].rows.append([link(entity), g.classes[entity.class_.code].name, entity.first, entity.last, bookmark_toggle(entity.id, True)]) for entity_id, text in UserMapper.get_notes().items(): entity = EntityMapper.get_by_id(entity_id) tables['notes'].rows.append([link(entity), g.classes[entity.class_.code].name, entity.first, entity.last, truncate_string(text)]) for name, count in EntityMapper.get_overview_counts().items(): if count: count = format_number(count) if count else '' url = url_for(name + '_index') if name != 'find' else url_for('place_index') tables['overview'].rows.append([ '<a href="' + url + '">' + uc_first(_(name)) + '</a>', count]) for entity in EntityMapper.get_latest(8): tables['latest'].rows.append([ link(entity), g.classes[entity.class_.code].name, entity.first, entity.last, format_date(entity.created), link(logger.get_log_for_advanced_view(entity.id)['creator'])]) intro = ContentMapper.get_translation('intro') return render_template('index/index.html', intro=intro, tables=tables)
def actor_update(id_): actor = EntityMapper.get_by_id(id_) actor.set_dates() code_class = {'E21': 'Person', 'E74': 'Group', 'E40': 'Legal Body'} form = build_form(ActorForm, code_class[actor.class_.code], actor, request) if form.validate_on_submit(): if was_modified(form, actor): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(actor.id)['modifier']) return render_template('actor/update.html', form=form, actor=actor, modifier=modifier) save(form, actor) return redirect(url_for('actor_view', id_=id_)) residence = actor.get_linked_entity('P74') form.residence.data = residence.get_linked_entity( 'P53', True).id if residence else '' first = actor.get_linked_entity('OA8') form.appears_first.data = first.get_linked_entity('P53', True).id if first else '' last = actor.get_linked_entity('OA9') form.appears_last.data = last.get_linked_entity('P53', True).id if last else '' for alias in [x.name for x in actor.get_linked_entities('P131')]: form.alias.append_entry(alias) form.alias.append_entry('') return render_template('actor/update.html', form=form, actor=actor)
def index(): tables = { 'counts': {'id': 'overview', 'header': [], 'data': [], 'show_pager': False}, 'bookmarks': {'id': 'bookmarks', 'data': [], 'show_pager': False, 'header': ['name', 'class', 'first', 'last']}, 'latest': {'id': 'latest', 'data': [], 'show_pager': False, 'header': ['name', 'class', 'first', 'last', 'date', 'user']}} if current_user.is_authenticated and hasattr(current_user, 'bookmarks'): for entity_id in current_user.bookmarks: entity = EntityMapper.get_by_id(entity_id) tables['bookmarks']['data'].append([ link(entity), g.classes[entity.class_.code].name, entity.first, entity.last, bookmark_toggle(entity.id, True)]) for name, count in EntityMapper.get_overview_counts().items(): count = format_number(count) if count else '' tables['counts']['data'].append([ '<a href="' + url_for(name + '_index') + '">' + uc_first(_(name)) + '</a>', count]) for entity in EntityMapper.get_latest(8): tables['latest']['data'].append([ link(entity), g.classes[entity.class_.code].name, entity.first, entity.last, format_date(entity.created), link(logger.get_log_for_advanced_view(entity.id)['creator'])]) intro = ContentMapper.get_translation('intro') return render_template('index/index.html', intro=intro, tables=tables)
def actor_update(id_: int) -> str: actor = EntityMapper.get_by_id(id_, nodes=True, aliases=True) code_class = {'E21': 'Person', 'E74': 'Group', 'E40': 'Legal Body'} form = build_form(ActorForm, code_class[actor.class_.code], actor, request) if form.validate_on_submit(): if was_modified(form, actor): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(actor.id)['modifier']) return render_template('actor/update.html', form=form, actor=actor, modifier=modifier) save(form, actor) return redirect(url_for('actor_view', id_=id_)) residence = actor.get_linked_entity('P74') form.residence.data = residence.get_linked_entity( 'P53', True).id if residence else '' first = actor.get_linked_entity('OA8') form.begins_in.data = first.get_linked_entity('P53', True).id if first else '' last = actor.get_linked_entity('OA9') form.ends_in.data = last.get_linked_entity('P53', True).id if last else '' for alias in actor.aliases.values(): form.alias.append_entry(alias) form.alias.append_entry('') if actor.class_.code == 'E21': form.begins_in.label.text = _('born in') form.ends_in.label.text = _('died in') return render_template('actor/update.html', form=form, actor=actor)
def event_update(id_): event = EntityMapper.get_by_id(id_) event.set_dates() form = build_form(EventForm, 'Event', event, request) if event.class_.code != 'E8': del form.given_place form.event_id.data = event.id if form.validate_on_submit(): if was_modified(form, event): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(event.id)['modifier']) return render_template('event/update.html', form=form, event=event, modifier=modifier) save(form, event) return redirect(url_for('event_view', id_=id_)) super_event = event.get_linked_entity('P117') form.event.data = super_event.id if super_event else '' place = event.get_linked_entity('P7') form.place.data = place.get_linked_entity('P53', True).id if place else '' if event.class_.code == 'E8': # Form data for acquisition form.given_place.data = [ entity.id for entity in event.get_linked_entities('P24') ] return render_template('event/update.html', form=form, event=event)
def source_update(id_): source = EntityMapper.get_by_id(id_) form = build_form(SourceForm, 'Source', source, request) if form.validate_on_submit(): if was_modified(form, source): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link(logger.get_log_for_advanced_view(source.id)['modifier']) return render_template( 'source/update.html', form=form, source=source, modifier=modifier) save(form, source) return redirect(url_for('source_view', id_=id_)) return render_template('source/update.html', form=form, source=source)
def source_update(id_): source = EntityMapper.get_by_id(id_) form = build_form(SourceForm, 'Source', source, request) if form.validate_on_submit(): if was_modified(form, source): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link(logger.get_log_for_advanced_view(source.id)['modifier']) return render_template('source/update.html', form=form, source=source, modifier=modifier) save(form, source) return redirect(url_for('source_view', id_=id_)) return render_template('source/update.html', form=form, source=source)
def file_update(id_: int) -> str: file = EntityMapper.get_by_id(id_, nodes=True) form = build_form(FileForm, 'File', file, request) del form.file if form.validate_on_submit(): if was_modified(form, file): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(file.id)['modifier']) return render_template('file/update.html', form=form, file=file, modifier=modifier) save(form, file) return redirect(url_for('file_view', id_=id_)) return render_template('file/update.html', form=form, file=file)
def object_update(id_: int) -> str: object_ = EntityMapper.get_by_id(id_, nodes=True) form = build_form(InformationCarrierForm, object_.system_type.title(), object_, request) if form.validate_on_submit(): if was_modified(form, object_): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(object_.id)['modifier']) return render_template('object/update.html', form=form, object_=object_, modifier=modifier) save(form, object_) return redirect(url_for('object_view', id_=id_)) return render_template('object/update.html', form=form, object_=object_)
def event_update(id_: int) -> str: event = EntityMapper.get_by_id(id_, nodes=True) form = prepare_form(build_form(EventForm, 'Event', event, request), event.class_.code) form.event_id.data = event.id if form.validate_on_submit(): if was_modified(form, event): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(event.id)['modifier']) return render_template('event/update.html', form=form, event=event, modifier=modifier) save(form, event) return redirect(url_for('event_view', id_=id_)) super_event = event.get_linked_entity('P117') form.event.data = super_event.id if super_event else '' if event.class_.code == 'E9': # Form data for move place_from = event.get_linked_entity('P27') form.place_from.data = place_from.get_linked_entity( 'P53', True).id if place_from else '' place_to = event.get_linked_entity('P26') form.place_to.data = place_to.get_linked_entity( 'P53', True).id if place_to else '' person_data = [] object_data = [] for entity in event.get_linked_entities('P25'): if entity.class_.code == 'E21': person_data.append(entity.id) elif entity.class_.code == 'E84': object_data.append(entity.id) form.person.data = person_data form.object.data = object_data else: place = event.get_linked_entity('P7') form.place.data = place.get_linked_entity('P53', True).id if place else '' if event.class_.code == 'E8': # Form data for acquisition form.given_place.data = [ entity.id for entity in event.get_linked_entities('P24') ] return render_template('event/update.html', form=form, event=event)
def source_update(id_: int) -> str: source = EntityMapper.get_by_id(id_, nodes=True) form = build_form(SourceForm, 'Source', source, request) if form.validate_on_submit(): if was_modified(form, source): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(source.id)['modifier']) return render_template('source/update.html', form=form, source=source, modifier=modifier) save(form, source) return redirect(url_for('source_view', id_=id_)) form.information_carrier.data = [ entity.id for entity in source.get_linked_entities('P128', inverse=True) ] return render_template('source/update.html', form=form, source=source)
def place_update(id_): object_ = EntityMapper.get_by_id(id_) object_.set_dates() location = object_.get_linked_entity('P53') if object_.system_type == 'feature': form = build_form(FeatureForm, 'Feature', object_, request, location) elif object_.system_type == 'stratigraphic unit': form = build_form(FeatureForm, 'Stratigraphic Unit', object_, request, location) elif object_.system_type == 'find': form = build_form(FeatureForm, 'Find', object_, request, location) else: form = build_form(PlaceForm, 'Place', object_, request, location) if form.validate_on_submit(): if was_modified(form, object_): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link(logger.get_log_for_advanced_view(object_.id)['modifier']) return render_template( 'place/update.html', form=form, object_=object_, modifier=modifier) save(form, object_, location) return redirect(url_for('place_view', id_=id_)) for alias in [x.name for x in object_.get_linked_entities('P1')]: form.alias.append_entry(alias) if object_.system_type == 'place': form.alias.append_entry('') gis_data = GisMapper.get_all(object_.id) place = None feature = None stratigraphic_unit = None if object_.system_type == 'find': stratigraphic_unit = object_.get_linked_entity('P46', True) feature = stratigraphic_unit.get_linked_entity('P46', True) place = feature.get_linked_entity('P46', True) if object_.system_type == 'stratigraphic unit': feature = object_.get_linked_entity('P46', True) place = feature.get_linked_entity('P46', True) elif object_.system_type == 'feature': place = object_.get_linked_entity('P46', True) return render_template('place/update.html', form=form, object_=object_, gis_data=gis_data, place=place, feature=feature, stratigraphic_unit=stratigraphic_unit)
def reference_update(id_: int) -> str: reference = EntityMapper.get_by_id(id_, nodes=True) form = build_form(ReferenceForm, reference.system_type.title(), reference, request) if reference.system_type == 'external reference': form.name.validators = [InputRequired(), URL()] form.name.label.text = 'URL' if form.validate_on_submit(): if was_modified(form, reference): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(reference.id)['modifier']) return render_template('reference/update.html', form=form, reference=reference, modifier=modifier) save(form, reference) return redirect(url_for('reference_view', id_=id_)) return render_template('reference/update.html', form=form, reference=reference)
def event_update(id_): event = EntityMapper.get_by_id(id_) event.set_dates() form = build_form(EventForm, 'Event', event, request) if event.class_.code != 'E8': del form.given_place form.event_id.data = event.id if form.validate_on_submit(): if was_modified(form, event): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link(logger.get_log_for_advanced_view(event.id)['modifier']) return render_template('event/update.html', form=form, event=event, modifier=modifier) save(form, event) return redirect(url_for('event_view', id_=id_)) super_event = event.get_linked_entity('P117') form.event.data = super_event.id if super_event else '' place = event.get_linked_entity('P7') form.place.data = place.get_linked_entity('P53', True).id if place else '' if event.class_.code == 'E8': # Form data for acquisition form.given_place.data = [entity.id for entity in event.get_linked_entities('P24')] return render_template('event/update.html', form=form, event=event)
def actor_update(id_): actor = EntityMapper.get_by_id(id_) actor.set_dates() code_class = {'E21': 'Person', 'E74': 'Group', 'E40': 'Legal Body'} form = build_form(ActorForm, code_class[actor.class_.code], actor, request) if form.validate_on_submit(): if was_modified(form, actor): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link(logger.get_log_for_advanced_view(actor.id)['modifier']) return render_template('actor/update.html', form=form, actor=actor, modifier=modifier) save(form, actor) return redirect(url_for('actor_view', id_=id_)) residence = actor.get_linked_entity('P74') form.residence.data = residence.get_linked_entity('P53', True).id if residence else '' first = actor.get_linked_entity('OA8') form.appears_first.data = first.get_linked_entity('P53', True).id if first else '' last = actor.get_linked_entity('OA9') form.appears_last.data = last.get_linked_entity('P53', True).id if last else '' for alias in [x.name for x in actor.get_linked_entities('P131')]: form.alias.append_entry(alias) form.alias.append_entry('') return render_template('actor/update.html', form=form, actor=actor)
def add_system_data(entity: Entity, data: Dict[str, Any]) -> Dict[str, Any]: """Add additional information for entity views if activated in profile""" if not hasattr(current_user, 'settings'): return data # pragma: no cover if 'entity_show_class' in current_user.settings \ and current_user.settings['entity_show_class']: data[_('class')] = link(entity.cidoc_class) info = logger.get_log_for_advanced_view(entity.id) if 'entity_show_dates' in current_user.settings \ and current_user.settings['entity_show_dates']: data[_('created')] = \ f"{format_date(entity.created)} {link(info['creator'])}" if info['modified']: data[_('modified')] = \ f"{format_date(info['modified'])} {link(info['modifier'])}" if 'entity_show_import' in current_user.settings: if current_user.settings['entity_show_import']: data[_('imported from')] = link(info['project']) data[_('imported by')] = link(info['importer']) data['origin ID'] = info['origin_id'] if 'entity_show_api' in current_user.settings \ and current_user.settings['entity_show_api']: data['API'] = render_template('util/api_links.html', entity=entity) return data
def update(id_: int) -> Union[str, Response]: entity = Entity.get_by_id(id_, nodes=True, aliases=True) if not entity.class_.view: abort(422) # pragma: no cover elif not is_authorized(entity.class_.write_access): abort(403) # pragma: no cover elif isinstance(entity, Node): root = g.nodes[entity.root[-1]] if entity.root else None if not root and (entity.standard or entity.locked): abort(403) # pragma: no cover # Archaeological sub units geonames_module = False if entity.class_.name == 'place' and ReferenceSystem.get_by_name( 'GeoNames').forms: geonames_module = True structure = None gis_data = None overlays = None location = None if entity.class_.view in ['artifact', 'place']: structure = get_structure(entity) location = entity.get_linked_entity_safe('P53', nodes=True) gis_data = Gis.get_all([entity], structure) overlays = Overlay.get_by_object(entity) form = build_form(entity.class_.name, entity, location=location) if entity.class_.view == 'event': form.event_id.data = entity.id elif isinstance(entity, ReferenceSystem) and entity.system: form.name.render_kw['readonly'] = 'readonly' if form.validate_on_submit(): if isinstance(entity, Node): valid = True root = g.nodes[entity.root[-1]] new_super_id = getattr(form, str(root.id)).data new_super = g.nodes[int(new_super_id)] if new_super_id else None if new_super: if new_super.id == entity.id: flash(_('error node self as super'), 'error') valid = False if new_super.root and entity.id in new_super.root: flash(_('error node sub as super'), 'error') valid = False if not valid: return redirect(url_for('entity_view', id_=entity.id)) if was_modified(form, entity): # pragma: no cover del form.save flash(_('error modified'), 'error') return render_template('entity/update.html', form=form, entity=entity, structure=structure, modifier=link( logger.get_log_for_advanced_view( entity.id)['modifier'])) return redirect(save(form, entity)) populate_update_form(form, entity) return render_template('entity/update.html', form=form, entity=entity, structure=structure, gis_data=gis_data, overlays=overlays, geonames_module=geonames_module, title=entity.name, crumbs=add_crumbs(view_name=entity.class_.view, class_=entity.class_.name, origin=entity, structure=structure))
def overview() -> str: tabs = { 'info': Tab('info'), 'bookmarks': Tab('bookmarks', table=Table(['name', 'class', 'begin', 'end'])), 'notes': Tab('notes', table=Table( ['date', _('visibility'), 'entity', 'class', _('note')])) } tables = { 'overview': Table(paging=False, defs=[{ 'className': 'dt-body-right', 'targets': 1 }]), 'latest': Table(paging=False, order=[[0, 'desc']]) } if current_user.is_authenticated and hasattr(current_user, 'bookmarks'): for entity_id in current_user.bookmarks: entity = Entity.get_by_id(entity_id) tabs['bookmarks'].table.rows.append([ link(entity), entity.class_.label, entity.first, entity.last, bookmark_toggle(entity.id, True) ]) for note in User.get_notes_by_user_id(current_user.id): entity = Entity.get_by_id(note['entity_id']) tabs['notes'].table.rows.append([ format_date(note['created']), uc_first(_('public') if note['public'] else _('private')), link(entity), entity.class_.label, note['text'], f'<a href="{url_for("note_view", id_=note["id"])}">' f'{uc_first(_("view"))}</a>' ]) for name, count in Entity.get_overview_counts().items(): if count: url = url_for('index', view=g.class_view_mapping[name]) if name == 'administrative_unit': url = f"{url_for('node_index')}#menu-tab-places" elif name == 'type': url = url_for('node_index') elif name == 'find': url = url_for('index', view='artifact') elif name in [ 'feature', 'human_remains', 'stratigraphic_unit', 'source_translation' ]: url = '' tables['overview'].rows.append([ link(g.classes[name].label, url) if url else g.classes[name].label, format_number(count) ]) for entity in Entity.get_latest(8): tables['latest'].rows.append([ format_date(entity.created), link(entity), entity.class_.label, entity.first, entity.last, link(logger.get_log_for_advanced_view(entity.id)['creator']) ]) tabs['info'].content = render_template('index/index.html', intro=get_translation('intro'), tables=tables) return render_template('tabs.html', tabs=tabs, crumbs=['overview'])
def place_update(id_: int) -> str: object_ = EntityMapper.get_by_id(id_, nodes=True, aliases=True) location = object_.get_linked_entity('P53', nodes=True) geonames_buttons = False if object_.system_type == 'feature': form = build_form(FeatureForm, 'Feature', object_, request, location) elif object_.system_type == 'stratigraphic unit': form = build_form(FeatureForm, 'Stratigraphic Unit', object_, request, location) elif object_.system_type == 'find': form = build_form(FeatureForm, 'Find', object_, request, location) else: geonames_buttons = True if current_user.settings[ 'module_geonames'] else False form = build_form(PlaceForm, 'Place', object_, request, location) if hasattr(form, 'geonames_id') and not current_user.settings['module_geonames']: del form.geonames_id, form.geonames_precision # pragma: no cover if form.validate_on_submit(): if was_modified(form, object_): # pragma: no cover del form.save flash(_('error modified'), 'error') modifier = link( logger.get_log_for_advanced_view(object_.id)['modifier']) return render_template('place/update.html', form=form, object_=object_, modifier=modifier) save(form, object_, location) return redirect(url_for('place_view', id_=id_)) if object_.system_type == 'place': for alias in object_.aliases.values(): form.alias.append_entry(alias) form.alias.append_entry('') gis_data = GisMapper.get_all(object_) if hasattr(form, 'geonames_id') and current_user.settings['module_geonames']: geonames_link = GeonamesMapper.get_geonames_link(object_) if geonames_link: geonames_entity = geonames_link.domain form.geonames_id.data = geonames_entity.name if geonames_entity else '' exact_match = True if g.nodes[ geonames_link.type.id].name == 'exact match' else False form.geonames_precision.data = exact_match place = None feature = None stratigraphic_unit = None if object_.system_type == 'find': stratigraphic_unit = object_.get_linked_entity('P46', True) feature = stratigraphic_unit.get_linked_entity('P46', True) place = feature.get_linked_entity('P46', True) if object_.system_type == 'stratigraphic unit': feature = object_.get_linked_entity('P46', True) place = feature.get_linked_entity('P46', True) elif object_.system_type == 'feature': place = object_.get_linked_entity('P46', True) overlays = OverlayMapper.get_by_object(object_) if current_user.settings['module_map_overlay'] \ else None return render_template('place/update.html', form=form, object_=object_, gis_data=gis_data, place=place, feature=feature, stratigraphic_unit=stratigraphic_unit, overlays=overlays, geonames_buttons=geonames_buttons)