addTabs();
add_action( 'admin_init', array( $this, 'load_scripts' ) );
}
/**
* Add options page
*/
public function admin_menu() {
// This page will be under "Settings".
add_options_page(
'Settings Admin',
'Notification e-mails',
'manage_options',
self::MENU_SLUG,
array( $this, 'print_admin_page' )
);
$this->addTabs();
add_action( 'admin_init', array( $this, 'load_scripts' ) );
}
public function custom_notices() {
if ( self::is_famne_network_settings_page() && isset( $_GET['updated'] ) ) {
echo '
' . esc_html__( 'Settings updated.', 'manage-notification-emails' ) . '
';
}
}
/**
* Add Tabs
*
* @return void
*/
private function addTabs() {
if ( self::is_famne_network_settings_page() ) :
$this->tabs[5] = array(
'title' => __( 'Network options', 'manage-notification-emails' ),
'slug' => 'network',
'view_file' => 'network.php',
'icon' => 'dashicons-admin-multisite',
);
endif;
if ( ! self::is_famne_network_settings_page() || FAMNE::get_option( 'famne_network_managed' ) ) :
$this->tabs[10] = array(
'title' => __( 'Core options', 'manage-notification-emails' ),
'slug' => 'settings',
'view_file' => 'settings.php',
'icon' => 'dashicons-admin-settings',
);
$this->tabs[30] = array(
'title' => __( 'Modules', 'manage-notification-emails' ),
'slug' => 'modules',
'view_file' => 'modules.php',
'icon' => 'dashicons-admin-plugins',
);
$this->tabs[90] = array(
'title' => __( 'Information', 'manage-notification-emails' ),
'slug' => 'extra',
'view_file' => 'extra.php',
'icon' => 'dashicons-editor-help',
);
endif;
}
/**
* Register and add settings
*/
public function page_init() {
register_setting(
'famne_option_group', // Option group.
'famne_options', // Option name.
array( $this, 'sanitize' ) // Sanitize.
);
add_settings_section(
'setting_section_id', // ID.
'', // Title.
array( $this, 'print_section_info' ), // Callback.
self::MENU_SLUG // Page.
);
if ( isset( $_GET['famne_reset'] ) && is_string( $_GET['famne_reset'] ) && '1' === $_GET['famne_reset'] ) {
$this->reset_settings();
}
}
/**
* Check if is_famne_settings_page
*
* @return boolean
*/
public static function is_famne_settings_page() {
global $pagenow;
$getpage = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
$is_admin_page = 'options-general.php' === $pagenow && self::MENU_SLUG === $getpage;
return $is_admin_page;
}
/**
* Check if is_famne_network_settings_page
*
* @return boolean
*/
public static function is_famne_network_settings_page() {
global $pagenow;
$getpage = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
$is_network_admin_page = 'settings.php' === $pagenow && self::MENU_NETWORK_SLUG === $getpage;
return $is_network_admin_page;
}
/**
* Load_scripts
*
* @return void
*/
public function load_scripts() {
if ( ! self::is_famne_settings_page() && ! self::is_famne_network_settings_page() ) {
return;
}
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
}
/**
* Sanitize each setting field as needed
*
* @param array $input Contains all settings fields as array keys.
*/
public function sanitize( $input ) {
if ( empty( $input ) ) {
$input = array();
}
$new_input = array();
foreach ( $input as $key => $val ) {
$new_input[ $key ] = '1' === strval( $val ) ? '1' : '';
}
foreach ( FAMNE::getModules() as $mod ) :
if ( ! empty( $mod->option_id ) && is_array( $mod->option_id ) ) :
foreach ( $mod->option_id as $m ) :
if ( isset( $input[ $m ] ) ) {
$new_input[ $m ] = $input[ $m ];
}
endforeach;
endif;
endforeach;
$new_input = apply_filters( 'famne_sanitize_settings_page', $new_input );
return $new_input;
}
public function save_networksettings() {
if ( ! current_user_can( 'manage_network_options' ) ) {
check_admin_referer( 'fake_info_action', 'fake_info' );
exit;
}
if ( ! empty( $_POST ) && check_admin_referer( 'famnenetwork_save', 'famnenetwork' ) ) {
$network_activated = FAMNE::get_option( 'famne_network_managed' );
$network_managed = ! empty( $_POST['famne_options'] ) && '1' === $_POST['famne_options']['network_managed'] ? '1' : null;
FAMNE::update_option( 'famne_network_managed', $network_managed );
if ( $network_managed ) :
$options = $_POST['famne_options'];
if ( empty( $network_activated ) ) :
$options = FAMNE::default_options();
endif;
$options = $this->sanitize( $options );
/* Since 1.8.1 */
if ( ! empty( $options['wp_new_user_notification_to_admin'] ) ) {
update_site_option( 'registrationnotification', 'yes' );
} else {
update_site_option( 'registrationnotification', 'no' );
}
FAMNE::update_option( 'famne_options', $options );
endif;
wp_safe_redirect(
add_query_arg(
array(
'page' => self::MENU_NETWORK_SLUG,
'updated' => true,
),
network_admin_url( 'settings.php' )
)
);
exit;
}
}
private function reset_settings() {
if ( ! isset( $_GET['famne_reset'] ) || ! is_string( $_GET['famne_reset'] ) || '1' !== $_GET['famne_reset'] || ! isset( $_GET['nonce'] ) ) :
return;
endif;
if ( ! wp_verify_nonce( $_GET['nonce'], 'famne_reset' ) ) :
wp_nonce_ays( '' );
die();
endif;
if ( self::is_famne_settings_page() ) :
delete_option( 'fa_mne_version' );
delete_option( 'famne_options' );
FAMNE::install();
echo "";
elseif ( self::is_famne_network_settings_page() ) :
delete_site_option( 'fa_mne_version' );
delete_site_option( 'famne_options' );
FAMNE::install();
echo "";
endif;
exit;
}
/**
* Print admin_page
*
* @return void
*/
public function print_admin_page() {
global $famne_options;
global $pagenow;
$famne_options = FAMNE::get_option( 'famne_options' );
foreach ( $this->tabs as $key => $tab ) :
self::register_section( $tab, $key );
endforeach;
do_action( 'famne_register_settings_section' );
if ( self::is_famne_network_settings_page() ) :
include_once dirname( __FILE__ ) . '/views/container-network.php';
else :
include_once dirname( __FILE__ ) . '/views/container.php';
endif;
}
/**
* Register section
*
* @param mixed $section
* @param mixed $ord
* @return void
*/
public static function register_section( $section, $ord = 99 ) {
self::$sections[ $ord ] = $section;
}
/**
* Print registered sections
*
* @param mixed $output
* @return void
*/
public static function print_sections( $output = true ) {
require_once dirname( __FILE__ ) . '/formfields.php';
ksort( self::$sections );
foreach ( self::$sections as &$section ) {
$icon = ! empty( $section['icon'] ) ? 'data-icon="' . esc_attr( $section['icon'] ) . '"' : '';
echo PHP_EOL;
echo '';
if ( ! empty( $section['view_file'] ) ) :
$view_file = FA_MNE_PLUGIN_DIR . '/modules/settings-page/views/' . basename( $section['view_file'] );
if ( file_exists( $view_file ) ) {
include_once $view_file;
}
endif;
if ( ! empty( $section['html'] ) ) {
echo esc_html( $section['html'] );
}
echo '
';
echo PHP_EOL;
}
}
/**
* Enqueue scripts
*
* @param mixed $hook
* @return void
*/
public function enqueue_scripts( $hook ) {
wp_enqueue_style(
'famne-settings-page',
plugins_url( '/modules/settings-page/assets/main.min.css', FA_MNE_PLUGIN_BASENAME ),
null,
time()
);
wp_enqueue_script(
'famne-settings-page',
plugins_url( '/modules/settings-page/assets/main.min.js', FA_MNE_PLUGIN_BASENAME ),
array( 'jquery' ),
time(),
true
);
}
/**
* Add_ plugin settings link
*
* @param mixed $links
* @return string
*/
public function add_action_links( $links ) {
$mylinks = array(
'' . __( 'Settings' ) . '',
);
return array_merge( $links, $mylinks );
}
/**
* Translations.
*
* @since 1.4.2
*/
public function famne_load_textdomain() {
load_plugin_textdomain( FA_MNE_SLUG, false, basename( FA_MNE_PLUGIN_DIR ) . '/languages' );
}
}
endif;