HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux vm8 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: afleverb (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //var/www/drakkar_site/wp-content/themes/blocksy/inc/classes/class-ct-attributes-parser.php
<?php
/**
 * Parse attributes in images
 *
 * @copyright 2019-present Creative Themes
 * @license   http://www.gnu.org/copyleft/gpl.html GNU General Public License
 * @package   Blocksy
 */

/**
 * Simple parser for images attributes.
 */
class Blocksy_Attributes_Parser {
	/**
	 * Add attribute to images with tag.
	 *
	 * @param string $content content to replaces images into.
	 * @param string $attribute_name - attribute name.
	 * @param string $attribute_value - attribute value.
	 */
	public function add_attribute_to_images(
		$content,
		$attribute_name,
		$attribute_value
	) {
		$new_content = $this->add_attribute_to_images_with_tag(
			$content,
			$attribute_name,
			$attribute_value,
			'img'
		);

		return $this->add_attribute_to_images_with_tag(
			$new_content,
			$attribute_name,
			$attribute_value,
			'source'
		);
	}

	/**
	 * Rename attribute from images with tag.
	 *
	 * @param string $content content to replaces images into.
	 * @param string $attribute - attribute name.
	 */
	public function remove_attribute_from_images( $content, $attribute ) {
		$new_content = $this->remove_attribute_from_images_with_tag(
			$content,
			$attribute,
			'img'
		);

		return $this->remove_attribute_from_images_with_tag(
			$new_content,
			$attribute,
			'source'
		);
	}

	/**
	 * Rename attribute from images with tag.
	 *
	 * @param string $content content to replaces images into.
	 * @param string $old_attribute_name - attribute name.
	 * @param string $new_attribute_name - attribute name.
	 */
	public function rename_attribute_from_images(
		$content,
		$old_attribute_name,
		$new_attribute_name
	) {
		$new_content = $this->rename_attribute_from_images_with_tag(
			$content,
			$old_attribute_name,
			$new_attribute_name,
			'img'
		);

		return $this->rename_attribute_from_images_with_tag(
			$new_content,
			$old_attribute_name,
			$new_attribute_name,
			'source'
		);
	}

	/**
	 * Rename attribute from images with tag.
	 *
	 * @param string $content content to replaces images into.
	 * @param string $old_attribute_name - attribute name.
	 * @param string $new_attribute_name - attribute name.
	 * @param string $tag             - img | source.
	 */
	private function rename_attribute_from_images_with_tag(
		$content,
		$old_attribute_name,
		$new_attribute_name,
		$tag = 'img'
	) {
		if ( ! preg_match_all( '/<' . $tag . ' [^>]+>/', $content, $matches ) ) {
			return $content;
		}

		$selected_images = array();

		foreach ( $matches[0] as $image ) {
			$selected_images[] = $image;
		}

		foreach ( $selected_images as $image ) {
			$content = str_replace(
				$image,
				$this->rename_attribute_for_single_image(
					$image,
					$old_attribute_name,
					$new_attribute_name,
					$tag
				),
				$content
			);
		}

		return $content;
	}

	/**
	 * Add specific attribute to an image. Tag that has to be parsed is specified.
	 *
	 * @param string $content content to replace images into.
	 * @param string $attribute_name attribute name.
	 * @param string $attribute_value attribute value.
	 * @param string $tag             img | source.
	 */
	public function add_attribute_to_images_with_tag(
		$content,
		$attribute_name,
		$attribute_value,
		$tag = 'img',
		$self_closing = true
	) {
		if (! preg_match_all('/<' . $tag . ' [^>]+>/', $content, $matches)) {
			return $content;
		}

		$selected_images = array();

		foreach ($matches[0] as $image) {
			$selected_images[] = $image;
		}

		foreach ($selected_images as $image) {
			$content = str_replace(
				$image,
				$this->add_attribute_to_single_image(
					$image,
					$attribute_name,
					$attribute_value,
					$tag,
					$self_closing
				),
				$content
			);
		}

		return $content;
	}

	/**
	 * Remove attribute from a specific HTML tag.
	 *
	 * @param string $content content to replaces images into.
	 * @param string $attribute attribute name.
	 * @param string $tag       - img | source.
	 */
	public function remove_attribute_from_images_with_tag(
		$content,
		$attribute,
		$tag = 'img'
	) {
		if ( ! preg_match_all( '/<' . $tag . ' [^>]+>/', $content, $matches ) ) {
			return $content;
		}

		$selected_images = array();

		foreach ( $matches[0] as $image ) {
			$selected_images[] = $image;
		}

		foreach ( $selected_images as $image ) {
			$content = str_replace(
				$image,
				$this->remove_attribute_from_single_image(
					$image,
					$attribute,
					$tag
				),
				$content
			);
		}

		return $content;
	}

	/**
	 * Remove existing $attribute from <img> html, if it exists.
	 *
	 * @param string $image     - image HTML.
	 * @param string $attribute - attribute name.
	 * @param string $tag       - img | source.
	 */
	public function remove_attribute_from_single_image(
		$image,
		$attribute,
		$tag = 'img'
	) {
		return preg_replace(
			'/(\\<' .
			$tag .
			'[^>]*)(\\s?' .
			$attribute .
			'\\="[^"]*"\\s?)([^>]+)(>)/',
			'${1}${3}${4}',
			$image
		);
	}

	/**
	 * Remove existing $attribute from <img> html, if it exists.
	 *
	 * @param string $image     - image HTML.
	 * @param string $old_attribute_name - attribute name.
	 * @param string $new_attribute_name - attribute name.
	 * @param string $tag       - img | source.
	 */
	public function rename_attribute_for_single_image(
		$image,
		$old_attribute_name,
		$new_attribute_name,
		$tag = 'img'
	) {
		$old_attribute_value = ltrim(
			rtrim(
				trim(
					preg_replace(
						'/(\\<' .
						$tag .
						'[^>]+)(\\s?' .
						$old_attribute_name .
						'\\="[^"]+"\\s?)([^>]+)(>)/',
						'${2}',
						$image
					)
				),
				'"'
			),
			$old_attribute_name . '="'
		);

		$removed = $this->remove_attribute_from_images(
			$image,
			$old_attribute_name
		);

		$res = $this->add_attribute_to_single_image(
			$removed,
			$new_attribute_name,
			$old_attribute_value,
			$tag
		);

		return $res;
	}

	/**
	 * Add an attribute with a specific value an img element. Remove the
	 * attribute if it exists already.
	 *
	 * @param string $image           - image HTML.
	 * @param string $attribute_name attribute name that will be set.
	 * @param string $attribute_value value for the attribute.
	 * @param string $tag             - img | source.
	 */
	public function add_attribute_to_single_image(
		$image,
		$attribute_name,
		$attribute_value,
		$tag = 'img',
		$self_closing = true
	) {
		$attr = blocksy_safe_sprintf(
			' %s="%s"',
			esc_attr($attribute_name),
			esc_attr($attribute_value)
		);

		if ($self_closing) {
			$val = preg_replace(
				'/<' . $tag . ' ([^>]+?)[\\/ ]*>/',
				'<' . $tag . ' $1' . $attr . ' />',
				$this->remove_attribute_from_images($image, $attribute_name)
			);
		} else {
			$val = preg_replace(
				'/<' . $tag . ' ([^>]+?)[\\/ ]*>/',
				'<' . $tag . ' $1' . $attr . ' >',
				$this->remove_attribute_from_images($image, $attribute_name)
			);
		}

		return $val;
	}
}