diff --git a/plugins/bcc-login/includes/class-bcc-notifications.php b/plugins/bcc-login/includes/class-bcc-notifications.php
index 3cf3738..198c821 100644
--- a/plugins/bcc-login/includes/class-bcc-notifications.php
+++ b/plugins/bcc-login/includes/class-bcc-notifications.php
@@ -1,63 +1,64 @@
settings = $settings;
$this->core_api = $core_api;
- add_action( 'transition_post_status', array( $this, 'on_post_status_transition' ), 10, 3 );
- add_action( 'bcc_send_scheduled_notification', array( $this, 'send_notification' ), 10, 1 );
+ add_action('transition_post_status', array($this, 'on_post_status_transition'), 10, 3);
+ add_action('bcc_send_scheduled_notification', array($this, 'send_notification'), 10, 1);
}
// NB: This does not run if a post is published without first being saved as a draft.
- public function on_post_status_transition( $new_status, $old_status, $post ) {
- if ('publish' === $new_status && 'publish' !== $old_status && in_array( $post->post_type, $this->settings->notification_post_types )) {
+ public function on_post_status_transition($new_status, $old_status, $post)
+ {
+ if ('publish' === $new_status && 'publish' !== $old_status && in_array($post->post_type, $this->settings->notification_post_types)) {
if ($this->settings->notification_delay > 0) {
- wp_schedule_single_event( time() + $this->settings->notification_delay, 'bcc_send_scheduled_notification', array( $post->ID ) );
+ wp_schedule_single_event(time() + $this->settings->notification_delay, 'bcc_send_scheduled_notification', array($post->ID));
} else {
- $this->send_notification($post->ID);
+ $this->send_notification($post->ID);
}
- }
+ }
}
- public function replace_notification_params($text, $post, $language) {
+ public function replace_notification_params($text, $post, $language)
+ {
$text = str_replace('[postTitle]', $post->post_title, $text);
$text = str_replace('[postExcerpt]', get_the_excerpt($post), $text);
- $text = str_replace('[postUrl]', get_permalink( $post ) ?? (get_site_url() . '/?p=' . $post->ID . (isset($language) ? '&lang=' . $language : '')), $text);
- $text = str_replace('[postImageUrl]', get_the_post_thumbnail_url($post->ID,'large'), $text);
+ $text = str_replace('[postUrl]', get_permalink($post) ?? (get_site_url() . '/?p=' . $post->ID . (isset($language) ? '&lang=' . $language : '')), $text);
+ $text = str_replace('[postImageUrl]', get_the_post_thumbnail_url($post->ID, 'large'), $text);
return $text;
- }
+ }
- public function send_notification( $post_id ) {
+ public function send_notification($post_id)
+ {
// Fetch the post object since only the ID is passed through scheduling.
-
- $post = get_post( $post_id );
- if ( ! $post ) {
+ $post = get_post($post_id);
+ $wpml_installed = defined('ICL_SITEPRESS_VERSION');
+ if (!$post) {
return; // Exit if the post doesn't exist.
}
$post_type = $post->post_type;
// 1. Get groups for post
- $post_groups = get_post_meta( $post->ID, 'bcc_groups', false );
+ $post_groups = get_post_meta($post->ID, 'bcc_groups', false);
// Notification logic goes here.
if (isset($post_groups) && !empty($post_groups)) {
-
-
-
$notification_groups = array_intersect($post_groups, $this->settings->notification_groups);
- if (empty($notification_groups)){
+ if (empty($notification_groups)) {
return;
}
-
// 2. Get default language and url for site
$site_language = get_bloginfo('language'); //E.g. "en-US"
$site_url = get_site_url();
@@ -68,46 +69,49 @@ public function send_notification( $post_id ) {
$is_multilinguage_post = false;
// 4. Handle multilingual posts
- if (defined('ICL_SITEPRESS_VERSION')) {
+ if ($wpml_installed) {
// WPML is installed and active.
// Check if post has been translated
- $has_translations = apply_filters( 'wpml_element_has_translations', '', $post_id, $post_type );
+ $has_translations = apply_filters('wpml_element_has_translations', '', $post_id, $post_type);
if ($has_translations) {
- $trid = apply_filters( 'wpml_element_trid', NULL, $post_id, 'post_' . $post_type);
- $translations = apply_filters( 'wpml_get_element_translations', NULL, $trid, 'post_' . $post_type );
+ $trid = apply_filters('wpml_element_trid', NULL, $post_id, 'post_' . $post_type);
+ $translations = apply_filters('wpml_get_element_translations', NULL, $trid, 'post_' . $post_type);
// Determine if current post is the original
$is_orginal = false;
foreach ($translations as $lang_code => $details) {
if ($details->element_id == $post_id) {
$is_orginal = $details->original == "1";
- break;
+ break;
}
}
$is_multilinguage_post = true;
if ($is_orginal) {
- foreach ( $translations as $lang => $details ) {
+ foreach ($translations as $lang => $details) {
+ $default_local = apply_filters('wpml_current_language', null);
$translation = get_post($details->element_id);
- $language_details = apply_filters( 'wpml_post_language_details', NULL, $translation->ID );
+ $language_details = apply_filters('wpml_post_language_details', NULL, $translation->ID);
$locale = $language_details["locale"];
- $language_code = str_replace('_', '-', $locale);
+ $language = str_replace('_', '-', $locale);
+ $language_code = $language_details["language_code"];
$excerpt = get_the_excerpt($translation);
- switch_to_locale($locale);
+ do_action('wpml_switch_language', $language_code);
if ($translation->post_status == 'publish') {
$payload[] = [
'post' => $translation,
'title' => $translation->post_title,
- 'language' => $language_code,
+ 'language' => $language,
+ 'language_code' => $language_code,
'excerpt' => $excerpt,
- 'url' => get_permalink( $translation ) ?? ($site_url . '/?p=' . $translation->ID . '&lang=' . $language_code),
- 'image_url' => get_the_post_thumbnail_url($translation->ID,'large'),
- 'date' => str_replace(' ','T',$translation->post_date_gmt) . 'Z'
+ 'url' => get_permalink($translation) ?? ($site_url . '/?p=' . $translation->ID . '&lang=' . $language),
+ 'image_url' => get_the_post_thumbnail_url($translation->ID, 'large'),
+ 'date' => str_replace(' ', 'T', $translation->post_date_gmt) . 'Z'
];
- }
- restore_previous_locale();
+ }
+ do_action('wpml_switch_language', $default_local);
}
} else {
// Don't process non-default languages of posts that have translations
@@ -115,71 +119,74 @@ public function send_notification( $post_id ) {
return;
}
- }
+ }
}
- if (!$is_multilinguage_post){
+ if (!$is_multilinguage_post) {
$excerpt = get_the_excerpt($post);
$payload[] = [
'post' => $post,
- 'title' => $post->post_title,
+ 'title' => $post->post_title,
'language' => $site_language,
'excerpt' => $excerpt,
- 'url' => get_permalink( $post ) ?? ($site_url . '/?p=' . $post->ID),
- 'image_url' => get_the_post_thumbnail_url($post->ID,'large'),
- 'date' => str_replace(' ','T',$post->post_date_gmt) . 'Z'
+ 'url' => get_permalink($post) ?? ($site_url . '/?p=' . $post->ID),
+ 'image_url' => get_the_post_thumbnail_url($post->ID, 'large'),
+ 'date' => str_replace(' ', 'T', $post->post_date_gmt) . 'Z'
];
}
- if (!empty($payload))
- {
+ if (!empty($payload)) {
$inapp_payload = [];
$email_payload = [];
foreach ($payload as $item) {
+ $default_local = apply_filters('wpml_current_language', null);
$wp_lang = str_replace('-', '_', $item["language"]);
switch_to_locale($wp_lang);
+ if ($wpml_installed) {
+ do_action('wpml_switch_language', $item["language_code"]);
+ }
- $templates = array_key_exists($wp_lang, $this->settings->notification_templates)
- ? $this->settings->notification_templates[$wp_lang]
- : (array_key_exists($site_language, $this->_settings->notification_templates)
- ? $this->settings->notification_templates[$site_language]
- : null);
+ $templates = array_key_exists($wp_lang, $this->settings->notification_templates)
+ ? $this->settings->notification_templates[$wp_lang]
+ : (array_key_exists($site_language, $this->_settings->notification_templates)
+ ? $this->settings->notification_templates[$site_language]
+ : null);
if ($templates) {
- $payload_lang = str_replace('nb-NO','no-NO',$item["language"]);
+ $payload_lang = str_replace('nb-NO', 'no-NO', $item["language"]);
$inapp_payload[] = [
"language" => $payload_lang,
"title" => $item["title"],
- "content" => $item["excerpt"] . '
[cta text="' . __('Read more', 'bcc-login') . '" link="' . $item["url"] . '"]',
- "notification" => $item["excerpt"] . '
[cta text="' . __('Read more', 'bcc-login') . '" link="' . $item["url"] . '"]' //obsolete
+ "content" => $item["excerpt"] . '
[cta text="' . __('Read more', 'bcc-login') . '" link="' . $item["url"] . '"]',
+ "notification" => $item["excerpt"] . '
[cta text="' . __('Read more', 'bcc-login') . '" link="' . $item["url"] . '"]' //obsolete
];
$email_subject = $this->replace_notification_params($templates["email_subject"] ?? "[postTitle]", $item["post"], $wp_lang);
$email_title = $this->replace_notification_params($templates["email_title"] ?? "", $item["post"], $wp_lang);
$email_body = $this->replace_notification_params($templates["email_body"] ?? "", $item["post"], $wp_lang);
-
+
$email_payload[] = [
"language" => $payload_lang,
- "subject" => $email_subject,
+ "subject" => $email_subject,
"banner" => $item["image_url"] !== false ? $item["image_url"] : null,
- "title" => $email_title,
- "content" => $email_body,
- "body" => $email_body, //obsolete
+ "title" => $email_title,
+ "content" => $email_body,
+ "body" => $email_body, //obsolete
];
}
+ if ($wpml_installed) {
+ do_action('wpml_switch_language', $default_local);
+ }
restore_previous_locale();
}
$this->core_api->send_notification($notification_groups, 'email', 'simpleemail', $email_payload);
$this->core_api->send_notification($notification_groups, 'inapp', 'simpleinapp', $inapp_payload);
-
+
}
}
-
}
-
-
}