Files
2026-04-28 15:13:50 +02:00

7340 lines
211 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class TrustindexPlugin_google
{
private $plugin_file_path;
private $plugin_name;
private $platform_name;
private $shortname;
private $version;
public static $permissionNeeded = 'edit_pages';
public static $allowedAttributesForWidget = [
'template' => ['id' => true, 'class' => true, 'style' => true],
'pre' => ['id' => true, 'style' => true, 'class' => true],
'div' => [
'id' => true, 'class' => true, 'style' => true, 'aria-label' => true, 'role' => true, 'tabindex' => true,
'data-template-id' => true,
'data-css-url' => true,
'data-no-translation' => true,
'data-time-locale' => true,
'data-layout-id' => true,
'data-layout-category' => true,
'data-set-id' => true,
'data-pid' => true,
'data-language' => true,
'data-close-locale' => true,
'data-review-target-width' => true,
'data-css-version' => true,
'data-review-text' => true,
'data-reply-by-locale' => true,
'data-pager-autoplay-timeout' => true,
'data-empty' => true,
'data-time' => true,
'data-id' => true,
'data-container' => true,
'data-collapse-text' => true,
'data-open-text' => true,
'data-is-valid' => true,
'data-domain' => true,
'data-auto-dark-mode' => true,
'data-rotate-to' => true,
'data-slider-loop' => true,
'data-size' => true,
'data-load-more-rows' => true,
'data-column-vertical-separate' => true,
'data-hide-count' => true,
'data-fomo-day' => true,
'data-style' => true,
'data-src' => true,
'data-type' => true,
'data-plugin-version' => true,
'data-only-rating-locale' => true,
],
'a' => [
'class' => true, 'style' => true, 'href' => true, 'role' => true, 'target' => true, 'rel' => true, 'aria-label' => true,
'data-subcontent' => true,
'data-subcontent-target' => true,
],
'img' => ['class' => true, 'style' => true, 'src' => true, 'srcset' => true, 'alt' => true, 'width' => true, 'height' => true, 'loading' => true],
'trustindex-image' => ['data-imgurl' => true, 'class' => true, 'style' => true, 'src' => true, 'srcset' => true, 'alt' => true, 'width' => true, 'height' => true, 'loading' => true],
'span' => [
'class' => true, 'style' => true,
'data-id' => true,
'data-empty' => true,
'data-time' => true,
'data-container' => true,
'data-collapse-text' => true,
'data-open-text' => true,
],
'p' => ['class' => true, 'style' => true],
'font' => ['class' => true, 'style' => true],
'strong' => ['class' => true, 'style' => true],
'br' => [],
'i' => ['class' => true, 'style' => true],
'style' => ['type' => true],
'script' => ['type' => true, 'src' => true],
];
public function __construct($shortname, $pluginFilePath, $version, $pluginName, $platformName)
{
$this->shortname = $shortname;
$this->plugin_file_path = $pluginFilePath;
$this->version = $version;
$this->plugin_name = $pluginName;
$this->platform_name = $platformName;
}
public function getPluginTabs()
{
$tabs = [];
$tabs[] = [
'place' => 'left',
'slug' => 'free-widget-configurator',
'name' => __('Free Widget Configurator', 'wp-reviews-plugin-for-google')
];
if ($this->is_noreg_linked()) {
$tabs[] = [
'place' => 'left',
'slug' => 'my-reviews',
'name' => __('My reviews', 'wp-reviews-plugin-for-google')
];
}
$tabs[] = [
'place' => 'left',
'slug' => 'get-reviews',
'name' => __('Get Reviews', 'wp-reviews-plugin-for-google')
];
$tabs[] = [
'place' => 'left',
'slug' => 'rate-us',
'name' => __('Rate Us', 'wp-reviews-plugin-for-google')
];
if (!$this->is_trustindex_connected()) {
$tabs[] = [
'place' => 'left',
'slug' => 'get-more-features',
'name' => __('Get more Features', 'wp-reviews-plugin-for-google')
];
}
$tabs[] = [
'place' => 'right',
'slug' => 'instagram-feed-widget',
'name' => 'Instagram Feed Widget',
];
$tabs[] = [
'place' => 'right',
'slug' => 'advanced',
'name' => __('Advanced', 'wp-reviews-plugin-for-google')
];
return $tabs;
}
public function getShortName()
{
return $this->shortname;
}
public function getWebhookAction()
{
return 'trustindex_reviews_hook_' . $this->getShortName();
}
public function getWebhookUrl()
{
return admin_url('admin-ajax.php') . '?action='. $this->getWebhookAction();
}
public function getProFeatureButton($campaignId)
{
return '<a class="ti-btn" href="https://lp.trustindex.io/'.$this->getShortName().'-wp/?a=sys&c='. $campaignId .'" target="_blank">'. __('Create a Free Account for More Features', 'wp-reviews-plugin-for-google') .'</a>';
}
public function is_review_download_in_progress()
{
return get_option($this->get_option_name('review-download-inprogress'), 0);
}
public function is_review_manual_download()
{
return get_option($this->get_option_name('review-manual-download'), 0);
}
public function delete_async_request()
{
$requestId = get_option($this->get_option_name('review-download-request-id'));
if (!$requestId) {
return false;
}
wp_remote_post('https://admin.trustindex.io/source/wordpressPageRequest', [
'body' => [
'is_delete' => 1,
'id' => $requestId
],
'timeout' => 300,
'redirection' => '5',
'blocking' => true
]);
return true;
}
public function save_details($tmp)
{
$name = isset($tmp['name']) ? sanitize_text_field(wp_unslash($tmp['name'])) : "";
$name = json_encode($name);
$details = [
'id' => isset($tmp['page_id']) ? $tmp['page_id'] : $tmp['id'],
'name' => $name,
'address' => isset($tmp['address']) ? sanitize_text_field(wp_unslash($tmp['address'])) : "",
'avatar_url' => isset($tmp['avatar_url']) ? sanitize_text_field(wp_unslash($tmp['avatar_url'])) : "",
'rating_number' => isset($tmp['reviews']['count']) ? (int)$tmp['reviews']['count'] : 0,
'rating_score' => isset($tmp['reviews']['score']) ? (float)$tmp['reviews']['score'] : 0,
];
if (isset($tmp['access_token'])) {
$details['access_token'] = sanitize_text_field(wp_unslash($tmp['access_token']));
}
update_option($this->get_option_name('page-details'), $details, false);
}
public function save_reviews($tmp)
{
global $wpdb;
$tableName = $this->get_tablename('reviews');
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$oldReviews = $wpdb->get_results($wpdb->prepare('SELECT reviewId, hidden, highlight FROM %i ORDER BY date DESC', $tableName), ARRAY_A);
$oldReviews = array_combine(array_column($oldReviews, 'reviewId'), $oldReviews);
$wpdb->query($wpdb->prepare('TRUNCATE %i', $tableName));
if ($wpdb->last_error) {
throw new Exception('DB truncate failed: '. esc_html($wpdb->last_error));
}
foreach ($tmp as $i => $review) {
foreach ($review as $key => $value) {
if (is_array($value)) {
if ($key === 'reviewer') {
$review[ $key ] = array_map(function($v) {
return $v ? sanitize_text_field(wp_unslash($v)) : $v;
}, $value);
}
else {
unset($review[ $key ]);
}
}
else if ($key === 'text') {
$review[ $key ] = $value ? wp_kses_post(wp_unslash($value)) : $value;
}
else {
$review[ $key ] = $value ? sanitize_text_field(wp_unslash($value)) : $value;
}
}
$hidden = 0;
$highlight = null;
if (isset($review['id']) && isset($oldReviews[$review['id']])) {
$hidden = $oldReviews[$review['id']]['hidden'];
$highlight = $oldReviews[$review['id']]['highlight'];
}
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$wpdb->insert($tableName, [
'user' => $review['reviewer']['name'],
'user_photo' => $review['reviewer']['avatar_url'],
'text' => $review['text'],
'rating' => $review['rating'] ? $review['rating'] : 5,
'date' => substr($review['created_at'], 0, 10),
'reviewId' => isset($review['id']) ? $review['id'] : null,
'reply' => isset($review['reply']) ? $review['reply'] : "",
'hidden' => $hidden,
'highlight' => $highlight ? $highlight : null,
]);
if ($wpdb->last_error) {
throw new Exception('DB insert failed: '. esc_html($wpdb->last_error));
}
}
update_option($this->get_option_name('review-download-modal'), 0, false);
}
public function get_plugin_dir()
{
return plugin_dir_path($this->plugin_file_path);
}
public function get_plugin_file_url($file, $addVersioning = true)
{
$url = plugins_url($file, $this->plugin_file_path);
if ($addVersioning) {
$appendMark = strpos($url, '?') === FALSE ? '?' : '&';
$url .= $appendMark . 'ver=' . $this->getVersion();
}
return $url;
}
public function get_plugin_slug()
{
return basename($this->get_plugin_dir());
}
public function uninstall()
{
$this->delete_async_request();
include $this->get_plugin_dir() . 'include' . DIRECTORY_SEPARATOR . 'uninstall.php';
if (is_file($this->getCssFile())) {
wp_delete_file($this->getCssFile());
}
}
public function activate()
{
include $this->get_plugin_dir() . 'include' . DIRECTORY_SEPARATOR . 'activate.php';
$this->setNotificationParam('not-using-no-connection', 'timestamp', time() + 86400);
if (!$this->getNotificationParam('rate-us', 'hidden', false) && $this->getNotificationParam('rate-us', 'active', true)) {
$this->setNotificationParam('rate-us', 'active', true);
$this->setNotificationParam('rate-us', 'timestamp', time() + 86400);
}
update_option($this->get_option_name('activation-redirect'), 1, false);
}
public function deactivate()
{
update_option($this->get_option_name('active'), '0');
}
public function load()
{
global $wpdb;
$this->loadI18N();
include $this->get_plugin_dir() . 'include' . DIRECTORY_SEPARATOR . 'update.php';
if (get_option($this->get_option_name('activation-redirect'))) {
delete_option($this->get_option_name('activation-redirect'));
wp_safe_redirect(admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php'));
exit;
}
if (
$this->is_noreg_linked() &&
!$this->is_review_download_in_progress() &&
get_option($this->get_option_name('download-timestamp'), time()) < time() &&
!$this->getNotificationParam('review-download-available', 'hidden') &&
$this->getNotificationParam('review-download-available', 'do-check', true)
) {
$this->setNotificationParam('review-download-available', 'active', true);
$this->setNotificationParam('review-download-available', 'do-check', false);
}
if (
!$this->is_noreg_linked() &&
!$this->getNotificationParam('not-using-no-connection', 'active', false) &&
$this->getNotificationParam('not-using-no-connection', 'do-check', true)
) {
$this->setNotificationParam('not-using-no-connection', 'active', true);
$this->setNotificationParam('not-using-no-connection', 'do-check', false);
}
if ( !class_exists('TrustindexGutenbergPlugin') && function_exists( 'register_block_type' ) && !WP_Block_Type_Registry::get_instance()->is_registered( 'trustindex/block-selector' )) {
require_once $this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'block-editor' . DIRECTORY_SEPARATOR . 'block-editor.php';
TrustindexGutenbergPlugin::instance();
}
}
public function loadI18N()
{
load_textdomain(
$this->get_plugin_slug(),
$this->get_plugin_dir() . 'languages/'.$this->get_plugin_slug().'-' . get_locale() . '.mo'
);
}
public function is_enabled()
{
return get_option($this->get_option_name('active'), 0);
}
public function add_setting_menu()
{
global $menu, $submenu;
$settingsPageUrl = $this->get_plugin_slug() . "/settings.php";
$settingsPageTitle = $this->platform_name . ' ';
if (function_exists('mb_strtolower')) {
$settingsPageTitle .= mb_strtolower(__('Reviews', 'wp-reviews-plugin-for-google'));
}
else {
$settingsPageTitle .= strtolower(__('Reviews', 'wp-reviews-plugin-for-google'));
}
$topMenu = false;
foreach ($menu as $key => $item) {
if ($item[0] === 'Trustindex.io') {
$topMenu = $item;
break;
}
}
if ($topMenu === false) {
add_menu_page(
$settingsPageTitle,
'Trustindex.io',
self::$permissionNeeded,
$settingsPageUrl,
'',
$this->get_plugin_file_url('static/img/trustindex-sign-logo.png')
);
}
else {
if (!isset($submenu[ $topMenu[2] ])) {
add_submenu_page(
$topMenu[2],
'Trustindex.io',
$topMenu[3],
self::$permissionNeeded,
$topMenu[2]
);
}
add_submenu_page(
$topMenu[2],
'Trustindex.io',
$settingsPageTitle,
self::$permissionNeeded,
$settingsPageUrl
);
}
}
public function add_plugin_action_links($links, $file)
{
if (!is_array($links)) {
$links = [];
}
if (basename($file) === basename($this->plugin_file_path)) {
$platformLink = '<a style="background-color: #1a976a; color: white; font-weight: bold; padding: 3px 8px; border-radius: 4px; position: relative; top: 1px" ';
if (get_option($this->get_option_name('widget-setted-up'), 0)) {
$platformLink .= 'href="' . admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php&tab=my-reviews') . '">'. __('Review Management', 'wp-reviews-plugin-for-google');
}
else {
$platformLink .= 'href="' . admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php') . '">';
if (!$this->is_noreg_linked()) {
/* translators: %s: Platform name */
$platformLink .= sprintf(__('Connect %s', 'wp-reviews-plugin-for-google'), $this->platform_name);
}
else {
$platformLink .= __('Create Widget', 'wp-reviews-plugin-for-google');
}
}
$platformLink .= '</a>';
$settingsLink = '<a href="' . admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php') . '">' . __('Settings', 'wp-reviews-plugin-for-google') . '</a>';
array_unshift($links, $platformLink, $settingsLink);
}
return $links;
}
public function add_plugin_meta_links($meta, $file)
{
if (basename($file) === basename($this->plugin_file_path)) {
$meta[] = '<a href="'. admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php&tab=get-more-features') .'">'. __('Get more Features', 'wp-reviews-plugin-for-google') . ' →</a>';
$meta[] = '<a href="http://wordpress.org/support/view/plugin-reviews/'. $this->get_plugin_slug() .'" target="_blank" rel="noopener noreferrer">'. __('Rate our plugin', 'wp-reviews-plugin-for-google') . ' <span style="color: #F6BB07; font-size: 1.2em; line-height: 1; position: relative; top: 0.05em;">★★★★★</span></a>';
}
return $meta;
}
public function init_widget()
{
if (!class_exists('TrustindexWidget_'.$this->getShortName())) {
require $this->get_plugin_dir() . 'trustindex-'. $this->getShortName() .'-widget.class.php';
}
}
public function register_widget()
{
return register_widget('TrustindexWidget_'.$this->getShortName());
}
public function get_option_name($opt_name)
{
if (!in_array($opt_name, $this->get_option_names())) {
echo esc_html('Option not registered in plugin (Trustindex class)');
}
if (in_array($opt_name, [ 'subscription-id', 'proxy-check' ])) {
return 'trustindex-'. $opt_name;
}
else {
return 'trustindex-'. $this->getShortName() .'-'. $opt_name;
}
}
public function get_option_names()
{
return [
'active',
'page-details',
'subscription-id',
'proxy-check',
'style-id',
'review-content',
'filter',
'scss-set',
'css-content',
'lang',
'no-rating-text',
'dateformat',
'nameformat',
'rate-us-feedback',
'verified-icon',
'enable-animation',
'show-arrows',
'show-reviewers-photo',
'download-timestamp',
'widget-setted-up',
'disable-font',
'show-logos',
'show-stars',
'load-css-inline',
'align',
'review-text-mode',
'amp-hidden-notification',
'review-download-token',
'review-download-inprogress',
'review-download-request-id',
'review-download-modal',
'review-download-is-connecting',
'review-download-is-failed',
'review-manual-download',
'reply-generated',
'instagram-promo-opened',
'footer-filter-text',
'show-header-button',
'reviews-load-more',
'activation-redirect',
'notifications',
'top-rated-type',
'top-rated-date',
'show-review-replies',
'verified-by-trustindex',
'fomo-open',
'fomo-link',
'fomo-border',
'fomo-arrow',
'fomo-icon',
'fomo-color',
'fomo-margin',
'fomo-title',
'fomo-text',
'fomo-url',
'fomo-icon-background',
'fomo-day',
'fomo-hide-count',
'cdn-version-control',
'version-control',
'preview',
];
}
private $widgetOptions = [];
private $widgetOptionDefaultOverride = [];
public function getWidgetOption($name, $forceDatabaseValue = false, $returnDefault = false)
{
if (isset($this->widgetOptions[$name]) && !$forceDatabaseValue && !$returnDefault) {
return $this->widgetOptions[$name];
}
if ($returnDefault && isset($this->widgetOptionDefaultOverride[$name])) {
return $this->widgetOptionDefaultOverride[$name];
}
global $wpdb;
if (!in_array($name, ['style-id', 'scss-set'])) {
$styleId = $this->getWidgetOption('style-id');
$scssSet = $this->getWidgetOption('scss-set');
}
$default = null;
if (!$forceDatabaseValue) {
switch ($name) {
case 'style-id':
$default = 4;
break;
case 'scss-set':
$default = 'light-background';
break;
case 'lang':
$default = 'en';
break;
case 'dateformat':
$default = 'modern';
break;
case 'nameformat':
$default = 1;
break;
case 'filter':
global $wpdb;
$onlyRatingsDefault = false;
if ($this->is_noreg_linked()) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$onlyRatingsDefault = (float)$wpdb->get_var($wpdb->prepare('SELECT COUNT(`id`) FROM %i WHERE `text` != ""', $this->get_tablename('reviews'))) >= 3;
}
$default = [
'stars' => [1, 2, 3, 4, 5],
'only-ratings' => $onlyRatingsDefault
];
break;
case 'no-rating-text':
$default = !in_array($styleId, [6, 8, 37]) ? 1 : 0;
break;
case 'verified-icon':
case 'enable-animation':
case 'show-arrows':
case 'show-header-button':
case 'reviews-load-more':
case 'fomo-open':
case 'fomo-border':
case 'fomo-arrow':
$default = 1;
break;
case 'widget-setted-up':
case 'disable-font':
case 'footer-filter-text':
case 'floating-mobile-open':
case 'show-review-replies':
case 'fomo-link':
case 'fomo-margin':
$default = 0;
break;
case 'align':
$default = in_array($styleId, [ 36, 37, 38, 39 ]) ? 'center' : ($this->isRtlLanguage() ? 'right' : 'left');
break;
case 'review-text-mode':
$default = 'readmore';
break;
case 'show-logos':
$default = isset(self::$widget_styles[$scssSet]) && self::$widget_styles[$scssSet]['hide-logos'] ? 0 : 1;
break;
case 'show-stars':
$default = isset(self::$widget_styles[$scssSet]) && self::$widget_styles[$scssSet]['hide-stars'] ? 0 : 1;
break;
case 'show-reviewers-photo':
$default = isset(self::$widget_styles[$scssSet]) && self::$widget_styles[$scssSet]['reviewer-photo'] ? 1 : 0;
break;
case 'top-rated-type':
$default = 'Service';
break;
case 'top-rated-date':
$default = in_array($styleId, [98, 100, 102, 104]) ? 'hide' : '';
break;
case 'verified-by-trustindex':
$default = 0;
break;
case 'fomo-icon':
$default = self::$widget_templates['templates'][$styleId]['params']['fomo-icon'];
break;
case 'fomo-color':
$params = self::$widget_templates['templates'][$styleId]['params'];
$default = isset($params['fomo-color']) ? $params['fomo-color'] : '#FF552B';
break;
case 'fomo-icon-background':
$default = 0;
break;
case 'fomo-title':
$default = "";
$content = $this->getWidgetOption('review-content');
preg_match('/<div class="ti-title-text">(.+)<\/div>/U', $content, $matches);
if (isset($matches[1]) && !$returnDefault) {
$default = $matches[1];
}
break;
case 'fomo-text':
$default = "";
$params = self::$widget_templates['templates'][$styleId]['params'];
if (isset($params['fomo-subtitle-text-choices'])) {
$default = $params['fomo-subtitle-text-choices'][0];
} else {
$content = $this->getWidgetOption('review-content');
preg_match('/<div class="ti-subtitle-text">(.+)<\/div>/U', $content, $matches);
if (isset($matches[1]) && !$returnDefault) {
$default = $matches[1];
}
}
break;
case 'fomo-url':
$default = $this->getReviewPageUrl();
break;
case 'fomo-day':
$params = self::$widget_templates['templates'][$styleId]['params'];
$default = 7;
break;
case 'fomo-hide-count':
$params = self::$widget_templates['templates'][$styleId]['params'];
$isOnlineVisitors = isset($params['fomo-title-text']) && strpos($params['fomo-title-text'], '%online-visitors%') !== false;
$default = $isOnlineVisitors ? 5 : 20;
break;
}
}
if ($returnDefault) {
return $default;
}
$this->widgetOptions[$name] = get_option($this->get_option_name($name), $default);
if ('fomo-text' === $name || 'fomo-title' === $name) {
$this->widgetOptions[$name] = html_entity_decode($this->widgetOptions[$name]);
}
return $this->widgetOptions[$name];
}
public function getNotificationOptions($type = "")
{
$platformName = $this->get_platform_name($this->getShortName());
$defaultRedirect = '?page='. $this->get_plugin_slug() .'/settings.php&tab=free-widget-configurator';
$list = [
'rate-us' => [
'type' => 'warning',
'extra-class' => 'trustindex-popup',
'button-text' => "",
'is-closeable' => true,
'hide-on-close' => false,
'hide-on-open' => true,
'redirect' => 'https://wordpress.org/support/plugin/'. $this->get_plugin_slug() .'/reviews/?rate=5#new-post',
'text' =>
/* translators: %s: Name of the plugin */
sprintf(__('We have worked a lot on the free "%s" plugin.', 'wp-reviews-plugin-for-google'), $this->plugin_name) . '<br />' .
__('If you love our features, please write a review to help us make the plugin even better.', 'wp-reviews-plugin-for-google') . '<br />' .
/* translators: %s: Trustindex CEO */
sprintf(__('Thank you. Gabor, %s', 'wp-reviews-plugin-for-google'), 'Trustindex CEO'),
],
'not-using-no-connection' => [
'type' => 'warning',
'extra-class' => "",
/* translators: %s: Platform name */
'button-text' => sprintf(__('Create a free %s widget! »', 'wp-reviews-plugin-for-google'), $platformName),
'is-closeable' => true,
'hide-on-close' => true,
'hide-on-open' => true,
'remind-later-button' => false,
'redirect' => $defaultRedirect,
/* translators: %s: Platform name */
'text' => sprintf(__('Display %s reviews on your website.', 'wp-reviews-plugin-for-google'), $platformName),
],
'not-using-no-widget' => [
'type' => 'warning',
'extra-class' => "",
/* translators: %s: Platform name */
'button-text' => sprintf(__('Embed the %s reviews widget! »', 'wp-reviews-plugin-for-google'), $platformName),
'is-closeable' => true,
'hide-on-close' => true,
'hide-on-open' => true,
'remind-later-button' => true,
'redirect' => $defaultRedirect,
/* translators: %s: Platform name */
'text' => sprintf(__('Build trust and display your %s reviews on your website.', 'wp-reviews-plugin-for-google'), $platformName),
],
'review-download-available' => [
'type' => 'warning',
'extra-class' => "",
'button-text' => __('Download your latest reviews! »', 'wp-reviews-plugin-for-google'),
'is-closeable' => true,
'hide-on-close' => true,
'hide-on-open' => true,
'remind-later-button' => false,
'redirect' => '?page='. $this->get_plugin_slug() .'/settings.php&tab=my-reviews',
/* translators: %s: Platform name */
'text' => sprintf(__('You can update your %s reviews.', 'wp-reviews-plugin-for-google'), $platformName),
],
'review-download-finished' => [
'type' => 'warning',
'extra-class' => "",
/* translators: %s: Service name (ChatGPT) */
'button-text' => sprintf(__('Reply with %s! »', 'wp-reviews-plugin-for-google'), 'ChatGPT'),
'is-closeable' => true,
'hide-on-close' => true,
'hide-on-open' => true,
'remind-later-button' => false,
'redirect' => '?page='. $this->get_plugin_slug() .'/settings.php&tab=my-reviews',
/* translators: %s: Platform name */
'text' => sprintf(__('Your new %s reviews have been downloaded.', 'wp-reviews-plugin-for-google'), $platformName),
],
];
return $type ? $list[$type] : $list;
}
public function setNotificationParam($type, $param, $value)
{
$notifications = get_option($this->get_option_name('notifications'), []);
if (!isset($notifications[ $type ])) {
$notifications[ $type ] = [];
}
$notifications[ $type ][ $param ] = $value;
update_option($this->get_option_name('notifications'), $notifications, false);
}
public function getNotificationParam($type, $param, $default = null)
{
$notifications = get_option($this->get_option_name('notifications'), []);
if (!isset($notifications[ $type ]) || !isset($notifications[ $type ][ $param ])) {
return $default;
}
return $notifications[ $type ][ $param ];
}
public function isNotificationActive($type)
{
$notifications = get_option($this->get_option_name('notifications'), []);
if (
!isset($notifications[ $type ]) ||
!isset($notifications[ $type ]['active']) || !$notifications[ $type ]['active'] ||
(isset($notifications[ $type ]['hidden']) && $notifications[ $type ]['hidden']) ||
(isset($notifications[ $type ]['timestamp']) && $notifications[ $type ]['timestamp'] > time())
) {
return false;
}
return true;
}
public function getNotificationEmailContent($type)
{
$platformName = $this->get_platform_name($this->getShortName());
$subject = "";
$message = "";
switch ($type) {
case 'review-download-finished':
$subject = $platformName . ' Reviews Downloaded';
$message = '
<p>Great news.</p>
<p><strong>Your new '. $platformName .' reviews have been downloaded.</p>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate !important;border-radius: 3px;background-color: #2AA8D7;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<tbody>
<tr>
<td align="center" valign="middle" style="font-family: Arial;font-size: 16px;padding: 12px 20px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;">
<a title="Reply with ChatGPT! »" href="'. admin_url('admin.php') .'?page='. urlencode($this->get_plugin_slug() .'/settings.php') .'&tab=free-widget-configurator" target="_blank" style="font-weight: bold;letter-spacing: normal;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: block;">Reply with ChatGPT! »</a>
</td>
</tr>
</tbody>
</table>
';
break;
}
return [
'subject' => $subject,
'message' => $message
];
}
public function sendNotificationEmail($type)
{
if ($email = $this->getNotificationParam($type, 'email', get_option('admin_email'))) {
$msg = $this->getNotificationEmailContent($type);
if ($msg['subject'] && $msg['message']) {
try {
wp_mail($email, $msg['subject'], $msg['message'], [ 'Content-Type: text/html; charset=UTF-8' ], [ '' ]);
}
catch(Exception $e) { }
}
}
}
public function get_platforms()
{
return array (
0 => 'facebook',
1 => 'google',
2 => 'tripadvisor',
3 => 'yelp',
4 => 'booking',
5 => 'amazon',
6 => 'arukereso',
7 => 'airbnb',
8 => 'hotels',
9 => 'opentable',
10 => 'foursquare',
11 => 'capterra',
12 => 'szallashu',
13 => 'thumbtack',
14 => 'expedia',
15 => 'zillow',
16 => 'wordpressPlugin',
17 => 'aliexpress',
18 => 'alibaba',
19 => 'sourceForge',
20 => 'ebay',
);
}
private $plugin_slugs = array (
'facebook' => 'free-facebook-reviews-and-recommendations-widgets',
'google' => 'wp-reviews-plugin-for-google',
'tripadvisor' => 'review-widgets-for-tripadvisor',
'yelp' => 'reviews-widgets-for-yelp',
'booking' => 'review-widgets-for-booking-com',
'amazon' => 'review-widgets-for-amazon',
'arukereso' => 'review-widgets-for-arukereso',
'airbnb' => 'review-widgets-for-airbnb',
'hotels' => 'review-widgets-for-hotels-com',
'opentable' => 'review-widgets-for-opentable',
'foursquare' => 'review-widgets-for-foursquare',
'capterra' => 'review-widgets-for-capterra',
'szallashu' => 'review-widgets-for-szallas-hu',
'thumbtack' => 'widgets-for-thumbtack-reviews',
'expedia' => 'widgets-for-expedia-reviews',
'zillow' => 'widgets-for-zillow-reviews',
'wordpressPlugin' => 'reviews-widgets',
'aliexpress' => 'widgets-for-aliexpress-reviews',
'alibaba' => 'widgets-for-alibaba-reviews',
'sourceForge' => 'widgets-for-sourceforge-reviews',
'ebay' => 'widgets-for-ebay-reviews',
);
public function get_plugin_slugs()
{
return array_values($this->plugin_slugs);
}
public static function get_noticebox($type, $message)
{
return '<div class="ti-notice ti-notice-'. $type .' is-dismissible"><p>'. $message .'</p><button type="button" class="notice-dismiss"></button></div>';
}
public static function get_alertbox($type, $content, $newline_content = true)
{
$types = [
'warning' => [
'css' => 'color: #856404; background-color: #fff3cd; border-color: #ffeeba;',
'icon' => 'dashicons-warning'
],
'info' => [
'css' => 'color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb;',
'icon' => 'dashicons-info'
],
'error' => [
'css' => 'color: #721c24; background-color: #f8d7da; border-color: #f5c6cb;',
'icon' => 'dashicons-info'
]
];
return '<div style="margin:20px 0px; padding:10px; '. $types[ $type ]['css'] .' border-radius: 5px">'
. '<span class="dashicons '. $types[ $type ]['icon'] .'"></span> <strong>'. strtoupper($type) .'</strong>'
. ($newline_content ? '<br />' : "")
. $content
. '</div>';
}
public function get_shortcode_name()
{
return 'trustindex';
}
public function init_shortcode()
{
$tag = $this->get_shortcode_name();
if (shortcode_exists($tag)) {
$initedVersion = get_option('trustindex-core-shortcode-inited', '1.0');
if (!$initedVersion || version_compare($initedVersion, $this->getVersion())) {
remove_shortcode($tag);
}
else {
return false;
}
}
update_option('trustindex-core-shortcode-inited', $this->getVersion(), false);
add_shortcode($tag, [ $this, 'shortcode_func' ]);
}
public function shortcode_func($atts)
{
$atts = shortcode_atts([ 'data-widget-id' => null, 'no-registration' => null ], $atts);
if (isset($atts['data-widget-id']) && $atts['data-widget-id']) {
$content = $this->renderWidgetFrontend(esc_attr($atts['data-widget-id']));
if ($this->isElementorEditing()) {
// phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
$content .= '<script type="text/javascript" src="https://cdn.trustindex.io/loader.js"></script>';
}
return wp_kses($content, self::$allowedAttributesForWidget);
}
else if (isset($atts['no-registration']) && $atts['no-registration']) {
$forcePlatform = esc_attr($atts['no-registration']);
if (substr($forcePlatform, 0, 5) !== 'trust' && substr($forcePlatform, -4) !== 'ilot' && !in_array($forcePlatform, $this->get_platforms())) {
$avPlatforms = $this->get_platforms();
$forcePlatform = $avPlatforms[0];
}
$filePath = __FILE__;
if (isset($this->plugin_slugs[ $forcePlatform ])) {
$filePath = preg_replace('/[^\/\\\\]+([\\\\\/]trustindex-plugin\.class\.php)/', $this->plugin_slugs[ $forcePlatform ] . '$1', $filePath);
}
$className = 'TrustindexPlugin_' . $forcePlatform;
if (!class_exists($className)) {
return wp_kses_post($this->frontEndErrorForAdmins(ucfirst($forcePlatform) . ' plugin is not active or not found!'));
}
$chosedPlatform = new $className($forcePlatform, $filePath, "do-not-care-13.2.9", "do-not-care-Widgets for Google Reviews", "do-not-care-Google");
$chosedPlatform->setNotificationParam('not-using-no-widget', 'active', false);
if (!$chosedPlatform->is_noreg_linked()) {
/* translators: %s: Platform name */
return wp_kses_post($this->frontEndErrorForAdmins(sprintf(__('You have to connect your business (%s)!', 'wp-reviews-plugin-for-google'), $forcePlatform)));
} else if (!$chosedPlatform->getWidgetOption('widget-setted-up')) {
return wp_kses_post($this->frontEndErrorForAdmins('You have to complete your widget setup!'));
} else {
if ($this->isElementorEditing()) {
$html = preg_replace('/<style\b[^>]*>.*?<\/style>/is', '', $chosedPlatform->renderWidgetAdmin(true));
$html = wp_kses($html, $className::$allowedAttributesForWidget);
$html .= '<style type="text/css">'.get_option($this->get_option_name('css-content')).'</style>';
return $html;
} else {
$html = preg_replace('/<style\b[^>]*>.*?<\/style>/is', '', $chosedPlatform->renderWidgetFrontend());
$html = wp_kses($html, $className::$allowedAttributesForWidget);
if (!is_file($chosedPlatform->getCssFile()) || get_option($chosedPlatform->get_option_name('load-css-inline'), 0)) {
$html .= '<style type="text/css">'.get_option($chosedPlatform->get_option_name('css-content')).'</style>';
}
return $html;
}
}
}
else {
return wp_kses_post($this->frontEndErrorForAdmins(__('Your shortcode is deficient: Trustindex Widget ID is empty! Example: ', 'wp-reviews-plugin-for-google') . '<br /><code>['.$this->get_shortcode_name().' data-widget-id="478dcc2136263f2b3a3726ff"]</code>'));
}
}
public function frontEndErrorForAdmins($text)
{
if (!current_user_can('manage_options')) {
return " ";
}
return self::get_alertbox('error', ' @ <strong>'. __('Trustindex plugin', 'wp-reviews-plugin-for-google') .'</strong> <i style="opacity: 0.65">('. __('This message is not be visible to visitors in public mode.', 'wp-reviews-plugin-for-google') .')</i><br /><br />'. $text, false);
}
public function is_noreg_linked()
{
$pageDetails = $this->getPageDetails();
return $pageDetails && !empty($pageDetails);
}
private $pageDetails = null;
public function getPageDetails()
{
if ($this->pageDetails) {
return $this->pageDetails;
}
$pageDetails = get_option($this->get_option_name('page-details'));
if (isset($pageDetails['name']) && $this->isJson($pageDetails['name'])) {
$pageDetails['name'] = json_decode($pageDetails['name']);
}
$this->pageDetails = $pageDetails;
return $pageDetails;
}
public function noreg_save_css($setChange = false)
{
$defaultSet = 'light-background';
$styleId = (int)get_option($this->get_option_name('style-id'), 4);
$setId = get_option($this->get_option_name('scss-set'), $defaultSet);
$response = wp_remote_get('https://cdn.trustindex.io/assets/widget-presetted-css/v2/'.$styleId.'-'.$setId.'.css', [ 'timeout' => 30 ]);
$cssContent = wp_remote_retrieve_body($response);
$cssContent = str_replace('../../../assets', 'https://cdn.trustindex.io/assets', $cssContent);
$cssContent = str_replace(".ti-widget[data-layout-id='$styleId'][data-set-id='$setId']", '.ti-widget.ti-'. substr($this->getShortName(), 0, 4), $cssContent);
if (is_wp_error($response) || !$cssContent) {
echo wp_kses_post($this->get_alertbox('error', "Trustindex's system is not available at the moment, please try again later."));
die;
}
if (!$setChange) {
update_option($this->get_option_name('scss-set'), $defaultSet, false);
}
if (in_array($styleId, [17, 21, 52, 53, 112, 114])) {
$cssContent .= '.ti-preview-box { position: unset !important }';
}
update_option($this->get_option_name('css-content'), $cssContent, false);
return $this->handleCssFile();
}
public function getCssFile($returnOnlyFile = false)
{
$file = 'trustindex-'. $this->getShortName() .'-widget.css';
if ($returnOnlyFile) {
return $file;
}
$uploadDir = wp_upload_dir();
return trailingslashit($uploadDir['basedir']) . $file;
}
private function getCssUrl()
{
$path = wp_upload_dir()['baseurl'] .'/'. $this->getCssFile(true);
if (is_ssl()) {
$path = str_replace('http://', 'https://', $path);
}
return $path;
}
public function handleCssFile()
{
$css = get_option($this->get_option_name('css-content'));
if (!$css) {
return;
}
if (get_option($this->get_option_name('load-css-inline'), 0)) {
return;
}
$fileExists = is_file($this->getCssFile());
$success = false;
$errorType = null;
$errorMessage = "";
if ($fileExists && !is_readable($this->getCssFile())) {
$errorType = 'permission';
}
else {
if ($fileExists && $css === file_get_contents($this->getCssFile())) {
return;
}
require_once(ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'file.php');
global $wp_filesystem;
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
set_error_handler(function ($err_severity, $err_msg, $err_file, $err_line, $err_context = []) {
throw new ErrorException(esc_html($err_msg), 0, esc_html($err_severity), esc_html($err_file), esc_html($err_line));
}, E_WARNING);
add_filter('filesystem_method', array($this, 'filter_filesystem_method'));
WP_Filesystem();
try {
$success = $wp_filesystem->put_contents($this->getCssFile(), $css, 0644);
}
catch (Exception $e) {
if (strpos($e->getMessage(), 'Permission denied') !== FALSE) {
$errorType = 'permission';
}
else {
$errorType = 'filesystem';
$errorMessage = $e->__toString();
}
}
restore_error_handler();
remove_filter('filesystem_method', array($this, 'filter_filesystem_method'));
}
if (!$success) {
add_action('admin_notices', function() use ($fileExists, $errorType, $errorMessage) {
$html = '
<div class="notice notice-error" style="margin: 5px 0 15px">
<p>' .
'<strong>'. __('ERROR with the following plugin:', 'wp-reviews-plugin-for-google') .'</strong> '. $this->plugin_name .'<br /><br />' .
__('CSS file could not saved.', 'wp-reviews-plugin-for-google') .' <strong>('. $this->getCssFile() .')</strong> '. __('Your widgets do not display properly!', 'wp-reviews-plugin-for-google') . '<br />';
if ($errorType === 'filesystem') {
$html .= '<br />
<strong>There is an error with your filesystem. We got the following error message:</strong>
<pre style="display: block; margin: 10px 0; padding: 20px; background: #eee">'. $errorMessage .'</pre>
<strong>Maybe you configured your filesystem incorrectly.<br />
<a href="https://wordpress.org/support/article/editing-wp-config-php/#wordpress-upgrade-constants" target="_blank">Here you can read about how to configure filesystem in your WordPress.</a></strong>';
}
else {
if ($fileExists) {
$html .= __('CSS file exists and it is not writeable. Delete the file', 'wp-reviews-plugin-for-google');
}
else {
$html .= __('Grant write permissions to upload folder', 'wp-reviews-plugin-for-google');
}
$html .= '<br />' .
__('or', 'wp-reviews-plugin-for-google') . '<br />' .
/* translators: %s: Advanced page link */
sprintf(__("enable 'CSS internal loading' in the %s page!", 'wp-reviews-plugin-for-google'), '<a href="'. admin_url('admin.php?page=' . $this->get_plugin_slug() . '/settings.php&tab=advanced') .'>'. __('Advanced', 'wp-reviews-plugin-for-google') .'</a>');
}
echo wp_kses($html, [
'p' => [], 'strong' => [], 'br' => [],
'a' => ['href' => true, 'target' => true],
'div' => ['class' => true, 'style' => true],
'pre' => ['style' => true],
]) . '</p></div>';
});
}
return $success;
}
public static $topRatedMinimumScore = 4.5;
public static $widget_templates = array (
'categories' =>
array (
'slider' => '4,5,13,14,15,19,34,36,37,39,44,45,46,47,95,105,108',
'sidebar' => '6,7,8,9,10,18,54,81',
'list' => '33,80',
'grid' => '16,31,38,48,79',
'badge' => '11,12,20,22,23,55,56,57,58,97,98,99,100,101,102,103,104,107',
'button' => '24,25,26,27,28,29,30,32,35,59,60,61,62,106,109,110,111,113,115',
'floating' => '17,21,52,53,112,114',
'popup' => '23,30,32,112,114',
'top-rated-badge' => '97,98,99,100,101,102,103,104',
'fomo' => '116,117,118,119,120,121,122,123,124,125,126,127,128,129,130',
),
'templates' =>
array (
4 =>
array (
'name' => 'Slider I.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
48 =>
array (
'name' => 'Grid I. - Big picture',
'type' => 'grid',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
47 =>
array (
'name' => 'Slider III. - Big picture',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
46 =>
array (
'name' => 'Slider II. - Big picture',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
45 =>
array (
'name' => 'Slider I. - Big picture',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
14 =>
array (
'name' => 'Slider I. - with header',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
105 =>
array (
'name' => 'Slider I. - with Top Rated header and photos',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => true,
),
),
108 =>
array (
'name' => 'Slider I. - with Top Rated header and photos',
'type' => 'slider',
'is-active' => false,
'is-popular' => true,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => true,
),
),
95 =>
array (
'name' => 'Slider I. - with AI summary',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
39 =>
array (
'name' => 'Slider II. - centered',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
5 =>
array (
'name' => 'Slider II.',
'type' => 'slider',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
36 =>
array (
'name' => 'Slider III.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
19 =>
array (
'name' => 'Slider IV.',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
34 =>
array (
'name' => 'Slider IV.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
13 =>
array (
'name' => 'Slider V.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
15 =>
array (
'name' => 'Slider VI.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
44 =>
array (
'name' => 'Slider VI.',
'type' => 'slider',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
37 =>
array (
'name' => 'Slider VII.',
'type' => 'slider',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
33 =>
array (
'name' => 'List I.',
'type' => 'list',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
80 =>
array (
'name' => 'List I. - with header',
'type' => 'list',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
16 =>
array (
'name' => 'Grid - with photos',
'type' => 'grid',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
38 =>
array (
'name' => 'Grid II.',
'type' => 'grid',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
79 =>
array (
'name' => 'Masonry grid - with header',
'type' => 'grid',
'is-active' => false,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
31 =>
array (
'name' => 'Masonry grid',
'type' => 'grid',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
54 =>
array (
'name' => 'Sidebar slider I.',
'type' => 'sidebar',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
6 =>
array (
'name' => 'Sidebar slider II.',
'type' => 'sidebar',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
7 =>
array (
'name' => 'Sidebar slider II.',
'type' => 'sidebar',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
81 =>
array (
'name' => 'Full sidebar I. - with header',
'type' => 'sidebar',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
18 =>
array (
'name' => 'Full sidebar I.',
'type' => 'sidebar',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
8 =>
array (
'name' => 'Full sidebar II.',
'type' => 'sidebar',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
9 =>
array (
'name' => 'Full sidebar II.',
'type' => 'sidebar',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
10 =>
array (
'name' => 'Full sidebar III.',
'type' => 'sidebar',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
97 =>
array (
'name' => 'Top Rated badge I.',
'type' => 'badge',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => false,
),
),
98 =>
array (
'name' => 'Top Rated badge II.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => true,
),
),
99 =>
array (
'name' => 'Top Rated badge III.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => false,
),
),
100 =>
array (
'name' => 'Top Rated badge IV.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => false,
'default-hide-date' => true,
),
),
101 =>
array (
'name' => 'Top Rated badge V.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => true,
'default-hide-date' => false,
),
),
102 =>
array (
'name' => 'Top Rated badge VI.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => true,
'default-hide-date' => true,
),
),
103 =>
array (
'name' => 'Top Rated badge VII.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => true,
'default-hide-date' => false,
),
),
104 =>
array (
'name' => 'Top Rated badge VIII.',
'type' => 'badge',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => true,
'params' =>
array (
'top-rated-badge-border' => true,
'default-hide-date' => true,
),
),
55 =>
array (
'name' => 'HTML badge I.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
11 =>
array (
'name' => 'HTML badge II.',
'type' => 'badge',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
12 =>
array (
'name' => 'HTML badge III.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
56 =>
array (
'name' => 'HTML badge IV.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
107 =>
array (
'name' => 'HTML badge V.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
22 =>
array (
'name' => 'Company badge I.',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
23 =>
array (
'name' => 'Company badge I. - with popup',
'type' => 'badge',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
57 =>
array (
'name' => 'HTML badge V.',
'type' => 'badge',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
58 =>
array (
'name' => 'HTML badge VI.',
'type' => 'badge',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
20 =>
array (
'name' => 'HTML badge III.',
'type' => 'badge',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
27 =>
array (
'name' => 'Button I.',
'type' => 'button',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
24 =>
array (
'name' => 'Button I.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
26 =>
array (
'name' => 'Button II.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
29 =>
array (
'name' => 'Button III.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
30 =>
array (
'name' => 'Button IV. - with dropdown',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
60 =>
array (
'name' => 'Button V.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
28 =>
array (
'name' => 'Button V.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
25 =>
array (
'name' => 'Button VI.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
35 =>
array (
'name' => 'Button VII.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
32 =>
array (
'name' => 'Button VII. - with popup',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
106 =>
array (
'name' => 'Button VIII.',
'type' => 'button',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
59 =>
array (
'name' => 'Button VIII.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
109 =>
array (
'name' => 'Button IX.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
61 =>
array (
'name' => 'Button X.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
110 =>
array (
'name' => 'Button X.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
62 =>
array (
'name' => 'Button XI.',
'type' => 'button',
'is-active' => false,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
111 =>
array (
'name' => 'Button XI.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
113 =>
array (
'name' => 'Button XII.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
115 =>
array (
'name' => 'Button XIII.',
'type' => 'button',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
17 =>
array (
'name' => 'Floating I.',
'type' => 'floating',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
53 =>
array (
'name' => 'Floating II.',
'type' => 'floating',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
21 =>
array (
'name' => 'Floating III.',
'type' => 'floating',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
52 =>
array (
'name' => 'Floating IV.',
'type' => 'floating',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
112 =>
array (
'name' => 'Floating V. - with popup',
'type' => 'floating',
'is-active' => true,
'is-popular' => true,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
114 =>
array (
'name' => 'Floating VI. - with popup',
'type' => 'floating',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
),
),
116 =>
array (
'name' => 'Fomo Review Widget I.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => true,
'params' =>
array (
'is-top-rated-badge' => true,
'fomo-icon' => 'platform',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-platform-block' => true,
'top-rated-badge-border' => false,
'default-hide-date' => false,
),
),
117 =>
array (
'name' => 'Fomo Review Widget II.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'platform',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-title-text' => 'RATING_TEXT_LONG',
'fomo-platform-block' => true,
),
),
120 =>
array (
'name' => 'Fomo Review Widget III.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-title-text' => '5STAR_RATING_NUMBER <u>5-star</u> PLATFORM_NAME reviews',
'fomo-platform-block' => true,
),
),
119 =>
array (
'name' => 'Fomo Review Widget IV.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-title-text' => '5STAR_RATING_NUMBER_LAST <u>5-star</u> PLATFORM_NAME reviews',
'fomo-subtitle-text' => 'in the last 30 days',
'fomo-platform-block' => true,
),
),
118 =>
array (
'name' => 'Fomo Review Widget V.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-title-text' => 'RATING_TEXT_LONG',
'fomo-subtitle-text' => 'based on RATING_NUMBER PLATFORM_NAME reviews',
'fomo-break-after-subtitle' => true,
'fomo-platform-block' => true,
),
),
121 =>
array (
'name' => 'Fomo Review Widget VI.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'profile-images',
'fomo-icon-choices' =>
array (
0 => 'profile-images',
1 => 'platform',
2 => 'fire',
3 => 'trophy',
),
'fomo-title-text' => 'RATING_TEXT_LONG',
'fomo-platform-block' => true,
'fomo-color' => '#F6BB06',
),
),
122 =>
array (
'name' => 'Fomo Custom Widget I.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'discount-4',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>20%</u> Discount Code: <u>NWA789</u>',
'fomo-subtitle-text' => '3 days left!',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
123 =>
array (
'name' => 'Fomo Custom Widget II.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'discount-2',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>20%</u> Discount only for 3 days!',
'fomo-subtitle-text' => 'Code: <u>NWA89</u>',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
124 =>
array (
'name' => 'Fomo Custom Widget III.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'discount-3',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>20%</u> Discount from first order!',
'fomo-subtitle-text' => 'Limited-time welcome gift - don\'t miss out',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
125 =>
array (
'name' => 'Fomo Custom Widget IV.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'discount-1',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>€325</u> Discount until %discount-day%.',
'fomo-subtitle-text' => 'Join our 25.000+ happy customers',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
126 =>
array (
'name' => 'Fomo Custom Widget V.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'shipping-truck',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>FREE</u> Shipping until %discount-day%.',
'fomo-subtitle-text' => 'Limited time offer - act fast!',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
127 =>
array (
'name' => 'Fomo Custom Widget VI.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'shipping-box',
'fomo-icon-choices' =>
array (
0 => 'discount-1',
1 => 'discount-2',
2 => 'discount-3',
3 => 'discount-4',
4 => 'discount-5',
5 => 'fire',
6 => 'shipping-box',
7 => 'shipping-truck',
),
'fomo-title-text' => '<u>FREE</u> Shipping Worldwide over $100',
'fomo-subtitle-text' => 'Try it. Love it. Or get your money back',
'fomo-verified-block' => false,
'fomo-custom-text' => true,
),
),
128 =>
array (
'name' => 'Fomo Counter Widget I.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'fire',
1 => 'trophy',
),
'fomo-title-text' => '%registrations% registrations IN-LAST-TIMEUNIT',
'fomo-days' =>
array (
0 => 1,
1 => 7,
2 => 30,
),
),
),
129 =>
array (
'name' => 'Fomo Counter Widget II.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'fire',
1 => 'trophy',
),
'fomo-title-text' => '%visitors% visitors IN-LAST-TIMEUNIT',
'fomo-days' =>
array (
0 => 1,
1 => 7,
2 => 30,
),
),
),
130 =>
array (
'name' => 'Fomo Counter Widget III.',
'type' => 'fomo',
'is-active' => true,
'is-popular' => false,
'is-top-rated-badge' => false,
'params' =>
array (
'fomo-icon' => 'fire',
'fomo-icon-choices' =>
array (
0 => 'fire',
1 => 'trophy',
),
'fomo-title-text' => '%online-visitors% visitors are checking this page now',
'fomo-subtitle-text-choices' =>
array (
0 => 'Don\'t miss out!',
1 => 'Order now!',
),
'trans' =>
array (
'en' =>
array (
'Don\'t miss out!' => 'Don\'t miss out!',
'Order now!' => 'Order now!',
),
'af' =>
array (
'Don\'t miss out!' => 'Moenie dit misloop nie!',
'Order now!' => 'Bestel nou!',
),
'ar' =>
array (
'Don\'t miss out!' => 'لا تفوتها!',
'Order now!' => 'اطلب الآن!',
),
'az' =>
array (
'Don\'t miss out!' => 'Qaçırmayın!',
'Order now!' => 'İndi sifariş edin!',
),
'bg' =>
array (
'Don\'t miss out!' => 'Не пропускайте!',
'Order now!' => 'Поръчай сега!',
),
'bn' =>
array (
'Don\'t miss out!' => 'মিস করবেন না!',
'Order now!' => 'এখনই অর্ডার করুন!',
),
'bs' =>
array (
'Don\'t miss out!' => 'Ne propustite!',
'Order now!' => 'Naručite odmah!',
),
'ca' =>
array (
'Don\'t miss out!' => 'No t\'ho perdis!',
'Order now!' => 'Demana ara!',
),
'cs' =>
array (
'Don\'t miss out!' => 'Nenechte si to ujít!',
'Order now!' => 'Objednejte nyní!',
),
'cy' =>
array (
'Don\'t miss out!' => 'Peidiwch â cholli allan!',
'Order now!' => 'Archebwch nawr!',
),
'da' =>
array (
'Don\'t miss out!' => 'Gå ikke glip af det!',
'Order now!' => 'Bestil nu!',
),
'de' =>
array (
'Don\'t miss out!' => 'Verpassen Sie es nicht!',
'Order now!' => 'Jetzt bestellen!',
),
'el' =>
array (
'Don\'t miss out!' => 'Μην το χάσετε!',
'Order now!' => 'Παραγγείλτε τώρα!',
),
'es' =>
array (
'Don\'t miss out!' => '¡No te lo pierdas!',
'Order now!' => '¡Ordene ahora!',
),
'et' =>
array (
'Don\'t miss out!' => 'Ära maga maha!',
'Order now!' => 'Telli kohe!',
),
'fa' =>
array (
'Don\'t miss out!' => 'از دست ندید!',
'Order now!' => 'همین حالا سفارش دهید!',
),
'fi' =>
array (
'Don\'t miss out!' => 'Älä missaa tätä!',
'Order now!' => 'Tilaa nyt!',
),
'fr' =>
array (
'Don\'t miss out!' => 'Ne manquez pas ça!',
'Order now!' => 'Commandez maintenant!',
),
'gd' =>
array (
'Don\'t miss out!' => 'Na caill a-mach air!',
'Order now!' => 'Òrdaich a-nis!',
),
'gl' =>
array (
'Don\'t miss out!' => 'Non o perdas!',
'Order now!' => 'Encarga agora!',
),
'he' =>
array (
'Don\'t miss out!' => 'אל תפספסו!',
'Order now!' => 'הזמינו עכשיו!',
),
'hi' =>
array (
'Don\'t miss out!' => 'चूकें नहीं!',
'Order now!' => 'अब ऑर्डर दें!',
),
'hr' =>
array (
'Don\'t miss out!' => 'Ne propustite!',
'Order now!' => 'Naručite odmah!',
),
'hu' =>
array (
'Don\'t miss out!' => 'Ne hagyd ki!',
'Order now!' => 'Rendelj most!',
),
'hy' =>
array (
'Don\'t miss out!' => 'Մի բաց թողեք հնարավորությունը։',
'Order now!' => 'Պատվիրեք հիմա!',
),
'id' =>
array (
'Don\'t miss out!' => 'Jangan sampai ketinggalan!',
'Order now!' => 'Pesan sekarang!',
),
'is' =>
array (
'Don\'t miss out!' => 'Ekki missa af þessu!',
'Order now!' => 'Pantaðu núna!',
),
'it' =>
array (
'Don\'t miss out!' => 'Non perdetevelo!',
'Order now!' => 'Ordina ora!',
),
'ja' =>
array (
'Don\'t miss out!' => 'お見逃しなく!',
'Order now!' => '今すぐ注文してください!',
),
'ka' =>
array (
'Don\'t miss out!' => 'არ გამოტოვოთ!',
'Order now!' => 'შეუკვეთეთ ახლავე!',
),
'kk' =>
array (
'Don\'t miss out!' => 'Жіберіп алмаңыз!',
'Order now!' => 'Қазір тапсырыс беріңіз!',
),
'ko' =>
array (
'Don\'t miss out!' => '놓치지 마세요!',
'Order now!' => '지금 주문하세요!',
),
'lt' =>
array (
'Don\'t miss out!' => 'Nepraleiskite progos!',
'Order now!' => 'Užsisakykite dabar!',
),
'lv' =>
array (
'Don\'t miss out!' => 'Nepalaidiet garām!',
'Order now!' => 'Pasūtiet tūlīt!',
),
'mk' =>
array (
'Don\'t miss out!' => 'Не пропуштајте!',
'Order now!' => 'Нарачај сега!',
),
'ms' =>
array (
'Don\'t miss out!' => 'Jangan lepaskan peluang!',
'Order now!' => 'Pesan sekarang!',
),
'nl' =>
array (
'Don\'t miss out!' => 'Mis het niet!',
'Order now!' => 'Bestel nu!',
),
'no' =>
array (
'Don\'t miss out!' => 'Ikke gå glipp av dette!',
'Order now!' => 'Bestill nå!',
),
'pl' =>
array (
'Don\'t miss out!' => 'Nie przegap!',
'Order now!' => 'Zamów teraz!',
),
'pt' =>
array (
'Don\'t miss out!' => 'Não perca!',
'Order now!' => 'Peça agora!',
),
'ro' =>
array (
'Don\'t miss out!' => 'Nu ratați!',
'Order now!' => 'Comandă acum!',
),
'ru' =>
array (
'Don\'t miss out!' => 'Не пропустите!',
'Order now!' => 'Закажите сейчас!',
),
'sk' =>
array (
'Don\'t miss out!' => 'Nenechajte si to ujsť!',
'Order now!' => 'Objednajte si teraz!',
),
'sl' =>
array (
'Don\'t miss out!' => 'Ne zamudite!',
'Order now!' => 'Naroči zdaj!',
),
'sq' =>
array (
'Don\'t miss out!' => 'Mos e humbisni!',
'Order now!' => 'Porosit tani!',
),
'sr' =>
array (
'Don\'t miss out!' => 'Не пропустите!',
'Order now!' => 'Наручите одмах!',
),
'sv' =>
array (
'Don\'t miss out!' => 'Missa inte!',
'Order now!' => 'Beställ nu!',
),
'th' =>
array (
'Don\'t miss out!' => 'อย่าพลาด!',
'Order now!' => 'สั่งซื้อเลย!',
),
'tr' =>
array (
'Don\'t miss out!' => 'Kaçırmayın!',
'Order now!' => 'Hemen sipariş verin!',
),
'uk' =>
array (
'Don\'t miss out!' => 'Не пропустіть!',
'Order now!' => 'Замовте зараз!',
),
'vi' =>
array (
'Don\'t miss out!' => 'Đừng bỏ lỡ!',
'Order now!' => 'Đặt hàng ngay!',
),
'zh' =>
array (
'Don\'t miss out!' => '不要错过!',
'Order now!' => '立即订购!',
),
),
),
),
),
);
public static $widget_styles = array (
'light-background' =>
array (
'is-active' => true,
'name' => 'Light background',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-background-large' =>
array (
'is-active' => false,
'name' => 'Light background - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'ligth-border' =>
array (
'is-active' => true,
'name' => 'Light border',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'ligth-border-3d-large' =>
array (
'is-active' => false,
'name' => 'Light border - 3D - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'ligth-border-large' =>
array (
'is-active' => false,
'name' => 'Light border - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'ligth-border-large-red' =>
array (
'is-active' => false,
'name' => 'Light border - large - red',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'drop-shadow' =>
array (
'is-active' => true,
'name' => 'Drop shadow',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'drop-shadow-large' =>
array (
'is-active' => false,
'name' => 'Drop shadow - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-minimal' =>
array (
'is-active' => true,
'name' => 'Minimal',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-minimal-large' =>
array (
'is-active' => false,
'name' => 'Minimal - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'soft' =>
array (
'is-active' => true,
'name' => 'Soft',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-clean' =>
array (
'is-active' => false,
'name' => 'Light clean',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-square' =>
array (
'is-active' => false,
'name' => 'Light square',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-background-border' =>
array (
'is-active' => false,
'name' => 'Light background border',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'blue' =>
array (
'is-active' => false,
'name' => 'Blue',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-background-large-purple' =>
array (
'is-active' => false,
'name' => 'Light background - large - purple',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-background-image' =>
array (
'is-active' => false,
'name' => 'Light background image',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-contrast' =>
array (
'is-active' => true,
'name' => 'Light contrast',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-contrast-large' =>
array (
'is-active' => false,
'name' => 'Light contrast - large',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'light-contrast-large-blue' =>
array (
'is-active' => false,
'name' => 'Light contrast - large - blue',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-background' =>
array (
'is-active' => true,
'name' => 'Dark background',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-minimal' =>
array (
'is-active' => true,
'name' => 'Minimal dark',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-border' =>
array (
'is-active' => false,
'name' => 'Dark border',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'trustindex-style' =>
array (
'is-active' => true,
'name' => 'Trustindex style',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => 'custom',
'verified-icon-color' => 'black',
),
'minimal-fill-dottie' =>
array (
'is-active' => true,
'name' => 'Minimal Fill Dottie',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-contrast' =>
array (
'is-active' => false,
'name' => 'Dark contrast',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'minimal-fill-wave' =>
array (
'is-active' => true,
'name' => 'Minimal Fill Wave',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-background-image' =>
array (
'is-active' => false,
'name' => 'Dark background image',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'luxury-fame' =>
array (
'is-active' => true,
'name' => 'Luxury Fame',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
'dark-luxury-fame' =>
array (
'is-active' => true,
'name' => 'Dark Luxury Fame',
'reviewer-photo' => true,
'hide-logos' => false,
'hide-stars' => false,
'verified-icon-color' => 'blue',
),
);
public static $widget_languages = [
'af' => 'Afrikaans',
'ar' => 'العربية',
'az' => 'Azərbaycan dili',
'bg' => 'български',
'bn' => 'বাংলা',
'bs' => 'Bosanski',
'ca' => 'Català',
'cs' => 'Čeština',
'cy' => 'Cymraeg',
'da' => 'Dansk',
'de' => 'Deutsch',
'el' => 'Ελληνικά',
'en' => 'English',
'es' => 'Español',
'et' => 'Eestlane',
'fa' => 'فارسی',
'fi' => 'Suomi',
'fr' => 'Français',
'gd' => 'Gàidhlig na h-Alba',
'gl' => 'Galego',
'he' => 'עִברִית',
'hi' => 'हिन्दी',
'hr' => 'Hrvatski',
'hu' => 'Magyar',
'hy' => 'հայերեն',
'id' => 'Bahasa Indonesia',
'is' => 'Íslensku',
'it' => 'Italiano',
'ja' => '日本',
'ka' => 'ქართული',
'kk' => 'қазақ',
'ko' => '한국어',
'lt' => 'Lietuvių',
'lv' => 'Latviešu',
'mk' => 'Македонски',
'ms' => 'Bahasa Melayu',
'nl' => 'Nederlands',
'no' => 'Norsk',
'pl' => 'Polski',
'pt' => 'Português',
'ro' => 'Română',
'ru' => 'Русский',
'sk' => 'Slovenčina',
'sl' => 'Slovenščina',
'sq' => 'Shqip',
'sr' => 'Српски',
'sv' => 'Svenska',
'th' => 'ไทย',
'tr' => 'Türkçe',
'uk' => 'Українська',
'vi' => 'Tiếng Việt',
'zh' => '汉语',
];
public static $widget_dateformats = [ 'modern', 'j F Y', 'j. F, Y', 'F j, Y', 'Y.m.d.', 'Y-m-d', 'd/m/Y', 'hide' ];
public static $widget_nameformats = array (
1 =>
array (
'id' => '1',
'sample' => 'Do not format',
'regex' => NULL,
'ucfirst' => NULL,
'toupper' => NULL,
),
2 =>
array (
'id' => '2',
'sample' => 'F Lastname',
'regex' => '/^(.)[^\\s]*\\s([^\\s]+).*$/',
'ucfirst' => true,
'toupper' => false,
),
3 =>
array (
'id' => '3',
'sample' => 'Lastname',
'regex' => '/^[^\\s]*\\s?([^\\s]+).*$/',
'ucfirst' => true,
'toupper' => false,
),
4 =>
array (
'id' => '4',
'sample' => 'Firstname L',
'regex' => '/^([^\\s]+)\\s(.).*$/',
'ucfirst' => true,
'toupper' => false,
),
5 =>
array (
'id' => '5',
'sample' => 'Firstname',
'regex' => '/^([^\\s]+).*$/',
'ucfirst' => true,
'toupper' => false,
),
6 =>
array (
'id' => '6',
'sample' => 'FIRSTNAME LASTNAME',
'regex' => '/^(.*)$/',
'ucfirst' => false,
'toupper' => true,
),
8 =>
array (
'id' => '8',
'sample' => 'Firstname Lastname',
'regex' => '/^(.*)$/',
'ucfirst' => true,
'toupper' => false,
),
9 =>
array (
'id' => '9',
'sample' => 'FL',
'regex' => '/^(.)[^\\s]*\\s*(.)?.*$/',
'ucfirst' => false,
'toupper' => true,
),
);
private static $widget_last_timeunit_texts = array (
'en' =>
array (
0 => 'in the last %d hours',
1 => 'in the last %d days',
),
'af' =>
array (
0 => 'in die laaste %d uur',
1 => 'in die laaste %d dae',
),
'ar' =>
array (
0 => 'في آخر %d ساعة',
1 => 'في آخر %d يوم',
),
'az' =>
array (
0 => 'son %d saatda',
1 => 'son %d gündə',
),
'bg' =>
array (
0 => 'през последните %d часа',
1 => 'през последните %d дни',
),
'bn' =>
array (
0 => 'গত %d ঘন্টায়',
1 => 'গত %d দিনে',
),
'bs' =>
array (
0 => 'u posljednjih %d sati',
1 => 'u posljednjih %d dana',
),
'ca' =>
array (
0 => 'en les últimes %d hores',
1 => 'en els darrers %d dies',
),
'cs' =>
array (
0 => 'v posledních %d hodinách',
1 => 'v posledních %d dnech',
),
'cy' =>
array (
0 => 'yn y %d awr ddiwethaf',
1 => 'yn y %d diwrnod diwethaf',
),
'da' =>
array (
0 => 'i de sidste %d timer',
1 => 'i de sidste %d dage',
),
'de' =>
array (
0 => 'in den letzten %d Stunden',
1 => 'in den letzten %d Tagen',
),
'el' =>
array (
0 => 'τις τελευταίες %d ώρες',
1 => 'τις τελευταίες %d ημέρες',
),
'es' =>
array (
0 => 'en las últimas %d horas',
1 => 'en los últimos %d días',
),
'et' =>
array (
0 => 'viimase %d tunni jooksul',
1 => 'viimase %d päeva jooksul',
),
'fa' =>
array (
0 => 'در %d ساعت گذشته',
1 => 'در %d روز گذشته',
),
'fi' =>
array (
0 => 'viimeisen %d tunnin aikana',
1 => 'viimeisten %d päivän aikana',
),
'fr' =>
array (
0 => 'au cours des dernières %d heures',
1 => 'au cours des %d derniers jours',
),
'gd' =>
array (
0 => 'anns na %d uairean mu dheireadh',
1 => 'anns na %d làithean mu dheireadh',
),
'gl' =>
array (
0 => 'nas últimas %d horas',
1 => 'nos últimos %d días',
),
'he' =>
array (
0 => 'ב-%d שעות האחרונות',
1 => 'ב-%d הימים האחרונים',
),
'hi' =>
array (
0 => 'पिछले %d घंटों में',
1 => 'पिछले %d दिनों में',
),
'hr' =>
array (
0 => 'u posljednjih %d sati',
1 => 'u posljednjih %d dana',
),
'hu' =>
array (
0 => 'az elmúlt %d órában',
1 => 'az elmúlt %d napban',
),
'hy' =>
array (
0 => 'վերջին %d ժամվա ընթացքում',
1 => 'վերջին %d օրվա ընթացքում',
),
'id' =>
array (
0 => 'dalam %d jam terakhir',
1 => 'dalam %d hari terakhir',
),
'is' =>
array (
0 => 'á síðustu %d klukkustundum',
1 => 'síðustu %d daga',
),
'it' =>
array (
0 => 'nelle ultime %d ore',
1 => 'negli ultimi %d giorni',
),
'ja' =>
array (
0 => '過去 %d 時間',
1 => '過去%d日間',
),
'ka' =>
array (
0 => 'ბოლო %d საათში',
1 => 'ბოლო %d დღის განმავლობაში',
),
'kk' =>
array (
0 => 'соңғы %d сағатта',
1 => 'соңғы %d күнде',
),
'ko' =>
array (
0 => '지난 %d시간 동안',
1 => '지난 %d일 동안',
),
'lt' =>
array (
0 => 'per pastarąsias %d valandas',
1 => 'per pastarąsias %d dienų',
),
'lv' =>
array (
0 => 'pēdējo %d stundu laikā',
1 => 'pēdējo %d dienu laikā',
),
'mk' =>
array (
0 => 'во последните %d часа',
1 => 'во последните %d дена',
),
'ms' =>
array (
0 => 'dalam %d jam yang lalu',
1 => 'dalam %d hari yang lalu',
),
'nl' =>
array (
0 => 'in de laatste %d uur',
1 => 'in de laatste %d dagen',
),
'no' =>
array (
0 => 'i løpet av de siste %d timene',
1 => 'i løpet av de siste %d dagene',
),
'pl' =>
array (
0 => 'w ciągu ostatnich %d godzin',
1 => 'w ciągu ostatnich %d dni',
),
'pt' =>
array (
0 => 'nas últimas %d horas',
1 => 'nos últimos %d dias',
),
'ro' =>
array (
0 => 'în ultimele %d ore',
1 => 'în ultimele %d zile',
),
'ru' =>
array (
0 => 'за последние %d часов',
1 => 'за последние %d дней',
),
'sk' =>
array (
0 => 'za posledných %d hodín',
1 => 'za posledných %d dní',
),
'sl' =>
array (
0 => 'v zadnjih %d urah',
1 => 'v zadnjih %d dneh',
),
'sq' =>
array (
0 => 'në %d orët e fundit',
1 => 'në %d ditët e fundit',
),
'sr' =>
array (
0 => 'у последњих %d сати',
1 => 'у последњих %d дана',
),
'sv' =>
array (
0 => 'under de senaste %d timmarna',
1 => 'under de senaste %d dagarna',
),
'th' =>
array (
0 => 'ในช่วง %d ชั่วโมงที่ผ่านมา',
1 => 'ในช่วง %d วันที่ผ่านมา',
),
'tr' =>
array (
0 => 'son %d saatte',
1 => 'son %d günde',
),
'uk' =>
array (
0 => 'за останні %d годин',
1 => 'за останні %d днів',
),
'vi' =>
array (
0 => 'trong %d giờ qua',
1 => 'trong %d ngày qua',
),
'zh' =>
array (
0 => '在过去 %d 小时内',
1 => '在过去 %d 天里',
),
);
private static $widget_rating_texts = array (
'en' =>
array (
0 => 'poor',
1 => 'below average',
2 => 'average',
3 => 'good',
4 => 'excellent',
),
'af' =>
array (
0 => 'arm',
1 => 'onder gemiddeld',
2 => 'gemiddeld',
3 => 'goed',
4 => 'uitstekend',
),
'ar' =>
array (
0 => 'ضعيف',
1 => 'مقبول',
2 => 'متوسط',
3 => 'جيد جدا',
4 => 'ممتاز',
),
'az' =>
array (
0 => 'kasıb',
1 => 'ortalamadan aşağı',
2 => 'orta',
3 => 'yaxşı',
4 => 'əla',
),
'bg' =>
array (
0 => 'беден',
1 => 'под средното',
2 => 'средно аритметично',
3 => 'добре',
4 => 'отлично',
),
'bn' =>
array (
0 => 'দরিদ্র',
1 => 'গড়ের নিচে',
2 => 'গড়',
3 => 'ভাল',
4 => 'চমৎকার',
),
'bs' =>
array (
0 => 'jadan',
1 => 'ispod prosjeka',
2 => 'prosjek',
3 => 'dobro',
4 => 'odličan',
),
'ca' =>
array (
0 => 'dolent',
1 => 'per sota de la mitjana',
2 => 'mitjà',
3 => 'bo',
4 => 'excel·lent',
),
'cs' =>
array (
0 => 'Slabý',
1 => 'Podprůměrný',
2 => 'Průměrný',
3 => 'Dobrý',
4 => 'Vynikající',
),
'cy' =>
array (
0 => 'gwael',
1 => 'islaw\'r cyfartaledd',
2 => 'cyffredin',
3 => 'da',
4 => 'rhagorol',
),
'da' =>
array (
0 => 'Svag',
1 => 'Under gennemsnitlig',
2 => 'Gennemsnitlig',
3 => 'God',
4 => 'Fremragende',
),
'de' =>
array (
0 => 'Schwach',
1 => 'Unterdurchschnittlich',
2 => 'Durchschnittlich',
3 => 'Gut',
4 => 'Ausgezeichnet',
),
'el' =>
array (
0 => 'Χαμηλή',
1 => 'Κάτω από τον μέσο όρο',
2 => 'Μέτρια',
3 => 'Καλή',
4 => 'Άριστη',
),
'es' =>
array (
0 => 'Flojo',
1 => 'Por debajo de lo regular',
2 => 'Regular',
3 => 'Bueno',
4 => 'Excelente',
),
'et' =>
array (
0 => 'halb',
1 => 'alla keskmise',
2 => 'keskmine',
3 => 'hea',
4 => 'suurepärane',
),
'fa' =>
array (
0 => 'فقیر',
1 => 'زیر میانگین',
2 => 'میانگین',
3 => 'خوب',
4 => 'عالی',
),
'fi' =>
array (
0 => 'Heikko',
1 => 'Keskitasoa alhaisempi',
2 => 'Keskitasoinen',
3 => 'Hyvä',
4 => 'Erinomainen',
),
'fr' =>
array (
0 => 'faible',
1 => 'moyenne basse',
2 => 'moyenne',
3 => 'bien',
4 => 'excellent',
),
'gd' =>
array (
0 => 'bochd',
1 => 'nas ìsle na a chuibheasachd',
2 => 'cuibheasach',
3 => 'math',
4 => 'sgoinneil',
),
'gl' =>
array (
0 => 'pobre',
1 => 'por debaixo da media',
2 => 'media',
3 => 'bo',
4 => 'excelente',
),
'he' =>
array (
0 => 'עני',
1 => 'מתחת לממוצע',
2 => 'מְמוּצָע',
3 => 'טוֹב',
4 => 'מְעוּלֶה',
),
'hi' =>
array (
0 => 'कमज़ोर',
1 => 'औसत से कम',
2 => 'औसत',
3 => 'अच्छा',
4 => 'अति उत्कृष्ट',
),
'hr' =>
array (
0 => 'slabo',
1 => 'ispod prosjeka',
2 => 'prosjed',
3 => 'dobro',
4 => 'odličan',
),
'hu' =>
array (
0 => 'Gyenge',
1 => 'Átlag alatti',
2 => 'Átlagos',
3 => 'Jó',
4 => 'Kiváló',
),
'hy' =>
array (
0 => 'աղքատ',
1 => 'միջինից ցածր',
2 => 'միջին',
3 => 'լավ',
4 => 'գերազանց',
),
'id' =>
array (
0 => 'miskin',
1 => 'dibawah rata-rata',
2 => 'rata-rata',
3 => 'bagus',
4 => 'bagus sekali',
),
'is' =>
array (
0 => 'fátækur',
1 => 'fyrir neðan meðallag',
2 => 'að meðaltali',
3 => 'góður',
4 => 'Æðislegt',
),
'it' =>
array (
0 => 'Scarso',
1 => 'Sotto la media',
2 => 'Medio',
3 => 'Buono',
4 => 'Eccellente',
),
'ja' =>
array (
0 => '悪い',
1 => '平均以下の',
2 => '平均',
3 => '良い',
4 => '優れた',
),
'ka' =>
array (
0 => 'ღარიბი',
1 => 'საშუალოზე დაბლა',
2 => 'საშუალო',
3 => 'კარგი',
4 => 'შესანიშნავი',
),
'kk' =>
array (
0 => 'кедей',
1 => 'орташадан төмен',
2 => 'орташа',
3 => 'жақсы',
4 => 'өте жақсы',
),
'ko' =>
array (
0 => '가난한',
1 => '평균 이하',
2 => '평균',
3 => '좋은',
4 => '훌륭한',
),
'lt' =>
array (
0 => 'vargšas',
1 => 'žemiau vidurkio',
2 => 'vidurkis',
3 => 'gerai',
4 => 'puikus',
),
'lv' =>
array (
0 => 'slikti',
1 => 'zem vidējā',
2 => 'vidēji',
3 => 'labi',
4 => 'izcili',
),
'mk' =>
array (
0 => 'Сиромашен',
1 => 'под просек',
2 => 'просек',
3 => 'Добро',
4 => 'одлично',
),
'ms' =>
array (
0 => 'miskin',
1 => 'bawah purata',
2 => 'purata',
3 => 'baik',
4 => 'cemerlang',
),
'nl' =>
array (
0 => 'Slecht',
1 => 'Onder het gemiddelde',
2 => 'Gemiddeld',
3 => 'Goed',
4 => 'Uitstekend',
),
'no' =>
array (
0 => 'Dårlig',
1 => 'Utilstrekkelig',
2 => 'Gjennomsnittlig',
3 => 'Bra',
4 => 'Utmerket',
),
'pl' =>
array (
0 => 'Słaba',
1 => 'Poniżej średniej',
2 => 'Średnia',
3 => 'Dobra',
4 => 'Doskonała',
),
'pt' =>
array (
0 => 'Fraco',
1 => 'Inferior ao médio',
2 => 'Medíocre',
3 => 'Bom',
4 => 'Excelente',
),
'ro' =>
array (
0 => 'sărac',
1 => 'sub medie',
2 => 'in medie',
3 => 'bun',
4 => 'excelent',
),
'ru' =>
array (
0 => 'Слабо',
1 => 'Ниже среднего',
2 => 'Средний',
3 => 'Хорошо',
4 => 'Отлично',
),
'sk' =>
array (
0 => 'Slabé',
1 => 'Podpriemerné',
2 => 'Priemerné',
3 => 'Dobré',
4 => 'Vynikajúce',
),
'sl' =>
array (
0 => 'slabo',
1 => 'pod povprečjem',
2 => 'povprečno',
3 => 'dobro',
4 => 'odlično',
),
'sq' =>
array (
0 => 'i varfer',
1 => 'nën mesataren',
2 => 'mesatare',
3 => 'mire',
4 => 'e shkëlqyeshme',
),
'sr' =>
array (
0 => 'Слабо',
1 => 'Испод просека',
2 => 'Просек',
3 => 'Добро',
4 => 'Oдлично',
),
'sv' =>
array (
0 => 'Dålig',
1 => 'Under genomsnittet',
2 => 'Genomsnittlig',
3 => 'Bra',
4 => 'Utmärkt',
),
'th' =>
array (
0 => 'ยากจน',
1 => 'ต่ำกว่าค่าเฉลี่ย',
2 => 'เฉลี่ย',
3 => 'ดี',
4 => 'ยอดเยี่ยม',
),
'tr' =>
array (
0 => 'Zayıf',
1 => 'Ortanın altıi',
2 => 'Orta',
3 => 'İyi',
4 => 'Mükemmel',
),
'uk' =>
array (
0 => 'погано',
1 => 'нижче середнього',
2 => 'середній',
3 => 'добре',
4 => 'відмінно',
),
'vi' =>
array (
0 => 'nghèo nàn',
1 => 'dưới mức trung bình',
2 => 'Trung bình',
3 => 'tốt',
4 => 'thông minh',
),
'zh' =>
array (
0 => '差',
1 => '不如一般',
2 => '一般',
3 => '好',
4 => '非常好',
),
);
private static $widget_rating_texts_long = array (
'en' =>
array (
0 => 'Poor rating',
1 => 'Below average rating',
2 => 'Average rating',
3 => 'Good rating',
4 => 'Excellent rating',
),
'af' =>
array (
0 => 'Swak gradering',
1 => 'Ondergemiddelde gradering',
2 => 'Gemiddelde gradering',
3 => 'Goeie gradering',
4 => 'Uitstekende gradering',
),
'ar' =>
array (
0 => 'تقييم ضعيف',
1 => 'تقييم أقل من المتوسط',
2 => 'متوسط التقييم',
3 => 'تقييم جيد',
4 => 'تقييم ممتاز',
),
'az' =>
array (
0 => 'Zəif reytinq',
1 => 'Orta reytinqdən aşağı',
2 => 'Orta reytinq',
3 => 'Yaxşı reytinq',
4 => 'Əla reytinq',
),
'bg' =>
array (
0 => 'Слаба оценка',
1 => 'Под средната оценка',
2 => 'Средна оценка',
3 => 'Добра оценка',
4 => 'Отлична оценка',
),
'bn' =>
array (
0 => 'খারাপ রেটিং',
1 => 'গড়ের নিচে রেটিং',
2 => 'গড় রেটিং',
3 => 'ভালো রেটিং',
4 => 'চমৎকার রেটিং',
),
'bs' =>
array (
0 => 'Loša ocjena',
1 => 'Ocjena ispod prosjeka',
2 => 'Prosječna ocjena',
3 => 'Dobra ocjena',
4 => 'Odlična ocjena',
),
'ca' =>
array (
0 => 'Mala puntuació',
1 => 'Valoració per sota de la mitjana',
2 => 'Valoració mitjana',
3 => 'Bona qualificació',
4 => 'Excel·lent qualificació',
),
'cs' =>
array (
0 => 'Špatné hodnocení',
1 => 'Podprůměrné hodnocení',
2 => 'Průměrné hodnocení',
3 => 'Dobré hodnocení',
4 => 'Vynikající hodnocení',
),
'cy' =>
array (
0 => 'Sgôr gwael',
1 => 'Sgôr is na\'r cyfartaledd',
2 => 'Sgôr gyfartalog',
3 => 'Sgôr dda',
4 => 'Sgôr ardderchog',
),
'da' =>
array (
0 => 'Dårlig vurdering',
1 => 'Under gennemsnitlig vurdering',
2 => 'Gennemsnitlig vurdering',
3 => 'God bedømmelse',
4 => 'Fremragende vurdering',
),
'de' =>
array (
0 => 'Schlechte Bewertung',
1 => 'Unterdurchschnittliche Bewertung',
2 => 'Durchschnittliche Bewertung',
3 => 'Gute Bewertung',
4 => 'Ausgezeichnete Bewertung',
),
'el' =>
array (
0 => 'Κακή βαθμολογία',
1 => 'Κάτω από το μέσο όρο βαθμολογία',
2 => 'Μέση βαθμολογία',
3 => 'Καλή βαθμολογία',
4 => 'Εξαιρετική βαθμολογία',
),
'es' =>
array (
0 => 'Mala calificación',
1 => 'Calificación por debajo del promedio',
2 => 'Calificación promedio',
3 => 'Buena calificación',
4 => 'Excelente calificación',
),
'et' =>
array (
0 => 'Halb hinnang',
1 => 'Alla keskmise hinnang',
2 => 'Keskmine hinnang',
3 => 'Hea hinnang',
4 => 'Suurepärane hinnang',
),
'fa' =>
array (
0 => 'رتبه‌بندی ضعیف',
1 => 'رتبه‌بندی زیر متوسط',
2 => 'میانگین امتیاز',
3 => 'رتبه خوب',
4 => 'رتبه عالی',
),
'fi' =>
array (
0 => 'Huono arvio',
1 => 'Keskimääräistä huonompi arvio',
2 => 'Keskimääräinen arvosana',
3 => 'Hyvä arvosana',
4 => 'Erinomainen arvosana',
),
'fr' =>
array (
0 => 'Mauvaise note',
1 => 'Note inférieure à la moyenne',
2 => 'Note moyenne',
3 => 'Bonne note',
4 => 'Excellente note',
),
'gd' =>
array (
0 => 'Droch rangachadh',
1 => 'Rangachadh fo ìre na cuibheasachd',
2 => 'Rangachadh cuibheasach',
3 => 'Deagh rangachadh',
4 => 'Rangachadh sàr-mhath',
),
'gl' =>
array (
0 => 'Mala cualificación',
1 => 'Clasificación por debaixo da media',
2 => 'Valoración media',
3 => 'Boa valoración',
4 => 'Excelente cualificación',
),
'he' =>
array (
0 => 'דירוג גרוע',
1 => 'דירוג מתחת לממוצע',
2 => 'דירוג ממוצע',
3 => 'דירוג טוב',
4 => 'דירוג מצוין',
),
'hi' =>
array (
0 => 'खराब रेटिंग',
1 => 'औसत से नीचे रेटिंग',
2 => 'औसत श्रेणी',
3 => 'अच्छी रेटिंग',
4 => 'उत्कृष्ट रेटिंग',
),
'hr' =>
array (
0 => 'Loša ocjena',
1 => 'Ocjena ispod prosjeka',
2 => 'Prosječna ocjena',
3 => 'Dobra ocjena',
4 => 'Izvrsna ocjena',
),
'hu' =>
array (
0 => 'Rossz értékelés',
1 => 'Átlag alatti értékelés',
2 => 'Átlagos értékelés',
3 => 'Jó értékelés',
4 => 'Kiváló értékelés',
),
'hy' =>
array (
0 => 'Վատ գնահատական',
1 => 'Միջինից ցածր գնահատական',
2 => 'Միջին գնահատական',
3 => 'Լավ գնահատական',
4 => 'Գերազանց գնահատական',
),
'id' =>
array (
0 => 'Peringkat buruk',
1 => 'Peringkat di bawah rata-rata',
2 => 'Peringkat rata-rata',
3 => 'Peringkat bagus',
4 => 'Peringkat sangat baik',
),
'is' =>
array (
0 => 'Léleg einkunn',
1 => 'Einkunn undir meðallagi',
2 => 'Meðaleinkunn',
3 => 'Góð einkunn',
4 => 'Frábær einkunn',
),
'it' =>
array (
0 => 'Valutazione scarsa',
1 => 'Valutazione inferiore alla media',
2 => 'Valutazione media',
3 => 'Buona valutazione',
4 => 'Valutazione eccellente',
),
'ja' =>
array (
0 => '低い評価',
1 => '平均以下の評価',
2 => '平均評価',
3 => '良い評価',
4 => '優れた評価',
),
'ka' =>
array (
0 => 'ცუდი რეიტინგი',
1 => 'საშუალოზე დაბალი რეიტინგი',
2 => 'საშუალო რეიტინგი',
3 => 'კარგი რეიტინგი',
4 => 'შესანიშნავი შეფასება',
),
'kk' =>
array (
0 => 'Нашар рейтинг',
1 => 'Орташа рейтингтен төмен',
2 => 'Орташа рейтинг',
3 => 'Жақсы рейтинг',
4 => 'Тамаша рейтинг',
),
'ko' =>
array (
0 => '낮은 평가',
1 => '평균 이하 평가',
2 => '평균 평점',
3 => '좋은 평가',
4 => '매우 좋음 평가',
),
'lt' =>
array (
0 => 'Prastas įvertinimas',
1 => 'Žemesnis nei vidutinis įvertinimas',
2 => 'Vidutinis įvertinimas',
3 => 'Geras įvertinimas',
4 => 'Puikus įvertinimas',
),
'lv' =>
array (
0 => 'Slikts vērtējums',
1 => 'Zem vidējā vērtējuma',
2 => 'Vidējais vērtējums',
3 => 'Labs vērtējums',
4 => 'Lielisks vērtējums',
),
'mk' =>
array (
0 => 'Лоша оценка',
1 => 'Под просечна оценка',
2 => 'Просечна оценка',
3 => 'Добра оценка',
4 => 'Одлична оценка',
),
'ms' =>
array (
0 => 'Penilaian yang buruk',
1 => 'Penilaian di bawah purata',
2 => 'Penilaian purata',
3 => 'Penilaian yang baik',
4 => 'Penilaian yang sangat baik',
),
'nl' =>
array (
0 => 'Slechte beoordeling',
1 => 'Beoordeling onder het gemiddelde',
2 => 'Gemiddelde beoordeling',
3 => 'Goede beoordeling',
4 => 'Uitstekende beoordeling',
),
'no' =>
array (
0 => 'Dårlig vurdering',
1 => 'Under gjennomsnittlig vurdering',
2 => 'Gjennomsnittlig vurdering',
3 => 'God vurdering',
4 => 'Utmerket vurdering',
),
'pl' =>
array (
0 => 'Słaba ocena',
1 => 'Ocena poniżej średniej',
2 => 'Średnia ocena',
3 => 'Dobra ocena',
4 => 'Ocena doskonała',
),
'pt' =>
array (
0 => 'Avaliação ruim',
1 => 'Classificação abaixo da média',
2 => 'Classificação média',
3 => 'Boa classificação',
4 => 'Avaliação excelente',
),
'ro' =>
array (
0 => 'Evaluare slabă',
1 => 'Evaluare sub medie',
2 => 'Evaluare medie',
3 => 'Evaluare bună',
4 => 'Evaluare excelentă',
),
'ru' =>
array (
0 => 'Плохая оценка',
1 => 'Рейтинг ниже среднего',
2 => 'Средний рейтинг',
3 => 'Хорошая оценка',
4 => 'Отличная оценка',
),
'sk' =>
array (
0 => 'Slabé hodnotenie',
1 => 'Podpriemerné hodnotenie',
2 => 'Priemerné hodnotenie',
3 => 'Dobré hodnotenie',
4 => 'Vynikajúce hodnotenie',
),
'sl' =>
array (
0 => 'Slaba ocena',
1 => 'Podpovprečna ocena',
2 => 'Povprečna ocena',
3 => 'Dobra ocena',
4 => 'Odlična ocena',
),
'sq' =>
array (
0 => 'Vlerësim i dobët',
1 => 'Vlerësim nën mesataren',
2 => 'Vlerësimi mesatar',
3 => 'Vlerësim i mirë',
4 => 'Vlerësim i shkëlqyer',
),
'sr' =>
array (
0 => 'Лоша оцена',
1 => 'Оцена испод просека',
2 => 'Просечна оцена',
3 => 'Добра оцена',
4 => 'Одлична оцена',
),
'sv' =>
array (
0 => 'Dåligt betyg',
1 => 'Under genomsnittligt betyg',
2 => 'Genomsnittligt betyg',
3 => 'Bra betyg',
4 => 'Utmärkt betyg',
),
'th' =>
array (
0 => 'คะแนนต่ำ',
1 => 'คะแนนต่ำกว่าค่าเฉลี่ย',
2 => 'คะแนนเฉลี่ย',
3 => 'เรตติ้งดี',
4 => 'เรตติ้งดีเยี่ยม',
),
'tr' =>
array (
0 => 'Düşük puan',
1 => 'Ortalamanın altında derecelendirme',
2 => 'Ortalama puan',
3 => 'İyi derecelendirme',
4 => 'Mükemmel puan',
),
'uk' =>
array (
0 => 'Поганий рейтинг',
1 => 'Рейтинг нижче середнього',
2 => 'Середній рейтинг',
3 => 'Хороший рейтинг',
4 => 'Відмінний рейтинг',
),
'vi' =>
array (
0 => 'Đánh giá kém',
1 => 'Đánh giá dưới mức trung bình',
2 => 'Đánh giá trung bình',
3 => 'Đánh giá tốt',
4 => 'Đánh giá tuyệt vời',
),
'zh' =>
array (
0 => '差评',
1 => '低于平均评分',
2 => '平均评分',
3 => '良好评价',
4 => '优秀评级',
),
);
private static $widget_verified_texts = array (
'en' => 'Verified',
'af' => 'Geverifieer',
'ar' => 'تم التحقق',
'az' => 'Doğrulanmışdır',
'bg' => 'Проверени',
'bn' => 'যাচাই',
'bs' => 'Provjereno',
'ca' => 'Verificat',
'cs' => 'Ověřená',
'cy' => 'Wedi\'i ddilysu',
'da' => 'Bekræftet',
'de' => 'Verifiziert',
'el' => 'επαληθεύτηκε',
'es' => 'Verificada',
'et' => 'Kinnitatud',
'fa' => 'تأیید شده',
'fi' => 'Vahvistettu',
'fr' => 'vérifié',
'gd' => 'Dearbhaichte',
'gl' => 'Verificado',
'he' => 'מְאוּמָת',
'hi' => 'सत्यापित',
'hr' => 'Potvrđen',
'hu' => 'Hitelesített',
'hy' => 'Ստուգված',
'id' => 'Diverifikasi',
'is' => 'Staðfesting',
'it' => 'Verificata',
'ja' => '確認済み',
'ka' => 'დამოწმებული',
'kk' => 'тексерілген',
'ko' => '검증 된',
'lt' => 'Patvirtinta',
'lv' => 'Pārbaudīts',
'mk' => 'Потврдена',
'ms' => 'Disahkan',
'nl' => 'Geverifieerd',
'no' => 'Bekreftet',
'pl' => 'Zweryfikowana',
'pt' => 'Verificada',
'ro' => 'Verificat',
'ru' => 'Проверенный',
'sk' => 'Overená',
'sl' => 'Preverjeno',
'sq' => 'Verifikuar',
'sr' => 'Проверено',
'sv' => 'Verifierad',
'th' => 'ตรวจสอบแล้ว',
'tr' => 'Doğrulanmış',
'uk' => 'Перевірено',
'vi' => 'Đã xác minh',
'zh' => '已验证',
);
private static $widget_verified_platform_texts = array (
'en' => 'Trustindex verifies that the original source of the review is %platform%.',
'af' => 'Trustindex verifieer dat die oorspronklike bron van die resensie %platform% is.',
'ar' => 'تتحقق Trustindex من أن المصدر الأصلي للمراجعة هو %platform%.',
'az' => 'Trustindex yoxlamanın orijinal mənbəyinin %platform% olduğunu təsdiqləyir.',
'bg' => 'Trustindex проверява дали оригиналният източник на прегледа е %platform%.',
'bn' => 'Trustindex যাচাই করে যে পর্যালোচনার মূল উৎস হল %platform%।',
'bs' => 'Trustindex potvrđuje da je izvorni izvor recenzije %platform%.',
'ca' => 'Trustindex verifica que la font original de la ressenya és %platform%.',
'cs' => 'Trustindex ověřuje, že původní zdroj recenze je %platform%.',
'cy' => 'Mae Trustindex yn gwirio mai ffynhonnell wreiddiol yr adolygiad yw %platform%.',
'da' => 'Trustindex verificerer, at den oprindelige kilde til anmeldelsen er %platform%.',
'de' => 'Trustindex überprüft, ob die Originalquelle der Bewertung %platform% ist.',
'el' => 'Το Trustindex επαληθεύει ότι η αρχική πηγή της κριτικής είναι %platform%.',
'es' => 'Trustindex verifica que la fuente original de la reseña sea %platform%.',
'et' => 'Trustindex kontrollib, et arvustuse algallikas on %platform%.',
'fa' => 'Trustindex تأیید می کند که منبع اصلی بازبینی %platform% است.',
'fi' => 'Trustindex vahvistaa, että arvostelun alkuperäinen lähde on %platform%.',
'fr' => 'Trustindex vérifie que la source originale de l\'avis est %platform%.',
'gd' => 'Tha Trustindex a dearbhadh gur e %platform% tùs an ath-bhreithneachaidh.',
'gl' => 'Trustindex verifica que a fonte orixinal da revisión é %platform%.',
'he' => 'Trustindex מוודא שהמקור המקורי של הסקירה הוא %platform%.',
'hi' => 'ट्रस्टइंडेक्स सत्यापित करता है कि समीक्षा का मूल स्रोत %platform% है।',
'hr' => 'Trustindex provjerava je li izvorni izvor recenzije %platform%.',
'hu' => 'A Trustindex hitelesíti, hogy a vélemény eredeti forrása %platform%.',
'hy' => 'Trustindex-ը հաստատում է, որ վերանայման սկզբնական աղբյուրը %platform% է:',
'id' => 'Trustindex memverifikasi bahwa sumber asli ulasan adalah %platform%.',
'is' => 'Trustindex sannreynir að upprunaleg uppspretta endurskoðunarinnar sé %platform%.',
'it' => 'Trustindex verifica che la fonte originale della recensione sia %platform%.',
'ja' => 'Trustindex は、レビューの元のソースが %platform% であることを確認します。',
'ka' => 'Trustindex ადასტურებს, რომ მიმოხილვის ორიგინალური წყაროა %platform%.',
'kk' => 'Trustindex шолудың бастапқы көзі %platform% екенін тексереді.',
'ko' => 'Trustindex는 리뷰의 원본 소스가 %platform% 인지 확인합니다.',
'lt' => 'Trustindex patikrina, ar pirminis apžvalgos šaltinis yra %platform%.',
'lv' => 'Trustindex apstiprina, ka atsauksmes sākotnējais avots ir %platform%.',
'mk' => 'Trustindex потврдува дека оригиналниот извор на прегледот е %platform%.',
'ms' => 'Trustindex mengesahkan bahawa sumber asal semakan adalah %platform%.',
'nl' => 'Trustindex verifieert dat de oorspronkelijke bron van de recensie %platform% is.',
'no' => 'Trustindex bekrefter at den opprinnelige kilden til anmeldelsen er %platform%.',
'pl' => 'Trustindex sprawdza, czy pierwotnym źródłem recenzji jest %platform%.',
'pt' => 'Trustindex verifica se a fonte original da avaliação é %platform%.',
'ro' => 'Trustindex verifică că sursa originală a recenziei este %platform%.',
'ru' => 'Trustindex проверяет, что первоначальным источником отзыва является %platform%.',
'sk' => 'Trustindex overuje, že pôvodný zdroj recenzie je %platform%.',
'sl' => 'Trustindex preveri, ali je izvorni vir ocene %platform%.',
'sq' => 'Trustindex verifikon që burimi origjinal i rishikimit është %platform%.',
'sr' => 'Trustindex потврђује да је оригинални извор рецензије %platform%.',
'sv' => 'Trustindex verifierar att den ursprungliga källan till recensionen är %platform%.',
'th' => 'Trustindex ตรวจสอบว่าแหล่งที่มาดั้งเดิมของรีวิวคือ %platform%',
'tr' => 'Trustindex, incelemenin orijinal kaynağının %platform% olduğunu doğrular.',
'uk' => 'Trustindex перевіряє, що вихідним джерелом відгуку є %platform%.',
'vi' => 'Trustindex xác minh rằng nguồn đánh giá ban đầu là %platform%.',
'zh' => 'Trustindex 核实该评论的原始来源是 %platform%。',
);
private static $widget_footer_filter_texts = array (
'en' =>
array (
'star' => 'Showing only RATING_STAR_FILTER star reviews',
'latest' => 'Showing our latest reviews',
),
'af' =>
array (
'star' => 'Wys tans net RATING_STAR_FILTER sterresensies',
'latest' => 'Wys ons jongste resensies',
),
'ar' =>
array (
'star' => 'يتم عرض تقييمات RATING_STAR_FILTER نجمة فقط',
'latest' => 'عرض أحدث تقييماتنا',
),
'az' =>
array (
'star' => 'Yalnız RATING_STAR_FILTER ulduzlu rəylər göstərilir',
'latest' => 'Ən son rəylərimiz göstərilir',
),
'bg' =>
array (
'star' => 'Показани са само отзиви с RATING_STAR_FILTER звезди',
'latest' => 'Показване на най-новите ни отзиви',
),
'bn' =>
array (
'star' => 'শুধুমাত্র RATING_STAR_FILTER স্টার রিভিউ দেখানো হচ্ছে',
'latest' => 'আমাদের সর্বশেষ পর্যালোচনা দেখাচ্ছে',
),
'bs' =>
array (
'star' => 'Prikazuju se samo recenzije sa RATING_STAR_FILTER zvjezdicama',
'latest' => 'Prikazujemo naše najnovije recenzije',
),
'ca' =>
array (
'star' => 'Es mostren només les ressenyes de RATING_STAR_FILTER estrelles',
'latest' => 'Es mostren les nostres ressenyes més recents',
),
'cs' =>
array (
'star' => 'Zobrazují se pouze recenze s RATING_STAR_FILTER hvězdičkami',
'latest' => 'Zobrazujeme naše nejnovější recenze',
),
'cy' =>
array (
'star' => 'Yn dangos adolygiadau seren RATING_STAR_FILTER yn unig',
'latest' => 'Yn dangos ein adolygiadau diweddaraf',
),
'da' =>
array (
'star' => 'Viser kun anmeldelser med RATING_STAR_FILTER stjerner',
'latest' => 'Viser vores seneste anmeldelser',
),
'de' =>
array (
'star' => 'Es werden nur RATING_STAR_FILTER Sternebewertungen angezeigt',
'latest' => 'Wir zeigen unsere neuesten Bewertungen',
),
'el' =>
array (
'star' => 'Εμφάνιση μόνο RATING_STAR_FILTER κριτικές με αστέρια',
'latest' => 'Εμφάνιση των τελευταίων κριτικές μας',
),
'es' =>
array (
'star' => 'Mostrando solo RATING_STAR_FILTER reseñas estrellas',
'latest' => 'Mostrando nuestras últimas reseñas',
),
'et' =>
array (
'star' => 'Kuvatakse ainult RATING_STAR_FILTER tärniga arvustused',
'latest' => 'Kuvatakse meie viimased arvustused',
),
'fa' =>
array (
'star' => 'نمایش فقط نظرات RATING_STAR_FILTER ستاره',
'latest' => 'نمایش آخرین نظرات ما',
),
'fi' =>
array (
'star' => 'Näytetään vain RATING_STAR_FILTER tähden arvostelut',
'latest' => 'Näytetään viimeisimmät arvostelut',
),
'fr' =>
array (
'star' => 'Affichage de RATING_STAR_FILTER avis étoiles uniquement',
'latest' => 'Affichage de nos derniers avis',
),
'gd' =>
array (
'star' => 'A sealltainn RATING_STAR_FILTER lèirmheasan rionnagan a-mhàin',
'latest' => 'A sealltainn na lèirmheasan as ùire againn',
),
'gl' =>
array (
'star' => 'Mostrando só RATING_STAR_FILTER comentarios de estrelas',
'latest' => 'Mostrando os nosos últimos comentarios',
),
'he' =>
array (
'star' => 'מציג רק RATING_STAR_FILTER ביקורות כוכבים',
'latest' => 'מציג את הביקורות האחרונות שלנו',
),
'hi' =>
array (
'star' => 'मैन्युअल रूप से चुनी गई समीक्षाएँ दिखाई जा रही हैं',
'latest' => 'हमारी सबसे पुरानी समीक्षाएँ दिखा रहा हूँ',
),
'hr' =>
array (
'star' => 'Prikazuju se samo recenzije s RATING_STAR_FILTER zvjezdica',
'latest' => 'Prikazuju se naše najnovije recenzije',
),
'hu' =>
array (
'star' => 'Csak RATING_STAR_FILTER csillagos vélemények láthatók',
'latest' => 'Legkorábbi véleményeink láthatók',
),
'hy' =>
array (
'star' => 'Ցուցադրվում են միայն RATING_STAR_FILTER աստղային կարծիքներ',
'latest' => 'Ցուցադրվում են մեր վերջին ակնարկները',
),
'id' =>
array (
'star' => 'Hanya menampilkan ulasan berbintang RATING_STAR_FILTER',
'latest' => 'Menampilkan ulasan terbaru kami',
),
'is' =>
array (
'star' => 'Sýnir aðeins RATING_STAR_FILTER stjörnu umsagnir',
'latest' => 'Sýnir nýjustu umsagnirnar okkar',
),
'it' =>
array (
'star' => 'Vengono visualizzate solo RATING_STAR_FILTER recensioni a stelle',
'latest' => 'Mostrando le nostre ultime recensioni',
),
'ja' =>
array (
'star' => 'RATING_STAR_FILTER の星付きレビューのみを表示しています',
'latest' => '最新のレビューを表示しています',
),
'ka' =>
array (
'star' => 'ნაჩვენებია მხოლოდ RATING_STAR_FILTER ვარსკვლავიანი მიმოხილვები',
'latest' => 'ნაჩვენებია ჩვენი უახლესი მიმოხილვები',
),
'kk' =>
array (
'star' => 'Тек RATING_STAR_FILTER жұлдызды шолулар көрсетілген',
'latest' => 'Соңғы шолуларымызды көрсету',
),
'ko' =>
array (
'star' => '별점 리뷰 RATING_STAR_FILTER 개만 표시',
'latest' => '최신 리뷰 표시',
),
'lt' =>
array (
'star' => 'Rodomi tik RATING_STAR_FILTER žvaigždučių atsiliepimais',
'latest' => 'Rodomi mūsų naujausios atsiliepimais',
),
'lv' =>
array (
'star' => 'Tiek rādītas tikai RATING_STAR_FILTER zvaigžņu atsauksmes',
'latest' => 'Tiek rādītas mūsu jaunākās atsauksmes',
),
'mk' =>
array (
'star' => 'Се прикажуваат само RATING_STAR_FILTER рецензии со ѕвезди',
'latest' => 'Се прикажуваат нашите најнови критики',
),
'ms' =>
array (
'star' => 'Menunjukkan ulasan bintang RATING_STAR_FILTER sahaja',
'latest' => 'Menunjukkan ulasan terkini kami',
),
'nl' =>
array (
'star' => 'Er worden alleen RATING_STAR_FILTER sterrecensies weergegeven',
'latest' => 'Toont onze laatste recensies',
),
'no' =>
array (
'star' => 'Viser bare RATING_STAR_FILTER stjerneanmeldelser',
'latest' => 'Viser de siste anmeldelsene våre',
),
'pl' =>
array (
'star' => 'Wyświetlanie tylko RATING_STAR_FILTER opinii w postaci gwiazdek',
'latest' => 'Wyświetlanie naszych najnowszych opinii',
),
'pt' =>
array (
'star' => 'Mostrando apenas avaliações com estrelas de RATING_STAR_FILTER',
'latest' => 'Mostrando nossas avaliações mais recentes',
),
'ro' =>
array (
'star' => 'Se afișează numai RATING_STAR_FILTER recenzii cu stele',
'latest' => 'Se afișează cele mai recente recenzii ale noastre',
),
'ru' =>
array (
'star' => 'Показаны только отзывы со звездами RATING_STAR_FILTER',
'latest' => 'Показаны наши последние отзывы',
),
'sk' =>
array (
'star' => 'Zobrazujú sa iba recenzie s RATING_STAR_FILTER hviezdičkami',
'latest' => 'Zobrazujú sa naše najnovšie recenzie',
),
'sl' =>
array (
'star' => 'Prikazane so le ocene s RATING_STAR_FILTER zvezdicami',
'latest' => 'Prikazane so naše najnovejše ocene',
),
'sq' =>
array (
'star' => 'Duke shfaqur vetëm komente RATING_STAR_FILTER yje',
'latest' => 'Duke shfaqur komentet tona më të fundit',
),
'sr' =>
array (
'star' => 'Приказују се само рецензије са RATING_STAR_FILTER звездицама',
'latest' => 'Приказујемо наше најновије рецензије',
),
'sv' =>
array (
'star' => 'Visar endast RATING_STAR_FILTER stjärnrecensioner',
'latest' => 'Visar våra senaste recensioner',
),
'th' =>
array (
'star' => 'แสดงเฉพาะบทวิจารณ์ระดับ RATING_STAR_FILTER ดาว',
'latest' => 'แสดงความคิดเห็นล่าสุดของเรา',
),
'tr' =>
array (
'star' => 'Yalnızca RATING_STAR_FILTER yıldızlı değerlendirmelere gösteriliyor',
'latest' => 'En son değerlendirmelere gösteriliyor',
),
'uk' =>
array (
'star' => 'Показано лише RATING_STAR_FILTER старих рецензії',
'latest' => 'Показано наші останні рецензії',
),
'vi' =>
array (
'star' => 'Chỉ hiển thị RATING_STAR_FILTER bài đánh giá sao',
'latest' => 'Đang hiển thị các đánh giá mới nhất của chúng tôi',
),
'zh' =>
array (
'star' => '仅显示 RATING_STAR_FILTER 星评价',
'latest' => '显示我们的最新评论',
),
);
public static $verified_platforms = array (
0 => 'Abia',
1 => 'Agoda',
2 => 'Airbnb',
3 => 'Alibaba',
4 => 'Aliexpress',
5 => 'Amazon',
6 => 'AppleAppstore',
7 => 'Bark',
8 => 'Booking',
9 => 'CarGurus',
10 => 'Classpass',
11 => 'Ebay',
12 => 'Ekomi',
13 => 'Etsy',
14 => 'Expedia',
15 => 'Fresha',
16 => 'Getyourguide',
17 => 'Hotels',
18 => 'HotelSpecials',
19 => 'Immobilienscout24',
20 => 'Indeed',
21 => 'Justdial',
22 => 'Lawyerscom',
23 => 'Martindale',
24 => 'Meilleursagents',
25 => 'Mobilede',
26 => 'OnlinePenztarca',
27 => 'Opentable',
28 => 'Peerspot',
29 => 'ProductReview',
30 => 'Realself',
31 => 'Reco',
32 => 'Resellerratings',
33 => 'ReserveOut',
34 => 'Reviewsio',
35 => 'Sitejabber',
36 => 'SoftwareAdvice',
37 => 'SourceForge',
38 => 'Szallashu',
39 => 'Talabat',
40 => 'Tandlakare',
41 => 'TheFork',
42 => 'Thumbtack',
43 => 'Tripadvisor',
44 => 'TrustedShops',
45 => 'TrustRadius',
46 => 'Vardense',
47 => 'Vrbo',
48 => 'WeddingWire',
49 => 'Whatclinic',
50 => 'Whichtrustedtraders',
51 => 'Yelp',
52 => 'Zillow',
53 => 'ZocDoc',
54 => 'Zomato',
55 => 'G2Crowd',
56 => 'FertilityIQ',
57 => 'Viator',
);
private static $widget_month_names = array (
'en' =>
array (
0 => 'January',
1 => 'February',
2 => 'March',
3 => 'April',
4 => 'May',
5 => 'June',
6 => 'July',
7 => 'August',
8 => 'September',
9 => 'October',
10 => 'November',
11 => 'December',
),
'af' =>
array (
0 => 'Januarie',
1 => 'Februarie',
2 => 'Maart',
3 => 'April',
4 => 'Mei',
5 => 'Junie',
6 => 'Julie',
7 => 'Augustus',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'Desember',
),
'ar' =>
array (
0 => 'يناير',
1 => 'فبراير',
2 => 'مارس',
3 => 'أبريل',
4 => 'مايو',
5 => 'يونيو',
6 => 'يوليه',
7 => 'أغسطس',
8 => 'سبتمبر',
9 => 'أكتوبر',
10 => 'نوفمبر',
11 => 'ديسمبر',
),
'az' =>
array (
0 => 'Yanvar',
1 => 'Fevral',
2 => 'Mart',
3 => 'Aprel',
4 => 'May',
5 => 'İyun',
6 => 'İyul',
7 => 'Avqust',
8 => 'Sentyabr',
9 => 'Oktyabr',
10 => 'Noyabr',
11 => 'Dekabr',
),
'bg' =>
array (
0 => 'Януари',
1 => 'февруари',
2 => 'Март',
3 => 'Aприл',
4 => 'май',
5 => 'юни',
6 => 'юли',
7 => 'Август',
8 => 'Септември',
9 => 'Октомври',
10 => 'Ноември',
11 => 'Декември',
),
'bn' =>
array (
0 => 'জানুয়ারি',
1 => 'ফেব্রুয়ারি',
2 => 'মার্চ',
3 => 'এপ্রিল',
4 => 'মে',
5 => 'জুন',
6 => 'জুলাই',
7 => 'আগস্ট',
8 => 'সেপ্টেম্বর',
9 => 'অক্টোবর',
10 => 'নভেম্বর',
11 => 'ডিসেম্বর',
),
'bs' =>
array (
0 => 'Januar',
1 => 'Februar',
2 => 'Mart',
3 => 'April',
4 => 'Maj',
5 => 'Jun',
6 => 'Jul',
7 => 'Avgust',
8 => 'Septembar',
9 => 'Oktobar',
10 => 'Novembar',
11 => 'Decembar',
),
'ca' =>
array (
0 => 'Gener',
1 => 'Febrer',
2 => 'Març',
3 => 'Abril',
4 => 'Maig',
5 => 'Juny',
6 => 'Juliol',
7 => 'Agost',
8 => 'Setembre',
9 => 'Octubre',
10 => 'Novembre',
11 => 'Desembre',
),
'cs' =>
array (
0 => 'Leden',
1 => 'Únor',
2 => 'Březen',
3 => 'Duben',
4 => 'Květen',
5 => 'Červen',
6 => 'Červenec',
7 => 'Srpen',
8 => 'Září',
9 => 'Říjen',
10 => 'Listopad',
11 => 'Prosinec',
),
'cy' =>
array (
0 => 'Ionawr',
1 => 'Chwefror',
2 => 'Mawrth',
3 => 'Ebrill',
4 => 'Mai',
5 => 'Mehefin',
6 => 'Gorffennaf',
7 => 'Awst',
8 => 'Medi',
9 => 'Hydref',
10 => 'Tachwedd',
11 => 'Rhagfyr',
),
'da' =>
array (
0 => 'januar',
1 => 'februar',
2 => 'marts',
3 => 'april',
4 => 'maj',
5 => 'juni',
6 => 'juli',
7 => 'august',
8 => 'september',
9 => 'oktober',
10 => 'november',
11 => 'december',
),
'de' =>
array (
0 => 'Januar',
1 => 'Februar',
2 => 'März',
3 => 'April',
4 => 'Mai',
5 => 'Juni',
6 => 'Juli',
7 => 'August',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'Dezember',
),
'el' =>
array (
0 => 'Iανουάριος',
1 => 'Φεβρουάριος',
2 => 'Μάρτιος',
3 => 'Απρίλιος',
4 => 'Μάιος',
5 => 'Iούνιος',
6 => 'Iούλιος',
7 => 'Αύγουστος',
8 => 'Σεπτέμβριος',
9 => 'Oκτώβριος',
10 => 'Νοέμβριος',
11 => 'Δεκέμβριος',
),
'es' =>
array (
0 => 'Enero',
1 => 'Febrero',
2 => 'Marzo',
3 => 'Abril',
4 => 'Mayo',
5 => 'Junio',
6 => 'Julio',
7 => 'Agosto',
8 => 'Septiembre',
9 => 'Octubre',
10 => 'Noviembre',
11 => 'Diciembre',
),
'et' =>
array (
0 => 'jaanuar',
1 => 'veebruar',
2 => 'märts',
3 => 'aprill',
4 => 'mai',
5 => 'juuni',
6 => 'juuli',
7 => 'august',
8 => 'september',
9 => 'oktoober',
10 => 'november',
11 => 'detsember',
),
'fa' =>
array (
0 => 'ژانویه',
1 => 'فوریه',
2 => 'مارس',
3 => 'آوریل',
4 => 'ممکن است',
5 => 'ژوئن',
6 => 'جولای',
7 => 'اوت',
8 => 'سپتامبر',
9 => 'اکتبر',
10 => 'نوامبر',
11 => 'دسامبر',
),
'fi' =>
array (
0 => 'Tammikuu',
1 => 'Helmikuu',
2 => 'Maaliskuu',
3 => 'Huhtikuu',
4 => 'Toukokuu',
5 => 'Kesäkuu',
6 => 'Heinäkuu',
7 => 'Elokuu',
8 => 'Syyskuu',
9 => 'Lokakuu',
10 => 'Marraskuu',
11 => 'Joulukuu',
),
'fr' =>
array (
0 => 'Janvier',
1 => 'Février',
2 => 'Mars',
3 => 'Avril',
4 => 'Mai',
5 => 'Juin',
6 => 'Juillet',
7 => 'Août',
8 => 'Septembre',
9 => 'Octobre',
10 => 'Novembre',
11 => 'Décembre',
),
'gd' =>
array (
0 => 'am Faoilleach',
1 => 'an Gearran',
2 => 'am Màrt',
3 => 'an Giblean',
4 => 'an Cèitean',
5 => 'an t-Ògmhios',
6 => 'an t-luchar',
7 => 'an Lùnastal',
8 => 'an t-Sultain',
9 => 'an Dàmhair',
10 => 'an t-Samhain',
11 => 'an Dùbhlachd',
),
'gl' =>
array (
0 => 'Xaneiro',
1 => 'Febreiro',
2 => 'Marzo',
3 => 'Abril',
4 => 'Maio',
5 => 'Xuño',
6 => 'Xullo',
7 => 'Agosto',
8 => 'Setembro',
9 => 'Outubro',
10 => 'Novembro',
11 => 'Decembro',
),
'he' =>
array (
0 => 'ינואר',
1 => 'פברואר',
2 => 'מרץ',
3 => 'אפריל',
4 => 'מאי',
5 => 'יוני',
6 => 'יולי',
7 => 'אוגוסט',
8 => 'ספטמבר',
9 => 'אוקטובר',
10 => 'נובמבר',
11 => 'דצמבר',
),
'hi' =>
array (
0 => 'जनवरी',
1 => 'फ़रवरी',
2 => 'मार्च',
3 => 'अप्रैल',
4 => 'मई',
5 => 'जून',
6 => 'जुलाई',
7 => 'अगस्त',
8 => 'सितंबर',
9 => 'अक्टूबर',
10 => 'नवंबर',
11 => 'दिसंबर',
),
'hr' =>
array (
0 => 'Siječanj',
1 => 'Veljača',
2 => 'Ožujak',
3 => 'Travanj',
4 => 'Svibanj',
5 => 'Lipanj',
6 => 'Srpanj',
7 => 'Kolovoz',
8 => 'Rujan',
9 => 'Listopad',
10 => 'Studeni',
11 => 'Prosinac',
),
'hu' =>
array (
0 => 'Január',
1 => 'Február',
2 => 'Március',
3 => 'Április',
4 => 'Május',
5 => 'Június',
6 => 'Július',
7 => 'Augusztus',
8 => 'Szeptember',
9 => 'Október',
10 => 'November',
11 => 'December',
),
'hy' =>
array (
0 => 'Հունվար',
1 => 'փետրվար',
2 => 'մարտ',
3 => 'ապրիլ',
4 => 'մայիս',
5 => 'հունիս',
6 => 'հուլիս',
7 => 'օգոստոս',
8 => 'սեպտեմբեր',
9 => 'հոկտեմբեր',
10 => 'նոյեմբեր',
11 => 'դեկտեմբեր',
),
'id' =>
array (
0 => 'Januari',
1 => 'Februari',
2 => 'Maret',
3 => 'April',
4 => 'Mei',
5 => 'Juni',
6 => 'Juli',
7 => 'Agustus',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'Desember',
),
'is' =>
array (
0 => 'Janúar',
1 => 'Febrúar',
2 => 'Mars',
3 => 'April',
4 => 'Maí',
5 => 'Júní',
6 => 'Júlí',
7 => 'Ágúst',
8 => 'September',
9 => 'Október',
10 => 'Nóvember',
11 => 'Desember',
),
'it' =>
array (
0 => 'Gennaio',
1 => 'Febbraio',
2 => 'Marzo',
3 => 'Aprile',
4 => 'Maggio',
5 => 'Giugno',
6 => 'Luglio',
7 => 'Agosto',
8 => 'Settembre',
9 => 'Ottobre',
10 => 'Novembre',
11 => 'Dicembre',
),
'ja' =>
array (
0 => '1月',
1 => '2月',
2 => '3月',
3 => '4月',
4 => '5月',
5 => '6月',
6 => '7月',
7 => '8月',
8 => '9月',
9 => '10月',
10 => '11月',
11 => '12月',
),
'ka' =>
array (
0 => 'იანვარი',
1 => 'თებერვალი',
2 => 'მარტი',
3 => 'აპრილი',
4 => 'მაისი',
5 => 'ივნისი',
6 => 'ივლისი',
7 => 'აგვისტო',
8 => 'სექტემბერი',
9 => 'ოქტომბერი',
10 => 'ნოემბერი',
11 => 'დეკემბერი',
),
'kk' =>
array (
0 => 'қаңтар',
1 => 'ақпан',
2 => 'наурыз',
3 => 'сәуір',
4 => 'мамыр',
5 => 'маусым',
6 => 'шілде',
7 => 'тамыз',
8 => 'қыркүйек',
9 => 'қазан',
10 => 'қараша',
11 => 'желтоқсан',
),
'ko' =>
array (
0 => '일월',
1 => '이월',
2 => '삼월',
3 => '사월',
4 => '오월',
5 => '유월',
6 => '칠월',
7 => '팔월',
8 => '구월',
9 => '시월',
10 => '십일월',
11 => '십이월',
),
'lt' =>
array (
0 => 'Sausis',
1 => 'Vasaris',
2 => 'Kovas',
3 => 'Balandis',
4 => 'Gegužė',
5 => 'Birželis',
6 => 'Liepa',
7 => 'Rugpjūtis',
8 => 'Rugsėjis',
9 => 'Spalis',
10 => 'Lapkritis',
11 => 'Gruodis',
),
'lv' =>
array (
0 => 'Janvāris',
1 => 'Februāris',
2 => 'Marts',
3 => 'Aprīlis',
4 => 'Maijs',
5 => 'Jūnijs',
6 => 'Jūlijs',
7 => 'Augusts',
8 => 'Septembris',
9 => 'Oktobris',
10 => 'Novembris',
11 => 'Decembris',
),
'mk' =>
array (
0 => 'Jануари',
1 => 'февруари',
2 => 'март',
3 => 'април',
4 => 'мај',
5 => 'јуни',
6 => 'јули',
7 => 'август',
8 => 'септември',
9 => 'октомври',
10 => 'ноември',
11 => 'декември',
),
'ms' =>
array (
0 => 'Januari',
1 => 'Februari',
2 => 'Mac',
3 => 'April',
4 => 'Mei',
5 => 'Jun',
6 => 'Julai',
7 => 'Ogos',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'Disember',
),
'nl' =>
array (
0 => 'Januari',
1 => 'Februari',
2 => 'Maart',
3 => 'April',
4 => 'Mei',
5 => 'Juni',
6 => 'Juli',
7 => 'Augustus',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'December',
),
'no' =>
array (
0 => 'Januar',
1 => 'Februar',
2 => 'Mars',
3 => 'April',
4 => 'Mai',
5 => 'Juni',
6 => 'Juli',
7 => 'August',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'Desember',
),
'pl' =>
array (
0 => 'Styczeń',
1 => 'Luty',
2 => 'Marzec',
3 => 'Kwiecień',
4 => 'Maj',
5 => 'Czerwiec',
6 => 'Lipiec',
7 => 'Sierpień',
8 => 'Wrzesień',
9 => 'Październik',
10 => 'Listopad',
11 => 'Grudzień',
),
'pt' =>
array (
0 => 'Janeiro',
1 => 'Fevereiro',
2 => 'Março',
3 => 'Abril',
4 => 'Maio',
5 => 'Junho',
6 => 'Julho',
7 => 'Agosto',
8 => 'Setembro',
9 => 'Outubro',
10 => 'Novembro',
11 => 'Dezembro',
),
'ro' =>
array (
0 => 'Ianuarie',
1 => 'Februarie',
2 => 'Martie',
3 => 'Aprilie',
4 => 'Mai',
5 => 'Iunie',
6 => 'Iulie',
7 => 'August',
8 => 'Septembrie',
9 => 'Octombrie',
10 => 'Noiembrie',
11 => 'Decembrie',
),
'ru' =>
array (
0 => 'январь',
1 => 'февраль',
2 => 'март',
3 => 'апрель',
4 => 'май',
5 => 'июнь',
6 => 'июль',
7 => 'август',
8 => 'сентябрь',
9 => 'октябрь',
10 => 'ноябрь',
11 => 'декабрь',
),
'sk' =>
array (
0 => 'Január',
1 => 'Február',
2 => 'Marec',
3 => 'Apríl',
4 => 'Máj',
5 => 'Jún',
6 => 'Júl',
7 => 'August',
8 => 'September',
9 => 'Október',
10 => 'November',
11 => 'December',
),
'sl' =>
array (
0 => 'Januar',
1 => 'Februar',
2 => 'Marec',
3 => 'April',
4 => 'Maj',
5 => 'Junij',
6 => 'Julij',
7 => 'Avgust',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'December',
),
'sq' =>
array (
0 => 'Janar',
1 => 'Shkurt',
2 => 'Mars',
3 => 'Prill',
4 => 'Maj',
5 => 'Qershor',
6 => 'Korrik',
7 => 'Gusht',
8 => 'Shtator',
9 => 'Tetor',
10 => 'Nëntor',
11 => 'Dhjetor',
),
'sr' =>
array (
0 => 'Јануар',
1 => 'Фебруар',
2 => 'Март',
3 => 'Април',
4 => 'Mај',
5 => 'Јуни',
6 => 'Јул',
7 => 'Август',
8 => 'Cептембар',
9 => 'Октобар',
10 => 'Новембар',
11 => 'Децембар',
),
'sv' =>
array (
0 => 'Januari',
1 => 'Februari',
2 => 'Mars',
3 => 'April',
4 => 'Maj',
5 => 'Juni',
6 => 'Juli',
7 => 'Augusti',
8 => 'September',
9 => 'Oktober',
10 => 'November',
11 => 'December',
),
'th' =>
array (
0 => 'มกราคม',
1 => 'กุมภาพันธ์',
2 => 'มีนาคม',
3 => 'เมษายน',
4 => 'พฤษภาคม',
5 => 'มิถุนายน',
6 => 'กรกฎาคม',
7 => 'สิงหาคม',
8 => 'กันยายน',
9 => 'ตุลาคม',
10 => 'พฤศจิกายน',
11 => 'ธันวาคม',
),
'tr' =>
array (
0 => 'Ocak',
1 => 'Şubat',
2 => 'Mart',
3 => 'Nisan',
4 => 'Mayis',
5 => 'Haziran',
6 => 'Temmuz',
7 => 'Ağustos',
8 => 'Eylül',
9 => 'Ekim',
10 => 'Kasım',
11 => 'Aralık',
),
'uk' =>
array (
0 => 'Січня',
1 => 'Лютий',
2 => 'Березень',
3 => 'квітень',
4 => 'травень',
5 => 'червень',
6 => 'липень',
7 => 'серпень',
8 => 'вересень',
9 => 'жовтень',
10 => 'листопад',
11 => 'грудень',
),
'vi' =>
array (
0 => 'tháng một',
1 => 'tháng hai',
2 => 'tháng ba',
3 => 'tháng tư',
4 => 'tháng năm',
5 => 'tháng sáu',
6 => 'tháng bảy',
7 => 'tháng tám',
8 => 'tháng chín',
9 => 'tháng mười',
10 => 'tháng mười một',
11 => 'tháng mười hai',
),
'zh' =>
array (
0 => '一月',
1 => '二月',
2 => '三月',
3 => '四月',
4 => '五月',
5 => '六月',
6 => '七月',
7 => '八月',
8 => '九月',
9 => '十月',
10 => '十一月',
11 => '十二月',
),
);
private static $dot_separated_languages = array (
0 => 'ar',
1 => 'en',
2 => 'es',
3 => 'ms',
4 => 'ga',
5 => 'hi',
6 => 'iw',
7 => 'jp',
8 => 'ko',
9 => 'mi',
10 => 'mt',
11 => 'ne',
12 => 'si',
13 => 'th',
14 => 'tl',
15 => 'ur',
16 => 'zh',
);
public static $widget_date_format_locales = array (
'en' => '%d %s ago|today|day|days|week|weeks|month|months|year|years',
'af' => '%d %s gelede|vandag|dag|dae|week|weke|maand|maande|jaar|jaar',
'ar' => '%d %s مضى|اليوم|يوم|أيام|أسبوع|أسابيع|شهر|أشهر|سنة|سنوات',
'az' => '%d %s əvvəl|bu gün|gün|gün|həftə|həftə|ay|ay|il|il',
'bg' => 'преди %d %s|днес|ден|дни|седмица|седмици|месец|месеца|година|години',
'bn' => '%d %s আগে|আজ|দিন|দিন|সপ্তাহ|সপ্তাহ|মাস|মাস|বছর|বছর',
'bs' => 'prije %d %s|danas|dan|dana|sedmicu|sedmica|mjesec|mjeseci|godinu|godina',
'ca' => 'fa %d %s|avui|dia|dies|setmana|setmanes|mes|mesos|any|anys',
'cs' => 'před %d %s|dnes|dnem|dny|týdnem|týdny|měsícem|měsíci|rokem|roky',
'cy' => '%d %s yn ôl|heddiw|diwrnod|diwrnod|wythnos|wythnosau|mis|mis|flwyddyn|flynyddoedd',
'da' => '%d %s siden|i dag|dag|dage|uge|uger|måned|måneder|år|år',
'de' => 'vor %d %s|Heute|Tag|Tagen|Woche|Wochen|Monat|Monaten|Jahr|Jahren',
'el' => 'πριν από %d %s|σήμερα|ημέρα|ημέρες|εβδομάδα|εβδομάδες|μήνα|μήνες|χρόνο|χρόνια',
'es' => 'hace %d %s|hoy|día|días|semana|semanas|mes|meses|año|años',
'et' => '%d %s tagasi|täna|päev|päeva|nädal|nädalat|kuu|kuud|aasta|aastat',
'fa' => '%d %s قبل|امروز|روز|روز|هفته|هفته|ماه|ماه|سال|سال',
'fi' => '%d %s sitten|tänään|päivä|päivää|viikko|viikkoa|kuukausi|kuukautta|vuosi|vuotta',
'fr' => 'il y a %d %s|aujourd\'hui|jour|jours|semaine|semaines|mois|mois|année|ans',
'gd' => '%d %s air ais|an diugh|latha|làithean|seachdain|seachdainean|mìos|mìosan|bliadhna|bliadhna',
'gl' => 'hai %d %s|hoxe|día|días|semana|semanas|mes|meses|ano|anos',
'he' => '%d לפני %s|היום|יום|ימים|שבוע|שבועות|חודש|חודשים|שנה|שנים',
'hi' => '%d %s पहले|आज|दिन|दिन|सप्ताह|सप्ताह|महीने|महीने|वर्ष|वर्ष',
'hr' => 'prije %d %s|danas|dan|dana|tjedan|tjedana|mjesec|mjeseci|godinu|godina',
'hu' => '%d %s|ma|napja|napja|hete|hete|hónapja|hónapja|éve|éve',
'hy' => '%d %s առաջ|այսօր|օր|օր|շաբաթ|շաբաթ|ամիս|ամիս|տարի|տարի',
'id' => '%d %s lalu|hari ini|hari|hari yang|minggu|minggu yang|bulan|bulan yang|tahun|tahun yang',
'is' => 'fyrir %d %s|í dag|degi|dögum|viku|vikum|mánuði|mánuðum|ári|árum',
'it' => '%d %s fa|oggi|giorno|giorni|settimana|settimane|mese|mesi|anno|anni',
'ja' => '%d %s 前|今日|日|日|週間|週間|か月|か月|年|年',
'ka' => '%d %s წინ|დღეს|დღის|დღის|კვირის|კვირის|თვის|თვის|წლის|წლის',
'kk' => '%d %s бұрын|бүгін|күн|күн|апта|апта|ай|ай|жыл|жыл',
'ko' => '%d %s 전|오늘|일|일|주|주|월|월|년|년',
'lt' => 'prieš %d %s|šiandien|dieną|dienų|savaitę|savaites|mėnesį|mėnesių|metų|metų',
'lv' => '%d pirms %s|šodien|dienā|dienās|nedēļā|nedēļās|mēnesī|mēnešos|gadā|gados',
'mk' => 'пред %d %s|денес|ден|дена|недела|недели|месец|месеци|година|години',
'ms' => '%d %s lalu|hari ini|hari|hari|minggu|minggu|bulan|bulan|tahun|tahun',
'nl' => '%d %s geleden|vandaag|dag|dagen|week|weken|maand|maanden|jaar|jaar',
'no' => '%d %s siden|i dag|dag|dager|uke|uker|måned|måneder|år|år',
'pl' => '%d %s temu|dziś|dzień|dni|tydzień|tygodni|miesiąc|miesięcy|rok|lat',
'pt' => '%d %s atrás|hoje|dia|dias|semana|semanas|mês|meses|ano|anos',
'ro' => 'acum %d %s|astăzi|zi|zile|săptămână|săptămâni|lună|luni|an|ani',
'ru' => '%d %s назад|сегодня|день|дней|неделю|недель|месяц|месяцев|год|лет',
'sk' => 'pred %d %s|dnes|dňom|dňami|týždňom|týždňami|mesiacom|mesiacmi|rokom|rokmi',
'sl' => 'pred %d %s|danes|dnevom|dnevi|tednom|tedni|mesecem|meseci|letom|leti',
'sq' => '%d %s më parë|sot|ditë|ditë|javë|javë|muaj|muaj|vit|vit',
'sr' => 'пре %d %s|данас|дан|дана|недељу|недеље|месец|месеци|године|година',
'sv' => '%d %s sedan|i dag|dag|dagar|vecka|veckor|månad|månader|år|år',
'th' => '%d %s ที่แล้ว|วันนี้|วัน|วัน|สัปดาห์|สัปดาห์|เดือน|เดือน|ปี|ปี',
'tr' => '%d %s önce|bugün|gün|gün|hafta|hafta|ay|ay|yıl|yıl',
'uk' => '%d %s тому|сьогодні|день|днів|тиждень|тижнів|місяць|місяців|рік|років',
'vi' => '%d %s trước|hôm nay|ngày|ngày|tuần|tuần|tháng|tháng|năm|năm',
'zh' => '%d %s 前|今天|天|天|周|周|个月|个月|年|年',
);
public static $widget_top_rated_titles = array (
'Apartment' =>
array (
'en' => 'Top Rated <br /> Apartment %date%',
'af' => 'Topgegradeerde <br /> woonstel %date%',
'ar' => 'شقة <br />الأعلى تقييمًا %date%',
'az' => 'Ən Reytinqli <br /> Mənzil %date%',
'bg' => 'Най-високо оценен <br /> апартамент %date%',
'bn' => 'শীর্ষ রেটেড <br /> অ্যাপার্টমেন্ট %date%',
'bs' => 'Najbolje ocijenjen <br /> stan %date%',
'ca' => 'Millor valorat <br /> Apartament %date%',
'cs' => 'Nejlépe hodnocený <br /> apartmán %date%',
'cy' => 'Fflat â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> lejlighed %date%',
'de' => 'Bestbewertete <br /> Wohnung %date%',
'el' => 'Διαμέρισμα με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Apartamento mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> korter %date%',
'fa' => 'آپارتمان با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> huoneisto %date%',
'fr' => 'Appartement le <br /> mieux noté %date%',
'gd' => 'Apartment le <br /> inbhe as àirde %date%',
'gl' => 'Apartamento mellor <br /> valorado %date%',
'he' => 'דירה בדירוג <br />הגבוה ביותר %date%',
'hi' => 'शीर्ष रेटेड <br /> अपार्टमेंट %date%',
'hr' => 'Najbolje ocijenjen <br /> stan %date%',
'hu' => 'Kiválóra értékelt <br /> apartman %date%',
'hy' => 'Ամենաբարձր վարկանիշով <br /> բնակարան %date% թ',
'id' => 'Apartemen dengan <br /> Nilai Tertinggi %date%',
'is' => 'Íbúð með <br /> hæstu einkunn %date%',
'it' => 'Appartamento più <br /> votato %date%',
'ja' => 'トップ評価の <br />アパート%date%',
'ka' => 'ყველაზე რეიტინგული <br /> ბინა %date%',
'kk' => 'Ең жоғары <br /> бағаланған пәтер %date%',
'ko' => '%date%년 최고 <br /> 등급 아파트',
'lt' => 'Geriausiai įvertintas <br /> %date% m. butas',
'lv' => 'Augstāk novērtēts <br /> Dzīvoklis %date%',
'mk' => 'Највисоко оценет <br /> стан за %date% година',
'ms' => 'Pangsapuri <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> appartement %date%',
'no' => 'Topprangert <br /> leilighet %date%',
'pl' => 'Najwyżej oceniane <br /> mieszkanie %date%',
'pt' => 'Apartamento mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat apartament %date%',
'ru' => 'Самый рейтинговый <br /> Квартира %date% года',
'sk' => 'Najlepšie hodnotený <br /> apartmán v roku %date%',
'sl' => 'Najbolje ocenjeno <br /> stanovanje %date%',
'sq' => 'Apartament me vlerësim <br /> më të lartë %date%',
'sr' => 'Најбоље оцењен <br /> стан %date%',
'sv' => 'Topprankad <br /> lägenhet %date%',
'th' => 'อพาร์ทเมนต์ <br /> ติดอันดับยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Daire %date%',
'uk' => 'Квартира з найвищим <br /> рейтингом %date%',
'vi' => 'Căn hộ được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 公寓 %date%',
),
'Bar' =>
array (
'en' => 'Top Rated <br /> Bar %date%',
'af' => 'Topgegradeerde <br /> kroeg %date%',
'ar' => 'الشريط <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Bar %date%',
'bg' => 'Най-високо оценен <br /> бар %date%',
'bn' => 'শীর্ষ রেটযুক্ত <br /> বার %date%',
'bs' => 'Najbolje ocijenjeni <br /> bar %date%',
'ca' => 'Millor valorat <br /> Bar %date%',
'cs' => 'Nejlépe hodnocený <br /> bar %date%',
'cy' => 'Bar â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> bar %date%',
'de' => 'Bestbewertete <br /> Bar %date%',
'el' => 'Μπαρ με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Barra mejor <br /> valorada %date%',
'et' => 'Kõrgeimalt hinnatud <br /> baar %date%',
'fa' => 'بار با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> baari %date%',
'fr' => 'Barre la <br /> mieux notée %date%',
'gd' => 'Bàr le <br /> inbhe as àirde %date%',
'gl' => 'Bar mellor <br /> valorado %date%',
'he' => 'בר <br />המדורג מוביל %date%',
'hi' => 'टॉप रेटेड <br /> बार %date%',
'hr' => 'Najbolje ocijenjeni <br /> bar %date%',
'hu' => 'Kiválóra értékelt <br /> bár %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող բար %date% թ',
'id' => 'Bar dengan <br /> Nilai Tertinggi %date%',
'is' => 'Hæsta einkunn <br /> bar %date%',
'it' => 'Bar più <br /> votato del %date%',
'ja' => 'トップ評価の <br />バー%date%',
'ka' => 'ყველაზე რეიტინგული <br /> ბარი %date%',
'kk' => 'Ең жоғары <br /> бағаланған жолақ %date%',
'ko' => '%date%년 최고 <br /> 등급 바',
'lt' => 'Geriausiai įvertintas <br /> %date% m. baras',
'lv' => 'Augstāk novērtēts <br /> Bārs %date%',
'mk' => 'Најдобро оценет <br /> бар %date% година',
'ms' => 'Bar Penilaian <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> staaf %date%',
'no' => 'Topprangert <br /> bar %date%',
'pl' => 'Najwyżej oceniany <br /> bar %date%',
'pt' => 'Barra mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat bar %date%',
'ru' => 'Самый рейтинговый <br /> бар %date% года',
'sk' => 'Najlepšie hodnotený <br /> bar %date%',
'sl' => 'Najbolje ocenjen <br /> bar %date%',
'sq' => 'Bar me vlerësim <br /> më të lartë %date%',
'sr' => 'Најбоље оцењени <br /> бар %date%',
'sv' => 'Topprankad <br /> bar %date%',
'th' => 'บาร์ <br /> เรทสูงสุด %date%',
'tr' => 'En Çok Oy Alan <br /> Çubuk %date%',
'uk' => 'Бар з найвищим <br /> рейтингом %date%',
'vi' => 'Thanh được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 酒吧 %date%',
),
'Cafe' =>
array (
'en' => 'Top Rated <br /> Cafe %date%',
'af' => 'Topgegradeerde <br /> kafee %date%',
'ar' => 'المقهى <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Kafe %date%',
'bg' => 'Най-високо оценено <br /> кафене %date% г',
'bn' => 'শীর্ষ রেটেড <br /> ক্যাফে %date%',
'bs' => 'Najbolje ocijenjen <br /> kafić %date%',
'ca' => 'Millor valorat <br /> Cafeteria %date%',
'cs' => 'Nejlépe hodnocená <br /> kavárna %date%',
'cy' => 'Caffi o\'r <br /> Radd Flaenaf %date%',
'da' => 'Bedst bedømte <br /> cafe %date%',
'de' => 'Bestbewertetes <br /> Café %date%',
'el' => 'Κορυφαία βαθμολογία <br /> Cafe %date%',
'es' => 'Café mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> kohvik %date%',
'fa' => 'کافه با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> kahvila %date%',
'fr' => 'Café le <br /> mieux noté %date%',
'gd' => 'Cafaidh le <br /> inbhe as àirde %date%',
'gl' => 'Café mellor <br /> valorado %date%',
'he' => 'בית קפה עם הדירוג <br />הגבוה ביותר %date%',
'hi' => 'टॉप रेटेड <br /> कैफ़े %date%',
'hr' => 'Najbolje ocijenjeni <br /> kafić %date%',
'hu' => 'Kiválóra értékelt <br /> kávézó %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող Սրճարան %date%',
'id' => 'Kafe dengan <br /> Nilai Tertinggi %date%',
'is' => 'Kaffihús með <br /> hæstu einkunn %date%',
'it' => 'Il caffè più <br /> votato del %date%',
'ja' => 'トップ評価の <br />カフェ%date%',
'ka' => 'ყველაზე რეიტინგული <br /> კაფე %date%',
'kk' => 'Ең жоғары <br /> бағаланған кафе %date%',
'ko' => '%date%년 최고 <br /> 평점 카페',
'lt' => 'Geriausiai įvertinta <br /> %date% m. kavinė',
'lv' => 'Augstāk novērtēts <br /> Kafejnīca %date%',
'mk' => 'Најдобро оценет <br /> Кафе %date% година',
'ms' => 'Kafe <br /> Tertinggi %date%',
'nl' => 'Best beoordeeld <br /> café %date%',
'no' => 'Topprangert <br /> kafé %date%',
'pl' => 'Najwyżej oceniana <br /> kawiarnia %date%',
'pt' => 'Café mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat cafe %date%',
'ru' => 'Самый рейтинговый <br /> Кафе %date% года',
'sk' => 'Najlepšie hodnotená <br /> kaviareň v roku %date%',
'sl' => 'Najbolje ocenjena <br /> kavarna %date%',
'sq' => 'Kafeneja më e <br /> vlerësuar %date%',
'sr' => 'Најбоље оцењени <br /> кафић %date%',
'sv' => 'Topprankade <br /> kafé %date%',
'th' => 'คาเฟ่ <br /> ยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Kafe %date%',
'uk' => 'Кафе з найвищим <br /> рейтингом %date% року',
'vi' => 'Quán cà phê được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 咖啡厅 %date%',
),
'Clinic' =>
array (
'en' => 'Top Rated <br /> Clinic %date%',
'af' => 'Topgegradeerde <br /> kliniek %date%',
'ar' => 'العيادة <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Klinika %date%',
'bg' => 'Най-високо оценена <br /> клиника %date% г',
'bn' => 'শীর্ষ রেটেড <br /> ক্লিনিক %date%',
'bs' => 'Najbolje ocijenjena <br /> klinika %date%',
'ca' => 'Millor valorat <br /> Clínica %date%',
'cs' => 'Nejlépe hodnocená <br /> klinika %date%',
'cy' => 'Clinig â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> klinik %date%',
'de' => 'Bestbewertete <br /> Klinik %date%',
'el' => 'Κλινική με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Clínica mejor <br /> valorada %date%',
'et' => 'Kõrgeimalt hinnatud <br /> kliinik %date%',
'fa' => 'کلینیک با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> klinikka %date%',
'fr' => 'Clinique la <br /> mieux notée %date%',
'gd' => 'Clionaig le <br /> inbhe as àirde %date%',
'gl' => 'Clínica mellor <br /> valorada %date%',
'he' => 'המרפאה <br />המדורגת ביותר %date%',
'hi' => 'शीर्ष रेटेड <br /> क्लिनिक %date%',
'hr' => 'Najbolje ocijenjena <br /> klinika %date%',
'hu' => 'Kiválóra értékelt <br /> klinika %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող կլինիկա %date%',
'id' => 'Klinik dengan <br /> Nilai Tertinggi %date%',
'is' => 'Hæstu einkunnir <br /> heilsugæslustöðvar %date%',
'it' => 'Clinica più <br /> votata %date%',
'ja' => 'トップ評価の <br />クリニック%date%',
'ka' => 'ყველაზე რეიტინგული <br /> კლინიკა %date% წელი',
'kk' => 'Ең жоғары <br /> бағаланған клиника %date%',
'ko' => '%date%년 최고 <br /> 등급 클리닉',
'lt' => 'Geriausiai įvertinta <br /> klinika %date% m',
'lv' => 'Augstāk novērtēts <br /> Klīnika %date%',
'mk' => 'Најдобро оценета <br /> клиника %date% година',
'ms' => 'Klinik <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> kliniek %date%',
'no' => 'Topprangert <br /> klinikk %date%',
'pl' => 'Najwyżej oceniana <br /> klinika %date%',
'pt' => 'Clínica mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat clinică %date%',
'ru' => 'Самый рейтинговый <br /> Клиника %date% года',
'sk' => 'Najlepšie hodnotená <br /> klinika %date%',
'sl' => 'Najbolje ocenjena <br /> klinika %date%',
'sq' => 'Klinika më e <br /> vlerësuar %date%',
'sr' => 'Најбоље оцењена <br /> клиника %date%',
'sv' => 'Topprankad <br /> klinik %date%',
'th' => 'คลินิก <br /> ยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Klinik %date%',
'uk' => 'клініка з найвищим <br /> рейтингом %date%',
'vi' => 'Phòng khám được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 诊所 %date%',
),
'Hotel' =>
array (
'en' => 'Top Rated <br /> Hotel %date%',
'af' => 'Topgegradeerde <br /> hotel %date%',
'ar' => 'الفندق <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Otel %date%',
'bg' => 'Най-високо оценен <br /> хотел %date% г',
'bn' => 'শীর্ষ রেটেড <br /> হোটেল %date%',
'bs' => 'Najbolje ocijenjeni <br /> hotel %date%',
'ca' => 'Millor valorat <br /> Hotel %date%',
'cs' => 'Nejlépe hodnocený <br /> hotel %date%',
'cy' => 'Gwesty â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> hotel %date%',
'de' => 'Bestbewertetes <br /> Hotel %date%',
'el' => 'Ξενοδοχείο με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Hotel mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> hotell %date%',
'fa' => 'هتل با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> hotelli %date%',
'fr' => 'Hôtel le <br /> mieux noté en %date%',
'gd' => 'Taigh-òsta aig an <br /> ìre as àirde %date%',
'gl' => 'Hotel mellor <br /> valorado en %date%',
'he' => 'המלון בעל הדירוג <br />הגבוה ביותר לשנת %date%',
'hi' => 'शीर्ष रेटेड <br /> होटल %date%',
'hr' => 'Najbolje ocijenjeni <br /> hotel %date%',
'hu' => 'Kiválóra értékelt <br /> szálláshely %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող հյուրանոց %date%',
'id' => 'Hotel dengan <br /> Nilai Tertinggi %date%',
'is' => 'Hæsta einkunn <br /> hótel %date%',
'it' => 'Hotel con le migliori <br /> valutazioni nel %date%',
'ja' => 'トップ評価の <br />ホテル%date%',
'ka' => 'ყველაზე რეიტინგული <br /> სასტუმრო %date%',
'kk' => 'Ең жоғары <br /> бағаланған қонақ үй %date%',
'ko' => '%date%년 최고 <br /> 등급 호텔',
'lt' => 'Geriausiai įvertintas <br /> viešbutis %date% m',
'lv' => 'Augstāk novērtēts <br /> Viesnīca %date%',
'mk' => 'Највисоко оценет <br /> хотел за %date% година',
'ms' => 'Hotel Penilaian <br /> Teratas %date%',
'nl' => 'Best beoordeelde <br /> hotel %date%',
'no' => 'Topprangert <br /> hotell %date%',
'pl' => 'Najwyżej oceniany <br /> hotel %date%',
'pt' => 'Hotéis mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat hotel %date%',
'ru' => 'Самый рейтинговый <br /> отель %date% года',
'sk' => 'Najlepšie hodnotený <br /> hotel v roku %date%',
'sl' => 'Najbolje ocenjen <br /> hotel %date%',
'sq' => 'Hoteli më i <br /> vlerësuar %date%',
'sr' => 'Најбоље оцењен <br /> хотел %date%',
'sv' => 'Topprankade <br /> hotell %date%',
'th' => 'โรงแรม <br /> ยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Otel %date%',
'uk' => 'готель з найвищим <br /> рейтингом %date%',
'vi' => 'Khách sạn được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 酒店 %date%',
),
'Provider' =>
array (
'en' => 'Top Rated <br /> Provider %date%',
'af' => 'Topgegradeerde <br /> verskaffer %date%',
'ar' => 'المزود <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Provayder %date%',
'bg' => 'Най-високо оценен <br /> доставчик %date% г',
'bn' => 'শীর্ষ রেট <br /> প্রদানকারী %date%',
'bs' => 'Najbolje ocijenjeni <br /> provajder %date%',
'ca' => 'Millor valorat <br /> Proveïdor %date%',
'cs' => 'Nejlépe hodnocený <br /> poskytovatel %date%',
'cy' => 'Darparwr â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> udbyder %date%',
'de' => 'Bestbewerteter <br /> Anbieter %date%',
'el' => 'Πάροχος με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Proveedor mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> teenusepakkuja %date%',
'fa' => 'ارائه دهنده با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> palveluntarjoaja %date%',
'fr' => 'Fournisseur le <br /> mieux noté en %date%',
'gd' => 'Solaraiche le <br /> inbhe as àirde %date%',
'gl' => 'Provedor mellor <br /> valorado %date%',
'he' => 'הספק <br />המדורג מוביל %date%',
'hi' => 'शीर्ष रेटेड <br /> प्रदाता %date%',
'hr' => 'Najbolje ocijenjeni <br /> pružatelj usluga %date%',
'hu' => 'Kiválóra értékelt <br /> szolgáltató %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող մատակարար %date%',
'id' => 'Penyedia Nilai <br /> Tertinggi %date%',
'is' => 'Hæst metinn <br /> veitandi %date%',
'it' => 'Fornitore più <br /> votato %date%',
'ja' => 'トップ評価の <br />プロバイダー%date%',
'ka' => 'ყველაზე რეიტინგული <br /> პროვაიდერი %date%',
'kk' => 'Ең жоғары <br /> бағаланған провайдер %date%',
'ko' => '%date%년 최고 <br /> 등급 제공업체',
'lt' => 'Geriausiai įvertintas <br /> teikėjas %date% m',
'lv' => 'Augstāk novērtēts <br /> Pakalpojumu sniedzējs %date%',
'mk' => 'Најдобро оценет <br /> провајдер за %date% година',
'ms' => 'Penyedia Penilaian <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> aanbieder %date%',
'no' => 'Topprangert <br /> leverandør %date%',
'pl' => 'Najwyżej oceniany <br /> dostawca %date%',
'pt' => 'Provedor mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat furnizor %date%',
'ru' => 'Самый рейтинговый <br /> провайдер %date% года.',
'sk' => 'Najlepšie hodnotený <br /> poskytovateľ v roku %date%',
'sl' => 'Najbolje ocenjeni <br /> ponudnik %date%',
'sq' => 'Ofruesi më i <br /> vlerësuar për %date%',
'sr' => 'Најбоље оцењени <br /> провајдер %date%',
'sv' => 'Topprankad <br /> leverantör %date%',
'th' => 'ผู้ให้บริการ <br /> ที่ได้รับคะแนนสูงสุดปี %date%',
'tr' => 'En Çok Oy Alan <br /> Sağlayıcısı %date%',
'uk' => 'постачальник з найвищим <br /> рейтингом %date%',
'vi' => 'Nhà cung cấp được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 提供商 %date%',
),
'Restaurant' =>
array (
'en' => 'Top Rated <br /> Restaurant %date%',
'af' => 'Topgegradeerde <br /> restaurant %date%',
'ar' => 'المطعم <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Restoran %date%',
'bg' => 'Най-високо оценен <br /> ресторант %date% г',
'bn' => 'শীর্ষ রেটিং <br /> রেস্তোরাঁ %date%',
'bs' => 'Najbolje ocijenjen <br /> restoran %date%',
'ca' => 'Millor valorat <br /> Restaurant %date%',
'cs' => 'Nejlépe hodnocená <br /> restaurace %date%',
'cy' => 'Bwyty â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> restaurant %date%',
'de' => 'Bestbewertetes <br /> Restaurant %date%',
'el' => 'Εστιατόριο με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Restaurante mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> restoran %date%',
'fa' => 'رستوران با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> ravintola %date%',
'fr' => 'Restaurant le <br /> mieux noté en %date%',
'gd' => 'Taigh-bìdh leis an <br /> ìre as àirde %date%',
'gl' => 'Restaurante mellor <br /> valorado en %date%',
'he' => 'המסעדה <br />המדורגת ביותר %date%',
'hi' => 'शीर्ष रेटेड <br /> रेस्तरां %date%',
'hr' => 'Najbolje ocijenjeni <br /> restoran %date%',
'hu' => 'Kiválóra értékelt <br /> étterem %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող ռեստորան %date% թ',
'id' => 'Restoran dengan <br /> Nilai Tertinggi %date%',
'is' => 'Veitingastaður með <br /> hæstu einkunn %date%',
'it' => 'Ristorante più <br /> votato %date%',
'ja' => 'トップ評価の <br />レストラン%date%',
'ka' => 'ყველაზე რეიტინგული <br /> რესტორანი %date% წელი',
'kk' => 'Ең жоғары <br /> бағаланған мейрамхана %date%',
'ko' => '%date%년 최고 <br /> 평점 레스토랑',
'lt' => 'Geriausiai įvertintas <br /> %date% m. restoranas',
'lv' => 'Augstāk novērtēts <br /> Restorāns %date%',
'mk' => 'Најдобро оценет <br /> ресторан %date% година',
'ms' => 'Restoran Penarafan <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> restaurant %date%',
'no' => 'Topprangert <br /> restaurant %date%',
'pl' => 'Najwyżej oceniana <br /> restauracja %date%',
'pt' => 'Restaurante mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat restaurant %date%',
'ru' => 'Самый рейтинговый <br /> Ресторан %date% года',
'sk' => 'Najlepšie hodnotená <br /> reštaurácia v roku %date%',
'sl' => 'Najbolje ocenjena <br /> restavracija %date%',
'sq' => 'Restorant me vlerësim <br /> më të lartë %date%',
'sr' => 'Најбоље оцењен <br /> ресторан %date%',
'sv' => 'Topprankad <br /> restaurang %date%',
'th' => 'ร้านอาหาร <br /> ยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Restoran %date%',
'uk' => 'Ресторан з найвищим <br /> рейтингом %date% року',
'vi' => 'Nhà hàng được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 餐厅 %date%',
),
'Service' =>
array (
'en' => 'Top Rated <br /> Service %date%',
'af' => 'Topgegradeerde <br /> diens %date%',
'ar' => 'الخدمة <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Xidmət %date%',
'bg' => 'Най-високо оценена <br /> услуга %date% г',
'bn' => 'সেরা রেটেড <br /> পরিষেবা %date%',
'bs' => 'Najbolje ocijenjena <br /> usluga %date%',
'ca' => 'Millor valorat <br /> Servei %date%',
'cs' => 'Nejlépe hodnocená <br /> služba %date%',
'cy' => 'Gwasanaeth o\'r <br /> Radd Flaenaf %date%',
'da' => 'Bedst bedømte <br /> service %date%',
'de' => 'Bestbewerteter <br /> Service %date%',
'el' => 'Υπηρεσία με κορυφαία <br /> βαθμολογία %date%',
'es' => 'Servicio mejor <br /> valorado %date%',
'et' => 'Kõrgeimalt hinnatud <br /> teenus %date%',
'fa' => 'خدمات با <br />رتبه برتر %date%',
'fi' => 'Parhaiksi arvioitu <br /> palvelu %date%',
'fr' => 'Service le <br /> mieux noté %date%',
'gd' => 'Seirbheis aig an <br /> ìre as àirde %date%',
'gl' => 'Servizo mellor <br /> valorado %date%',
'he' => 'השירות <br />המדורג ביותר %date%',
'hi' => 'सर्वोच्च रेटेड <br /> सेवा %date%',
'hr' => 'Najbolje ocijenjena <br /> usluga %date%',
'hu' => 'Kiválóra értékelt <br /> szolgáltatás %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող ծառայություն %date%',
'id' => 'Layanan Nilai <br /> Tertinggi %date%',
'is' => 'Hæsta einkunn <br /> þjónusta %date%',
'it' => 'Servizio più <br /> votato %date%',
'ja' => 'トップ評価の <br />サービス%date%',
'ka' => 'ყველაზე რეიტინგული <br /> სერვისი %date%',
'kk' => 'Ең жоғары <br /> бағаланған қызмет %date%',
'ko' => '%date%년 최고 <br /> 평점 서비스',
'lt' => 'Geriausiai įvertinta <br /> %date% m. paslauga',
'lv' => 'Augstāk novērtēts <br /> Apkalpošana %date%',
'mk' => 'Најдобро оценет <br /> сервис за %date% година',
'ms' => 'Perkhidmatan <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> service %date%',
'no' => 'Topprangert <br /> tjeneste %date%',
'pl' => 'Najwyżej oceniana <br /> usługa %date%',
'pt' => 'Serviço mais <br /> bem avaliado em %date%',
'ro' => 'Cel mai bine <br /> cotat serviciu %date%',
'ru' => 'Самый рейтинговый <br /> сервис %date% года',
'sk' => 'Najlepšie hodnotená <br /> služba %date%',
'sl' => 'Najbolje ocenjena <br /> storitev %date%',
'sq' => 'Shërbimi më i <br /> vlerësuar %date%',
'sr' => 'Најбоље оцењена <br /> услуга %date%',
'sv' => 'Topprankad <br /> tjänst %date%',
'th' => 'บริการ <br /> ยอดนิยมปี %date%',
'tr' => 'En Çok Oy Alan <br /> Hizmet %date%',
'uk' => 'сервіс з найвищим <br /> рейтингом %date%',
'vi' => 'Dịch vụ được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 服务 %date%',
),
'Webshop' =>
array (
'en' => 'Top Rated <br /> Webshop %date%',
'af' => 'Topgegradeerde <br /> webwinkel %date%',
'ar' => 'متجر الويب <br />الأعلى تقييمًا لعام %date%',
'az' => 'Ən Reytinqli <br /> Veb Mağaza %date%',
'bg' => 'Най-високо оценен <br /> уеб магазин %date% г',
'bn' => 'সেরা রেটেড <br /> ওয়েবশপ %date%',
'bs' => 'Najbolje ocijenjena <br /> web trgovina %date%',
'ca' => 'Millor valorat <br /> Botiga en línia %date%',
'cs' => 'Nejlépe hodnocený <br /> internetový obchod roku %date%',
'cy' => 'Gwefan â\'r <br /> sgôr uchaf %date%',
'da' => 'Bedst bedømte <br /> webshop %date%',
'de' => 'Bestbewerteter <br /> Webshop %date%',
'el' => 'Κορυφαία βαθμολογία <br /> webshop %date%',
'es' => 'Tienda web mejor <br /> valorada %date%',
'et' => 'Kõrgeimalt hinnatud <br /> veebipood %date%',
'fa' => 'متجر الويب <br />الأعلى تقييمًا لعام %date%',
'fi' => 'Parhaiksi arvioitu <br /> verkkokauppa %date%',
'fr' => 'Boutique en ligne la <br /> mieux notée en %date%',
'gd' => 'Bùth lìn aig an <br /> ìre as àirde %date%',
'gl' => 'Tenda web mellor <br /> valorada %date%',
'he' => 'חנות אינטרנט <br />בדירוג הגבוה ביותר %date%',
'hi' => 'टॉप रेटेड <br /> वेबशॉप %date%',
'hr' => 'Najbolje ocijenjeni <br /> webshop %date%',
'hu' => 'Kiválóra értékelt <br /> webáruház %date%',
'hy' => 'Ամենաբարձր վարկանիշ <br /> ունեցող վեբ խանութ %date% թ',
'id' => 'Toko Web dengan <br /> Nilai Tertinggi %date%',
'is' => 'Vefverslun með <br /> hæstu einkunn %date%',
'it' => 'Il negozio online più <br /> votato del %date%',
'ja' => 'トップ評価の <br />ウェブショップ%date%',
'ka' => 'ყველაზე რეიტინგული <br /> ვებ მაღაზია %date%',
'kk' => 'Ең жоғары <br /> бағаланған веб-дүкен %date%',
'ko' => '%date%년 최고 <br /> 평점 웹숍',
'lt' => 'Geriausiai įvertinta <br /> internetinė parduotuvė %date% m',
'lv' => 'Augstāk novērtēts <br /> Interneta veikals %date%',
'mk' => 'Најдобро оценет <br /> веб-продавница %date% година',
'ms' => 'Kedai Web Penilaian <br /> Tertinggi %date%',
'nl' => 'Best beoordeelde <br /> webshop %date%',
'no' => 'Topprangert <br /> nettbutikk %date%',
'pl' => 'Najwyżej oceniany <br /> sklep internetowy %date%',
'pt' => 'Loja virtual mais <br /> bem avaliada em %date%',
'ro' => 'Cel mai bine <br /> cotat magazin web %date%',
'ru' => 'Самый рейтинговый <br /> Интернет-магазин %date% года',
'sk' => 'Najlepšie hodnotený <br /> internetový obchod v roku %date%',
'sl' => 'Najbolje ocenjena <br /> spletna trgovina %date%',
'sq' => 'Dyqani në internet më i <br /> vlerësuar për %date%',
'sr' => 'Најбоље оцењена <br /> веб продавница %date%',
'sv' => 'Topprankad <br /> webbshop %date%',
'th' => 'เว็บช็อป <br /> ยอดนิยมประจำปี %date%',
'tr' => 'En Çok Oy Alan <br /> İnternet Mağazası %date%',
'uk' => 'веб-магазину з найвищим <br /> рейтингом %date%',
'vi' => 'Webshop được xếp <br /> hạng hàng đầu năm %date%',
'zh' => '评分最高的 <br /> 网店 %date%',
),
);
public static $widget_reply_by_texts = array (
'en' => 'Owner\'s reply',
'af' => 'Antwoord deur eienaar',
'ar' => 'الرد من قبل المالك',
'az' => 'Sahibi tərəfindən cavab',
'bg' => 'Отговор от собственика',
'bn' => 'মালিক দ্বারা উত্তর',
'bs' => 'Odgovor vlasnika',
'ca' => 'Resposta del propietari',
'cs' => 'Odpověď majitele',
'cy' => 'Ateb gan y perchennog',
'da' => 'Svar fra ejer',
'de' => 'Antwort des Eigentümers',
'el' => 'Απάντηση από τον ιδιοκτήτη',
'es' => 'Respuesta del propietario',
'et' => 'Vastus omanikult',
'fa' => 'پاسخ توسط مالک',
'fi' => 'Vastaus omistajalta',
'fr' => 'Réponse du propriétaire',
'gd' => 'Freagairt leis an t-sealbhadair',
'gl' => 'Resposta do propietario',
'he' => 'תשובה מאת הבעלים',
'hi' => 'स्वामी द्वारा उत्तर',
'hr' => 'Odgovor vlasnika',
'hu' => 'Válasz a tulajdonostól',
'hy' => 'Պատասխանել սեփականատիրոջ կողմից',
'id' => 'Balasan dari pemilik',
'is' => 'Svar frá eiganda',
'it' => 'Risposta dal proprietario',
'ja' => 'オーナーからの返信',
'ka' => 'პასუხი მფლობელის მიერ',
'kk' => 'Иесінің жауабы',
'ko' => '소유자의 답변',
'lt' => 'Atsakymas iš savininko',
'lv' => 'Īpašnieka atbilde',
'mk' => 'Одговор од сопственикот',
'ms' => 'Balas oleh pemilik',
'nl' => 'Antwoord van eigenaar',
'no' => 'Svar fra eier',
'pl' => 'Odpowiedź właściciela',
'pt' => 'Resposta do proprietário',
'ro' => 'Răspunsul proprietarului',
'ru' => 'Ответ владельца',
'sk' => 'Odpoveď od vlastníka',
'sl' => 'Odgovor lastnika',
'sq' => 'Përgjigje nga pronari',
'sr' => 'Одговор власника',
'sv' => 'Svar från ägaren',
'th' => 'ตอบโดยเจ้าของ',
'tr' => 'Sahibinden cevap',
'uk' => 'Відповідь власника',
'vi' => 'Trả lời của chủ sở hữu',
'zh' => '版主回覆',
);
private static $page_urls = array (
'facebook' => 'https://www.facebook.com/%page_id%',
'google' => 'https://www.google.com/maps/search/?api=1&query=Google&query_place_id=%page_id%',
'tripadvisor' => 'https://www.tripadvisor.com/%page_id%',
'yelp' => 'https://www.yelp.com/biz/%25page_id%25',
'booking' => 'https://www.booking.com/hotel/%page_id%',
'amazon' => 'https://www.amazon.%domain%/sp?seller=%page_id%',
'arukereso' => 'https://www.arukereso.hu/stores/%page_id%/#velemenyek',
'airbnb' => 'https://www.airbnb.com/rooms/%page_id%',
'hotels' => 'https://hotels.com/%page_id%',
'opentable' => 'https://www.opentable.com/%page_id%',
'foursquare' => 'https://foursquare.com/v/%25page_id%25',
'capterra' => 'https://www.capterra.%page_id%',
'szallashu' => 'https://szallas.hu/%page_id%?#rating',
'thumbtack' => 'https://www.thumbtack.com/%page_id%',
'expedia' => 'https://www.expedia.com/%page_id%',
'zillow' => 'https://www.zillow.com/profile/%page_id%/#reviews',
'wordpressPlugin' => 'https://www.wordpress.org/plugins/%page_id%',
'aliexpress' => 'https://www.aliexpress.com/store/%page_id%',
'alibaba' => 'https://%page_id%.en.alibaba.com',
'sourceForge' => 'https://sourceforge.net/software/product/%page_id%/',
'ebay' => 'https://www.ebay.com/fdbk/feedback_profile/%page_id%',
);
public function getPageUrl()
{
if (!isset(self::$page_urls[ $this->getShortName() ])) {
return "";
}
$pageDetails = $this->getPageDetails();
if (!$pageDetails) {
return "";
}
$pageId = $pageDetails['id'];
$domain = "";
$url = str_replace([ '%domain%', '%page_id%', '%25page_id%25' ], [ $domain, $pageId, $pageId ], self::$page_urls[ $this->getShortName() ]);
if ($this->getGoogleType($pageId) === 'shop') {
$url = 'https://customerreviews.google.com/v/merchant?q=' . $pageId;
}
return $url;
}
private function getDefaultCompanyAvatarUrl()
{
return 'https://cdn.trustindex.io/companies/default_avatar.jpg';
}
private function getGoogleType($pageId)
{
return preg_match('/&c=\w+&v=\d+/', $pageId) ? 'shop' : 'map';
}
private function getReviewPageUrl()
{
$pageDetails = $this->getPageDetails();
if (!$pageDetails) {
return "";
}
$pageId = $pageDetails['id'];
if ($this->getGoogleType($pageId) === 'shop') {
return 'https://customerreviews.google.com/v/merchant?q=' . $pageId;
} else {
return 'https://admin.trustindex.io/api/googleReview?place-id=' . $pageId;
}
}
private function getReviewWriteUrl()
{
$pageDetails = $this->getPageDetails();
if (!$pageDetails) {
return "";
}
$pageId = $pageDetails['id'];
if ($this->getGoogleType($pageId) === 'shop') {
return 'https://customerreviews.google.com/v/merchant?q=' . $pageId;
} else {
return 'https://admin.trustindex.io/api/googleWriteReview?place-id=' . $pageId;
}
}
public function getReviewHtml($review)
{
$html = $review->text;
if ($review->text) {
$html = $this->parseReviewText($review->text);
}
if (isset($review->highlight) && $review->highlight) {
$tmp = explode(',', $review->highlight);
$start = (int)$tmp[0];
$length = (int)$tmp[1];
$html = mb_substr($html, 0, $start) . '<mark class="ti-highlight">' . mb_substr($html, $start, $length) . '</mark>' . mb_substr($html, $start + $length, mb_strlen($html));
/* format <mark></mark> tags in other tags
* like:
* <strong><mark>...</strong>...</mark>....
* to:
* <strong><mark>...</mark></strong><mark>...</mark>....
*/
preg_match('/<mark class="ti-highlight">(.*)<\/mark>/Us', $html, $matches);
if (isset($matches[1])) {
$replaced_content = preg_replace('/(<\/?[^>]+>)/U', '</mark>$1<mark class="ti-highlight">', $matches[1]);
$html = str_replace($matches[0], '<mark class="ti-highlight">' . $replaced_content . '</mark>', $html);
}
}
return $html;
}
private function parseReviewText($text)
{
return wp_kses_post(preg_replace('/\r\n|\r|\n/', "\n", trim(html_entity_decode($text, ENT_HTML5 | ENT_QUOTES))));
}
private function getProfileImageUrl($imageUrl, $layoutId, $sizeMultiply = 1) {
$size = $this->getProfileImageSize($layoutId) * $sizeMultiply;
$imageUrl = preg_replace('/([=-])(?:s\d+|w\d+-h\d+)(-|$)/', "$1w$size-h$size$2", $imageUrl);
return $imageUrl;
}
private function getProfileImageSize($layoutId)
{
if (in_array($layoutId, [36,37,38,39,44])) {
return 64;
}
return 40;
}
private function getHeaderProfileImageSize($layoutId)
{
return 65;
}
public function renderWidgetFrontend($tiPublicId = null)
{
$this->enqueueLoaderScript();
if ($tiPublicId) {
$tiPublicId = preg_replace('/[^a-zA-Z0-9]/', '', $tiPublicId);
}
$preContent = "";
$attributes = ['data-src' => 'https://cdn.trustindex.io/loader.js?'.$tiPublicId];
if (!$tiPublicId) {
$pageDetails = $this->getPageDetails();
$styleId = (int)$this->getWidgetOption('style-id');
if (self::is_amp_active() && self::is_amp_enabled()) {
return $this->frontEndErrorForAdmins(__('Free plugin features are unavailable with AMP plugin.', 'wp-reviews-plugin-for-google'));
}
if (self::$widget_templates['templates'][$styleId]['is-top-rated-badge'] && (float)$pageDetails['rating_score'] < self::$topRatedMinimumScore) {
/* translators: %s: min score (4.5) */
$text = sprintf(__('Our exclusive "Top Rated" badge is awarded to service providers with a rating of %s and above.', 'wp-reviews-plugin-for-google'), self::$topRatedMinimumScore)
.'<br />'
.'<a href="'.admin_url('admin.php?page='.$this->get_plugin_slug().'/settings.php&tab=free-widget-configurator&step=2').'">'.__('Please select another widget', 'wp-reviews-plugin-for-google').'.</a>';
return $this->frontEndErrorForAdmins($text);
}
if ($reviews = $this->getReviewsForWidgetHtml()) {
$this->increaseViews();
$templateId = 'trustindex-'.$this->getShortName().'-widget-html';
$attributes['data-src'] .= 'wp-widget';
$attributes['data-template-id'] = $templateId;
$preContent = '<pre class="ti-widget" style="display: none"><template id="'.esc_attr($templateId).'">'.$this->getWidgetHtml($reviews);
$preContent = preg_replace('/<img (.*)src="([^"]+)"(.*)\/?>/U', '<trustindex-image $1data-imgurl="$2"$3></trustindex-image>', $preContent);
$preContent = str_replace('srcset="', 'data-imgurlset="', $preContent);
if (is_file($this->getCssFile()) && !get_option($this->get_option_name('load-css-inline'), 0)) {
$attributes['data-css-url'] = $this->getCssUrl().'?'.filemtime($this->getCssFile());
}
$preContent .= '</template></pre>';
} else {
/* translators: %s: Platform name */
$text = sprintf(__('There are no reviews on your %s platform.', 'wp-reviews-plugin-for-google'), ucfirst($this->getShortName()));
return $this->frontEndErrorForAdmins($text);
}
}
$attributesHtml = implode(' ', array_map(function($attribute, $value) {
return esc_attr($attribute).'="'.esc_attr($value).'"';
}, array_keys($attributes), $attributes));
return $preContent.'<div '.$attributesHtml.'></div>';
}
public function renderWidgetAdmin($isDemoReviews = false, $isForceDemoReviews = false, $previewData = null)
{
$this->widgetOptionDefaultOverride = [];
if ($previewData) {
$this->widgetOptions['style-id'] = $previewData['style-id'];
$this->widgetOptions['scss-set'] = $previewData['set-id'];
$this->widgetOptions['review-content'] = "";
$fileName = $previewData['style-id'].'-'.$previewData['set-id'].'.css';
wp_enqueue_style('trustindex-widget-preview-'.$fileName, "https://cdn.trustindex.io/assets/widget-presetted-css/v2/$fileName", [], true);
if (isset($previewData['verified-by-trustindex']) && $previewData['verified-by-trustindex']) {
$this->widgetOptionDefaultOverride['verified-by-trustindex'] = 1;
}
}
$reviews = $this->getReviewsForWidgetHtml(true, $isForceDemoReviews, (bool)$previewData);
if (!$reviews) {
return self::get_alertbox('error', __('You do not have reviews with the current filters. <br />Change your filters if you would like to display reviews on your page!', 'wp-reviews-plugin-for-google'));
}
$html = $this->getWidgetHtml($reviews, (bool)$previewData, true);
if (!$previewData) {
if (is_file($this->getCssFile()) && !$this->isElementorEditing()) {
wp_enqueue_style('trustindex-widget-editor', $this->getCssUrl(), [], filemtime($this->getCssFile()));
} else {
$html .= '<style type="text/css">'.get_option($this->get_option_name('css-content')).'</style>';
}
}
if ($this->isElementorEditing()) {
// phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
$html .= '<script type="text/javascript" src="https://cdn.trustindex.io/loader.js"></script>';
} else {
$this->enqueueLoaderScript();
}
return $html;
}
public function renderNameFormat($name, $formatId = null)
{
if (!$formatId) {
$formatId = $this->getWidgetOption('nameformat');
}
if (!isset(self::$widget_nameformats[$formatId])) {
return $name;
}
$format = self::$widget_nameformats[$formatId];
if (!$format['regex']) {
return $name;
}
$result = preg_replace($format['regex'], '$1 $2', $name);
if ($format['ucfirst']) {
$result = ucfirst($result);
}
if ($format['toupper']) {
$result = function_exists('mb_strtoupper') ? mb_strtoupper($result) : strtoupper($result);
}
return $result;
}
public function enqueueLoaderScript()
{
if (wp_script_is('trustindex-loader-js', 'registered')) {
wp_enqueue_script('trustindex-loader-js');
} else {
wp_enqueue_script('trustindex-loader-js', 'https://cdn.trustindex.io/loader.js', [], true, [
'strategy' => 'async',
'in_footer' => true,
]);
}
}
private $templateCache = null;
private function getWidgetHtml($reviews, $isPreview = false, $isAdmin = false)
{
$styleId = (int)$this->getWidgetOption('style-id');
$setId = $this->getWidgetOption('scss-set');
$content = $this->getWidgetOption('review-content');
$language = $this->getWidgetOption('lang', false, $isPreview);
if (!$content || strpos($content, '<!-- R-LIST -->') === false) {
if (!$this->templateCache) {
add_action('http_api_curl', function($handle) {
// phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_setopt
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
// phpcs:ignore WordPress.WP.AlternativeFunctions.curl_curl_setopt
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
}, 10);
if (strlen($language) > 3) {
$language = 'en';
}
$response = wp_remote_get("https://cdn.trustindex.io/widget-assets/template/v2/$language.json", [ 'timeout' => 300 ]);
if (is_wp_error($response)) {
// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
return $this->frontEndErrorForAdmins(__('Could not download the template for the widget.<br />Please reload the page.<br />If the problem persists, please write an email to support@trustindex.io.', 'wp-reviews-plugin-for-google') .'<br /><br />'. print_r($response, true));
}
$this->templateCache = json_decode($response['body'], true);
}
$content = $this->templateCache[$styleId];
if (!$isPreview) {
update_option($this->get_option_name('review-content'), $content, false);
}
}
$content = $this->parseWidgetHtml($reviews, $content, $isPreview, $isAdmin);
$content = preg_replace('/data-set[_-]id=[\'"][^\'"]*[\'"]/m', 'data-set-id="'. $setId .'"', $content);
$classAppends = ['ti-' . substr($this->getShortName(), 0, 4)];
if (!$this->getWidgetOption('show-reviewers-photo', false, $isPreview)) {
$classAppends []= 'ti-no-profile-img';
}
if ($this->getWidgetOption('disable-font', false, $isPreview)) {
$classAppends []= 'ti-disable-font';
}
if (!$this->getWidgetOption('show-arrows', false, $isPreview)) {
$classAppends []= 'ti-disable-nav';
}
if (!$this->getWidgetOption('enable-animation', false, $isPreview)) {
$classAppends []= 'ti-disable-animation';
}
if ($this->isFomoWidget()) {
$classAppends []= 'ti-fomo-align-'.$this->getWidgetOption('align', false, $isPreview);
if (!$this->getWidgetOption('fomo-border', false, $isPreview)) {
$classAppends []= 'ti-hide-fomo-border';
}
if (!$this->getWidgetOption('fomo-arrow', false, $isPreview)) {
$classAppends []= 'ti-hide-fomo-arrow';
}
if ('hide' === $this->getWidgetOption('fomo-icon', false, $isPreview)) {
$classAppends []= 'ti-icon-hide';
}
if ($this->getWidgetOption('fomo-icon-background', false, $isPreview)) {
$classAppends []= 'ti-icon-background';
}
} else {
if (!$this->getWidgetOption('no-rating-text', false, $isPreview)) {
$classAppends []= 'ti-show-rating-text';
}
$classAppends []= 'ti-review-text-mode-'.$this->getWidgetOption('review-text-mode', false, $isPreview);
$classAppends []= 'ti-'.(in_array($styleId, [36, 37, 38, 39]) ? 'content' : 'text').'-align-'.$this->getWidgetOption('align', false, $isPreview);
}
if (self::$widget_styles[$setId]['hide-stars'] === 'custom') {
$classAppends []= 'ti-custom-stars';
}
$content = str_replace('" data-layout-id=', ' '. implode(' ', $classAppends) .'" data-no-translation="true" data-layout-id=', $content);
if ($this->isRtlLanguage()) {
$content = str_replace('" data-layout-id=', '" data-rotate-to="left" data-layout-id=', $content);
}
if ($this->getWidgetOption('dateformat', false, $isPreview) === 'modern') {
$language = $this->getWidgetOption('lang', false, $isPreview);
$content = str_replace('" data-layout-id=', '" data-time-locale="'. self::$widget_date_format_locales[$language] .'" data-layout-id=', $content);
}
if ($this->isFomoWidget()) {
$styleText = '--fomo-color:'.$this->getWidgetOption('fomo-color', false, $isPreview).';';
if ('right' === $this->getWidgetOption('align', false, $isPreview)) {
$styleText .= 'left: auto;right: '.$this->getWidgetOption('fomo-margin', false, $isPreview).'px;';
} else {
$styleText .= 'left: '.$this->getWidgetOption('fomo-margin', false, $isPreview).'px;';
}
$hideCount = $this->getWidgetOption('fomo-hide-count', false, $isPreview);
$content = str_replace('" data-layout-id=', '" style="'.$styleText.'" data-hide-count='.$hideCount.' data-layout-id=', $content);
}
$content = str_replace('" data-layout-id=', '" data-plugin-version="'.str_replace('do-not-care-', '', $this->getVersion()).'" data-layout-id=', $content);
return $content;
}
private function getReviewsForWidgetHtml($isDemoReviews = false, $isForceDemoReviews = false, $isPreview = false)
{
global $wpdb;
$filter = $this->getWidgetOption('filter', false, $isPreview);
$onlyRatings = isset($filter['only-ratings']) && $filter['only-ratings'] ? 1 : 0;
if (isset($filter['stars']) && count($filter['stars']) === 1 && (int)$filter['stars'][0] === 5) {
if ($this->is_ten_scale_rating_platform()) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating, ROUND(rating / 2, 0) AS rating FROM %i WHERE hidden = 0 AND ROUND(rating / 2, 0) = 5 ORDER BY date DESC', $this->get_tablename('reviews')));
} else {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating FROM %i WHERE hidden = 0 AND (rating IS NULL OR rating = 5) ORDER BY date DESC', $this->get_tablename('reviews')));
}
}
else if (isset($filter['stars']) && count($filter['stars']) === 2) {
if ($this->is_ten_scale_rating_platform()) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating, ROUND(rating / 2, 0) AS rating FROM %i WHERE hidden = 0 AND ROUND(rating / 2, 0) IN (4,5) ORDER BY date DESC', $this->get_tablename('reviews')));
} else {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating FROM %i WHERE hidden = 0 AND (rating IS NULL OR rating IN (4,5)) ORDER BY date DESC', $this->get_tablename('reviews')));
}
}
else {
if ($this->is_ten_scale_rating_platform()) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating, ROUND(rating / 2, 0) AS rating FROM %i WHERE hidden = 0 ORDER BY date DESC', $this->get_tablename('reviews')));
} else {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$reviews = $wpdb->get_results($wpdb->prepare('SELECT *, rating AS original_rating FROM %i WHERE hidden = 0 ORDER BY date DESC', $this->get_tablename('reviews')));
}
}
if ($onlyRatings) {
for ($i = 0; $i < count($reviews); $i++) {
if (!$reviews[$i]->text || !trim($reviews[$i]->text)) {
array_splice($reviews, $i, 1);
$i--;
}
}
}
if ($isDemoReviews && ($isForceDemoReviews || !$reviews)) {
if (!$reviews && !$isForceDemoReviews && $this->getReviews()) {
return [];
}
$pageDetails = $this->getPageDetails();
$lang = substr(get_locale(), 0, 2);
if (!isset(self::$widget_languages[$lang])) {
$lang = 'en';
}
if (!$pageDetails) {
$pageDetails = [];
}
if (!isset($pageDetails['avatar_url'])) {
$pageDetails['avatar_url'] = 'https://cdn.trustindex.io/companies/default_avatar.jpg';
}
$ratingNum = 127;
$pageDetails['rating_number'] = $ratingNum;
$scoreTmp = round((($ratingNum - 1) * 5 + 4) / ($ratingNum * 5) * 10, 1);
if ($this->is_ten_scale_rating_platform()) {
$pageDetails['rating_score'] = number_format($scoreTmp, 1);
}
else {
$pageDetails['rating_score'] = number_format($scoreTmp / 2, 1);
}
if (!isset($pageDetails['id'])) {
$pageDetails['id'] = 'hu';
}
if (!isset($pageDetails['name'])) {
$pageDetails['name'] = get_bloginfo('name');
}
$this->pageDetails = $pageDetails;
$reviews = $this->getRandomReviews(10);
}
return $reviews;
}
public function getReviews()
{
global $wpdb;
if (!$this->is_noreg_linked()) {
return [];
}
$result = wp_cache_get('ti-reviews-cache-'.$this->getShortName());
if ($result === false) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$result = $wpdb->get_results($wpdb->prepare('SELECT * FROM %i ORDER BY date DESC', $this->get_tablename('reviews')));
wp_cache_set('ti-reviews-cache-'.$this->getShortName(), $result, '', 3600);
}
return $result;
}
private function parseWidgetHtml($reviews, $content, $isPreview = false, $isAdmin = false)
{
$pageDetails = $this->getPageDetails();
$styleId = (int)$this->getWidgetOption('style-id');
$setId = $this->getWidgetOption('scss-set');
$language = $this->getWidgetOption('lang', false, $isPreview);
$widgetTemplate = self::$widget_templates['templates'][$styleId];
$showStars = $this->getWidgetOption('show-stars', false, $isPreview);
if (self::$widget_styles[$setId]['hide-stars'] === 'custom') {
$showStars = 'custom';
}
preg_match('/<!-- R-LIST -->(.*)<!-- R-LIST -->/', $content, $matches);
if (isset($matches[1])) {
$reviewContent = "";
if ($reviews) {
foreach ($reviews as $r) {
$customAttributes = 'data-empty="'. (empty($r->text) ? 1 : 0) .'"';
$date = "&nbsp;";
if ($r->date && $r->date !== '0000-00-00') {
$dateformat = $this->getWidgetOption('dateformat', false, $isPreview);
if (in_array($dateformat, [ 'hide', 'modern' ])) {
$date = '';
if ($dateformat === 'modern') {
$customAttributes .= ' data-time="'. strtotime($r->date) .'"';
}
}
else {
$date = str_replace(self::$widget_month_names['en'], self::$widget_month_names[$language], gmdate($dateformat, strtotime($r->date)));
}
}
$ratingContent = $this->get_rating_stars($r->rating, $showStars);
if ($showStars === true) {
if ($this->is_ten_scale_rating_platform()) {
$ratingContent .= '<span class="ti-ten-rating-score">'. $this->formatTenRating($r->original_rating, $language) .'</span>';
}
}
$platformName = ucfirst($this->getShortName());
if ($this->getWidgetOption('verified-icon', false, $isPreview)) {
$verifiedIconTooltipText = self::$widget_verified_texts[$language];
$verifiedIconClass = 'ti-verified-review';
if (!in_array($platformName, self::$verified_platforms)) {
$verifiedIconClass = 'ti-verified-review ti-verified-platform';
$verifiedIconTooltipText = str_replace('%platform%', 'PLATFORM_NAME', self::$widget_verified_platform_texts[$language]);
}
if (self::$widget_styles[$setId]['verified-icon-color'] !== 'blue') {
$verifiedIconClass .= ' ti-color-'.self::$widget_styles[$setId]['verified-icon-color'];
}
$ratingContent .= '<span class="'.$verifiedIconClass.'"><span class="ti-verified-tooltip">'.$verifiedIconTooltipText.'</span></span>';
}
if (!$this->getWidgetOption('show-reviewers-photo', false, $isPreview)) {
$matches[1] = preg_replace('/<div class="ti-profile-img">.+<\/div>/U', '', $matches[1]);
}
$text = $this->getReviewHtml($r);
if ($r->reply && $this->getWidgetOption('show-review-replies', false, $isPreview)) {
$text .= '<br /><br /><span class="ti-reply-by-owner-title">'.self::$widget_reply_by_texts[$language].'</span><br />'.$this->parseReviewText($r->reply);
}
$reviewContent .= str_replace([
'%platform%',
'%reviewer_photo% 2x',
'%reviewer_photo%',
'%reviewer_name%',
'%created_at%',
'%text%',
'%rating_score%',
'class="ti-review-item',
'<!-- STARS-CONTENT -->',
], [
$platformName,
$this->getProfileImageUrl($r->user_photo, $styleId, 2).' 2x',
$this->getProfileImageUrl($r->user_photo, $styleId),
$this->renderNameFormat($r->user),
$date,
$text,
round($r->original_rating),
$customAttributes . ' class="ti-review-item',
$ratingContent,
], $matches[1]);
$reviewContent = str_replace('<div></div>', '', $reviewContent);
}
}
$content = str_replace($matches[0], $reviewContent, $content);
}
$ratingCount = $pageDetails['rating_number'];
$ratingScore = $pageDetails['rating_score'];
if (empty($ratingCount)) {
$ratingCount = count($reviews);
}
if (empty($ratingScore)) {
$ratingSum = 0.0;
foreach ($reviews as $review) {
$ratingSum += (float)$review->rating;
}
$c = count($reviews);
$ratingScore = $c ? $ratingSum / $c : 0;
}
$ratingText = $this->get_rating_text($ratingScore, $language);
$ratingTextUcfirst = ucfirst(strtolower($ratingText));
if (function_exists('mb_strtolower')) {
$ratingTextUcfirst = mb_substr($ratingText, 0, 1, 'UTF-8') . mb_strtolower(mb_substr($ratingText, 1, null, 'UTF-8'));
}
$imageUrl = isset($pageDetails['avatar_url']) && $pageDetails['avatar_url'] ? $pageDetails['avatar_url'] : $this->getDefaultCompanyAvatarUrl();
$image2xUrl = $imageUrl;
$size = $this->getHeaderProfileImageSize($styleId);
$imageUrl = preg_replace('/([=-])(s\d+|w\d+-h\d+)/', "$1w$size-h$size", $imageUrl);
$size *= 2;
$image2xUrl = preg_replace('/([=-])(s\d+|w\d+-h\d+)/', "$1w$size-h$size", $imageUrl);
$profileImageListForButton = "";
if ($reviews) {
$max = $widgetTemplate['type'] === 'fomo' ? 3 : 5;
for ($i = 0; $i < min(count($reviews), $max); $i++) {
$profileImageListForButton .= '
<div class="ti-profile-img">
<img
src="'.esc_url($this->getProfileImageUrl($reviews[$i]->user_photo, $styleId)).'"
srcset="'.esc_url($this->getProfileImageUrl($reviews[$i]->user_photo, $styleId, 2)).' 2x"
alt="'.esc_attr($reviews[$i]->user).'"
loading="lazy"
/>
</div>';
}
}
if ($widgetTemplate['type'] === 'fomo') {
$ratingText = $ratingTextUcfirst;
}
$fiveStarRatingNumber = 0;
if (isset($pageDetails['rating_numbers'])) {
$fiveStarRatingNumber = $pageDetails['rating_numbers'][5];
}
$fiveStarRatingNumberLast = 0;
if (isset($pageDetails['rating_numbers_last'])) {
$fiveStarRatingNumberLast = $pageDetails['rating_numbers_last'][5];
}
$content = str_replace([
'%platform%',
'%site_name%',
"5STAR_RATING_NUMBER_LAST",
"5STAR_RATING_NUMBER",
"RATING_NUMBER",
"RATING_SCORE",
"RATING_SCALE",
"RATING_TEXT<!--_LONG-->",
"RATING_TEXT",
"Rating_Text",
"PLATFORM_URL_LOGO 2x",
"PLATFORM_URL_LOGO",
"PLATFORM_NAME",
'<!-- STARS-CONTENT -->',
'PLATFORM_SMALL_LOGO',
'PLATFORM_SMALL_ICON',
'<div class="ti-profile-images"></div>',
], [
ucfirst($this->getShortName()),
$pageDetails['name'],
$fiveStarRatingNumberLast,
$fiveStarRatingNumber,
$ratingCount,
number_format((float)$ratingScore, 1),
$this->is_ten_scale_rating_platform() ? 10 : 5,
$this->get_rating_text_long($ratingScore, $language),
$ratingText,
$ratingTextUcfirst,
$image2xUrl.' 2x',
$imageUrl,
$this->get_platform_name($this->getShortName(), $pageDetails['id']),
$this->get_rating_stars($this->is_ten_scale_rating_platform() ? $ratingScore / 2 : $ratingScore, $showStars),
'<div class="ti-small-logo"><img src="'.$this->get_plugin_file_url('static/img/platform/logo.svg').'" alt="'.ucfirst($this->getShortName()).'" width="150" height="25" loading="lazy"></div>',
'<img class="ti-platform-icon" src="https://cdn.trustindex.io/assets/platform/'.ucfirst($this->getShortName()).'/icon.svg" alt="'.ucfirst($this->getShortName()).'" width="20" height="20" loading="lazy" />',
'<div class="ti-profile-images">'.$profileImageListForButton.'</div>',
], $content);
if (!in_array($widgetTemplate['type'], [ 'button', 'badge', 'top-rated-badge', 'fomo' ]) && !$this->getWidgetOption('show-logos', false, $isPreview)) {
$content = preg_replace('/<img class="ti-platform-icon".+>/U', '', $content);
}
if ($this->is_ten_scale_rating_platform() && $styleId === 11) {
$content = str_replace('<span class="ti-rating">'. $ratingScore .'</span> ', '', $content);
}
if (in_array($styleId, [8, 10, 11, 12, 13, 14, 20, 22, 24, 25, 26, 27, 28, 29, 35, 55, 56, 57, 58, 59, 60, 61, 62, 106, 107, 109, 110, 111, 113, 115]) || $widgetTemplate['type'] === 'fomo') {
if ($widgetTemplate['type'] === 'fomo' && !$this->getWidgetOption('fomo-link', false, $isPreview)) {
$content = preg_replace('/<a href=[\'"]%footer_link%[\'"][^>]*>(.+)<\/a>/mU', '<div class="ti-header">$1</div>', $content);
} else {
if (!$this->getWidgetOption('show-header-button', false, $isPreview)) {
$content = preg_replace('/<!-- HEADER-BUTTON-START.+HEADER-BUTTON-END -->/s', '', $content);
}
$content = str_replace(['<!-- HEADER-BUTTON-START', 'HEADER-BUTTON-END -->'], '', $content);
$footerUrl = $this->getPageUrl();
$footerUrl = in_array($styleId, [8, 13, 14, 26]) ? $this->getReviewWriteUrl() : $this->getReviewPageUrl();
if ($widgetTemplate['type'] === 'fomo') {
$footerUrl = $this->getWidgetOption('fomo-url', false, $isPreview);
}
$content = str_replace('%footer_link%', $footerUrl, $content);
}
} else {
$content = preg_replace('/<a href=[\'"]%footer_link%[\'"][^>]*>(.+)<\/a>/mU', '$1', $content);
}
if ($widgetTemplate['type'] === 'fomo') {
if (!$this->getWidgetOption('fomo-open', false, $isPreview)) {
$content = str_replace('class="ti-widget-container"', 'class="ti-widget-container ti-header-closed"', $content);
}
$iconType = $this->getWidgetOption('fomo-icon', false, $isPreview);
$iconHtml = '<div class="ti-fomo-icon" data-type="'.$iconType.'"></div>';
$platformIconHtml = '<img class="ti-platform-icon" src="https://cdn.trustindex.io/assets/platform/'.ucfirst($this->getShortName()).'/icon.svg" alt="'.ucfirst($this->getShortName()).'" width="20" height="20" loading="lazy">';
if ('hide' === $iconType) {
$iconHtml = '';
} else if ('profile-images' === $iconType) {
$iconHtml = '<div class="ti-profile-images">'.$profileImageListForButton.'</div>';
} else if ('platform' === $iconType) {
$iconHtml = $platformIconHtml;
}
$content = preg_replace('/<div class="ti-icon">\s*<\/div>/', '<div class="ti-icon">'.$iconHtml.'</div>', $content);
$platformBlockText = '';
if (isset($widgetTemplate['params']['fomo-platform-block']) && $widgetTemplate['params']['fomo-platform-block'] && 'platform' !== $iconType) {
$platformBlockText = $platformIconHtml;
}
$content = str_replace('<!-- PLATFORM-ICON -->', $platformBlockText, $content);
if ($this->isFomoCustomWidget() || $this->getFomoSubtitleTextChoices()) {
if ($text = $this->getWidgetOption('fomo-title', false, $isPreview)) {
$content = preg_replace(
'/<div class="ti-title-text">(.+)<\/div>/U',
'<div class="ti-title-text">'.$text.'</div>',
$content
);
}
if ($text = $this->getWidgetOption('fomo-text', false, $isPreview)) {
if ('hide' === $text) {
$content = preg_replace('/<div class="ti-subtitle-text">(.+)<\/div>/U','', $content);
} else {
if (
isset($widgetTemplate['params']['trans'])
&& isset($widgetTemplate['params']['trans'][$language])
&& isset($widgetTemplate['params']['trans'][$language][$text])
) {
$text = $widgetTemplate['params']['trans'][$language][$text];
}
$content = preg_replace(
'/<div class="ti-subtitle-text">(.+)<\/div>/U',
'<div class="ti-subtitle-text">'.$text.'</div>',
$content
);
}
}
}
if (isset($widgetTemplate['params']['fomo-days'])) {
$days = (int)$this->getWidgetOption('fomo-day', false, $isPreview);
if (strpos($content, '%registrations%') !== false) {
$count = $this->getRegistrationCount($days);
$content = str_replace('%registrations%', $count, $content);
} else if (strpos($content, '%visitors%') !== false) {
$count = $this->getViewsByDays($days);
$content = str_replace('%visitors%', $count, $content);
}
if (isset($count) && !$isPreview && !$isAdmin && $count < $this->getWidgetOption('fomo-hide-count', false, $isPreview)) {
$content = "";
} else {
$timeunitText = self::$widget_last_timeunit_texts[$language][1];
if ($days === 1) {
$timeunitText = self::$widget_last_timeunit_texts[$language][0];
$days = 24;
}
$content = str_replace('IN-LAST-TIMEUNIT', sprintf($timeunitText, $days), $content);
}
}
}
if (!$this->getWidgetOption('reviews-load-more', false, $isPreview)) {
$content = preg_replace('/<div class="ti-load-more-reviews-container"[^>]*>.+<\/div>\s*<\/div>/U', '', $content);
}
if (in_array($styleId, [4, 6, 7, 15, 16, 19, 31, 33, 36, 37, 38, 39, 44]) && $this->getWidgetOption('no-rating-text', false, $isPreview)) {
if (in_array($styleId, [6, 7])) {
$content = preg_replace('/<div class="ti-footer">.*<\/div>/mU', '<div class="ti-footer"></div>', $content);
} else if(in_array($styleId, [31, 33])) {
$content = preg_replace('/<div class="ti-header source-.*<\/div>\s?<div class="ti-reviews-container">/mU', '<div class="ti-reviews-container">', $content);
} else {
$content = preg_replace('/<div class="ti-rating-text">.*<\/div>/mU', '', $content);
$content = preg_replace('/<div class="ti-footer">\s*<\/div>/m', '', $content);
}
}
if ($this->getWidgetOption('footer-filter-text', false, $isPreview) && (!in_array($widgetTemplate['type'], ['button', 'badge', 'floating', 'top-rated-badge', 'fomo']) || in_array($styleId, [23, 30, 32, 53]))) {
$filterText = $this->get_footer_filter_text($language);
if (!in_array($styleId, [5, 8, 9, 10, 13, 18, 23, 30, 31, 32, 33, 34, 53, 54]) && !$this->getWidgetOption('no-rating-text', false, $isPreview)) {
$content = str_replace('</span><!-- FOOTER FILTER TEXT -->', ',</span><span class="nowrap"><!-- FOOTER FILTER TEXT --></span>', $content);
$content = str_replace('<div class="ti-footer-filter-text"><!-- FOOTER FILTER TEXT --></div>', '', $content);
$content = str_replace('<!-- FOOTER FILTER TEXT -->', function_exists('mb_strtolower') ? mb_strtolower($filterText) : strtolower($filterText), $content);
} else {
$content = str_replace('<!-- FOOTER FILTER TEXT -->', $filterText, $content);
}
} else {
$content = str_replace([ '<div class="ti-footer-filter-text"><!-- FOOTER FILTER TEXT --></div>', '<!-- FOOTER FILTER TEXT -->' ], '', $content);
}
$verifiedByTrustindex = (int)$this->getWidgetOption('verified-by-trustindex', false, $isPreview);
if ($verifiedByTrustindex && $this->isVerifiedByTrustindexAvailable()) {
$content = str_replace('data-style="1"', 'data-style="'.$verifiedByTrustindex.'"', $content);
$content = str_replace('a=sys&c=verified-badge', 'a=sys&c=wp-verified-badge', $content);
$content = str_replace('<!-- VERIFIED BY TRUSTINDEX START', '', $content);
$content = str_replace('VERIFIED BY TRUSTINDEX END -->', '', $content);
} else {
$content = preg_replace('/<!-- VERIFIED BY TRUSTINDEX START.*VERIFIED BY TRUSTINDEX END -->/s', '', $content);
}
if (!in_array($styleId, [ 53, 54 ])) {
preg_match('/src="([^"]+logo[^\.]*\.svg)"/m', $content, $matches);
if (isset($matches[1]) && !empty($matches[1])) {
$content = str_replace($matches[0], $matches[0] . ' width="150" height="25"', $content);
$content = preg_replace('/width="([\d%]+)" height="([\d%]+)"( alt="[^"]+")? width="([\d%]+)" height="([\d%]+)"/', 'width="$1" height="$2"$3', $content);
}
}
if ($widgetTemplate['is-top-rated-badge']) {
$topRatedDate = $this->getWidgetOption('top-rated-date', false, $isPreview);
$topRatedType = $this->getWidgetOption('top-rated-type', false, $isPreview);
$date = gmdate('Y');
if ($topRatedDate === 'last-year') {
$date = gmdate('Y') - 1;
} else if ($topRatedDate === 'hide' || $widgetTemplate['type'] === 'fomo') {
$date = '';
}
$title = trim(str_replace('%date%', $date, self::$widget_top_rated_titles[$topRatedType][$language]));
if (in_array($styleId, [97, 98, 104]) || $widgetTemplate['type'] === 'fomo') {
$title = str_replace('<br />', '', $title);
}
$title = '<div class="ti-top-rated-title">'.$title.'</div>';
$regex = '/<div class="ti-top-rated-title">.*<\/div>/mU';
if ($widgetTemplate['type'] === 'fomo') {
$title = '<div class="ti-title-text">'.$title.'</div>';
$regex = '/<div class="ti-title-text">.*<\/div>/mU';
}
$content = preg_replace($regex, $title, $content);
$content = str_replace('a=sys&c=top-rated-badge', 'a=sys&c=wp-top-rated-badge', $content);
}
return $content;
}
public function isVerifiedByTrustindexAvailable()
{
$pageDetails = $this->getPageDetails();
$styleId = (int)$this->getWidgetOption('style-id');
$widgetTemplate = self::$widget_templates['templates'][$styleId];
return $this->isLayoutHasReviews() && !in_array($widgetTemplate['type'], ['floating']) && !$widgetTemplate['is-top-rated-badge'] && (float)$pageDetails['rating_score'] >= self::$topRatedMinimumScore;
}
public function isLayoutHasReviews()
{
$styleId = (int)$this->getWidgetOption('style-id');
return !in_array(self::$widget_templates['templates'][$styleId]['type'], ['button', 'badge', 'top-rated-badge', 'fomo']) || in_array($styleId, [23, 30, 32]);
}
public function isFomoWidget()
{
$styleId = (int)$this->getWidgetOption('style-id');
return self::$widget_templates['templates'][$styleId]['type'] === 'fomo';
}
public function isFomoCustomWidget()
{
$styleId = (int)$this->getWidgetOption('style-id');
return isset(self::$widget_templates['templates'][$styleId]['params']['fomo-custom-text']) && self::$widget_templates['templates'][$styleId]['params']['fomo-custom-text'];
}
public function isFomoHideCountAvailable()
{
$content = $this->getWidgetOption('review-content');
return strpos($content, '%registrations%') !== false || strpos($content, '%online-visitors%') !== false || strpos($content, '%visitors%') !== false;
}
public function getFomoSubtitleTextChoices()
{
$styleId = (int)$this->getWidgetOption('style-id');
$params = self::$widget_templates['templates'][$styleId]['params'];
if (!isset($params['fomo-subtitle-text-choices'])) {
return [];
}
$choices = $params['fomo-subtitle-text-choices'];
$result = [];
$language = strtolower(substr(get_locale(), 0, 2));
if (!isset(self::$widget_languages[$language])) {
$language = 'en';
}
foreach ($choices as $choice) {
$name = $choice;
$value = $choice;
if (isset($params['trans']) && isset($params['trans'][$language]) && isset($params['trans'][$language][$choice])) {
$value = $params['trans'][$language][$choice];
}
$result[$name] = $value;
}
return $result;
}
public function isRtlLanguage()
{
if (in_array($this->getWidgetOption('lang'), array (
0 => 'ar',
1 => 'he',
2 => 'fa',
))) {
return true;
}
return false;
}
public function getRegistrationCount($days = 1) {
global $wpdb;
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return (int) $wpdb->get_var($wpdb->prepare('SELECT COUNT(ID) FROM %i WHERE DATEDIFF(NOW(), user_registered) <= %d', $wpdb->users, $days));
}
public function getOnlineUsers($uid, $page = "") {
if (!$page) {
$page = '_index';
}
$time = time();
$users = get_option('ti-online-users-'.$page, []);
$users[$uid] = $time;
foreach ($users as $i => $t) {
if ($t < $time - 60) {
unset($users[$i]);
}
}
update_option('ti-online-users-'.$page, $users, false);
return count($users);
}
public function get_footer_filter_text($lang = 'en')
{
$filter = $this->getWidgetOption('filter');
$langExists = self::$widget_footer_filter_texts && isset(self::$widget_footer_filter_texts[ $lang ]);
$text = $langExists ? self::$widget_footer_filter_texts[ $lang ]['latest'] : 'Showing our latest reviews';
if (isset($filter['stars']) && count($filter['stars']) < 4) {
sort($filter['stars']);
$start = $filter['stars'][0];
$end = array_pop($filter['stars']);
if ($start == $end) {
$replace = $start;
}
else {
$replace = $start .'-'. $end;
}
$text = str_replace('RATING_STAR_FILTER', $replace, $langExists ? self::$widget_footer_filter_texts[ $lang ]['star'] : 'Showing only RATING_STAR_FILTER star reviews');
}
return $text;
}
public function get_platform_name($type, $id = "")
{
$text = ucfirst($type);
if ($text === 'Szallashu') {
$domains = [
'cz' => 'Hotely.cz',
'hu' => 'Szallas.hu',
'ro' => 'Hotelguru.ro',
'com' => 'Revngo.com',
'pl' => 'Noclegi.pl'
];
$tmp = explode('/', $id);
if (isset($domains[ $tmp[0] ])) {
$text = $domains[ $tmp[0] ];
}
}
else if ($text === 'Arukereso') {
$domains = [
'hu' => 'Árukereső.hu',
'bg' => 'Pazaruvaj.com',
'ro' => 'Compari.ro'
];
$tmp = explode('|', $id);
if (isset($domains[ $tmp[0] ])) {
$text = $domains[ $tmp[0] ];
}
}
else if($text === 'WordpressPlugin') {
$text = 'Wordpress Plugin';
}
return $text;
}
public function get_rating_text($rating, $lang = "en")
{
$texts = self::$widget_rating_texts[ $lang ];
$rating = round($rating);
if ($rating < 1) {
$rating = 1;
}
else if($rating > 5) {
$rating = 5;
}
if (function_exists('mb_strtoupper')) {
return mb_strtoupper($texts[ $rating - 1 ]);
}
else {
return strtoupper($texts[ $rating - 1 ]);
}
}
public function get_rating_text_long($rating, $lang = "en")
{
$texts = self::$widget_rating_texts_long[ $lang ];
$rating = round($rating);
if ($rating < 1) {
$rating = 1;
}
else if($rating > 5) {
$rating = 5;
}
return $texts[ $rating - 1 ];
}
public function get_rating_stars($ratingScore, $platformStars = true)
{
$text = "";
if (!is_numeric($ratingScore)) {
return $text;
}
$platform = ucfirst($this->getShortName());
$altPlatform = $platform;
if (!$platformStars) {
$platform = 'Default';
}
$fullStarUrl = '<img class="ti-star" src="https://cdn.trustindex.io/assets/platform/'.$platform.'/star/f.svg" alt="'.$altPlatform.' star %star-number%" width="17" height="17" loading="lazy" />';
if ('custom' === $platformStars) {
$fullStarUrl = '<span class="ti-star f"></span>';
}
for ($si = 1; $si <= $ratingScore; $si++) {
$text .= str_replace('%star-number%', $si, $fullStarUrl);
}
$fractional = $ratingScore - floor($ratingScore);
if(0.25 <= $fractional) {
if ($fractional < 0.75) {
$text .= preg_replace('/f(\.svg)?"/', 'h$1"', str_replace('%star-number%', $si.'.'.$fractional, $fullStarUrl));
}
else {
$text .= str_replace('%star-number%', $si, $fullStarUrl);
}
$si++;
}
for (; $si <= 5; $si++) {
$text .= preg_replace('/f(\.svg)?"/', 'e$1"', str_replace('%star-number%', $si, $fullStarUrl));
}
return $text;
}
private function getRandomReviews($count = 9)
{
$exampleReviews = null;
$jsonFile = plugin_dir_path($this->plugin_file_path) . 'static' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'example-reviews.json';
if (file_exists($jsonFile)) {
$exampleReviews = json_decode(file_get_contents($jsonFile), true);
if (is_array($exampleReviews)) {
foreach ($exampleReviews as $i => $tmp) {
$exampleReviews[ $i ]['image'] = $this->get_plugin_file_url('static/img/'. $tmp['image']);
}
}
}
$reviews = [];
foreach ($exampleReviews as $i => $exampleReview) {
if ($i >= $count) {
break;
}
$r = new stdClass();
$r->id = $i;
$r->user = $exampleReview['name'];
$r->user_photo = $exampleReview['image'];
$r->text = $exampleReview['text'];
$r->original_rating = $i == max(0, $count-2) ? 4 : 5;
$r->rating = $r->original_rating;
$r->highlight = null;
$r->date = gmdate('Y-m-d', strtotime('-'. ($i * 2) .' days'));
$r->reviewId = null;
$r->reply = null;
if ($this->is_ten_scale_rating_platform()) {
$r->original_rating = number_format($i == max(0, $count-2) ? 8 : 10, 1);
$r->rating = round($r->original_rating / 2);
}
$reviews[] = $r;
$i++;
}
return $reviews;
}
public function get_plugin_current_version()
{
$response = wp_remote_get('https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slug]='. $this->get_plugin_slug());
if (is_wp_error($response)) {
return false;
}
$json = json_decode($response['body'], true);
if (!$json || !isset($json['version'])) {
return false;
}
return $json['version'];
}
public function post_request($url, $args)
{
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
echo wp_kses_post($this->get_alertbox('error', '<br />Error with wp_remote_post, error message: <br /><b>'. $response->get_error_message() .'</b>'));
die;
}
return wp_remote_retrieve_body($response);
}
public function is_trustindex_connected()
{
return get_option($this->get_option_name("subscription-id"));
}
public function get_trustindex_widget_number()
{
$widgets = $this->get_trustindex_widgets();
$number = 0;
foreach ($widgets as $wc) {
$number += count($wc['widgets']);
}
return $number;
}
public function get_trustindex_widgets()
{
$widgets = array();
$trustindexSubscriptionId = $this->is_trustindex_connected();
if ($trustindexSubscriptionId) {
$response = wp_remote_get("https://admin.trustindex.io/" . "api/getWidgets?subscription_id=" . $trustindexSubscriptionId);
if ($response && !is_wp_error($response)) {
$widgets = json_decode($response['body'], true);
}
}
return $widgets;
}
public function connect_trustindex_api($postData, $mode = 'new')
{
$url = "https://admin.trustindex.io/" . "api/connectApi";
$postData['wp_info'] = $this->get_wp_details();
$serverOutput = $this->post_request($url, [
'body' => $postData,
'timeout' => 300,
'redirection' => '5',
'blocking' => true
]);
if ($serverOutput[0] !== '[' && $serverOutput[0] !== '{') {
$serverOutput = substr($serverOutput, strpos($serverOutput, '('));
$serverOutput = trim($serverOutput,'();');
}
$serverOutput = json_decode($serverOutput, true);
if ($serverOutput['success']) {
update_option( $this->get_option_name("subscription-id"), $serverOutput["subscription_id"]);
$GLOBALS['wp_object_cache']->delete( $this->get_option_name('subscription-id'), 'options' );
}
return $serverOutput;
}
public function register_tinymce_features()
{
if (!has_filter('mce_external_plugins', 'add_tinymce_buttons')) {
add_filter('mce_external_plugins', [ $this, 'add_tinymce_buttons' ]);
add_filter('mce_buttons', [ $this, 'register_tinymce_buttons' ]);
}
}
public function add_tinymce_buttons($pluginArray)
{
$pluginName = 'trustindex';
if (!isset($pluginArray[ $pluginName ])) {
$pluginArray[ $pluginName ] = $this->get_plugin_file_url('static/js/admin-editor.js');
}
wp_localize_script('jquery', 'ajax_object', [ 'ajax_url' => admin_url( 'admin-ajax.php' ) ]);
return $pluginArray;
}
public function register_tinymce_buttons($buttons)
{
$buttonName = 'trustindex';
if (!in_array($buttonName, $buttons)) {
$buttons []= $buttonName;
}
return $buttons;
}
public function list_trustindex_widgets_ajax()
{
$ti_widgets = $this->get_trustindex_widgets();
if ($this->is_trustindex_connected()): ?>
<?php if ($ti_widgets): ?>
<h2><?php echo esc_html(__('Your saved widgets', 'wp-reviews-plugin-for-google')); ?></h2>
<?php foreach ($ti_widgets as $wc): ?>
<p><strong><?php echo esc_html($wc['name']); ?>:</strong></p>
<p>
<?php foreach ($wc['widgets'] as $w): ?>
<a href="#" class="btn-copy-widget-id" data-ti-id="<?php echo esc_attr($w['id']); ?>">
<span class="dashicons dashicons-admin-post"></span>
<?php echo esc_html($w['name']); ?>
</a><br />
<?php endforeach; ?>
</p>
<?php endforeach; ?>
<?php else: ?>
<?php echo wp_kses_post(self::get_alertbox("warning",
esc_html(__("You have no widget saved!", 'wp-reviews-plugin-for-google')) . " "
. "<a target='_blank' href='" . "https://admin.trustindex.io/" . "widget'>". esc_html(__("Let's go, create amazing widgets for free!", 'wp-reviews-plugin-for-google'))."</a>"
)); ?>
<?php endif; ?>
<?php else: ?>
<?php echo wp_kses_post(self::get_alertbox("warning",
esc_html(__("You have not set up your Trustindex account yet!", 'wp-reviews-plugin-for-google')) . " "
/* translators: %s: URL */
. wp_kses(sprintf(__("Go to <a href='%s'>plugin setup page</a> to complete the one-step setup guide and enjoy the full functionalization!", 'wp-reviews-plugin-for-google'), admin_url('admin.php?page='.$this->get_plugin_slug().'/settings.php&tab=advanced')))
)); ?>
<?php endif;
wp_die();
}
public function trustindex_add_scripts($hook)
{
if ($hook === 'widgets.php') {
wp_enqueue_script('trustindex_script', $this->get_plugin_file_url('static/js/admin-widget.js'), [], $this->getVersion(), ['in_footer' => false]);
wp_enqueue_style('trustindex_style', $this->get_plugin_file_url('static/css/admin-widget.css'), [], $this->getVersion());
}
else if ($hook === 'post.php') {
wp_enqueue_style('trustindex_editor_style', $this->get_plugin_file_url('static/css/admin-editor.css'), [], $this->getVersion());
}
else {
$tmp = explode(DIRECTORY_SEPARATOR, $this->plugin_file_path);
$pluginSlug = preg_replace('/\.php$/', '', array_pop($tmp));
$tmp = explode('/', $hook);
$currentSlug = array_shift($tmp);
if ($pluginSlug === $currentSlug) {
if (file_exists($this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'admin-page-settings.css')) {
wp_enqueue_style('trustindex_settings_style_'. $this->getShortName(), $this->get_plugin_file_url('static/css/admin-page-settings.css'), [], $this->getVersion());
}
if (file_exists($this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'admin-page-settings-common.js')) {
wp_enqueue_script('trustindex_settings_script_common_'. $this->getShortName(), $this->get_plugin_file_url('static/js/admin-page-settings-common.js'), [], $this->getVersion(), ['in_footer' => false]);
}
if(file_exists($this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'admin-page-settings-connect.js')) {
wp_enqueue_script('trustindex_settings_script_connect_'. $this->getShortName(), $this->get_plugin_file_url('static/js/admin-page-settings-connect.js'), [], $this->getVersion(), ['in_footer' => false]);
}
if (file_exists($this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'spectrum.css')) {
wp_enqueue_style('trustindex_settings_spectrum_'. $this->getShortName(), $this->get_plugin_file_url('static/css/spectrum.css'), [], $this->getVersion());
}
if (file_exists($this->get_plugin_dir() . 'static' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'spectrum.js')) {
wp_enqueue_script('trustindex_settings_spectrum_'. $this->getShortName(), $this->get_plugin_file_url('static/js/spectrum.js'), [], $this->getVersion(), ['in_footer' => false]);
}
}
}
wp_register_script('trustindex_admin_notification', $this->get_plugin_file_url('static/js/admin-notification.js'), [], $this->getVersion(), ['in_footer' => false]);
wp_enqueue_script('trustindex_admin_notification');
wp_enqueue_style('trustindex_admin_notification', $this->get_plugin_file_url('static/css/admin-notification.css'), [], $this->getVersion());
}
public function get_plugin_details($pluginSlug = null)
{
if (!$pluginSlug) {
$pluginSlug = $this->get_plugin_slug();
}
$pluginReturn = false;
$wpRepoPlugins = '';
$wpResponse = '';
$wpVersion = get_bloginfo('version');
if ($pluginSlug && $wpVersion > 3.8) {
$args = [
'author' => 'Trustindex.io',
'fields' => [
'downloaded' => true,
'active_installs' => true,
'ratings' => true
]
];
$wpResponse = wp_remote_post(
'http://api.wordpress.org/plugins/info/1.0/',
[
'body' => [
'action' => 'query_plugins',
'request' => serialize((object) $args)
]
]
);
if (!is_wp_error($wpResponse)) {
$wpRepoResponse = unserialize(wp_remote_retrieve_body($wpResponse));
$wpRepoPlugins = $wpRepoResponse->plugins;
}
if ($wpRepoPlugins) {
foreach ($wpRepoPlugins as $pluginDetails) {
if ($pluginSlug === $pluginDetails->slug) {
$pluginReturn = $pluginDetails;
}
}
}
}
return $pluginReturn;
}
public function get_wp_details()
{
$data = [
'domain' => isset($_SERVER['SERVER_NAME']) ? sanitize_text_field(wp_unslash($_SERVER['SERVER_NAME'])) : '',
'current_theme' => [ 'slug' => get_template() ],
'themes' => [],
'plugins' => []
];
$theme = wp_get_theme();
$data['current_theme']['name'] = $theme['Name'];
$data['current_theme']['author'] = wp_strip_all_tags($theme['Author']);
$data['current_theme']['version'] = $theme['Version'];
$themes = wp_get_themes();
if ($themes) {
foreach ($themes as $slug => $theme) {
$data['themes'][] = [
'slug' => $theme['Template'],
'name' => $theme['Name'],
'author' => wp_strip_all_tags($theme['Author']),
'version' => $theme['Version']
];
}
}
if (!function_exists('get_plugins')) {
require_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php';
}
$plugins = get_plugins();
if ($plugins) {
foreach ($plugins as $slug => $plugin) {
$data['plugins'][] = [
'slug' => explode('/', $slug)[0],
'name' => $plugin['Name'],
'author' => wp_strip_all_tags($plugin['Author']),
'version' => $plugin['Version']
];
}
}
return json_encode($data);
}
public function is_ten_scale_rating_platform()
{
return in_array($this->getShortName(), [ 'booking', 'hotels', 'foursquare', 'szallashu', 'expedia' ]);
}
public function formatTenRating($rating, $language = null)
{
if (!$language) {
$language = get_option($this->get_option_name('lang'), 'en');
}
if ($rating == 10) {
$rating = '10';
}
if (!in_array($language, self::$dot_separated_languages)) {
$rating = str_replace('.', ',', $rating);
}
return $rating;
}
public static function is_amp_active()
{
if (!function_exists('get_plugins')) {
require_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php';
}
$amp_plugin_keys = [
'accelerated-mobile-pages/accelerated-moblie-pages.php',
'amp/amp.php'
];
foreach (get_plugins() as $key => $plugin) {
if (in_array($key, $amp_plugin_keys) && is_plugin_active($key)) {
return true;
}
}
return false;
}
public static function is_amp_enabled()
{
if (function_exists('amp_is_request')) {
return amp_is_request();
}
else if (function_exists('ampforwp_is_amp_endpoint')) {
return ampforwp_is_amp_endpoint();
}
else {
return false;
}
}
private function isElementorEditing()
{
return class_exists('\Elementor\Plugin') && \Elementor\Plugin::$instance->editor->is_edit_mode();
}
public function filter_filesystem_method($method)
{
if ($method !== 'direct' && !defined('FS_METHOD')) {
return 'direct';
}
return $method;
}
public function isJson($str) {
$json = json_decode($str);
return $json && $str !== $json;
}
public function register_block_editor()
{
if (!class_exists('WP_Block_Type_Registry')) {
return;
}
if (!WP_Block_Type_Registry::get_instance()->is_registered('trustindex/block-selector')) {
wp_register_script('trustindex-block-editor', $this->get_plugin_file_url('static/block-editor/block-editor.js'), [ 'wp-blocks', 'wp-editor' ], true, ['in_footer' => false]);
register_block_type('trustindex/block-selector', [ 'editor_script' => 'trustindex-block-editor' ]);
}
}
function is_widget_setted_up()
{
$result = [];
$activePlugins = get_option('active_plugins');
$platforms = $this->get_platforms();
foreach ($this->get_plugin_slugs() as $index => $slug) {
if (in_array($slug .'/'. $slug .'.php', $activePlugins)) {
$activePluginSlug = $slug;
$result[ $platforms[ $index ] ] = get_option('trustindex-'. $platforms[ $index ] .'-widget-setted-up', 0);
}
}
return [
'result' => $result,
'setup_url' => admin_url('admin.php?page='. $activePluginSlug .'/settings.php&tab=advanced') ."#trustindex-admin"
];
}
function init_restapi()
{
register_rest_route('trustindex/v1', '/get-widgets', [
'methods' => 'GET',
'callback' => [ $this, 'get_trustindex_widgets' ],
'permission_callback' => '__return_true'
]);
register_rest_route('trustindex/v1', '/setup-complete', [
'methods' => 'GET',
'callback' => [ $this, 'is_widget_setted_up' ],
'permission_callback' => '__return_true'
]);
}
private function getCdnVersionControl()
{
$data = get_option($this->get_option_name('cdn-version-control'), []);
if (!$data || $data['last-saved-at'] < time() + 60) {
$response = wp_remote_get('https://cdn.trustindex.io/version-control.json', [ 'timeout' => 60 ]);
if (!is_wp_error($response)) {
$data = array_merge($data, json_decode($response['body'], true));
}
$data['last-saved-at'] = time();
update_option($this->get_option_name('cdn-version-control'), $data, false);
}
return $data;
}
private function getCdnVersion($name = "")
{
$data = $this->getCdnVersionControl();
return isset($data[ $name ]) ? $data[ $name ] : "";
}
public function getVersion($name = "")
{
if (!$name) {
return $this->version;
}
$data = get_option($this->get_option_name('version-control'), []);
return isset($data[ $name ]) ? $data[ $name ] : "1.0";
}
private function updateVersion($name, $value)
{
$data = get_option($this->get_option_name('version-control'), []);
$data[ $name ] = $value;
return update_option($this->get_option_name('version-control'), $data, false);
}
public function get_tablename($name = "")
{
global $wpdb;
return $wpdb->prefix . 'trustindex_' . $this->getShortName() . '_' . $name;
}
public function is_table_exists($name = "")
{
global $wpdb;
$tableName = $this->get_tablename($name);
/*
check both actual name and lowercase name because LIKE is case sensitive in this query (unfortunately)
and there is a possibility that $wpdb->prefix is something like "JxdFg_"
(2024-08-23: "jxdfg_trustindex_google_reviews" table existed but this query returned false)
*/
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', $tableName)) == $tableName) || ($wpdb->get_var($wpdb->prepare('SHOW TABLES LIKE %s', strtolower($tableName))) == strtolower($tableName));
}
public function emptyViews()
{
if (!$this->is_table_exists('views')) {
return false;
}
global $wpdb;
$tableName = $this->get_tablename('views');
$wpdb->query($wpdb->prepare('TRUNCATE %i', $tableName));
return true;
}
public function increaseViews()
{
if (!$this->is_table_exists('views')) {
return false;
}
global $wpdb;
$tableName = $this->get_tablename('views');
$today = gmdate('Y-m-d');
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$viewsToday = (int) $wpdb->get_var($wpdb->prepare('SELECT viewed FROM %i WHERE date = %s', $tableName, $today));
if (!$viewsToday) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$wpdb->insert($tableName, [
'date' => $today,
'viewed' => 1,
]);
} else {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->update($tableName, ['viewed' => $viewsToday + 1], ['date' => $today]);
}
return true;
}
public function getViewsByDays($days = 7)
{
if (!$this->is_table_exists('views')) {
return 0;
}
global $wpdb;
$tableName = $this->get_tablename('views');
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
return (int) $wpdb->get_var($wpdb->prepare('SELECT SUM(viewed) FROM %i WHERE DATEDIFF(NOW(), date) <= %d', $tableName, $days));
}
}
?>