diff --git a/roles/docker-wordpress/tasks/discourse/install.yml b/roles/docker-wordpress/tasks/discourse/install.yml index 94dbddcb..af196c92 100644 --- a/roles/docker-wordpress/tasks/discourse/install.yml +++ b/roles/docker-wordpress/tasks/discourse/install.yml @@ -6,25 +6,48 @@ - name: "Generate Discourse API Key when WP Discourse is enabled" include_tasks: generate-api-key.yml -# Load after api key generation, so that it can be used -- name: "Include WP Discourse vars" +- name: "Load WP Discourse settings" include_vars: file: "{{ role_path }}/vars/discourse.yml" - name: discourse_settings + # <— drop the `name:` here so `discourse_settings` is the list itself - name: "Install WP Discourse plugin" command: > docker-compose exec -u www-data -T application - wp plugin install wp-discourse --activate - --path={{ wordpress_docker_html_path }} + wp plugin install wp-discourse --activate + --path={{ wordpress_docker_html_path }} args: chdir: "{{ docker_compose.directories.instance }}" - name: "Configure WP Discourse settings" + loop: "{{ discourse_settings | map(attribute='name') | unique | list }}" + loop_control: + label: "{{ item }}" vars: - discourse_settings_json_b64: "{{ discourse_settings | to_json | b64encode }}" + option_name: "{{ item }}" + + option_items: >- + {{ discourse_settings + | selectattr('name', 'equalto', option_name) + | list + }} + + option_kv: >- + {{ dict( + option_items | map(attribute='key') + | zip(option_items | map(attribute='value')) + ) }} + + option_json_b64: "{{ option_kv | to_json | b64encode }}" + command: > docker-compose exec -u www-data -T application bash -lc - "wp eval \"update_option('wp_discourse_options', json_decode(base64_decode('{{ discourse_settings_json_b64 }}'), true));\" --path={{ wordpress_docker_html_path }}" + "wp eval \"update_option( + '{{ option_name }}', + json_decode( + base64_decode('{{ option_json_b64 }}'), + true + ) + );\" --path={{ wordpress_docker_html_path }}" args: - chdir: "{{ docker_compose.directories.instance }}" + chdir: "{{ docker_compose.directories.instance }}" \ No newline at end of file diff --git a/roles/docker-wordpress/vars/discourse.yml b/roles/docker-wordpress/vars/discourse.yml index 0e19169c..85b11852 100644 --- a/roles/docker-wordpress/vars/discourse.yml +++ b/roles/docker-wordpress/vars/discourse.yml @@ -1,9 +1,245 @@ # Defines WP Discourse plugin settings # @see https://github.com/discourse/wp-discourse +# roles/docker-wordpress/vars/discourse.yml +# Defines WP Discourse plugin settings (exported from your current wp_options dump) + discourse_settings: - publish_discourse_posts: true - discourse_url: "https://{{ domains.discourse }}" - discourse_api_key: "{{ vault_discourse_api_key }}" - discourse_username: "system" - discourse_use_sso: false \ No newline at end of file + #- name: wpdc_discourse_domain + # key: wpdc_discourse_domain + # value: "" + + - name: discourse_connect + key: url + value: "https://{{ domains.discourse }}" + - name: discourse_connect + key: api-key + value: "{{ vault_discourse_api_key }}" + - name: discourse_connect + key: publish-username + value: "system" + + #- name: discourse_publish + # key: display-subcategories + # value: false + #- name: discourse_publish + # key: publish-category + # value: false + #- name: discourse_publish + # key: publish-category-update + # value: false + #- name: discourse_publish + # key: full-post-content + # value: false + #- name: discourse_publish + # key: allow-tags + # value: false + #- name: discourse_publish + # key: max-tags + # value: 5 + #- name: discourse_publish + # key: publish-as-unlisted + # value: false + #- name: discourse_publish + # key: custom-excerpt-length + # value: 55 + #- name: discourse_publish + # key: add-featured-link + # value: false + #- name: discourse_publish + # key: auto-publish + # value: false + #- name: discourse_publish + # key: force-publish + # value: false + #- name: discourse_publish + # key: force-publish-max-age + # value: 0 + #- name: discourse_publish + # key: publish-failure-notice + # value: false + #- name: discourse_publish + # key: publish-failure-email + # value: "" + #- name: discourse_publish + # key: auto-track + # value: true + #- name: discourse_publish + # key: allowed_post_types + # value: + # - post + #- name: discourse_publish + # key: hide-discourse-name-field + # value: false + #- name: discourse_publish + # key: discourse-username-editable + # value: false +# + #- name: discourse_comment + # key: enable-discourse-comments + # value: false + #- name: discourse_comment + # key: comment-type + # value: "display-comments" + #- name: discourse_comment + # key: ajax-load + # value: false + #- name: discourse_comment + # key: cache-html + # value: false + #- name: discourse_comment + # key: clear-cached-comment-html + # value: false + #- name: discourse_comment + # key: discourse-new-tab + # value: false + #- name: discourse_comment + # key: comment-sync-period + # value: 10 + #- name: discourse_comment + # key: hide-wordpress-comments + # value: false + #- name: discourse_comment + # key: show-existing-comments + # value: false + #- name: discourse_comment + # key: existing-comments-heading + # value: "" + #- name: discourse_comment + # key: max-comments + # value: 5 + #- name: discourse_comment + # key: min-replies + # value: 1 + #- name: discourse_comment + # key: min-score + # value: 0 + #- name: discourse_comment + # key: min-trust-level + # value: 1 + #- name: discourse_comment + # key: bypass-trust-level-score + # value: 50 + #- name: discourse_comment + # key: custom-datetime-format + # value: "" + #- name: discourse_comment + # key: only-show-moderator-liked + # value: false + #- name: discourse_comment + # key: load-comment-css + # value: false +# + #- name: discourse_configurable_text + # key: discourse-link-text + # value: "" + #- name: discourse_configurable_text + # key: start-discussion-text + # value: "Start the discussion at" + #- name: discourse_configurable_text + # key: continue-discussion-text + # value: "Continue the discussion at" + #- name: discourse_configurable_text + # key: join-discussion-text + # value: "Join the discussion at" + #- name: discourse_configurable_text + # key: comments-singular-text + # value: "Comment" + #- name: discourse_configurable_text + # key: comments-plural-text + # value: "Comments" + #- name: discourse_configurable_text + # key: no-comments-text + # value: "Join the Discussion" + #- name: discourse_configurable_text + # key: notable-replies-text + # value: "Notable Replies" + #- name: discourse_configurable_text + # key: comments-not-available-text + # value: "Comments are not currently available for this post." + #- name: discourse_configurable_text + # key: participants-text + # value: "Participants" + #- name: discourse_configurable_text + # key: published-at-text + # value: "Originally published at:" + #- name: discourse_configurable_text + # key: single-reply-text + # value: "Reply" + #- name: discourse_configurable_text + # key: many-replies-text + # value: "Replies" + #- name: discourse_configurable_text + # key: more-replies-more-text + # value: "more" + #- name: discourse_configurable_text + # key: external-login-text + # value: "Log in with Discourse" + #- name: discourse_configurable_text + # key: link-to-discourse-text + # value: "Link your account to Discourse" + #- name: discourse_configurable_text + # key: linked-to-discourse-text + # value: "Your account is linked with Discourse!" +# + #- name: discourse_webhook + # key: use-discourse-webhook + # value: false + #- name: discourse_webhook + # key: webhook-secret + # value: "" + #- name: discourse_webhook + # key: webhook-match-old-topics + # value: false + #- name: discourse_webhook + # key: use-discourse-user-webhook + # value: false + #- name: discourse_webhook + # key: webhook-match-user-email + # value: false +# + #- name: discourse_sso_common + # key: sso-secret + # value: "" +# + #- name: discourse_sso_provider + # key: enable-sso + # value: false + #- name: discourse_sso_provider + # key: auto-create-sso-user + # value: false + #- name: discourse_sso_provider + # key: login-path + # value: "" + #- name: discourse_sso_provider + # key: real-name-as-discourse-name + # value: false + #- name: discourse_sso_provider + # key: force-avatar-update + # value: false + #- name: discourse_sso_provider + # key: redirect-without-login + # value: false +# + #- name: discourse_sso_client + # key: sso-client-enabled + # value: false + #- name: discourse_sso_client + # key: sso-client-login-form-change + # value: false + #- name: discourse_sso_client + # key: sso-client-login-form-redirect + # value: "" + #- name: discourse_sso_client + # key: sso-client-sync-by-email + # value: false + #- name: discourse_sso_client + # key: sso-client-disable-create-user + # value: false + #- name: discourse_sso_client + # key: sso-client-sync-logout + # value: false +# + #- name: discourse_logs + # key: logs-enabled + # value: true