PluginProbe
Post Grid Gutenberg Blocks – PostX / 5.0.13
Post Grid Gutenberg Blocks – PostX v5.0.13
5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 5.0.17 2.1.1 2.1.2 All 237 releases
ultimate-post / classes / Options.php

Options.php in Post Grid Gutenberg Blocks – PostX 5.0.13, at classes/Options.php

314 lines 10.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Options Action.
5 *
6 * @package ULTP\Notice
7 * @since v.1.0.0
8 */
9
10 namespace ULTP;
11
12 use ULTP\Includes\Durbin\Xpo;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * Options class.
18 *
19 * Handles plugin options and settings for Ultimate Post.
20 *
21 * @package ULTP\Options
22 * @since 4.0.0
23 */
24 class Options {
25
26 /**
27 * Setup class.
28 *
29 * @since v.1.0.0
30 */
31 public function __construct() {
32 add_action( 'admin_init', array( $this, 'handle_external_redirects' ) );
33 add_action( 'admin_menu', array( $this, 'menu_page_callback' ) );
34 add_action( 'in_admin_header', array( $this, 'remove_all_notices' ) );
35 add_filter( 'plugin_row_meta', array( $this, 'plugin_settings_meta' ), 10, 2 );
36 add_filter( 'plugin_action_links_' . ULTP_BASE, array( $this, 'plugin_action_links_callback' ) );
37 }
38
39
40 /**
41 * Adds extra links to the plugin row meta on the plugins page.
42 *
43 * @param array $links Existing plugin meta links.
44 * @param string $file Plugin file path.
45 * @return array Modified plugin meta links.
46 */
47 public function plugin_settings_meta( $links, $file ) {
48 if ( strpos( $file, 'ultimate-post.php' ) !== false ) {
49 $new_links = array(
50 'ultp_docs' => '<a href="https://wpxpo.com/docs/" target="_blank">' . esc_html__( 'Docs', 'ultimate-post' ) . '</a>',
51 'ultp_tutorial' => '<a href="https://www.youtube.com/watch?v=JZxIflYKOuM&list=PLPidnGLSR4qcAwVwIjMo1OVaqXqjUp_s4" target="_blank">' . esc_html__( 'Tutorials', 'ultimate-post' ) . '</a>',
52 'ultp_support' => '<a href="' . esc_url(
53 Xpo::generate_utm_link(
54 array(
55 'url' => 'https://www.wpxpo.com/contact/',
56 'utmKey' => 'plugin_dir_support',
57 )
58 )
59 ) . '" target="_blank">' . esc_html__( 'Support', 'ultimate-post' ) . '</a>',
60 );
61 $links = array_merge( $links, $new_links );
62 }
63 return $links;
64 }
65
66 /**
67 * Adds quick action links below the plugin name.
68 *
69 * @param array $links Default plugin action links.
70 * @return array Modified plugin action links.
71 */
72 public function plugin_action_links_callback( $links ) {
73 $offer_config = array(
74 array(
75 'start' => '2026-02-19 00:00 Asia/Dhaka',
76 'end' => '2026-02-23 23:59 Asia/Dhaka',
77 'text' => __(
78 'Flash Sale - Up to 45% OFF',
79 'ultimate-post'
80 ),
81 'utmKey' => 'flash_sale_meta',
82 ),
83 array(
84 'start' => '2026-03-16 00:00 Asia/Dhaka',
85 'end' => '2026-04-14 23:59 Asia/Dhaka',
86 'text' => __(
87 'Spring Sale - Up to 50% OFF',
88 'ultimate-post'
89 ),
90 'utmKey' => 'spring_sale_meta',
91 ),
92 );
93
94 $setting_link = array(
95 'ultp_options' => '<a href="' . esc_url( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) . '">' . esc_html__( 'Starter Sites', 'ultimate-post' ) . '</a>',
96 );
97
98 $upgrade_link = array();
99
100 // Free user or expired license user.
101 if ( ! defined( 'ULTP_PRO_VER' ) || Xpo::is_lc_expired() ) {
102
103 $license_key = Xpo::get_lc_key() ?? '';
104
105 if ( Xpo::is_lc_expired() ) {
106 $text = esc_html__( 'Renew License', 'ultimate-post' );
107 $url = 'https://account.wpxpo.com/checkout/?edd_license_key=' . $license_key;
108 } else {
109
110 $text = esc_html__( 'Upgrade to Pro', 'ultimate-post' );
111 $url = Xpo::generate_utm_link();
112
113 foreach ( $offer_config as $offer ) {
114 $current_time = gmdate( 'U' );
115 $notice_start = gmdate( 'U', strtotime( $offer['start'] ) );
116 $notice_end = gmdate( 'U', strtotime( $offer['end'] ) );
117 if ( $current_time >= $notice_start && $current_time <= $notice_end ) {
118 $url = Xpo::generate_utm_link(
119 array(
120 'utmKey' => $offer['utmKey'],
121 )
122 );
123 $text = $offer['text'];
124 break;
125 }
126 }
127 }
128
129 $upgrade_link['ultp_pro'] = '<a style="color: #0062ff; font-weight: bold;" target="_blank" href="' . esc_url( $url ) . '">' . esc_html( $text ) . '</a>';
130 }
131
132 return array_merge( $setting_link, $links, $upgrade_link );
133 }
134
135
136 /**
137 * Add admin menu option page and submenus.
138 *
139 * @since v.1.0.0
140 * @return void No return value.
141 */
142 public static function menu_page_callback() {
143 $ultp_menu_icon = 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA0OC4zIj4NCiAgPGRlZnM+DQogICAgPHN0eWxlPg0KICAgICAgLmNscy0xIHsNCiAgICAgICAgZmlsbDogI2E3YWFhZDsNCiAgICAgIH0NCiAgICA8L3N0eWxlPg0KICA8L2RlZnM+DQogIDx0aXRsZT5Qb3N0eCBJY29uIGNtcHJzc2QgU1ZHPC90aXRsZT4NCiAgPGc+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTguODEsOXY4LjlIOC4xOUE2LjE5LDYuMTksMCwwLDAsMiwyMy43N2EzLjE2LDMuMTYsMCwwLDEtMi0yLjk0VjRBMy4xNiwzLjE2LDAsMCwxLDMuMTUuODVIMjBhMy4xOCwzLjE4LDAsMCwxLDMsMi4zMUE2LjIxLDYuMjEsMCwwLDAsMTguODEsOVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDUsOVYyM0gzMS4xYTYuMjMsNi4yMywwLDAsMC00LjkzLTQuOTNBNS41NCw1LjU0LDAsMCwwLDI1LDE3Ljk0SDIxLjg1VjlBMy4xNSwzLjE1LDAsMCwxLDIzLjEzLDYuNWEzLjEyLDMuMTIsMCwwLDEsMS40My0uNThsLjA5LDBINDEuODNBMy4xNCwzLjE0LDAsMCwxLDQ1LDlaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0wLjg1KSIvPg0KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLDI5LjE3VjQ2YTMuMTYsMy4xNiwwLDAsMS0zLjE1LDMuMTVIMzBhMy4xOCwzLjE4LDAsMCwxLTMtMi4zMUE2LjIyLDYuMjIsMCwwLDAsMzEuMjEsNDFWMjZINDYuODVhMy4zLDMuMywwLDAsMSwxLjE0LjIxQTMuMTYsMy4xNiwwLDAsMSw1MCwyOS4xN1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjguMTYsMjQuMTNWNDFhMy4xMywzLjEzLDAsMCwxLTEuMjksMi41NCwzLDMsMCwwLDEtMS40Ny41OGwwLDBIOC4xOUEzLjE1LDMuMTUsMCwwLDEsNSw0MVYyNGEzLjE3LDMuMTcsMCwwLDEsMy4xNS0zSDI1YTMuMTIsMy4xMiwwLDAsMSwxLjE0LjIyLDMuMjQsMy4yNCwwLDAsMSwxLjksMi4xQTMuNjMsMy42MywwLDAsMSwyOC4xNiwyNC4xM1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogIDwvZz4NCjwvc3ZnPg0K';
144 $menupage_cap = apply_filters( 'ultp_menu_page_capability', 'manage_options' );
145 add_menu_page(
146 __( 'PostX', 'ultimate-post' ),
147 __( 'PostX', 'ultimate-post' ),
148 $menupage_cap,
149 'ultp-settings',
150 array( self::class, 'ultp_dashboard' ),
151 $ultp_menu_icon,
152 58.5
153 );
154
155 add_submenu_page(
156 'ultp-settings',
157 __( 'PostX Dashboard', 'ultimate-post' ),
158 __( 'Getting Started', 'ultimate-post' ),
159 $menupage_cap,
160 'ultp-settings'
161 );
162
163 $menu_lists = array(
164 'startersites' => esc_html__( 'Starter Sites', 'ultimate-post' ),
165 'builder' => esc_html__( 'Site Builder', 'ultimate-post' ),
166 'saved-templates' => esc_html__( 'Saved Templates', 'ultimate-post' ),
167 'custom-font' => esc_html__( 'Custom Font', 'ultimate-post' ),
168 'addons' => esc_html__( 'Add-ons', 'ultimate-post' ),
169 'blocks' => esc_html__( 'Blocks', 'ultimate-post' ),
170 'settings' => esc_html__( 'Settings', 'ultimate-post' ),
171 );
172 if ( defined( 'ULTP_PRO_VER' ) ) {
173 $menu_lists['license'] = esc_html__( 'License ', 'ultimate-post' );
174 }
175
176 foreach ( $menu_lists as $key => $val ) {
177 add_submenu_page(
178 'ultp-settings',
179 $val,
180 $val,
181 $menupage_cap,
182 'ultp-settings#' . $key,
183 array( __CLASS__, 'render_main' )
184 );
185 }
186 add_submenu_page(
187 'ultp-settings',
188 esc_html__( 'Initial Setup', 'ultimate-post' ),
189 esc_html__( 'Initial Setup', 'ultimate-post' ),
190 $menupage_cap,
191 'ultp-setup-wizard',
192 array( __CLASS__, 'ultp_wizard_page' )
193 );
194
195 $pro_link = '';
196 $pro_link_text = '';
197
198 // Check if current date is between November 5th and December 10th
199 $current_date = current_time( 'Y-m-d' );
200 $start_date = date( 'Y' ) . '-01-01'; // January 1st of current year
201 $end_date = date( 'Y' ) . '-02-15'; // February 15th of current year
202 $menu_pro_text_period = ( $current_date >= $start_date && $current_date <= $end_date );
203
204 if ( ! Xpo::is_lc_active() ) {
205 $pro_link = Xpo::generate_utm_link(
206 array(
207 'utmKey' => 'sub_menu',
208 )
209 );
210 $pro_link_text = $menu_pro_text_period ? __( 'New Year Offer!', 'ultimate-post' ) : __( 'Upgrade to Pro', 'ultimate-post' );
211 } elseif ( Xpo::is_lc_expired() ) {
212 $license_key = Xpo::get_lc_key();
213 $pro_link = 'https://account.wpxpo.com/checkout/?edd_license_key=' . $license_key;
214 $pro_link_text = __( 'Renew License', 'ultimate-post' );
215 }
216
217 if ( ! empty( $pro_link ) ) {
218 ob_start();
219 ?>
220 <a href="<?php echo esc_url( $pro_link ); ?>" target="_blank" class="ultp-go-pro">
221 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
222 <path d="M2.86 6.553a.5.5 0 01.823-.482l3.02 2.745c.196.178.506.13.64-.098L9.64 4.779a.417.417 0 01.72 0l2.297 3.939a.417.417 0 00.64.098l3.02-2.745a.5.5 0 01.823.482l-1.99 8.63a.833.833 0 01-.813.646H5.663a.833.833 0 01-.812-.646L2.86 6.553z" stroke="currentColor" stroke-width="1.5"></path>
223 </svg>
224 <span><?php echo esc_html( $pro_link_text ); ?></span>
225 </a>
226 <?php
227 $submenu_content = ob_get_clean();
228
229 add_submenu_page(
230 'ultp-settings',
231 '',
232 $submenu_content,
233 'manage_options',
234 'ultp-pro',
235 array( self::class, 'handle_external_redirects' )
236 );
237 }
238
239 add_theme_page(
240 __( 'Starter Sites', 'ultimate-post' ),
241 __( 'Starter Sites', 'ultimate-post' ),
242 $menupage_cap,
243 'ultp-startersites',
244 array( self::class, 'handle_external_redirects' )
245 );
246 }
247
248 /**
249 * Handle external redirects for menu and pro links.
250 *
251 * @since v.1.0.0
252 * @return void No return value.
253 */
254 public function handle_external_redirects() {
255 if (empty($_GET['page'])) { // @codingStandardsIgnoreLine
256 return;
257 }
258 $_page = sanitize_key( $_GET['page'] );
259 if ('ultp-startersites' === $_page) { // @codingStandardsIgnoreLine
260 exit( wp_safe_redirect( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) );
261 } else if ('go_postx_pro' === $_page) { // @codingStandardsIgnoreLine
262 wp_redirect(
263 Xpo::generate_utm_link(
264 array(
265 'utmKey' => 'dashboard_go_pro',
266 )
267 )
268 );
269 die();
270 }
271 }
272
273 /**
274 * Render the wizard page.
275 *
276 * @since v.2.4.4
277 */
278 public static function ultp_wizard_page() {
279 ?>
280 <div class="ultp-wizard-page-wrap" id="ultp-wizard-page"></div>
281 <?php
282 }
283
284 /**
285 * Render the dashboard page.
286 *
287 * @since v.1.0.0
288 * @return void No return value.
289 */
290 public static function ultp_dashboard() {
291 echo '<div id="ultp-dashboard"></div>';
292 }
293
294 /**
295 * Remove all notifications from menu page.
296 *
297 * @since v.1.0.0
298 * @return void No return value.
299 */
300 public static function remove_all_notices() {
301 if (isset($_GET['page'])) { // @codingStandardsIgnoreLine
302 $page = sanitize_key($_GET['page']); // @codingStandardsIgnoreLine
303 if (
304 $page === 'ultp-settings' ||
305 $page === 'ultp-license' ||
306 $page === 'ultp-setup-wizard'
307 ) {
308 remove_all_actions( 'admin_notices' );
309 remove_all_actions( 'all_admin_notices' );
310 }
311 }
312 }
313 }
314