diff --git a/.gitattributes b/.gitattributes
index e000b8e4c36..3d5032e5917 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,6 +3,7 @@
/.github export-ignore
/dev export-ignore
/docs export-ignore
+/docs_includes export-ignore
/tests export-ignore
/.all-contributorsrc export-ignore
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 00000000000..757c63769f4
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,39 @@
+name: MkDocs
+
+on:
+ workflow_call:
+ # Allow manually triggering the workflow.
+ workflow_dispatch:
+
+ push:
+ branches:
+ - main
+ - documentation
+ paths:
+ - 'docs/**.md'
+ - 'docs/**.html'
+ - 'docs/**.yml'
+ - 'docs_includes/**.md'
+ - 'mkdocs.yml'
+permissions:
+ contents: write
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v4
+ with:
+ python-version: 3.x
+ - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
+
+ - uses: actions/cache@v3
+ with:
+ key: mkdocs-material-${{ env.cache_id }}
+ path: .cache
+ restore-keys: |
+ mkdocs-material-
+ - run: pip3 install mkdocs mkdocs-material mkdocs-minify-plugin mkdocs-redirects
+
+ - name: Publish docs
+ run: mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index f67b58eed2b..474b30c4ead 100644
--- a/.gitignore
+++ b/.gitignore
@@ -84,6 +84,9 @@ phpunit.xml
/shell/update-copyright.php
/shell/translations.php
+# generated by mkdocs serve
+/site
+
# DDEV
.ddev/config.yaml
.ddev/.sampleData
diff --git a/docs/.htaccess b/docs/.htaccess
new file mode 100644
index 00000000000..93169e4eb44
--- /dev/null
+++ b/docs/.htaccess
@@ -0,0 +1,2 @@
+Order deny,allow
+Deny from all
diff --git a/docs/EVENTS.md b/docs/EVENTS.md
deleted file mode 100644
index 63f7aa8a314..00000000000
--- a/docs/EVENTS.md
+++ /dev/null
@@ -1,378 +0,0 @@
-# Full events list
-
-## List
-
-| Event name | With Magento or since OpenMage |
-| ---------- | -------------- |
-| [eventPrefix]_after | 1.9.4.5 |
-| [eventPrefix]_clear | 1.9.4.5 |
-| [eventPrefix]_delete_after | 1.9.4.5 |
-| [eventPrefix]_delete_after_done | 1.9.4.5 |
-| [eventPrefix]_delete_before | 1.9.4.5 |
-| [eventPrefix]_delete_commit_after | 1.9.4.5 |
-| [eventPrefix]_finish_before | 1.9.4.5 |
-| [eventPrefix]_import_data_before | 1.9.4.5 |
-| [eventPrefix]_init_virtual_grid_columns | 1.9.4.5 |
-| [eventPrefix]_load_gallery_before | 1.9.4.5 |
-| [eventPrefix]_merge_after | 1.9.4.5 |
-| [eventPrefix]_merge_before | 1.9.4.5 |
-| [eventPrefix]_move_after | 1.9.4.5 |
-| [eventPrefix]_move_before | 1.9.4.5 |
-| [eventPrefix]_save_after | 1.9.4.5 |
-| [eventPrefix]_save_attribute_after | 1.9.4.5 |
-| [eventPrefix]_save_attribute_before | 1.9.4.5 |
-| [eventPrefix]_save_before | 1.9.4.5 |
-| [eventPrefix]_save_commit_after | 1.9.4.5 |
-| [eventPrefix]_set_sales_order | 1.9.4.5 |
-| [eventPrefix]_update_grid_records | 1.9.4.5 |
-| add_synchronize_message | 1.9.4.5 |
-| admin_permissions_role_prepare_save | 1.9.4.5 |
-| admin_session_user_login_failed | 1.9.4.5 |
-| admin_session_user_login_success | 1.9.4.5 |
-| admin_system_config_changed_section_[section] | 1.9.4.5 |
-| admin_system_config_changed_section_currency | 1.9.4.5 |
-| admin_system_config_changed_section_currency_before_reinit | 1.9.4.5 |
-| admin_system_config_section_save_after | 1.9.4.5 |
-| admin_user_authenticate_after | 1.9.4.5 |
-| admin_user_authenticate_before | 1.9.4.5 |
-| admin_user_validate | 1.9.4.5 |
-| adminhtml_block_eav_attribute_edit_form_init | 1.9.4.5 |
-| adminhtml_block_promo_widget_chooser_prepare_collection | 1.9.4.5 |
-| adminhtml_block_salesrule_actions_prepareform | 1.9.4.5 |
-| adminhtml_block_system_config_init_tab_sections_before | 1.9.4.5 |
-| adminhtml_block_widget_form_init_form_values_after | 19.4.12 / 20.0.8 |
-| adminhtml_block_widget_tabs_html_before | 19.4.12 / 20.0.8 |
-| adminhtml_cache_flush_all | 1.9.4.5 |
-| adminhtml_cache_flush_system | 1.9.4.5 |
-| adminhtml_cache_refresh_type | 1.9.4.5 |
-| adminhtml_catalog_category_edit_prepare_form | 1.9.4.5 |
-| adminhtml_catalog_category_tabs | 1.9.4.5 |
-| adminhtml_catalog_category_tree_can_add_root_category | 1.9.4.5 |
-| adminhtml_catalog_category_tree_can_add_sub_category | 1.9.4.5 |
-| adminhtml_catalog_category_tree_is_moveable | 1.9.4.5 |
-| adminhtml_catalog_product_attribute_edit_prepare_form | 1.9.4.5 |
-| adminhtml_catalog_product_attribute_set_main_html_before | 1.9.4.5 |
-| adminhtml_catalog_product_attribute_set_toolbar_main_html_before | 1.9.4.5 |
-| adminhtml_catalog_product_edit_tab_attributes_create_html_before | 1.9.4.5 |
-| adminhtml_catalog_product_form_prepare_excluded_field_list | 1.9.4.5 |
-| adminhtml_catalog_product_grid_prepare_massaction | 1.9.4.5 |
-| adminhtml_cms_page_edit_tab_content_prepare_form | 1.9.4.5 |
-| adminhtml_cms_page_edit_tab_design_prepare_form | 1.9.4.5 |
-| adminhtml_cms_page_edit_tab_main_prepare_form | 1.9.4.5 |
-| adminhtml_cms_page_edit_tab_meta_prepare_form | 1.9.4.5 |
-| adminhtml_cms_page_grid_renderer_action_before_render | 1.9.4.5 |
-| adminhtml_controller_action_predispatch_start | 1.9.4.5 |
-| adminhtml_controller_catalogrule_prepare_save | 1.9.4.5 |
-| adminhtml_controller_salesrule_prepare_save | 1.9.4.5 |
-| adminhtml_customer_orders_add_action_renderer | 1.9.4.5 |
-| adminhtml_customer_prepare_save | 1.9.4.5 |
-| adminhtml_customer_save_after | 1.9.4.5 |
-| adminhtml_init_system_config | 1.9.4.5 |
-| adminhtml_promo_catalog_edit_tab_main_prepare_form | 1.9.4.5 |
-| adminhtml_promo_quote_edit_tab_coupons_form_prepare_form | 1.9.4.5 |
-| adminhtml_promo_quote_edit_tab_main_prepare_form | 1.9.4.5 |
-| adminhtml_sales_order_create_process_data | 1.9.4.5 |
-| adminhtml_sales_order_create_process_data_before | 1.9.4.5 |
-| adminhtml_sales_order_create_save_before | 19.4.10 / 20.0.6 |
-| adminhtml_sales_order_creditmemo_register_before | 1.9.4.5 |
-| adminhtml_store_edit_form_prepare_form | 1.9.4.5 |
-| adminhtml_system_config_advanced_disableoutput_render_before | 1.9.4.5 |
-| adminhtml_widget_container_html_before | 1.9.4.5 |
-| adminhtml_widget_grid_filter_collection | 1.9.4.5 |
-| after_reindex_process_[getIndexerCode] | 1.9.4.5 |
-| ajax_cart_remove_item_success | 1.9.4.5 |
-| api_server_adapter_jsonrpc_run_after | 20.1.1 |
-| api_user_authenticated | 1.9.4.5 |
-| api_user_html_before | 1.9.4.5 |
-| application_clean_cache | 1.9.4.5 |
-| bundle_product_view_config | 1.9.4.5 |
-| catalog_block_product_list_collection | 1.9.4.5 |
-| catalog_block_product_status_display | 1.9.4.5 |
-| catalog_category_change_products | 1.9.4.5 |
-| catalog_category_flat_loadnodes_before | 1.9.4.5 |
-| catalog_category_prepare_save | 1.9.4.5 |
-| catalog_controller_category_delete | 1.9.4.5 |
-| catalog_controller_category_init_after | 1.9.4.5 |
-| catalog_controller_category_init_before | 1.9.4.5 |
-| catalog_controller_product_delete | 1.9.4.5 |
-| catalog_controller_product_init | 1.9.4.5 |
-| catalog_controller_product_init_after | 1.9.4.5 |
-| catalog_controller_product_init_before | 1.9.4.5 |
-| catalog_controller_product_mass_status | 1.9.4.5 |
-| catalog_controller_product_view | 1.9.4.5 |
-| catalog_helper_output_construct | 1.9.4.5 |
-| catalog_model_product_duplicate | 1.9.4.5 |
-| catalog_product_attribute_update_after | 1.9.4.5 |
-| catalog_product_attribute_update_before | 1.9.4.5 |
-| catalog_product_collection_apply_limitations_after | 1.9.4.5 |
-| catalog_product_collection_apply_limitations_before | 1.9.4.5 |
-| catalog_product_collection_before_add_count_to_categories | 1.9.4.5 |
-| catalog_product_collection_load_after | 1.9.4.5 |
-| catalog_product_collection_load_before | 1.9.4.5 |
-| catalog_product_compare_add_product | 1.9.4.5 |
-| catalog_product_compare_item_collection_clear | 1.9.4.5 |
-| catalog_product_compare_remove_product | 1.9.4.5 |
-| catalog_product_edit_action | 1.9.4.5 |
-| catalog_product_edit_form_render_recurring | 1.9.4.5 |
-| catalog_product_flat_prepare_columns | 1.9.4.5 |
-| catalog_product_flat_prepare_indexes | 1.9.4.5 |
-| catalog_product_flat_rebuild | 1.9.4.5 |
-| catalog_product_flat_update_product | 1.9.4.5 |
-| catalog_product_gallery_prepare_layout | 1.9.4.5 |
-| catalog_product_gallery_upload_image_after | 1.9.4.5 |
-| catalog_product_import_finish_before | 1.9.4.5 |
-| catalog_product_is_salable_after | 1.9.4.5 |
-| catalog_product_is_salable_before | 1.9.4.5 |
-| catalog_product_media_add_image | 1.9.4.5 |
-| catalog_product_media_save_before | 1.9.4.5 |
-| catalog_product_new_action | 1.9.4.5 |
-| catalog_product_status_update | 1.9.4.5 |
-| catalog_product_stock_item_mass_change | 1.9.4.5 |
-| catalog_product_to_website_change | 1.9.4.5 |
-| catalog_product_type_grouped_price | 1.9.4.5 |
-| catalog_product_type_prepare_[processMode]_options | 1.9.4.5 |
-| catalog_product_upsell | 1.9.4.5 |
-| catalog_product_website_update | 1.9.4.5 |
-| catalog_product_website_update_before | 1.9.4.5 |
-| catalogindex_get_minimal_price | 1.9.4.5 |
-| catalogindex_plain_reindex_after | 1.9.4.5 |
-| catalogsearch_index_process_complete | 1.9.4.5 |
-| catalogsearch_index_process_start | 1.9.4.5 |
-| catalogsearch_reset_search_result | 1.9.4.5 |
-| catalogsearch_searchable_attributes_load_after | 1.9.4.5 |
-| category_move | 1.9.4.5 |
-| category_prepare_ajax_response | 1.9.4.5 |
-| checkout_allow_guest | 1.9.4.5 |
-| checkout_block_cart_sidebar_aftertohtml | 1.9.4.5 |
-| checkout_cart_add_product_complete | 1.9.4.5 |
-| checkout_cart_product_add_after | 1.9.4.5 |
-| checkout_cart_product_add_before | 19.4.0 / 20.0.0 |
-| checkout_cart_product_update_after | 1.9.4.5 |
-| checkout_cart_save_after | 1.9.4.5 |
-| checkout_cart_save_before | 1.9.4.5 |
-| checkout_cart_update_item_complete | 1.9.4.5 |
-| checkout_cart_update_items_after | 1.9.4.5 |
-| checkout_cart_update_items_before | 1.9.4.5 |
-| checkout_controller_multishipping_shipping_post | 1.9.4.5 |
-| checkout_multishipping_controller_success_action | 1.9.4.5 |
-| checkout_multishipping_refund_all | 1.9.4.5 |
-| checkout_onepage_controller_success_action | 1.9.4.5 |
-| checkout_quote_destroy | 1.9.4.5 |
-| checkout_quote_init | 1.9.4.5 |
-| checkout_type_multishipping_create_orders_single | 1.9.4.5 |
-| checkout_type_multishipping_set_shipping_items | 1.9.4.5 |
-| checkout_type_onepage_save_order | 1.9.4.5 |
-| clean_catalog_images_cache_after | 1.9.4.5 |
-| clean_configurable_swatches_cache_after | 1.9.4.5 |
-| clean_media_cache_after | 1.9.4.5 |
-| clear_expired_quotes_before | 1.9.4.5 |
-| cms_controller_router_match_before | 1.9.4.5 |
-| cms_generate_breadcrumbs | 1.9.4.5 |
-| cms_page_get_available_statuses | 1.9.4.5 |
-| cms_page_prepare_save | 1.9.4.5 |
-| cms_page_render | 1.9.4.5 |
-| cms_wysiwyg_config_prepare | 1.9.4.5 |
-| cms_wysiwyg_images_static_urls_allowed | 1.9.4.5 |
-| controller_action_layout_generate_blocks_after | 1.9.4.5 |
-| controller_action_layout_generate_blocks_before | 1.9.4.5 |
-| controller_action_layout_generate_xml_before | 1.9.4.5 |
-| controller_action_layout_load_before | 1.9.4.5 |
-| controller_action_layout_render_before | 1.9.4.5 |
-| controller_action_layout_render_before_[getFullActionName] | 1.9.4.5 |
-| controller_action_nocookies | 1.9.4.5 |
-| controller_action_noroute | 1.9.4.5 |
-| controller_action_postdispatch | 1.9.4.5 |
-| controller_action_postdispatch_[getFullActionName] | 1.9.4.5 |
-| controller_action_postdispatch_[getRouteName] | 1.9.4.5 |
-| controller_action_predispatch | 1.9.4.5 |
-| controller_action_predispatch_[getFullActionName] | 1.9.4.5 |
-| controller_action_predispatch_[getRouteName] | 1.9.4.5 |
-| controller_front_init_before | 1.9.4.5 |
-| controller_front_init_routers | 1.9.4.5 |
-| controller_front_send_response_after | 1.9.4.5 |
-| controller_front_send_response_before | 1.9.4.5 |
-| controller_response_redirect | 1.9.4.5 |
-| core_app_run_after | 20.1.0 |
-| core_block_abstract_prepare_layout_after | 1.9.4.5 |
-| core_block_abstract_prepare_layout_before | 1.9.4.5 |
-| core_block_abstract_to_html_after | 1.9.4.5 |
-| core_block_abstract_to_html_before | 1.9.4.5 |
-| core_clean_cache | 1.9.4.5 |
-| core_collection_abstract_load_after | 1.9.4.5 |
-| core_collection_abstract_load_before | 1.9.4.5 |
-| core_copy_fieldset_[fieldset]_[aspect] | 1.9.4.5 |
-| core_layout_block_create_after | 1.9.4.5 |
-| core_locale_set_locale | 1.9.4.5 |
-| core_session_abstract_add_message | 1.9.4.5 |
-| core_session_abstract_clear_messages | 1.9.4.5 |
-| create_order_session_quote_initialized | 1.9.4.5 |
-| currency_display_options_forming | 1.9.4.5 |
-| custom_quote_process | 1.9.4.5 |
-| customer_address_format | 1.9.4.5 |
-| customer_address_validation_after | 1.9.4.5 |
-| customer_controller_account_login_post_redirect_before | 20.4.0 |
-| customer_customer_authenticated | 1.9.4.5 |
-| customer_login | 1.9.4.5 |
-| customer_logout | 1.9.4.5 |
-| customer_register_success | 1.9.4.5 |
-| customer_registration_is_allowed | 1.9.4.5 |
-| customer_session_init | 1.9.4.5 |
-| eav_collection_abstract_load_before | 1.9.4.5 |
-| email_queue_send_before | 19.5.0 / 20.1.0 |
-| email_queue_send_after | 19.5.0 / 20.1.0 |
-| email_send_before | 19.5.0 / 20.1.0 |
-| email_send_after | 19.5.0 / 20.1.0 |
-| email_template_send_before | 19.5.0 / 20.1.0 |
-| email_template_send_after | 19.5.0 / 20.1.0 |
-| end_index_events_[getEventTypeName] | 1.9.4.5 |
-| end_process_event_[getEventTypeName] | 1.9.4.5 |
-| gift_options_prepare_items | 1.9.4.5 |
-| googleanalytics_ga4_send_data_before | 20.1.1 |
-| http_response_send_before | 1.9.4.5 |
-| index_process_change_status | 1.9.4.5 |
-| init_from_order_session_quote_initialized | 1.9.4.5 |
-| load_customer_quote_before | 1.9.4.5 |
-| log_log_clean_after | 1.9.4.5 |
-| log_log_clean_before | 1.9.4.5 |
-| log_visitor_collection_load_before | 1.9.4.5 |
-| mage_run_installed_exception | 20.7.0 |
-| mage_run_exception | 1.9.4.5 |
-| model_config_data_save_before | 1.9.4.5 |
-| model_delete_after | 1.9.4.5 |
-| model_delete_before | 1.9.4.5 |
-| model_delete_commit_after | 1.9.4.5 |
-| model_load_after | 1.9.4.5 |
-| model_load_before | 1.9.4.5 |
-| model_save_after | 1.9.4.5 |
-| model_save_before | 1.9.4.5 |
-| model_save_commit_after | 1.9.4.5 |
-| newsletter_send_before | 19.5.0 / 20.1.0 |
-| newsletter_send_after | 19.5.0 / 20.1.0 |
-| on_view_report | 1.9.4.5 |
-| order_cancel_after | 1.9.4.5 |
-| order_status_changed_before_save | 19.5.0 / 20.1.0 |
-| page_block_html_topmenu_gethtml_after | 1.9.4.5 |
-| page_block_html_topmenu_gethtml_before | 1.9.4.5 |
-| payment_form_block_to_html_before | 1.9.4.5 |
-| payment_info_block_prepare_specific_information | 1.9.4.5 |
-| payment_method_is_active | 1.9.4.5 |
-| paypal_prepare_line_items | 1.9.4.5 |
-| pdf_item_draw_after | 1.9.4.5 |
-| permissions_block_html_before | 1.9.4.5 |
-| permissions_orphanedresource_html_before | 20.2.1 |
-| permissions_user_html_before | 1.9.4.5 |
-| permissions_variable_html_before | 1.9.4.5 |
-| poll_vote_add | 1.9.4.5 |
-| prepare_product_children_id_list_select | 1.9.4.5 |
-| product_duplicate_attributes | 1.9.4.5 |
-| product_option_renderer_init | 1.9.4.5 |
-| resource_get_tablename | 1.9.4.5 |
-| review_controller_product_init | 1.9.4.5 |
-| review_controller_product_init_after | 1.9.4.5 |
-| review_controller_product_init_before | 1.9.4.5 |
-| review_review_collection_load_before | 1.9.4.5 |
-| rss_catalog_category_xml_callback | 1.9.4.5 |
-| rss_catalog_new_xml_callback | 1.9.4.5 |
-| rss_catalog_notify_stock_collection_select | 1.9.4.5 |
-| rss_catalog_review_collection_select | 1.9.4.5 |
-| rss_catalog_special_xml_callback | 1.9.4.5 |
-| rss_catalog_tagged_item_xml_callback | 1.9.4.5 |
-| rss_order_new_collection_select | 1.9.4.5 |
-| rss_wishlist_xml_callback | 1.9.4.5 |
-| rule_environment_collect | 1.9.4.5 |
-| sales_convert_order_item_to_quote_item | 1.9.4.5 |
-| sales_convert_quote_address_to_order | 1.9.4.5 |
-| sales_convert_quote_address_to_order_address | 1.9.4.5 |
-| sales_convert_quote_item_to_order_item | 1.9.4.5 |
-| sales_convert_quote_payment_to_order_payment | 1.9.4.5 |
-| sales_convert_quote_to_order | 1.9.4.5 |
-| sales_model_service_quote_submit_after | 1.9.4.5 |
-| sales_model_service_quote_submit_before | 1.9.4.5 |
-| sales_model_service_quote_submit_failure | 1.9.4.5 |
-| sales_model_service_quote_submit_success | 1.9.4.5 |
-| sales_order_creditmemo_cancel | 1.9.4.5 |
-| sales_order_creditmemo_refund_before | 19.4.15 / 20.0.13 |
-| sales_order_creditmemo_refund | 1.9.4.5 |
-| sales_order_invoice_cancel | 1.9.4.5 |
-| sales_order_invoice_pay | 1.9.4.5 |
-| sales_order_invoice_register | 1.9.4.5 |
-| sales_order_item_cancel | 1.9.4.5 |
-| sales_order_payment_cancel | 1.9.4.5 |
-| sales_order_payment_cancel_creditmemo | 1.9.4.5 |
-| sales_order_payment_cancel_invoice | 1.9.4.5 |
-| sales_order_payment_capture | 1.9.4.5 |
-| sales_order_payment_pay | 1.9.4.5 |
-| sales_order_payment_place_end | 1.9.4.5 |
-| sales_order_payment_place_start | 1.9.4.5 |
-| sales_order_payment_refund | 1.9.4.5 |
-| sales_order_payment_void | 1.9.4.5 |
-| sales_order_place_after | 1.9.4.5 |
-| sales_order_place_before | 1.9.4.5 |
-| sales_order_status_unassign_before | 1.9.4.5 |
-| sales_prepare_amount_expression | 1.9.4.5 |
-| sales_quote_add_item | 1.9.4.5 |
-| sales_quote_config_get_product_attributes | 1.9.4.5 |
-| sales_quote_item_collection_products_after_load | 1.9.4.5 |
-| sales_quote_item_qty_set_after | 1.9.4.5 |
-| sales_quote_item_set_product | 1.9.4.5 |
-| sales_quote_product_add_after | 1.9.4.5 |
-| sales_quote_remove_item | 1.9.4.5 |
-| sales_sale_collection_query_before | 1.9.4.5 |
-| salesrule_rule_condition_combine | 1.9.4.5 |
-| salesrule_rule_get_coupon_types | 1.9.4.5 |
-| salesrule_validator_process | 1.9.4.5 |
-| sendfriend_product | 1.9.4.5 |
-| sitemap_categories_generating_before | 1.9.4.5 |
-| sitemap_cms_pages_generating_before | 19.4.0 / 20.0.0 |
-| sitemap_products_generating_before | 1.9.4.5 |
-| sitemap_urlset_generating_before | 19.4.0 / 20.0.0 |
-| start_index_events_[getEventTypeName] | 1.9.4.5 |
-| start_process_event_[getEventTypeName] | 1.9.4.5 |
-| store_add | 1.9.4.5 |
-| store_delete | 1.9.4.5 |
-| store_edit | 1.9.4.5 |
-| store_group_save | 1.9.4.5 |
-| tag_tag_product_collection_load_after | 1.9.4.5 |
-| tax_rate_data_fetch | 1.9.4.5 |
-| visitor_init | 1.9.4.5 |
-| wishlist_add_item | 1.9.4.5 |
-| wishlist_add_product | 1.9.4.5 |
-| wishlist_item_add_after | 1.9.4.5 |
-| wishlist_item_collection_products_after_load | 1.9.4.5 |
-| wishlist_items_renewed | 1.9.4.5 |
-| wishlist_product_add_after | 1.9.4.5 |
-| wishlist_share | 1.9.4.5 |
-| wishlist_update_item | 1.9.4.5 |
-
-## Example
-
-For example, if you want to add custom logic for `customer_login` event.
-Add in your `config.xml`:
-
-```xml
-
-
-
-
-
-
- yourShortClass/observer
- yourMethod
-
-
-
-
-
-
-```
-
-And in your `Observer.php`:
-
-```php
-class YourNamespace_YourModule_Model_Observer {
-
- // EVENT customer_login
- public function yourMethod(Varien_Event_Observer $observer) {
- $customer = $observer->getData('customer');
- }
-}
diff --git a/docs/content/api/rest/assets/images/rest_test001.png b/docs/content/api/rest/assets/images/rest_test001.png
new file mode 100644
index 00000000000..6d9fe290edc
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test001.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test003.png b/docs/content/api/rest/assets/images/rest_test003.png
new file mode 100644
index 00000000000..8463571f30b
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test003.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test004.png b/docs/content/api/rest/assets/images/rest_test004.png
new file mode 100644
index 00000000000..89b567b4200
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test004.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test005.png b/docs/content/api/rest/assets/images/rest_test005.png
new file mode 100644
index 00000000000..a811bda02ba
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test005.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test006.png b/docs/content/api/rest/assets/images/rest_test006.png
new file mode 100644
index 00000000000..beda9b1b62e
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test006.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test007.png b/docs/content/api/rest/assets/images/rest_test007.png
new file mode 100644
index 00000000000..100df5ac753
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test007.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test008.png b/docs/content/api/rest/assets/images/rest_test008.png
new file mode 100644
index 00000000000..77d03f03910
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test008.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test009.png b/docs/content/api/rest/assets/images/rest_test009.png
new file mode 100644
index 00000000000..9cf27a7574e
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test009.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test010.png b/docs/content/api/rest/assets/images/rest_test010.png
new file mode 100644
index 00000000000..abcadf683f2
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test010.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test011.png b/docs/content/api/rest/assets/images/rest_test011.png
new file mode 100644
index 00000000000..9d59663a1e2
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test011.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test012.png b/docs/content/api/rest/assets/images/rest_test012.png
new file mode 100644
index 00000000000..8dc2b8efaec
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test012.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test_authheader.png b/docs/content/api/rest/assets/images/rest_test_authheader.png
new file mode 100644
index 00000000000..61379c2eb7a
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test_authheader.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test_insert.png b/docs/content/api/rest/assets/images/rest_test_insert.png
new file mode 100644
index 00000000000..1a9e46be080
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test_insert.png differ
diff --git a/docs/content/api/rest/assets/images/rest_test_oauth_tab.png b/docs/content/api/rest/assets/images/rest_test_oauth_tab.png
new file mode 100644
index 00000000000..ae7f02d43f1
Binary files /dev/null and b/docs/content/api/rest/assets/images/rest_test_oauth_tab.png differ
diff --git a/docs/content/api/rest/common_http_status_codes.md b/docs/content/api/rest/common_http_status_codes.md
new file mode 100644
index 00000000000..4f0363d2bc9
--- /dev/null
+++ b/docs/content/api/rest/common_http_status_codes.md
@@ -0,0 +1,44 @@
+# Common HTTP status codes
+
+HTTP status codes are an essential part of the REST concept. You can get familiar with all of them on [Wikipedia](http://en.wikipedia.org/wiki/List_of_http_status_codes).
+
+The Magento API attempts to return appropriate HTTP status codes for all requests. Any information is returned in the form of a standard HTTP response with an HTTP status code describing the error and the body message.
+
+## HTTP Status Codes
+
+The following table contains possible common HTTP status codes:
+
+| Status Code | Message |
+|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| 200 OK | - |
+| 201 Created | Resource was partially created |
+| 207 Multi-Status | - |
+| 400 Bad Request | Resource data pre-validation error.
Resource data invalid.
The request data is invalid.
Resource collection paging error.
The paging limit exceeds the allowed number.
Resource collection ordering error.
Resource collection filtering error.
Resource collection including additional attributes error. |
+| 403 Forbidden | Access denied. |
+| 404 Not Found | Resource not found. |
+| 405 Method Not Allowed | Resource does not support method.
Resource method not implemented yet. |
+| 500 Internal Error | Unhandled simple errors.
Resource internal error. |
+
+## Error Messages
+
+When the Magento API returns an error message, it returns it in your requested format. For example, an error in the XML format might look like the following:
+
+```xml
+
+
+
+
+
+ 404
+ Resource not found.
+
+
+
+
+```
+
+An error in the JSON format might look like the following:
+
+```json
+{"messages":{"error":[{"code":404,"message":"Resource not found."}]}}
+```
diff --git a/docs/content/api/rest/get_filters.md b/docs/content/api/rest/get_filters.md
new file mode 100644
index 00000000000..90e6054d951
--- /dev/null
+++ b/docs/content/api/rest/get_filters.md
@@ -0,0 +1,118 @@
+# Use filters
+
+_JSON responses on this page contributed by Tim Reynolds._
+
+Some requests use GET parameters in the URL. These are as follows:
+
+## filter
+
+Specifies the filters for returned data.
+
+## page
+
+Specifies the page number which items will be returned.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?page=1
+ ```
+## order, dir
+
+Specifies the sort order of returned items and the order direction: `asc` - returns items in the ascending order; `dsc` - returns items in the descending order.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?order=name&dir=dsc
+ https://om.ddev.site/api/rest/products?order=name&dir=asc
+ ```
+## limit
+
+Limits the number of returned items in the response. Note that by default, 10 items are returned in the response. The maximum number is 100 items.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?limit=2
+ ```
+
+## neq
+
+"not equal to" - returns items with the specified attribute that is not equal to the defined value.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][neq]=3
+ ```
+
+## in
+
+"equals any of" - returns items that are equal to the item(s) with the specified attribute(s).
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][in]=3
+ ```
+
+## nin
+
+"not equals any of" - returns items excluding the item with the specified attribute.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][nin]=3
+ ```
+
+## gt
+
+"greater than" - returns items with the specified attribute that is greater than the defined value.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][gt]=3
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=price&filter[1][gt]=300
+ ```
+
+## lt
+
+"less than" - returns items with the specified attribute that is less than the defined value.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][lt]=4
+ ```
+
+## from, to
+
+Specifies the range of attributes according to which items will be returned.
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=entity_id&filter[1][from]=1&filter[1][to]=3
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=price&filter[1][from]=150&filter[1][to]=350
+ ```
+
+## Whitespaces
+
+If the attribute value consists of several words separated by a whitespace, the '%20' sign is used:
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products?filter[1][attribute]=name&filter[1][in]=BlackBerry%208100%20Pearl
+ ```
+
+## Example 1
+
+For example, to filter products with the description equal to simple01:
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/products/?order=entity_id&filter[0][attribute]=description&filter[0][in][0]=simple01
+ ```
+
+## Example 2
+
+To filter customers by email address:
+
+!!! example
+ ```
+ https://om.ddev.site/api/rest/customers?filter[1][attribute]=email&filter[1][in][0]=ryan@test.com
+ ```
diff --git a/docs/content/api/rest/http_methods.md b/docs/content/api/rest/http_methods.md
new file mode 100644
index 00000000000..678ad70d6e8
--- /dev/null
+++ b/docs/content/api/rest/http_methods.md
@@ -0,0 +1,59 @@
+# HTTP methods
+
+Accessing API is performed via HTTP. When you enter a URL into a web browser address bar, the browser performs an HTTP GET request to the URL. This usually returns a web page in the form of an HTTP response that the browser displays. But the GET method is one of several HTTP request methods. Magento REST API uses the four main HTTP methods: GET, POST, PUT, and DELETE. The most widespread methods are GET and POST. The other methods are less known but they became widely known due to the popularity of REST web services. An important concept of the REST architecture is that different HTTP request methods perform different actions when applied to the same URL.
+
+For example:
+
+```
+GET https://om.ddev.site/rest/customers/123
+```
+
+will retrieve information about the specified customer;
+
+```
+DELETE https://om.ddev.site/rest/customers/123
+```
+
+will delete the specified customer.
+
+## GET
+
+**Retrieving Resources with the HTTP GET Method**
+
+The HTTP GET method is defined in section 9.3 of the [RFC2616](http://www.ietf.org/rfc/rfc2616.txt) document:
+
+> The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI. If the Request-URI refers to a data-producing process, it is the produced data which shall be returned as the entity in the response and not the source text of the process, unless that text happens to be the output of the process.
+
+You can retrieve a representation of a resource by getting its URL.
+
+## POST and PUT
+
+**Creating or Updating Resources with the HTTP POST and PUT Methods**
+
+The POST method is defined in section 9.5 of the [RFC2616](http://www.ietf.org/rfc/rfc2616.txt) document:
+
+> The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. POST is designed to allow a uniform method to cover the following functions:
+>
+> * Annotation of existing resources;
+>
+> * Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;
+>
+> * Providing a block of data, such as the result of submitting a form, to a data-handling process;
+>
+> * Extending a database through an append operation.
+
+The PUT method is defined in section 9.6 of the [RFC2616](http://www.ietf.org/rfc/rfc2616.txt) document:
+
+> The PUT method requests that the enclosed entity be stored under the supplied Request-URI. If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server.
+
+Creating or updating a resource involves performing an HTTP POST or HTTP PUT to a resource URL.
+
+## DELETE
+
+**Deleting Resources with the HTTP DELETE Method**
+
+The DELETE method is defined in section 9.7 of the [RFC2616](http://www.ietf.org/rfc/rfc2616.txt) document:
+
+> The DELETE method requests that the origin server delete the resource identified by the Request-URI. This method MAY be overridden by human intervention (or other means) on the origin server.
+
+Deleting a resource is performed by means of making an HTTP DELETE request to the resource URL.
\ No newline at end of file
diff --git a/docs/content/api/rest/resources/customers.md b/docs/content/api/rest/resources/customers.md
new file mode 100644
index 00000000000..cd8829e2feb
--- /dev/null
+++ b/docs/content/api/rest/resources/customers.md
@@ -0,0 +1,268 @@
+\--- layout: v1x\_rest title: Customers --- JSON responses on this page contributed by Tim Reynolds
+
+* [REST API: Customers](#RESTAPI-Resource-Customers-RESTAPI-Customers)
+ * [URI: /customers](#RESTAPI-Resource-Customers-URI--customers)
+ * [HTTP Method: GET /customers](#RESTAPI-Resource-Customers-HTTPMethod-GET-customers)
+ * [HTTP Method: POST /customers](#RESTAPI-Resource-Customers-HTTPMethod-POST-customers)
+ * [HTTP Method: PUT /customers](#RESTAPI-Resource-Customers-HTTPMethod-PUT-customers)
+ * [HTTP Method: DELETE /customers](#RESTAPI-Resource-Customers-HTTPMethod-DELETE-customers)
+* [REST API: Customer](#RESTAPI-Resource-Customers-RESTAPI-Customer)
+ * [URI: /customers/:customerId](#RESTAPI-Resource-Customers-URI--customers--customerId)
+ * [HTTP Method: GET /customers/:customerId](#RESTAPI-Resource-Customers-HTTPMethod-GET-customers--customerId)
+ * [HTTP Method: POST /customers/:customerId](#RESTAPI-Resource-Customers-HTTPMethod-POST-customers--customerId)
+ * [HTTP Method: PUT /customers/:customerId](#RESTAPI-Resource-Customers-HTTPMethod-PUT-customers--customerId)
+ * [HTTP Method: DELETE /customers/:customerId](#RESTAPI-Resource-Customers-HTTPMethod-DELETE-customers--customerId)
+
+## Customers
+
+#### URI: /customers
+
+Allows you to create and retrieve customers.
+
+**URL Structure**: http://om.ddev.site/api/rest/customers
+**Version**: 1
+
+### HTTP Method GET
+
+**Description**: Allows you to retrieve the list of existing customers.
+**Notes:**: Only Admin user can retrieve the list of customers with all their attributes.
+
+**Authentication**: Admin
+**Default Format**: XML
+**Parameters**: _No Parameters_
+
+!!! Example
+ ```
+ GET http://om.ddev.site/api/rest/customers
+ ```
+
+#### Response body: XML
+
+```xml
+
+
+
+ 2
+ 1
+ test@example.com
+ 1
+ 2012-03-22 14:15:54
+ 1
+ john
+ Doe
+ Default Store View
+
+
+ 4
+ 1
+ earl@example.com
+ 1
+ 2012-03-28 13:54:04
+ 0
+ Earl
+ Hickey
+ Admin
+
+
+```
+
+#### Response body: JSON
+
+```json
+{
+ "2": {
+ "entity_id": "2",
+ "website_id": "1",
+ "email": "test@example.com",
+ "group_id": "1",
+ "created_at": "2012-03-22 14:15:54",
+ "disable_auto_group_change": "1",
+ "firstname": "john",
+ "lastname": "Doe",
+ "created_in": "Admin",
+ "prefix": null,
+ "suffix": null,
+ "taxvat": null,
+ "dob": "2001-01-03 00:00:00",
+ "reward_update_notification": "1",
+ "reward_warning_notification": "1",
+ "gender": "1"
+ },
+ "4": {
+ "entity_id": "4",
+ "website_id": "1",
+ "email": "earl@example.com",
+ "group_id": "1",
+ "created_at": "2013-03-28 18:59:41",
+ "disable_auto_group_change": "0",
+ "firstname": "Earl",
+ "lastname": "Hickey",
+ "created_in": "Admin",
+ "prefix": null,
+ "suffix": null,
+ "taxvat": null,
+ "dob": "2012-03-28 13:54:04",
+ "reward_update_notification": "1",
+ "reward_warning_notification": "1",
+ "gender": "1"
+ }
+}
+```
+
+### HTTP Method POST
+
+**Description**: Allows you to create a new customer.
+
+**Authentication**: Admin
+**Default Format**: XML
+**Parameters**:
+
+| Name | Description | Required | Type | Example Value |
+|---------------------------|------------------------------------------------------------------------------|----------|--------|-------------------|
+| firstname | The customer first name | required | string | John |
+| lastname | The customer last name | required | string | Doe |
+| email | The customer email address | required | string | johny@example.com |
+| password | The customer password. The password must contain minimum 7 characters | required | string | 123123q |
+| website_id | Website ID | required | int | 1 |
+| group_id | Customer group ID | required | int | 1 |
+| disable_auto_group_change | Defines whether the automatic group change for the customer will be disabled | optional | int | 0 |
+| prefix | Customer prefix | optional | string | Mr. |
+| middlename | Customer middle name or initial | optional | string | R. |
+| suffix | Customer suffix | optional | string | Sr. |
+| taxvat | Customer Tax or VAT number | optional | string | GB999 9999 73 |
+
+**Notes**: The list of parameters may change depending on the attributes settings in **Customers** > **Attributes** > **Manage Customer Attributes** page in Magento Admin Panel. For example, a required status of the **middlename** attribute (Middle Name/Initial) may be changed to 'YES". Please note that managing customer attributes is available only in Magento Enterprise Edition.
+
+!!! Example
+ ```
+ POST http://om.ddev.site/api/rest/customers
+ ```
+
+#### Request body
+
+```xml
+
+
+ Earl
+ Hickey
+ 123123q
+ earl@example.com
+ 1
+ 1
+
+```
+
+#### Response
+
+If the customer was created successfully, we receive **Response HTTP Code** = 200, empty **Response Body** and **Location** header like `/api/rest/customers/555` where `555` - an entity id of the new customer.
+
+### HTTP Method PUT
+
+**Description**: Not allowed
+
+### HTTP Method DELETE
+
+**Description**: Not allowed
+
+## Customer
+
+#### URI: /customers/:customerId
+
+Allows you to manage existing customers.
+
+**URL Structure**: http://om.ddev.site/api/rest/customers/:customerId
+**Version**: 1
+
+### HTTP Method GET
+
+**Description**: Allows you to retrieve information on an existing customer.
+**Notes:**: The list of attributes that will be returned for customers is configured in the Magento Admin Panel. The Customer user type has access only to his/her own information. Also, Admin can add additional non-system customer attributes by selecting **Customers** > **Attributes** > **Manage Customer Attributes**. If these attributes are set as visible on frontend, they will be returned in the response. Also, custom attributes will be returned in the response only after the customer information is updated in the Magento Admin Panel or the specified custom attribute is updated via API (see the PUT method below). Please note that managing customer attributes is available only in Magento Enterprise Edition.
+
+**Authentication**: Admin, Customer
+**Default Format**: XML
+**Parameters**: _No Parameters_
+
+!!! Example
+ ```
+ GET http://om.ddev.site/api/rest/customers/2
+ ```
+
+**Response Body**:
+
+
+
+2
+1
+test@example.com
+1
+2012-03-22 14:15:54
+1
+Default Store View
+john
+Doe
+2012-03-22 14:15:56
+
+
+**response example: json**
+
+get [http://om.ddev.site/api/rest/customers/141](http://om.ddev.site/api/rest/customers)
+
+**response body**:
+
+{
+"entity\_id": "2",
+"website\_id": "1",
+"email": "test@example.com",
+"group\_id": "1",
+"created\_at": "2012-03-22 14:15:54",
+"disable\_auto\_group\_change": "1",
+"created\_in": "English",
+"firstname": "john",
+"lastname": "Doe"
+}
+
+
+### HTTP Method POST
+
+**Description**: Not allowed.
+
+### HTTP Method PUT
+
+**Description**: Allows you to update an existing customer.
+**Notes**: The list of attributes that will be updated for customer is configured in the Magento Admin Panel. The Customer user type has access only to his/her own information.
+
+**Authentication**: Admin, Customer
+**Default Format**: XML
+**Parameters**: You must specify only those parameters which you want to update. Parameters that are not defined in the request body will preserve the previous values. The `website_id` and `created_in` attributes are not allowed for updating.
+
+
+!!! Example
+ ```
+ PUT http://om.ddev.site/api/rest/customers/2
+ ```
+
+#### Request Body
+
+```xml
+
+
+ Earl
+ Hickey
+ customerss@example.com
+ 1
+
+```
+
+### HTTP Method DELETE
+
+**Description**: Allows you to delete an existing customer.
+**Notes**: Admin only can delete a customer.
+
+**Authentication**: Admin
+**Default Format**: XML
+**Parameters**: _No Parameters_
+
+!!! Example
+ ```
+ DELETE https://om.ddev.site/api/rest/customers/2
+ ```
diff --git a/docs/content/api/rest/resources/products/product_categories.md b/docs/content/api/rest/resources/products/product_categories.md
new file mode 100644
index 00000000000..678075d0b49
--- /dev/null
+++ b/docs/content/api/rest/resources/products/product_categories.md
@@ -0,0 +1,80 @@
+# Product Categories
+
+## URI: /products/productid/categories
+
+Allows you to retrieve information about assigned categories, assign, and unassign a category from/to a product.
+
+**URL Structure**: https://om.ddev.site/api/rest/products/productid/categories
+**Version**: 1
+
+### HTTP Method: GET
+
+**Description**: Allows you to retrieve information about categories assigned to the specified product.
+
+**Authentication**: Admin, Customer
+**Default Format**: JSON
+**Parameters**: _No Parameters_
+
+!!! Example
+ ```
+ GET https://om.ddev.site/api/rest/products/8/categories
+ ```
+
+#### Response Body
+
+```
+{
+ category_id: 8
+}
+```
+
+### HTTP Method: POST
+
+**Description**: Allows you to assign a category to a specified product.
+
+**Authentication**: Admin
+**Default Format**: JSON
+**Parameters**:
+
+| Name | Description | Required | Type | Example Value |
+|--------------|-----------------|:---------|:-----|:--------------|
+| category_id | The category ID | required | int | 2 |
+
+
+!!! Example
+ ```
+ POST https://om.ddev.site/api/rest/products/8/categories
+ ```
+
+#### Request Body
+
+```json
+{
+ "category_id":"2"
+}
+```
+
+As a result, the category with ID equal to 2 will be assigned to the specified product.
+
+## URI: /products/productid/categories/categoryid
+
+### HTTP Method: DELETE
+
+**Description**: Allows you to unassign a category from a specified product.
+
+**Authentication**: Admin
+**Default Format**: JSON
+**Parameters**: _No Parameters_
+
+!!! Example
+ ```
+ DELETE https://om.ddev.site/api/rest/products/8/categories/2
+ ```
+
+## HTTP Status Codes
+
+| Status Code | Message | Description |
+|-------------|--------------------------------------------------------------------|---------------------------------------------------------------------------------------|
+| 400 | Product is already assigned to category | The message is returned when the required category is already assigned to the product |
+| 400 | Category not found | The specified category is not found |
+| 405 | Resource method not implemented yet | The specified method is not implemented yet |
diff --git a/docs/content/api/rest/response_formats.md b/docs/content/api/rest/response_formats.md
new file mode 100644
index 00000000000..de29bf9ebae
--- /dev/null
+++ b/docs/content/api/rest/response_formats.md
@@ -0,0 +1,112 @@
+# Response Formats
+
+If you make a Magento API call, you are guaranteed to receive some kind of a response. If you make a successful call, you will receive an HTTP response with a 200 OK status.
+
+You can view the response data from any Magento API call in one of the following two formats:
+
+* XML
+* JSON
+
+The format of returned data is defined in the request header. The format you choose depends on what you are familiar with most or tools available to you.
+
+## XML Format
+
+The XML response format is a simple XML block.
+To set the response format to XML, add the Accept request header with the `text/xml` value.
+
+A successful call will return the following response (example of retrieving information about stock items):
+
+```xml
+
+
+
+ 1
+ 1
+ 1
+ 99.0000
+
+
+
+ 2
+ 2
+ 1
+ 100.0000
+
+
+
+```
+
+If an error occurs, the call may return the following response:
+
+```xml
+
+
+
+
+
+ 404
+ Resource not found.
+
+
+
+
+```
+
+## JSON Format
+
+To set the response format to JSON, add the Accept request header with the `application/json` value.
+
+### Response Structure
+
+The JSON objects represent a direct mapping of the XML block from the XML response format.
+
+A simple XML error
+
+```xml
+
+
+
+ 404
+ Resource not found.
+
+
+
+```
+
+will be transformed to
+
+```json
+{"messages":{"error":[{"code":404,"message":"Resource not found."}]}}
+```
+
+### JSON Responses
+
+A successful API call to the Stock Items resource will return the following XML response:
+
+```xml
+
+
+
+ 1
+ 1
+ 1
+ 99.0000
+
+
+
+ 2
+ 2
+ 1
+ 100.0000
+
+
+
+```
+
+The JSON equivalent will be as follows:
+
+```json
+[{"item_id":"1","product_id":"1","stock_id":"1","qty":"99.0000","low_stock_date":null},{"item_id":"2","product_id":"2","stock_id":"1","qty":"100.0000","low_stock_date":null}]
+```
+
+The list of HTTP status codes that are returned in the API response is described in the [Common HTTP Status Codes](common_http_status_codes.md "Common HTTP Status Codes") part of the documentation. There, you can find the list of codes themselves together with their description.
\ No newline at end of file
diff --git a/docs/content/api/rest/testing_rest_resources.md b/docs/content/api/rest/testing_rest_resources.md
new file mode 100644
index 00000000000..7420b03ab63
--- /dev/null
+++ b/docs/content/api/rest/testing_rest_resources.md
@@ -0,0 +1,98 @@
+# Testing
+
+Three steps are required for utilizing REST API resources:
+
+* [Authenticate the user](http://www.magentocommerce.com/api/rest/authentication/oauth_authentication.html "OAuth Authentication") (receive the access token for further steps);
+* Configure the [permissions for operations](http://www.magentocommerce.com/api/rest/permission_settings/roles_configuration.html "REST Roles Configuration") and [attributes](http://www.magentocommerce.com/api/rest/permission_settings/attributes_configuration.html "REST Attributes Configuration") for the type of the user;
+* Make an API call.
+
+The following headers are required for the call:
+
+* Authorization
+* Version
+* Accept
+* Content-type
+
+The following parameters must be provided in the Authorization header for the call:
+
+* oauth\_signature\_method
+* oauth\_version
+* oauth\_nonce
+* oauth\_timestamp
+* oauth\_consumer\_key
+* oauth\_token
+* oauth\_signature
+
+#### Testing REST resources with the [REST Client](https://addons.mozilla.org/en-US/firefox/addon/restclient/) plugin for the Mozilla Firefox browser.
+
+1. Open the REST Client.
+2. From the Authentication drop-down, select **OAuth**.
+ ![](assets/images/rest_test001.png)
+3. In the OAuth window, on the Signature for the request tab, fill in the following fields:
+ * **Consumer key**: Enter the **Key** value provided when you created the consumer in Magento Admin Panel.
+ * **Consumer secret**: Enter the **Secret** value provided when you created the consumer in Magento Admin Panel.
+ * **Access token**: Enter the oauth\_token value received when you authenticated the application.
+ * **Access token secret**: Enter the oauth\_token\_secret value received when you authenticated the application.
+4. On the OAuth setting tab, define the following options: ![](assets/images/rest_test_oauth_tab.png)
+ * **Signature Methods**: From the drop-down list, select which method will be used for signatures (HMAC-SHA1 or PLAINTEXT).
+ * **oAuth Version**: From the drop-down list, select the **1.0** option (REST API supports OAuth 1.0a).
+ * Leave the **Realm**, **oAuth Nonce**, and **oAuth Timestamp** values set by default.
+5. Click **Save** and wait for the confirmation dialog to close.
+
+6. Return to the Signature for the request tab and select **Insert > Insert as header**. ![](assets/images/rest_test_insert.png)
+
+ An authorization header is created on the main page of REST Client.
+
+ ![](assets/images/rest_test_authheader.png)
+ **NOTE**: Click the header with authorization data and click **Auto refresh** in the opened pop-up in order to generate new values for oauth\_nonce, oauth\_timestamp, and oauth\_signature at each request.
+ ![](assets/images/rest_test003.png)11. From the **Headers** drop-down, select **Custom Header**.
+ ![](assets/images/rest_test004.png)
+12. In the **Request Header** window, enter "Content-Type" in the **Name** field and "text/xml" in the **Value** field (if you want to use the XML data format). To use the JSON request data format, enter application/json instead of the text/xml value.
+13. Click **Okay**.
+ ![](assets/images/rest_test005.png)
+
+**Example: Retrieving the List of Products**
+
+1. From the **Method** drop-down list, select the **GET** option.
+2. In the **URL** field, enter the following URL: https://om.ddev.site/api/rest/products. You can limit the number of products returned in the response. To set the limit to 4, enter the following URL: https://om.ddev.site/api/rest/products?limit=4
+3. Click **Send**. Information about all products will be displayed in the response body. Example is as follows:
+ ![](assets/images/rest_test006.png)
+
+#### Testing REST resources with the [Advanced REST Client](https://chrome.google.com/webstore/detail/hgmloofddffdnphfgcellkdfbfbjeloo) for Google Chrome browser.
+
+1. Open the Advanced REST Client Application.
+ ![](assets/images/rest_test007.png)
+2. In the **Headers** box, select the **Form** tab.
+3. In the first field, start typing _authorization_. An **Authorization** popup appears. Click it.
+ ![](assets/images/rest_test008.png)
+4. When you click the fields next to the Authorization header, the **Construct** link appears. Click it to configure OAuth authentication.
+5. The Authorization window opens. Select the OAuth tab.
+ ![](assets/images/rest_test009.png)
+6. In the **Type** group of options, select the **Signed Request** option.
+7. In the **signature method** group of options, select which method will be used for signatures (HMAC-SHA1 or PLAINTEXT).
+8. Fill in the following data:
+ ![](assets/images/rest_test010.png)
+ * **Consumer key**: Enter the **Key** value provided when you created the consumer in Magento Admin Panel.
+ * **Consumer secret**: Enter the **Secret** value provided when you created the consumer in Magento Admin Panel.
+ * **Access Token**: Enter the oauth\_token value received when you authenticated the application.
+ * **Access Token Secret**: Enter the oauth\_token\_secret value received when you authenticated the application.
+9. Click **OK**.
+ **NOTE**: Advanced REST Client does not save the **Consumer secret** and **Access Token Secret** values. You need to enter these values each time you make a request.
+10. In the **URL** field, enter the URL to which the API call will be performed and select the required HTTP method.
+11. In the **Headers** table, click **Add row** and add the Accept - application/json or Accept - text/xml header depending on which format you prefer for the returned data.
+12. Click **Send Request**.
+
+**Example: Retrieving the list of customers**
+
+1. In the **Method** group of options, select the **GET** option.
+2. In the URL field, enter the following URL: https://om.ddev.site/api/rest/customers.
+3. Click **Send request**. Information about all customers will be displayed in the response body. Note that only Admin type of the user can retrieve the list of customers. Example is as follows:
+ ![](assets/images/rest_test011.png)
+
+**Example: Creating a customer address**
+
+1. In the **Method** group of options, select the **POST** option.
+2. In the URL field, enter the following URL: https://om.ddev.site/api/rest/customers/:id/addresses where the ":id" value is the customer ID in the system.
+3. In the **Body** table, on the **Raw input** tab, enter the data required for customer address creation.
+4. Click **Send request**. If the address is created, the 200 OK HTTP status code will be returned. Example is as follows:
+ ![](assets/images/rest_test012.png)
\ No newline at end of file
diff --git a/docs/content/blog/index.md b/docs/content/blog/index.md
new file mode 100644
index 00000000000..e8beac3c46f
--- /dev/null
+++ b/docs/content/blog/index.md
@@ -0,0 +1,6 @@
+---
+hide:
+ - toc
+---
+
+# Blog
diff --git a/docs/content/developers/changelog/index.md b/docs/content/developers/changelog/index.md
new file mode 100644
index 00000000000..403caefbd7a
--- /dev/null
+++ b/docs/content/developers/changelog/index.md
@@ -0,0 +1,109 @@
+# Important changes
+
+Most important changes will be listed here, all other changes since `19.4.0` can be found in
+[release](https://github.com/OpenMage/magento-lts/releases) notes.
+
+## Between Magento 1.9.4.5 and OpenMage 19.x
+
+- bug fixes and PHP 7.x, 8.0, 8.1 and 8.2 compatibility
+- added config cache for system.xml ([#1916](https://github.com/OpenMage/magento-lts/pull/1916))
+- added `frontend_type` `color` ([#2945](https://github.com/OpenMage/magento-lts/pull/2945))
+- search for `null` ("NULL") in backend grids ([#1203](https://github.com/OpenMage/magento-lts/pull/1203))
+- removed `lib/flex` containing unused ActionScript "file uploader" files ([#2271](https://github.com/OpenMage/magento-lts/pull/2271))
+- `Mage_Catalog_Model_Resource_Abstract::getAttributeRawValue()` now returns `'0'` instead of `false` if the value stored in the database is `0` ([#572](https://github.com/OpenMage/magento-lts/pull/572))
+- PHP extension `intl` is required
+- Deprecation errors are not suppressed anymore
+- removed modules:
+ - `Mage_Backup` ([#2811](https://github.com/OpenMage/magento-lts/pull/2811))
+ - `Mage_Compiler`
+ - `Mage_GoogleBase`
+ - `Mage_PageCache` ([#2258](https://github.com/OpenMage/magento-lts/pull/2258))
+ - `Mage_Poll` ([#3098](https://github.com/OpenMage/magento-lts/pull/3098))
+ - `Mage_Xmlconnect`
+ - `Phoenix_Moneybookers`
+
+_If you rely on those modules you can reinstall them with composer:_
+
+- Module `Mage_Backup`
+
+ ```bash
+ composer require openmage/module-mage-backup
+ ```
+
+- Module `Mage_PageCache`
+
+ ```bash
+ composer require openmage/module-mage-pagecache
+ ```
+
+- Module `Mage_Poll`
+
+ ```bash
+ composer require openmage/module-mage-poll
+ ```
+
+- Legacy frontend themes
+
+ ```bash
+ composer require openmage/legacy-frontend-themes
+ ```
+
+## Between OpenMage 19.x and 20.x
+
+Do not use 20.x.x if you need IE support.
+
+- removed IE conditional comments, IE styles, IE scripts and IE eot files ([#1073](https://github.com/OpenMage/magento-lts/pull/1073))
+- removed frontend default themes (default, modern, iphone, german, french, blank, blue) ([#1600](https://github.com/OpenMage/magento-lts/pull/1600))
+- fixed incorrect datetime in customer block (`$useTimezone` parameter) ([#1525](https://github.com/OpenMage/magento-lts/pull/1525))
+- added redis as a valid option for `global/session_save` ([#1513](https://github.com/OpenMage/magento-lts/pull/1513))
+- reduce needless saves by avoiding setting `_hasDataChanges` flag ([#2066](https://github.com/OpenMage/magento-lts/pull/2066))
+- removed support for `global/sales/old_fields_map` defined in XML ([#921](https://github.com/OpenMage/magento-lts/pull/921))
+- enabled website level config cache ([#2355](https://github.com/OpenMage/magento-lts/pull/2355))
+- made overrides of `Mage_Core_Model_Resource_Db_Abstract::delete` respect parent api ([#1257](https://github.com/OpenMage/magento-lts/pull/1257))
+- rewrote `Mage_Eav_Model_Config` as cache for all eav entity and attribute reads ([#2993](https://github.com/OpenMage/magento-lts/pull/2993))
+
+For full list of changes, you can [compare tags](https://github.com/OpenMage/magento-lts/compare/1.9.4.x...20.0).
+
+## Since OpenMage 19.5.0 / 20.1.0
+
+PHP 7.4 is now the minimum required version.
+
+Most of the 3rd party libraries/modules that were bundled in our repository were removed and migrated to composer dependencies.
+This allows for better maintenance and upgradability.
+
+Specifically:
+
+- `phpseclib`
+- `mcrypt_compat`
+- `Cm_RedisSession`
+- `Cm_Cache_Backend_Redis`
+- `Pelago_Emogrifier` ([#2411](https://github.com/OpenMage/magento-lts/pull/2411))
+- Zend Framework 1 ([#2827](https://github.com/OpenMage/magento-lts/pull/2827))
+
+If your project uses OpenMage through composer then all dependencies will be managed automatically.
+If you just extracted the release zip/tarball in your project's main folder then be sure to:
+- remove the old copy of aforementioned libraries from your project, you can do that with this command:
+ ```bash
+ rm -rf app/code/core/Zend lib/Cm lib/Credis lib/mcryptcompat lib/Pelago lib/phpseclib lib/Zend
+ ```
+
+- download the new release zip file that is named `openmage-VERSIONNUMBER.zip`, this one is built to contain the `vendor`
+ folder generated by composer, with all the dependencies in it
+- extract the zip file in your project's repository as you always did
+
+We also decided to remove our Zend_DB patches (that were stored in `app/code/core/Zend`) because they were very old and
+not compatible with the new implementations made by ZF1-Future, which is much more advanced and feature rich.
+This may generate a problem with `Zend_Db_Select` statements that do not use `Zend_Db_Expr` to quote expressions.
+If you see SQL errors after upgrading please remember to check for this specific issue in your code.
+
+UPS shut down their old CGI APIs, so we removed the support for it from the `Mage_Usa` module.
+
+## Between OpenMage 20.x and 21.x (unreleased, available on branch `next`)
+
+- PHP 8.1 as minimum required version
+- Removed `scriptaculous/dragdrop.js` ([#3215](https://github.com/OpenMage/magento-lts/pull/3215))
+- RWD theme: updated jQuery to 3.7.0 ([#3204](https://github.com/OpenMage/magento-lts/pull/3204))
+- Unified CSRF configuration ([#3147](https://github.com/OpenMage/magento-lts/pull/3147)) and added form key validation to Contacts form ([#3146](https://github.com/OpenMage/magento-lts/pull/3146))
+- Removed double span element from HTML buttons ([#3123](https://github.com/OpenMage/magento-lts/pull/3123))
+- Removed all deprecated `Mysql4_` classes ([#2730](https://github.com/OpenMage/magento-lts/pull/2730)). If there are any old modules/extensions in your installation that use such classes, you must run `shell/rename-mysql4-class-to-resource.php` in the command line in order to convert them. Backup all files before running the script
+- Removed "admin routing compatibility mode" ([#1551](https://github.com/OpenMage/magento-lts/pull/1551))
diff --git a/docs/content/developers/changelog/new-config.md b/docs/content/developers/changelog/new-config.md
new file mode 100644
index 00000000000..88f57a919ae
--- /dev/null
+++ b/docs/content/developers/changelog/new-config.md
@@ -0,0 +1,33 @@
+---
+tags:
+- Configuration
+---
+
+# New Config Options
+
+## `admin/design/use_legacy_theme`
+Add new default OpenMage admin theme and legacy Admin Theme config option. ([#1008](https://github.com/OpenMage/magento-lts/pull/1008))
+
+## `admin/global_search/enable`
+Possibility to disable global search in backend. ([#1532](https://github.com/OpenMage/magento-lts/pull/1532))
+
+## `catalog/product_image/progressive_threshold`
+Added progressive to image resize. ([#197](https://github.com/OpenMage/magento-lts/pull/197))
+
+## `catalog/search/search_separator`
+Make fulltext search separator (`OR`/`AND`) configurable from backend. ([#1852](https://github.com/OpenMage/magento-lts/pull/1852))
+
+## `dev/log/max_level`
+Set log level from config. ([#1727](https://github.com/OpenMage/magento-lts/pull/1727))
+
+## `newsletter/security/enable_form_key`
+\[Theme BC] Add formkey validation to Newsletter subscribe action. ([#1866](https://github.com/OpenMage/magento-lts/pull/1866))
+
+## `sitemap/category/lastmod`
+Made sitemap more flexible. ([#1854](https://github.com/OpenMage/magento-lts/pull/1854))
+
+## `sitemap/page/lastmod`
+Made sitemap more flexible. ([#1854](https://github.com/OpenMage/magento-lts/pull/1854))
+
+## `sitemap/product/lastmod`
+Made sitemap more flexible. ([#1854](https://github.com/OpenMage/magento-lts/pull/1854))
diff --git a/docs/content/developers/changelog/new-events.md b/docs/content/developers/changelog/new-events.md
new file mode 100644
index 00000000000..9e28a74046a
--- /dev/null
+++ b/docs/content/developers/changelog/new-events.md
@@ -0,0 +1,26 @@
+---
+tags:
+- Events
+---
+
+# New Events
+
+## `adminhtml_block_widget_form_init_form_values_after`
+New event after data set on a form. ([#1485](https://github.com/OpenMage/magento-lts/pull/1485))
+
+## `adminhtml_block_widget_tabs_html_before`
+New event for adding custom tab. ([#1358](https://github.com/OpenMage/magento-lts/pull/1358))
+
+## `adminhtml_sales_order_create_save_before`
+New event when editing an order. ([#1168](https://github.com/OpenMage/magento-lts/pull/1168))
+
+## `core_app_run_after`
+Ended the request (and close the session) before `core_app_run_after` event. ([#1592](https://github.com/OpenMage/magento-lts/pull/1592))
+
+## `sitemap_cms_pages_generating_before`
+Made sitemap more flexible. ([#1854](https://github.com/OpenMage/magento-lts/pull/1854))
+
+## `sitemap_urlset_generating_before`
+Made sitemap more flexible. ([#1854](https://github.com/OpenMage/magento-lts/pull/1854))
+
+[Full list of events](../events/list.md)
diff --git a/docs/content/developers/changelog/soap-wsdl.md b/docs/content/developers/changelog/soap-wsdl.md
new file mode 100644
index 00000000000..d411876a3a2
--- /dev/null
+++ b/docs/content/developers/changelog/soap-wsdl.md
@@ -0,0 +1,24 @@
+# SOAP/WSDL
+
+Since `19.4.17`/`20.0.15` we changed the `targetNamespace` of all the WSDL files (used in the API modules), from `Magento` to `OpenMage`.
+If your custom modules extends OpenMage's APIs with a custom WSDL file and there are some hardcoded `targetNamespace="urn:Magento"` strings, your APIs may stop working.
+
+Please replace all occurrences of
+
+```
+targetNamespace="urn:Magento"
+```
+with
+```
+targetNamespace="urn:OpenMage"
+```
+or alternatively
+```
+targetNamespace="urn:{{var wsdl.name}}"
+```
+to avoid any problem.
+
+To find which files need the modification you can run this command from the root directory of your project.
+```bash
+grep -rn 'urn:Magento' --include \*.xml
+```
diff --git a/docs/DDEV.md b/docs/content/developers/ddev.md
similarity index 87%
rename from docs/DDEV.md
rename to docs/content/developers/ddev.md
index 6f7d333fe0a..9f4a7b6caa5 100644
--- a/docs/DDEV.md
+++ b/docs/content/developers/ddev.md
@@ -1,26 +1,40 @@
-# OpenMage Environment Based on DDEV (https://ddev.com/)
+# DDEV
+
+See: https://ddev.com
## Using n98-magerun
-You can use the swiss army knife for Magento developers, sysadmins and devops. The tool provides a huge set of well tested command line commands which save hours of work time.
+You can use the swiss army knife for Magento developers, sysadmins and devops. The tool provides a huge set of well tested command line commands which save hours of work time.
-Run any n98-magerun command in the terminal window by adding **ddev** in front of it. For example `ddev magerun sys:info` prints infos about the current OpenMage system.
+Run any n98-magerun command in the terminal window by adding **ddev** in front of it. For example `ddev magerun sys:info` prints infos about the current OpenMage system.
For more information about the available commands please visit https://n98-magerun.readthedocs.io/en/latest/index.html.
## Using phpMyAdmin
-Run in the terminal window `ddev get ddev/ddev-phpmyadmin` to install the phpMyAdmin add-on then restart DDEV.
+Run in the terminal window to install the phpMyAdmin add-on then restart DDEV.
+
+```bash
+ddev get ddev/ddev-phpmyadmin
+```
+
+To launch phpMyAdmin in the browser run in the terminal window.
-To launch phpMyAdmin in the browser run in the terminal window `ddev phpmyadmin`.
+```bash
+ddev phpmyadmin
+```
## Using Mailpit
-To launch Mailpit in the browser run in the terminal window `ddev mailpit`.
+To launch Mailpit in the browser run in the terminal window.
+
+```bash
+ddev mailpit
+```
## Setting up cronjobs
-Run in the terminal window `ddev get ddev/ddev-cron` to install the cron add-on then restart DDEV.
+Run in the terminal window `ddev get ddev/ddev-cron` to install the cron add-on then restart DDEV.
By default the OpenMage cronjob runs every minute. If you want to change it edit the file `.ddev/web-build/openmage.cron`.
@@ -43,11 +57,13 @@ web_environment: [
]
```
-## Using Xdebug with PhpStorm
+## Using with PhpStorm
+
+### Xdebug
Every DDEV project is automatically configured with Xdebug so that popular IDEs can do step debugging of PHP code. Xdebug is a server-side tool and it is installed automatically in the container so you do not have to install or configure it on your workstation. Xdebug is disabled by default for performance reasons, so you will need to enable it and configure your IDE before can start debugging. For more information, please visit https://ddev.readthedocs.io/en/latest/users/debugging-profiling/step-debugging/.
-Run the following commands in the terminal window to enable or disable xDebug
+Run the following commands in the terminal window to enable or disable xDebug
`ddev xdebug on`
@@ -61,7 +77,7 @@ xdebug.mode=debug
xdebug.start_with_request=trigger
```
-## Accessing the database in PhpStorm
+### Accessing the database
Please note that DDEV changes the port numbers on every restart. If you want to access the database in PHPStorm you must set up a fixed port. Edit the file `.ddev/config.yaml` and insert the following line
@@ -69,7 +85,9 @@ Please note that DDEV changes the port numbers on every restart. If you want to
host_db_port: 6000
```
-## Using Browsersync (https://github.com/ddev/ddev-browsersync)
+## Using Browsersync
+
+See: https://github.com/ddev/ddev-browsersync
Browsersync features live reloads, click mirroring, network throttling. Run the following commands in the terminal window
@@ -79,7 +97,9 @@ ddev restart
ddev browsersync
```
-## Installing Compass (http://compass-style.org/)
+## Installing Compass
+
+See: https://compass-style.org
Compass is required for editing SCSS files.
@@ -95,7 +115,9 @@ RUN gem install compass
For more information, please visit https://stackoverflow.com/questions/61787926/how-can-i-get-sass-compass-into-the-ddev-web-container.
-## Creating a DDEV command
+## Commands
+
+### Creating a command
Create a new file named `phpstan` in the `.ddev/commands/web` directory and insert the following lines
@@ -111,7 +133,7 @@ php vendor/bin/phpstan analyze -c .github/phpstan.neon "$@"
Run in the terminal window `ddev phpstan`.
-## OpenMage DDEV commands
+### OpenMage commands
**1. If you want to install the `Magento Sample Data` run in the terminal window `ddev openmage-install` and follow the steps.**
@@ -126,7 +148,9 @@ You can use flags, for example `ddev openmage-install -d -s -k -q`
**2. By default, running the `ddev config` command does not create an administrator account. If you want to create or update one run in the terminal window `ddev openmage-admin` and follow the steps.**
-## Useful DDEV commands (https://ddev.readthedocs.io/en/latest/users/usage/commands)
+### Useful commands
+
+See: https://ddev.readthedocs.io/en/latest/users/usage/commands
Run in the terminal window any of the following commands for different tasks.
@@ -194,9 +218,11 @@ Run in the terminal window any of the following commands for different tasks.
`ddev clean --dry-run -all`, `ddev clean`
-## Using mkcert for secured connections (https://github.com/FiloSottile/mkcert)
+## Using mkcert for secured connections
+
+See: https://github.com/FiloSottile/mkcert
-mkcert is a simple tool for making locally-trusted development certificates. If you use (Windows 10/11 + WSL + Docker), first install the mkcert package in Windows then copy the certificates files associated to the current user into the Linux distribution.
+mkcert is a simple tool for making locally-trusted development certificates. If you use (Windows 10/11 + WSL + Docker), first install the mkcert package in Windows then copy the certificates files associated to the current user into the Linux distribution.
For example, copy `rootCA.pem` and `rootCA-key.pem`
diff --git a/docs/ERROR_PAGE.md b/docs/content/developers/error-pages.md
similarity index 52%
rename from docs/ERROR_PAGE.md
rename to docs/content/developers/error-pages.md
index 37f6edf2fd2..e74656baa64 100644
--- a/docs/ERROR_PAGE.md
+++ b/docs/content/developers/error-pages.md
@@ -1,6 +1,8 @@
-## For Multistore setups
+# Error pages
-If you want to setup multiple stores with a different layout and localized content for each store, this is done by passing the `$_GET['skin']` parameter to the intended processor In the example below, we are using a `503` type error template file, which requires localized content.
+## Introduction
+
+If you want to set up multiple stores with a different layout and localized content for each store, this is done by passing the `$_GET['skin']` parameter to the intended processor In the example below, we are using a `503` type error template file, which requires localized content.
The constructor of the `Error_Processor` class accepts a `skin` GET parameter to change layout:
@@ -12,23 +14,35 @@ if (isset($_GET['skin'])) {
This can also be added a rewrite rule in the `.htaccess` file that will append a `skin` parameter to the URL.
-### $_GET['skin'] parameter
+## The `$_GET['skin']` parameter
To use the `skin` parameter:
1. Check if the `maintenance.flag` exists
-1. Note the host address, that refers to the `HTTP_HOST`, or any other variable such as ENV variables
-1. Check if the `skin` parameter exists
-1. Set the parameter by using the rewrite rules below.
+2. Note the host address, that refers to the `HTTP_HOST`, or any other variable such as ENV variables
+3. Check if the `skin` parameter exists
+4. Set the parameter by using the rewrite rules below.
+
+## Rewrite rule
This is what it looks like as a rewrite rule:
-```
-RewriteCond `%{DOCUMENT_ROOT}/maintenance.flag -f
-RewriteCond `%{HTTP_HOST} ^sub.example.com$`
-RewriteCond `%{QUERY_STRING} !(^|&)skin=sub(&|$)` [NC]
-RewriteRule `^ %{REQUEST_URI}?skin=sub` [L]
-```
+=== "Apache"
+
+ ```
+ RewriteCond `%{DOCUMENT_ROOT}/maintenance.flag -f
+ RewriteCond `%{HTTP_HOST} ^sub.example.com$`
+ RewriteCond `%{QUERY_STRING} !(^|&)skin=sub(&|$)` [NC]
+ RewriteRule `^ %{REQUEST_URI}?skin=sub` [L]
+ ```
+
+=== "Nginx"
+
+ !!! question
+
+ The setting should be added for multistore setups.
+
+## Copy files
Copy the following files:
@@ -38,6 +52,3 @@ Copy the following files:
Edit these files to provide localized content in the `503.phtml` file and custom styling in the `styles.css` file.
Ensure your paths point to your `errors` directory. The directory name must match the URL parameter indicated in the RewriteRule. In the example above, the `sub` directory is used, which is specified as a parameter in the RewriteRule (`skin=sub`)
-
-### ToDo: nginx
-The nginx setting should be added for multistore setups.
\ No newline at end of file
diff --git a/docs/content/developers/events/list.md b/docs/content/developers/events/list.md
new file mode 100644
index 00000000000..4640779b8db
--- /dev/null
+++ b/docs/content/developers/events/list.md
@@ -0,0 +1,348 @@
+---
+tags:
+- Events
+---
+
+# Events list
+
+| Event name | With Magento or since OpenMage |
+|------------------------------------------------------------------|--------------------------------|
+| `[eventPrefix]`_after | 1.9.4.5 |
+| `[eventPrefix]`_clear | 1.9.4.5 |
+| `[eventPrefix]`_delete_after | 1.9.4.5 |
+| `[eventPrefix]`_delete_after_done | 1.9.4.5 |
+| `[eventPrefix]`_delete_before | 1.9.4.5 |
+| `[eventPrefix]`_delete_commit_after | 1.9.4.5 |
+| `[eventPrefix]`_finish_before | 1.9.4.5 |
+| `[eventPrefix]`_import_data_before | 1.9.4.5 |
+| `[eventPrefix]`_init_virtual_grid_columns | 1.9.4.5 |
+| `[eventPrefix]`_load_gallery_before | 1.9.4.5 |
+| `[eventPrefix]`_merge_after | 1.9.4.5 |
+| `[eventPrefix]`_merge_before | 1.9.4.5 |
+| `[eventPrefix]`_move_after | 1.9.4.5 |
+| `[eventPrefix]`_move_before | 1.9.4.5 |
+| `[eventPrefix]`_save_after | 1.9.4.5 |
+| `[eventPrefix]`_save_attribute_after | 1.9.4.5 |
+| `[eventPrefix]`_save_attribute_before | 1.9.4.5 |
+| `[eventPrefix]`_save_before | 1.9.4.5 |
+| `[eventPrefix]`_save_commit_after | 1.9.4.5 |
+| `[eventPrefix]`_set_sales_order | 1.9.4.5 |
+| `[eventPrefix]`_update_grid_records | 1.9.4.5 |
+| add_synchronize_message | 1.9.4.5 |
+| admin_permissions_role_prepare_save | 1.9.4.5 |
+| admin_session_user_login_failed | 1.9.4.5 |
+| admin_session_user_login_success | 1.9.4.5 |
+| admin_system_config_changed_section_[section] | 1.9.4.5 |
+| admin_system_config_changed_section_currency | 1.9.4.5 |
+| admin_system_config_changed_section_currency_before_reinit | 1.9.4.5 |
+| admin_system_config_section_save_after | 1.9.4.5 |
+| admin_user_authenticate_after | 1.9.4.5 |
+| admin_user_authenticate_before | 1.9.4.5 |
+| admin_user_validate | 1.9.4.5 |
+| adminhtml_block_eav_attribute_edit_form_init | 1.9.4.5 |
+| adminhtml_block_promo_widget_chooser_prepare_collection | 1.9.4.5 |
+| adminhtml_block_salesrule_actions_prepareform | 1.9.4.5 |
+| adminhtml_block_system_config_init_tab_sections_before | 1.9.4.5 |
+| adminhtml_block_widget_form_init_form_values_after | 19.4.12 / 20.0.8 |
+| adminhtml_block_widget_tabs_html_before | 19.4.12 / 20.0.8 |
+| adminhtml_cache_flush_all | 1.9.4.5 |
+| adminhtml_cache_flush_system | 1.9.4.5 |
+| adminhtml_cache_refresh_type | 1.9.4.5 |
+| adminhtml_catalog_category_edit_prepare_form | 1.9.4.5 |
+| adminhtml_catalog_category_tabs | 1.9.4.5 |
+| adminhtml_catalog_category_tree_can_add_root_category | 1.9.4.5 |
+| adminhtml_catalog_category_tree_can_add_sub_category | 1.9.4.5 |
+| adminhtml_catalog_category_tree_is_moveable | 1.9.4.5 |
+| adminhtml_catalog_product_attribute_edit_prepare_form | 1.9.4.5 |
+| adminhtml_catalog_product_attribute_set_main_html_before | 1.9.4.5 |
+| adminhtml_catalog_product_attribute_set_toolbar_main_html_before | 1.9.4.5 |
+| adminhtml_catalog_product_edit_tab_attributes_create_html_before | 1.9.4.5 |
+| adminhtml_catalog_product_form_prepare_excluded_field_list | 1.9.4.5 |
+| adminhtml_catalog_product_grid_prepare_massaction | 1.9.4.5 |
+| adminhtml_cms_page_edit_tab_content_prepare_form | 1.9.4.5 |
+| adminhtml_cms_page_edit_tab_design_prepare_form | 1.9.4.5 |
+| adminhtml_cms_page_edit_tab_main_prepare_form | 1.9.4.5 |
+| adminhtml_cms_page_edit_tab_meta_prepare_form | 1.9.4.5 |
+| adminhtml_cms_page_grid_renderer_action_before_render | 1.9.4.5 |
+| adminhtml_controller_action_predispatch_start | 1.9.4.5 |
+| adminhtml_controller_catalogrule_prepare_save | 1.9.4.5 |
+| adminhtml_controller_salesrule_prepare_save | 1.9.4.5 |
+| adminhtml_customer_orders_add_action_renderer | 1.9.4.5 |
+| adminhtml_customer_prepare_save | 1.9.4.5 |
+| adminhtml_customer_save_after | 1.9.4.5 |
+| adminhtml_init_system_config | 1.9.4.5 |
+| adminhtml_promo_catalog_edit_tab_main_prepare_form | 1.9.4.5 |
+| adminhtml_promo_quote_edit_tab_coupons_form_prepare_form | 1.9.4.5 |
+| adminhtml_promo_quote_edit_tab_main_prepare_form | 1.9.4.5 |
+| adminhtml_sales_order_create_process_data | 1.9.4.5 |
+| adminhtml_sales_order_create_process_data_before | 1.9.4.5 |
+| adminhtml_sales_order_create_save_before | 19.4.10 / 20.0.6 |
+| adminhtml_sales_order_creditmemo_register_before | 1.9.4.5 |
+| adminhtml_store_edit_form_prepare_form | 1.9.4.5 |
+| adminhtml_system_config_advanced_disableoutput_render_before | 1.9.4.5 |
+| adminhtml_widget_container_html_before | 1.9.4.5 |
+| adminhtml_widget_grid_filter_collection | 1.9.4.5 |
+| after_reindex_process_[getIndexerCode] | 1.9.4.5 |
+| ajax_cart_remove_item_success | 1.9.4.5 |
+| api_server_adapter_jsonrpc_run_after | 20.1.1 |
+| api_user_authenticated | 1.9.4.5 |
+| api_user_html_before | 1.9.4.5 |
+| application_clean_cache | 1.9.4.5 |
+| bundle_product_view_config | 1.9.4.5 |
+| catalog_block_product_list_collection | 1.9.4.5 |
+| catalog_block_product_status_display | 1.9.4.5 |
+| catalog_category_change_products | 1.9.4.5 |
+| catalog_category_flat_loadnodes_before | 1.9.4.5 |
+| catalog_category_prepare_save | 1.9.4.5 |
+| catalog_controller_category_delete | 1.9.4.5 |
+| catalog_controller_category_init_after | 1.9.4.5 |
+| catalog_controller_category_init_before | 1.9.4.5 |
+| catalog_controller_product_delete | 1.9.4.5 |
+| catalog_controller_product_init | 1.9.4.5 |
+| catalog_controller_product_init_after | 1.9.4.5 |
+| catalog_controller_product_init_before | 1.9.4.5 |
+| catalog_controller_product_mass_status | 1.9.4.5 |
+| catalog_controller_product_view | 1.9.4.5 |
+| catalog_helper_output_construct | 1.9.4.5 |
+| catalog_model_product_duplicate | 1.9.4.5 |
+| catalog_product_attribute_update_after | 1.9.4.5 |
+| catalog_product_attribute_update_before | 1.9.4.5 |
+| catalog_product_collection_apply_limitations_after | 1.9.4.5 |
+| catalog_product_collection_apply_limitations_before | 1.9.4.5 |
+| catalog_product_collection_before_add_count_to_categories | 1.9.4.5 |
+| catalog_product_collection_load_after | 1.9.4.5 |
+| catalog_product_collection_load_before | 1.9.4.5 |
+| catalog_product_compare_add_product | 1.9.4.5 |
+| catalog_product_compare_item_collection_clear | 1.9.4.5 |
+| catalog_product_compare_remove_product | 1.9.4.5 |
+| catalog_product_edit_action | 1.9.4.5 |
+| catalog_product_edit_form_render_recurring | 1.9.4.5 |
+| catalog_product_flat_prepare_columns | 1.9.4.5 |
+| catalog_product_flat_prepare_indexes | 1.9.4.5 |
+| catalog_product_flat_rebuild | 1.9.4.5 |
+| catalog_product_flat_update_product | 1.9.4.5 |
+| catalog_product_gallery_prepare_layout | 1.9.4.5 |
+| catalog_product_gallery_upload_image_after | 1.9.4.5 |
+| catalog_product_import_finish_before | 1.9.4.5 |
+| catalog_product_is_salable_after | 1.9.4.5 |
+| catalog_product_is_salable_before | 1.9.4.5 |
+| catalog_product_media_add_image | 1.9.4.5 |
+| catalog_product_media_save_before | 1.9.4.5 |
+| catalog_product_new_action | 1.9.4.5 |
+| catalog_product_status_update | 1.9.4.5 |
+| catalog_product_stock_item_mass_change | 1.9.4.5 |
+| catalog_product_to_website_change | 1.9.4.5 |
+| catalog_product_type_grouped_price | 1.9.4.5 |
+| catalog_product_type_prepare_[processMode]_options | 1.9.4.5 |
+| catalog_product_upsell | 1.9.4.5 |
+| catalog_product_website_update | 1.9.4.5 |
+| catalog_product_website_update_before | 1.9.4.5 |
+| catalogindex_get_minimal_price | 1.9.4.5 |
+| catalogindex_plain_reindex_after | 1.9.4.5 |
+| catalogsearch_index_process_complete | 1.9.4.5 |
+| catalogsearch_index_process_start | 1.9.4.5 |
+| catalogsearch_reset_search_result | 1.9.4.5 |
+| catalogsearch_searchable_attributes_load_after | 1.9.4.5 |
+| category_move | 1.9.4.5 |
+| category_prepare_ajax_response | 1.9.4.5 |
+| checkout_allow_guest | 1.9.4.5 |
+| checkout_block_cart_sidebar_aftertohtml | 1.9.4.5 |
+| checkout_cart_add_product_complete | 1.9.4.5 |
+| checkout_cart_product_add_after | 1.9.4.5 |
+| checkout_cart_product_add_before | 19.4.4 / 20.0.0 |
+| checkout_cart_product_update_after | 1.9.4.5 |
+| checkout_cart_save_after | 1.9.4.5 |
+| checkout_cart_save_before | 1.9.4.5 |
+| checkout_cart_update_item_complete | 1.9.4.5 |
+| checkout_cart_update_items_after | 1.9.4.5 |
+| checkout_cart_update_items_before | 1.9.4.5 |
+| checkout_controller_multishipping_shipping_post | 1.9.4.5 |
+| checkout_multishipping_controller_success_action | 1.9.4.5 |
+| checkout_multishipping_refund_all | 1.9.4.5 |
+| checkout_onepage_controller_success_action | 1.9.4.5 |
+| checkout_quote_destroy | 1.9.4.5 |
+| checkout_quote_init | 1.9.4.5 |
+| checkout_type_multishipping_create_orders_single | 1.9.4.5 |
+| checkout_type_multishipping_set_shipping_items | 1.9.4.5 |
+| checkout_type_onepage_save_order | 1.9.4.5 |
+| clean_catalog_images_cache_after | 1.9.4.5 |
+| clean_configurable_swatches_cache_after | 1.9.4.5 |
+| clean_media_cache_after | 1.9.4.5 |
+| clear_expired_quotes_before | 1.9.4.5 |
+| cms_controller_router_match_before | 1.9.4.5 |
+| cms_generate_breadcrumbs | 1.9.4.5 |
+| cms_page_get_available_statuses | 1.9.4.5 |
+| cms_page_prepare_save | 1.9.4.5 |
+| cms_page_render | 1.9.4.5 |
+| cms_wysiwyg_config_prepare | 1.9.4.5 |
+| cms_wysiwyg_images_static_urls_allowed | 1.9.4.5 |
+| controller_action_layout_generate_blocks_after | 1.9.4.5 |
+| controller_action_layout_generate_blocks_before | 1.9.4.5 |
+| controller_action_layout_generate_xml_before | 1.9.4.5 |
+| controller_action_layout_load_before | 1.9.4.5 |
+| controller_action_layout_render_before | 1.9.4.5 |
+| controller_action_layout_render_before_[getFullActionName] | 1.9.4.5 |
+| controller_action_nocookies | 1.9.4.5 |
+| controller_action_noroute | 1.9.4.5 |
+| controller_action_postdispatch | 1.9.4.5 |
+| controller_action_postdispatch_[getFullActionName] | 1.9.4.5 |
+| controller_action_postdispatch_[getRouteName] | 1.9.4.5 |
+| controller_action_predispatch | 1.9.4.5 |
+| controller_action_predispatch_[getFullActionName] | 1.9.4.5 |
+| controller_action_predispatch_[getRouteName] | 1.9.4.5 |
+| controller_front_init_before | 1.9.4.5 |
+| controller_front_init_routers | 1.9.4.5 |
+| controller_front_send_response_after | 1.9.4.5 |
+| controller_front_send_response_before | 1.9.4.5 |
+| controller_response_redirect | 1.9.4.5 |
+| core_app_run_after | 20.1.0 |
+| core_block_abstract_prepare_layout_after | 1.9.4.5 |
+| core_block_abstract_prepare_layout_before | 1.9.4.5 |
+| core_block_abstract_to_html_after | 1.9.4.5 |
+| core_block_abstract_to_html_before | 1.9.4.5 |
+| core_clean_cache | 1.9.4.5 |
+| core_collection_abstract_load_after | 1.9.4.5 |
+| core_collection_abstract_load_before | 1.9.4.5 |
+| core_copy_fieldset_[fieldset]_[aspect] | 1.9.4.5 |
+| core_layout_block_create_after | 1.9.4.5 |
+| core_locale_set_locale | 1.9.4.5 |
+| core_session_abstract_add_message | 1.9.4.5 |
+| core_session_abstract_clear_messages | 1.9.4.5 |
+| create_order_session_quote_initialized | 1.9.4.5 |
+| currency_display_options_forming | 1.9.4.5 |
+| custom_quote_process | 1.9.4.5 |
+| customer_address_format | 1.9.4.5 |
+| customer_address_validation_after | 1.9.4.5 |
+| customer_controller_account_login_post_redirect_before | 20.4.0 |
+| customer_customer_authenticated | 1.9.4.5 |
+| customer_login | 1.9.4.5 |
+| customer_logout | 1.9.4.5 |
+| customer_register_success | 1.9.4.5 |
+| customer_registration_is_allowed | 1.9.4.5 |
+| customer_session_init | 1.9.4.5 |
+| eav_collection_abstract_load_before | 1.9.4.5 |
+| email_queue_send_before | 19.5.0 / 20.1.0 |
+| email_queue_send_after | 19.5.0 / 20.1.0 |
+| email_send_before | 19.5.0 / 20.1.0 |
+| email_send_after | 19.5.0 / 20.1.0 |
+| email_template_send_before | 19.5.0 / 20.1.0 |
+| email_template_send_after | 19.5.0 / 20.1.0 |
+| end_index_events_[getEventTypeName] | 1.9.4.5 |
+| end_process_event_[getEventTypeName] | 1.9.4.5 |
+| gift_options_prepare_items | 1.9.4.5 |
+| googleanalytics_ga4_send_data_before | 20.1.1 |
+| http_response_send_before | 1.9.4.5 |
+| index_process_change_status | 1.9.4.5 |
+| init_from_order_session_quote_initialized | 1.9.4.5 |
+| load_customer_quote_before | 1.9.4.5 |
+| log_log_clean_after | 1.9.4.5 |
+| log_log_clean_before | 1.9.4.5 |
+| log_visitor_collection_load_before | 1.9.4.5 |
+| mage_run_installed_exception | 20.7.0 |
+| mage_run_exception | 1.9.4.5 |
+| model_config_data_save_before | 1.9.4.5 |
+| model_delete_after | 1.9.4.5 |
+| model_delete_before | 1.9.4.5 |
+| model_delete_commit_after | 1.9.4.5 |
+| model_load_after | 1.9.4.5 |
+| model_load_before | 1.9.4.5 |
+| model_save_after | 1.9.4.5 |
+| model_save_before | 1.9.4.5 |
+| model_save_commit_after | 1.9.4.5 |
+| newsletter_send_before | 19.5.0 / 20.1.0 |
+| newsletter_send_after | 19.5.0 / 20.1.0 |
+| on_view_report | 1.9.4.5 |
+| order_cancel_after | 1.9.4.5 |
+| order_status_changed_before_save | 19.5.0 / 20.1.0 |
+| page_block_html_topmenu_gethtml_after | 1.9.4.5 |
+| page_block_html_topmenu_gethtml_before | 1.9.4.5 |
+| payment_form_block_to_html_before | 1.9.4.5 |
+| payment_info_block_prepare_specific_information | 1.9.4.5 |
+| payment_method_is_active | 1.9.4.5 |
+| paypal_prepare_line_items | 1.9.4.5 |
+| pdf_item_draw_after | 1.9.4.5 |
+| permissions_block_html_before | 1.9.4.5 |
+| permissions_orphanedresource_html_before | 20.2.1 |
+| permissions_user_html_before | 1.9.4.5 |
+| permissions_variable_html_before | 1.9.4.5 |
+| poll_vote_add | 1.9.4.5 |
+| prepare_product_children_id_list_select | 1.9.4.5 |
+| product_duplicate_attributes | 1.9.4.5 |
+| product_option_renderer_init | 1.9.4.5 |
+| resource_get_tablename | 1.9.4.5 |
+| review_controller_product_init | 1.9.4.5 |
+| review_controller_product_init_after | 1.9.4.5 |
+| review_controller_product_init_before | 1.9.4.5 |
+| review_review_collection_load_before | 1.9.4.5 |
+| rss_catalog_category_xml_callback | 1.9.4.5 |
+| rss_catalog_new_xml_callback | 1.9.4.5 |
+| rss_catalog_notify_stock_collection_select | 1.9.4.5 |
+| rss_catalog_review_collection_select | 1.9.4.5 |
+| rss_catalog_special_xml_callback | 1.9.4.5 |
+| rss_catalog_tagged_item_xml_callback | 1.9.4.5 |
+| rss_order_new_collection_select | 1.9.4.5 |
+| rss_wishlist_xml_callback | 1.9.4.5 |
+| rule_environment_collect | 1.9.4.5 |
+| sales_convert_order_item_to_quote_item | 1.9.4.5 |
+| sales_convert_quote_address_to_order | 1.9.4.5 |
+| sales_convert_quote_address_to_order_address | 1.9.4.5 |
+| sales_convert_quote_item_to_order_item | 1.9.4.5 |
+| sales_convert_quote_payment_to_order_payment | 1.9.4.5 |
+| sales_convert_quote_to_order | 1.9.4.5 |
+| sales_model_service_quote_submit_after | 1.9.4.5 |
+| sales_model_service_quote_submit_before | 1.9.4.5 |
+| sales_model_service_quote_submit_failure | 1.9.4.5 |
+| sales_model_service_quote_submit_success | 1.9.4.5 |
+| sales_order_creditmemo_cancel | 1.9.4.5 |
+| sales_order_creditmemo_refund_before | 19.4.15 / 20.0.13 |
+| sales_order_creditmemo_refund | 1.9.4.5 |
+| sales_order_invoice_cancel | 1.9.4.5 |
+| sales_order_invoice_pay | 1.9.4.5 |
+| sales_order_invoice_register | 1.9.4.5 |
+| sales_order_item_cancel | 1.9.4.5 |
+| sales_order_payment_cancel | 1.9.4.5 |
+| sales_order_payment_cancel_creditmemo | 1.9.4.5 |
+| sales_order_payment_cancel_invoice | 1.9.4.5 |
+| sales_order_payment_capture | 1.9.4.5 |
+| sales_order_payment_pay | 1.9.4.5 |
+| sales_order_payment_place_end | 1.9.4.5 |
+| sales_order_payment_place_start | 1.9.4.5 |
+| sales_order_payment_refund | 1.9.4.5 |
+| sales_order_payment_void | 1.9.4.5 |
+| sales_order_place_after | 1.9.4.5 |
+| sales_order_place_before | 1.9.4.5 |
+| sales_order_status_unassign_before | 1.9.4.5 |
+| sales_prepare_amount_expression | 1.9.4.5 |
+| sales_quote_add_item | 1.9.4.5 |
+| sales_quote_config_get_product_attributes | 1.9.4.5 |
+| sales_quote_item_collection_products_after_load | 1.9.4.5 |
+| sales_quote_item_qty_set_after | 1.9.4.5 |
+| sales_quote_item_set_product | 1.9.4.5 |
+| sales_quote_product_add_after | 1.9.4.5 |
+| sales_quote_remove_item | 1.9.4.5 |
+| sales_sale_collection_query_before | 1.9.4.5 |
+| salesrule_rule_condition_combine | 1.9.4.5 |
+| salesrule_rule_get_coupon_types | 1.9.4.5 |
+| salesrule_validator_process | 1.9.4.5 |
+| sendfriend_product | 1.9.4.5 |
+| sitemap_categories_generating_before | 1.9.4.5 |
+| sitemap_cms_pages_generating_before | 19.4.0 / 20.0.0 |
+| sitemap_products_generating_before | 1.9.4.5 |
+| sitemap_urlset_generating_before | 19.4.0 / 20.0.0 |
+| start_index_events_[getEventTypeName] | 1.9.4.5 |
+| start_process_event_[getEventTypeName] | 1.9.4.5 |
+| store_add | 1.9.4.5 |
+| store_delete | 1.9.4.5 |
+| store_edit | 1.9.4.5 |
+| store_group_save | 1.9.4.5 |
+| tag_tag_product_collection_load_after | 1.9.4.5 |
+| tax_rate_data_fetch | 1.9.4.5 |
+| visitor_init | 1.9.4.5 |
+| wishlist_add_item | 1.9.4.5 |
+| wishlist_add_product | 1.9.4.5 |
+| wishlist_item_add_after | 1.9.4.5 |
+| wishlist_item_collection_products_after_load | 1.9.4.5 |
+| wishlist_items_renewed | 1.9.4.5 |
+| wishlist_product_add_after | 1.9.4.5 |
+| wishlist_share | 1.9.4.5 |
+| wishlist_update_item | 1.9.4.5 |
diff --git a/docs/content/developers/guides/observer.md b/docs/content/developers/guides/observer.md
new file mode 100644
index 00000000000..c87ae130108
--- /dev/null
+++ b/docs/content/developers/guides/observer.md
@@ -0,0 +1,66 @@
+---
+tags:
+ - Events
+ - Debug
+ - Development
+---
+
+# Events & Observer
+
+Quick overview how observers work.
+
+## Event lookup
+
+If you want to add custom logic for `customer_login` event, add in your `config.xml`.
+
+!!! example
+
+ ```xml
+
+
+
+
+
+
+ yourShortClass/observer
+ yourMethod
+
+
+
+
+
+
+ ```
+
+## Event execution
+
+And in your `Observer.php`.
+
+!!! example
+
+ ```php
+ class YourNamespace_YourModule_Model_Observer
+ {
+ // EVENT customer_login
+ public function yourMethod(Varien_Event_Observer $observer)
+ {
+ $customer = $observer->getData('customer');
+ }
+ }
+ ```
+
+## Development
+
+For debugging dispatched events, add a `xdebug` breakpoint to class `Mage`
+
+!!! tip
+
+ ```php
+ public static function dispatchEvent($name, array $data = [])
+ {
+ Varien_Profiler::start('DISPATCH EVENT:' . $name);
+ $result = self::app()->dispatchEvent($name, $data);
+ Varien_Profiler::stop('DISPATCH EVENT:' . $name);
+ return $result;
+ }
+ ```
diff --git a/docs/content/developers/mkdocs.md b/docs/content/developers/mkdocs.md
new file mode 100644
index 00000000000..e665eed25c8
--- /dev/null
+++ b/docs/content/developers/mkdocs.md
@@ -0,0 +1,69 @@
+---
+tags:
+ - Documentation
+---
+
+# MkDocs
+
+`mkdocs` is used to build this documentation.
+
+## Installation
+
+1. Install `python3`[^1]
+
+ ```bash
+ sudo apt-get update
+ sudo apt-get install python3.8 python3-pip
+ ```
+
+2. Install `mkdocs` and plugins via `pip3`[^2]
+
+ ```bash
+ pip3 install mkdocs mkdocs-material mkdocs-minify-plugin mkdocs-redirects
+ ```
+
+## Commands
+
+Create a new project
+
+```bash
+mkdocs new [dir-name]
+```
+
+Start the live-reloading docs server
+
+```bash
+mkdocs serve
+```
+
+Build the documentation site
+
+```bash
+mkdocs build
+```
+
+Print this help message
+
+```bash
+mkdocs help
+```
+
+## Project layout
+
+```
+mkdocs.yml # The configuration file.
+docs/
+ content/
+ index.md # The documentation homepage.
+ ... # Other markdown pages, images and other files.
+ blog/ # Blog-like entries (with date, author, ...)
+ assets/
+ posts/
+ developers/
+ users/
+ overrides/ # Theme overrides
+docs_includes/ # Need to stay outside "docs"
+```
+
+[^1]: see https://realpython.com/installing-python/
+[^2]: do not use unmaintained `apt` packages
diff --git a/docs/content/developers/phpstorm.md b/docs/content/developers/phpstorm.md
new file mode 100644
index 00000000000..eae51f5fe02
--- /dev/null
+++ b/docs/content/developers/phpstorm.md
@@ -0,0 +1,40 @@
+---
+tags:
+- Development
+---
+
+# PhpStorm
+
+## Metadata Factory Helper
+
+This repo includes class maps for the core Magento files in `.phpstorm.meta.php`.
+To add class maps for installed extensions, you have to install [N98-magerun](https://github.com/netz98/n98-magerun)
+and run command:
+
+```bash
+n98-magerun.phar dev:ide:phpstorm:meta
+```
+
+You can add additional meta files in this directory to cover your own project files. See
+[PhpStorm advanced metadata](https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html)
+for more information.
+
+You can add additional meta files in this directory to cover your own project files. See
+[PhpStorm advanced metadata](https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html)
+for more information.
+
+## File-Watcher for SCSS files
+- install SCSS
+ ```bash
+ npm install -g sass
+ ```
+- open settings `CTRL+ALT+S` and go to File Watcher
+- change default setting to:
+ - Arguments:
+ ```
+ $FileName$:$FileParentDir$/$FileNameWithoutExtension$.css
+ ```
+ - Output paths to refresh:
+ ```
+ $FilePare
+ ```
\ No newline at end of file
diff --git a/docs/content/index.md b/docs/content/index.md
new file mode 100644
index 00000000000..53800273b15
--- /dev/null
+++ b/docs/content/index.md
@@ -0,0 +1,20 @@
+---
+hide:
+ - toc
+---
+
+# Magento - Long Term Support
+
+This repository is the home of an **unofficial** community-driven project. It's goal is to be a dependable alternative
+to the Magento CE official releases which integrates improvements directly from the community while maintaining a high
+level of backwards compatibility to the official releases.
+
+__Pull requests with bug fixes and security patches from the community are encouraged and welcome!__
+
+## Magento 1 Compatibility
+
+OpenMage LTS 19.4.0 is the first tagged version using the OpenMage LTS version naming system and all 19.x versions are mostly backward-compatible
+with Magento 1.9.4.x.
+
+OpenMage LTS 20.x and later have more changes that may not be 100% backward-compatible, but minimizing migration and upgrade hassle for users is always
+considered an important goal and factors heavily into the changes that are accepted even when accepting changes for `MAJOR` releases, described in [Releases and Versioning](users/versioning/index.md).
diff --git a/docs/content/tags.md b/docs/content/tags.md
new file mode 100644
index 00000000000..fef9bb4aa53
--- /dev/null
+++ b/docs/content/tags.md
@@ -0,0 +1,5 @@
+# Tags
+
+Following is a list of relevant tags:
+
+[TAGS]
diff --git a/docs/content/users/install/_use-composer.md b/docs/content/users/install/_use-composer.md
new file mode 100644
index 00000000000..4af98af1d58
--- /dev/null
+++ b/docs/content/users/install/_use-composer.md
@@ -0,0 +1,94 @@
+---
+tags:
+- Install
+---
+
+# Composer Install
+
+## Create new project
+
+```bash
+composer init
+```
+
+## Configuration
+
+**The below options are required.** You can see all options [here](https://github.com/AydinHassan/magento-core-composer-installer#configuration).
+
+Allow composer to apply patches to dependencies of magento-lts
+```bash
+composer config --json extra.enable-patching true
+```
+
+Configure Magento core composer installer to use magento-lts as the Magento source package
+```bash
+composer config extra.magento-core-package-type magento-source
+```
+
+Configure root directory that magento-lts will be installed to, such as `pub`, `htdocs`, or `www`
+```bash
+composer config extra.magento-root-dir pub
+```
+
+## Require `magento-core-composer-installer`
+
+=== "PHP 7/8"
+
+ For PHP 7 and 8[^1]
+ ``` bash
+ composer require "aydin-hassan/magento-core-composer-installer":"~2.0.0 || ^2.1.0"
+ ```
+
+=== "PHP 7"
+
+ Only for PHP 7[^1]
+ ``` bash
+ composer require "aydin-hassan/magento-core-composer-installer":"^2.0.0"
+ ```
+
+=== "PHP 8"
+
+ Only for PHP 8[^1]
+ ``` bash
+ composer require "aydin-hassan/magento-core-composer-installer":"~2.1.0"
+ ```
+
+## Require `magento-lts`
+
+=== "v20"
+
+ Latest tagged `v20` series release[^1]
+ ```bash
+ composer require "openmage/magento-lts":"^20.0.0"
+ ```
+
+=== "v19"
+
+ Legacy `v19` tagged release (Magento 1.9.4.x drop-in replacement supported until April 4, 2025)[^1]
+ ```bash
+ composer require "openmage/magento-lts":"^19.4.0"
+ ```
+
+=== "dev-main"
+
+ Latest on `main` development branch[^1]
+ ```bash
+ composer require "openmage/magento-lts":"dev-main"
+ ```
+
+=== "dev-next"
+
+ Latest on `next` development branch[^1]
+ ```bash
+ composer require "openmage/magento-lts":"dev-next"
+ ```
+
+## Optimization
+
+When deploying to a production environment, it's recommended to optimize Composer's autoloader to speed up classes lookup time:
+
+```bash
+composer dump-autoload --optimize
+```
+
+[^1]: Select `y` to trust `magento-hackathon/magento-composer-installer` or `cweagans/composer-patches`.
diff --git a/docs/content/users/install/_use-git.md b/docs/content/users/install/_use-git.md
new file mode 100644
index 00000000000..7db64c70712
--- /dev/null
+++ b/docs/content/users/install/_use-git.md
@@ -0,0 +1,18 @@
+---
+tags:
+- Contribute
+- Install
+---
+
+# Git (for contributors)
+
+If you want to contribute to the project:
+
+```bash
+git init
+git remote add origin https://github.com//magento-lts
+git pull origin main
+git remote add upstream https://github.com/OpenMage/magento-lts
+git pull upstream 1.9.4.x
+git add -A && git commit
+```
diff --git a/docs/content/users/install/_use-tarball.md b/docs/content/users/install/_use-tarball.md
new file mode 100644
index 00000000000..949c19a58e8
--- /dev/null
+++ b/docs/content/users/install/_use-tarball.md
@@ -0,0 +1,10 @@
+---
+tags:
+- Install
+---
+
+# Manual Install
+
+Download the latest [release archive](https://github.com/OpenMage/magento-lts/releases) and extract it over your existing install.
+
+**Important:** you must download the ZIP file from a tagged version on the releases page, otherwise there will be missing dependencies.
diff --git a/docs/content/users/install/index.md b/docs/content/users/install/index.md
new file mode 100644
index 00000000000..f293a7a4648
--- /dev/null
+++ b/docs/content/users/install/index.md
@@ -0,0 +1,6 @@
+# Installation
+
+OpenMage provives differnt ways to install. We recommend to use [Composer](_use-composer.md).
+If you want to contribute ot project, use [Git](_use-git.md).
+
+You can also download latest [Release](_use-tarball.md).
diff --git a/docs/content/users/install/secure-install.md b/docs/content/users/install/secure-install.md
new file mode 100644
index 00000000000..037c6fdf143
--- /dev/null
+++ b/docs/content/users/install/secure-install.md
@@ -0,0 +1,49 @@
+---
+tags:
+- Install
+---
+
+# Secure installation
+
+## Backend URL
+
+Don't use common paths like `admin` for OpenMage backend URL. Don't use the path in `robots.txt` and keep it secret.
+
+You can change it from backend (1) or by editing `app/etc/local.xml`:
+{ .annotate }
+
+1. Admin / System / Configuration / Admin / Admin Base Url
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## URL rewrites
+
+Don't use common file names like `api.php` for OpenMage API URLs to prevent attacks. Don't use the new file name in `robots.txt` and keep it secret with your partners. After renaming the file you must update the webserver configuration as follows:
+
+=== "Apache"
+
+ Apache .htaccess
+
+ ```
+ RewriteRule ^api/rest api.php?type=rest [QSA,L]
+ ```
+
+=== "Nginx"
+
+ Nginx configuration
+
+ ```
+ rewrite ^/api/(\w+).*$ /api.php?type=$1 last;`
+ ```
diff --git a/docs/content/users/modules/cron.md b/docs/content/users/modules/cron.md
new file mode 100644
index 00000000000..1e266b49db4
--- /dev/null
+++ b/docs/content/users/modules/cron.md
@@ -0,0 +1,17 @@
+---
+tags:
+- Modules
+---
+
+# Cron
+
+## `AOEpeople/Aoe_Scheduler`
+AOE Scheduler sits on top of Magento's default cron functionality allowing you to manage the jobs, to visualize the timeline and to get some deeper insight on what's going on behind the scenes and to shed some light on what might be going wrong. On top of that AOE Scheduler provides some more functionality like a cli and a web service interface, optimizing cron execution on your server and giving you everything you need to implement complex background tasks including for your Magento store.
+
+#### Install
+```bash
+composer require --dev aoepeople/aoe_scheduler
+```
+
+#### Source
+- https://github.com/AOEpeople/Aoe_Scheduler
\ No newline at end of file
diff --git a/docs/content/users/modules/email.md b/docs/content/users/modules/email.md
new file mode 100644
index 00000000000..6646a6aa96e
--- /dev/null
+++ b/docs/content/users/modules/email.md
@@ -0,0 +1,24 @@
+---
+tags:
+- Modules
+---
+
+# eMail
+
+## `aschroder/Magento-SMTP-Pro-Email-Extension`
+Magento 1 SMTP Pro Extension by Ashley Schroder (aschroder.com)
+
+Free and Opensource email extension for Magento 1.x
+
+- Easily send Magento transactional emails via Google Apps, Gmail, Amazon SES or your own SMTP server
+- Test your configuration from the Magento admin
+- View a log of all emails
+- Improve deliverability with an external SMTP server
+
+#### Install
+```bash
+composer require aschroder/smtp_pro
+```
+
+#### Source
+- https://github.com/aschroder/Magento-SMTP-Pro-Email-Extension
diff --git a/docs/content/users/modules/images.md b/docs/content/users/modules/images.md
new file mode 100644
index 00000000000..20f565cd3bb
--- /dev/null
+++ b/docs/content/users/modules/images.md
@@ -0,0 +1,42 @@
+---
+tags:
+- Modules
+---
+
+# Images
+
+## `anhuy1989/html5upload`
+Html 5 Upload Image product and cms.
+
+This Plugin enable the upload image width html5 it's possible upload multiple image.
+
+#### Source
+- https://github.com/anhuy1989/html5upload
+
+## `colinmollenhour/Perfect_Watermarks`
+A replacement for Magento's GD2 image adapter with imagemagick.
+
+#### Install
+```bash
+composer require colinmollenhour/perfect_watermarks
+```
+
+#### Source
+- https://github.com/colinmollenhour/Perfect_Watermarks
+
+## `fballiano/openmage-image-cleaner`
+- Identify and remove orphan **category images** (reading data from the default "image" attribute and **all custom attributes** of type "image").
+- Identify and remove orphan **product images** (reading data from media_gallery) and **product images cache**.
+- Identify and remove orphan **WYSIWYG images and files** (reading used images/files from cms_block, cms_page, core_email_template tables and all /skin/frontend CSS files).
+- Check before delete: you can review (and download) the identified images before removing them.
+- Possibility to **blacklist folders and/or files** (with wildcard support) not to ever identify them as orphans.
+- Possibility to **flush media/import, media/tmp, var/export, var/importexport**.
+- Compatible with **Magento 1.9, OpenMage 19 and OpenMage 20 on PHP >= 7.4**.
+
+#### Install
+```bash
+composer require fballiano/openmage-image-cleaner
+```
+
+#### Source
+- https://github.com/fballiano/openmage-image-cleaner
diff --git a/docs/content/users/modules/index.md b/docs/content/users/modules/index.md
new file mode 100644
index 00000000000..1448c16c17b
--- /dev/null
+++ b/docs/content/users/modules/index.md
@@ -0,0 +1,4 @@
+# Modules
+
+An overview of some of the 3th party Modules available in the ecosystem grouped by Topic.
+You can find additional modules on [Github](https://github.com/topics/openmage) and [Packagist](https://packagist.org/search/?tags=openmage).
diff --git a/docs/content/users/modules/logging.md b/docs/content/users/modules/logging.md
new file mode 100644
index 00000000000..368579540fa
--- /dev/null
+++ b/docs/content/users/modules/logging.md
@@ -0,0 +1,19 @@
+---
+tags:
+- Modules
+---
+
+# Logging
+
+## `firegento/logger`
+The purpose of this project is to have a simple framework for different logging adapters.
+
+Originally developed as Hackathon_Logger but moved forewards and will now actively supported by firegento community.
+
+#### Install
+```bash
+composer require firegento/logger
+```
+
+#### Source
+- https://github.com/firegento/firegento-logger
diff --git a/docs/content/users/modules/payment/bitcoin.md b/docs/content/users/modules/payment/bitcoin.md
new file mode 100644
index 00000000000..582871eefa9
--- /dev/null
+++ b/docs/content/users/modules/payment/bitcoin.md
@@ -0,0 +1,24 @@
+---
+tags:
+- Modules
+---
+
+# Bitcoin
+
+## `rvelhote/opennode-magento`
+Magento 1.9 Plugin for OpenNode Bitcoin Payment Gateway
+
+This module is still in development little by little
+
+1. Configure API keys in the backoffice
+2. Select the *Bitcoin* payment method during checkout
+3. When placing the order you will be redirected to a page where customers are presented with
+ a couple of QR Codes with the payment addresses (or links to pay with the wallet)
+4. Customers can pay and then move to the default Magento success page. A task is continuously checking for the payment
+ status in the background and informs the user of the progress
+5. A cronjob will cancel *Pending Payment* orders automatically
+
+The module was only tested with the default theme and Onepage Checkout.
+
+#### Source
+- https://github.com/rvelhote/opennode-magento
diff --git a/docs/content/users/modules/products.md b/docs/content/users/modules/products.md
new file mode 100644
index 00000000000..1296fcebb74
--- /dev/null
+++ b/docs/content/users/modules/products.md
@@ -0,0 +1,12 @@
+---
+tags:
+- Modules
+---
+
+# Products
+
+## `CustomGento_ProductBadges`
+Product Badges for Magento 1 offers you the possibility to add highly customizable badges to your product images without having any performance impact. You can freely define where a badge should be shown via price-rule-like conditions. Using a custom indexer, the rendering of the badges is insanely fast.
+
+#### Source
+- https://github.com/customgento/CustomGento_ProductBadges
diff --git a/docs/content/users/modules/social.md b/docs/content/users/modules/social.md
new file mode 100644
index 00000000000..5a1e41357c1
--- /dev/null
+++ b/docs/content/users/modules/social.md
@@ -0,0 +1,12 @@
+---
+tags:
+- Modules
+---
+
+# Social
+
+## `pyrroman/social-sharing-button-for-magento`
+Customers or visitors of your Magento Store can share their favourite products to friends on social sites such as Facebook, Twitter, Google +1 and Pinterest. Social sharing activities will attract more visitors or customers.
+
+#### Source
+- https://github.com/pyrroman/social-sharing-button-for-magento
diff --git a/docs/content/users/modules/themes/frontend.md b/docs/content/users/modules/themes/frontend.md
new file mode 100644
index 00000000000..266b50a1453
--- /dev/null
+++ b/docs/content/users/modules/themes/frontend.md
@@ -0,0 +1,15 @@
+---
+tags:
+ - Modules
+---
+
+# Frontend
+
+## `DegrizNet/OpenMageTheme`
+This theme is designed to work seamlessly with OpenMage and includes optimizations for speed, achieving a 100/100 mobile score on Google PageSpeed Insights in 2024.
+
+#### Demo
+- https://demo.degriz.net/en/
+
+#### Source
+- https://github.com/DegrizNet/OpenMageTheme
diff --git a/docs/content/users/requirements.md b/docs/content/users/requirements.md
new file mode 100644
index 00000000000..04cd3b78e11
--- /dev/null
+++ b/docs/content/users/requirements.md
@@ -0,0 +1,22 @@
+---
+hide:
+ - toc
+tags:
+- Install
+---
+
+# Requirements
+
+- PHP 7.4+
+ - PHP 8.0 is supported
+ - PHP 8.1 supported but some warnings may be shown/logged
+ - PHP 8.2 is usable but still being tested
+- MySQL 5.6+ (8.0+ recommended) or MariaDB
+- optional: Redis 5.x, 6.x and 7.0.x are supported
+
+
+- PHP extension `intl`[^1]
+- Command `patch` 2.7+ (or `gpatch` on macOS/HomeBrew)[^2]
+
+[^1]: since 1.9.4.19 & 20.0.17
+[^2]: since 1.9.5.0 & 20.1.0
diff --git a/docs/content/users/versioning/index.md b/docs/content/users/versioning/index.md
new file mode 100644
index 00000000000..d79ae6528ff
--- /dev/null
+++ b/docs/content/users/versioning/index.md
@@ -0,0 +1,18 @@
+# Releases and Versioning
+
+## Semantic Versioning
+
+This project more strictly adheres to [Semantic Versioning](http://semver.org/) compared to the original Magento version numbering system where the "1"
+was essentially a fixed number. See the [Terminology](https://github.com/OpenMage/rfcs/blob/main/accepted/0002-release-schedule.md#terminology)
+section of [RFC 0002 - Release Schedule](https://github.com/OpenMage/rfcs/blob/main/accepted/0002-release-schedule.md) for more information on how the terms MAJOR, MINOR and PATCH are defined and applied.
+
+The OpenMage team and community maintains OpenMage LTS versions as follows:
+
+- The latest `MAJOR.MINOR` version always receives `PATCH` updates.
+- The latest `MAJOR version` always receives `MINOR` updates.
+- The latest `MAJOR.MINOR` branch for each `MAJOR` version receives `PATCH` updates for at least 2 years from the time of inception of the initial `MAJOR` version release.
+
+## In a nutshell
+
+- If you want to stay on the cutting edge with the latest improvements use the latest `MAJOR` version.
+- If you want maximum backwards compatibility and minimal upgrade hassle use the next-latest `MAJOR` version so that you can still receive important security/stability/regression fixes.
diff --git a/docs/content/users/versioning/maintained.md b/docs/content/users/versioning/maintained.md
new file mode 100644
index 00000000000..93d481eb33a
--- /dev/null
+++ b/docs/content/users/versioning/maintained.md
@@ -0,0 +1,4 @@
+# Currently Maintained
+
+- `20.x` is the latest `MAJOR` version and will receive `PATCH` updates until 2 years after the date that 21.x is released.
+- `19.4.x` will receive `PATCH` updates until April 4, 2025.
diff --git a/docs/overrides/partials/content.html b/docs/overrides/partials/content.html
new file mode 100644
index 00000000000..99bf8c0d6ba
--- /dev/null
+++ b/docs/overrides/partials/content.html
@@ -0,0 +1,76 @@
+{{ page.content }}
+
+{% if page.meta.comments %}
+
+
+
+
+
+
+{% endif %}
diff --git a/docs_includes/.htaccess b/docs_includes/.htaccess
new file mode 100644
index 00000000000..93169e4eb44
--- /dev/null
+++ b/docs_includes/.htaccess
@@ -0,0 +1,2 @@
+Order deny,allow
+Deny from all
diff --git a/docs_includes/abbreviations.md b/docs_includes/abbreviations.md
new file mode 100644
index 00000000000..f4f6d9c25e2
--- /dev/null
+++ b/docs_includes/abbreviations.md
@@ -0,0 +1,15 @@
+*[Composer]: A tool to manage dependencies of a PHP project
+*[composer.json]: Composer configuration file
+*[DDEV]: Docker-based PHP development environments.
+*[deprecated]: Marked as not recommended for users and developers
+*[HTML]: Hyper Text Markup Language
+*[HTML5]: Hyper Text Markup Language
+*[JSON]: JSON (JavaScript Object Notation) is a lightweight data-interchange format.
+*[Mailpit]: Mailpit is a small, fast, low memory, zero-dependency, multi-platform email testing tool & API for developers.
+*[n98-magerun]: The n98 magerun cli tools provides some handy tools to work with Magento from command line.
+*[OpenMage]: This project
+*[phpMyAdmin]: phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web.
+*[PhpStorm]: PhpStorm is an innovative, Java-based integrated development environment (IDE) engineered by JetBrains for PHP and web developers.
+*[TinyMCE]: WYSIWYG editor
+*[W3C]: World Wide Web Consortium
+*[XML]: Extensible Markup Language
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 00000000000..6f937f34ba9
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,200 @@
+# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json
+site_name: OpenMage Docs
+site_url: https://OpenMage.github.io/magento-lts/
+repo_url: https://github.com/OpenMage/magento-lts
+repo_name: OpenMage/magento-lts
+edit_uri: blob/main/docs/content
+copyright: OpenMage contributors
+site_author: OpenMage contributors
+site_description: >-
+ Magento - Long Term Support.
+docs_dir: docs/content
+
+# Configuration
+theme:
+ name: material
+ favicon: assets/images/favicon.ico
+ custom_dir: docs/overrides
+ palette:
+ - scheme: default
+ primary: white
+ accent: deep purple
+ toggle:
+ icon: material/brightness-7
+ name: Switch to dark mode
+ - scheme: slate
+ primary: black
+ accent: deep purple
+ toggle:
+ icon: material/brightness-4
+ name: Switch to light mode
+ features:
+ - content.action.edit
+ - content.action.view
+ - content.code.copy
+ - navigation.expand
+ - navigation.indexes
+ - navigation.instant
+ - navigation.sections
+ - navigation.tabs
+ - navigation.top
+ - navigation.tracking
+ icon:
+ icon:
+ annotation: material/plus-circle
+ tag:
+ code: fontawesome/solid/code
+ config: fontawesome/solid/clipboard-check
+ css: fontawesome/brands/css3
+ debug: fontawesome/solid/bug-slash
+ documentation: fontawesome/regular/file
+ events: fontawesome/regular/calendar-xmark
+ html: fontawesome/brands/html5
+ install: fontawesome/solid/plus
+ js: fontawesome/brands/js
+ modules: fontawesome/regular/square-plus
+ php: fontawesome/brands/php
+ security: fontawesome/solid/shield
+ share: fontawesome/solid/share
+ tinymce: fontawesome/solid/wand-magic-sparkles
+
+# Plugins
+plugins:
+ - blog
+ - search
+ - tags:
+ tags_file: tags.md
+ - redirects:
+ redirect_maps:
+ - minify:
+ minify_html: true
+ cache_safe: true
+
+# Customization
+extra:
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/OpenMage/magento-lts
+ - icon: fontawesome/brands/discord
+ link: https://discord.gg/EV8aNbU
+ - icon: fontawesome/brands/stack-overflow
+ link: https://magento.stackexchange.com/tags/openmage
+ - icon: fontawesome/brands/twitter
+ link: https://twitter.com/openmageproject
+ generator: false
+ tags:
+ Configuration: config
+ Contribute: share
+ CSS: css
+ Debug: debug
+ Development: code
+ Documentation: documentation
+ Events: events
+ HTML5: html
+ Install: install
+ JavaScript: js
+ Modules: modules
+ PHP-8.0: php
+ PHP-8.1: php
+ PHP-8.2: php
+ PHP-8.3: php
+ TinyMCE: tinymce
+ Security: security
+
+# Extensions
+markdown_extensions:
+ - abbr
+ - admonition
+ - attr_list
+ - def_list
+ - footnotes
+ - meta
+ - md_in_html
+ - toc:
+ permalink: true
+ toc_depth: 3
+ - pymdownx.arithmatex:
+ generic: true
+ - pymdownx.betterem:
+ smart_enable: all
+ - pymdownx.caret
+ - pymdownx.details
+ - pymdownx.highlight:
+ anchor_linenums: true
+ - pymdownx.inlinehilite
+ - pymdownx.keys
+ - pymdownx.magiclink:
+ repo_url_shorthand: true
+ user: OpenMage
+ repo: magento-lts
+ - pymdownx.mark
+ - pymdownx.smartsymbols
+ - pymdownx.snippets:
+ auto_append:
+ - docs_includes/abbreviations.md
+ - pymdownx.superfences:
+ - pymdownx.tabbed:
+ alternate_style: true
+ - pymdownx.tasklist:
+ custom_checkbox: true
+ - pymdownx.tilde
+ - smarty
+
+nav:
+ - 'Get started':
+ - index.md
+ - users/requirements.md
+ - 'Installing':
+ - users/install/index.md
+ - users/install/_use-composer.md
+ - users/install/_use-git.md
+ - users/install/_use-tarball.md
+ - users/install/secure-install.md
+ - 'Changelog':
+ - developers/changelog/index.md
+ - developers/changelog/new-config.md
+ - developers/changelog/new-events.md
+ - developers/changelog/soap-wsdl.md
+ - 'Versioning':
+ - users/versioning/index.md
+ - users/versioning/maintained.md
+ - 'Quick links':
+ - tags.md
+ - 'API':
+ - 'REST':
+ - api/rest/common_http_status_codes.md
+ - api/rest/http_methods.md
+ - api/rest/get_filters.md
+ - 'Resources':
+ - 'Products':
+ - api/rest/resources/products/product_categories.md
+ - 'Customers':
+ - api/rest/resources/customers.md
+ - api/rest/response_formats.md
+ - api/rest/testing_rest_resources.md
+ - 'Development':
+ - 'Events':
+ - developers/events/list.md
+ - 'Guides':
+ - developers/guides/observer.md
+ - 'Tools':
+ - developers/ddev.md
+ - developers/phpstorm.md
+ - 'Multistore':
+ - developers/error-pages.md
+ - 'Documentation':
+ - developers/mkdocs.md
+ - 'Modules':
+ - users/modules/index.md
+ - users/modules/cron.md
+ - users/modules/email.md
+ - users/modules/images.md
+ - users/modules/logging.md
+ - users/modules/products.md
+ - users/modules/social.md
+ - 'Payment':
+ - users/modules/payment/bitcoin.md
+ - 'Themes':
+ - users/modules/themes/frontend.md
+# - 'Blog':
+# - blog/index.md