Settings
Manages the admin settings UI in relation to ticket configuration.
Source
File: src/Tribe/Admin/Settings.php
class Settings {
/**
* Event Tickets menu page slug.
*
* @var string
*/
public static $parent_slug = 'tec-tickets';
/**
* Event Tickets settings page slug.
*
* @var string
*/
public static $settings_page_id = 'tec-tickets-settings';
/**
* Settings tabs.
*/
public $tabs = [];
/**
* Returns the main admin tickets settings URL.
*
* @param array $args Arguments to pass to the URL.
*
* @return string
*/
public function get_url( array $args = [] ) {
$defaults = [
'page' => static::$settings_page_id,
];
// Allow the link to be "changed" on the fly.
$args = wp_parse_args( $args, $defaults );
$wp_url = is_network_admin() ? network_admin_url( 'settings.php' ) : admin_url( 'admin.php' );
// Keep the resulting URL args clean.
$url = add_query_arg( $args, $wp_url );
/**
* Filters the URL to the Event Tickets settings page.
*
* @since 5.4.0
*
* @param string $url The URL to the Event Tickets settings page.
*/
return apply_filters( 'tec_tickets_settings_url', $url );
}
/**
* Adds the Event Tickets settings page to the pages configuration.
*
* @since 5.4.0
*
* @param array $pages An array containing the slug of the pages with tabs.
*
* @return array $pages The modified array containing the pages with tabs.
*/
public function add_to_pages_with_tabs( $pages ) {
$pages[] = static::$settings_page_id;
return $pages;
}
/**
* Filter the Event Tickets Settings page title.
*
* @since 5.4.0
*
* @param string $title The title of the settings page.
*
* @return string The modified title of the settings page..
*/
public function settings_page_title( $title ) {
if ( ! $this->is_tec_tickets_settings() ) {
return $title;
}
return sprintf(
// Translators: %s is the `Tickets` in plural.
__( '%s Settings', 'event-tickets' ),
tribe_get_ticket_label_plural( 'tec_tickets_settings_title' )
);
}
/**
* Defines wether the current page is the Event Tickets Settings page.
*
* @since 5.4.0
*
* @return boolean
*/
public function is_tec_tickets_settings() {
$admin_pages = tribe( 'admin.pages' );
$admin_page = $admin_pages->get_current_page();
return ! empty( $admin_page ) && static::$settings_page_id === $admin_page;
}
/**
* Get the icon for the Event Tickets settings page.
*
* @since 5.4.0
*
* @return string
*/
public function get_menu_icon() {
$icon = 'data:image/svg+xml;base64,' . base64_encode( '<svg xmlns="http://www.w3.org/2000/svg" fill="#9ba2a6" viewBox="0 0 15.46 11.9"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path d="M15.33,7.47,13.84,6.09a.4.4,0,0,0-.55.08,1.17,1.17,0,0,1-.94.47,1.22,1.22,0,0,1-.84-2.07l0,0a.38.38,0,0,0,.12-.29A.4.4,0,0,0,11.55,4l-1.5-1.38a.37.37,0,0,0-.3-.07.36.36,0,0,0-.26.17A9.27,9.27,0,0,1,7.37,4.76l-.09.07c-2,1.52-3.76,2.11-5.39,1.87C1.4,6.63.75,6.38.79,5.09V5A7.19,7.19,0,0,1,2.67,1l1,1A1.72,1.72,0,0,0,5.19,4.45h.06a1.65,1.65,0,0,0,.88-.29l.16.16a.38.38,0,0,0,.55,0,.4.4,0,0,0,0-.56l-.41-.4a.43.43,0,0,0-.29-.1.4.4,0,0,0-.27.12.88.88,0,0,1-.68.3.92.92,0,0,1-.91-.92.9.9,0,0,1,.25-.62.41.41,0,0,0,0-.56L2.91.1l0,0a.39.39,0,0,0-.52.05A8.08,8.08,0,0,0,0,5.07,2.12,2.12,0,0,0,1,7.23l.26.23A52.11,52.11,0,0,0,5.54,11l.07,0a4.94,4.94,0,0,0,2.89.87c.27,0,.55,0,.84,0A10.43,10.43,0,0,0,15.39,8,.39.39,0,0,0,15.33,7.47Zm-6.06,3.6A4.39,4.39,0,0,1,6,10.33l-.11-.08C5.21,9.79,4.1,8.89,2.58,7.56l0,0h0A7.54,7.54,0,0,0,6.53,6.28l4.31,4.3A5.31,5.31,0,0,1,9.27,11.07Z"/></g></g></svg>' );
/**
* Filter the menu icon for Events Tickets in the WordPress admin.
*
* @since TDB
*
* @param string $icon The menu icon for Event Tickets in the WordPress admin.
*/
return apply_filters( 'tec_tickets_menu_icon', $icon );
}
/**
* Adds the Event Tickets menu and pages.
*
* @since 5.4.0
*/
public function add_admin_pages() {
$admin_pages = tribe( 'admin.pages' );
$admin_pages->register_page(
[
'id' => static::$parent_slug,
'path' => static::$parent_slug,
'title' => esc_html__( 'Tickets', 'event-tickets' ),
'icon' => $this->get_menu_icon(),
'position' => 7,
'callback' => [
tribe( 'tickets.admin.home' ),
'display_home_page',
],
]
);
$admin_pages->register_page(
[
'id' => static::$parent_slug,
'path' => static::$parent_slug,
'parent' => static::$parent_slug,
'title' => esc_html__( 'Home', 'event-tickets' ),
]
);
$admin_pages->register_page(
[
'id' => static::$settings_page_id,
'parent' => static::$parent_slug,
'title' => esc_html__( 'Settings', 'event-tickets' ),
'path' => static::$settings_page_id,
'callback' => [
tribe( 'settings' ),
'generatePage',
],
]
);
$admin_pages->register_page(
[
'id' => 'tec-tickets-help',
'parent' => static::$parent_slug,
'title' => esc_html__( 'Help', 'event-tickets' ),
'path' => 'tec-tickets-help',
'callback' => [
tribe( 'settings.manager' ),
'do_help_tab',
],
]
);
$this->maybe_add_troubleshooting();
}
/**
* Maybe add troubleshooting page for Event Tickets.
*
* @since 5.4.0
*/
public function maybe_add_troubleshooting() {
$admin_pages = tribe( 'admin.pages' );
if ( ! tribe( 'settings' )->should_setup_pages() ) {
return;
}
$troubleshooting = tribe( Troubleshooting::class );
$admin_pages->register_page(
[
'id' => 'tec-tickets-troubleshooting',
'parent' => 'tec-tickets',
'title' => esc_html__( 'Troubleshooting', 'event-tickets' ),
'path' => 'tec-tickets-troubleshooting',
'capability' => $troubleshooting->get_required_capability(),
'callback' => [
$troubleshooting,
'do_menu_page',
],
]
);
}
/**
* Loads the ticket settings from an admin-view file and returns them as an array.
*
* @since 4.10.9 Use customizable ticket name functions.
* @since 5.4.0 Use admin page and only show the General tab if we're in the Event Tickets menu.
*
* @param string $admin_page The admin page ID.
*/
public function settings_ui( $admin_page ) {
if ( ! empty( $admin_page ) && static::$settings_page_id !== $admin_page ) {
return;
}
$settings = $this->get_settings_array();
$this->tabs['event-tickets'] = new Tribe__Settings_Tab( 'event-tickets', esc_html__( 'General', 'event-tickets' ), $settings );
}
/**
* Loads the timezone settings from an admin-view file and returns them as an array.
*
* @return array
*/
protected function get_settings_array() {
include tribe( 'tickets.main' )->plugin_path . 'src/admin-views/tribe-options-tickets.php';
/** @var array $tickets_tab Set in the file included above*/
return $tickets_tab;
}
/**
* Maybe add network settings page for Event Tickets.
*
* @since 5.4.0
*/
public function maybe_add_network_settings_page() {
$admin_pages = tribe( 'admin.pages' );
$settings = tribe( 'settings' );
if ( ! is_plugin_active_for_network( 'event-tickets/event-tickets.php' ) ) {
return;
}
$admin_pages->register_page(
[
'id' => static::$settings_page_id,
'parent' => 'settings.php',
'title' => esc_html__( 'Tickets Settings', 'event-tickets' ),
'path' => static::$settings_page_id,
'capability' => $admin_pages->get_capability( 'manage_network_options' ),
'callback' => [
$settings,
'generatePage',
],
]
);
}
/**
* Generate network settings page for Event Tickets.
*
* @since 5.4.0
*
* @param string $admin_page The admin page ID.
*/
public function do_network_settings_tab( $admin_page ) {
if ( ! empty( $admin_page ) && static::$settings_page_id !== $admin_page ) {
return;
}
include_once tribe( 'tickets.main' )->plugin_path . 'src/admin-views/tec-tickets-options-network.php';
$this->tabs['network'] = new Tribe__Settings_Tab( 'network', esc_html__( 'Network', 'event-tickets' ), $networkTab );
}
/**
* Add the Event Tickets admin footer text.
*
* @since 5.4.0
*
* @param string $footer_text The admin footer text.
* @return string $footer_text The admin footer text, maybe modified.
*/
public function admin_footer_text_settings( $footer_text ) {
$admin_pages = tribe( 'admin.pages' );
$admin_page = $admin_pages->get_current_page();
if (
! empty( $admin_page )
&& self::$settings_page_id !== $admin_page
&& self::$parent_slug !== $admin_page
) {
return $footer_text;
}
// Translators: %1$s: Opening `<a>` to Event Tickets rating page. %2$s: Closing `</a>` tag. %3$s: Five stars.
$review_text = esc_html__( 'If you like %1$sEvent Tickets%2$s please leave us a %3$s. It takes a minute and it helps a lot.', 'event-tickets' );
$review_url = 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5';
$footer_text = sprintf(
$review_text,
'<strong>',
'</strong>',
'<a href="' . $review_url . '" target="_blank" rel="noopener noreferrer" class="tribe-rating">★★★★★</a>'
);
return $footer_text;
}
/**
* Get Tickets settings tab IDs.
*
* @since 5.4.0
*
* @return array $tabs Array of tabs IDs for the Tickets settings page.
*/
public function get_tickets_settings_tabs_ids() {
$tabs = [
'event-tickets',
];
/**
* Filters the tickets settings tab IDs.
*
* @since 5.4.0
*
* @param array $tabs Array of tabs IDs for the Tickets settings page.
*/
return apply_filters( 'tec_tickets_settings_tabs_ids', $tabs );
}
/**
* Maybe hijack the saving for the network settings page.
*
* @since 5.4.0
*
* @param array $options Formatted the same as from get_options().
* @param string $admin_page The admin page being saved.
*
* @return array $options Formatted the same as from get_options(), maybe modified.
*/
public function maybe_hijack_save_network_settings( $options, $admin_page ) {
// If we're saving the network settings page for tickets, bail.
if ( ! empty( $admin_page ) && static::$settings_page_id === $admin_page ) {
return $options;
}
if ( ! is_plugin_active_for_network( 'event-tickets/event-tickets.php' ) ) {
return $options;
}
$tickets_tabs = $this->get_tickets_settings_tabs_ids();
$form_options['hideSettingsTabs'] = $_POST['hideSettingsTabs'];
// Iterate over the Tickets settings tab ids and merge the network settings.
foreach ( $tickets_tabs as $tab => $key ) {
if ( in_array( $key, $options['hideSettingsTabs'] ) ) {
$_POST['hideSettingsTabs'][] = $key;
$form_options['hideSettingsTabs'][] = $key;
}
}
return $form_options;
}
}
Methods
- add_admin_pages — Adds the Event Tickets menu and pages.
- add_to_pages_with_tabs — Adds the Event Tickets settings page to the pages configuration.
- admin_footer_text_settings — Add the Event Tickets admin footer text.
- do_network_settings_tab — Generate network settings page for Event Tickets.
- get_menu_icon — Get the icon for the Event Tickets settings page.
- get_tickets_settings_tabs_ids — Get Tickets settings tab IDs.
- get_url — Returns the main admin tickets settings URL.
- is_on_tab — Check if the current page is on a specific tab for the Tickets settings.
- is_on_tab_section — Check if the current page is on a specific tab for the Tickets settings.
- is_tec_tickets_settings — Defines wether the current page is the Event Tickets Settings page.
- maybe_add_network_settings_page — Maybe add network settings page for Event Tickets.
- maybe_add_troubleshooting — Maybe add troubleshooting page for Event Tickets.
- maybe_hijack_save_network_settings — Maybe hijack the saving for the network settings page.
- settings_page_title — Filter the Event Tickets Settings page title.
- settings_ui — Loads the ticket settings from an admin-view file and returns them as an array.