def add_name(map_identifier, topic_identifier): topic_store = get_topic_store() topic_map = topic_store.get_topic_map(map_identifier) if topic_map is None: abort(404) if current_user.id != topic_map.user_identifier: abort(403) if "admin" not in current_user.roles: abort(403) topic = topic_store.get_topic( map_identifier, topic_identifier, resolve_attributes=RetrievalMode.RESOLVE_ATTRIBUTES, ) if topic is None: abort(404) form_topic_name = "" form_topic_name_scope = session["current_scope"] error = 0 if request.method == "POST": form_topic_name = request.form["topic-name"].strip() form_topic_name_scope = request.form["topic-name-scope"].strip() # Validate form inputs if not form_topic_name: error = error | 1 if not topic_store.topic_exists(topic_map.identifier, form_topic_name_scope): error = error | 2 if error != 0: flash( "An error occurred when submitting the form. Please review the warnings and fix accordingly.", "warning", ) else: base_name = BaseName(form_topic_name, scope=form_topic_name_scope) topic_store.set_basename(map_identifier, topic.identifier, base_name) flash("Name successfully added.", "success") return redirect( url_for( "topic.view_names", map_identifier=topic_map.identifier, topic_identifier=topic.identifier, )) return render_template("topic/add_name.html", error=error, topic_map=topic_map, topic=topic, topic_name=form_topic_name, topic_name_scope=form_topic_name_scope)
def __init__(self, identifier='', instance_of='topic', base_name='Undefined', language=Language.ENG): super().__init__(identifier, instance_of) default_base_name = BaseName(base_name, language) self.__base_names = [default_base_name] self.__occurrences = [] self.language = language
def __init__( self, identifier: str = "", instance_of: str = "topic", base_name: str = "Undefined", language: Language = Language.ENG, ) -> None: super().__init__(identifier, instance_of) default_base_name = BaseName(base_name, language) self.__base_names = [default_base_name] self.__occurrences: List[Occurrence] = [] self.language = language
def __init__( self, identifier: str = "", instance_of: str = "topic", name: str = "Undefined", # Universal scope is "*". What's more, 'scope' in this context is referring to the scope of the topic's # base name objects. Topics, as such, do not have scope. scope: str = UNIVERSAL_SCOPE, language: Language = Language.ENG, ) -> None: super().__init__(identifier, instance_of) default_base_name = BaseName(name, scope, language) self.__base_names = [default_base_name] self.__occurrences: List[Occurrence] = [] self.language = language
def add_name(map_identifier, topic_identifier): topic_store = get_topic_store() topic_map = topic_store.get_topic_map(map_identifier, current_user.id) if topic_map is None: current_app.logger.warning( f"Topic map not found: user identifier: [{current_user.id}], topic map identifier: [{map_identifier}]" ) abort(404) # If the map doesn't belong to the user and they don't have the right # collaboration mode on the map, then abort if not topic_map.owner and topic_map.collaboration_mode is not CollaborationMode.EDIT: abort(403) topic = topic_store.get_topic( map_identifier, topic_identifier, resolve_attributes=RetrievalMode.RESOLVE_ATTRIBUTES, ) if topic is None: current_app.logger.warning( f"Topic not found: user identifier: [{current_user.id}], topic map identifier: [{map_identifier}], topic identifier: [{topic_identifier}]" ) abort(404) error = 0 if request.method == "POST": form_topic_name = request.form["topic-name"].strip() form_topic_name_scope = request.form["topic-name-scope"].strip() # If no values have been provided set their default values if not form_topic_name_scope: form_topic_name_scope = session["current_scope"] # Validate form inputs if not form_topic_name: error = error | 1 if not topic_store.topic_exists(topic_map.identifier, form_topic_name_scope): error = error | 2 if error != 0: flash( "An error occurred when submitting the form. Please review the warnings and fix accordingly.", "warning", ) else: base_name = BaseName(form_topic_name, scope=form_topic_name_scope) topic_store.set_basename(map_identifier, topic.identifier, base_name) flash("Name successfully added.", "success") return redirect( url_for( "topic.view_names", map_identifier=topic_map.identifier, topic_identifier=topic.identifier, )) return render_template( "topic/add_name.html", error=error, topic_map=topic_map, topic=topic, topic_name=form_topic_name, topic_name_scope=form_topic_name_scope, ) return render_template("topic/add_name.html", error=error, topic_map=topic_map, topic=topic)
def first_base_name(self) -> BaseName: if len(self.__base_names) > 0: result = self.__base_names[0] else: result = BaseName("Undefined", UNIVERSAL_SCOPE, Language.ENG) return result
def edit(map_identifier, topic_identifier): topic_store = get_topic_store() topic_map = topic_store.get_topic_map(map_identifier, current_user.id) if topic_map is None: current_app.logger.warning( f"Topic map not found: user identifier: [{current_user.id}], topic map identifier: [{map_identifier}]" ) abort(404) # If the map doesn't belong to the user and they don't have the right # collaboration mode on the map, then abort if not topic_map.owner and topic_map.collaboration_mode is not CollaborationMode.EDIT: abort(403) topic = topic_store.get_topic( map_identifier, topic_identifier, scope=session["current_scope"], resolve_attributes=RetrievalMode.RESOLVE_ATTRIBUTES, ) if topic is None: current_app.logger.warning( f"Topic not found: user identifier: [{current_user.id}], topic map identifier: [{map_identifier}], topic identifier: [{topic_identifier}]" ) abort(404) occurrences = topic_store.get_topic_occurrences( map_identifier, topic_identifier, scope=session["current_scope"], inline_resource_data=RetrievalMode.INLINE_RESOURCE_DATA, ) texts = [ occurrence for occurrence in occurrences if occurrence.instance_of == "text" and occurrence.scope == session["current_scope"] ] form_topic_name = topic.first_base_name.name form_topic_text = texts[0].resource_data.decode() if len(texts) > 0 and texts[0].resource_data else "" form_topic_instance_of = topic.instance_of form_topic_text_scope = texts[0].scope if len(texts) > 0 else session["current_scope"] error = 0 if request.method == "POST": form_topic_name = request.form["topic-name"].strip() form_topic_text = request.form["topic-text"].strip() form_topic_instance_of = request.form["topic-instance-of"].strip() form_topic_text_scope = request.form["topic-text-scope"].strip() # If no values have been provided set their default values if not form_topic_instance_of: form_topic_instance_of = "topic" if not form_topic_text_scope: form_topic_text_scope = session["current_scope"] # Validate form inputs if not topic_store.topic_exists(topic_map.identifier, form_topic_instance_of): error = error | 1 if not topic_store.topic_exists(topic_map.identifier, form_topic_text_scope): error = error | 2 if error != 0: flash( "An error occurred when submitting the form. Please review the warnings and fix accordingly.", "warning", ) else: if topic.get_base_name_by_scope(session["current_scope"]): # Update the topic's base name if it has changed if topic.first_base_name.name != form_topic_name: topic_store.update_base_name( map_identifier, topic.first_base_name.identifier, form_topic_name, form_topic_text_scope, ) else: base_name = BaseName(form_topic_name, session["current_scope"]) topic_store.set_base_name(map_identifier, topic.identifier, base_name) # Update topic's 'instance of' if it has changed if topic.instance_of != form_topic_instance_of: topic_store.update_topic_instance_of(map_identifier, topic.identifier, form_topic_instance_of) # If the topic has an existing text occurrence update it, otherwise create a new text occurrence # and persist it if len(texts) > 0 and form_topic_text_scope == session["current_scope"]: topic_store.update_occurrence_data(map_identifier, texts[0].identifier, form_topic_text) else: text_occurrence = Occurrence( instance_of="text", topic_identifier=topic.identifier, scope=form_topic_text_scope, resource_data=form_topic_text, ) topic_store.set_occurrence(topic_map.identifier, text_occurrence) # Update the topic's modification (timestamp) attribute timestamp = str(datetime.now()) if topic.get_attribute_by_name("modification-timestamp"): topic_store.update_attribute_value( topic_map.identifier, topic.get_attribute_by_name("modification-timestamp").identifier, timestamp, ) else: modification_attribute = Attribute( "modification-timestamp", timestamp, topic.identifier, data_type=DataType.TIMESTAMP, ) topic_store.set_attribute(topic_map.identifier, modification_attribute) flash("Topic successfully updated.", "success") return redirect( url_for( "topic.view", map_identifier=topic_map.identifier, topic_identifier=topic.identifier, ) ) return render_template( "topic/edit.html", error=error, topic_map=topic_map, topic=topic, topic_name=form_topic_name, topic_identifier=topic.identifier, topic_text=form_topic_text, topic_instance_of=form_topic_instance_of, topic_text_scope=form_topic_text_scope, collaboration_mode=topic_map.collaboration_mode, )
def first_base_name(self): if len(self.__base_names) > 0: result = self.__base_names[0] else: result = BaseName("Undefined", Language.ENG) return result
def first_base_name(self) -> BaseName: if len(self.__base_names) > 0: result = self.__base_names[0] else: result = BaseName("Undefined", "*", Language.ENG) # Universal scope is "*" return result