Current File : /home/giriqfky/swamivivekananda.co.in/wp-content/plugins/wpforms/src/Pro/Admin//Education.php
<?php
namespace WPForms\Pro\Admin;
/**
* WPForms admin pages changes and enhancements to educate Basic/Plus users on what is
* available in WPForms Pro.
*
* @since 1.5.6
*/
class Education {
/**
* License level slug.
*
* @since 1.5.6
*
* @var string
*/
public $license;
/**
* List of addons information.
*
* @since 1.6.3
*
* @var array
*/
private $addons;
/**
* WPForms admin page slug.
*
* @since 1.5.6
*
* @var string
*/
public $page;
/**
* Constructor.
*
* @since 1.5.6
*/
public function __construct() {
$this->hooks();
}
/**
* Hooks.
*
* @since 1.5.6
*/
public function hooks() {
// Only proceed for the forms overview or entries page.
if ( ! \wpforms_is_admin_page() && ! \wp_doing_ajax() ) {
return;
}
if ( ! \apply_filters( 'wpforms_pro_admin_education', true ) ) {
return;
}
// Load license level.
$this->license = \wpforms_get_license_type();
$this->addons = wpforms()->license ? (array) wpforms()->license->addons() : [];
// Admin page slug.
$this->page = str_replace( 'wpforms-', '', filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING ) );
\add_action( 'admin_enqueue_scripts', [ $this, 'enqueues' ] );
\add_action( 'admin_init', [ $this, 'dyk_init' ] );
\add_action( 'wpforms_entry_details_content', [ $this, 'geolocation' ], 20 );
\add_action( 'wp_ajax_hide_education', [ $this, 'hide_education' ] );
}
/**
* "Did You Know?" Admin Product Education init.
*
* @since 1.5.6
*/
public function dyk_init() {
// Only proceed for the forms overview or entries pages.
if ( ! in_array( $this->page, array( 'overview', 'entries' ), true ) ) {
return;
}
// Init only for `basic` & `plus` licenses.
if ( ! in_array( $this->license, array( 'basic', 'plus' ), true ) ) {
return;
}
\add_action( 'wpforms_admin_' . $this->page . '_after_rows', [ $this, 'dyk_display' ] );
\add_action( 'wp_ajax_wpforms_dyk_dismiss', [ $this, 'dyk_ajax_dismiss' ] );
}
/**
* "Did You Know?" messages.
*
* @since 1.5.6
*/
public function dyk_messages() {
return array(
array(
'desc' => esc_html__( 'You can capture email addresses from partial form entries to get more leads. Abandoned cart emails have an average open rate of 45%!', 'wpforms' ),
'more' => 'https://wpforms.com/addons/form-abandonment-addon/',
'item' => 1,
),
array(
'desc' => esc_html__( 'You can easily integrate your forms with 1,500+ useful apps by using WPForms + Zapier.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/zapier-addon/',
'item' => 2,
),
array(
'desc' => esc_html__( 'You can integrate your forms to automatically send entries to your most used apps. Perfect for users of Salesforce, Slack, Trello, and 1,500+ others.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/zapier-addon/',
'item' => 3,
),
array(
'desc' => esc_html__( 'You can make distraction-free and custom landing pages in WPForms! Perfect for getting more leads.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/form-pages-addon/',
'item' => 4,
),
array(
'desc' => esc_html__( 'You can build and customize your own professional-looking landing page. A great alternative to Google Forms!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-dedicated-form-landing-page-in-wordpress/',
'item' => 5,
),
array(
'desc' => esc_html__( 'You don’t have to build your forms from scratch. The Form Templates Pack addon gives you access to 150+ additional templates.', 'wpforms' ),
'more' => 'https://wpforms.com/demo/',
'item' => 6,
),
array(
'desc' => esc_html__( 'You can password-protect your forms. Perfect for collecting reviews or success stories from customers!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-password-protect-wordpress-forms-step-by-step/',
'item' => 7,
),
array(
'desc' => esc_html__( 'You can automatically close a form at a specific date and time. Great for applications!', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-install-and-use-the-form-locker-addon-in-wpforms/',
'item' => 8,
),
array(
'desc' => esc_html__( 'You can generate more fresh content for your website for free by accepting guest blog posts.', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-install-and-use-the-post-submissions-addon-in-wpforms/',
'item' => 9,
),
array(
'desc' => esc_html__( 'You can easily add a field to your forms that let users draw their signature then saves it as an image with their entry.', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-install-and-use-the-signature-addon-in-wpforms/',
'item' => 10,
),
array(
'desc' => esc_html__( 'You can set up your forms to let your site visitors pick which payment method they want to use.', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-allow-users-to-choose-a-payment-method-on-your-form/',
'item' => 11,
),
array(
'desc' => esc_html__( 'You can increase your revenue by accepting recurring payments on your forms.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-accept-recurring-payments-on-your-wordpress-forms/',
'item' => 12,
),
array(
'desc' => esc_html__( 'For added insight into your customers, you can collect your user\'s city, state, and country behind-the-scenes with Geolocation!', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-install-and-use-the-geolocation-addon-with-wpforms/',
'item' => 13,
),
array(
'desc' => esc_html__( 'You can let people automatically register as users on your WordPress site. Perfect for things like accepting guest blog posts!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-user-registration-form-in-wordpress/',
'item' => 14,
),
array(
'desc' => esc_html__( 'You can limit one form submission per person to avoid duplicate entries. Perfect for applications and giveaway!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-limit-the-number-of-wordpress-form-entries/',
'item' => 15,
),
array(
'desc' => esc_html__( 'You can use NPS Surveys to learn about your visitors. A tactic used by some of the biggest brands around!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-net-promoter-score-nps-survey-in-wordpress/',
'item' => 16,
),
array(
'desc' => esc_html__( 'If you\'re planning an event, you can create an RSVP form to stay organized and get higher response rates!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-an-rsvp-form-in-wordpress/',
'item' => 17,
),
array(
'desc' => esc_html__( 'With the Offline Forms addon, you can save data entered into your forms even if the user loses their internet connection.', 'wpforms' ),
'more' => 'https://wpforms.com/docs/how-to-install-and-set-up-the-offline-forms-addon/',
'item' => 18,
),
array(
'desc' => esc_html__( 'You can accept PayPal on your website — a great way to increase your revenue.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/paypal-standard-addon/',
'item' => 19,
),
array(
'desc' => esc_html__( 'You can easily take payments by credit card on your website using the Stripe addon.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/stripe-addon/',
'item' => 20,
),
array(
'desc' => esc_html__( 'You can make money selling digital downloads on your site by using Stripe or PayPal.', 'wpforms' ),
'more' => 'https://wpforms.com/the-simplest-way-to-sell-digital-products-on-your-wordpress-site/',
'item' => 21,
),
array(
'desc' => esc_html__( 'You can create a simple order form on your site to sell services or products online.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-simple-order-form-in-wordpress/',
'item' => 22,
),
array(
'desc' => esc_html__( 'You can create surveys or polls and see interactive visual reports of your user\'s answers.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/surveys-and-polls-addon/',
'item' => 23,
),
array(
'desc' => esc_html__( 'You can add a customer feedback form to your site. Try automatically emailing it out after a sale!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-add-a-customer-feedback-form-to-your-wordpress-site/',
'item' => 24,
),
array(
'desc' => esc_html__( 'You can add a Likert rating scale to your WordPress forms. Great for measuring your customer’s experience with your business!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-add-a-likert-scale-to-your-wordpress-forms-step-by-step/',
'item' => 25,
),
array(
'desc' => esc_html__( 'You can easily add a poll to your site! Helpful for making business decisions based on your audience\'s needs.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-poll-form-in-wordpress-step-by-step/',
'item' => 26,
),
array(
'desc' => esc_html__( 'You can create a customer cancellation survey to find out what you can do to improve.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-customer-cancellation-survey-in-wordpress/',
'item' => 27,
),
array(
'desc' => esc_html__( 'WPForms is a great alternative to SurveyMonkey! You can create your first survey or poll today.', 'wpforms' ),
'more' => 'https://wpforms.com/surveymonkey-alternative-wpforms-vs-surveymonkey-compared-pros-and-cons/',
'item' => 28,
),
array(
'desc' => esc_html__( 'You can make your forms interactive and easier to complete. A great way to get more leads!', 'wpforms' ),
'more' => 'https://wpforms.com/addons/conversational-forms-addon/',
'item' => 29,
),
array(
'desc' => esc_html__( 'You can easily display survey results graphically. Great for presentations!', 'wpforms' ),
'more' => 'https://wpforms.com/display-survey-results/',
'item' => 30,
),
array(
'desc' => esc_html__( 'You can make your forms feel like a one-on-one conversation and boost conversion rates.', 'wpforms' ),
'more' => 'https://wpforms.com/addons/conversational-forms-addon/',
'item' => 31,
),
array(
'desc' => esc_html__( 'You can put a pre-built job application form on your website. Perfect if you’re looking for new employees!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-job-application-form-in-wordpress/',
'item' => 32,
),
array(
'desc' => esc_html__( 'You can automatically send form entries to your Google Calendar. Perfect for appointments!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-send-wpforms-entries-to-google-calendar/',
'item' => 33,
),
array(
'desc' => esc_html__( 'You can automatically send uploaded files from your form entries to Dropbox for safekeeping and organization!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-simple-dropbox-upload-form-in-wordpress/',
'item' => 34,
),
array(
'desc' => esc_html__( 'When a user submits an uploaded file to your form, it can upload automatically to your Google Drive for better organization!', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-create-a-wordpress-google-drive-upload-form/',
'item' => 35,
),
array(
'desc' => esc_html__( 'You can get notified via text when someone completes your form! Great for closing deals faster.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-get-an-sms-text-message-from-your-wordpress-form/',
'item' => 36,
),
array(
'desc' => esc_html__( 'Save time on invoicing! You can automatically add customers to Quickbooks after they complete a form.', 'wpforms' ),
'more' => 'https://wpforms.com/how-to-automatically-add-a-quickbooks-customer-from-your-wordpress-forms-2/',
'item' => 37,
),
array(
'desc' => esc_html__( 'You can let users upload videos to your YouTube channel. Perfect for collecting testimonials!', 'wpforms' ),
'more' => 'https://wpforms.com/allow-users-to-upload-videos-to-youtube-from-wordpress/',
'item' => 38,
),
array(
'desc' => esc_html__( 'You can automatically save submitted form info in a free Google Sheets spreadsheet. Great for keeping track of your entries!', 'wpforms' ),
'more' => 'https://wpforms.com/save-contacts-from-wordpress-form-to-google-sheet/',
'item' => 39,
),
);
}
/**
* "Did You Know?" random message.
*
* @since 1.5.6
*/
public function dyk_message_rnd() {
$messages = $this->dyk_messages();
return $messages[ array_rand( $messages ) ];
}
/**
* "Did You Know?" display message.
*
* @since 1.5.6
*
* @param \WP_List_Table $wp_list_table Instance of WP_List_Table.
*/
public function dyk_display( $wp_list_table ) {
$dyk_message = $this->dyk_message_rnd();
$column_info = $wp_list_table->get_column_info();
$current_user = \wp_get_current_user();
$dismissed = \get_user_meta( $current_user->ID, 'wpforms_dismissed', true );
$learn_more = '';
// Check if not dismissed.
if ( ! empty( $dismissed[ 'dyk-' . $this->page ] ) ) {
return;
}
// Check if next page exists.
if ( $wp_list_table->get_pagination_arg( 'total_pages' ) <= $wp_list_table->get_pagenum() ) {
return;
}
$translations = array(
'upgrade_to_pro' => __( 'Upgrade to Pro', 'wpforms' ),
'dismiss_title' => __( 'Dismiss this message.', 'wpforms' ),
'did_you_know' => __( 'Did You Know?', 'wpforms' ),
'learn_more' => __( 'Learn More', 'wpforms' ),
);
if ( ! empty( $dyk_message['more'] ) ) {
$dyk_message['more'] = \add_query_arg(
array(
'utm_source' => 'WordPress',
'utm_medium' => 'DYK ' . ucfirst( $this->page ),
'utm_campaign' => 'plugin',
'utm_content' => $dyk_message['item'],
),
$dyk_message['more']
);
$learn_more = '<a href="' . \esc_url( $dyk_message['more'] ) . '" target="_blank" rel="noopener noreferrer" class="learn-more">' . \esc_html( $translations['learn_more'] ) . '</a>';
}
printf(
'<tr class="wpforms-dyk">
<td colspan="%d">
<div class="wpforms-dyk-fbox">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512" class="wpforms-dyk-bulb" title="%s"><path d="M176 0C73.05 0-.12 83.54 0 176.24c.06 44.28 16.5 84.67 43.56 115.54C69.21 321.03 93.85 368.68 96 384l.06 75.18c0 3.15.94 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84L256 384c2.26-15.72 26.99-63.19 52.44-92.22C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0zm47.94 454.31L206.85 480h-61.71l-17.09-25.69-.01-6.31h95.9v6.31zm.04-38.31h-95.97l-.07-32h96.08l-.04 32zm60.4-145.32c-13.99 15.96-36.33 48.1-50.58 81.31H118.21c-14.26-33.22-36.59-65.35-50.58-81.31C44.5 244.3 32.13 210.85 32.05 176 31.87 99.01 92.43 32 176 32c79.4 0 144 64.6 144 144 0 34.85-12.65 68.48-35.62 94.68zM176 64c-61.75 0-112 50.25-112 112 0 8.84 7.16 16 16 16s16-7.16 16-16c0-44.11 35.88-80 80-80 8.84 0 16-7.16 16-16s-7.16-16-16-16z"/></svg>
<div class="wpforms-dyk-message"><b>%s</b><br>%s</div>
<div class="wpforms-dyk-buttons">
%s
<a href="https://wpforms.com/pricing/?utm_source=WordPress&utm_medium=DYK%%20%s&utm_campaign=plugin&utm_content=%d" target="_blank" rel="noopener noreferrer" class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey">%s</a>
<button type="button" class="dismiss" title="%s" data-page="%s"/>
</div>
</div>
</td>
</tr>',
count( $column_info[0] ),
\esc_attr( $translations['did_you_know'] ),
\esc_html( $translations['did_you_know'] ),
\esc_html( $dyk_message['desc'] ),
$learn_more, // phpcs:ignore
esc_attr( ucfirst( $this->page ) ),
(int) $dyk_message['item'],
\esc_html( $translations['upgrade_to_pro'] ),
\esc_attr( $translations['dismiss_title'] ),
\esc_attr( $this->page )
);
}
/**
* Ajax handler for dissmissing DYK notices.
*
* @since 1.5.6
*/
public function dyk_ajax_dismiss() {
// Run a security check.
\check_ajax_referer( 'wpforms-admin', 'nonce' );
// Check for permissions.
if ( ! \wpforms_current_user_can() ) {
\wp_send_json_error(
array(
'error' => \esc_html__( 'You do not have permission to perform this action.', 'wpforms' ),
)
);
}
$current_user = \wp_get_current_user();
$dismissed = \get_user_meta( $current_user->ID, 'wpforms_dismissed', true );
if ( empty( $dismissed ) ) {
$dismissed = array();
}
$dismissed[ 'dyk-' . $this->page ] = time();
\update_user_meta( $current_user->ID, 'wpforms_dismissed', $dismissed );
\wp_send_json_success();
}
/**
* Load enqueues.
*
* @since 1.5.6
*/
public function enqueues() {
$min = \wpforms_get_min_suffix();
\wp_enqueue_script(
'wpforms-admin-education',
\WPFORMS_PLUGIN_URL . "pro/assets/js/admin/education{$min}.js",
array( 'jquery' ),
\WPFORMS_VERSION,
false
);
}
/**
* Geolocation preview
*
* @since 1.6.3
*/
public function geolocation() {
$plugin_slug = 'wpforms-geolocation';
$plugin_file = sprintf( '%s/%s.php', $plugin_slug, $plugin_slug );
$dismissed = get_user_meta( get_current_user_id(), 'wpforms_dismissed', true );
if ( is_plugin_active( $plugin_file ) ) {
return;
}
if ( ! empty( $dismissed['geolocation-education-metabox'] ) ) {
return;
}
$plugins = get_plugins();
echo wpforms_render( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'education/geolocation',
[
'nonce_activate' => wp_create_nonce( 'wpforms-education-activate' ),
'nonce_hide' => wp_create_nonce( 'wpforms-education-hide' ),
'install' => ! empty( $plugins[ $plugin_file ] ),
'plugin_file' => $plugin_file,
'plugin_url' => $this->get_addon_download_url( $plugin_slug ),
'plugin_allow' => in_array( $this->license, [ 'pro', 'agency', 'ultimate', 'elite' ], true ),
],
true
);
}
/**
* Return a download URL for an addon.
*
* @since 1.6.3
*
* @param string $slug Addon slug.
*
* @return string
*/
public function get_addon_download_url( $slug ) {
if ( empty( $this->addons ) ) {
return '';
}
foreach ( $this->addons as $addon_data ) {
if (
$addon_data->slug === $slug &&
! empty( $addon_data->url )
) {
return $addon_data->url;
}
}
return '';
}
/**
* Hide offer activation/purchase addon.
*
* @since 1.6.3
*/
public function hide_education() {
check_ajax_referer( 'wpforms-education-hide', 'nonce' );
$plugin = filter_input( INPUT_POST, 'plugin', FILTER_SANITIZE_STRING );
if ( empty( $plugin ) ) {
wp_send_json( 0 );
}
$current_user_id = get_current_user_id();
$dismissed = get_user_meta( $current_user_id, 'wpforms_dismissed', true );
$dismissed = is_array( $dismissed ) ? $dismissed : [];
$dismissed['geolocation-education-metabox'] = time();
wp_send_json(
update_user_meta( $current_user_id, 'wpforms_dismissed', $dismissed )
);
}
}