/**
  * Returns and/or create the single instance of this class.  
  *
  * @return  Charitable_Settings
  * @access  public
  * @since   1.2.0
  */
 public static function get_instance()
 {
     if (is_null(self::$instance)) {
         self::$instance = new Charitable_Settings();
     }
     return self::$instance;
 }
/**
 * Returns the Charitable_Settings helper.
 *
 * @return 	Charitable_Settings
 * @since 	1.0.0
 */
function charitable_get_admin_settings()
{
    return Charitable_Settings::get_instance();
}
 /**
  * Include admin-only files.
  * 
  * @return  void
  * @access  private
  * @since   1.0.0
  */
 private function load_dependencies()
 {
     $admin_dir = charitable()->get_path('admin');
     require_once $admin_dir . 'charitable-core-admin-functions.php';
     require_once $admin_dir . 'class-charitable-meta-box-helper.php';
     require_once $admin_dir . 'class-charitable-admin-pages.php';
     /* Campaigns */
     require_once $admin_dir . 'campaigns/class-charitable-campaign-post-type.php';
     /* Donations */
     require_once $admin_dir . 'donations/class-charitable-donation-post-type.php';
     /* Settings */
     require_once $admin_dir . 'settings/class-charitable-settings.php';
     require_once $admin_dir . 'settings/class-charitable-general-settings.php';
     require_once $admin_dir . 'settings/class-charitable-email-settings.php';
     require_once $admin_dir . 'settings/class-charitable-gateway-settings.php';
     require_once $admin_dir . 'settings/class-charitable-licenses-settings.php';
     require_once $admin_dir . 'settings/class-charitable-advanced-settings.php';
     require_once $admin_dir . 'settings/charitable-settings-admin-hooks.php';
     /* Dashboard widgets */
     require_once $admin_dir . 'dashboard-widgets/class-charitable-donations-dashboard-widget.php';
     require_once $admin_dir . 'dashboard-widgets/charitable-dashboard-widgets-hooks.php';
     /* Upgrades */
     require_once $admin_dir . 'upgrades/class-charitable-upgrade.php';
     require_once $admin_dir . 'upgrades/class-charitable-upgrade-page.php';
     require_once $admin_dir . 'upgrades/charitable-upgrade-hooks.php';
     /**
      * We are registering this object only for backwards compatibility. It
      * will be removed in or after Charitable 1.3.
      *
      * @deprecated
      */
     charitable()->register_object(Charitable_Settings::get_instance());
     charitable()->register_object(Charitable_Campaign_Post_Type::get_instance());
     charitable()->register_object(Charitable_Donation_Post_Type::get_instance());
     charitable()->register_object(Charitable_Admin_Pages::get_instance());
 }
 *
 * @see     Charitable_Settings::add_notices()
 */
add_action('charitable_before_admin_settings', array(Charitable_Settings::get_instance(), 'add_notices'));
/**
 * Maybe add "Extensions" settings tab.
 *
 * @see     Charitable_Settings::maybe_add_extensions_tab()
 */
add_action('charitable_settings_tabs', array(Charitable_Settings::get_instance(), 'maybe_add_extensions_tab'));
/**
 * Sanitize checkbox values when settings are submitted.
 *
 * @see     Charitable_Settings::sanitize_checkbox_value()
 */
add_filter('charitable_sanitize_value', array(Charitable_Settings::get_instance(), 'sanitize_checkbox_value'), 10, 2);
/**
 * Save the license when saving settings.
 *
 * @see     Charitable_Licenses_Settings::save_license()
 */
add_filter('charitable_save_settings', array(Charitable_Licenses_Settings::get_instance(), 'save_license'), 10, 2);
/**
 * Add dynamic settings groups.
 *
 * @see     Charitable_Gateway_Settings::add_gateway_settings_dynamic_groups()
 * @see     Charitable_Email_Settings::add_email_settings_dynamic_groups()
 * @see     Charitable_Email_Settings::add_licenses_group()
 */
add_filter('charitable_dynamic_groups', array(Charitable_Gateway_Settings::get_instance(), 'add_gateway_settings_dynamic_groups'));
add_filter('charitable_dynamic_groups', array(Charitable_Email_Settings::get_instance(), 'add_email_settings_dynamic_groups'));
 /**
  * Disable an email.
  *
  * @return  void
  * @access  protected
  * @since   1.0.0
  */
 protected function disable_email($email)
 {
     $settings = get_option('charitable_settings');
     if (!isset($settings['enabled_emails'][$email])) {
         return;
     }
     unset($settings['enabled_emails'][$email]);
     update_option('charitable_settings', $settings);
     Charitable_Settings::get_instance()->add_update_message(__('Email disabled', 'charitable'), 'success');
     do_action('charitable_email_disable', $email);
 }
 /**
  * Disable a payment gateway.
  *
  * @param 	string 	$gateway
  * @return  void
  * @access  protected
  * @since   1.0.0
  */
 protected function disable_gateway($gateway)
 {
     $settings = get_option('charitable_settings');
     if (!isset($settings['active_gateways'][$gateway])) {
         return;
     }
     unset($settings['active_gateways'][$gateway]);
     /* Set a new default gateway */
     if ($gateway == $this->get_default_gateway()) {
         $settings['default_gateway'] = count($settings['active_gateways']) ? key($settings['active_gateways']) : '';
     }
     update_option('charitable_settings', $settings);
     Charitable_Settings::get_instance()->add_update_message(__('Gateway disabled', 'charitable'), 'success');
     do_action('charitable_gateway_disable', $gateway);
 }