[Back] <?php
class OsPagesHelper {
/**
* Create Latepoint predefined pages
* @return void
*/
public static function create_predefined_pages(): void {
$pages = [
'customer-cabinet' => array(
'slug' => _x( 'customer-cabinet', 'Customer cabinet', 'latepoint' ),
'title' => _x( 'Customer Cabinet', 'Customer cabinet', 'latepoint' ),
'content' => '<!-- wp:latepoint/customer-dashboard --><div class="wp-block-latepoint-customer-dashboard">Customer Dashboard</div><!-- /wp:latepoint/customer-dashboard -->',
'settings' => ['page_url_customer_dashboard', 'page_url_customer_login']
)
];
foreach ( $pages as $key => $page_settings ) {
$option = 'latepoint_page_' . $key;
$page_id = self::create_page( $page_settings, $option);
if ($page_id) {
update_option( $option, $page_id );
}
}
}
/**
* @param array $page_settings
* @param string $option
*
* @return int|WP_Error
*/
public static function create_page( array $page_settings, string $option = '' ) {
$option_page_id = get_option( $option );
if ( $option_page_id > 0 ) {
$page_object = get_post( $option_page_id );
if ( $page_object && 'page' === $page_object->post_type && ! in_array( $page_object->post_status, array( 'pending', 'trash', 'future', 'auto-draft' ), true ) ) {
return $page_object->ID;
}
}
$page = self::get_page_by_slug($page_settings['slug']);
if ( $page ) {
return $page;
}
$page_data = array(
'post_status' => 'publish',
'post_type' => 'page',
'post_author' => 1,
'post_name' => esc_sql( $page_settings['slug'] ),
'post_title' => $page_settings['title'],
'post_content' => $page_settings['content'],
'comment_status' => 'closed',
);
$new_page_id = wp_insert_post( $page_data );
# if page is created - Set Page URLs in settings
if ($new_page_id && count($page_settings['settings'])) {
self::save_default_pages_settings( $page_settings['settings'], "/{$page_settings['slug']}" );
}
return $new_page_id;
}
/**
* Add states for Latepoint Pages
* @param $post_states
* @param $page
*
* @return array
*/
public static function add_display_post_states($post_states, $page): array {
if ( get_option( 'latepoint_page_customer-cabinet') == $page->ID ) {
$post_states['latepoint_customer_cabinet'] = 'Latepoint Customer Cabinet';
}
return $post_states;
}
/**
* Get page ID by slug with status published
* @param $slug
* @return string|null
*/
public static function get_page_by_slug($slug) {
global $wpdb;
return $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status NOT IN ( 'pending', 'trash', 'future', 'auto-draft' ) AND post_name = %s LIMIT 1;", $slug ) );
}
/**
* save default pages settings
* @param array $settings
* @param $value
*
* @return void
*/
private static function save_default_pages_settings( array $settings, $value ): void {
foreach ( $settings as $name ) {
if ( ! OsSettingsHelper::get_settings_value( $name ) ) {
OsSettingsHelper::save_setting_by_name( $name, $value );
}
}
}
}