Completed
Push — master ( 1466b8...74a3d9 )
by Stephanie
14s
created

FrmAddonsController::get_addon_info()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
class FrmAddonsController {
4
5
	public static function menu() {
6
		if ( ! current_user_can( 'activate_plugins' ) ) {
7
			return;
8
		}
9
10
		add_submenu_page( 'formidable', 'Formidable | ' . __( 'Add-Ons', 'formidable' ), __( 'Add-Ons', 'formidable' ), 'frm_view_forms', 'formidable-addons', 'FrmAddonsController::list_addons' );
11
12
		if ( ! FrmAppHelper::pro_is_installed() ) {
13
			add_submenu_page( 'formidable', 'Formidable | ' . __( 'Upgrade to Pro', 'formidable' ), __( 'Upgrade to Pro', 'formidable' ), 'frm_view_forms', 'formidable-pro-upgrade', 'FrmAddonsController::upgrade_to_pro' );
14
		}
15
	}
16
17
	public static function list_addons() {
18
		$installed_addons = apply_filters( 'frm_installed_addons', array() );
19
20
		$addons = self::get_api_addons();
21
		$errors = array();
22
		if ( isset( $addons['error'] ) ) {
23
			$api    = new FrmFormApi();
24
			$errors = $api->get_error_from_response( $addons );
25
			unset( $addons['error'] );
26
		}
27
		self::prepare_addons( $addons );
28
29
		$pricing = FrmAppHelper::admin_upgrade_link( 'addons' );
30
31
		include( FrmAppHelper::plugin_path() . '/classes/views/addons/list.php' );
32
	}
33
34
	public static function license_settings() {
35
		$plugins = apply_filters( 'frm_installed_addons', array() );
36
		if ( empty( $plugins ) ) {
37
			esc_html_e( 'There are no plugins on your site that require a license', 'formidable' );
38
			return;
39
		}
40
41
		ksort( $plugins );
42
43
		include( FrmAppHelper::plugin_path() . '/classes/views/addons/settings.php' );
44
	}
45
46
	private static function get_api_addons() {
47
		$api = new FrmFormApi();
48
		$addons = $api->get_api_info();
49
50
		if ( empty( $addons ) ) {
51
			$addons = self::fallback_plugin_list();
52
		} else {
53
			foreach ( $addons as $k => $addon ) {
54
				if ( empty( $addon['excerpt'] ) && $k !== 'error' ) {
55
					unset( $addons[ $k ] );
56
				}
57
			}
58
		}
59
60
		return $addons;
61
	}
62
63
	/**
64
	 * If the API is unable to connect, show something on the addons page
65
	 *
66
	 * @since 3.04.03
67
	 * @return array
68
	 */
69
	private static function fallback_plugin_list() {
70
		return array(
71
			'formidable-pro' => array(
72
				'title'   => 'Formidable Pro',
73
				'link'    => 'pricing/',
74
				'docs'    => '',
75
				'excerpt' => 'Enhance your basic Formidable forms with a plethora of Pro field types and features. Create advanced forms and data-driven applications in minutes.',
76
			),
77
			'mailchimp' => array(
78
				'title'   => 'MailChimp Forms',
79
				'excerpt' => 'Get on the path to more sales and leads in a matter of minutes. Add leads to a MailChimp mailing list when they submit forms and update their information along with the entry.',
80
			),
81
			'registration' => array(
82
				'title'   => 'User Registration Forms',
83
				'link'    => 'downloads/user-registration/',
84
				'excerpt' => 'Give new users access to your site as quickly and painlessly as possible. Allow users to register, edit and be able to login to their profiles on your site from the front end in a clean, customized registration form.',
85
			),
86
			'paypal' => array(
87
				'title'   => 'PayPal Standard Forms',
88
				'link'    => 'downloads/paypal-standard/',
89
				'excerpt' => 'Automate your business by collecting instant payments from your clients. Collect information, calculate a total, and send them on to PayPal. Require a payment before publishing content on your site.',
90
			),
91
			'stripe' => array(
92
				'title'   => 'Stripe Forms',
93
				'docs'    => 'knowledgebase/stripe/',
94
				'excerpt' => 'Any Formidable forms on your site can accept credit card payments without users ever leaving your site.',
95
			),
96
			'authorize-net' => array(
97
				'title'   => 'Authorize.net AIM Forms',
98
				'link'    => 'downloads/authorize-net-aim/',
99
				'docs'    => 'knowledgebase/authorize-net-aim/',
100
				'excerpt' => 'Accept one-time payments directly on your site, using Authorize.net AIM.',
101
			),
102
			'woocommerce' => array(
103
				'title'   => 'WooCommerce Forms',
104
				'excerpt' => 'Use a Formidable form on your WooCommerce product pages.',
105
			),
106
			'autoresponder' => array(
107
				'title'   => 'Form Action Automation',
108
				'docs'    => 'knowledgebase/schedule-autoresponder/',
109
				'excerpt' => 'Schedule email notifications, SMS messages, and API actions.',
110
			),
111
			'modal' => array(
112
				'title'   => 'Bootstrap Modal Forms',
113
				'link'    => 'downloads/bootstrap-modal/',
114
				'docs'    => 'knowledgebase/bootstrap-modal/',
115
				'excerpt' => 'Open a view or form in a Bootstrap popup.',
116
			),
117
			'bootstrap' => array(
118
				'title'   => 'Bootstrap Style Forms',
119
				'excerpt' => 'Instantly add Bootstrap styling to all your Formidable forms.',
120
			),
121
			'zapier' => array(
122
				'title'   => 'Zapier Forms',
123
				'excerpt' => 'Connect with hundreds of different applications through Zapier. Insert a new row in a Google docs spreadsheet, post on Twitter, or add a new Dropbox file with your form.',
124
			),
125
			'signature' => array(
126
				'title'   => 'Digital Signature Forms',
127
				'excerpt' => 'Add a signature field to your form. The user may write their signature with a trackpad/mouse or just type it.',
128
			),
129
			'api' => array(
130
				'title'   => 'Formidable Forms API',
131
				'link'    => 'downloads/formidable-api/',
132
				'excerpt' => 'Send entry results to any other site that has a Rest API. This includes the option of sending entries from one Formidable site to another.',
133
			),
134
			'twilio' => array(
135
				'title'   => 'Twilio SMS Forms',
136
				'docs'    => 'knowledgebase/twilio-add-on/',
137
				'excerpt' => 'Allow users to text their votes for polls created by Formidable Forms, or send SMS notifications when entries are submitted or updated.',
138
			),
139
		);
140
	}
141
142
	/**
143
	 * If Pro is missing but has been authenticated, include a download URL
144
	 *
145
	 * @since 3.04.03
146
	 * @return string
147
	 */
148
	public static function get_pro_download_url() {
149
		$pro_cred_store  = 'frmpro-credentials';
150
		$pro_wpmu_store  = 'frmpro-wpmu-sitewide';
151
		if ( is_multisite() && get_site_option( $pro_wpmu_store ) ) {
152
			$creds = get_site_option( $pro_cred_store );
153
		} else {
154
			$creds = get_option( $pro_cred_store );
155
		}
156
157
		if ( empty( $creds ) || ! is_array( $creds ) || ! isset( $creds['license'] ) ) {
158
			return '';
159
		}
160
161
		$license = $creds['license'];
162
		if ( empty( $license ) ) {
163
			return '';
164
		}
165
166
		if ( strpos( $license, '-' ) ) {
167
			// this is a fix for licenses saved in the past
168
			$license = strtoupper( $license );
169
		}
170
171
		$api = new FrmFormApi( $license );
172
		$downloads = $api->get_api_info();
173
		$pro = isset( $downloads['93790'] ) ? $downloads['93790'] : array();
174
175
		return isset( $pro['url'] ) ? $pro['url'] : '';
176
	}
177
178
	/**
179
	 * @since 3.04.03
180
	 */
181
	public static function check_update( $transient ) {
182
		if ( ! is_object( $transient ) ) {
183
			$transient = new stdClass();
184
		}
185
186
		$installed_addons = apply_filters( 'frm_installed_addons', array() );
187
		if ( empty( $installed_addons ) ) {
188
			return $transient;
189
		}
190
191
		$version_info = self::fill_update_addon_info( $installed_addons );
192
193
		$transient->last_checked = time();
194
195
		$wp_plugins = get_plugins();
196
197
		foreach ( $version_info as $id => $plugin ) {
198
			$plugin = (object) $plugin;
199
200
			if ( ! isset( $plugin->new_version ) || ! isset( $plugin->package ) ) {
201
				continue;
202
			}
203
204
			$folder = $plugin->plugin;
205
			if ( empty( $folder ) ) {
206
				continue;
207
			}
208
209
			if ( ! self::is_installed( $folder ) ) {
210
				// don't show an update if the plugin isn't installed
211
				continue;
212
			}
213
214
			$wp_plugin  = isset( $wp_plugins[ $folder ] ) ? $wp_plugins[ $folder ] : array();
215
			$wp_version = isset( $wp_plugin['Version'] ) ? $wp_plugin['Version'] : '1.0';
216
217
			if ( version_compare( $wp_version, $plugin->new_version, '<' ) ) {
218
				$slug = explode( '/', $folder );
219
				$plugin->slug = $slug[0];
220
				$transient->response[ $folder ] = $plugin;
221
			}
222
223
			$transient->checked[ $folder ] = $wp_version;
224
225
		}
226
227
		return $transient;
228
	}
229
230
	/**
231
	 * Check if a plugin is installed before showing an update for it
232
	 *
233
	 * @since 3.05
234
	 * @param string $plugin - the folder/filename.php for a plugin
235
	 * @return bool - True if installed
236
	 */
237
	private static function is_installed( $plugin ) {
238
		if ( ! function_exists( 'get_plugins' ) ) {
239
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
240
		}
241
242
		$all_plugins = get_plugins();
243
		return isset( $all_plugins[ $plugin ] );
244
	}
245
246
	/**
247
	 * @since 3.04.03
248
	 *
249
	 * @param array $installed_addons
250
	 *
251
	 * @return array
252
	 */
253
	private static function fill_update_addon_info( $installed_addons ) {
254
		$checked_licenses = array();
255
		$version_info     = array();
256
257
		foreach ( $installed_addons as $addon ) {
258
			if ( $addon->store_url !== 'https://formidableforms.com' ) {
259
				// check if this is a third-party addon
260
				continue;
261
			}
262
263
			$new_license = $addon->license;
264
			if ( empty( $new_license ) || in_array( $new_license, $checked_licenses ) ) {
265
				continue;
266
			}
267
268
			$checked_licenses[] = $new_license;
269
270
			$api = new FrmFormApi( $new_license );
271
			if ( empty( $version_info ) ) {
272
				$version_info = $api->get_api_info();
273
				continue;
274
			}
275
276
			$plugin = $api->get_addon_for_license( $addon, $version_info );
277
			if ( empty( $plugin ) ) {
278
				continue;
279
			}
280
281
			$download_id = isset( $plugin['id'] ) ? $plugin['id'] : 0;
282
			if ( ! empty( $download_id ) && ! isset( $version_info[ $download_id ]['package'] ) ) {
283
				// if this addon is using its own license, get the update url
284
				$addon_info = $api->get_api_info();
285
286
				$version_info[ $download_id ] = $addon_info[ $download_id ];
287
				if ( isset( $addon_info['error'] ) ) {
288
					$version_info[ $download_id ]['error'] = array(
289
						'message' => $addon_info['error']['message'],
290
						'code'    => $addon_info['error']['code'],
291
					);
292
				}
293
			}
294
		}
295
296
		return $version_info;
297
	}
298
299
	/**
300
	 * @since 3.04.03
301
	 * @param array $addons
302
	 * @param object $license The FrmAddon object
303
	 * @return array
304
	 */
305
	public static function get_addon_for_license( $addons, $license ) {
306
		$download_id = $license->download_id;
307
		$plugin = array();
308 View Code Duplication
		if ( empty( $download_id ) && ! empty( $addons ) ) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
309
			foreach ( $addons as $addon ) {
310
				if ( strtolower( $license->plugin_name ) == strtolower( $addon['title'] ) ) {
311
					return $addon;
312
				}
313
			}
314
		} elseif ( isset( $addons[ $download_id ] ) ) {
315
			$plugin = $addons[ $download_id ];
316
		}
317
318
		return $plugin;
319
	}
320
321
	private static function prepare_addons( &$addons ) {
322
		$activate_url = '';
323
		if ( current_user_can( 'activate_plugins' ) ) {
324
			$activate_url = add_query_arg( array( 'action' => 'activate' ), admin_url( 'plugins.php' ) );
325
		}
326
327
		$loop_addons = $addons;
328
		foreach ( $loop_addons as $id => $addon ) {
329
			if ( is_numeric( $id ) ) {
330
				$slug = str_replace( array( '-wordpress-plugin', '-wordpress' ), '', $addon['slug'] );
331
				$file_name = $addon['plugin'];
332
			} else {
333
				$slug = $id;
334
				if ( isset( $addon['file'] ) ) {
335
					$base_file = $addon['file'];
336
				} else {
337
					$base_file = 'formidable-' . $slug;
338
				}
339
				$file_name = $base_file . '/' . $base_file . '.php';
340
			}
341
342
			$addon['installed']    = self::is_installed( $file_name );
343
			$addon['activate_url'] = '';
344
345
			if ( $addon['installed'] && ! empty( $activate_url ) && ! is_plugin_active( $file_name ) ) {
346
				$addon['activate_url'] = add_query_arg(
347
					array(
348
						'_wpnonce'    => wp_create_nonce( 'activate-plugin_' . $file_name ),
349
						'plugin'      => $file_name,
350
					),
351
					$activate_url
352
				);
353
			}
354
355
			if ( ! isset( $addon['docs'] ) ) {
356
				$addon['docs'] = 'knowledgebase/formidable-' . $slug . '/';
357
			}
358
			self::prepare_addon_link( $addon['docs'] );
359
360
			if ( ! isset( $addon['link'] ) ) {
361
				$addon['link'] = 'downloads/' . $slug . '/';
362
			}
363
			self::prepare_addon_link( $addon['link'] );
364
365
			self::set_addon_status( $addon );
366
			$addons[ $id ] = $addon;
367
		}
368
	}
369
370
	/**
371
	 * @since 3.04.02
372
	 */
373
	private static function prepare_addon_link( &$link ) {
374
		$site_url = 'https://formidableforms.com/';
375
		if ( strpos( $link, 'http' ) !== 0 ) {
376
			$link = $site_url . $link;
377
		}
378
		$link = FrmAppHelper::make_affiliate_url( $link );
379
		$query_args = array(
380
			'utm_source'   => 'WordPress',
381
			'utm_medium'   => 'addons',
382
			'utm_campaign' => 'liteplugin',
383
		);
384
		$link = add_query_arg( $query_args, $link );
385
	}
386
387
	/**
388
	 * Add the status to the addon array. Status options are:
389
	 * installed, active, not installed
390
	 *
391
	 * @since 3.04.02
392
	 */
393
	private static function set_addon_status( &$addon ) {
394
		if ( ! empty( $addon['activate_url'] ) ) {
395
			$addon['status'] = array(
396
				'type'  => 'installed',
397
				'label' => __( 'Installed', 'formidable' ),
398
			);
399
		} elseif ( $addon['installed'] ) {
400
			$addon['status'] = array(
401
				'type'  => 'active',
402
				'label' => __( 'Active', 'formidable' ),
403
			);
404
		} else {
405
			$addon['status'] = array(
406
				'type'  => 'not-installed',
407
				'label' => __( 'Not Installed', 'formidable' ),
408
			);
409
		}
410
	}
411
412
	public static function upgrade_to_pro() {
413
		$pro_pricing = self::prepare_pro_info();
414
415
		include( FrmAppHelper::plugin_path() . '/classes/views/addons/upgrade_to_pro.php' );
416
	}
417
418
	private static function prepare_pro_info() {
419
		return array(
420
			'personal'     => array(
421
				'id'       => 2,
422
				'download' => 19367654,
423
				'price'    => '49.00',
424
				'name'     => 'Personal',
425
			),
426
			'professional' => array(
427
				'id'       => 0,
428
				'download' => 19367001,
429
				'price'    => '99.00',
430
				'name'     => 'Creator',
431
			),
432
			'smallbusiness' => array(
433
				'id'       => 0,
434
				'download' => 19366995,
435
				'price'    => '199.00',
436
				'name'     => 'Business',
437
			),
438
			'enterprise'   => array(
439
				'id'       => 0,
440
				'download' => 19366992,
441
				'price'    => '399.00',
442
				'name'     => 'Enterprise',
443
			),
444
		);
445
	}
446
447
	/**
448
	 * @since 3.04.02
449
	 */
450
	public static function ajax_install_addon() {
451
452
		self::install_addon_permissions();
453
454
		// Set the current screen to avoid undefined notices.
455
		global $hook_suffix;
456
		set_current_screen();
457
458
		self::maybe_show_cred_form();
459
460
		$installed = self::install_addon();
461
		self::maybe_activate_addon( $installed );
462
463
		// Send back a response.
464
		echo json_encode( true );
465
		wp_die();
466
	}
467
468
	/**
469
	 * @since 3.04.02
470
	 */
471
	private static function maybe_show_cred_form() {
472
		// Start output bufferring to catch the filesystem form if credentials are needed.
473
		ob_start();
474
475
		$show_form = false;
476
		$method = '';
477
		$url    = add_query_arg( array( 'page' => 'formidable-settings' ), admin_url( 'admin.php' ) );
478
		$url    = esc_url_raw( $url );
479
		$creds  = request_filesystem_credentials( $url, $method, false, false, null );
480
481
		if ( false === $creds ) {
482
			$show_form = true;
483
		} elseif ( ! WP_Filesystem( $creds ) ) {
484
			request_filesystem_credentials( $url, $method, true, false, null );
485
			$show_form = true;
486
		}
487
488
		if ( $show_form ) {
489
			$form = ob_get_clean();
0 ignored issues
show
Unused Code introduced by
$form is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
490
			//TODO: test this: echo json_encode( array( 'form' => $form ) );
491
			echo json_encode( array( 'form' => __( 'Sorry, you\'re site requires FTP authentication. Please install plugins manaully.', 'formidable' ) ) );
492
			wp_die();
493
		}
494
495
		ob_end_clean();
496
	}
497
498
	/**
499
	 * We do not need any extra credentials if we have gotten this far,
500
	 * so let's install the plugin.
501
	 *
502
	 * @since 3.04.02
503
	 */
504
	private static function install_addon() {
505
		require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
506
507
		$download_url = esc_url_raw( $_POST['plugin'] );
508
509
		// Create the plugin upgrader with our custom skin.
510
		$installer = new Plugin_Upgrader( new FrmInstallerSkin() );
511
		$installer->install( $download_url );
512
513
		// Flush the cache and return the newly installed plugin basename.
514
		wp_cache_flush();
515
		return $installer->plugin_info();
516
	}
517
518
	/**
519
	 * @since 3.04.02
520
	 */
521
	private static function maybe_activate_addon( $installed ) {
522
		if ( ! $installed ) {
523
			return;
524
		}
525
526
		$activate = activate_plugin( $installed );
527
		if ( is_wp_error( $activate ) ) {
528
			echo json_encode( array( 'error' => $activate->get_error_message() ) );
529
			wp_die();
530
		}
531
	}
532
533
	/**
534
	 * Run security checks before installing
535
	 *
536
	 * @since 3.04.02
537
	 */
538
	private static function install_addon_permissions() {
539
		check_ajax_referer( 'frm_ajax', 'nonce' );
540
541
		if ( ! current_user_can( 'activate_plugins' ) || ! isset( $_POST['plugin'] ) ) {
542
			echo json_encode( true );
543
			wp_die();
544
		}
545
	}
546
547
	/**
548
	 * @since 3.04.03
549
	 * @deprecated 3.06
550
	 * @codeCoverageIgnore
551
	 * @return array
552
	 */
553
	public static function error_for_license( $license ) {
554
		return FrmDeprecated::error_for_license( $license );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::error_for_license() has been deprecated with message: 3.06

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
555
	}
556
557
	/**
558
	 * @since 3.04.03
559
	 * @deprecated 3.06
560
	 * @codeCoverageIgnore
561
	 */
562
	public static function get_pro_updater() {
563
		return FrmDeprecated::get_pro_updater();
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::get_pro_updater() has been deprecated with message: 3.06

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
564
	}
565
566
	/**
567
	 * @since 3.04.03
568
	 * @deprecated 3.06
569
	 * @codeCoverageIgnore
570
	 *
571
	 * @return array
572
	 */
573
	public static function get_addon_info( $license = '' ) {
574
		return FrmDeprecated::get_addon_info( $license );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::get_addon_info() has been deprecated with message: 3.06

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
575
	}
576
577
	/**
578
	 * @since 3.04.03
579
	 * @deprecated 3.06
580
	 * @codeCoverageIgnore
581
	 *
582
	 * @return string
583
	 */
584
	public static function get_cache_key( $license ) {
585
		return FrmDeprecated::get_cache_key( $license );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::get_cache_key() has been deprecated with message: 3.06

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
586
	}
587
588
	/**
589
	 * @since 3.04.03
590
	 * @deprecated 3.06
591
	 * @codeCoverageIgnore
592
	 */
593
	public static function reset_cached_addons( $license = '' ) {
594
		FrmDeprecated::reset_cached_addons( $license );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::reset_cached_addons() has been deprecated with message: 3.06

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
595
	}
596
597
	/**
598
	 * @since 2.03.08
599
	 * @deprecated 3.04.03
600
	 * @codeCoverageIgnore
601
	 *
602
	 * @param boolean $return
603
	 * @param string $package
604
	 *
605
	 * @return boolean
606
	 */
607
	public static function add_shorten_edd_filename_filter( $return, $package ) {
608
		return FrmDeprecated::add_shorten_edd_filename_filter( $return, $package );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::add_shorten_edd_filename_filter() has been deprecated with message: 3.04.03

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
609
	}
610
611
	/**
612
	 * @since 2.03.08
613
	 * @deprecated 3.04.03
614
	 * @codeCoverageIgnore
615
	 *
616
	 * @param string $filename
617
	 * @param string $ext
618
	 *
619
	 * @return string
620
	 */
621
	public static function shorten_edd_filename( $filename, $ext ) {
622
		return FrmDeprecated::shorten_edd_filename( $filename, $ext );
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::shorten_edd_filename() has been deprecated with message: 3.04.03

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
623
	}
624
625
	/**
626
	 * @deprecated 3.04.03
627
	 * @codeCoverageIgnore
628
	 */
629
	public static function get_licenses() {
630
		FrmDeprecated::get_licenses();
1 ignored issue
show
Deprecated Code introduced by
The method FrmDeprecated::get_licenses() has been deprecated with message: 3.04.03

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
631
	}
632
}
633