[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 );
			}
		}
	}


}