Skip to content
Merged

Release #1307

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
e7e5ba9
Sync branch [skip ci]
pirate-bot Mar 31, 2026
3b60e92
Sync branch [skip ci]
pirate-bot Mar 31, 2026
d24f670
fix: broken candlestick chart
girishpanchal30 Apr 2, 2026
e9953d4
Sync branch [skip ci]
pirate-bot Apr 2, 2026
734e7a8
Sync branch [skip ci]
pirate-bot Apr 2, 2026
ed9b4cf
Sync branch [skip ci]
pirate-bot Apr 2, 2026
d45af7e
Sync branch [skip ci]
pirate-bot Apr 6, 2026
5d01b0c
chore: update datatables 1.10.22 to 2.3.7
girishpanchal30 Apr 7, 2026
d96965d
fix: ensure print action is triggered correctly
girishpanchal30 Apr 7, 2026
b2e5417
chore(deps-dev): bump phpstan/phpstan from 2.1.45 to 2.1.46 (#1305)
dependabot[bot] Apr 7, 2026
1af67d6
refactor: change Black Friday labels (#1288)
Soare-Robert-Daniel Apr 7, 2026
59cc3b7
fix: table width
girishpanchal30 Apr 8, 2026
5947e85
Merge pull request #1301 from Codeinwp/bugfix/pro/578
vytisbulkevicius Apr 29, 2026
7292c42
fix: e2e
girishpanchal30 Apr 30, 2026
bf4112a
Merge pull request #1306 from Codeinwp/bugfix/pro/579
vytisbulkevicius Apr 30, 2026
8a341f8
chore(deps-dev): bump phpstan/phpstan from 2.1.46 to 2.1.54
dependabot[bot] May 4, 2026
ae20e0d
Sync branch [skip ci]
pirate-bot May 5, 2026
8be962a
Sync branch [skip ci]
pirate-bot May 5, 2026
1e71786
Merge pull request #1311 from Codeinwp/dependabot/composer/developmen…
HardeepAsrani May 5, 2026
7ccd6fe
fix: restrict database query action to admins
girishpanchal30 May 7, 2026
f681d3c
refactor: restrict database query action to admins
girishpanchal30 May 7, 2026
d4802fb
chore(deps): bump codeinwp/themeisle-sdk from 3.3.51 to 3.3.52
dependabot[bot] May 19, 2026
6528919
Merge pull request #1316 from Codeinwp/dependabot/composer/developmen…
vytisbulkevicius May 19, 2026
09ed3f9
Merge pull request #1313 from Codeinwp/bugfix/pro/587
vytisbulkevicius May 19, 2026
c8f9eec
Update tested version to WordPress 7.0
vytisbulkevicius May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions classes/Visualizer/Module/AIBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,9 @@ public function uploadData(): void {

// ── Database query ────────────────────────────────────────────────
case 'db_query':
if ( ! current_user_can( 'manage_options' ) && ! is_super_admin() ) {
wp_send_json_error( array( 'message' => __( 'Action not allowed for this user.', 'visualizer' ) ), 403 );
}
if ( empty( $_POST['db_query'] ) ) {
wp_send_json_error( array( 'message' => __( 'No query provided.', 'visualizer' ) ) );
}
Expand Down
57 changes: 41 additions & 16 deletions classes/Visualizer/Module/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -1407,16 +1407,19 @@ public function getPluginMetaLinks( $plugin_meta, $plugin_file ) {
}

if ( $plugin_file === plugin_basename( VISUALIZER_BASEFILE ) ) {
$is_black_friday = apply_filters( 'themeisle_sdk_is_black_friday_sale', false );
// knowledge base link
$plugin_meta[] = sprintf(
'<a href="' . VISUALIZER_MAIN_DOC . '" target="_blank">%s</a>',
esc_html__( 'Docs', 'visualizer' )
);
// flattr link
$plugin_meta[] = sprintf(
'<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
esc_html__( 'Get Visualizer Pro', 'visualizer' )
);
if ( ! $is_black_friday ) {
// flattr link
$plugin_meta[] = sprintf(
'<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
esc_html__( 'Get Visualizer Pro', 'visualizer' )
);
}
}

return $plugin_meta;
Expand Down Expand Up @@ -1598,29 +1601,51 @@ public function count_charts( $limit = -1 ) {
public function add_black_friday_data( $configs ) {
$config = $configs['default'];

// translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
$message_template = __( 'Our biggest sale of the year: %1$sup to %2$s OFF%3$s on %4$s. Don\'t miss this limited-time offer.', 'visualizer' );
$product_label = 'Visualizer';
$discount = '70%';
$message = __( 'Database queries, private charts, auto-sync. Go beyond basic charts. Exclusively for existing Visualizer users.', 'visualizer' );
$cta_label = __( 'Get Visualizer Pro', 'visualizer' );

$plan = apply_filters( 'product_visualizer_license_plan', 0 );
$license = apply_filters( 'product_visualizer_license_key', false );
$is_pro = 0 < $plan;
$status = apply_filters( 'product_visualizer_license_status', false );
$pro_product_slug = defined( 'VISUALIZER_PRO_BASEFILE' ) ? basename( dirname( VISUALIZER_PRO_BASEFILE ) ) : '';

$is_pro = 'valid' === $status;
$is_expired = 'expired' === $status || 'active-expired' === $status;

if ( $is_pro ) {
// translators: %1$s - HTML tag, %2$s - discount, %3$s - HTML tag, %4$s - product name.
$message_template = __( 'Get %1$sup to %2$s off%3$s when you upgrade your %4$s plan or renew early.', 'visualizer' );
$product_label = 'Visualizer Pro';
$discount = '30%';
// translators: %s is the discount percentage.
$config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'visualizer' ), '30%' );
// translators: %1$s - discount, %2$s - discount.
$message = sprintf( __( 'Upgrade your Visualizer Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'visualizer' ), '30%', '20%' );
$cta_label = __( 'See your options', 'visualizer' );
} elseif ( $is_expired ) {
// translators: %s is the discount percentage.
$config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'visualizer' ), '50%' );
// translators: %s is the discount percentage.
$config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'visualizer' ), '50%' );
$message = __( 'Your Visualizer Pro features are still here, just locked. Renew at a reduced rate this week.', 'visualizer' );
$cta_label = __( 'Reactivate now', 'visualizer' );
} else {
// translators: %s is the discount percentage.
$config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'visualizer' ), '60%' );
$config['title'] = __( 'Visualizer Pro: 60% off this week', 'visualizer' );
// translators: %s is the discount percentage.
$config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'visualizer' ), '60%' );
}

$product_label = sprintf( '<strong>%s</strong>', $product_label );
$url_params = array(
'utm_term' => $is_pro ? 'plan-' . $plan : 'free',
'lkey' => ! empty( $license ) ? $license : false,
'expired' => $is_expired ? '1' : false,
);

$config['message'] = sprintf( $message_template, '<strong>', $discount, '</strong>', $product_label );
if ( ( $is_pro || $is_expired ) && ! empty( $pro_product_slug ) ) {
$config['plugin_meta_targets'] = array( $pro_product_slug );
}

$config['message'] = $message;
$config['cta_label'] = $cta_label;

$config['sale_url'] = add_query_arg(
$url_params,
tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/vizualizer-bf', 'bfcm', 'visualizer' ) )
Expand Down
20 changes: 10 additions & 10 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading