HEX
Server: Apache
System: Linux sxb1plmcpnl510113.prod.sxb1.secureserver.net 4.18.0-553.58.1.lve.el8.x86_64 #1 SMP Fri Jul 4 12:07:06 UTC 2025 x86_64
User: acnbijigo78q (10488831)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/acnbijigo78q/public_html/jetk.sa/wp-content/plugins/acfml/classes/FieldGroup/SaveHooks.php
<?php

namespace ACFML\FieldGroup;

use ACFML\Helper\Fields;
use WPML\FP\Fns;
use WPML\FP\Obj;
use WPML\LIB\WP\Hooks;
use WPML\Element\API\Languages;
use WPML\TM\Settings\CustomFieldChangeDetector;
use function WPML\FP\spreadArgs;

class SaveHooks implements \IWPML_Action {

	// On 10, group settings might get stored in local JSON files:
	// we need to update field translation settings before that.
	const UPDATE_FIELD_GROUP_PRIORITY = 9;

	/**
	 * @var FieldNamePatterns $fieldNamePatterns
	 */
	private $fieldNamePatterns;

	/**
	 * @var DetectNonTranslatableLocations $detectNonTranslatableLoc
	 */
	private $detectNonTranslatableLoc;

	public function __construct(
		FieldNamePatterns $fieldNamePatterns,
		DetectNonTranslatableLocations $detectNonTranslatableLoc
	) {
		$this->fieldNamePatterns        = $fieldNamePatterns;
		$this->detectNonTranslatableLoc = $detectNonTranslatableLoc;
	}

	public function add_hooks() {
		Hooks::onAction( 'acf/update_field_group', self::UPDATE_FIELD_GROUP_PRIORITY )
			->then( spreadArgs( [ $this, 'onUpdateFieldGroup' ] ) );
	}

	/**
	 * @param array $fieldGroup
	 *
	 * @return void
	 */
	public function onUpdateFieldGroup( $fieldGroup ) {
		$this->overwriteAllFieldPreferencesWithGroupMode( $fieldGroup );
		$this->fieldNamePatterns->updateFieldNamePatterns( $fieldGroup );
		$this->detectNonTranslatableLoc->process( $fieldGroup );
		$this->maybeForceTranslationStatusProcessOnAttachedPosts( $fieldGroup );
		$this->flushAcfCache( $fieldGroup );
	}

	/**
	 * @param array $fieldGroup
	 *
	 * @return void
	 */
	private function overwriteAllFieldPreferencesWithGroupMode( $fieldGroup ) {
		if ( Mode::isAdvanced( $fieldGroup ) ) {
			return;
		}

		$getFieldPreference = ModeDefaults::get( Mode::getMode( $fieldGroup ) );

		$updateFieldTranslationPreference = Fns::tap(
			function( $field ) use ( $getFieldPreference ) {
				acf_update_field( Obj::assoc( 'wpml_cf_preferences', $getFieldPreference( $field ), wp_slash( $field ) ) );
			}
		);

		Fields::iterate( acf_get_fields( $fieldGroup ), $updateFieldTranslationPreference, Fns::identity() );
	}

	/**
	 * @param array $fieldGroup
	 *
	 * @return void
	 */
	private function maybeForceTranslationStatusProcessOnAttachedPosts( $fieldGroup ) {
		if ( isset( $_POST['acfml_force_translation_status_process'] ) ) { // phpcs:ignore
			$fieldNames = wpml_collect( acf_get_fields( $fieldGroup ) )
				->map( Obj::prop( 'name' ) )
				->toArray();

			CustomFieldChangeDetector::notify( $fieldNames ); // @phpstan-ignore-line
		}
	}

	/**
	 * @param array $fieldGroup
	 *
	 * @return void
	 */
	private function flushAcfCache( $fieldGroup ) {
		$active_languages = Languages::getActive();

		wp_cache_delete( 'acf_get_field_group_posts', 'acf' );
		wp_cache_delete( 'acf_get_field_group_post:key:' . $fieldGroup['key'], 'acf' );
		wp_cache_delete( 'acf_get_field_posts:' . $fieldGroup['ID'], 'acf' );
		if ( ! empty( $active_languages ) ) {
			foreach ( $active_languages as $lang_code => $language ) {
				wp_cache_delete( 'acf_get_field_posts:' . $fieldGroup['ID'] . ':' . $lang_code, 'acf' );
			}
		}
	}
}