/**
  * Register a custom submit action
  *
  * @param string $action the POST action
  * @param mixed $callback the callback to use for this action
  * @since rev 144
  */
 public function register_custom_submit_action($action, $callback = null)
 {
     if (!is_null($callback)) {
         if (!is_callable($callback)) {
             throw new InvalidArgumentException(sprintf('callback used for action "%s" must be null or callable', $action));
         }
         $this->bridge->add_filter('bwp_option_page_custom_action_' . $action, $callback, 10, 2);
     }
     $this->form_actions[] = $action;
 }
 public function init_admin_menu()
 {
     $this->_menu_under_settings = $this->bridge->apply_filters('bwp_menus_under_settings', false);
     $this->bridge->add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
     if ($this->is_admin_page()) {
         // build tabs
         $this->build_tabs();
         $asset_url = $this->plugin_wp_url . 'vendor/kminh/bwp-framework/assets/option-page';
         // enqueue style sheets and scripts for the option page
         $this->enqueue_media_file('bwp-option-page', $asset_url . '/css/style.css', self::is_multisite() || class_exists('JCP_UseGoogleLibraries') ? array('wp-admin') : array(), $this->revision, $asset_url . '/dist/css/op.min.css');
         $this->enqueue_media_file('bwp-paypal-js', $asset_url . '/js/paypal.js', array('jquery'), $this->revision, $asset_url . '/js/paypal.js');
     }
     $this->build_menus();
 }