PluginProbe
Post Grid Gutenberg Blocks – PostX / 5.0.32
Post Grid Gutenberg Blocks – PostX v5.0.32
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.32, at classes/Options.php

305 lines 10.2 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-07-06 00:00 Asia/Dhaka',
76 'end' => '2026-08-01 23:59 Asia/Dhaka',
77 'text' => __(
78 'Summer Sale - Up to 50 % OFF',
79 'ultimate-post'
80 ),
81 'utmKey' => 'summer_sale_meta',
82 ),
83 );
84
85 $setting_link = array(
86 'ultp_options' => '<a href="' . esc_url( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) . '">' . esc_html__( 'Starter Sites', 'ultimate-post' ) . '</a>',
87 );
88
89 $upgrade_link = array();
90
91 // Free user or expired license user.
92 if ( ! defined( 'ULTP_PRO_VER' ) || Xpo::is_lc_expired() ) {
93
94 $license_key = Xpo::get_lc_key() ?? '';
95
96 if ( Xpo::is_lc_expired() ) {
97 $text = esc_html__( 'Renew License', 'ultimate-post' );
98 $url = 'https://account.wpxpo.com/checkout/?edd_license_key=' . $license_key;
99 } else {
100
101 $text = esc_html__( 'Upgrade to Pro', 'ultimate-post' );
102 $url = Xpo::generate_utm_link();
103
104 foreach ( $offer_config as $offer ) {
105 $current_time = gmdate( 'U' );
106 $notice_start = gmdate( 'U', strtotime( $offer['start'] ) );
107 $notice_end = gmdate( 'U', strtotime( $offer['end'] ) );
108 if ( $current_time >= $notice_start && $current_time <= $notice_end ) {
109 $url = Xpo::generate_utm_link(
110 array(
111 'utmKey' => $offer['utmKey'],
112 )
113 );
114 $text = $offer['text'];
115 break;
116 }
117 }
118 }
119
120 $upgrade_link['ultp_pro'] = '<a style="color: #0062ff; font-weight: bold;" target="_blank" href="' . esc_url( $url ) . '">' . esc_html( $text ) . '</a>';
121 }
122
123 return array_merge( $setting_link, $links, $upgrade_link );
124 }
125
126
127 /**
128 * Add admin menu option page and submenus.
129 *
130 * @since v.1.0.0
131 * @return void No return value.
132 */
133 public static function menu_page_callback() {
134 $ultp_menu_icon = 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA0OC4zIj4NCiAgPGRlZnM+DQogICAgPHN0eWxlPg0KICAgICAgLmNscy0xIHsNCiAgICAgICAgZmlsbDogI2E3YWFhZDsNCiAgICAgIH0NCiAgICA8L3N0eWxlPg0KICA8L2RlZnM+DQogIDx0aXRsZT5Qb3N0eCBJY29uIGNtcHJzc2QgU1ZHPC90aXRsZT4NCiAgPGc+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMTguODEsOXY4LjlIOC4xOUE2LjE5LDYuMTksMCwwLDAsMiwyMy43N2EzLjE2LDMuMTYsMCwwLDEtMi0yLjk0VjRBMy4xNiwzLjE2LDAsMCwxLDMuMTUuODVIMjBhMy4xOCwzLjE4LDAsMCwxLDMsMi4zMUE2LjIxLDYuMjEsMCwwLDAsMTguODEsOVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDUsOVYyM0gzMS4xYTYuMjMsNi4yMywwLDAsMC00LjkzLTQuOTNBNS41NCw1LjU0LDAsMCwwLDI1LDE3Ljk0SDIxLjg1VjlBMy4xNSwzLjE1LDAsMCwxLDIzLjEzLDYuNWEzLjEyLDMuMTIsMCwwLDEsMS40My0uNThsLjA5LDBINDEuODNBMy4xNCwzLjE0LDAsMCwxLDQ1LDlaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0wLjg1KSIvPg0KICAgIDxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUwLDI5LjE3VjQ2YTMuMTYsMy4xNiwwLDAsMS0zLjE1LDMuMTVIMzBhMy4xOCwzLjE4LDAsMCwxLTMtMi4zMUE2LjIyLDYuMjIsMCwwLDAsMzEuMjEsNDFWMjZINDYuODVhMy4zLDMuMywwLDAsMSwxLjE0LjIxQTMuMTYsMy4xNiwwLDAsMSw1MCwyOS4xN1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjguMTYsMjQuMTNWNDFhMy4xMywzLjEzLDAsMCwxLTEuMjksMi41NCwzLDMsMCwwLDEtMS40Ny41OGwwLDBIOC4xOUEzLjE1LDMuMTUsMCwwLDEsNSw0MVYyNGEzLjE3LDMuMTcsMCwwLDEsMy4xNS0zSDI1YTMuMTIsMy4xMiwwLDAsMSwxLjE0LjIyLDMuMjQsMy4yNCwwLDAsMSwxLjksMi4xQTMuNjMsMy42MywwLDAsMSwyOC4xNiwyNC4xM1oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTAuODUpIi8+DQogIDwvZz4NCjwvc3ZnPg0K';
135 $menupage_cap = apply_filters( 'ultp_menu_page_capability', 'manage_options' );
136 add_menu_page(
137 __( 'PostX', 'ultimate-post' ),
138 __( 'PostX', 'ultimate-post' ),
139 $menupage_cap,
140 'ultp-settings',
141 array( self::class, 'ultp_dashboard' ),
142 $ultp_menu_icon,
143 58.5
144 );
145
146 add_submenu_page(
147 'ultp-settings',
148 __( 'PostX Dashboard', 'ultimate-post' ),
149 __( 'Getting Started', 'ultimate-post' ),
150 $menupage_cap,
151 'ultp-settings'
152 );
153
154 $menu_lists = array(
155 'startersites' => esc_html__( 'Starter Sites', 'ultimate-post' ),
156 'builder' => esc_html__( 'Site Builder', 'ultimate-post' ),
157 'saved-templates' => esc_html__( 'Saved Templates', 'ultimate-post' ),
158 'custom-font' => esc_html__( 'Custom Font', 'ultimate-post' ),
159 'addons' => esc_html__( 'Add-ons', 'ultimate-post' ),
160 'blocks' => esc_html__( 'Blocks', 'ultimate-post' ),
161 'settings' => esc_html__( 'Settings', 'ultimate-post' ),
162 );
163 if ( defined( 'ULTP_PRO_VER' ) ) {
164 $menu_lists['license'] = esc_html__( 'License ', 'ultimate-post' );
165 }
166
167 foreach ( $menu_lists as $key => $val ) {
168 add_submenu_page(
169 'ultp-settings',
170 $val,
171 $val,
172 $menupage_cap,
173 'ultp-settings#' . $key,
174 array( __CLASS__, 'render_main' )
175 );
176 }
177 add_submenu_page(
178 'ultp-settings',
179 esc_html__( 'Initial Setup', 'ultimate-post' ),
180 esc_html__( 'Initial Setup', 'ultimate-post' ),
181 $menupage_cap,
182 'ultp-setup-wizard',
183 array( __CLASS__, 'ultp_wizard_page' )
184 );
185
186 $pro_link = '';
187 $pro_link_text = '';
188
189 // Check if current date is between November 5th and December 10th
190 $current_date = current_time( 'Y-m-d' );
191 $start_date = date( 'Y' ) . '-01-01'; // January 1st of current year
192 $end_date = date( 'Y' ) . '-02-15'; // February 15th of current year
193 $menu_pro_text_period = ( $current_date >= $start_date && $current_date <= $end_date );
194
195 if ( ! Xpo::is_lc_active() ) {
196 $pro_link = Xpo::generate_utm_link(
197 array(
198 'utmKey' => 'sub_menu',
199 )
200 );
201 $pro_link_text = $menu_pro_text_period ? __( 'New Year Offer!', 'ultimate-post' ) : __( 'Upgrade to Pro', 'ultimate-post' );
202 } elseif ( Xpo::is_lc_expired() ) {
203 $license_key = Xpo::get_lc_key();
204 $pro_link = 'https://account.wpxpo.com/checkout/?edd_license_key=' . $license_key;
205 $pro_link_text = __( 'Renew License', 'ultimate-post' );
206 }
207
208 if ( ! empty( $pro_link ) ) {
209 ob_start();
210 ?>
211 <a href="<?php echo esc_url( $pro_link ); ?>" target="_blank" class="ultp-go-pro">
212 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
213 <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>
214 </svg>
215 <span><?php echo esc_html( $pro_link_text ); ?></span>
216 </a>
217 <?php
218 $submenu_content = ob_get_clean();
219
220 add_submenu_page(
221 'ultp-settings',
222 '',
223 $submenu_content,
224 'manage_options',
225 'ultp-pro',
226 array( self::class, 'handle_external_redirects' )
227 );
228 }
229
230 add_theme_page(
231 __( 'Starter Sites', 'ultimate-post' ),
232 __( 'Starter Sites', 'ultimate-post' ),
233 $menupage_cap,
234 'ultp-startersites',
235 array( self::class, 'handle_external_redirects' )
236 );
237 }
238
239 /**
240 * Handle external redirects for menu and pro links.
241 *
242 * @since v.1.0.0
243 * @return void No return value.
244 */
245 public function handle_external_redirects() {
246 if (empty($_GET['page'])) { // @codingStandardsIgnoreLine
247 return;
248 }
249 $_page = sanitize_key( $_GET['page'] );
250 if ('ultp-startersites' === $_page) { // @codingStandardsIgnoreLine
251 exit( wp_safe_redirect( admin_url( 'admin.php?page=ultp-settings#startersites' ) ) );
252 } else if ('go_postx_pro' === $_page) { // @codingStandardsIgnoreLine
253 wp_redirect(
254 Xpo::generate_utm_link(
255 array(
256 'utmKey' => 'dashboard_go_pro',
257 )
258 )
259 );
260 die();
261 }
262 }
263
264 /**
265 * Render the wizard page.
266 *
267 * @since v.2.4.4
268 */
269 public static function ultp_wizard_page() {
270 ?>
271 <div class="ultp-wizard-page-wrap" id="ultp-wizard-page"></div>
272 <?php
273 }
274
275 /**
276 * Render the dashboard page.
277 *
278 * @since v.1.0.0
279 * @return void No return value.
280 */
281 public static function ultp_dashboard() {
282 echo '<div id="ultp-dashboard"></div>';
283 }
284
285 /**
286 * Remove all notifications from menu page.
287 *
288 * @since v.1.0.0
289 * @return void No return value.
290 */
291 public static function remove_all_notices() {
292 if (isset($_GET['page'])) { // @codingStandardsIgnoreLine
293 $page = sanitize_key($_GET['page']); // @codingStandardsIgnoreLine
294 if (
295 $page === 'ultp-settings' ||
296 $page === 'ultp-license' ||
297 $page === 'ultp-setup-wizard'
298 ) {
299 remove_all_actions( 'admin_notices' );
300 remove_all_actions( 'all_admin_notices' );
301 }
302 }
303 }
304 }
305