diff --git a/.distignore b/.distignore
index b04108e5..8858ceef 100644
--- a/.distignore
+++ b/.distignore
@@ -3,6 +3,7 @@
/.github
/bin
/build
+/diagrams
/docs
/githooks
/legacy-tests
@@ -14,6 +15,7 @@
.gitignore
.scrutinizer.yml
Changelog.md
+Diagrams.md
README.md
composer.json
composer.lock
@@ -25,5 +27,4 @@ phpdoc.xml
phpstan.neon
phpunit.xml
playwright.config.ts
-setup.sh
-plantuml_gist.puml
\ No newline at end of file
+setup.sh
\ No newline at end of file
diff --git a/Diagrams.md b/Diagrams.md
index a9a779e2..3376a5d0 100644
--- a/Diagrams.md
+++ b/Diagrams.md
@@ -2,4 +2,8 @@
Infrastructural overview about the plugin's PHP classes:
-
\ No newline at end of file
+
+
+Package diagram:
+
+
diff --git a/composer.json b/composer.json
index 64f41aca..f3991162 100644
--- a/composer.json
+++ b/composer.json
@@ -42,7 +42,8 @@
"prepare": "wget -O build/translations.json http://api.wordpress.org/translations/core/1.0/",
"flags-png": "php bin/flags-png.php > flags/flags.php",
"flags-svg": "php bin/flags-svg.php > css/flags.php",
- "diagram": "vendor/bin/php-class-diagram --php7 includes > plantuml_gist.puml",
+ "diagram:class": "vendor/bin/php-class-diagram --php7 includes > diagrams/mslsl-class.puml",
+ "diagram:package": "vendor/bin/php-class-diagram --package-diagram --php7 includes > diagrams/msls-package.puml",
"githooks": [
"if [ -e ./githooks/pre-commit ]; then cp ./githooks/pre-commit ./.git/hooks/; fi",
"if [ -e ./.git/hooks/pre-commit ]; then chmod 0755 ./.git/hooks/pre-commit; fi"
diff --git a/plantuml_gist.puml b/plantuml_gist.puml
deleted file mode 100644
index 0105199e..00000000
--- a/plantuml_gist.puml
+++ /dev/null
@@ -1,987 +0,0 @@
-@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