/** * Filter @see heartbeat_received * @since 1.0.1 * * @param array $response * @param array $data * @param string $screen_id * * @return array */ public static function filter__heartbeat_received($response, $data, $screen_id) { if (false !== strpos($_SERVER['HTTP_REFERER'], 'wpglobus=off')) { /** * Check $_SERVER['HTTP_REFERER'] for wpglobus toggle is off because wpglobus-admin.js doesn't loaded in this mode */ return $response; } if (!empty($data['wp_autosave'])) { if (empty($data['wp_autosave']['post_id']) || (int) $data['wp_autosave']['post_id'] == 0) { /** * wp_autosave may come from edit.php page */ return $response; } if (empty($data['wpglobus_heartbeat'])) { /** * Check for wpglobus key */ return $response; } $title_wrap = false; $content_wrap = false; $post_title_ext = ''; $content_ext = ''; foreach (WPGlobus::Config()->enabled_languages as $language) { if ($language == WPGlobus::Config()->default_language) { $post_title_ext .= WPGlobus::add_locale_marks($data['wp_autosave']['post_title'], $language); $content_ext .= WPGlobus::add_locale_marks($data['wp_autosave']['content'], $language); } else { if (!empty($data['wp_autosave']['post_title_' . $language])) { $title_wrap = true; $post_title_ext .= WPGlobus::add_locale_marks($data['wp_autosave']['post_title_' . $language], $language); } if (!empty($data['wp_autosave']['content_' . $language])) { $content_wrap = true; $content_ext .= WPGlobus::add_locale_marks($data['wp_autosave']['content_' . $language], $language); } } } if ($title_wrap) { $data['wp_autosave']['post_title'] = $post_title_ext; } if ($content_wrap) { $data['wp_autosave']['content'] = $content_ext; } /** * Filter before autosave * @since 1.0.2 * * @param array $data ['wp_autosave'] Array of post data. */ $data['wp_autosave'] = apply_filters('wpglobus_autosave_post_data', $data['wp_autosave']); $saved = wp_autosave($data['wp_autosave']); if (is_wp_error($saved)) { $response['wp_autosave'] = array('success' => false, 'message' => $saved->get_error_message()); } elseif (empty($saved)) { $response['wp_autosave'] = array('success' => false, 'message' => __('Error while saving.')); } else { /* translators: draft saved date format, see http://php.net/date */ $draft_saved_date_format = __('g:i:s a'); /* translators: %s: date and time */ $response['wp_autosave'] = array('success' => true, 'message' => sprintf(__('Draft saved at %s.'), date_i18n($draft_saved_date_format))); } } return $response; }
/** * Convert array of local texts to multilingual string (with WPGlobus delimiters) * * @param string[] $translations * @return string */ public static function build_multilingual_string($translations) { $sz = ''; $single = 1 == count($translations) ? true : false; foreach ($translations as $language => $text) { if ($single && $language == WPGlobus::Config()->default_language) { $sz = $text; } else { $sz .= WPGlobus::add_locale_marks($text, $language); } } return $sz; }
/** * @param array $data * @param string[] $postarr * * @return array */ public function on_save_post_data($data, $postarr) { if ('revision' == $postarr['post_type']) { /** * Don't work with revisions * note: revision there are 2 types, its have some differences * - [post_name] => {post_id}-autosave-v1 and [post_name] => {post_id}-revision-v1 * autosave : when [post_name] == {post_id}-autosave-v1 $postarr has [post_content] and [post_title] in default_language * regular revision : [post_name] == {post_id}-revision-v1 $postarr has [post_content] and [post_title] in all enabled languages with delimiters * @see https://codex.wordpress.org/Revision_Management * see $postarr for more info */ return $data; } if ('auto-draft' == $postarr['post_status']) { /** * Auto draft was automatically created with no data */ return $data; } if ($this->disabled_entity($data['post_type'])) { return $data; } /** @global string $pagenow */ global $pagenow; /** * Now we save post content and post title for all enabled languages for post.php, post-new.php * @todo Check also 'admin-ajax.php', 'nav-menus.php', etc. */ $enabled_pages[] = 'post.php'; $enabled_pages[] = 'post-new.php'; if (!in_array($pagenow, $enabled_pages)) { /** * See other places with the same bookmark. * @bookmark EDITOR_LINE_BREAKS */ // $data['post_content'] = trim( $data['post_content'], '</p><p>' ); return $data; } if ('trash' == $postarr['post_status']) { /** * Don't work with move to trash */ return $data; } if (isset($_GET['action']) && 'untrash' == $_GET['action']) { /** * Don't work with untrash */ return $data; } $devmode = false; if ('off' == WPGlobus::Config()->toggle) { $devmode = true; } if (!$devmode) { $support_title = true; if (!post_type_supports($data['post_type'], 'title')) { $support_title = false; } $support_editor = true; if (!post_type_supports($data['post_type'], 'editor')) { $support_editor = false; } $data['post_title'] = $post_title = trim($data['post_title']); if (!empty($data['post_title']) && $support_title) { $data['post_title'] = WPGlobus::add_locale_marks($data['post_title'], WPGlobus::Config()->default_language); } $data['post_content'] = $post_content = trim($data['post_content']); if (!empty($data['post_content']) && $support_editor) { $data['post_content'] = WPGlobus::add_locale_marks($data['post_content'], WPGlobus::Config()->default_language); } /** * Add variables for check extra data * @since 1.2.2 */ $has_extra_post_title = false; $has_extra_post_content = false; foreach (WPGlobus::Config()->open_languages as $language) { if ($language == WPGlobus::Config()->default_language) { continue; } else { /** * Join post title for opened languages */ $title = isset($postarr['post_title_' . $language]) ? trim($postarr['post_title_' . $language]) : ''; if (!empty($title)) { $data['post_title'] .= WPGlobus::add_locale_marks($postarr['post_title_' . $language], $language); $has_extra_post_title = true; } /** * Join post content for opened languages */ $content = isset($postarr['content_' . $language]) ? trim($postarr['content_' . $language]) : ''; if (!empty($content)) { $data['post_content'] .= WPGlobus::add_locale_marks($postarr['content_' . $language], $language); $has_extra_post_content = true; } } } } // $devmode if (!$has_extra_post_title) { $data['post_title'] = $post_title; } if (!$has_extra_post_content) { $data['post_content'] = $post_content; } $data = apply_filters('wpglobus_save_post_data', $data, $postarr, $devmode); return $data; }