<?php
/**
 * Update functions for version 4.15.0
 *
 * @package LifterLMS/Functions/Updates
 *
 * @since 4.15.0
 * @version 4.15.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Remove orphan access plans
 *
 * @since 4.15.0
 *
 * @return bool True if it needs to run again, false otherwise.
 */
function llms_update_4150_remove_orphan_access_plans() {

	$limit = 50;

	global $wpdb;

	$orphan_access_plans = $wpdb->get_col(
		$wpdb->prepare(
			"SELECT pm.post_id AS apid
			FROM {$wpdb->postmeta} AS pm
			LEFT JOIN {$wpdb->posts} AS p
			ON pm.meta_value = p.ID
			WHERE pm.meta_key = '_llms_product_id'
			AND p.ID IS NULL
			ORDER BY apid ASC
			LIMIT %d
		",
			$limit
		)
	); // db call ok; no-cache ok.

	// Finished.
	if ( empty( $orphan_access_plans ) ) {
		set_transient( 'llms_update_4150_remove_orphan_access_plans', 'complete', DAY_IN_SECONDS );
		return false;
	}

	foreach ( $orphan_access_plans as $orphan_access_plan_id ) {
		wp_delete_post( $orphan_access_plan_id );
	}

	// Needs to run again.
	return true;
}

/**
 * Update db version to 4.15.0
 *
 * @since 4.15.0
 *
 * @return void|true True if it needs to run again, nothing if otherwise.
 */
function llms_update_4150_update_db_version() {
	if ( 'complete' !== get_transient( 'llms_update_4150_remove_orphan_access_plans' ) ) {
		// Needs to run again.
		return true;
	}
	LLMS_Install::update_db_version( '4.15.0' );
}