HEX
Server: LiteSpeed
System: Linux 111n6.sieutocviet.page 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User: nhathuocat (1048)
PHP: 7.4.30
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/nhathuocat/public_html/wp-content/plugins/fixed-toc/frontend/data/class-datum-id.php
<?php

/**
 * Generate an id datum
 *
 * @since 3.0.0
 *
 * @see Fixedtoc_Datum
 */
class Fixedtoc_Datum_Id extends Fixedtoc_Datum {

	/**
	 * @since 3.0.0
	 */
	public function set_name() {
		$this->name = 'id';
	}

	/**
	 * @since 3.0.0
	 *
	 * @param Fixedtoc_Data $obj_data
	 */
	public function set_value( Fixedtoc_Data $obj_data ) {
		if ( fixedtoc_is_true( 'convert_title_to_id' ) ) {
			// Convert title to id
			$id = ( $this->convert_title_to_id( $obj_data ) );
		} else {
			// Default id that auto increase suffix num
			$id = 'ftoc-heading-' . ( $obj_data->get_index() + 1 );
		}

		// Customize id
		$customize_id = $this->get_id_attr( $obj_data );

		$id = isset( $customize_id ) && $customize_id ? $customize_id : $id;

		// Filter duplicate id
		$this->value = $this->filter_duplicate_id( $id, $obj_data->get_data() );
	}

	/**
	 * Convert title to id
	 *
	 * @since 3.0.0
	 * @access private
	 *
	 * @param object $obj_data
	 *
	 * @return string
	 */
	private function convert_title_to_id( $obj_data ) {
		$datum  = $obj_data->get_datum();
		$prefix = fixedtoc_get_val( 'general_id_prefix' );
		$title  = $prefix ? $prefix . '-' . $datum['origin_title'] : $datum['origin_title'];

		return sanitize_html_class( sanitize_title( $title ) );
	}

	/**
	 * Get id attribute
	 *
	 * @since 3.0.0
	 * @access private
	 *
	 * @param object $obj_data
	 *
	 * @return string
	 */
	private function get_id_attr( $obj_data ) {
// 		if ( preg_match( '/id(\s*)=(\s*)(\"|\')(.+?)(\"|\')/i', $obj_data->get_match(), $match ) ) {
		if ( preg_match( '/(<h[^>]*?)(\s)id(\s*)=(\s*)(["\'])(.+?)(["\'])((.*?)>)/i', $obj_data->get_match(), $match ) ) {
			return strtolower( sanitize_html_class( trim( $match[6] ) ) );
		}

		return '';
	}

	/**
	 * Filter duplicate id
	 *
	 * @since 3.0.0
	 * @access private
	 *
	 * @param string $id
	 * @param array $data
	 *
	 * @return string
	 */
	private function filter_duplicate_id( $id, $data ) {
		if ( empty( $data ) || count( $data ) <= 1 ) {
			return $id;
		}

		$duplicate_id = '';
		$num          = 1;
		foreach ( $data as $datum ) {
			$datum_id = isset( $datum['id'] ) ? $datum['id'] : false;
			if ( empty( $datum_id ) ) {
				continue;
			}

			if ( $datum_id == $id ) {
				$duplicate_id = $id;
				continue;
			}

			if ( $duplicate_id && 0 === strpos( $datum_id, $duplicate_id ) ) {
				if ( preg_match( '/\d+$/i', $datum_id, $match ) ) {
					$num = $match[0];
				}
			}
		}

		return $duplicate_id ? $id . '-' . ++ $num : $id;
	}

}