File: /var/www/html/wpmuhibbah_err/wp-content/plugins/give/includes/admin/class-i18n-module.php
<?php
/**
* Class Give_i18n
*/
class Give_i18n_Banner {
/**
* Your translation site's URL.
*
* @var string
*/
private $glotpress_url;
/**
* Hook where you want to show the promo box.
*
* @var string
*/
private $hook;
/**
* Will contain the site's locale.
*
* @access private
* @var string
*/
private $locale;
/**
* Will contain the locale's name, obtained from your translation site.
*
* @access private
* @var string
*/
private $locale_name;
/**
* Will contain the percentage translated for the plugin translation project in the locale.
*
* @access private
* @var int
*/
private $percent_translated;
/**
* Indicates whether there's a translation available at all.
*
* @access private
* @var bool
*/
private $translation_exists;
/**
* Indicates whether the translation's loaded.
*
* @access private
* @var bool
*/
private $translation_loaded;
/**
* Give_i18n constructor.
*
* @param $args
*/
public function __construct( $args ) {
// Only for admins.
if ( ! is_admin() ) {
return;
}
foreach ( $args as $key => $arg ) {
$this->$key = $arg;
}
add_action( 'admin_init', array( $this, 'init' ) );
}
/**
* Initialize i18n banner.
*/
function init() {
// First get user's locale (4.7+).
$this->locale = function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
// This plugin is en_US native.
if ( 'en_US' === $this->locale ) {
return;
}
if (
! $this->hide_promo()
&& ( ! empty( $_GET['post_type'] ) && 'give_forms' === $_GET['post_type'] )
&& ( ! empty( $_GET['page'] ) && 'give-settings' === $_GET['page'] )
) {
add_action( $this->hook, array( $this, 'promo' ) );
}
}
/**
* Check whether the promo should be hidden or not.
*
* @access private
*
* @return bool
*/
private function hide_promo() {
$hide_promo = Give_Cache::get( 'give_i18n_give_promo_hide', true );
if ( ! $hide_promo ) {
if ( filter_input( INPUT_GET, 'remove_i18n_promo', FILTER_VALIDATE_INT ) === 1 ) {
// No expiration time, so this would normally not expire, but it wouldn't be copied to other sites etc.
Give_Cache::set( 'give_i18n_give_promo_hide', true, null, true );
$hide_promo = true;
}
}
return $hide_promo;
}
/**
* Generates a promo message.
*
* @access private
*
* @return bool|string $message
*/
private function promo_message() {
$message = false;
// Using a translation less than 90% complete.
if ( $this->translation_exists && $this->translation_loaded && $this->percent_translated < 90 ) {
$message = __( 'As you can see, there is a translation of this plugin in %1$s. This translation is currently %3$d%% complete. We need your help to make it complete and to fix any errors. Please register at %4$s to help %5$s to %1$s!', 'give' );
} elseif ( ! $this->translation_loaded && $this->translation_exists ) {
$message = __( 'You\'re using WordPress in %1$s. While %2$s has been %3$d%% translated to %1$s, it has not been shipped with the plugin yet. You can help! Register at %4$s to help complete the translation to %1$s!', 'give' );
} elseif ( ! $this->translation_exists ) {
$message = __( 'You\'re using WordPress in a language we don\'t support yet. We\'d love for %2$s to be translated in that language too, but unfortunately, it isn\'t right now. You can change that! Register at %4$s to help translate it!', 'give' );
}
// Links.
$registration_link = sprintf( '<a href="%1$s" target="_blank">%2$s</a>', 'https://wordpress.org/support/register.php', esc_html__( 'WordPress.org', 'give' ) );
$translations_link = sprintf( '<a href="%1$s" target="_blank">%2$s</a>', 'https://translate.wordpress.org/projects/wp-plugins/give', esc_html__( 'complete the translation', 'give' ) );
// Message.
$message = sprintf( $message, $this->locale_name, 'Give', $this->percent_translated, $registration_link, $translations_link );
return $message;
}
/**
* Outputs a promo box
*/
public function promo() {
$this->translation_details();
$message = $this->promo_message();
if ( $message ) {
$this->print_css();
ob_start();
?>
<div id="give-i18n-notice" class="give-addon-alert updated give-notice" style="display: none">
<a href="https://wordpress.org/support/register.php" class="alignleft give-i18n-icon" style="margin:0" target="_blank"><span class="dashicons dashicons-translation"
style="font-size: 110px; text-decoration: none;"></span></a>
<div class="give-i18n-notice-content">
<a href="<?php echo esc_url( add_query_arg( array( 'remove_i18n_promo' => '1' ) ) ); ?>" class="dismiss"><span class="dashicons dashicons-dismiss"></span></a>
<h2 style="margin: 10px 0;"><?php printf( esc_html__( 'Help Translate GiveWP to %s', 'give' ), $this->locale_name ); ?></h2>
<p><?php echo $message; ?></p>
<p>
<a href="https://wordpress.org/support/register.php" target="_blank"><?php _e( 'Register now »', 'give' ); ?></a>
</p>
</div>
</div>
<?php
$notice_html = ob_get_clean();
// Register notice.
Give()->notices->register_notice(
array(
'id' => 'give-i18n-notice',
'type' => 'updated',
'description_html' => $notice_html,
'show' => true,
)
);
}
}
/**
* Output notice css
*
* @since 1.8.16
* @access private
*/
private function print_css() {
?>
<style>
/* Banner specific styles */
div.give-addon-alert.updated {
padding: 10px 20px;
position: relative;
border-color: #69B868;
overflow: hidden;
}
div.give-addon-alert a {
color: #69B868;
}
#give-i18n-notice > .give-i18n-icon {
overflow: hidden;
}
#give-i18n-notice > .give-i18n-icon .dashicons {
width: 110px;
height: 110px;
}
#give-i18n-notice > .give-i18n-icon:focus {
box-shadow: none;
}
.give-i18n-notice-content {
margin: 0 30px 0 125px;
}
div.give-addon-alert .dismiss {
position: absolute;
right: 20px;
height: 100%;
top: 50%;
margin-top: -10px;
outline: none;
box-shadow: none;
text-decoration: none;
color: #AAA;
}
div.give-addon-alert .dismiss:hover {
color: #333;
}
/* RTL Styles for banner */
body.rtl .give-i18n-notice-content {
margin: 0 125px 0 30px;
}
body.rtl div.give-addon-alert .dismiss {
left: 20px;
right: auto;
}
</style>
<?php
}
/**
* Try to find the transient for the translation set or retrieve them.
*
* @access private
*
* @return object|null
*/
private function find_or_initialize_translation_details() {
$set = Give_Cache::get( "give_i18n_give_{$this->locale}", true );
if ( ! $set ) {
$set = $this->retrieve_translation_details();
Give_Cache::set( "give_i18n_give_{$this->locale}", $set, DAY_IN_SECONDS, true );
}
return $set;
}
/**
* Try to get translation details from cache, otherwise retrieve them, then parse them.
*
* @access private
*/
private function translation_details() {
$set = $this->find_or_initialize_translation_details();
$this->translation_exists = ! is_null( $set );
$this->translation_loaded = is_textdomain_loaded( 'give' );
$this->parse_translation_set( $set );
}
/**
* Retrieve the translation details from Give Translate.
*
* @access private
*
* @return object|null
*/
private function retrieve_translation_details() {
$api_url = trailingslashit( $this->glotpress_url );
$resp = wp_remote_get( $api_url );
if ( is_wp_error( $resp ) || wp_remote_retrieve_response_code( $resp ) === '404' ) {
return null;
}
$body = wp_remote_retrieve_body( $resp );
unset( $resp );
if ( $body ) {
$body = json_decode( $body );
foreach ( $body->translation_sets as $set ) {
if ( ! property_exists( $set, 'wp_locale' ) ) {
continue;
}
if ( $this->locale == $set->wp_locale ) {
return $set;
}
}
}
return null;
}
/**
* Set the needed private variables based on the results from Give Translate.
*
* @param object $set The translation set
*
* @access private
*/
private function parse_translation_set( $set ) {
if ( $this->translation_exists && is_object( $set ) ) {
$this->locale_name = $set->name;
$this->percent_translated = $set->percent_translated;
} else {
$this->locale_name = '';
$this->percent_translated = '';
}
}
}
$give_i18n = new Give_i18n_Banner(
array(
'hook' => 'admin_notices',
'glotpress_url' => 'https://translate.wordpress.org/api/projects/wp-plugins/give/stable/',
)
);