diff --git a/dt-contacts/access-module.php b/dt-contacts/access-module.php index c82218943f..3afcd5090a 100644 --- a/dt-contacts/access-module.php +++ b/dt-contacts/access-module.php @@ -100,25 +100,6 @@ public function dt_custom_fields_settings( $fields, $post_type ){ if ( isset( $fields['type']['default']['personal'] ) ){ $fields['type']['default']['personal']['default'] = false; } - $fields['type']['default']['access'] = [ - 'label' => __( 'Standard Contact', 'disciple_tools' ), - 'color' => '#2196F3', - 'description' => __( 'A contact to collaborate on', 'disciple_tools' ), - 'visibility' => __( 'Me and project leadership', 'disciple_tools' ), - 'icon' => get_template_directory_uri() . '/dt-assets/images/share.svg?v=2', - 'order' => 20, - 'default' => true, - ]; - $fields['type']['default']['access_placeholder'] = [ - 'label' => __( 'Connection', 'disciple_tools' ), - 'color' => '#FF9800', - 'description' => __( 'Connected to a contact, or generational fruit', 'disciple_tools' ), - 'icon' => get_template_directory_uri() . '/dt-assets/images/share.svg?v=2', - 'order' => 40, - 'visibility' => __( 'Collaborators', 'disciple_tools' ), - 'in_create_form' => false, - ]; - $fields['assigned_to'] = [ 'name' => __( 'Assigned To', 'disciple_tools' ), 'description' => __( 'Select the main person who is responsible for reporting on this contact.', 'disciple_tools' ), @@ -777,7 +758,7 @@ public function dt_post_create_fields( $fields, $post_type ){ } if ( isset( $fields['additional_meta']['created_from'] ) ){ $from_post = DT_Posts::get_post( 'contacts', $fields['additional_meta']['created_from'], true, false ); - if ( !is_wp_error( $from_post ) && isset( $from_post['type']['key'] ) && $from_post['type']['key'] === 'access' ){ + if ( !is_wp_error( $from_post ) && isset( $from_post['type']['key'] ) && in_array( $from_post['type']['key'], [ 'access', 'access_placeholder', 'user' ] ) ){ $fields['type'] = 'access_placeholder'; } } @@ -790,11 +771,19 @@ public function dt_post_create_fields( $fields, $post_type ){ if ( !isset( $fields['type'] ) && get_current_user_id() === 0 ){ $fields['type'] = 'access'; } + + /** + * Stop here if the type is not "access" + */ if ( !isset( $fields['type'] ) || $fields['type'] !== 'access' ){ return $fields; } - if ( !isset( $fields['seeker_path'] ) ){ - $fields['seeker_path'] = 'none'; + if ( !isset( $fields['overall_status'] ) ){ + if ( get_current_user_id() ){ + $fields['overall_status'] = 'active'; + } else { + $fields['overall_status'] = 'new'; + } } if ( !isset( $fields['assigned_to'] ) ){ if ( get_current_user_id() ) { @@ -814,13 +803,10 @@ public function dt_post_create_fields( $fields, $post_type ){ } } } - if ( !isset( $fields['overall_status'] ) ){ - if ( get_current_user_id() ){ - $fields['overall_status'] = 'active'; - } else { - $fields['overall_status'] = 'new'; - } + if ( !isset( $fields['seeker_path'] ) ){ + $fields['seeker_path'] = 'none'; } + if ( !isset( $fields['sources'] ) ) { $fields['sources'] = [ 'values' => [ [ 'value' => 'personal' ] ] ]; } diff --git a/dt-contacts/base-setup.php b/dt-contacts/base-setup.php index de33caa754..bcde035276 100644 --- a/dt-contacts/base-setup.php +++ b/dt-contacts/base-setup.php @@ -106,7 +106,8 @@ public function dt_custom_fields_settings( $fields, $post_type ){ 'tile' => 'details', 'icon' => get_template_directory_uri() . '/dt-assets/images/nametag.svg?v=2', ]; - $contact_preferences = get_option( 'dt_contact_preferences', [] ); + $post_type_settings = get_option( 'dt_custom_post_types', [] ); + $private_contacts_enabled = $post_type_settings['contacts']['enable_private_contacts'] ?? false; $fields['type'] = [ 'name' => __( 'Contact Type', 'disciple_tools' ), 'type' => 'key_select', @@ -125,9 +126,27 @@ public function dt_custom_fields_settings( $fields, $post_type ){ 'visibility' => __( 'Only me', 'disciple_tools' ), 'icon' => get_template_directory_uri() . '/dt-assets/images/locked.svg?v=2', 'order' => 50, - 'hidden' => !empty( $contact_preferences['hide_personal_contact_type'] ), + 'hidden' => !$private_contacts_enabled, 'default' => true ], + 'access' => [ + 'label' => __( 'Standard Contact', 'disciple_tools' ), + 'color' => '#2196F3', + 'description' => __( 'A contact to collaborate on', 'disciple_tools' ), + 'visibility' => __( 'Me and project leadership', 'disciple_tools' ), + 'icon' => get_template_directory_uri() . '/dt-assets/images/share.svg?v=2', + 'order' => 20, + 'default' => true, + ], + 'access_placeholder' => [ + 'label' => __( 'Connection', 'disciple_tools' ), + 'color' => '#FF9800', + 'description' => __( 'Connected to a contact, or generational fruit', 'disciple_tools' ), + 'icon' => get_template_directory_uri() . '/dt-assets/images/share.svg?v=2', + 'order' => 40, + 'visibility' => __( 'Collaborators', 'disciple_tools' ), + 'in_create_form' => false, + ] ], 'description' => 'See full documentation here: https://disciple.tools/user-docs/getting-started-info/contacts/contact-types', 'icon' => get_template_directory_uri() . '/dt-assets/images/circle-square-triangle.svg?v=2', @@ -466,8 +485,25 @@ public function dt_post_updated( $post_type, $post_id, $update_fields, $old_post //Add, remove or modify fields before the fields are processed in post create public function dt_post_create_fields( $fields, $post_type ){ if ( $post_type === 'contacts' ){ + if ( !isset( $fields['type'] ) && isset( $fields['additional_meta']['created_from'] ) ){ + $from_post = DT_Posts::get_post( 'contacts', $fields['additional_meta']['created_from'], true, false ); + if ( !is_wp_error( $from_post ) && isset( $from_post['type']['key'] ) ){ + switch ( $from_post['type']['key'] ){ + case 'personal': + case 'placeholder': + $fields['type'] = 'placeholder'; + break; + case 'access': + case 'access_placeholder': + case 'user': + $fields['type'] = 'access_placeholder'; + break; + } + } + } + if ( !isset( $fields['type'] ) ){ - $fields['type'] = 'personal'; + $fields['type'] = 'access'; } } return $fields; diff --git a/dt-contacts/dmm-module.php b/dt-contacts/dmm-module.php index da8761b37e..3a0f08eff1 100644 --- a/dt-contacts/dmm-module.php +++ b/dt-contacts/dmm-module.php @@ -44,7 +44,7 @@ public function __construct(){ public function dt_custom_fields_settings( $fields, $post_type ){ $declared_fields = $fields; if ( $post_type === 'contacts' ){ - $contact_preferences = get_option( 'dt_contact_preferences', [] ); + $private_contacts_enabled = $post_type_settings['contacts']['enable_private_contacts'] ?? false; $fields['type']['default']['placeholder'] = [ 'label' => __( 'Private Connection', 'disciple_tools' ), 'color' => '#FF9800', @@ -53,7 +53,7 @@ public function dt_custom_fields_settings( $fields, $post_type ){ 'order' => 40, 'visibility' => __( 'Only me', 'disciple_tools' ), 'in_create_form' => false, - 'hidden' => !empty( $contact_preferences['hide_personal_contact_type'] ), + 'hidden' => !$private_contacts_enabled, ]; $fields['milestones'] = [ 'name' => __( 'Faith Milestones', 'disciple_tools' ), @@ -330,11 +330,8 @@ public function post_connection_removed( $post_type, $post_id, $post_key, $value //Add, remove or modify fields before the fields are processed in post create public function dt_post_create_fields( $fields, $post_type ){ if ( $post_type === 'contacts' ){ - if ( !isset( $fields['type'] ) ){ - $fields['type'] = 'placeholder'; - } //mark a new user contact as being coached be the user who added the new user. - if ( $fields['type'] === 'user' ){ + if ( isset( $fields['type'] ) && $fields['type'] === 'user' ){ $current_user_contact = Disciple_Tools_Users::get_contact_for_user( get_current_user_id() ); if ( $current_user_contact && !is_wp_error( $current_user_contact ) ){ $fields['coached_by'] = [ 'values' => [ [ 'value' => $current_user_contact ] ] ]; diff --git a/dt-core/admin/menu/tabs/tab-general.php b/dt-core/admin/menu/tabs/tab-general.php index f2e8c43b80..c0fbd571ff 100644 --- a/dt-core/admin/menu/tabs/tab-general.php +++ b/dt-core/admin/menu/tabs/tab-general.php @@ -829,27 +829,31 @@ public function process_dt_contact_preferences(){ if ( isset( $_POST['dt_contact_preferences_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['dt_contact_preferences_nonce'] ) ), 'dt_contact_preferences' . get_current_user_id() ) ) { - $contact_preferences = get_option( 'dt_contact_preferences' ); - if ( isset( $_POST['hide_personal_contact_type'] ) && ! empty( $_POST['hide_personal_contact_type'] ) ) { - $contact_preferences['hide_personal_contact_type'] = false; + $post_type_settings = get_option( 'dt_custom_post_types', [] ); + $contact_preferences = $post_type_settings['contacts'] ?? []; + + if ( isset( $_POST['private_contacts_enabled'] ) && ! empty( $_POST['private_contacts_enabled'] ) ) { + $contact_preferences['enable_private_contacts'] = true; } else { - $contact_preferences['hide_personal_contact_type'] = true; + $contact_preferences['enable_private_contacts'] = false; } + $post_type_settings['contacts'] = $contact_preferences; - update_option( 'dt_contact_preferences', $contact_preferences, true ); + update_option( 'dt_custom_post_types', $post_type_settings, true ); } } public function show_dt_contact_preferences(){ - $contact_preferences = get_option( 'dt_contact_preferences', [] ); + $post_type_settings = get_option( 'dt_custom_post_types', [] ); + $private_contacts_enabled = $post_type_settings['contacts']['enable_private_contacts'] ?? false; ?>
diff --git a/dt-core/configuration/class-migration-engine.php b/dt-core/configuration/class-migration-engine.php index dae5c6c8fd..fba22f815d 100644 --- a/dt-core/configuration/class-migration-engine.php +++ b/dt-core/configuration/class-migration-engine.php @@ -12,7 +12,7 @@ class Disciple_Tools_Migration_Engine { - public static $migration_number = 56; + public static $migration_number = 57; protected static $migrations = null; diff --git a/dt-core/migrations/0057-enabled-private-contacts.php b/dt-core/migrations/0057-enabled-private-contacts.php new file mode 100644 index 0000000000..94f06459b7 --- /dev/null +++ b/dt-core/migrations/0057-enabled-private-contacts.php @@ -0,0 +1,35 @@ += 57 ){ + return; + } + + $contact_preferences = get_option( 'dt_contact_preferences', [] ); + $hide_personal_contact_type = $contact_preferences['hide_personal_contact_type'] ?? false; + + $post_type_custom_settings = $custom_settings['contacts'] ?? []; + $post_type_custom_settings['enable_private_contacts'] = !$hide_personal_contact_type; + $custom_settings['contacts'] = $post_type_custom_settings; + update_option( 'dt_custom_post_types', $custom_settings ); + delete_option( 'dt_contact_preferences' ); + } + + public function down() { + } + + public function test() { + } + + public function get_expected_tables(): array { + return []; + } +}