@@ -669,7 +669,7 @@ discard block |
||
669 | 669 | } |
670 | 670 | |
671 | 671 | function wpinv_get_payment_key( $invoice_id = 0 ) { |
672 | - $invoice = new WPInv_Invoice( $invoice_id ); |
|
672 | + $invoice = new WPInv_Invoice( $invoice_id ); |
|
673 | 673 | return $invoice->get_key(); |
674 | 674 | } |
675 | 675 | |
@@ -919,7 +919,7 @@ discard block |
||
919 | 919 | return false; |
920 | 920 | } |
921 | 921 | $invoice = wpinv_get_invoice_cart(); |
922 | - if ( empty( $invoice ) ) { |
|
922 | + if ( empty( $invoice ) ) { |
|
923 | 923 | return false; |
924 | 924 | } |
925 | 925 | |
@@ -1212,20 +1212,20 @@ discard block |
||
1212 | 1212 | } |
1213 | 1213 | |
1214 | 1214 | function wpinv_checkout_get_cc_info() { |
1215 | - $cc_info = array(); |
|
1216 | - $cc_info['card_name'] = isset( $_POST['card_name'] ) ? sanitize_text_field( $_POST['card_name'] ) : ''; |
|
1217 | - $cc_info['card_number'] = isset( $_POST['card_number'] ) ? sanitize_text_field( $_POST['card_number'] ) : ''; |
|
1218 | - $cc_info['card_cvc'] = isset( $_POST['card_cvc'] ) ? sanitize_text_field( $_POST['card_cvc'] ) : ''; |
|
1219 | - $cc_info['card_exp_month'] = isset( $_POST['card_exp_month'] ) ? sanitize_text_field( $_POST['card_exp_month'] ) : ''; |
|
1220 | - $cc_info['card_exp_year'] = isset( $_POST['card_exp_year'] ) ? sanitize_text_field( $_POST['card_exp_year'] ) : ''; |
|
1221 | - $cc_info['card_address'] = isset( $_POST['wpinv_address'] ) ? sanitize_text_field( $_POST['wpinv_address'] ) : ''; |
|
1222 | - $cc_info['card_city'] = isset( $_POST['wpinv_city'] ) ? sanitize_text_field( $_POST['wpinv_city'] ) : ''; |
|
1223 | - $cc_info['card_state'] = isset( $_POST['wpinv_state'] ) ? sanitize_text_field( $_POST['wpinv_state'] ) : ''; |
|
1224 | - $cc_info['card_country'] = isset( $_POST['wpinv_country'] ) ? sanitize_text_field( $_POST['wpinv_country'] ) : ''; |
|
1225 | - $cc_info['card_zip'] = isset( $_POST['wpinv_zip'] ) ? sanitize_text_field( $_POST['wpinv_zip'] ) : ''; |
|
1226 | - |
|
1227 | - // Return cc info |
|
1228 | - return $cc_info; |
|
1215 | + $cc_info = array(); |
|
1216 | + $cc_info['card_name'] = isset( $_POST['card_name'] ) ? sanitize_text_field( $_POST['card_name'] ) : ''; |
|
1217 | + $cc_info['card_number'] = isset( $_POST['card_number'] ) ? sanitize_text_field( $_POST['card_number'] ) : ''; |
|
1218 | + $cc_info['card_cvc'] = isset( $_POST['card_cvc'] ) ? sanitize_text_field( $_POST['card_cvc'] ) : ''; |
|
1219 | + $cc_info['card_exp_month'] = isset( $_POST['card_exp_month'] ) ? sanitize_text_field( $_POST['card_exp_month'] ) : ''; |
|
1220 | + $cc_info['card_exp_year'] = isset( $_POST['card_exp_year'] ) ? sanitize_text_field( $_POST['card_exp_year'] ) : ''; |
|
1221 | + $cc_info['card_address'] = isset( $_POST['wpinv_address'] ) ? sanitize_text_field( $_POST['wpinv_address'] ) : ''; |
|
1222 | + $cc_info['card_city'] = isset( $_POST['wpinv_city'] ) ? sanitize_text_field( $_POST['wpinv_city'] ) : ''; |
|
1223 | + $cc_info['card_state'] = isset( $_POST['wpinv_state'] ) ? sanitize_text_field( $_POST['wpinv_state'] ) : ''; |
|
1224 | + $cc_info['card_country'] = isset( $_POST['wpinv_country'] ) ? sanitize_text_field( $_POST['wpinv_country'] ) : ''; |
|
1225 | + $cc_info['card_zip'] = isset( $_POST['wpinv_zip'] ) ? sanitize_text_field( $_POST['wpinv_zip'] ) : ''; |
|
1226 | + |
|
1227 | + // Return cc info |
|
1228 | + return $cc_info; |
|
1229 | 1229 | } |
1230 | 1230 | |
1231 | 1231 | function wpinv_checkout_validate_cc_zip( $zip = 0, $country_code = '' ) { |
@@ -1422,7 +1422,7 @@ discard block |
||
1422 | 1422 | $required_fields = wpinv_checkout_required_fields(); |
1423 | 1423 | |
1424 | 1424 | // Loop through required fields and show error messages |
1425 | - if ( !empty( $required_fields ) ) { |
|
1425 | + if ( !empty( $required_fields ) ) { |
|
1426 | 1426 | foreach ( $required_fields as $field_name => $value ) { |
1427 | 1427 | if ( in_array( $value, $required_fields ) && empty( $_POST[ 'wpinv_' . $field_name ] ) ) { |
1428 | 1428 | wpinv_set_error( $value['error_id'], $value['error_message'] ); |
@@ -1528,7 +1528,7 @@ discard block |
||
1528 | 1528 | } |
1529 | 1529 | |
1530 | 1530 | function wpinv_get_checkout_session() { |
1531 | - global $wpi_session; |
|
1531 | + global $wpi_session; |
|
1532 | 1532 | |
1533 | 1533 | return $wpi_session->get( 'wpinv_checkout' ); |
1534 | 1534 | } |
@@ -1891,57 +1891,57 @@ discard block |
||
1891 | 1891 | } |
1892 | 1892 | |
1893 | 1893 | function wpinv_get_invoice_id_by_key( $key ) { |
1894 | - global $wpdb; |
|
1894 | + global $wpdb; |
|
1895 | 1895 | |
1896 | - $invoice_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wpinv_key' AND meta_value = %s LIMIT 1", $key ) ); |
|
1896 | + $invoice_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wpinv_key' AND meta_value = %s LIMIT 1", $key ) ); |
|
1897 | 1897 | |
1898 | - if ( $invoice_id != NULL ) |
|
1899 | - return $invoice_id; |
|
1898 | + if ( $invoice_id != NULL ) |
|
1899 | + return $invoice_id; |
|
1900 | 1900 | |
1901 | - return 0; |
|
1901 | + return 0; |
|
1902 | 1902 | } |
1903 | 1903 | |
1904 | 1904 | function wpinv_can_view_receipt( $invoice_key = '' ) { |
1905 | - $return = false; |
|
1906 | - |
|
1907 | - if ( empty( $invoice_key ) ) { |
|
1908 | - return $return; |
|
1909 | - } |
|
1910 | - |
|
1911 | - global $wpinv_receipt_args; |
|
1912 | - |
|
1913 | - $wpinv_receipt_args['id'] = wpinv_get_invoice_id_by_key( $invoice_key ); |
|
1914 | - if ( isset( $_GET['invoice-id'] ) ) { |
|
1915 | - $wpinv_receipt_args['id'] = $invoice_key == wpinv_get_payment_key( (int)$_GET['invoice-id'] ) ? (int)$_GET['invoice-id'] : 0; |
|
1916 | - } |
|
1917 | - |
|
1918 | - if ( empty( $wpinv_receipt_args['id'] ) ) { |
|
1919 | - return $return; |
|
1920 | - } |
|
1921 | - |
|
1922 | - $invoice = wpinv_get_invoice( $wpinv_receipt_args['id'] ); |
|
1923 | - if ( !( !empty( $invoice->ID ) && $invoice->get_key() === $invoice_key ) ) { |
|
1924 | - return $return; |
|
1925 | - } |
|
1926 | - |
|
1927 | - if ( is_user_logged_in() ) { |
|
1928 | - if ( (int)$invoice->get_user_id() === (int) get_current_user_id() ) { |
|
1929 | - $return = true; |
|
1930 | - } |
|
1931 | - } |
|
1932 | - |
|
1933 | - $session = wpinv_get_checkout_session(); |
|
1934 | - if ( isset( $_GET['invoice_key'] ) || ( $session && isset( $session['invoice_key'] ) ) ) { |
|
1935 | - $check_key = isset( $_GET['invoice_key'] ) ? $_GET['invoice_key'] : $session['invoice_key']; |
|
1936 | - |
|
1937 | - if ( wpinv_require_login_to_checkout() ) { |
|
1938 | - $return = $return && $check_key === $invoice_key; |
|
1939 | - } else { |
|
1940 | - $return = $check_key === $invoice_key; |
|
1941 | - } |
|
1942 | - } |
|
1943 | - |
|
1944 | - return (bool) apply_filters( 'wpinv_can_view_receipt', $return, $invoice_key ); |
|
1905 | + $return = false; |
|
1906 | + |
|
1907 | + if ( empty( $invoice_key ) ) { |
|
1908 | + return $return; |
|
1909 | + } |
|
1910 | + |
|
1911 | + global $wpinv_receipt_args; |
|
1912 | + |
|
1913 | + $wpinv_receipt_args['id'] = wpinv_get_invoice_id_by_key( $invoice_key ); |
|
1914 | + if ( isset( $_GET['invoice-id'] ) ) { |
|
1915 | + $wpinv_receipt_args['id'] = $invoice_key == wpinv_get_payment_key( (int)$_GET['invoice-id'] ) ? (int)$_GET['invoice-id'] : 0; |
|
1916 | + } |
|
1917 | + |
|
1918 | + if ( empty( $wpinv_receipt_args['id'] ) ) { |
|
1919 | + return $return; |
|
1920 | + } |
|
1921 | + |
|
1922 | + $invoice = wpinv_get_invoice( $wpinv_receipt_args['id'] ); |
|
1923 | + if ( !( !empty( $invoice->ID ) && $invoice->get_key() === $invoice_key ) ) { |
|
1924 | + return $return; |
|
1925 | + } |
|
1926 | + |
|
1927 | + if ( is_user_logged_in() ) { |
|
1928 | + if ( (int)$invoice->get_user_id() === (int) get_current_user_id() ) { |
|
1929 | + $return = true; |
|
1930 | + } |
|
1931 | + } |
|
1932 | + |
|
1933 | + $session = wpinv_get_checkout_session(); |
|
1934 | + if ( isset( $_GET['invoice_key'] ) || ( $session && isset( $session['invoice_key'] ) ) ) { |
|
1935 | + $check_key = isset( $_GET['invoice_key'] ) ? $_GET['invoice_key'] : $session['invoice_key']; |
|
1936 | + |
|
1937 | + if ( wpinv_require_login_to_checkout() ) { |
|
1938 | + $return = $return && $check_key === $invoice_key; |
|
1939 | + } else { |
|
1940 | + $return = $check_key === $invoice_key; |
|
1941 | + } |
|
1942 | + } |
|
1943 | + |
|
1944 | + return (bool) apply_filters( 'wpinv_can_view_receipt', $return, $invoice_key ); |
|
1945 | 1945 | } |
1946 | 1946 | |
1947 | 1947 | function wpinv_pay_for_invoice() { |
@@ -31,27 +31,27 @@ |
||
31 | 31 | public function get_privacy_message() { |
32 | 32 | |
33 | 33 | $content = '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' . |
34 | - '<div contenteditable="false">' . |
|
35 | - '<p class="wp-policy-help">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' . |
|
36 | - '</div>' . |
|
37 | - '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' . |
|
38 | - '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' . |
|
39 | - '<ul>' . |
|
40 | - '<li>' . __( '- Send you important account/order/service information.', 'invoicing' ) . '</li>' . |
|
41 | - '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' . |
|
42 | - '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' . |
|
43 | - '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
44 | - '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' . |
|
45 | - '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
46 | - '</ul>' . |
|
47 | - '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' . |
|
48 | - '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' . |
|
49 | - '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' . |
|
50 | - '<div contenteditable="false">' . |
|
51 | - '<p class="wp-policy-help">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' . |
|
52 | - '</div>' . |
|
53 | - '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' . |
|
54 | - '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>'; |
|
34 | + '<div contenteditable="false">' . |
|
35 | + '<p class="wp-policy-help">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' . |
|
36 | + '</div>' . |
|
37 | + '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' . |
|
38 | + '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' . |
|
39 | + '<ul>' . |
|
40 | + '<li>' . __( '- Send you important account/order/service information.', 'invoicing' ) . '</li>' . |
|
41 | + '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' . |
|
42 | + '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' . |
|
43 | + '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
44 | + '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' . |
|
45 | + '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' . |
|
46 | + '</ul>' . |
|
47 | + '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' . |
|
48 | + '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' . |
|
49 | + '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' . |
|
50 | + '<div contenteditable="false">' . |
|
51 | + '<p class="wp-policy-help">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' . |
|
52 | + '</div>' . |
|
53 | + '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' . |
|
54 | + '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>'; |
|
55 | 55 | |
56 | 56 | |
57 | 57 |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | |
6 | 6 | class OxidInstaller extends BaseInstaller |
7 | 7 | { |
8 | - const VENDOR_PATTERN = '/^modules\/(?P<vendor>.+)\/.+/'; |
|
8 | + const VENDOR_PATTERN = '/^modules\/(?P<vendor>.+)\/.+/'; |
|
9 | 9 | |
10 | 10 | protected $locations = array( |
11 | 11 | 'module' => 'modules/{$name}/', |
@@ -13,47 +13,47 @@ discard block |
||
13 | 13 | 'out' => 'out/{$name}/', |
14 | 14 | ); |
15 | 15 | |
16 | - /** |
|
17 | - * getInstallPath |
|
18 | - * |
|
19 | - * @param PackageInterface $package |
|
20 | - * @param string $frameworkType |
|
21 | - * @return void |
|
22 | - */ |
|
23 | - public function getInstallPath(PackageInterface $package, $frameworkType = '') |
|
24 | - { |
|
25 | - $installPath = parent::getInstallPath($package, $frameworkType); |
|
26 | - $type = $this->package->getType(); |
|
27 | - if ($type === 'oxid-module') { |
|
28 | - $this->prepareVendorDirectory($installPath); |
|
29 | - } |
|
30 | - return $installPath; |
|
31 | - } |
|
16 | + /** |
|
17 | + * getInstallPath |
|
18 | + * |
|
19 | + * @param PackageInterface $package |
|
20 | + * @param string $frameworkType |
|
21 | + * @return void |
|
22 | + */ |
|
23 | + public function getInstallPath(PackageInterface $package, $frameworkType = '') |
|
24 | + { |
|
25 | + $installPath = parent::getInstallPath($package, $frameworkType); |
|
26 | + $type = $this->package->getType(); |
|
27 | + if ($type === 'oxid-module') { |
|
28 | + $this->prepareVendorDirectory($installPath); |
|
29 | + } |
|
30 | + return $installPath; |
|
31 | + } |
|
32 | 32 | |
33 | - /** |
|
34 | - * prepareVendorDirectory |
|
35 | - * |
|
36 | - * Makes sure there is a vendormetadata.php file inside |
|
37 | - * the vendor folder if there is a vendor folder. |
|
38 | - * |
|
39 | - * @param string $installPath |
|
40 | - * @return void |
|
41 | - */ |
|
42 | - protected function prepareVendorDirectory($installPath) |
|
43 | - { |
|
44 | - $matches = ''; |
|
45 | - $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches); |
|
46 | - if (!$hasVendorDirectory) { |
|
47 | - return; |
|
48 | - } |
|
33 | + /** |
|
34 | + * prepareVendorDirectory |
|
35 | + * |
|
36 | + * Makes sure there is a vendormetadata.php file inside |
|
37 | + * the vendor folder if there is a vendor folder. |
|
38 | + * |
|
39 | + * @param string $installPath |
|
40 | + * @return void |
|
41 | + */ |
|
42 | + protected function prepareVendorDirectory($installPath) |
|
43 | + { |
|
44 | + $matches = ''; |
|
45 | + $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches); |
|
46 | + if (!$hasVendorDirectory) { |
|
47 | + return; |
|
48 | + } |
|
49 | 49 | |
50 | - $vendorDirectory = $matches['vendor']; |
|
51 | - $vendorPath = getcwd() . '/modules/' . $vendorDirectory; |
|
52 | - if (!file_exists($vendorPath)) { |
|
53 | - mkdir($vendorPath, 0755, true); |
|
54 | - } |
|
50 | + $vendorDirectory = $matches['vendor']; |
|
51 | + $vendorPath = getcwd() . '/modules/' . $vendorDirectory; |
|
52 | + if (!file_exists($vendorPath)) { |
|
53 | + mkdir($vendorPath, 0755, true); |
|
54 | + } |
|
55 | 55 | |
56 | - $vendorMetaDataPath = $vendorPath . '/vendormetadata.php'; |
|
57 | - touch($vendorMetaDataPath); |
|
58 | - } |
|
56 | + $vendorMetaDataPath = $vendorPath . '/vendormetadata.php'; |
|
57 | + touch($vendorMetaDataPath); |
|
58 | + } |
|
59 | 59 | } |
@@ -3,8 +3,8 @@ |
||
3 | 3 | |
4 | 4 | class ClanCatsFrameworkInstaller extends BaseInstaller |
5 | 5 | { |
6 | - protected $locations = array( |
|
7 | - 'ship' => 'CCF/orbit/{$name}/', |
|
8 | - 'theme' => 'CCF/app/themes/{$name}/', |
|
9 | - ); |
|
6 | + protected $locations = array( |
|
7 | + 'ship' => 'CCF/orbit/{$name}/', |
|
8 | + 'theme' => 'CCF/app/themes/{$name}/', |
|
9 | + ); |
|
10 | 10 | } |
11 | 11 | \ No newline at end of file |
@@ -10,7 +10,7 @@ |
||
10 | 10 | 'library' => 'libraries/{$name}/', |
11 | 11 | 'profile' => 'profiles/{$name}/', |
12 | 12 | 'drush' => 'drush/{$name}/', |
13 | - 'custom-theme' => 'themes/custom/{$name}/', |
|
14 | - 'custom-module' => 'modules/custom/{$name}/', |
|
13 | + 'custom-theme' => 'themes/custom/{$name}/', |
|
14 | + 'custom-module' => 'modules/custom/{$name}/', |
|
15 | 15 | ); |
16 | 16 | } |
@@ -1,151 +1,151 @@ discard block |
||
1 | 1 | <?php |
2 | 2 | if ( ! defined( 'ABSPATH' ) ) { |
3 | - exit; |
|
3 | + exit; |
|
4 | 4 | } |
5 | 5 | |
6 | 6 | if ( ! class_exists( 'WP_Super_Duper' ) ) { |
7 | 7 | |
8 | 8 | |
9 | - /** |
|
10 | - * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress. |
|
11 | - * |
|
12 | - * Should not be called direct but extended instead. |
|
13 | - * |
|
14 | - * Class WP_Super_Duper |
|
15 | - * @since 1.0.3 is_block_content_call() method added. |
|
16 | - * @since 1.0.3 Placeholder text will be shown for widget that return no block content. |
|
17 | - * @since 1.0.4 is_elementor_widget_output() method added. |
|
18 | - * @since 1.0.4 is_elementor_preview() method added. |
|
19 | - * @since 1.0.5 Block checkbox options are set as true by default even when set as false - FIXED |
|
20 | - * @ver 1.0.5 |
|
21 | - */ |
|
22 | - class WP_Super_Duper extends WP_Widget { |
|
23 | - |
|
24 | - |
|
25 | - public $version = "1.0.5"; |
|
26 | - public $block_code; |
|
27 | - public $options; |
|
28 | - public $base_id; |
|
29 | - public $arguments = array(); |
|
30 | - public $instance = array(); |
|
31 | - private $class_name; |
|
32 | - |
|
33 | - /** |
|
34 | - * Take the array options and use them to build. |
|
35 | - */ |
|
36 | - public function __construct( $options ) { |
|
37 | - global $sd_widgets; |
|
38 | - |
|
39 | - $sd_widgets[ $options['base_id'] ] = array( 'name' => $options['name'], |
|
40 | - 'class_name' => $options['class_name'] |
|
41 | - ); |
|
42 | - $this->base_id = $options['base_id']; |
|
43 | - // lets filter the options before we do anything |
|
44 | - $options = apply_filters( "wp_super_duper_options", $options ); |
|
45 | - $options = apply_filters( "wp_super_duper_options_{$this->base_id}", $options ); |
|
46 | - $options = $this->add_name_from_key( $options ); |
|
47 | - $this->options = $options; |
|
48 | - |
|
49 | - $this->base_id = $options['base_id']; |
|
50 | - $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array(); |
|
51 | - |
|
52 | - // init parent |
|
53 | - parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] ); |
|
54 | - |
|
55 | - if ( isset( $options['class_name'] ) ) { |
|
56 | - // register widget |
|
57 | - $this->class_name = $options['class_name']; |
|
58 | - |
|
59 | - // register shortcode |
|
60 | - $this->register_shortcode(); |
|
61 | - |
|
62 | - // register block |
|
63 | - add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) ); |
|
64 | - } |
|
65 | - |
|
66 | - // add the CSS and JS we need ONCE |
|
67 | - global $sd_widget_scripts; |
|
68 | - |
|
69 | - if ( ! $sd_widget_scripts ) { |
|
70 | - wp_add_inline_script( 'admin-widgets', $this->widget_js() ); |
|
71 | - wp_add_inline_script( 'customize-controls', $this->widget_js() ); |
|
72 | - wp_add_inline_style( 'widgets', $this->widget_css() ); |
|
73 | - |
|
74 | - $sd_widget_scripts = true; |
|
75 | - |
|
76 | - // add shortcode insert button once |
|
77 | - add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) ); |
|
78 | - add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) ); |
|
79 | - } |
|
80 | - |
|
81 | - do_action( 'wp_super_duper_widget_init', $options, $this ); |
|
82 | - } |
|
83 | - |
|
84 | - /** |
|
85 | - * Get widget settings. |
|
86 | - * |
|
87 | - * @since 1.0.0 |
|
88 | - */ |
|
89 | - public static function get_widget_settings() { |
|
90 | - global $sd_widgets; |
|
91 | - |
|
92 | - $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : ''; |
|
93 | - if ( ! $shortcode ) { |
|
94 | - wp_die(); |
|
95 | - } |
|
96 | - $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : ''; |
|
97 | - if ( ! $widget_args ) { |
|
98 | - wp_die(); |
|
99 | - } |
|
100 | - $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : ''; |
|
101 | - if ( ! $class_name ) { |
|
102 | - wp_die(); |
|
103 | - } |
|
104 | - |
|
105 | - // invoke an instance method |
|
106 | - $widget = new $class_name; |
|
107 | - |
|
108 | - ob_start(); |
|
109 | - $widget->form( array() ); |
|
110 | - $form = ob_get_clean(); |
|
111 | - echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>"; |
|
112 | - echo "<style>" . $widget->widget_css() . "</style>"; |
|
113 | - echo "<script>" . $widget->widget_js() . "</script>"; |
|
114 | - ?> |
|
9 | + /** |
|
10 | + * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress. |
|
11 | + * |
|
12 | + * Should not be called direct but extended instead. |
|
13 | + * |
|
14 | + * Class WP_Super_Duper |
|
15 | + * @since 1.0.3 is_block_content_call() method added. |
|
16 | + * @since 1.0.3 Placeholder text will be shown for widget that return no block content. |
|
17 | + * @since 1.0.4 is_elementor_widget_output() method added. |
|
18 | + * @since 1.0.4 is_elementor_preview() method added. |
|
19 | + * @since 1.0.5 Block checkbox options are set as true by default even when set as false - FIXED |
|
20 | + * @ver 1.0.5 |
|
21 | + */ |
|
22 | + class WP_Super_Duper extends WP_Widget { |
|
23 | + |
|
24 | + |
|
25 | + public $version = "1.0.5"; |
|
26 | + public $block_code; |
|
27 | + public $options; |
|
28 | + public $base_id; |
|
29 | + public $arguments = array(); |
|
30 | + public $instance = array(); |
|
31 | + private $class_name; |
|
32 | + |
|
33 | + /** |
|
34 | + * Take the array options and use them to build. |
|
35 | + */ |
|
36 | + public function __construct( $options ) { |
|
37 | + global $sd_widgets; |
|
38 | + |
|
39 | + $sd_widgets[ $options['base_id'] ] = array( 'name' => $options['name'], |
|
40 | + 'class_name' => $options['class_name'] |
|
41 | + ); |
|
42 | + $this->base_id = $options['base_id']; |
|
43 | + // lets filter the options before we do anything |
|
44 | + $options = apply_filters( "wp_super_duper_options", $options ); |
|
45 | + $options = apply_filters( "wp_super_duper_options_{$this->base_id}", $options ); |
|
46 | + $options = $this->add_name_from_key( $options ); |
|
47 | + $this->options = $options; |
|
48 | + |
|
49 | + $this->base_id = $options['base_id']; |
|
50 | + $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array(); |
|
51 | + |
|
52 | + // init parent |
|
53 | + parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] ); |
|
54 | + |
|
55 | + if ( isset( $options['class_name'] ) ) { |
|
56 | + // register widget |
|
57 | + $this->class_name = $options['class_name']; |
|
58 | + |
|
59 | + // register shortcode |
|
60 | + $this->register_shortcode(); |
|
61 | + |
|
62 | + // register block |
|
63 | + add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) ); |
|
64 | + } |
|
65 | + |
|
66 | + // add the CSS and JS we need ONCE |
|
67 | + global $sd_widget_scripts; |
|
68 | + |
|
69 | + if ( ! $sd_widget_scripts ) { |
|
70 | + wp_add_inline_script( 'admin-widgets', $this->widget_js() ); |
|
71 | + wp_add_inline_script( 'customize-controls', $this->widget_js() ); |
|
72 | + wp_add_inline_style( 'widgets', $this->widget_css() ); |
|
73 | + |
|
74 | + $sd_widget_scripts = true; |
|
75 | + |
|
76 | + // add shortcode insert button once |
|
77 | + add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) ); |
|
78 | + add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) ); |
|
79 | + } |
|
80 | + |
|
81 | + do_action( 'wp_super_duper_widget_init', $options, $this ); |
|
82 | + } |
|
83 | + |
|
84 | + /** |
|
85 | + * Get widget settings. |
|
86 | + * |
|
87 | + * @since 1.0.0 |
|
88 | + */ |
|
89 | + public static function get_widget_settings() { |
|
90 | + global $sd_widgets; |
|
91 | + |
|
92 | + $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : ''; |
|
93 | + if ( ! $shortcode ) { |
|
94 | + wp_die(); |
|
95 | + } |
|
96 | + $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : ''; |
|
97 | + if ( ! $widget_args ) { |
|
98 | + wp_die(); |
|
99 | + } |
|
100 | + $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : ''; |
|
101 | + if ( ! $class_name ) { |
|
102 | + wp_die(); |
|
103 | + } |
|
104 | + |
|
105 | + // invoke an instance method |
|
106 | + $widget = new $class_name; |
|
107 | + |
|
108 | + ob_start(); |
|
109 | + $widget->form( array() ); |
|
110 | + $form = ob_get_clean(); |
|
111 | + echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>"; |
|
112 | + echo "<style>" . $widget->widget_css() . "</style>"; |
|
113 | + echo "<script>" . $widget->widget_js() . "</script>"; |
|
114 | + ?> |
|
115 | 115 | <?php |
116 | - wp_die(); |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed). |
|
121 | - * |
|
122 | - * @since 1.0.0 |
|
123 | - * |
|
124 | - * @param string $editor_id Optional. Shortcode editor id. Default null. |
|
125 | - * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null. |
|
126 | - */ |
|
127 | - public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) { |
|
128 | - global $sd_widgets, $shortcode_insert_button_once; |
|
129 | - if ( $shortcode_insert_button_once ) { |
|
130 | - return; |
|
131 | - } |
|
132 | - add_thickbox(); |
|
133 | - ?> |
|
116 | + wp_die(); |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed). |
|
121 | + * |
|
122 | + * @since 1.0.0 |
|
123 | + * |
|
124 | + * @param string $editor_id Optional. Shortcode editor id. Default null. |
|
125 | + * @param string $insert_shortcode_function Optional. Insert shotcode function. Default null. |
|
126 | + */ |
|
127 | + public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) { |
|
128 | + global $sd_widgets, $shortcode_insert_button_once; |
|
129 | + if ( $shortcode_insert_button_once ) { |
|
130 | + return; |
|
131 | + } |
|
132 | + add_thickbox(); |
|
133 | + ?> |
|
134 | 134 | <div id="super-duper-content" style="display:none;"> |
135 | 135 | |
136 | 136 | <div class="sd-shortcode-left-wrap"> |
137 | 137 | <?php |
138 | - asort( $sd_widgets ); |
|
139 | - if ( ! empty( $sd_widgets ) ) { |
|
140 | - echo '<select onchange="sd_get_shortcode_options(this);">'; |
|
141 | - echo "<option>" . __( 'Select shortcode' ) . "</option>"; |
|
142 | - foreach ( $sd_widgets as $shortcode => $class ) { |
|
143 | - echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>"; |
|
144 | - } |
|
145 | - echo "</select>"; |
|
146 | - |
|
147 | - } |
|
148 | - ?> |
|
138 | + asort( $sd_widgets ); |
|
139 | + if ( ! empty( $sd_widgets ) ) { |
|
140 | + echo '<select onchange="sd_get_shortcode_options(this);">'; |
|
141 | + echo "<option>" . __( 'Select shortcode' ) . "</option>"; |
|
142 | + foreach ( $sd_widgets as $shortcode => $class ) { |
|
143 | + echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>"; |
|
144 | + } |
|
145 | + echo "</select>"; |
|
146 | + |
|
147 | + } |
|
148 | + ?> |
|
149 | 149 | <div class="sd-shortcode-settings"></div> |
150 | 150 | |
151 | 151 | </div> |
@@ -163,9 +163,9 @@ discard block |
||
163 | 163 | </div> |
164 | 164 | |
165 | 165 | <?php |
166 | - // if Font Awesome is available then show a icon if not show a WP icon. |
|
167 | - $button_string = wp_style_is( 'font-awesome', 'enqueued' ) && 1 == 2 ? '<i class="fas fa-cubes" aria-hidden="true"></i>' : '<span style="padding-top: 3px;" class="dashicons dashicons-screenoptions"></span>'; |
|
168 | - ?> |
|
166 | + // if Font Awesome is available then show a icon if not show a WP icon. |
|
167 | + $button_string = wp_style_is( 'font-awesome', 'enqueued' ) && 1 == 2 ? '<i class="fas fa-cubes" aria-hidden="true"></i>' : '<span style="padding-top: 3px;" class="dashicons dashicons-screenoptions"></span>'; |
|
168 | + ?> |
|
169 | 169 | |
170 | 170 | <a href="#TB_inline?width=100%&height=550&inlineId=super-duper-content" |
171 | 171 | class="thickbox button super-duper-content-open" |
@@ -194,16 +194,16 @@ discard block |
||
194 | 194 | <script> |
195 | 195 | |
196 | 196 | <?php |
197 | - if(! empty( $insert_shortcode_function )){ |
|
198 | - echo $insert_shortcode_function; |
|
199 | - }else{ |
|
200 | - |
|
201 | - /** |
|
202 | - * Function for super duper insert shortcode. |
|
203 | - * |
|
204 | - * @since 1.0.0 |
|
205 | - */ |
|
206 | - ?> |
|
197 | + if(! empty( $insert_shortcode_function )){ |
|
198 | + echo $insert_shortcode_function; |
|
199 | + }else{ |
|
200 | + |
|
201 | + /** |
|
202 | + * Function for super duper insert shortcode. |
|
203 | + * |
|
204 | + * @since 1.0.0 |
|
205 | + */ |
|
206 | + ?> |
|
207 | 207 | function sd_insert_shortcode() { |
208 | 208 | $shortcode = jQuery('#sd-shortcode-output').val(); |
209 | 209 | if ($shortcode) { |
@@ -333,12 +333,12 @@ discard block |
||
333 | 333 | } |
334 | 334 | </script> |
335 | 335 | <?php |
336 | - $shortcode_insert_button_once = true; |
|
337 | - } |
|
336 | + $shortcode_insert_button_once = true; |
|
337 | + } |
|
338 | 338 | |
339 | - public function widget_css() { |
|
340 | - ob_start(); |
|
341 | - ?> |
|
339 | + public function widget_css() { |
|
340 | + ob_start(); |
|
341 | + ?> |
|
342 | 342 | <style> |
343 | 343 | .sd-advanced-setting { |
344 | 344 | display: none; |
@@ -359,20 +359,20 @@ discard block |
||
359 | 359 | } |
360 | 360 | </style> |
361 | 361 | <?php |
362 | - $output = ob_get_clean(); |
|
362 | + $output = ob_get_clean(); |
|
363 | 363 | |
364 | - /* |
|
364 | + /* |
|
365 | 365 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
366 | 366 | */ |
367 | - return str_replace( array( |
|
368 | - '<style>', |
|
369 | - '</style>' |
|
370 | - ), '', $output ); |
|
371 | - } |
|
372 | - |
|
373 | - public function widget_js() { |
|
374 | - ob_start(); |
|
375 | - ?> |
|
367 | + return str_replace( array( |
|
368 | + '<style>', |
|
369 | + '</style>' |
|
370 | + ), '', $output ); |
|
371 | + } |
|
372 | + |
|
373 | + public function widget_js() { |
|
374 | + ob_start(); |
|
375 | + ?> |
|
376 | 376 | <script> |
377 | 377 | |
378 | 378 | /** |
@@ -527,279 +527,279 @@ discard block |
||
527 | 527 | <?php do_action( 'wp_super_duper_widget_js', $this ); ?> |
528 | 528 | </script> |
529 | 529 | <?php |
530 | - $output = ob_get_clean(); |
|
530 | + $output = ob_get_clean(); |
|
531 | 531 | |
532 | - /* |
|
532 | + /* |
|
533 | 533 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
534 | 534 | */ |
535 | - return str_replace( array( |
|
536 | - '<script>', |
|
537 | - '</script>' |
|
538 | - ), '', $output ); |
|
539 | - } |
|
540 | - |
|
541 | - |
|
542 | - /** |
|
543 | - * Set the name from the argument key. |
|
544 | - * |
|
545 | - * @param $options |
|
546 | - * |
|
547 | - * @return mixed |
|
548 | - */ |
|
549 | - private function add_name_from_key( $options, $arguments = false ) { |
|
550 | - if ( ! empty( $options['arguments'] ) ) { |
|
551 | - foreach ( $options['arguments'] as $key => $val ) { |
|
552 | - $options['arguments'][ $key ]['name'] = $key; |
|
553 | - } |
|
554 | - } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) { |
|
555 | - foreach ( $options as $key => $val ) { |
|
556 | - $options[ $key ]['name'] = $key; |
|
557 | - } |
|
558 | - } |
|
559 | - |
|
560 | - return $options; |
|
561 | - } |
|
562 | - |
|
563 | - /** |
|
564 | - * Register the parent shortcode. |
|
565 | - * |
|
566 | - * @since 1.0.0 |
|
567 | - */ |
|
568 | - public function register_shortcode() { |
|
569 | - add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) ); |
|
570 | - add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) ); |
|
571 | - } |
|
572 | - |
|
573 | - /** |
|
574 | - * Render the shortcode via ajax so we can return it to Gutenberg. |
|
575 | - * |
|
576 | - * @since 1.0.0 |
|
577 | - */ |
|
578 | - public static function render_shortcode() { |
|
579 | - |
|
580 | - check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true ); |
|
581 | - if ( ! current_user_can( 'manage_options' ) ) { |
|
582 | - wp_die(); |
|
583 | - } |
|
584 | - |
|
585 | - // we might need the $post value here so lets set it. |
|
586 | - if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) { |
|
587 | - $post_obj = get_post( absint( $_POST['post_id'] ) ); |
|
588 | - if ( ! empty( $post_obj ) && empty( $post ) ) { |
|
589 | - global $post; |
|
590 | - $post = $post_obj; |
|
591 | - } |
|
592 | - } |
|
593 | - |
|
594 | - if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) { |
|
595 | - $shortcode_name = sanitize_title_with_dashes( $_POST['shortcode'] ); |
|
596 | - $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array(); |
|
597 | - $attributes = ''; |
|
598 | - if ( ! empty( $attributes_array ) ) { |
|
599 | - foreach ( $attributes_array as $key => $value ) { |
|
600 | - $attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' "; |
|
601 | - } |
|
602 | - } |
|
603 | - |
|
604 | - $shortcode = "[" . $shortcode_name . " " . $attributes . "]"; |
|
605 | - |
|
606 | - echo do_shortcode( $shortcode ); |
|
607 | - |
|
608 | - } |
|
609 | - wp_die(); |
|
610 | - } |
|
611 | - |
|
612 | - /** |
|
613 | - * Output the shortcode. |
|
614 | - * |
|
615 | - * @param array $args |
|
616 | - * @param string $content |
|
617 | - * |
|
618 | - * @return string |
|
619 | - */ |
|
620 | - public function shortcode_output( $args = array(), $content = '' ) { |
|
621 | - $args = self::argument_values( $args ); |
|
622 | - |
|
623 | - // add extra argument so we know its a output to gutenberg |
|
624 | - //$args |
|
625 | - $args = $this->string_to_bool( $args ); |
|
626 | - |
|
627 | - |
|
628 | - $calss = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : ''; |
|
629 | - |
|
630 | - $calss = apply_filters( 'wp_super_duper_div_classname', $calss, $args, $this ); |
|
631 | - $calss = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $calss, $args, $this ); |
|
632 | - |
|
633 | - $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this ); |
|
634 | - $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); |
|
635 | - |
|
636 | - $shortcode_args = array(); |
|
637 | - $output = ''; |
|
638 | - $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
639 | - $main_content = $this->output( $args, $shortcode_args, $content ); |
|
640 | - if ( $main_content && ! $no_wrap ) { |
|
641 | - // wrap the shortcode in a dive with the same class as the widget |
|
642 | - $output .= '<div class="' . $calss . '" ' . $attrs . '>'; |
|
643 | - if ( ! empty( $args['title'] ) ) { |
|
644 | - // if its a shortcode and there is a title try to grab the title wrappers |
|
645 | - $shortcode_args = array( 'before_title' => '', 'after_title' => '' ); |
|
646 | - if ( empty( $instance ) ) { |
|
647 | - global $wp_registered_sidebars; |
|
648 | - if ( ! empty( $wp_registered_sidebars ) ) { |
|
649 | - foreach ( $wp_registered_sidebars as $sidebar ) { |
|
650 | - if ( ! empty( $sidebar['before_title'] ) ) { |
|
651 | - $shortcode_args['before_title'] = $sidebar['before_title']; |
|
652 | - $shortcode_args['after_title'] = $sidebar['after_title']; |
|
653 | - break; |
|
654 | - } |
|
655 | - } |
|
656 | - } |
|
657 | - } |
|
658 | - $output .= $this->output_title( $shortcode_args, $args ); |
|
659 | - } |
|
660 | - $output .= $main_content; |
|
661 | - $output .= '</div>'; |
|
662 | - } elseif ( $main_content && $no_wrap ) { |
|
663 | - $output .= $main_content; |
|
664 | - } |
|
665 | - |
|
666 | - return $output; |
|
667 | - } |
|
668 | - |
|
669 | - /** |
|
670 | - * Sometimes booleans values can be turned to strings, so we fix that. |
|
671 | - * |
|
672 | - * @param $options |
|
673 | - * |
|
674 | - * @return mixed |
|
675 | - */ |
|
676 | - public function string_to_bool( $options ) { |
|
677 | - // convert bool strings to booleans |
|
678 | - foreach ( $options as $key => $val ) { |
|
679 | - if ( $val == 'false' ) { |
|
680 | - $options[ $key ] = false; |
|
681 | - } elseif ( $val == 'true' ) { |
|
682 | - $options[ $key ] = true; |
|
683 | - } |
|
684 | - } |
|
685 | - |
|
686 | - return $options; |
|
687 | - } |
|
688 | - |
|
689 | - /** |
|
690 | - * Get the argument values that are also filterable. |
|
691 | - * |
|
692 | - * @param $instance |
|
693 | - * |
|
694 | - * @return array |
|
695 | - */ |
|
696 | - public function argument_values( $instance ) { |
|
697 | - $argument_values = array(); |
|
698 | - |
|
699 | - // set widget instance |
|
700 | - $this->instance = $instance; |
|
701 | - |
|
702 | - if ( empty( $this->arguments ) ) { |
|
703 | - $this->arguments = $this->get_arguments(); |
|
704 | - } |
|
705 | - |
|
706 | - if ( ! empty( $this->arguments ) ) { |
|
707 | - foreach ( $this->arguments as $key => $args ) { |
|
708 | - // set the input name from the key |
|
709 | - $args['name'] = $key; |
|
710 | - // |
|
711 | - $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : ''; |
|
712 | - if ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) { |
|
713 | - $argument_values[ $key ] = $args['default']; |
|
714 | - } |
|
715 | - } |
|
716 | - } |
|
717 | - |
|
718 | - return $argument_values; |
|
719 | - } |
|
720 | - |
|
721 | - /** |
|
722 | - * Set arguments in super duper. |
|
723 | - * |
|
724 | - * @since 1.0.0 |
|
725 | - * |
|
726 | - * @return array Set arguments. |
|
727 | - */ |
|
728 | - public function set_arguments() { |
|
729 | - return $this->arguments; |
|
730 | - } |
|
731 | - |
|
732 | - /** |
|
733 | - * Get arguments in super duper. |
|
734 | - * |
|
735 | - * @since 1.0.0 |
|
736 | - * |
|
737 | - * @return array Get arguments. |
|
738 | - */ |
|
739 | - public function get_arguments() { |
|
740 | - if ( empty( $this->arguments ) ) { |
|
741 | - $this->arguments = $this->set_arguments(); |
|
742 | - } |
|
743 | - |
|
744 | - $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance ); |
|
745 | - $this->arguments = $this->add_name_from_key( $this->arguments, true ); |
|
746 | - |
|
747 | - return $this->arguments; |
|
748 | - } |
|
749 | - |
|
750 | - /** |
|
751 | - * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class. |
|
752 | - * |
|
753 | - * @param array $args |
|
754 | - * @param array $widget_args |
|
755 | - * @param string $content |
|
756 | - */ |
|
757 | - public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
758 | - |
|
759 | - } |
|
760 | - |
|
761 | - /** |
|
762 | - * Add the dynamic block code inline when the wp-block in enqueued. |
|
763 | - */ |
|
764 | - public function register_block() { |
|
765 | - wp_add_inline_script( 'wp-blocks', $this->block() ); |
|
766 | - } |
|
767 | - |
|
768 | - /** |
|
769 | - * Check if we need to show advanced options. |
|
770 | - * |
|
771 | - * @return bool |
|
772 | - */ |
|
773 | - public function block_show_advanced() { |
|
774 | - |
|
775 | - $show = false; |
|
776 | - $arguments = $this->arguments; |
|
777 | - |
|
778 | - if ( empty( $arguments ) ) { |
|
779 | - $arguments = $this->get_arguments(); |
|
780 | - } |
|
781 | - |
|
782 | - if ( ! empty( $arguments ) ) { |
|
783 | - foreach ( $arguments as $argument ) { |
|
784 | - if ( isset( $argument['advanced'] ) && $argument['advanced'] ) { |
|
785 | - $show = true; |
|
786 | - } |
|
787 | - } |
|
788 | - } |
|
789 | - |
|
790 | - return $show; |
|
791 | - } |
|
792 | - |
|
793 | - |
|
794 | - /** |
|
795 | - * Output the JS for building the dynamic Guntenberg block. |
|
796 | - * |
|
797 | - * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap. |
|
798 | - * @return mixed |
|
799 | - */ |
|
800 | - public function block() { |
|
801 | - ob_start(); |
|
802 | - ?> |
|
535 | + return str_replace( array( |
|
536 | + '<script>', |
|
537 | + '</script>' |
|
538 | + ), '', $output ); |
|
539 | + } |
|
540 | + |
|
541 | + |
|
542 | + /** |
|
543 | + * Set the name from the argument key. |
|
544 | + * |
|
545 | + * @param $options |
|
546 | + * |
|
547 | + * @return mixed |
|
548 | + */ |
|
549 | + private function add_name_from_key( $options, $arguments = false ) { |
|
550 | + if ( ! empty( $options['arguments'] ) ) { |
|
551 | + foreach ( $options['arguments'] as $key => $val ) { |
|
552 | + $options['arguments'][ $key ]['name'] = $key; |
|
553 | + } |
|
554 | + } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) { |
|
555 | + foreach ( $options as $key => $val ) { |
|
556 | + $options[ $key ]['name'] = $key; |
|
557 | + } |
|
558 | + } |
|
559 | + |
|
560 | + return $options; |
|
561 | + } |
|
562 | + |
|
563 | + /** |
|
564 | + * Register the parent shortcode. |
|
565 | + * |
|
566 | + * @since 1.0.0 |
|
567 | + */ |
|
568 | + public function register_shortcode() { |
|
569 | + add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) ); |
|
570 | + add_action( 'wp_ajax_super_duper_output_shortcode', array( __CLASS__, 'render_shortcode' ) ); |
|
571 | + } |
|
572 | + |
|
573 | + /** |
|
574 | + * Render the shortcode via ajax so we can return it to Gutenberg. |
|
575 | + * |
|
576 | + * @since 1.0.0 |
|
577 | + */ |
|
578 | + public static function render_shortcode() { |
|
579 | + |
|
580 | + check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true ); |
|
581 | + if ( ! current_user_can( 'manage_options' ) ) { |
|
582 | + wp_die(); |
|
583 | + } |
|
584 | + |
|
585 | + // we might need the $post value here so lets set it. |
|
586 | + if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) { |
|
587 | + $post_obj = get_post( absint( $_POST['post_id'] ) ); |
|
588 | + if ( ! empty( $post_obj ) && empty( $post ) ) { |
|
589 | + global $post; |
|
590 | + $post = $post_obj; |
|
591 | + } |
|
592 | + } |
|
593 | + |
|
594 | + if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) { |
|
595 | + $shortcode_name = sanitize_title_with_dashes( $_POST['shortcode'] ); |
|
596 | + $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array(); |
|
597 | + $attributes = ''; |
|
598 | + if ( ! empty( $attributes_array ) ) { |
|
599 | + foreach ( $attributes_array as $key => $value ) { |
|
600 | + $attributes .= " " . sanitize_title_with_dashes( $key ) . "='" . wp_slash( $value ) . "' "; |
|
601 | + } |
|
602 | + } |
|
603 | + |
|
604 | + $shortcode = "[" . $shortcode_name . " " . $attributes . "]"; |
|
605 | + |
|
606 | + echo do_shortcode( $shortcode ); |
|
607 | + |
|
608 | + } |
|
609 | + wp_die(); |
|
610 | + } |
|
611 | + |
|
612 | + /** |
|
613 | + * Output the shortcode. |
|
614 | + * |
|
615 | + * @param array $args |
|
616 | + * @param string $content |
|
617 | + * |
|
618 | + * @return string |
|
619 | + */ |
|
620 | + public function shortcode_output( $args = array(), $content = '' ) { |
|
621 | + $args = self::argument_values( $args ); |
|
622 | + |
|
623 | + // add extra argument so we know its a output to gutenberg |
|
624 | + //$args |
|
625 | + $args = $this->string_to_bool( $args ); |
|
626 | + |
|
627 | + |
|
628 | + $calss = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : ''; |
|
629 | + |
|
630 | + $calss = apply_filters( 'wp_super_duper_div_classname', $calss, $args, $this ); |
|
631 | + $calss = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $calss, $args, $this ); |
|
632 | + |
|
633 | + $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this ); |
|
634 | + $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this ); |
|
635 | + |
|
636 | + $shortcode_args = array(); |
|
637 | + $output = ''; |
|
638 | + $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false; |
|
639 | + $main_content = $this->output( $args, $shortcode_args, $content ); |
|
640 | + if ( $main_content && ! $no_wrap ) { |
|
641 | + // wrap the shortcode in a dive with the same class as the widget |
|
642 | + $output .= '<div class="' . $calss . '" ' . $attrs . '>'; |
|
643 | + if ( ! empty( $args['title'] ) ) { |
|
644 | + // if its a shortcode and there is a title try to grab the title wrappers |
|
645 | + $shortcode_args = array( 'before_title' => '', 'after_title' => '' ); |
|
646 | + if ( empty( $instance ) ) { |
|
647 | + global $wp_registered_sidebars; |
|
648 | + if ( ! empty( $wp_registered_sidebars ) ) { |
|
649 | + foreach ( $wp_registered_sidebars as $sidebar ) { |
|
650 | + if ( ! empty( $sidebar['before_title'] ) ) { |
|
651 | + $shortcode_args['before_title'] = $sidebar['before_title']; |
|
652 | + $shortcode_args['after_title'] = $sidebar['after_title']; |
|
653 | + break; |
|
654 | + } |
|
655 | + } |
|
656 | + } |
|
657 | + } |
|
658 | + $output .= $this->output_title( $shortcode_args, $args ); |
|
659 | + } |
|
660 | + $output .= $main_content; |
|
661 | + $output .= '</div>'; |
|
662 | + } elseif ( $main_content && $no_wrap ) { |
|
663 | + $output .= $main_content; |
|
664 | + } |
|
665 | + |
|
666 | + return $output; |
|
667 | + } |
|
668 | + |
|
669 | + /** |
|
670 | + * Sometimes booleans values can be turned to strings, so we fix that. |
|
671 | + * |
|
672 | + * @param $options |
|
673 | + * |
|
674 | + * @return mixed |
|
675 | + */ |
|
676 | + public function string_to_bool( $options ) { |
|
677 | + // convert bool strings to booleans |
|
678 | + foreach ( $options as $key => $val ) { |
|
679 | + if ( $val == 'false' ) { |
|
680 | + $options[ $key ] = false; |
|
681 | + } elseif ( $val == 'true' ) { |
|
682 | + $options[ $key ] = true; |
|
683 | + } |
|
684 | + } |
|
685 | + |
|
686 | + return $options; |
|
687 | + } |
|
688 | + |
|
689 | + /** |
|
690 | + * Get the argument values that are also filterable. |
|
691 | + * |
|
692 | + * @param $instance |
|
693 | + * |
|
694 | + * @return array |
|
695 | + */ |
|
696 | + public function argument_values( $instance ) { |
|
697 | + $argument_values = array(); |
|
698 | + |
|
699 | + // set widget instance |
|
700 | + $this->instance = $instance; |
|
701 | + |
|
702 | + if ( empty( $this->arguments ) ) { |
|
703 | + $this->arguments = $this->get_arguments(); |
|
704 | + } |
|
705 | + |
|
706 | + if ( ! empty( $this->arguments ) ) { |
|
707 | + foreach ( $this->arguments as $key => $args ) { |
|
708 | + // set the input name from the key |
|
709 | + $args['name'] = $key; |
|
710 | + // |
|
711 | + $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : ''; |
|
712 | + if ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) { |
|
713 | + $argument_values[ $key ] = $args['default']; |
|
714 | + } |
|
715 | + } |
|
716 | + } |
|
717 | + |
|
718 | + return $argument_values; |
|
719 | + } |
|
720 | + |
|
721 | + /** |
|
722 | + * Set arguments in super duper. |
|
723 | + * |
|
724 | + * @since 1.0.0 |
|
725 | + * |
|
726 | + * @return array Set arguments. |
|
727 | + */ |
|
728 | + public function set_arguments() { |
|
729 | + return $this->arguments; |
|
730 | + } |
|
731 | + |
|
732 | + /** |
|
733 | + * Get arguments in super duper. |
|
734 | + * |
|
735 | + * @since 1.0.0 |
|
736 | + * |
|
737 | + * @return array Get arguments. |
|
738 | + */ |
|
739 | + public function get_arguments() { |
|
740 | + if ( empty( $this->arguments ) ) { |
|
741 | + $this->arguments = $this->set_arguments(); |
|
742 | + } |
|
743 | + |
|
744 | + $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance ); |
|
745 | + $this->arguments = $this->add_name_from_key( $this->arguments, true ); |
|
746 | + |
|
747 | + return $this->arguments; |
|
748 | + } |
|
749 | + |
|
750 | + /** |
|
751 | + * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class. |
|
752 | + * |
|
753 | + * @param array $args |
|
754 | + * @param array $widget_args |
|
755 | + * @param string $content |
|
756 | + */ |
|
757 | + public function output( $args = array(), $widget_args = array(), $content = '' ) { |
|
758 | + |
|
759 | + } |
|
760 | + |
|
761 | + /** |
|
762 | + * Add the dynamic block code inline when the wp-block in enqueued. |
|
763 | + */ |
|
764 | + public function register_block() { |
|
765 | + wp_add_inline_script( 'wp-blocks', $this->block() ); |
|
766 | + } |
|
767 | + |
|
768 | + /** |
|
769 | + * Check if we need to show advanced options. |
|
770 | + * |
|
771 | + * @return bool |
|
772 | + */ |
|
773 | + public function block_show_advanced() { |
|
774 | + |
|
775 | + $show = false; |
|
776 | + $arguments = $this->arguments; |
|
777 | + |
|
778 | + if ( empty( $arguments ) ) { |
|
779 | + $arguments = $this->get_arguments(); |
|
780 | + } |
|
781 | + |
|
782 | + if ( ! empty( $arguments ) ) { |
|
783 | + foreach ( $arguments as $argument ) { |
|
784 | + if ( isset( $argument['advanced'] ) && $argument['advanced'] ) { |
|
785 | + $show = true; |
|
786 | + } |
|
787 | + } |
|
788 | + } |
|
789 | + |
|
790 | + return $show; |
|
791 | + } |
|
792 | + |
|
793 | + |
|
794 | + /** |
|
795 | + * Output the JS for building the dynamic Guntenberg block. |
|
796 | + * |
|
797 | + * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap. |
|
798 | + * @return mixed |
|
799 | + */ |
|
800 | + public function block() { |
|
801 | + ob_start(); |
|
802 | + ?> |
|
803 | 803 | <script> |
804 | 804 | /** |
805 | 805 | * BLOCK: Basic |
@@ -838,76 +838,76 @@ discard block |
||
838 | 838 | icon: '<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/. |
839 | 839 | category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed. |
840 | 840 | <?php if ( isset( $this->options['block-keywords'] ) ) { |
841 | - echo "keywords : " . $this->options['block-keywords'] . ","; |
|
842 | - }?> |
|
841 | + echo "keywords : " . $this->options['block-keywords'] . ","; |
|
842 | + }?> |
|
843 | 843 | |
844 | 844 | <?php |
845 | 845 | |
846 | - $show_advanced = $this->block_show_advanced(); |
|
847 | - |
|
848 | - $show_alignment = false; |
|
849 | - |
|
850 | - if ( ! empty( $this->arguments ) ) { |
|
851 | - echo "attributes : {"; |
|
852 | - |
|
853 | - if ( $show_advanced ) { |
|
854 | - echo "show_advanced: {"; |
|
855 | - echo " type: 'boolean',"; |
|
856 | - echo " default: false,"; |
|
857 | - echo "},"; |
|
858 | - } |
|
859 | - |
|
860 | - // block wrap element |
|
861 | - if ( isset( $this->options['block-wrap'] ) ) { //@todo we should validate this? |
|
862 | - echo "block_wrap: {"; |
|
863 | - echo " type: 'string',"; |
|
864 | - echo " default: '" . esc_attr( $this->options['block-wrap'] ) . "',"; |
|
865 | - echo "},"; |
|
866 | - } |
|
867 | - |
|
868 | - |
|
869 | - foreach ( $this->arguments as $key => $args ) { |
|
870 | - |
|
871 | - // set if we should show alignment |
|
872 | - if ( $key == 'alignment' ) { |
|
873 | - $show_alignment = true; |
|
874 | - } |
|
875 | - |
|
876 | - $extra = ''; |
|
877 | - |
|
878 | - if ( $args['type'] == 'checkbox' ) { |
|
879 | - $type = 'boolean'; |
|
880 | - $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false'; |
|
881 | - } elseif ( $args['type'] == 'number' ) { |
|
882 | - $type = 'number'; |
|
883 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
884 | - } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) { |
|
885 | - $type = 'array'; |
|
886 | - if ( is_array( $args['default'] ) ) { |
|
887 | - $default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]"; |
|
888 | - } else { |
|
889 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
890 | - } |
|
891 | - } elseif ( $args['type'] == 'multiselect' ) { |
|
892 | - $type = 'array'; |
|
893 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
894 | - } else { |
|
895 | - $type = 'string'; |
|
896 | - $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
897 | - } |
|
898 | - echo $key . " : {"; |
|
899 | - echo "type : '$type',"; |
|
900 | - echo "default : $default,"; |
|
901 | - echo "},"; |
|
902 | - } |
|
903 | - |
|
904 | - echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},"; |
|
905 | - |
|
906 | - echo "},"; |
|
907 | - |
|
908 | - } |
|
909 | - |
|
910 | - ?> |
|
846 | + $show_advanced = $this->block_show_advanced(); |
|
847 | + |
|
848 | + $show_alignment = false; |
|
849 | + |
|
850 | + if ( ! empty( $this->arguments ) ) { |
|
851 | + echo "attributes : {"; |
|
852 | + |
|
853 | + if ( $show_advanced ) { |
|
854 | + echo "show_advanced: {"; |
|
855 | + echo " type: 'boolean',"; |
|
856 | + echo " default: false,"; |
|
857 | + echo "},"; |
|
858 | + } |
|
859 | + |
|
860 | + // block wrap element |
|
861 | + if ( isset( $this->options['block-wrap'] ) ) { //@todo we should validate this? |
|
862 | + echo "block_wrap: {"; |
|
863 | + echo " type: 'string',"; |
|
864 | + echo " default: '" . esc_attr( $this->options['block-wrap'] ) . "',"; |
|
865 | + echo "},"; |
|
866 | + } |
|
867 | + |
|
868 | + |
|
869 | + foreach ( $this->arguments as $key => $args ) { |
|
870 | + |
|
871 | + // set if we should show alignment |
|
872 | + if ( $key == 'alignment' ) { |
|
873 | + $show_alignment = true; |
|
874 | + } |
|
875 | + |
|
876 | + $extra = ''; |
|
877 | + |
|
878 | + if ( $args['type'] == 'checkbox' ) { |
|
879 | + $type = 'boolean'; |
|
880 | + $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false'; |
|
881 | + } elseif ( $args['type'] == 'number' ) { |
|
882 | + $type = 'number'; |
|
883 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
884 | + } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) { |
|
885 | + $type = 'array'; |
|
886 | + if ( is_array( $args['default'] ) ) { |
|
887 | + $default = isset( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]"; |
|
888 | + } else { |
|
889 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
890 | + } |
|
891 | + } elseif ( $args['type'] == 'multiselect' ) { |
|
892 | + $type = 'array'; |
|
893 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
894 | + } else { |
|
895 | + $type = 'string'; |
|
896 | + $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''"; |
|
897 | + } |
|
898 | + echo $key . " : {"; |
|
899 | + echo "type : '$type',"; |
|
900 | + echo "default : $default,"; |
|
901 | + echo "},"; |
|
902 | + } |
|
903 | + |
|
904 | + echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},"; |
|
905 | + |
|
906 | + echo "},"; |
|
907 | + |
|
908 | + } |
|
909 | + |
|
910 | + ?> |
|
911 | 911 | |
912 | 912 | // The "edit" property must be a valid function. |
913 | 913 | edit: function (props) { |
@@ -926,8 +926,8 @@ discard block |
||
926 | 926 | 'shortcode': '<?php echo $this->options['base_id'];?>', |
927 | 927 | 'attributes': props.attributes, |
928 | 928 | 'post_id': <?php global $post; if ( isset( $post->ID ) ) { |
929 | - echo $post->ID; |
|
930 | - }?>, |
|
929 | + echo $post->ID; |
|
930 | + }?>, |
|
931 | 931 | '_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>' |
932 | 932 | }; |
933 | 933 | |
@@ -974,10 +974,10 @@ discard block |
||
974 | 974 | |
975 | 975 | <?php |
976 | 976 | |
977 | - if(! empty( $this->arguments )){ |
|
977 | + if(! empty( $this->arguments )){ |
|
978 | 978 | |
979 | - if ( $show_advanced ) { |
|
980 | - ?> |
|
979 | + if ( $show_advanced ) { |
|
980 | + ?> |
|
981 | 981 | el( |
982 | 982 | wp.components.ToggleControl, |
983 | 983 | { |
@@ -990,65 +990,65 @@ discard block |
||
990 | 990 | ), |
991 | 991 | <?php |
992 | 992 | |
993 | - } |
|
994 | - |
|
995 | - foreach($this->arguments as $key => $args){ |
|
996 | - $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : ''; |
|
997 | - $options = ''; |
|
998 | - $extra = ''; |
|
999 | - $require = ''; |
|
1000 | - $onchange = "props.setAttributes({ $key: $key } )"; |
|
1001 | - $value = "props.attributes.$key"; |
|
1002 | - $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'color' ); |
|
1003 | - if ( in_array( $args['type'], $text_type ) ) { |
|
1004 | - $type = 'TextControl'; |
|
1005 | - } elseif ( $args['type'] == 'checkbox' ) { |
|
1006 | - $type = 'CheckboxControl'; |
|
1007 | - $extra .= "checked: props.attributes.$key,"; |
|
1008 | - $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )"; |
|
1009 | - } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) { |
|
1010 | - $type = 'SelectControl'; |
|
1011 | - if ( ! empty( $args['options'] ) ) { |
|
1012 | - $options .= "options : ["; |
|
1013 | - foreach ( $args['options'] as $option_val => $option_label ) { |
|
1014 | - $options .= "{ value : '" . esc_attr( $option_val ) . "', label : '" . esc_attr( $option_label ) . "' },"; |
|
1015 | - } |
|
1016 | - $options .= "],"; |
|
1017 | - } |
|
1018 | - if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550 |
|
1019 | - $extra .= ' multiple: true, '; |
|
1020 | - //$onchange = "props.setAttributes({ $key: ['edit'] } )"; |
|
1021 | - //$value = "['edit', 'delete']"; |
|
1022 | - } |
|
1023 | - } elseif ( $args['type'] == 'alignment' ) { |
|
1024 | - $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example |
|
1025 | - } else { |
|
1026 | - continue;// if we have not implemented the control then don't break the JS. |
|
1027 | - } |
|
1028 | - |
|
1029 | - // add show only if advanced |
|
1030 | - if ( ! empty( $args['advanced'] ) ) { |
|
1031 | - echo "props.attributes.show_advanced && "; |
|
1032 | - } |
|
1033 | - // add setting require if defined |
|
1034 | - if ( ! empty( $args['element_require'] ) ) { |
|
1035 | - echo $this->block_props_replace( $args['element_require'], true ) . " && "; |
|
1036 | - } |
|
1037 | - ?> |
|
993 | + } |
|
994 | + |
|
995 | + foreach($this->arguments as $key => $args){ |
|
996 | + $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : ''; |
|
997 | + $options = ''; |
|
998 | + $extra = ''; |
|
999 | + $require = ''; |
|
1000 | + $onchange = "props.setAttributes({ $key: $key } )"; |
|
1001 | + $value = "props.attributes.$key"; |
|
1002 | + $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'color' ); |
|
1003 | + if ( in_array( $args['type'], $text_type ) ) { |
|
1004 | + $type = 'TextControl'; |
|
1005 | + } elseif ( $args['type'] == 'checkbox' ) { |
|
1006 | + $type = 'CheckboxControl'; |
|
1007 | + $extra .= "checked: props.attributes.$key,"; |
|
1008 | + $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )"; |
|
1009 | + } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) { |
|
1010 | + $type = 'SelectControl'; |
|
1011 | + if ( ! empty( $args['options'] ) ) { |
|
1012 | + $options .= "options : ["; |
|
1013 | + foreach ( $args['options'] as $option_val => $option_label ) { |
|
1014 | + $options .= "{ value : '" . esc_attr( $option_val ) . "', label : '" . esc_attr( $option_label ) . "' },"; |
|
1015 | + } |
|
1016 | + $options .= "],"; |
|
1017 | + } |
|
1018 | + if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550 |
|
1019 | + $extra .= ' multiple: true, '; |
|
1020 | + //$onchange = "props.setAttributes({ $key: ['edit'] } )"; |
|
1021 | + //$value = "['edit', 'delete']"; |
|
1022 | + } |
|
1023 | + } elseif ( $args['type'] == 'alignment' ) { |
|
1024 | + $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example |
|
1025 | + } else { |
|
1026 | + continue;// if we have not implemented the control then don't break the JS. |
|
1027 | + } |
|
1028 | + |
|
1029 | + // add show only if advanced |
|
1030 | + if ( ! empty( $args['advanced'] ) ) { |
|
1031 | + echo "props.attributes.show_advanced && "; |
|
1032 | + } |
|
1033 | + // add setting require if defined |
|
1034 | + if ( ! empty( $args['element_require'] ) ) { |
|
1035 | + echo $this->block_props_replace( $args['element_require'], true ) . " && "; |
|
1036 | + } |
|
1037 | + ?> |
|
1038 | 1038 | el( |
1039 | 1039 | wp.components.<?php echo esc_attr( $type );?>, |
1040 | 1040 | { |
1041 | 1041 | label: '<?php echo esc_attr( $args['title'] );?>', |
1042 | 1042 | help: '<?php if ( isset( $args['desc'] ) ) { |
1043 | - echo esc_attr( $args['desc'] ); |
|
1044 | - }?>', |
|
1043 | + echo esc_attr( $args['desc'] ); |
|
1044 | + }?>', |
|
1045 | 1045 | value: <?php echo $value;?>, |
1046 | 1046 | <?php if ( $type == 'TextControl' && $args['type'] != 'text' ) { |
1047 | - echo "type: '" . esc_attr( $args['type'] ) . "',"; |
|
1048 | - }?> |
|
1047 | + echo "type: '" . esc_attr( $args['type'] ) . "',"; |
|
1048 | + }?> |
|
1049 | 1049 | <?php if ( ! empty( $args['placeholder'] ) ) { |
1050 | - echo "placeholder: '" . esc_attr( $args['placeholder'] ) . "',"; |
|
1051 | - }?> |
|
1050 | + echo "placeholder: '" . esc_attr( $args['placeholder'] ) . "',"; |
|
1051 | + }?> |
|
1052 | 1052 | <?php echo $options;?> |
1053 | 1053 | <?php echo $extra;?> |
1054 | 1054 | <?php echo $custom_attributes;?> |
@@ -1058,27 +1058,27 @@ discard block |
||
1058 | 1058 | } |
1059 | 1059 | ), |
1060 | 1060 | <?php |
1061 | - } |
|
1062 | - } |
|
1063 | - ?> |
|
1061 | + } |
|
1062 | + } |
|
1063 | + ?> |
|
1064 | 1064 | |
1065 | 1065 | ), |
1066 | 1066 | |
1067 | 1067 | <?php |
1068 | - // If the user sets block-output array then build it |
|
1069 | - if ( ! empty( $this->options['block-output'] ) ) { |
|
1070 | - $this->block_element( $this->options['block-output'] ); |
|
1071 | - }else{ |
|
1072 | - // if no block-output is set then we try and get the shortcode html output via ajax. |
|
1073 | - ?> |
|
1068 | + // If the user sets block-output array then build it |
|
1069 | + if ( ! empty( $this->options['block-output'] ) ) { |
|
1070 | + $this->block_element( $this->options['block-output'] ); |
|
1071 | + }else{ |
|
1072 | + // if no block-output is set then we try and get the shortcode html output via ajax. |
|
1073 | + ?> |
|
1074 | 1074 | el('div', { |
1075 | 1075 | dangerouslySetInnerHTML: {__html: onChangeContent()}, |
1076 | 1076 | className: props.className, |
1077 | 1077 | style: {'min-height': '30px'} |
1078 | 1078 | }) |
1079 | 1079 | <?php |
1080 | - } |
|
1081 | - ?> |
|
1080 | + } |
|
1081 | + ?> |
|
1082 | 1082 | ]; // end return |
1083 | 1083 | }, |
1084 | 1084 | |
@@ -1095,17 +1095,17 @@ discard block |
||
1095 | 1095 | var content = "[<?php echo $this->options['base_id'];?>"; |
1096 | 1096 | <?php |
1097 | 1097 | |
1098 | - if(! empty( $this->arguments )){ |
|
1099 | - foreach($this->arguments as $key => $args){ |
|
1100 | - ?> |
|
1098 | + if(! empty( $this->arguments )){ |
|
1099 | + foreach($this->arguments as $key => $args){ |
|
1100 | + ?> |
|
1101 | 1101 | if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) { |
1102 | 1102 | content += " <?php echo esc_attr( $key );?>='" + attr.<?php echo esc_attr( $key );?>+ "' "; |
1103 | 1103 | } |
1104 | 1104 | <?php |
1105 | - } |
|
1106 | - } |
|
1105 | + } |
|
1106 | + } |
|
1107 | 1107 | |
1108 | - ?> |
|
1108 | + ?> |
|
1109 | 1109 | content += "]"; |
1110 | 1110 | |
1111 | 1111 | |
@@ -1134,370 +1134,370 @@ discard block |
||
1134 | 1134 | })(); |
1135 | 1135 | </script> |
1136 | 1136 | <?php |
1137 | - $output = ob_get_clean(); |
|
1137 | + $output = ob_get_clean(); |
|
1138 | 1138 | |
1139 | - /* |
|
1139 | + /* |
|
1140 | 1140 | * We only add the <script> tags for code highlighting, so we strip them from the output. |
1141 | 1141 | */ |
1142 | 1142 | |
1143 | - return str_replace( array( |
|
1144 | - '<script>', |
|
1145 | - '</script>' |
|
1146 | - ), '', $output ); |
|
1147 | - } |
|
1148 | - |
|
1149 | - /** |
|
1150 | - * Convert an array of attributes to block string. |
|
1151 | - * |
|
1152 | - * @todo there is prob a faster way to do this, also we could add some validation here. |
|
1153 | - * |
|
1154 | - * @param $custom_attributes |
|
1155 | - * |
|
1156 | - * @return string |
|
1157 | - */ |
|
1158 | - public function array_to_attributes( $custom_attributes, $html = false ) { |
|
1159 | - $attributes = ''; |
|
1160 | - if ( ! empty( $custom_attributes ) ) { |
|
1161 | - |
|
1162 | - if ( $html ) { |
|
1163 | - foreach ( $custom_attributes as $key => $val ) { |
|
1164 | - $attributes .= " $key='$val' "; |
|
1165 | - } |
|
1166 | - } else { |
|
1167 | - foreach ( $custom_attributes as $key => $val ) { |
|
1168 | - $attributes .= "'$key': '$val',"; |
|
1169 | - } |
|
1170 | - } |
|
1171 | - } |
|
1172 | - |
|
1173 | - return $attributes; |
|
1174 | - } |
|
1175 | - |
|
1176 | - /** |
|
1177 | - * A self looping function to create the output for JS block elements. |
|
1178 | - * |
|
1179 | - * This is what is output in the WP Editor visual view. |
|
1180 | - * |
|
1181 | - * @param $args |
|
1182 | - */ |
|
1183 | - public function block_element( $args ) { |
|
1184 | - |
|
1185 | - |
|
1186 | - if ( ! empty( $args ) ) { |
|
1187 | - foreach ( $args as $element => $new_args ) { |
|
1188 | - |
|
1189 | - if ( is_array( $new_args ) ) { // its an element |
|
1190 | - |
|
1191 | - |
|
1192 | - if ( isset( $new_args['element'] ) ) { |
|
1193 | - |
|
1194 | - if ( isset( $new_args['element_require'] ) ) { |
|
1195 | - echo str_replace( array( |
|
1196 | - "'+", |
|
1197 | - "+'" |
|
1198 | - ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " && "; |
|
1199 | - unset( $new_args['element_require'] ); |
|
1200 | - } |
|
1201 | - |
|
1202 | - echo "\n el( '" . $new_args['element'] . "', {"; |
|
1203 | - |
|
1204 | - // get the attributes |
|
1205 | - foreach ( $new_args as $new_key => $new_value ) { |
|
1206 | - |
|
1207 | - |
|
1208 | - if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) { |
|
1209 | - // do nothing |
|
1210 | - } else { |
|
1211 | - echo $this->block_element( array( $new_key => $new_value ) ); |
|
1212 | - } |
|
1213 | - } |
|
1214 | - |
|
1215 | - echo "},";// end attributes |
|
1216 | - |
|
1217 | - // get the content |
|
1218 | - $first_item = 0; |
|
1219 | - foreach ( $new_args as $new_key => $new_value ) { |
|
1220 | - if ( $new_key === 'content' || is_array( $new_value ) ) { |
|
1221 | - |
|
1222 | - if ( $new_key === 'content' ) { |
|
1223 | - echo "'" . $this->block_props_replace( $new_value ) . "'"; |
|
1224 | - } |
|
1225 | - |
|
1226 | - if ( is_array( $new_value ) ) { |
|
1227 | - |
|
1228 | - if ( isset( $new_value['element_require'] ) ) { |
|
1229 | - echo str_replace( array( |
|
1230 | - "'+", |
|
1231 | - "+'" |
|
1232 | - ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " && "; |
|
1233 | - unset( $new_value['element_require'] ); |
|
1234 | - } |
|
1235 | - |
|
1236 | - if ( isset( $new_value['element_repeat'] ) ) { |
|
1237 | - $x = 1; |
|
1238 | - while ( $x <= absint( $new_value['element_repeat'] ) ) { |
|
1239 | - $this->block_element( array( '' => $new_value ) ); |
|
1240 | - $x ++; |
|
1241 | - } |
|
1242 | - } else { |
|
1243 | - $this->block_element( array( '' => $new_value ) ); |
|
1244 | - } |
|
1245 | - } |
|
1246 | - $first_item ++; |
|
1247 | - } |
|
1248 | - } |
|
1249 | - |
|
1250 | - echo ")";// end content |
|
1251 | - |
|
1252 | - echo ", \n"; |
|
1253 | - |
|
1254 | - } |
|
1255 | - } else { |
|
1256 | - |
|
1257 | - if ( substr( $element, 0, 3 ) === "if_" ) { |
|
1258 | - echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ","; |
|
1259 | - } elseif ( $element == 'style' ) { |
|
1260 | - echo $element . ": " . $this->block_props_replace( $new_args ) . ","; |
|
1261 | - } else { |
|
1262 | - echo $element . ": '" . $this->block_props_replace( $new_args ) . "',"; |
|
1263 | - } |
|
1264 | - |
|
1265 | - } |
|
1266 | - } |
|
1267 | - } |
|
1268 | - } |
|
1269 | - |
|
1270 | - /** |
|
1271 | - * Replace block attributes placeholders with the proper naming. |
|
1272 | - * |
|
1273 | - * @param $string |
|
1274 | - * |
|
1275 | - * @return mixed |
|
1276 | - */ |
|
1277 | - public function block_props_replace( $string, $no_wrap = false ) { |
|
1278 | - |
|
1279 | - if ( $no_wrap ) { |
|
1280 | - $string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string ); |
|
1281 | - } else { |
|
1282 | - $string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string ); |
|
1283 | - } |
|
1284 | - |
|
1285 | - return $string; |
|
1286 | - } |
|
1287 | - |
|
1288 | - /** |
|
1289 | - * Outputs the content of the widget |
|
1290 | - * |
|
1291 | - * @param array $args |
|
1292 | - * @param array $instance |
|
1293 | - */ |
|
1294 | - public function widget( $args, $instance ) { |
|
1295 | - |
|
1296 | - // get the filtered values |
|
1297 | - $argument_values = $this->argument_values( $instance ); |
|
1298 | - $argument_values = $this->string_to_bool( $argument_values ); |
|
1299 | - $output = $this->output( $argument_values, $args ); |
|
1300 | - |
|
1301 | - if ( $output ) { |
|
1302 | - // Before widget |
|
1303 | - $before_widget = $args['before_widget']; |
|
1304 | - $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this ); |
|
1305 | - $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this ); |
|
1306 | - |
|
1307 | - // After widget |
|
1308 | - $after_widget = $args['after_widget']; |
|
1309 | - $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this ); |
|
1310 | - $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this ); |
|
1311 | - |
|
1312 | - echo $before_widget; |
|
1313 | - // elementor strips the widget wrapping div so we check for and add it back if needed |
|
1314 | - if ( $this->is_elementor_widget_output() ) { |
|
1315 | - echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $this->options['widget_ops']['classname'] ) . "'>" : ''; |
|
1316 | - } |
|
1317 | - echo $this->output_title( $args, $instance ); |
|
1318 | - echo $output; |
|
1319 | - if ( $this->is_elementor_widget_output() ) { |
|
1320 | - echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : ''; |
|
1321 | - } |
|
1322 | - echo $after_widget; |
|
1323 | - } |
|
1324 | - } |
|
1325 | - |
|
1326 | - /** |
|
1327 | - * Tests if the current output is inside a elementor container. |
|
1328 | - * |
|
1329 | - * @since 1.0.4 |
|
1330 | - * @return bool |
|
1331 | - */ |
|
1332 | - public function is_elementor_widget_output() { |
|
1333 | - $result = false; |
|
1334 | - if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) { |
|
1335 | - $result = true; |
|
1336 | - } |
|
1337 | - |
|
1338 | - return $result; |
|
1339 | - } |
|
1340 | - |
|
1341 | - /** |
|
1342 | - * Tests if the current output is inside a elementor preview. |
|
1343 | - * |
|
1344 | - * @since 1.0.4 |
|
1345 | - * @return bool |
|
1346 | - */ |
|
1347 | - public function is_elementor_preview() { |
|
1348 | - $result = false; |
|
1349 | - if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) { |
|
1350 | - $result = true; |
|
1351 | - } |
|
1352 | - |
|
1353 | - return $result; |
|
1354 | - } |
|
1355 | - |
|
1356 | - /** |
|
1357 | - * Output the super title. |
|
1358 | - * |
|
1359 | - * @param $args |
|
1360 | - * @param array $instance |
|
1361 | - * |
|
1362 | - * @return string |
|
1363 | - */ |
|
1364 | - public function output_title( $args, $instance = array() ) { |
|
1365 | - $output = ''; |
|
1366 | - if ( ! empty( $instance['title'] ) ) { |
|
1367 | - /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ |
|
1368 | - $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); |
|
1369 | - $output = $args['before_title'] . $title . $args['after_title']; |
|
1370 | - } |
|
1371 | - |
|
1372 | - return $output; |
|
1373 | - } |
|
1374 | - |
|
1375 | - /** |
|
1376 | - * Outputs the options form inputs for the widget. |
|
1377 | - * |
|
1378 | - * @param array $instance The widget options. |
|
1379 | - */ |
|
1380 | - public function form( $instance ) { |
|
1381 | - |
|
1382 | - // set widget instance |
|
1383 | - $this->instance = $instance; |
|
1384 | - |
|
1385 | - // set it as a SD widget |
|
1386 | - echo $this->widget_advanced_toggle(); |
|
1387 | - |
|
1388 | - echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>"; |
|
1389 | - $arguments = $this->get_arguments(); |
|
1390 | - |
|
1391 | - if ( is_array( $arguments ) ) { |
|
1392 | - foreach ( $arguments as $key => $args ) { |
|
1393 | - $this->widget_inputs( $args, $instance ); |
|
1394 | - } |
|
1395 | - } |
|
1396 | - } |
|
1397 | - |
|
1398 | - /** |
|
1399 | - * Get the hidden input that when added makes the advanced button show on widget settings. |
|
1400 | - * |
|
1401 | - * @return string |
|
1402 | - */ |
|
1403 | - public function widget_advanced_toggle() { |
|
1404 | - |
|
1405 | - $output = ''; |
|
1406 | - if ( $this->block_show_advanced() ) { |
|
1407 | - $val = 1; |
|
1408 | - } else { |
|
1409 | - $val = 0; |
|
1410 | - } |
|
1411 | - |
|
1412 | - $output .= "<input type='hidden' class='sd-show-advanced' value='$val' />"; |
|
1413 | - |
|
1414 | - return $output; |
|
1415 | - } |
|
1416 | - |
|
1417 | - /** |
|
1418 | - * Convert require element. |
|
1419 | - * |
|
1420 | - * @since 1.0.0 |
|
1421 | - * |
|
1422 | - * @param string $input Input element. |
|
1423 | - * |
|
1424 | - * @return string $output |
|
1425 | - */ |
|
1426 | - public function convert_element_require( $input ) { |
|
1427 | - |
|
1428 | - $input = str_replace( "'", '"', $input );// we only want double quotes |
|
1429 | - |
|
1430 | - $output = esc_attr( str_replace( array( "[%", "%]" ), array( |
|
1431 | - "jQuery(form).find('[data-argument=\"", |
|
1432 | - "\"]').find('input,select').val()" |
|
1433 | - ), $input ) ); |
|
1434 | - |
|
1435 | - return $output; |
|
1436 | - } |
|
1437 | - |
|
1438 | - /** |
|
1439 | - * Builds the inputs for the widget options. |
|
1440 | - * |
|
1441 | - * @param $args |
|
1442 | - * @param $instance |
|
1443 | - */ |
|
1444 | - public function widget_inputs( $args, $instance ) { |
|
1445 | - |
|
1446 | - $class = ""; |
|
1447 | - $element_require = ""; |
|
1448 | - $custom_attributes = ""; |
|
1449 | - |
|
1450 | - // get value |
|
1451 | - if ( isset( $instance[ $args['name'] ] ) ) { |
|
1452 | - $value = $instance[ $args['name'] ]; |
|
1453 | - } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) { |
|
1454 | - $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] ); |
|
1455 | - } else { |
|
1456 | - $value = ''; |
|
1457 | - } |
|
1458 | - |
|
1459 | - // get placeholder |
|
1460 | - if ( ! empty( $args['placeholder'] ) ) { |
|
1461 | - $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'"; |
|
1462 | - } else { |
|
1463 | - $placeholder = ''; |
|
1464 | - } |
|
1465 | - |
|
1466 | - // get if advanced |
|
1467 | - if ( isset( $args['advanced'] ) && $args['advanced'] ) { |
|
1468 | - $class .= " sd-advanced-setting "; |
|
1469 | - } |
|
1470 | - |
|
1471 | - // element_require |
|
1472 | - if ( isset( $args['element_require'] ) && $args['element_require'] ) { |
|
1473 | - $element_require = $args['element_require']; |
|
1474 | - } |
|
1475 | - |
|
1476 | - // custom_attributes |
|
1477 | - if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) { |
|
1478 | - $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true ); |
|
1479 | - } |
|
1480 | - |
|
1481 | - // before wrapper |
|
1482 | - ?> |
|
1143 | + return str_replace( array( |
|
1144 | + '<script>', |
|
1145 | + '</script>' |
|
1146 | + ), '', $output ); |
|
1147 | + } |
|
1148 | + |
|
1149 | + /** |
|
1150 | + * Convert an array of attributes to block string. |
|
1151 | + * |
|
1152 | + * @todo there is prob a faster way to do this, also we could add some validation here. |
|
1153 | + * |
|
1154 | + * @param $custom_attributes |
|
1155 | + * |
|
1156 | + * @return string |
|
1157 | + */ |
|
1158 | + public function array_to_attributes( $custom_attributes, $html = false ) { |
|
1159 | + $attributes = ''; |
|
1160 | + if ( ! empty( $custom_attributes ) ) { |
|
1161 | + |
|
1162 | + if ( $html ) { |
|
1163 | + foreach ( $custom_attributes as $key => $val ) { |
|
1164 | + $attributes .= " $key='$val' "; |
|
1165 | + } |
|
1166 | + } else { |
|
1167 | + foreach ( $custom_attributes as $key => $val ) { |
|
1168 | + $attributes .= "'$key': '$val',"; |
|
1169 | + } |
|
1170 | + } |
|
1171 | + } |
|
1172 | + |
|
1173 | + return $attributes; |
|
1174 | + } |
|
1175 | + |
|
1176 | + /** |
|
1177 | + * A self looping function to create the output for JS block elements. |
|
1178 | + * |
|
1179 | + * This is what is output in the WP Editor visual view. |
|
1180 | + * |
|
1181 | + * @param $args |
|
1182 | + */ |
|
1183 | + public function block_element( $args ) { |
|
1184 | + |
|
1185 | + |
|
1186 | + if ( ! empty( $args ) ) { |
|
1187 | + foreach ( $args as $element => $new_args ) { |
|
1188 | + |
|
1189 | + if ( is_array( $new_args ) ) { // its an element |
|
1190 | + |
|
1191 | + |
|
1192 | + if ( isset( $new_args['element'] ) ) { |
|
1193 | + |
|
1194 | + if ( isset( $new_args['element_require'] ) ) { |
|
1195 | + echo str_replace( array( |
|
1196 | + "'+", |
|
1197 | + "+'" |
|
1198 | + ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " && "; |
|
1199 | + unset( $new_args['element_require'] ); |
|
1200 | + } |
|
1201 | + |
|
1202 | + echo "\n el( '" . $new_args['element'] . "', {"; |
|
1203 | + |
|
1204 | + // get the attributes |
|
1205 | + foreach ( $new_args as $new_key => $new_value ) { |
|
1206 | + |
|
1207 | + |
|
1208 | + if ( $new_key == 'element' || $new_key == 'content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) { |
|
1209 | + // do nothing |
|
1210 | + } else { |
|
1211 | + echo $this->block_element( array( $new_key => $new_value ) ); |
|
1212 | + } |
|
1213 | + } |
|
1214 | + |
|
1215 | + echo "},";// end attributes |
|
1216 | + |
|
1217 | + // get the content |
|
1218 | + $first_item = 0; |
|
1219 | + foreach ( $new_args as $new_key => $new_value ) { |
|
1220 | + if ( $new_key === 'content' || is_array( $new_value ) ) { |
|
1221 | + |
|
1222 | + if ( $new_key === 'content' ) { |
|
1223 | + echo "'" . $this->block_props_replace( $new_value ) . "'"; |
|
1224 | + } |
|
1225 | + |
|
1226 | + if ( is_array( $new_value ) ) { |
|
1227 | + |
|
1228 | + if ( isset( $new_value['element_require'] ) ) { |
|
1229 | + echo str_replace( array( |
|
1230 | + "'+", |
|
1231 | + "+'" |
|
1232 | + ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " && "; |
|
1233 | + unset( $new_value['element_require'] ); |
|
1234 | + } |
|
1235 | + |
|
1236 | + if ( isset( $new_value['element_repeat'] ) ) { |
|
1237 | + $x = 1; |
|
1238 | + while ( $x <= absint( $new_value['element_repeat'] ) ) { |
|
1239 | + $this->block_element( array( '' => $new_value ) ); |
|
1240 | + $x ++; |
|
1241 | + } |
|
1242 | + } else { |
|
1243 | + $this->block_element( array( '' => $new_value ) ); |
|
1244 | + } |
|
1245 | + } |
|
1246 | + $first_item ++; |
|
1247 | + } |
|
1248 | + } |
|
1249 | + |
|
1250 | + echo ")";// end content |
|
1251 | + |
|
1252 | + echo ", \n"; |
|
1253 | + |
|
1254 | + } |
|
1255 | + } else { |
|
1256 | + |
|
1257 | + if ( substr( $element, 0, 3 ) === "if_" ) { |
|
1258 | + echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ","; |
|
1259 | + } elseif ( $element == 'style' ) { |
|
1260 | + echo $element . ": " . $this->block_props_replace( $new_args ) . ","; |
|
1261 | + } else { |
|
1262 | + echo $element . ": '" . $this->block_props_replace( $new_args ) . "',"; |
|
1263 | + } |
|
1264 | + |
|
1265 | + } |
|
1266 | + } |
|
1267 | + } |
|
1268 | + } |
|
1269 | + |
|
1270 | + /** |
|
1271 | + * Replace block attributes placeholders with the proper naming. |
|
1272 | + * |
|
1273 | + * @param $string |
|
1274 | + * |
|
1275 | + * @return mixed |
|
1276 | + */ |
|
1277 | + public function block_props_replace( $string, $no_wrap = false ) { |
|
1278 | + |
|
1279 | + if ( $no_wrap ) { |
|
1280 | + $string = str_replace( array( "[%", "%]" ), array( "props.attributes.", "" ), $string ); |
|
1281 | + } else { |
|
1282 | + $string = str_replace( array( "[%", "%]" ), array( "'+props.attributes.", "+'" ), $string ); |
|
1283 | + } |
|
1284 | + |
|
1285 | + return $string; |
|
1286 | + } |
|
1287 | + |
|
1288 | + /** |
|
1289 | + * Outputs the content of the widget |
|
1290 | + * |
|
1291 | + * @param array $args |
|
1292 | + * @param array $instance |
|
1293 | + */ |
|
1294 | + public function widget( $args, $instance ) { |
|
1295 | + |
|
1296 | + // get the filtered values |
|
1297 | + $argument_values = $this->argument_values( $instance ); |
|
1298 | + $argument_values = $this->string_to_bool( $argument_values ); |
|
1299 | + $output = $this->output( $argument_values, $args ); |
|
1300 | + |
|
1301 | + if ( $output ) { |
|
1302 | + // Before widget |
|
1303 | + $before_widget = $args['before_widget']; |
|
1304 | + $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this ); |
|
1305 | + $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this ); |
|
1306 | + |
|
1307 | + // After widget |
|
1308 | + $after_widget = $args['after_widget']; |
|
1309 | + $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this ); |
|
1310 | + $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this ); |
|
1311 | + |
|
1312 | + echo $before_widget; |
|
1313 | + // elementor strips the widget wrapping div so we check for and add it back if needed |
|
1314 | + if ( $this->is_elementor_widget_output() ) { |
|
1315 | + echo ! empty( $this->options['widget_ops']['classname'] ) ? "<span class='" . esc_attr( $this->options['widget_ops']['classname'] ) . "'>" : ''; |
|
1316 | + } |
|
1317 | + echo $this->output_title( $args, $instance ); |
|
1318 | + echo $output; |
|
1319 | + if ( $this->is_elementor_widget_output() ) { |
|
1320 | + echo ! empty( $this->options['widget_ops']['classname'] ) ? "</span>" : ''; |
|
1321 | + } |
|
1322 | + echo $after_widget; |
|
1323 | + } |
|
1324 | + } |
|
1325 | + |
|
1326 | + /** |
|
1327 | + * Tests if the current output is inside a elementor container. |
|
1328 | + * |
|
1329 | + * @since 1.0.4 |
|
1330 | + * @return bool |
|
1331 | + */ |
|
1332 | + public function is_elementor_widget_output() { |
|
1333 | + $result = false; |
|
1334 | + if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) { |
|
1335 | + $result = true; |
|
1336 | + } |
|
1337 | + |
|
1338 | + return $result; |
|
1339 | + } |
|
1340 | + |
|
1341 | + /** |
|
1342 | + * Tests if the current output is inside a elementor preview. |
|
1343 | + * |
|
1344 | + * @since 1.0.4 |
|
1345 | + * @return bool |
|
1346 | + */ |
|
1347 | + public function is_elementor_preview() { |
|
1348 | + $result = false; |
|
1349 | + if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) { |
|
1350 | + $result = true; |
|
1351 | + } |
|
1352 | + |
|
1353 | + return $result; |
|
1354 | + } |
|
1355 | + |
|
1356 | + /** |
|
1357 | + * Output the super title. |
|
1358 | + * |
|
1359 | + * @param $args |
|
1360 | + * @param array $instance |
|
1361 | + * |
|
1362 | + * @return string |
|
1363 | + */ |
|
1364 | + public function output_title( $args, $instance = array() ) { |
|
1365 | + $output = ''; |
|
1366 | + if ( ! empty( $instance['title'] ) ) { |
|
1367 | + /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ |
|
1368 | + $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ); |
|
1369 | + $output = $args['before_title'] . $title . $args['after_title']; |
|
1370 | + } |
|
1371 | + |
|
1372 | + return $output; |
|
1373 | + } |
|
1374 | + |
|
1375 | + /** |
|
1376 | + * Outputs the options form inputs for the widget. |
|
1377 | + * |
|
1378 | + * @param array $instance The widget options. |
|
1379 | + */ |
|
1380 | + public function form( $instance ) { |
|
1381 | + |
|
1382 | + // set widget instance |
|
1383 | + $this->instance = $instance; |
|
1384 | + |
|
1385 | + // set it as a SD widget |
|
1386 | + echo $this->widget_advanced_toggle(); |
|
1387 | + |
|
1388 | + echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>"; |
|
1389 | + $arguments = $this->get_arguments(); |
|
1390 | + |
|
1391 | + if ( is_array( $arguments ) ) { |
|
1392 | + foreach ( $arguments as $key => $args ) { |
|
1393 | + $this->widget_inputs( $args, $instance ); |
|
1394 | + } |
|
1395 | + } |
|
1396 | + } |
|
1397 | + |
|
1398 | + /** |
|
1399 | + * Get the hidden input that when added makes the advanced button show on widget settings. |
|
1400 | + * |
|
1401 | + * @return string |
|
1402 | + */ |
|
1403 | + public function widget_advanced_toggle() { |
|
1404 | + |
|
1405 | + $output = ''; |
|
1406 | + if ( $this->block_show_advanced() ) { |
|
1407 | + $val = 1; |
|
1408 | + } else { |
|
1409 | + $val = 0; |
|
1410 | + } |
|
1411 | + |
|
1412 | + $output .= "<input type='hidden' class='sd-show-advanced' value='$val' />"; |
|
1413 | + |
|
1414 | + return $output; |
|
1415 | + } |
|
1416 | + |
|
1417 | + /** |
|
1418 | + * Convert require element. |
|
1419 | + * |
|
1420 | + * @since 1.0.0 |
|
1421 | + * |
|
1422 | + * @param string $input Input element. |
|
1423 | + * |
|
1424 | + * @return string $output |
|
1425 | + */ |
|
1426 | + public function convert_element_require( $input ) { |
|
1427 | + |
|
1428 | + $input = str_replace( "'", '"', $input );// we only want double quotes |
|
1429 | + |
|
1430 | + $output = esc_attr( str_replace( array( "[%", "%]" ), array( |
|
1431 | + "jQuery(form).find('[data-argument=\"", |
|
1432 | + "\"]').find('input,select').val()" |
|
1433 | + ), $input ) ); |
|
1434 | + |
|
1435 | + return $output; |
|
1436 | + } |
|
1437 | + |
|
1438 | + /** |
|
1439 | + * Builds the inputs for the widget options. |
|
1440 | + * |
|
1441 | + * @param $args |
|
1442 | + * @param $instance |
|
1443 | + */ |
|
1444 | + public function widget_inputs( $args, $instance ) { |
|
1445 | + |
|
1446 | + $class = ""; |
|
1447 | + $element_require = ""; |
|
1448 | + $custom_attributes = ""; |
|
1449 | + |
|
1450 | + // get value |
|
1451 | + if ( isset( $instance[ $args['name'] ] ) ) { |
|
1452 | + $value = $instance[ $args['name'] ]; |
|
1453 | + } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) { |
|
1454 | + $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] ); |
|
1455 | + } else { |
|
1456 | + $value = ''; |
|
1457 | + } |
|
1458 | + |
|
1459 | + // get placeholder |
|
1460 | + if ( ! empty( $args['placeholder'] ) ) { |
|
1461 | + $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'"; |
|
1462 | + } else { |
|
1463 | + $placeholder = ''; |
|
1464 | + } |
|
1465 | + |
|
1466 | + // get if advanced |
|
1467 | + if ( isset( $args['advanced'] ) && $args['advanced'] ) { |
|
1468 | + $class .= " sd-advanced-setting "; |
|
1469 | + } |
|
1470 | + |
|
1471 | + // element_require |
|
1472 | + if ( isset( $args['element_require'] ) && $args['element_require'] ) { |
|
1473 | + $element_require = $args['element_require']; |
|
1474 | + } |
|
1475 | + |
|
1476 | + // custom_attributes |
|
1477 | + if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) { |
|
1478 | + $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true ); |
|
1479 | + } |
|
1480 | + |
|
1481 | + // before wrapper |
|
1482 | + ?> |
|
1483 | 1483 | <p class="sd-argument <?php echo esc_attr( $class ); ?>" |
1484 | 1484 | data-argument='<?php echo esc_attr( $args['name'] ); ?>' |
1485 | 1485 | data-element_require='<?php if ( $element_require ) { |
1486 | - echo $this->convert_element_require( $element_require ); |
|
1487 | - } ?>' |
|
1486 | + echo $this->convert_element_require( $element_require ); |
|
1487 | + } ?>' |
|
1488 | 1488 | > |
1489 | 1489 | <?php |
1490 | 1490 | |
1491 | - switch ( $args['type'] ) { |
|
1492 | - //array('text','password','number','email','tel','url','color') |
|
1493 | - case "text": |
|
1494 | - case "password": |
|
1495 | - case "number": |
|
1496 | - case "email": |
|
1497 | - case "tel": |
|
1498 | - case "url": |
|
1499 | - case "color": |
|
1500 | - ?> |
|
1491 | + switch ( $args['type'] ) { |
|
1492 | + //array('text','password','number','email','tel','url','color') |
|
1493 | + case "text": |
|
1494 | + case "password": |
|
1495 | + case "number": |
|
1496 | + case "email": |
|
1497 | + case "tel": |
|
1498 | + case "url": |
|
1499 | + case "color": |
|
1500 | + ?> |
|
1501 | 1501 | <label |
1502 | 1502 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label> |
1503 | 1503 | <input <?php echo $placeholder; ?> class="widefat" |
@@ -1508,47 +1508,47 @@ discard block |
||
1508 | 1508 | value="<?php echo esc_attr( $value ); ?>"> |
1509 | 1509 | <?php |
1510 | 1510 | |
1511 | - break; |
|
1512 | - case "select": |
|
1513 | - $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false; |
|
1514 | - if ( $multiple ) { |
|
1515 | - if ( empty( $value ) ) { |
|
1516 | - $value = array(); |
|
1517 | - } |
|
1518 | - } |
|
1519 | - ?> |
|
1511 | + break; |
|
1512 | + case "select": |
|
1513 | + $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false; |
|
1514 | + if ( $multiple ) { |
|
1515 | + if ( empty( $value ) ) { |
|
1516 | + $value = array(); |
|
1517 | + } |
|
1518 | + } |
|
1519 | + ?> |
|
1520 | 1520 | <label |
1521 | 1521 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label> |
1522 | 1522 | <select <?php echo $placeholder; ?> class="widefat" |
1523 | 1523 | <?php echo $custom_attributes; ?> |
1524 | 1524 | id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" |
1525 | 1525 | name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); |
1526 | - if ( $multiple ) { |
|
1527 | - echo "[]"; |
|
1528 | - } ?>" |
|
1526 | + if ( $multiple ) { |
|
1527 | + echo "[]"; |
|
1528 | + } ?>" |
|
1529 | 1529 | <?php if ( $multiple ) { |
1530 | - echo "multiple"; |
|
1531 | - } //@todo not implemented yet due to gutenberg not supporting it |
|
1532 | - ?> |
|
1530 | + echo "multiple"; |
|
1531 | + } //@todo not implemented yet due to gutenberg not supporting it |
|
1532 | + ?> |
|
1533 | 1533 | > |
1534 | 1534 | <?php |
1535 | 1535 | |
1536 | - if ( ! empty( $args['options'] ) ) { |
|
1537 | - foreach ( $args['options'] as $val => $label ) { |
|
1538 | - if ( $multiple ) { |
|
1539 | - $selected = in_array( $val, $value ) ? 'selected="selected"' : ''; |
|
1540 | - } else { |
|
1541 | - $selected = selected( $value, $val, false ); |
|
1542 | - } |
|
1543 | - echo "<option value='$val' " . $selected . ">$label</option>"; |
|
1544 | - } |
|
1545 | - } |
|
1546 | - ?> |
|
1536 | + if ( ! empty( $args['options'] ) ) { |
|
1537 | + foreach ( $args['options'] as $val => $label ) { |
|
1538 | + if ( $multiple ) { |
|
1539 | + $selected = in_array( $val, $value ) ? 'selected="selected"' : ''; |
|
1540 | + } else { |
|
1541 | + $selected = selected( $value, $val, false ); |
|
1542 | + } |
|
1543 | + echo "<option value='$val' " . $selected . ">$label</option>"; |
|
1544 | + } |
|
1545 | + } |
|
1546 | + ?> |
|
1547 | 1547 | </select> |
1548 | 1548 | <?php |
1549 | - break; |
|
1550 | - case "checkbox": |
|
1551 | - ?> |
|
1549 | + break; |
|
1550 | + case "checkbox": |
|
1551 | + ?> |
|
1552 | 1552 | <input <?php echo $placeholder; ?> |
1553 | 1553 | <?php checked( 1, $value, true ) ?> |
1554 | 1554 | <?php echo $custom_attributes; ?> |
@@ -1558,136 +1558,136 @@ discard block |
||
1558 | 1558 | <label |
1559 | 1559 | for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo esc_attr( $args['title'] ); ?><?php echo $this->widget_field_desc( $args ); ?></label> |
1560 | 1560 | <?php |
1561 | - break; |
|
1562 | - case "hidden": |
|
1563 | - ?> |
|
1561 | + break; |
|
1562 | + case "hidden": |
|
1563 | + ?> |
|
1564 | 1564 | <input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" |
1565 | 1565 | name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden" |
1566 | 1566 | value="<?php echo esc_attr( $value ); ?>"> |
1567 | 1567 | <?php |
1568 | - break; |
|
1569 | - default: |
|
1570 | - echo "No input type found!"; // @todo we need to add more input types. |
|
1571 | - } |
|
1568 | + break; |
|
1569 | + default: |
|
1570 | + echo "No input type found!"; // @todo we need to add more input types. |
|
1571 | + } |
|
1572 | 1572 | |
1573 | - // after wrapper |
|
1574 | - ?> |
|
1573 | + // after wrapper |
|
1574 | + ?> |
|
1575 | 1575 | </p> |
1576 | 1576 | <?php |
1577 | 1577 | |
1578 | - } |
|
1579 | - |
|
1580 | - /** |
|
1581 | - * Get the widget input description html. |
|
1582 | - * |
|
1583 | - * @param $args |
|
1584 | - * |
|
1585 | - * @return string |
|
1586 | - * @todo, need to make its own tooltip script |
|
1587 | - */ |
|
1588 | - public function widget_field_desc( $args ) { |
|
1589 | - |
|
1590 | - $description = ''; |
|
1591 | - if ( isset( $args['desc'] ) && $args['desc'] ) { |
|
1592 | - if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) { |
|
1593 | - $description = $this->desc_tip( $args['desc'] ); |
|
1594 | - } else { |
|
1595 | - $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>'; |
|
1596 | - } |
|
1597 | - } |
|
1598 | - |
|
1599 | - return $description; |
|
1600 | - } |
|
1601 | - |
|
1602 | - /** |
|
1603 | - * Get the tool tip html. |
|
1604 | - * |
|
1605 | - * @param $tip |
|
1606 | - * @param bool $allow_html |
|
1607 | - * |
|
1608 | - * @return string |
|
1609 | - */ |
|
1610 | - function desc_tip( $tip, $allow_html = false ) { |
|
1611 | - if ( $allow_html ) { |
|
1612 | - $tip = $this->sanitize_tooltip( $tip ); |
|
1613 | - } else { |
|
1614 | - $tip = esc_attr( $tip ); |
|
1615 | - } |
|
1616 | - |
|
1617 | - return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>'; |
|
1618 | - } |
|
1619 | - |
|
1620 | - /** |
|
1621 | - * Sanitize a string destined to be a tooltip. |
|
1622 | - * |
|
1623 | - * @param string $var |
|
1624 | - * |
|
1625 | - * @return string |
|
1626 | - */ |
|
1627 | - public function sanitize_tooltip( $var ) { |
|
1628 | - return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( |
|
1629 | - 'br' => array(), |
|
1630 | - 'em' => array(), |
|
1631 | - 'strong' => array(), |
|
1632 | - 'small' => array(), |
|
1633 | - 'span' => array(), |
|
1634 | - 'ul' => array(), |
|
1635 | - 'li' => array(), |
|
1636 | - 'ol' => array(), |
|
1637 | - 'p' => array(), |
|
1638 | - ) ) ); |
|
1639 | - } |
|
1640 | - |
|
1641 | - /** |
|
1642 | - * Processing widget options on save |
|
1643 | - * |
|
1644 | - * @param array $new_instance The new options |
|
1645 | - * @param array $old_instance The previous options |
|
1646 | - * |
|
1647 | - * @return array |
|
1648 | - * @todo we should add some sanitation here. |
|
1649 | - */ |
|
1650 | - public function update( $new_instance, $old_instance ) { |
|
1651 | - |
|
1652 | - //save the widget |
|
1653 | - $instance = array_merge( (array) $old_instance, (array) $new_instance ); |
|
1654 | - |
|
1655 | - // set widget instance |
|
1656 | - $this->instance = $instance; |
|
1657 | - |
|
1658 | - if ( empty( $this->arguments ) ) { |
|
1659 | - $this->get_arguments(); |
|
1660 | - } |
|
1661 | - |
|
1662 | - // check for checkboxes |
|
1663 | - if ( ! empty( $this->arguments ) ) { |
|
1664 | - foreach ( $this->arguments as $argument ) { |
|
1665 | - if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) { |
|
1666 | - $instance[ $argument['name'] ] = '0'; |
|
1667 | - } |
|
1668 | - } |
|
1669 | - } |
|
1670 | - |
|
1671 | - return $instance; |
|
1672 | - } |
|
1673 | - |
|
1674 | - /** |
|
1675 | - * Checks if the current call is a ajax call to get the block content. |
|
1676 | - * |
|
1677 | - * This can be used in your widget to return different content as the block content. |
|
1678 | - * |
|
1679 | - * @since 1.0.3 |
|
1680 | - * @return bool |
|
1681 | - */ |
|
1682 | - public function is_block_content_call() { |
|
1683 | - $result = false; |
|
1684 | - if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) { |
|
1685 | - $result = true; |
|
1686 | - } |
|
1687 | - |
|
1688 | - return $result; |
|
1689 | - } |
|
1690 | - |
|
1691 | - } |
|
1578 | + } |
|
1579 | + |
|
1580 | + /** |
|
1581 | + * Get the widget input description html. |
|
1582 | + * |
|
1583 | + * @param $args |
|
1584 | + * |
|
1585 | + * @return string |
|
1586 | + * @todo, need to make its own tooltip script |
|
1587 | + */ |
|
1588 | + public function widget_field_desc( $args ) { |
|
1589 | + |
|
1590 | + $description = ''; |
|
1591 | + if ( isset( $args['desc'] ) && $args['desc'] ) { |
|
1592 | + if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) { |
|
1593 | + $description = $this->desc_tip( $args['desc'] ); |
|
1594 | + } else { |
|
1595 | + $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>'; |
|
1596 | + } |
|
1597 | + } |
|
1598 | + |
|
1599 | + return $description; |
|
1600 | + } |
|
1601 | + |
|
1602 | + /** |
|
1603 | + * Get the tool tip html. |
|
1604 | + * |
|
1605 | + * @param $tip |
|
1606 | + * @param bool $allow_html |
|
1607 | + * |
|
1608 | + * @return string |
|
1609 | + */ |
|
1610 | + function desc_tip( $tip, $allow_html = false ) { |
|
1611 | + if ( $allow_html ) { |
|
1612 | + $tip = $this->sanitize_tooltip( $tip ); |
|
1613 | + } else { |
|
1614 | + $tip = esc_attr( $tip ); |
|
1615 | + } |
|
1616 | + |
|
1617 | + return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>'; |
|
1618 | + } |
|
1619 | + |
|
1620 | + /** |
|
1621 | + * Sanitize a string destined to be a tooltip. |
|
1622 | + * |
|
1623 | + * @param string $var |
|
1624 | + * |
|
1625 | + * @return string |
|
1626 | + */ |
|
1627 | + public function sanitize_tooltip( $var ) { |
|
1628 | + return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( |
|
1629 | + 'br' => array(), |
|
1630 | + 'em' => array(), |
|
1631 | + 'strong' => array(), |
|
1632 | + 'small' => array(), |
|
1633 | + 'span' => array(), |
|
1634 | + 'ul' => array(), |
|
1635 | + 'li' => array(), |
|
1636 | + 'ol' => array(), |
|
1637 | + 'p' => array(), |
|
1638 | + ) ) ); |
|
1639 | + } |
|
1640 | + |
|
1641 | + /** |
|
1642 | + * Processing widget options on save |
|
1643 | + * |
|
1644 | + * @param array $new_instance The new options |
|
1645 | + * @param array $old_instance The previous options |
|
1646 | + * |
|
1647 | + * @return array |
|
1648 | + * @todo we should add some sanitation here. |
|
1649 | + */ |
|
1650 | + public function update( $new_instance, $old_instance ) { |
|
1651 | + |
|
1652 | + //save the widget |
|
1653 | + $instance = array_merge( (array) $old_instance, (array) $new_instance ); |
|
1654 | + |
|
1655 | + // set widget instance |
|
1656 | + $this->instance = $instance; |
|
1657 | + |
|
1658 | + if ( empty( $this->arguments ) ) { |
|
1659 | + $this->get_arguments(); |
|
1660 | + } |
|
1661 | + |
|
1662 | + // check for checkboxes |
|
1663 | + if ( ! empty( $this->arguments ) ) { |
|
1664 | + foreach ( $this->arguments as $argument ) { |
|
1665 | + if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) { |
|
1666 | + $instance[ $argument['name'] ] = '0'; |
|
1667 | + } |
|
1668 | + } |
|
1669 | + } |
|
1670 | + |
|
1671 | + return $instance; |
|
1672 | + } |
|
1673 | + |
|
1674 | + /** |
|
1675 | + * Checks if the current call is a ajax call to get the block content. |
|
1676 | + * |
|
1677 | + * This can be used in your widget to return different content as the block content. |
|
1678 | + * |
|
1679 | + * @since 1.0.3 |
|
1680 | + * @return bool |
|
1681 | + */ |
|
1682 | + public function is_block_content_call() { |
|
1683 | + $result = false; |
|
1684 | + if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) { |
|
1685 | + $result = true; |
|
1686 | + } |
|
1687 | + |
|
1688 | + return $result; |
|
1689 | + } |
|
1690 | + |
|
1691 | + } |
|
1692 | 1692 | |
1693 | 1693 | } |
1694 | 1694 | \ No newline at end of file |
@@ -13,7 +13,7 @@ discard block |
||
13 | 13 | * Bail if we are not in WP. |
14 | 14 | */ |
15 | 15 | if ( ! defined( 'ABSPATH' ) ) { |
16 | - exit; |
|
16 | + exit; |
|
17 | 17 | } |
18 | 18 | |
19 | 19 | /** |
@@ -21,285 +21,285 @@ discard block |
||
21 | 21 | */ |
22 | 22 | if ( ! class_exists( 'WP_Font_Awesome_Settings' ) ) { |
23 | 23 | |
24 | - /** |
|
25 | - * A Class to be able to change settings for Font Awesome. |
|
26 | - * |
|
27 | - * Class WP_Font_Awesome_Settings |
|
28 | - * @since 1.0.10 Now able to pass wp.org theme check. |
|
29 | - * @ver 1.0.10 |
|
30 | - * @todo decide how to implement textdomain |
|
31 | - */ |
|
32 | - class WP_Font_Awesome_Settings { |
|
33 | - |
|
34 | - /** |
|
35 | - * Class version version. |
|
36 | - * |
|
37 | - * @var string |
|
38 | - */ |
|
39 | - public $version = '1.0.10'; |
|
40 | - |
|
41 | - /** |
|
42 | - * Class textdomain. |
|
43 | - * |
|
44 | - * @var string |
|
45 | - */ |
|
46 | - public $textdomain = 'font-awesome-settings'; |
|
47 | - |
|
48 | - /** |
|
49 | - * Latest version of Font Awesome at time of publish published. |
|
50 | - * |
|
51 | - * @var string |
|
52 | - */ |
|
53 | - public $latest = "5.6.1"; |
|
54 | - |
|
55 | - /** |
|
56 | - * The title. |
|
57 | - * |
|
58 | - * @var string |
|
59 | - */ |
|
60 | - public $name = 'Font Awesome'; |
|
61 | - |
|
62 | - /** |
|
63 | - * Holds the settings values. |
|
64 | - * |
|
65 | - * @var array |
|
66 | - */ |
|
67 | - private $settings; |
|
68 | - |
|
69 | - /** |
|
70 | - * WP_Font_Awesome_Settings instance. |
|
71 | - * |
|
72 | - * @access private |
|
73 | - * @since 1.0.0 |
|
74 | - * @var WP_Font_Awesome_Settings There can be only one! |
|
75 | - */ |
|
76 | - private static $instance = null; |
|
77 | - |
|
78 | - /** |
|
79 | - * Main WP_Font_Awesome_Settings Instance. |
|
80 | - * |
|
81 | - * Ensures only one instance of WP_Font_Awesome_Settings is loaded or can be loaded. |
|
82 | - * |
|
83 | - * @since 1.0.0 |
|
84 | - * @static |
|
85 | - * @return WP_Font_Awesome_Settings - Main instance. |
|
86 | - */ |
|
87 | - public static function instance() { |
|
88 | - if ( ! isset( self::$instance ) && ! ( self::$instance instanceof WP_Font_Awesome_Settings ) ) { |
|
89 | - self::$instance = new WP_Font_Awesome_Settings; |
|
90 | - |
|
91 | - add_action( 'init', array( self::$instance, 'init' ) ); // set settings |
|
92 | - |
|
93 | - if ( is_admin() ) { |
|
94 | - add_action( 'admin_menu', array( self::$instance, 'menu_item' ) ); |
|
95 | - add_action( 'admin_init', array( self::$instance, 'register_settings' ) ); |
|
96 | - } |
|
97 | - |
|
98 | - do_action( 'wp_font_awesome_settings_loaded' ); |
|
99 | - } |
|
100 | - |
|
101 | - return self::$instance; |
|
102 | - } |
|
103 | - |
|
104 | - /** |
|
105 | - * Initiate the settings and add the required action hooks. |
|
106 | - * |
|
107 | - * @since 1.0.8 Settings name wrong - FIXED |
|
108 | - */ |
|
109 | - public function init() { |
|
110 | - $this->settings = $this->get_settings(); |
|
111 | - |
|
112 | - if ( $this->settings['type'] == 'CSS' ) { |
|
113 | - |
|
114 | - if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'frontend' ) { |
|
115 | - add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), 5000 );//echo '###';exit; |
|
116 | - } |
|
117 | - |
|
118 | - if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'backend' ) { |
|
119 | - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 5000 ); |
|
120 | - } |
|
121 | - |
|
122 | - } else { |
|
123 | - |
|
124 | - if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'frontend' ) { |
|
125 | - add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5000 );//echo '###';exit; |
|
126 | - } |
|
127 | - |
|
128 | - if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'backend' ) { |
|
129 | - add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5000 ); |
|
130 | - } |
|
131 | - } |
|
132 | - |
|
133 | - // remove font awesome if set to do so |
|
134 | - if ( $this->settings['dequeue'] == '1' ) { |
|
135 | - add_action( 'clean_url', array( $this, 'remove_font_awesome' ), 5000, 3 ); |
|
136 | - } |
|
137 | - |
|
138 | - } |
|
139 | - |
|
140 | - /** |
|
141 | - * Adds the Font Awesome styles. |
|
142 | - */ |
|
143 | - public function enqueue_style() { |
|
144 | - // build url |
|
145 | - $url = $this->get_url(); |
|
146 | - |
|
147 | - wp_deregister_style( 'font-awesome' ); // deregister in case its already there |
|
148 | - wp_register_style( 'font-awesome', $url, array(), null ); |
|
149 | - wp_enqueue_style( 'font-awesome' ); |
|
150 | - |
|
151 | - if ( $this->settings['shims'] ) { |
|
152 | - $url = $this->get_url( true ); |
|
153 | - wp_deregister_style( 'font-awesome-shims' ); // deregister in case its already there |
|
154 | - wp_register_style( 'font-awesome-shims', $url, array(), null ); |
|
155 | - wp_enqueue_style( 'font-awesome-shims' ); |
|
156 | - } |
|
157 | - } |
|
158 | - |
|
159 | - /** |
|
160 | - * Adds the Font Awesome JS. |
|
161 | - */ |
|
162 | - public function enqueue_scripts() { |
|
163 | - // build url |
|
164 | - $url = $this->get_url(); |
|
165 | - |
|
166 | - $deregister_function = 'wp'.'_'.'deregister'.'_'.'script'; |
|
167 | - call_user_func( $deregister_function, 'font-awesome' ); // deregister in case its already there |
|
168 | - wp_register_script( 'font-awesome', $url, array(), null ); |
|
169 | - wp_enqueue_script( 'font-awesome' ); |
|
170 | - |
|
171 | - if ( $this->settings['shims'] ) { |
|
172 | - $url = $this->get_url( true ); |
|
173 | - call_user_func( $deregister_function, 'font-awesome-shims' ); // deregister in case its already there |
|
174 | - wp_register_script( 'font-awesome-shims', $url, array(), null ); |
|
175 | - wp_enqueue_script( 'font-awesome-shims' ); |
|
176 | - } |
|
177 | - } |
|
178 | - |
|
179 | - /** |
|
180 | - * Get the url of the Font Awesome files. |
|
181 | - * |
|
182 | - * @param bool $shims If this is a shim file or not. |
|
183 | - * |
|
184 | - * @return string The url to the file. |
|
185 | - */ |
|
186 | - public function get_url( $shims = false ) { |
|
187 | - $script = $shims ? 'v4-shims' : 'all'; |
|
188 | - $type = $this->settings['type']; |
|
189 | - $version = $this->settings['version']; |
|
190 | - |
|
191 | - $url = "https://use.fontawesome.com/releases/"; // CDN |
|
192 | - $url .= ! empty( $version ) ? "v" . $version . '/' : "v" . $this->get_latest_version() . '/'; // version |
|
193 | - $url .= $type == 'CSS' ? 'css/' : 'js/'; // type |
|
194 | - $url .= $type == 'CSS' ? $script . '.css' : $script . '.js'; // type |
|
195 | - $url .= "?wpfas=true"; // set our var so our version is not removed |
|
196 | - |
|
197 | - return $url; |
|
198 | - } |
|
199 | - |
|
200 | - /** |
|
201 | - * Try and remove any other versions of Font Awesome added by other plugins/themes. |
|
202 | - * |
|
203 | - * Uses the clean_url filter to try and remove any other Font Awesome files added, it can also add pseudo-elements flag for the JS version. |
|
204 | - * |
|
205 | - * @param $url |
|
206 | - * @param $original_url |
|
207 | - * @param $_context |
|
208 | - * |
|
209 | - * @return string The filtered url. |
|
210 | - */ |
|
211 | - public function remove_font_awesome( $url, $original_url, $_context ) { |
|
212 | - |
|
213 | - if ( $_context == 'display' |
|
214 | - && ( strstr( $url, "fontawesome" ) !== false || strstr( $url, "font-awesome" ) !== false ) |
|
215 | - && ( strstr( $url, ".js" ) !== false || strstr( $url, ".css" ) !== false ) |
|
216 | - ) {// it's a font-awesome-url (probably) |
|
217 | - |
|
218 | - if ( strstr( $url, "wpfas=true" ) !== false ) { |
|
219 | - if ( $this->settings['type'] == 'JS' ) { |
|
220 | - if ( $this->settings['js-pseudo'] ) { |
|
221 | - $url .= "' data-search-pseudo-elements defer='defer"; |
|
222 | - } else { |
|
223 | - $url .= "' defer='defer"; |
|
224 | - } |
|
225 | - } |
|
226 | - } else { |
|
227 | - $url = ''; // removing the url removes the file |
|
228 | - } |
|
229 | - |
|
230 | - } |
|
231 | - |
|
232 | - return $url; |
|
233 | - } |
|
234 | - |
|
235 | - /** |
|
236 | - * Register the database settings with WordPress. |
|
237 | - */ |
|
238 | - public function register_settings() { |
|
239 | - register_setting( 'wp-font-awesome-settings', 'wp-font-awesome-settings' ); |
|
240 | - } |
|
241 | - |
|
242 | - /** |
|
243 | - * Add the WordPress settings menu item. |
|
244 | - * @since 1.0.10 Calling function name direct will fail theme check so we don't. |
|
245 | - */ |
|
246 | - public function menu_item() { |
|
247 | - $menu_function = 'add'.'_'.'options'.'_'.'page'; // won't pass theme check if function name present in theme |
|
248 | - call_user_func($menu_function, $this->name, $this->name, 'manage_options', 'wp-font-awesome-settings', array( |
|
249 | - $this, |
|
250 | - 'settings_page' |
|
251 | - ) ); |
|
252 | - } |
|
253 | - |
|
254 | - /** |
|
255 | - * Get the current Font Awesome output settings. |
|
256 | - * |
|
257 | - * @return array The array of settings. |
|
258 | - */ |
|
259 | - public function get_settings() { |
|
260 | - |
|
261 | - $db_settings = get_option( 'wp-font-awesome-settings' ); |
|
262 | - |
|
263 | - $defaults = array( |
|
264 | - 'type' => 'CSS', // type to use, CSS or JS |
|
265 | - 'version' => '', // latest |
|
266 | - 'enqueue' => '', // front and backend |
|
267 | - 'shims' => '1', // default on for now, @todo maybe change to off in 2020 |
|
268 | - 'js-pseudo' => '0', // if the pseudo elements flag should be set (CPU intensive) |
|
269 | - 'dequeue' => '0', // if we should try to remove other versions added by other plugins/themes |
|
270 | - ); |
|
271 | - |
|
272 | - $settings = wp_parse_args( $db_settings, $defaults ); |
|
273 | - |
|
274 | - /** |
|
275 | - * Filter the Font Awesome settings. |
|
276 | - * |
|
277 | - * @todo if we add this filer people might use it and then it defeates the purpose of this class :/ |
|
278 | - */ |
|
279 | - return $this->settings = apply_filters( 'wp-font-awesome-settings', $settings, $db_settings, $defaults ); |
|
280 | - } |
|
281 | - |
|
282 | - |
|
283 | - /** |
|
284 | - * The settings page html output. |
|
285 | - */ |
|
286 | - public function settings_page() { |
|
287 | - if ( ! current_user_can( 'manage_options' ) ) { |
|
288 | - wp_die( __( 'You do not have sufficient permissions to access this page.', 'font-awesome-settings' ) ); |
|
289 | - } |
|
290 | - |
|
291 | - // a hidden way to force the update of the verison number vai api instead of waiting the 48 hours |
|
292 | - if(isset($_REQUEST['force-version-check'])){ |
|
293 | - $this->get_latest_version($force_api = true); |
|
294 | - } |
|
295 | - ?> |
|
24 | + /** |
|
25 | + * A Class to be able to change settings for Font Awesome. |
|
26 | + * |
|
27 | + * Class WP_Font_Awesome_Settings |
|
28 | + * @since 1.0.10 Now able to pass wp.org theme check. |
|
29 | + * @ver 1.0.10 |
|
30 | + * @todo decide how to implement textdomain |
|
31 | + */ |
|
32 | + class WP_Font_Awesome_Settings { |
|
33 | + |
|
34 | + /** |
|
35 | + * Class version version. |
|
36 | + * |
|
37 | + * @var string |
|
38 | + */ |
|
39 | + public $version = '1.0.10'; |
|
40 | + |
|
41 | + /** |
|
42 | + * Class textdomain. |
|
43 | + * |
|
44 | + * @var string |
|
45 | + */ |
|
46 | + public $textdomain = 'font-awesome-settings'; |
|
47 | + |
|
48 | + /** |
|
49 | + * Latest version of Font Awesome at time of publish published. |
|
50 | + * |
|
51 | + * @var string |
|
52 | + */ |
|
53 | + public $latest = "5.6.1"; |
|
54 | + |
|
55 | + /** |
|
56 | + * The title. |
|
57 | + * |
|
58 | + * @var string |
|
59 | + */ |
|
60 | + public $name = 'Font Awesome'; |
|
61 | + |
|
62 | + /** |
|
63 | + * Holds the settings values. |
|
64 | + * |
|
65 | + * @var array |
|
66 | + */ |
|
67 | + private $settings; |
|
68 | + |
|
69 | + /** |
|
70 | + * WP_Font_Awesome_Settings instance. |
|
71 | + * |
|
72 | + * @access private |
|
73 | + * @since 1.0.0 |
|
74 | + * @var WP_Font_Awesome_Settings There can be only one! |
|
75 | + */ |
|
76 | + private static $instance = null; |
|
77 | + |
|
78 | + /** |
|
79 | + * Main WP_Font_Awesome_Settings Instance. |
|
80 | + * |
|
81 | + * Ensures only one instance of WP_Font_Awesome_Settings is loaded or can be loaded. |
|
82 | + * |
|
83 | + * @since 1.0.0 |
|
84 | + * @static |
|
85 | + * @return WP_Font_Awesome_Settings - Main instance. |
|
86 | + */ |
|
87 | + public static function instance() { |
|
88 | + if ( ! isset( self::$instance ) && ! ( self::$instance instanceof WP_Font_Awesome_Settings ) ) { |
|
89 | + self::$instance = new WP_Font_Awesome_Settings; |
|
90 | + |
|
91 | + add_action( 'init', array( self::$instance, 'init' ) ); // set settings |
|
92 | + |
|
93 | + if ( is_admin() ) { |
|
94 | + add_action( 'admin_menu', array( self::$instance, 'menu_item' ) ); |
|
95 | + add_action( 'admin_init', array( self::$instance, 'register_settings' ) ); |
|
96 | + } |
|
97 | + |
|
98 | + do_action( 'wp_font_awesome_settings_loaded' ); |
|
99 | + } |
|
100 | + |
|
101 | + return self::$instance; |
|
102 | + } |
|
103 | + |
|
104 | + /** |
|
105 | + * Initiate the settings and add the required action hooks. |
|
106 | + * |
|
107 | + * @since 1.0.8 Settings name wrong - FIXED |
|
108 | + */ |
|
109 | + public function init() { |
|
110 | + $this->settings = $this->get_settings(); |
|
111 | + |
|
112 | + if ( $this->settings['type'] == 'CSS' ) { |
|
113 | + |
|
114 | + if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'frontend' ) { |
|
115 | + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), 5000 );//echo '###';exit; |
|
116 | + } |
|
117 | + |
|
118 | + if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'backend' ) { |
|
119 | + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 5000 ); |
|
120 | + } |
|
121 | + |
|
122 | + } else { |
|
123 | + |
|
124 | + if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'frontend' ) { |
|
125 | + add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5000 );//echo '###';exit; |
|
126 | + } |
|
127 | + |
|
128 | + if ( $this->settings['enqueue'] == '' || $this->settings['enqueue'] == 'backend' ) { |
|
129 | + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5000 ); |
|
130 | + } |
|
131 | + } |
|
132 | + |
|
133 | + // remove font awesome if set to do so |
|
134 | + if ( $this->settings['dequeue'] == '1' ) { |
|
135 | + add_action( 'clean_url', array( $this, 'remove_font_awesome' ), 5000, 3 ); |
|
136 | + } |
|
137 | + |
|
138 | + } |
|
139 | + |
|
140 | + /** |
|
141 | + * Adds the Font Awesome styles. |
|
142 | + */ |
|
143 | + public function enqueue_style() { |
|
144 | + // build url |
|
145 | + $url = $this->get_url(); |
|
146 | + |
|
147 | + wp_deregister_style( 'font-awesome' ); // deregister in case its already there |
|
148 | + wp_register_style( 'font-awesome', $url, array(), null ); |
|
149 | + wp_enqueue_style( 'font-awesome' ); |
|
150 | + |
|
151 | + if ( $this->settings['shims'] ) { |
|
152 | + $url = $this->get_url( true ); |
|
153 | + wp_deregister_style( 'font-awesome-shims' ); // deregister in case its already there |
|
154 | + wp_register_style( 'font-awesome-shims', $url, array(), null ); |
|
155 | + wp_enqueue_style( 'font-awesome-shims' ); |
|
156 | + } |
|
157 | + } |
|
158 | + |
|
159 | + /** |
|
160 | + * Adds the Font Awesome JS. |
|
161 | + */ |
|
162 | + public function enqueue_scripts() { |
|
163 | + // build url |
|
164 | + $url = $this->get_url(); |
|
165 | + |
|
166 | + $deregister_function = 'wp'.'_'.'deregister'.'_'.'script'; |
|
167 | + call_user_func( $deregister_function, 'font-awesome' ); // deregister in case its already there |
|
168 | + wp_register_script( 'font-awesome', $url, array(), null ); |
|
169 | + wp_enqueue_script( 'font-awesome' ); |
|
170 | + |
|
171 | + if ( $this->settings['shims'] ) { |
|
172 | + $url = $this->get_url( true ); |
|
173 | + call_user_func( $deregister_function, 'font-awesome-shims' ); // deregister in case its already there |
|
174 | + wp_register_script( 'font-awesome-shims', $url, array(), null ); |
|
175 | + wp_enqueue_script( 'font-awesome-shims' ); |
|
176 | + } |
|
177 | + } |
|
178 | + |
|
179 | + /** |
|
180 | + * Get the url of the Font Awesome files. |
|
181 | + * |
|
182 | + * @param bool $shims If this is a shim file or not. |
|
183 | + * |
|
184 | + * @return string The url to the file. |
|
185 | + */ |
|
186 | + public function get_url( $shims = false ) { |
|
187 | + $script = $shims ? 'v4-shims' : 'all'; |
|
188 | + $type = $this->settings['type']; |
|
189 | + $version = $this->settings['version']; |
|
190 | + |
|
191 | + $url = "https://use.fontawesome.com/releases/"; // CDN |
|
192 | + $url .= ! empty( $version ) ? "v" . $version . '/' : "v" . $this->get_latest_version() . '/'; // version |
|
193 | + $url .= $type == 'CSS' ? 'css/' : 'js/'; // type |
|
194 | + $url .= $type == 'CSS' ? $script . '.css' : $script . '.js'; // type |
|
195 | + $url .= "?wpfas=true"; // set our var so our version is not removed |
|
196 | + |
|
197 | + return $url; |
|
198 | + } |
|
199 | + |
|
200 | + /** |
|
201 | + * Try and remove any other versions of Font Awesome added by other plugins/themes. |
|
202 | + * |
|
203 | + * Uses the clean_url filter to try and remove any other Font Awesome files added, it can also add pseudo-elements flag for the JS version. |
|
204 | + * |
|
205 | + * @param $url |
|
206 | + * @param $original_url |
|
207 | + * @param $_context |
|
208 | + * |
|
209 | + * @return string The filtered url. |
|
210 | + */ |
|
211 | + public function remove_font_awesome( $url, $original_url, $_context ) { |
|
212 | + |
|
213 | + if ( $_context == 'display' |
|
214 | + && ( strstr( $url, "fontawesome" ) !== false || strstr( $url, "font-awesome" ) !== false ) |
|
215 | + && ( strstr( $url, ".js" ) !== false || strstr( $url, ".css" ) !== false ) |
|
216 | + ) {// it's a font-awesome-url (probably) |
|
217 | + |
|
218 | + if ( strstr( $url, "wpfas=true" ) !== false ) { |
|
219 | + if ( $this->settings['type'] == 'JS' ) { |
|
220 | + if ( $this->settings['js-pseudo'] ) { |
|
221 | + $url .= "' data-search-pseudo-elements defer='defer"; |
|
222 | + } else { |
|
223 | + $url .= "' defer='defer"; |
|
224 | + } |
|
225 | + } |
|
226 | + } else { |
|
227 | + $url = ''; // removing the url removes the file |
|
228 | + } |
|
229 | + |
|
230 | + } |
|
231 | + |
|
232 | + return $url; |
|
233 | + } |
|
234 | + |
|
235 | + /** |
|
236 | + * Register the database settings with WordPress. |
|
237 | + */ |
|
238 | + public function register_settings() { |
|
239 | + register_setting( 'wp-font-awesome-settings', 'wp-font-awesome-settings' ); |
|
240 | + } |
|
241 | + |
|
242 | + /** |
|
243 | + * Add the WordPress settings menu item. |
|
244 | + * @since 1.0.10 Calling function name direct will fail theme check so we don't. |
|
245 | + */ |
|
246 | + public function menu_item() { |
|
247 | + $menu_function = 'add'.'_'.'options'.'_'.'page'; // won't pass theme check if function name present in theme |
|
248 | + call_user_func($menu_function, $this->name, $this->name, 'manage_options', 'wp-font-awesome-settings', array( |
|
249 | + $this, |
|
250 | + 'settings_page' |
|
251 | + ) ); |
|
252 | + } |
|
253 | + |
|
254 | + /** |
|
255 | + * Get the current Font Awesome output settings. |
|
256 | + * |
|
257 | + * @return array The array of settings. |
|
258 | + */ |
|
259 | + public function get_settings() { |
|
260 | + |
|
261 | + $db_settings = get_option( 'wp-font-awesome-settings' ); |
|
262 | + |
|
263 | + $defaults = array( |
|
264 | + 'type' => 'CSS', // type to use, CSS or JS |
|
265 | + 'version' => '', // latest |
|
266 | + 'enqueue' => '', // front and backend |
|
267 | + 'shims' => '1', // default on for now, @todo maybe change to off in 2020 |
|
268 | + 'js-pseudo' => '0', // if the pseudo elements flag should be set (CPU intensive) |
|
269 | + 'dequeue' => '0', // if we should try to remove other versions added by other plugins/themes |
|
270 | + ); |
|
271 | + |
|
272 | + $settings = wp_parse_args( $db_settings, $defaults ); |
|
273 | + |
|
274 | + /** |
|
275 | + * Filter the Font Awesome settings. |
|
276 | + * |
|
277 | + * @todo if we add this filer people might use it and then it defeates the purpose of this class :/ |
|
278 | + */ |
|
279 | + return $this->settings = apply_filters( 'wp-font-awesome-settings', $settings, $db_settings, $defaults ); |
|
280 | + } |
|
281 | + |
|
282 | + |
|
283 | + /** |
|
284 | + * The settings page html output. |
|
285 | + */ |
|
286 | + public function settings_page() { |
|
287 | + if ( ! current_user_can( 'manage_options' ) ) { |
|
288 | + wp_die( __( 'You do not have sufficient permissions to access this page.', 'font-awesome-settings' ) ); |
|
289 | + } |
|
290 | + |
|
291 | + // a hidden way to force the update of the verison number vai api instead of waiting the 48 hours |
|
292 | + if(isset($_REQUEST['force-version-check'])){ |
|
293 | + $this->get_latest_version($force_api = true); |
|
294 | + } |
|
295 | + ?> |
|
296 | 296 | <div class="wrap"> |
297 | 297 | <h1><?php echo $this->name; ?></h1> |
298 | 298 | <form method="post" action="options.php"> |
299 | 299 | <?php |
300 | - settings_fields( 'wp-font-awesome-settings' ); |
|
301 | - do_settings_sections( 'wp-font-awesome-settings' ); |
|
302 | - ?> |
|
300 | + settings_fields( 'wp-font-awesome-settings' ); |
|
301 | + do_settings_sections( 'wp-font-awesome-settings' ); |
|
302 | + ?> |
|
303 | 303 | <table class="form-table"> |
304 | 304 | <tr valign="top"> |
305 | 305 | <th scope="row"><label for="wpfas-type"><?php _e( 'Type', 'font-awesome-settings' ); ?></label></th> |
@@ -396,87 +396,87 @@ discard block |
||
396 | 396 | |
397 | 397 | </table> |
398 | 398 | <?php |
399 | - submit_button(); |
|
400 | - ?> |
|
399 | + submit_button(); |
|
400 | + ?> |
|
401 | 401 | </form> |
402 | 402 | |
403 | 403 | <div id="wpfas-version"><?php echo $this->version; ?></div> |
404 | 404 | </div> |
405 | 405 | |
406 | 406 | <?php |
407 | - } |
|
408 | - |
|
409 | - /** |
|
410 | - * Check a version number is valid and if so return it or else return an empty string. |
|
411 | - * |
|
412 | - * @param $version string The version number to check. |
|
413 | - * @since 1.0.6 |
|
414 | - * |
|
415 | - * @return string Either a valid version number or an empty string. |
|
416 | - */ |
|
417 | - public function validate_version_number( $version ) { |
|
418 | - |
|
419 | - if ( version_compare( $version, '0.0.1', '>=' ) >= 0 ) { |
|
420 | - // valid |
|
421 | - } else { |
|
422 | - $version = '';// not validated |
|
423 | - } |
|
424 | - |
|
425 | - return $version; |
|
426 | - } |
|
427 | - |
|
428 | - |
|
429 | - /** |
|
430 | - * Get the latest version of Font Awesome. |
|
431 | - * |
|
432 | - * We check for a cached bersion and if none we will check for a live version via API and then cache it for 48 hours. |
|
433 | - * |
|
434 | - * @since 1.0.7 |
|
435 | - * @return mixed|string The latest version number found. |
|
436 | - */ |
|
437 | - public function get_latest_version($force_api = false) { |
|
438 | - $latest_version = $this->latest; |
|
439 | - |
|
440 | - $cache = get_transient( 'wp-font-awesome-settings-version' ); |
|
441 | - |
|
442 | - if ( $cache === false || $force_api) { // its not set |
|
443 | - $api_ver = $this->get_latest_version_from_api(); |
|
444 | - if ( version_compare( $api_ver, $this->latest, '>=' ) >= 0 ) { |
|
445 | - $latest_version = $api_ver; |
|
446 | - set_transient( 'wp-font-awesome-settings-version', $api_ver, 48 * HOUR_IN_SECONDS ); |
|
447 | - } |
|
448 | - } elseif ( $this->validate_version_number( $cache ) ) { |
|
449 | - if ( version_compare( $cache, $this->latest, '>=' ) >= 0 ) { |
|
450 | - $latest_version = $cache; |
|
451 | - } |
|
452 | - } |
|
453 | - |
|
454 | - return $latest_version; |
|
455 | - } |
|
456 | - |
|
457 | - /** |
|
458 | - * Get the latest Font Awesome version from the github API. |
|
459 | - * |
|
460 | - * @since 1.0.7 |
|
461 | - * @return string The latest version number or `0` on API fail. |
|
462 | - */ |
|
463 | - public function get_latest_version_from_api() { |
|
464 | - $version = "0"; |
|
465 | - $response = wp_remote_get( "https://api.github.com/repos/FortAwesome/Font-Awesome/releases/latest" ); |
|
466 | - if ( ! is_wp_error( $response ) && is_array( $response ) ) { |
|
467 | - $api_response = json_decode( wp_remote_retrieve_body( $response ), true ); |
|
468 | - if ( isset( $api_response['tag_name'] ) && version_compare( $api_response['tag_name'], $this->latest, '>=' ) >= 0 && empty( $api_response['prerelease'] ) ) { |
|
469 | - $version = $api_response['tag_name']; |
|
470 | - } |
|
471 | - } |
|
472 | - |
|
473 | - return $version; |
|
474 | - } |
|
475 | - |
|
476 | - } |
|
477 | - |
|
478 | - /** |
|
479 | - * Run the class if found. |
|
480 | - */ |
|
481 | - WP_Font_Awesome_Settings::instance(); |
|
407 | + } |
|
408 | + |
|
409 | + /** |
|
410 | + * Check a version number is valid and if so return it or else return an empty string. |
|
411 | + * |
|
412 | + * @param $version string The version number to check. |
|
413 | + * @since 1.0.6 |
|
414 | + * |
|
415 | + * @return string Either a valid version number or an empty string. |
|
416 | + */ |
|
417 | + public function validate_version_number( $version ) { |
|
418 | + |
|
419 | + if ( version_compare( $version, '0.0.1', '>=' ) >= 0 ) { |
|
420 | + // valid |
|
421 | + } else { |
|
422 | + $version = '';// not validated |
|
423 | + } |
|
424 | + |
|
425 | + return $version; |
|
426 | + } |
|
427 | + |
|
428 | + |
|
429 | + /** |
|
430 | + * Get the latest version of Font Awesome. |
|
431 | + * |
|
432 | + * We check for a cached bersion and if none we will check for a live version via API and then cache it for 48 hours. |
|
433 | + * |
|
434 | + * @since 1.0.7 |
|
435 | + * @return mixed|string The latest version number found. |
|
436 | + */ |
|
437 | + public function get_latest_version($force_api = false) { |
|
438 | + $latest_version = $this->latest; |
|
439 | + |
|
440 | + $cache = get_transient( 'wp-font-awesome-settings-version' ); |
|
441 | + |
|
442 | + if ( $cache === false || $force_api) { // its not set |
|
443 | + $api_ver = $this->get_latest_version_from_api(); |
|
444 | + if ( version_compare( $api_ver, $this->latest, '>=' ) >= 0 ) { |
|
445 | + $latest_version = $api_ver; |
|
446 | + set_transient( 'wp-font-awesome-settings-version', $api_ver, 48 * HOUR_IN_SECONDS ); |
|
447 | + } |
|
448 | + } elseif ( $this->validate_version_number( $cache ) ) { |
|
449 | + if ( version_compare( $cache, $this->latest, '>=' ) >= 0 ) { |
|
450 | + $latest_version = $cache; |
|
451 | + } |
|
452 | + } |
|
453 | + |
|
454 | + return $latest_version; |
|
455 | + } |
|
456 | + |
|
457 | + /** |
|
458 | + * Get the latest Font Awesome version from the github API. |
|
459 | + * |
|
460 | + * @since 1.0.7 |
|
461 | + * @return string The latest version number or `0` on API fail. |
|
462 | + */ |
|
463 | + public function get_latest_version_from_api() { |
|
464 | + $version = "0"; |
|
465 | + $response = wp_remote_get( "https://api.github.com/repos/FortAwesome/Font-Awesome/releases/latest" ); |
|
466 | + if ( ! is_wp_error( $response ) && is_array( $response ) ) { |
|
467 | + $api_response = json_decode( wp_remote_retrieve_body( $response ), true ); |
|
468 | + if ( isset( $api_response['tag_name'] ) && version_compare( $api_response['tag_name'], $this->latest, '>=' ) >= 0 && empty( $api_response['prerelease'] ) ) { |
|
469 | + $version = $api_response['tag_name']; |
|
470 | + } |
|
471 | + } |
|
472 | + |
|
473 | + return $version; |
|
474 | + } |
|
475 | + |
|
476 | + } |
|
477 | + |
|
478 | + /** |
|
479 | + * Run the class if found. |
|
480 | + */ |
|
481 | + WP_Font_Awesome_Settings::instance(); |
|
482 | 482 | } |
483 | 483 | \ No newline at end of file |
@@ -799,7 +799,7 @@ |
||
799 | 799 | case 'trial_interval': |
800 | 800 | $value = absint( $value ); |
801 | 801 | break; |
802 | - case 'editable': |
|
802 | + case 'editable': |
|
803 | 803 | $value = (int) $value; |
804 | 804 | break; |
805 | 805 | } |