From c4d2c4aa0cab3acaecac3a408c99f69389cbf101 Mon Sep 17 00:00:00 2001 From: Dennis Ploetner Date: Mon, 24 Jun 2024 16:05:00 +0200 Subject: [PATCH] Diagrams added --- diagrams/msls-package.puml | 48 ++ diagrams/mslsl-class.puml | 987 +++++++++++++++++++++++++++++++++++++ 2 files changed, 1035 insertions(+) create mode 100644 diagrams/msls-package.puml create mode 100644 diagrams/mslsl-class.puml diff --git a/diagrams/msls-package.puml b/diagrams/msls-package.puml new file mode 100644 index 00000000..9bc4a1e5 --- /dev/null +++ b/diagrams/msls-package.puml @@ -0,0 +1,48 @@ +@startuml package-related-diagram + package lloc.Msls as Msls { + package ContentImport { + package LogWriters { + } + package Importers { + package PostMeta { + } + package PostThumbnail { + } + package Terms { + } + package PostFields { + } + package Attachments { + } + } + } + package Component { + package Input { + } + package Icon { + } + } + package Map { + } + package Query { + } + } + Msls --> Input + Msls <-[#red,plain,thickness=4]-> Query + Msls <-[#red,plain,thickness=4]-> Map + Msls <-[#red,plain,thickness=4]-> ContentImport + Msls <-[#red,plain,thickness=4]-> Icon + ContentImport <-[#red,plain,thickness=4]-> Importers + ContentImport <-[#red,plain,thickness=4]-> LogWriters + LogWriters --> Msls + Importers <-[#red,plain,thickness=4]-> PostFields + Importers --> Msls + Importers <-[#red,plain,thickness=4]-> Terms + Importers <-[#red,plain,thickness=4]-> PostThumbnail + Importers <-[#red,plain,thickness=4]-> PostMeta + Importers <-[#red,plain,thickness=4]-> Attachments + PostThumbnail --> ContentImport + Terms --> Msls + Input --> Component + Icon --> Component +@enduml diff --git a/diagrams/mslsl-class.puml b/diagrams/mslsl-class.puml new file mode 100644 index 00000000..0105199e --- /dev/null +++ b/diagrams/mslsl-class.puml @@ -0,0 +1,987 @@ +@startuml class-diagram + class "MslsCustomColumnTaxonomy\nHandling of existing/not existing translations in the backend" as MslsCustomColumnTaxonomy { + {static} +init() + +column_default(deprecated, column_name, item_id) + +delete(object_id) + } + class "MslsCustomFilter\nAdding custom filter to posts/pages table." as MslsCustomFilter { + {static} +init() + +add_filter() + +execute_filter(query) + } + class "MslsBlock" as MslsBlock { + #options : MslsOptions + +__construct(options) + {static} +init() + +register_block() + } + class "MslsOptionsQuery\nMslsOptionsQuery" as MslsOptionsQuery { + +with_front : bool + #sql_cache : MslsSqlCacher + +__construct(sql_cache) + {static} +get_params() + {static} +create(id) + +get_postlink(language) + } + class "MslsContentTypes\nSupported content types" as MslsContentTypes { + #request : string + #types : array + {static} +create() + +is_post_type() + +is_taxonomy() + +acl_request() + {static} {abstract} +get() + {abstract} +get_request() + } + class "MslsOptionsQueryMonth\nMslsOptionsQueryMonth" as MslsOptionsQueryMonth { + #year : int + #monthnum : int + +__construct(sql_cache) + {static} +get_params() + +has_value(language) + +get_current_link() + } + class "MslsTaxonomy\nContent types: Taxonomies (Tags, Categories, ...)" as MslsTaxonomy { + #post_type : string + +__construct() + {static} +get() + +get_request() + +is_taxonomy() + +acl_request() + +get_post_type() + } + class "MslsPostTagClassic\nPost Tag Classic" as MslsPostTagClassic { + +add_input(taxonomy) + +edit_input(tag, taxonomy) + +the_input(tag, title_format, item_format) + +print_option(blog, type, mydata, item_format) + } + class "MslsPostType\nContent types: Post types (Pages, Posts, ...)" as MslsPostType { + +__construct() + {static} +get() + +get_request() + +is_post_type() + } + class "MslsPostTag\nPost Tag" as MslsPostTag { + {static} +suggest() + {static} +init() + +add_input(taxonomy) + +edit_input(tag, taxonomy) + +the_input(tag, title_format, item_format) + +set(term_id) + +maybe_set_linked_term(mydata) + #get_select_title() + } + class "MslsLanguageArray\nStores the language input from post" as MslsLanguageArray { + #arr : array + +__construct(arr) + +set(key, value) + +get_val(key) + +get_arr(key) + } + class "MslsOutput\nOutput in the frontend" as MslsOutput { + #tags : array + +get(display, filter, exists) + +get_alternate_links() + +__toString() + +get_tags() + +set_tags(arr) + +is_requirements_not_fulfilled(thing, exists, language) + } + class "MslsWidget\nThe standard widget of the Multisite Language Switcher" as MslsWidget { + +id_base : + +__construct() + {static} +init() + +widget(args, instance) + +update(new_instance, old_instance) + +form(instance) + } + class "MslsAdmin\nAdministration of the options" as MslsAdmin { + {static} +init() + +get_menu_slug() + +get_options_page_link() + +__call(method, args) + +has_problems() + +render() + +subsubsub() + +register() + +language_section() + +main_section() + +advanced_section() + +rewrites_section() + #add_settings_fields(map, section) + +blog_language() + +display() + +admin_display() + +reference_user() + +description() + +content_priority() + +render_rewrite(key) + +validate(arr) + +set_blog_language(arr) + } + class "MslsLinkImageOnly\nLink type: Image only" as MslsLinkImageOnly { + #format_string : string + {static} +get_description() + } + class "MslsMetaBox\nMeta box for the edit mode of the (custom) post types" as MslsMetaBox { + {static} +suggest() + {static} +get_suggested_fields(json, args) + {static} +init() + +add() + +render_select() + +render_options(type, msls_id) + +render_option(post_id, msls_id) + +render_input(echo) + +set(post_id) + +maybe_set_linked_post(mydata) + } + class "MslsLinkTextImage\nLink type: Text and image" as MslsLinkTextImage { + #format_string : string + {static} +get_description() + } + class "MslsBlog\nInternal representation of a blog" as MslsBlog { + -obj : StdClass + -language : string + -description : string + +__construct(obj, description) + +__get(key) + +get_description() + +get_title(icon_type) + +get_language(default) + +get_alpha2() + +get_url(options) + #get_permalink(options) + {static} +_cmp(a, b) + {static} +language(a, b) + {static} +description(a, b) + +get_blavatar() + } + class "MslsOptionsTaxTermCategory\nMslsOptionsTaxTermCategory" as MslsOptionsTaxTermCategory { + } + class "MslsOptionsQueryPostType\nMslsOptionsQueryPostType" as MslsOptionsQueryPostType { + #post_type : string + +__construct(sql_cache) + {static} +get_params() + +has_value(language) + +get_current_link() + } + class "MslsOptionsPost\nPost options" as MslsOptionsPost { + #sep : string + #autoload : string + +get_postlink(language) + +get_current_link() + } + class "MslsAdminIcon\nHandles the icon links in the backend" as MslsAdminIcon { + #icon_type : string + #language : string + +origin_language : string + #src : string + #href : string + #blog_id : int + #type : string + #path : string + #id : int + +__construct(type) + +__toString() + {static} +create(type) + +set_icon_type(icon_type) + +set_path() + +set_language(language) + +set_src(src) + +set_href(id) + +set_id(id) + +set_origin_language(origin_language) + +get_img() + +get_a() + +get_icon() + +get_edit_new() + } + class "MslsOptionsTax\nMslsOptionsTax" as MslsOptionsTax { + #sep : string + #autoload : string + {static} +create(id) + +get_tax_query() + +get_postlink(language) + +get_current_link() + +get_term_link(term_id) + } + class "MslsRegistryInstance\nClass MslsRegistryInstance" as MslsRegistryInstance { + {static} +instance() + } + class "MslsOptionsQueryDay\nMslsOptionsQueryDay" as MslsOptionsQueryDay { + #year : int + #monthnum : int + #day : int + +__construct(sql_cache) + {static} +get_params() + +has_value(language) + +get_current_link() + } + class "MslsRegistry\nRegistry instead of singletons" as MslsRegistry { + {static} -arr : string[] + {static} -instance : MslsRegistry + -get(key) + -set(key, instance) + {static} +instance() + {static} +get_object(key) + {static} +set_object(key, instance) + } + class "MslsCustomColumn\nHandling of existing/not existing translations in the backend listings of" as MslsCustomColumn { + {static} +init() + +th(columns) + +td(column_name, item_id) + } + class "MslsGetSet\nGeneric class for overloading properties" as MslsGetSet { + #arr : array + +__set(key, value) + +__get(key) + +__isset(key) + +__unset(key) + +reset() + +has_value(key) + +is_empty() + +get_arr() + } + class "MslsShortCode" as MslsShortCode { + #options : MslsOptions + +__construct(options) + {static} +init() + +render_widget() + } + class "MslsSqlCacher\nWrapper to avoid direct SQL without caching" as MslsSqlCacher { + #db : wpdb + #cache_key : string + #expire : int + +__construct(db, cache_key, expire) + {static} +create(caller, params, expire) + +__get(name) + +__call(method, args) + } + class "MslsOptionsQueryYear\nOptionsQueryYear" as MslsOptionsQueryYear { + #year : int + +__construct(sql_cache) + {static} +get_params() + +has_value(language) + +get_current_link() + } + class "MslsFields" as MslsFields { + } + class "MslsOptionsTaxTerm\nMslsOptionsTaxTerm" as MslsOptionsTaxTerm { + +with_front : bool + +check_base(url, options) + {static} #get_base_defined(tax_query) + {static} #get_base_option() + } + class "MslsPlugin\nProvides functionalities for general hooks and activation/deactivation" as MslsPlugin { + #options : MslsOptions + +__construct(options) + {static} +init() + {static} +get_output() + {static} +print_alternate_links() + +custom_enqueue() + {static} +plugins_url(path) + {static} +plugin_dir_path(path) + {static} +dirname(path) + {static} +file() + {static} +path() + +init_i18n_support() + {static} +message_handler(message, css_class) + {static} +activate() + {static} +uninstall() + {static} +cleanup() + } + class "MslsContentFilter" as MslsContentFilter { + #options : MslsOptions + +__construct(options) + {static} +init() + +content_filter(content) + +filter_string(pref, post) + } + class "MslsBlogCollection\nCollection of blog-objects" as MslsBlogCollection { + -current_blog_id : int + -current_blog_output : bool + -objects : MslsBlog[] + -objects_order : string + -active_plugins : array + -hreflangmap : array + +__construct() + {static} +get_configured_blog_description(blog_id, description) + +get_blogs_of_reference_user(options) + +get_blog(language) + +get_blog_id(language) + +get_current_blog_id() + +is_current_blog(blog) + +has_current_blog() + +get_current_blog() + +get_objects() + +get_object(blog_id) + +is_plugin_active(blog_id) + +get_plugin_active_blogs() + +get() + +get_filtered(filter) + +get_users(fields, number) + {static} +get_blog_language(blog_id, default) + } + class "MslsRequest" as MslsRequest { + {static} +get_config(name) + {static} +has_var(name, input_type) + {static} +get_var(name, input_type) + {static} +get(name, default) + {static} +isset(keys) + {static} +get_request(keys, default) + } + class "MslsOptions\nGeneral options class" as MslsOptions { + #args : array + #name : string + #exists : bool + #sep : string + #autoload : string + -available_languages : array + +with_front : bool + {static} +create(id) + {static} +is_main_page() + {static} +is_tax_page() + {static} +is_query_page() + +__construct() + +get_arg(index, default) + +save(arr) + +delete() + +set(arr) + +get_permalink(language) + +get_postlink(language) + +get_tax_query() + +get_current_link() + +is_excluded() + +is_content_filter() + +get_order() + +get_url(dir) + +get_slug(post_type) + +get_icon(language) + +get_flag_url(language) + +get_available_languages() + {static} +check_for_blog_slug(url, options) + +get_icon_type() + } + class "MslsAdminBar" as MslsAdminBar { + #icon_type : string + #blog_collection : MslsBlogCollection + +__construct(options, blog_collection) + {static} +init() + +update_admin_bar(wp_admin_bar) + +add_node(wp_admin_bar, node_id, title) + #get_title(blog, blavatar) + } + class "MslsJson\nContainer for an array which will used in JavaScript as object in JSON" as MslsJson { + #arr : array + +add(value, label) + {static} +compare(a, b) + +get() + +encode() + +__toString() + } + class "MslsOptionsQueryAuthor\nMslsOptionsQueryAuthor" as MslsOptionsQueryAuthor { + #author_id : int + +__construct(sql_cache) + {static} +get_params() + +has_value(language) + +get_current_link() + } + class "MslsLink\nLink type: Image and text" as MslsLink { + #format_string : string + {static} +get_types() + {static} +get_description() + {static} +get_types_description() + {static} +create(display) + {static} +callback(x) + +__toString() + } + class "MslsMain\nAbstraction for the hook classes" as MslsMain { + #options : MslsOptions + #collection : MslsBlogCollection + +__construct(options, collection) + {static} +init() + +debugger(message) + +get_input_array(object_id) + #get_input_value(key, value) + +is_autosave(post_id) + +verify_nonce() + +delete(object_id) + #save(object_id, class) + } + class "MslsLinkTextOnly\nLink type: Text only" as MslsLinkTextOnly { + #format_string : string + {static} +get_description() + } + class "MslsAdminIconTaxonomy\nHandles backend icons for taxonomies" as MslsAdminIconTaxonomy { + #path : string + +set_href(id) + +set_path() + } + package ContentImport as ContentImport { + class "Relations\nClass Relations" as ContentImport_Relations { + +to_create : MslsOptions[] + #local_options : MslsOptions[] + #import_coordinates : ImportCoordinates + +__construct(import_coordinates) + +merge(relations) + +get_data() + +create() + #create_source_to_local() + #create_local_to_source() + +should_create(creator, dest_lang, dest_post_id) + } + class "ImportCoordinates" as ContentImport_ImportCoordinates { + +source_blog_id : int + +source_post_id : int + +dest_blog_id : int + +dest_post_id : int + +source_post : WP_Post + +source_lang : string + +dest_lang : string + +importers : array + +validate() + +get_importer_for(importer_type) + +parse_importers_from_request() + +set_importer_for(importer_type, slug) + } + class "MetaBox" as ContentImport_MetaBox { + #data : + +render() + #inline_thickbox_url(data) + +print_modal_html() + #inline_thickbox_html(echo, data) + } + class "Service\nClass Service" as ContentImport_Service { + +register() + +hook() + } + class "AttachmentPathFinder" as ContentImport_AttachmentPathFinder { + +filter_srcset(sources, sizeArray, imageSrc, imageMeta, attachmentId) + #has_import_data(attachment_id) + +filter_attachment_url(url, attachment_id) + #get_source_post(attachment_id, msls_imported) + } + class "ImportLogger" as ContentImport_ImportLogger { + #levels_delimiter : + #data : + #import_coordinates : ImportCoordinates + +__construct(import_coordinates) + +merge(logger) + +get_data() + +save() + +log_error(where, what) + #log(where, what, root) + #build_nested_array(path, what) + #build_path(where) + +get_levels_delimiter() + +set_levels_delimiter(levels_delimiter) + +log_success(where, what) + +log_information(key, message) + +get_error(where) + #get_nested_value(where) + +get_success(where) + +get_information(key) + } + class "ContentImporter\nClass ContentImporter" as ContentImport_ContentImporter { + #main : MslsMain + #logger : ImportLogger + #relations : Relations + #handle : bool + #has_created_post : int + +__construct(main) + +get_logger() + +set_logger(logger) + +get_relations() + +set_relations(relations) + +handle_import(data) + #pre_flight_check(data) + +parse_sources() + #get_the_blog_post_ID(blog_id) + #insert_blog_post(blog_id, data) + +handle(handle) + +import_content(import_coordinates, post_fields) + #update_inserted_blog_post_data(blog_id, post_id, data) + #redirect_to_blog_post(dest_blog_id, post_id) + +filter_empty(empty) + } + package LogWriters as ContentImport.LogWriters { + interface "LogWriter" as ContentImport_LogWriters_LogWriter { + +write(data) + } + class "AdminNoticeLogger" as ContentImport_LogWriters_AdminNoticeLogger { + #transient : + #import_coordinates : ImportCoordinates + +write(data) + #get_section_html(section_title, entries, escape_entries) + +show_last_log(echo) + +set_import_coordinates(import_coordinates) + +get_transient() + } + } + package Importers as ContentImport.Importers { + interface "Importer" as ContentImport_Importers_Importer { + +import(data) + +set_import_coordinates(import_coordinates) + +get_logger() + +get_relations() + {static} +info() + } + class "BaseImporter" as ContentImport_Importers_BaseImporter { + +import_coordinates : ImportCoordinates + +logger : ImportLogger + +relations : Relations + +__construct(import_coordinates, logger, relations) + +import(data) + +set_import_coordinates(import_coordinates) + +get_logger() + +get_relations() + {static} +info() + } + class "PostFieldsImporters" as ContentImport_Importers_PostFieldsImporters { + #importers_map : + +details() + } + class "Map" as ContentImport_Importers_Map { + +make(import_coordinates) + +factories() + } + class "TermsImporters" as ContentImport_Importers_TermsImporters { + #importers_map : + +details() + } + class "WithRequestPostAttributes\nTrait WithRequestPostAttributes" as ContentImport_Importers_WithRequestPostAttributes { + #read_post_type_from_request(default) + } + class "PostThumbnailImporters" as ContentImport_Importers_PostThumbnailImporters { + #importers_map : + +details() + } + class "PostMetaImporters" as ContentImport_Importers_PostMetaImporters { + #importers_map : + +details() + } + class "ImportersBaseFactory" as ContentImport_Importers_ImportersBaseFactory { + #importers_map : array + +make(import_coordinates) + +details() + +selected() + #importers_info() + } + class "AttachmentsImporters" as ContentImport_Importers_AttachmentsImporters { + #importers_map : + +details() + } + interface "ImportersFactory" as ContentImport_Importers_ImportersFactory { + +make(import_coordinates) + +details() + +selected() + } + package PostMeta as ContentImport.Importers.PostMeta { + class "Duplicating" as ContentImport_Importers_PostMeta_Duplicating { + {static} +info() + +import(data) + +filter_post_meta(meta) + } + } + package PostThumbnail as ContentImport.Importers.PostThumbnail { + class "Linking\nClass Linking" as ContentImport_Importers_PostThumbnail_Linking { + {static} +info() + +import(data) + #get_attachment_meta(source_post_thumbnail_id) + } + } + package Terms as ContentImport.Importers.Terms { + class "ShallowDuplicating\nClass ShallowDuplicating" as ContentImport_Importers_Terms_ShallowDuplicating { + #reset_taxonomies : array + {static} +info() + +import(data) + #create_local_term(term, msls_term, dest_lang) + #filter_term_meta(meta, term) + #update_object_terms(object_id, dest_term_id, taxonomy) + } + } + package PostFields as ContentImport.Importers.PostFields { + class "Duplicating\nClass Duplicating" as ContentImport_Importers_PostFields_Duplicating { + {static} +info() + +import(data) + +filter_fields() + } + } + package Attachments as ContentImport.Importers.Attachments { + class "Linking\nClass Linking" as ContentImport_Importers_Attachments_Linking { + {static} +info() + +import(data) + } + } + } + } + package Component as Component { + class "Icon\nClass Icon" as Component_Icon { + #map : string[] + +__construct() + #maybe(language, prefix, postfix) + {abstract} #get_include() + {abstract} +get(language) + } + interface "InputInterface\nInterface Input" as Component_InputInterface { + +render() + } + package Input as Component.Input { + class "Group\nClass Options" as Component_Input_Group { + #arr : string[] + #glue : string + +__construct(glue) + +add(input) + +render() + } + class "Label\nClass Label" as Component_Input_Label { + #key : string + #text : string + +__construct(key, text) + +render() + } + class "Option\nClass Option" as Component_Input_Option { + #key : string + #value : string + #selected : string + +__construct(key, value, selected) + +render() + } + class "Select" as Component_Input_Select { + #key : string + #options : Group + +__construct(key, arr, selected) + +render() + } + class "Checkbox\nClass Checkbox" as Component_Input_Checkbox { + #key : string + #selected : string + +__construct(key, value) + +render() + } + class "Text" as Component_Input_Text { + #key : string + #value : string + #size : string + #readonly : string + +__construct(key, value, size, readonly) + +render() + } + } + package Icon as Component.Icon { + class "IconPng\nClass IconPng" as Component_Icon_IconPng { + #get_include() + +get(language) + } + class "IconSvg\nClass IconSvg" as Component_Icon_IconSvg { + #get_include() + +get(language) + } + class "IconLabel\nClass IconLabel" as Component_Icon_IconLabel { + #get_include() + +get(language) + } + } + } + package Map as Map { + class "HrefLang\nClass HrefLang" as Map_HrefLang { + #map : array + +__construct(blogs) + #get_hreflang(language) + +get(language) + } + } + package Query as Query { + class "YearPostsCounterQuery" as Query_YearPostsCounterQuery { + +__invoke(year) + } + class "CleanupOptionsQuery\nCleans up options" as Query_CleanupOptionsQuery { + +__invoke() + } + class "AuthorPostsCounterQuery\nGets the number of published posts by an author" as Query_AuthorPostsCounterQuery { + +__invoke(author_id) + } + class "TranslatedPostIdQuery\nGets the posts_ids of posts that have been translated to a specific language" as Query_TranslatedPostIdQuery { + +__invoke(language) + } + class "MonthPostsCounterQuery\nGets the number of published posts by a month" as Query_MonthPostsCounterQuery { + +__invoke(year, monthnum) + } + class "BlogsInNetworkQuery\nGets the blog_ids of blogs in the network" as Query_BlogsInNetworkQuery { + +__invoke() + } + class "DatePostsCounterQuery\nGets the number of published posts by a date" as Query_DatePostsCounterQuery { + +__invoke(year, monthnum, day) + } + class "AbstractQuery\nAbstractQuery" as Query_AbstractQuery { + #sql_cache : MslsSqlCacher + +__construct(sql_cache) + } + } + Component_Icon <|-- Component_Icon_IconLabel + Component_Icon <|-- Component_Icon_IconPng + Component_Icon <|-- Component_Icon_IconSvg + Component_Icon_IconPng ..> MslsPlugin + Component_Icon_IconSvg ..> MslsPlugin + Component_InputInterface <|-- Component_Input_Checkbox + Component_InputInterface <|-- Component_Input_Group + Component_InputInterface <|-- Component_Input_Label + Component_InputInterface <|-- Component_Input_Option + Component_InputInterface <|-- Component_Input_Select + Component_InputInterface <|-- Component_Input_Text + Component_Input_Group ..> Component_InputInterface + Component_Input_Select ..> Component_Input_Group + Component_Input_Select ..> Component_Input_Option + ContentImport_ContentImporter ..> ContentImport_ImportCoordinates + ContentImport_ContentImporter ..> ContentImport_ImportLogger + ContentImport_ContentImporter ..> ContentImport_Importers_Map + ContentImport_ContentImporter ..> ContentImport_Relations + ContentImport_ContentImporter ..> MslsBlogCollection + ContentImport_ContentImporter ..> MslsMain + ContentImport_ContentImporter ..> MslsOptionsPost + ContentImport_ImportCoordinates ..> MslsBlogCollection + ContentImport_ImportLogger ..> ContentImport_ImportCoordinates + ContentImport_ImportLogger ..> ContentImport_ImportLogger + ContentImport_ImportLogger ..> ContentImport_LogWriters_AdminNoticeLogger + ContentImport_ImportLogger ..> ContentImport_LogWriters_LogWriter + ContentImport_Importers_BaseImporter ..> ContentImport_ImportCoordinates + ContentImport_Importers_BaseImporter ..> ContentImport_ImportLogger + ContentImport_Importers_BaseImporter ..> ContentImport_Relations + ContentImport_Importers_BaseImporter <|-- ContentImport_Importers_Attachments_Linking + ContentImport_Importers_BaseImporter <|-- ContentImport_Importers_PostFields_Duplicating + ContentImport_Importers_BaseImporter <|-- ContentImport_Importers_PostMeta_Duplicating + ContentImport_Importers_BaseImporter <|-- ContentImport_Importers_PostThumbnail_Linking + ContentImport_Importers_BaseImporter <|-- ContentImport_Importers_Terms_ShallowDuplicating + ContentImport_Importers_Importer ..> ContentImport_ImportCoordinates + ContentImport_Importers_Importer ..> ContentImport_ImportLogger + ContentImport_Importers_Importer ..> ContentImport_Relations + ContentImport_Importers_Importer <|-- ContentImport_Importers_BaseImporter + ContentImport_Importers_ImportersBaseFactory ..> ContentImport_ImportCoordinates + ContentImport_Importers_ImportersBaseFactory ..> ContentImport_Importers_BaseImporter + ContentImport_Importers_ImportersBaseFactory ..> ContentImport_Importers_Importer + ContentImport_Importers_ImportersBaseFactory <|-- ContentImport_Importers_AttachmentsImporters + ContentImport_Importers_ImportersBaseFactory <|-- ContentImport_Importers_PostFieldsImporters + ContentImport_Importers_ImportersBaseFactory <|-- ContentImport_Importers_PostMetaImporters + ContentImport_Importers_ImportersBaseFactory <|-- ContentImport_Importers_PostThumbnailImporters + ContentImport_Importers_ImportersBaseFactory <|-- ContentImport_Importers_TermsImporters + ContentImport_Importers_ImportersFactory ..> ContentImport_ImportCoordinates + ContentImport_Importers_ImportersFactory ..> ContentImport_Importers_Importer + ContentImport_Importers_ImportersFactory <|-- ContentImport_Importers_ImportersBaseFactory + ContentImport_Importers_Map ..> ContentImport_ImportCoordinates + ContentImport_Importers_Map ..> ContentImport_Importers_AttachmentsImporters + ContentImport_Importers_Map ..> ContentImport_Importers_PostFieldsImporters + ContentImport_Importers_Map ..> ContentImport_Importers_PostMetaImporters + ContentImport_Importers_Map ..> ContentImport_Importers_PostThumbnailImporters + ContentImport_Importers_Map ..> ContentImport_Importers_TermsImporters + ContentImport_Importers_PostThumbnail_Linking ..> ContentImport_AttachmentPathFinder + ContentImport_Importers_Terms_ShallowDuplicating ..> MslsOptionsTax + ContentImport_Importers_Terms_ShallowDuplicating ..> MslsOptionsTaxTerm + ContentImport_LogWriters_AdminNoticeLogger ..> ContentImport_ImportCoordinates + ContentImport_LogWriters_LogWriter <|-- ContentImport_LogWriters_AdminNoticeLogger + ContentImport_MetaBox ..> ContentImport_Importers_Map + ContentImport_MetaBox ..> MslsBlogCollection + ContentImport_MetaBox ..> MslsFields + ContentImport_MetaBox ..> MslsOptionsPost + ContentImport_MetaBox ..> MslsPlugin + ContentImport_MetaBox ..> MslsRequest + ContentImport_Relations "1" ..> "*" MslsOptions + ContentImport_Relations ..> ContentImport_ImportCoordinates + ContentImport_Relations ..> ContentImport_Relations + ContentImport_Relations ..> MslsOptions + ContentImport_Service ..> ContentImport_AttachmentPathFinder + ContentImport_Service ..> ContentImport_ContentImporter + ContentImport_Service ..> ContentImport_LogWriters_AdminNoticeLogger + Map_HrefLang ..> MslsBlogCollection + MslsAdmin ..> Component_Input_Checkbox + MslsAdmin ..> Component_Input_Group + MslsAdmin ..> Component_Input_Label + MslsAdmin ..> Component_Input_Select + MslsAdmin ..> Component_Input_Text + MslsAdmin ..> MslsAdmin + MslsAdmin ..> MslsLink + MslsAdmin ..> MslsPlugin + MslsAdmin ..> MslsRegistry + MslsAdminBar ..> MslsAdminBar + MslsAdminBar ..> MslsBlog + MslsAdminBar ..> MslsBlogCollection + MslsAdminBar ..> MslsOptions + MslsAdminIcon ..> Component_Icon_IconLabel + MslsAdminIcon ..> Component_Icon_IconSvg + MslsAdminIcon ..> MslsAdminIcon + MslsAdminIcon ..> MslsAdminIconTaxonomy + MslsAdminIcon ..> MslsContentTypes + MslsAdminIcon <|-- MslsAdminIconTaxonomy + MslsAdminIconTaxonomy ..> MslsAdminIcon + MslsAdminIconTaxonomy ..> MslsAdminIconTaxonomy + MslsAdminIconTaxonomy ..> MslsTaxonomy + MslsBlock ..> MslsOptions + MslsBlock ..> MslsPlugin + MslsBlog ..> MslsAdminIcon + MslsBlog ..> MslsBlog + MslsBlog ..> MslsBlogCollection + MslsBlog ..> MslsOptions + MslsBlogCollection "1" ..> "*" MslsBlog + MslsBlogCollection ..> MslsBlog + MslsBlogCollection ..> MslsOptions + MslsBlogCollection ..> MslsPlugin + MslsContentFilter ..> MslsOptions + MslsContentFilter ..> MslsOutput + MslsContentTypes ..> MslsContentTypes + MslsContentTypes ..> MslsPostType + MslsContentTypes ..> MslsRequest + MslsContentTypes ..> MslsTaxonomy + MslsContentTypes <|-- MslsPostType + MslsContentTypes <|-- MslsTaxonomy + MslsCustomColumn ..> MslsAdminIcon + MslsCustomColumn ..> MslsBlogCollection + MslsCustomColumn ..> MslsCustomColumn + MslsCustomColumn ..> MslsOptions + MslsCustomColumn ..> MslsPostType + MslsCustomColumn <|-- MslsCustomColumnTaxonomy + MslsCustomColumnTaxonomy ..> MslsCustomColumnTaxonomy + MslsCustomColumnTaxonomy ..> MslsOptionsTax + MslsCustomColumnTaxonomy ..> MslsTaxonomy + MslsCustomFilter ..> Component_Input_Select + MslsCustomFilter ..> MslsCustomFilter + MslsCustomFilter ..> MslsFields + MslsCustomFilter ..> MslsPostType + MslsCustomFilter ..> MslsRequest + MslsCustomFilter ..> MslsSqlCacher + MslsCustomFilter ..> Query_TranslatedPostIdQuery + MslsGetSet ..> MslsGetSet + MslsGetSet <|-- MslsLink + MslsGetSet <|-- MslsOptions + MslsJson ..> MslsJson + MslsLanguageArray ..> MslsLanguageArray + MslsLink ..> MslsLink + MslsLink ..> MslsLinkImageOnly + MslsLink ..> MslsLinkTextImage + MslsLink ..> MslsLinkTextOnly + MslsLink <|-- MslsLinkImageOnly + MslsLink <|-- MslsLinkTextImage + MslsLink <|-- MslsLinkTextOnly + MslsMain ..> MslsBlogCollection + MslsMain ..> MslsFields + MslsMain ..> MslsLanguageArray + MslsMain ..> MslsOptions + MslsMain ..> MslsOptionsPost + MslsMain ..> MslsPlugin + MslsMain ..> MslsRequest + MslsMain <|-- MslsAdmin + MslsMain <|-- MslsCustomColumn + MslsMain <|-- MslsCustomFilter + MslsMain <|-- MslsMetaBox + MslsMain <|-- MslsOutput + MslsMain <|-- MslsPostTag + MslsMetaBox ..> ContentImport_MetaBox + MslsMetaBox ..> MslsAdminIcon + MslsMetaBox ..> MslsFields + MslsMetaBox ..> MslsJson + MslsMetaBox ..> MslsMetaBox + MslsMetaBox ..> MslsOptionsPost + MslsMetaBox ..> MslsPlugin + MslsMetaBox ..> MslsPostType + MslsMetaBox ..> MslsRequest + MslsOptions ..> Component_Icon_IconPng + MslsOptions ..> MslsAdminIcon + MslsOptions ..> MslsContentTypes + MslsOptions ..> MslsOptions + MslsOptions ..> MslsOptionsPost + MslsOptions ..> MslsOptionsQuery + MslsOptions ..> MslsOptionsTax + MslsOptions ..> MslsPlugin + MslsOptions <|-- MslsOptionsPost + MslsOptions <|-- MslsOptionsQuery + MslsOptions <|-- MslsOptionsTax + MslsOptionsQuery ..> MslsOptionsQuery + MslsOptionsQuery ..> MslsOptionsQueryAuthor + MslsOptionsQuery ..> MslsOptionsQueryDay + MslsOptionsQuery ..> MslsOptionsQueryMonth + MslsOptionsQuery ..> MslsOptionsQueryPostType + MslsOptionsQuery ..> MslsOptionsQueryYear + MslsOptionsQuery ..> MslsSqlCacher + MslsOptionsQuery <|-- MslsOptionsQueryAuthor + MslsOptionsQuery <|-- MslsOptionsQueryDay + MslsOptionsQuery <|-- MslsOptionsQueryMonth + MslsOptionsQuery <|-- MslsOptionsQueryPostType + MslsOptionsQuery <|-- MslsOptionsQueryYear + MslsOptionsQueryAuthor ..> MslsSqlCacher + MslsOptionsQueryAuthor ..> Query_AuthorPostsCounterQuery + MslsOptionsQueryDay ..> MslsSqlCacher + MslsOptionsQueryDay ..> Query_DatePostsCounterQuery + MslsOptionsQueryMonth ..> MslsSqlCacher + MslsOptionsQueryMonth ..> Query_MonthPostsCounterQuery + MslsOptionsQueryPostType ..> MslsSqlCacher + MslsOptionsQueryYear ..> MslsSqlCacher + MslsOptionsQueryYear ..> Query_YearPostsCounterQuery + MslsOptionsTax ..> MslsContentTypes + MslsOptionsTax ..> MslsOptionsTax + MslsOptionsTax ..> MslsOptionsTaxTerm + MslsOptionsTax ..> MslsOptionsTaxTermCategory + MslsOptionsTax <|-- MslsOptionsTaxTerm + MslsOptionsTaxTerm <|-- MslsOptionsTaxTermCategory + MslsOutput ..> Map_HrefLang + MslsOutput ..> MslsLink + MslsOutput ..> MslsOptions + MslsOutput ..> MslsOutput + MslsPlugin ..> ContentImport_Service + MslsPlugin ..> MslsAdmin + MslsPlugin ..> MslsAdminBar + MslsPlugin ..> MslsBlock + MslsPlugin ..> MslsContentFilter + MslsPlugin ..> MslsCustomColumn + MslsPlugin ..> MslsCustomColumnTaxonomy + MslsPlugin ..> MslsCustomFilter + MslsPlugin ..> MslsFields + MslsPlugin ..> MslsMetaBox + MslsPlugin ..> MslsOptions + MslsPlugin ..> MslsOutput + MslsPlugin ..> MslsPlugin + MslsPlugin ..> MslsPostTag + MslsPlugin ..> MslsRequest + MslsPlugin ..> MslsShortCode + MslsPlugin ..> MslsSqlCacher + MslsPlugin ..> MslsWidget + MslsPlugin ..> Query_BlogsInNetworkQuery + MslsPlugin ..> Query_CleanupOptionsQuery + MslsPostTag ..> MslsAdminIcon + MslsPostTag ..> MslsContentTypes + MslsPostTag ..> MslsFields + MslsPostTag ..> MslsJson + MslsPostTag ..> MslsOptionsTax + MslsPostTag ..> MslsPostTag + MslsPostTag ..> MslsPostTagClassic + MslsPostTag ..> MslsRequest + MslsPostTag <|-- MslsPostTagClassic + MslsPostTagClassic ..> MslsAdminIcon + MslsPostTagClassic ..> MslsBlog + MslsPostTagClassic ..> MslsContentTypes + MslsPostTagClassic ..> MslsOptionsTax + MslsPostType ..> MslsRequest + MslsRegistry ..> MslsRegistry + MslsRegistryInstance ..> MslsRegistry + MslsRegistryInstance <|-- ContentImport_AttachmentPathFinder + MslsRegistryInstance <|-- ContentImport_ContentImporter + MslsRegistryInstance <|-- ContentImport_Importers_ImportersBaseFactory + MslsRegistryInstance <|-- ContentImport_Importers_Map + MslsRegistryInstance <|-- ContentImport_LogWriters_AdminNoticeLogger + MslsRegistryInstance <|-- ContentImport_MetaBox + MslsRegistryInstance <|-- ContentImport_Service + MslsRegistryInstance <|-- MslsBlogCollection + MslsRegistryInstance <|-- MslsContentTypes + MslsRegistryInstance <|-- MslsGetSet + MslsRequest ..> MslsFields + MslsShortCode ..> MslsOptions + MslsShortCode ..> MslsWidget + MslsTaxonomy ..> MslsRequest + MslsWidget ..> MslsOutput + Query_AbstractQuery ..> MslsSqlCacher + Query_AbstractQuery <|-- Query_AuthorPostsCounterQuery + Query_AbstractQuery <|-- Query_BlogsInNetworkQuery + Query_AbstractQuery <|-- Query_CleanupOptionsQuery + Query_AbstractQuery <|-- Query_DatePostsCounterQuery + Query_AbstractQuery <|-- Query_MonthPostsCounterQuery + Query_AbstractQuery <|-- Query_TranslatedPostIdQuery + Query_AbstractQuery <|-- Query_YearPostsCounterQuery +@enduml