HEX
Server: Apache
System: Linux beta.alfanet.ee 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: busines1 (1252)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /home-ssd1/busines1/public_html/wp-content/plugins/acfml/classes/FieldGroup/AttachedPosts.php
<?php

namespace ACFML\FieldGroup;

use WPML\FP\Obj;

class AttachedPosts {


	/**
	 * As we're processing batches of 10 posts for each AJAX request,
	 * let's consider 5 seconds per request, so 0.5 second per post as a rough estimation.
	 */
	const PROCESS_TIME_PER_POST = 0.5;

	/**
	 * The SQL query is inspired on `\WPML\TM\Settings\ProcessNewTranslatableFields::getPosts`.
	 * The `meta_key <> ''` part is not totally clear though.
	 *
	 * @see \WPML\TM\Settings\ProcessNewTranslatableFields::getPosts
	 *
	 * @param int $fieldGroupId
	 *
	 * @return int
	 */
	public static function getCount( $fieldGroupId ) {
		/** @var \wpdb $wpdb */
		global $wpdb;

		$fieldKeys = wpml_collect( acf_get_fields( $fieldGroupId ) )
			->map( Obj::prop( 'name' ) )
			->toArray();

		if ( $fieldKeys ) {
			return (int) $wpdb->get_var(
				"SELECT COUNT(DISTINCT(post_id))
				FROM {$wpdb->postmeta}
				WHERE meta_key IN (" . wpml_prepare_in( $fieldKeys ) . ") AND meta_key <> ''"
			);
		}

		return 0;
	}

	/**
	 * @param int $postCount
	 *
	 * @return string
	 */
	public static function getProcessConfirmationMessage( $postCount ) {
		$totalTimeInSeconds = $postCount * self::PROCESS_TIME_PER_POST;

		if ( $totalTimeInSeconds <= MINUTE_IN_SECONDS ) {
			return esc_html__( 'Some posts using this field group have translations. Once you change the translation option, WPML needs to update the translation status of the posts. This can take up to 1 minute.', 'acfml' );
		} elseif ( $totalTimeInSeconds > 1.5 * HOUR_IN_SECONDS ) {
			/* translators: %d is the number of hours. */
			return sprintf( esc_html__( 'Some posts using this field group have translations. Once you change the translation option, WPML needs to update the translation status of the posts. This can take up to %d hours.', 'acfml' ), ceil( $totalTimeInSeconds / HOUR_IN_SECONDS ) );
		}

		/* translators: %d is the number of minutes. */
		return sprintf( esc_html__( 'Some posts using this field group have translations. Once you change the translation option, WPML needs to update the translation status of the posts. This can take up to %d minutes.', 'acfml' ), ceil( $totalTimeInSeconds / MINUTE_IN_SECONDS ) );
	}
}