HEX
Server: Apache
System: Linux web15f74.uni5.net 5.4.282-1.el8.elrepo.x86_64 #1 SMP Mon Aug 19 18:33:22 EDT 2024 x86_64
User: lucendi (859622)
PHP: 7.4.33
Disabled: apache_child_terminate,c99_buff_prepare,c99_sess_put,dl,exec,leak,link,myshellexec,openlog,passthru,pclose,pcntl_exec,php_check_syntax,php_strip_whitespace,popen,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,show_source,symlink,system,socket_listen,socket_create_listen,putenv
Upload Files
File: /home/lucendi/www/wp-content/plugins/creame-whatsapp-me/gutenberg/class-joinchat-gutenberg.php
<?php
/**
 * Gutenberg functionality of the plugin.
 *
 * @package    Joinchat
 */

defined( 'WPINC' ) || exit;

/**
 * Register Gutenberg block editor plugin logic.
 * Add native sidebar for postmeta and register blocks and patterns.
 *
 * @since      1.0.0
 * @package    Joinchat_Gutenberg
 * @subpackage Joinchat/gutenberg
 * @author     Creame <hola@crea.me>
 */
class Joinchat_Gutenberg {

	/**
	 * Register the stylesheets for the gutenberg editor
	 *
	 * @since    4.5.0
	 * @return   void
	 */
	public function enqueue_editor_assets() {

		// Enqueue script.
		$script_url  = plugins_url( 'gutenberg/build/index.js', JOINCHAT_FILE );
		$asset_file  = include JOINCHAT_DIR . '/gutenberg/build/index.asset.php';
		$script_data = array(
			'image_qr'     => plugins_url( 'admin/img/qr.webp', JOINCHAT_FILE ),
			'defaults'     => jc_common()->get_obj_placeholders( get_post() ),
			'message_vars' => jc_common()->get_obj_vars( get_post() ),
		);

		wp_enqueue_script( 'joinchat-gutenberg', $script_url, $asset_file['dependencies'], $asset_file['version'], true );
		wp_localize_script( 'joinchat-gutenberg', 'joinchatData', $script_data );
		wp_set_script_translations( 'joinchat-gutenberg', 'creame-whatsapp-me', JOINCHAT_DIR . 'languages' );

		/**
		 * Disable sidebar?
		 */

		$conditions = array(
			$this->show_sidebar(),                                                   // Is enabled sidebar?
			in_array( get_post_type(), jc_common()->get_public_post_types(), true ), // CPT is plubic (with '_joinchat' meta registered)?
			post_type_supports( get_post_type(), 'custom-fields' ),                  // CPT supports 'custom-fields' for Gutenberg access to postmeta?
		);

		if ( count( array_filter( $conditions ) ) < count( $conditions ) ) {
			wp_add_inline_script( 'joinchat-gutenberg', 'wp.hooks.addFilter( "joinchat_gutenberg_sidebar", "joinchat", () => { return false; } );', 'before' );
		}

	}

	/**
	 * Initiates blocks on PHP side.
	 *
	 * @since    4.5.0
	 * @return void
	 */
	public function register_blocks() {

		/**
		 * For now, we will keep the back compat for WP 6.5 and below
		 * With @wordpress/scripts >= 28 need 'react-jsx-runtime' fallback or drop support for WP 6.5 and below.
		 * View https://make.wordpress.org/core/2024/06/06/jsx-in-wordpress-6-6/
		 * and https://github.com/WordPress/gutenberg/issues/62202#issuecomment-2156796649
		 */

		register_block_type(
			JOINCHAT_DIR . '/gutenberg/build/block_btn/',
			array(
				'api_version'     => is_wp_version_compatible( '6.6' ) ? 3 : 2,
				'render_callback' => array( $this, 'render_button' ),
			)
		);

	}

	/**
	 * Render the button.
	 *
	 * @since    4.5.0
	 * @param  array  $attributes The block attributes.
	 * @param  string $content    The block html.
	 * @return string The block html.
	 */
	public function render_button( $attributes, $content ) {

		// Don't do nothing for admin and API.
		if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) {
			return $content;
		}

		// Need render QR code.
		if ( isset( $attributes['qr_code'] ) && 'no' !== $attributes['qr_code'] ) {
			jc_common()->qr = true;
		}

		$data = ' ';
		if ( ! empty( $attributes['phone'] ) ) {
			$data .= 'data-phone="' . esc_attr( Joinchat_Util::clean_whatsapp( $attributes['phone'] ) ) . '"';
		}

		// Replace dynamic vars.
		if ( ! empty( $attributes['message'] ) ) {
			$data .= ' data-message="' . esc_attr( Joinchat_Util::replace_variables( $attributes['message'] ) ) . '"';
		}

		// Links to '#whatsapp' with data attributes.
		$content = preg_replace( '/\s*href="[^"]*"/', 'href="#whatsapp"' . $data, $content );

		return $content;

	}

	/**
	 * Fallback styles
	 *
	 * @return void
	 */
	public function root_styles() {

		if ( has_block( 'joinchat/button' ) && ! wp_script_is( JOINCHAT_SLUG, 'done' ) && ! wp_script_is( 'joinchat-woo', 'done' ) ) {

			ob_start();
			?>
<style>
:root {
  --joinchat-ico: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M3.516 3.516c4.686-4.686 12.284-4.686 16.97 0 4.686 4.686 4.686 12.283 0 16.97a12.004 12.004 0 0 1-13.754 2.299l-5.814.735a.392.392 0 0 1-.438-.44l.748-5.788A12.002 12.002 0 0 1 3.517 3.517zm3.61 17.043.3.158a9.846 9.846 0 0 0 11.534-1.758c3.843-3.843 3.843-10.074 0-13.918-3.843-3.843-10.075-3.843-13.918 0a9.846 9.846 0 0 0-1.747 11.554l.16.303-.51 3.942a.196.196 0 0 0 .219.22l3.961-.501zm6.534-7.003-.933 1.164a9.843 9.843 0 0 1-3.497-3.495l1.166-.933a.792.792 0 0 0 .23-.94L9.561 6.96a.793.793 0 0 0-.924-.445 1291.6 1291.6 0 0 0-2.023.524.797.797 0 0 0-.588.88 11.754 11.754 0 0 0 10.005 10.005.797.797 0 0 0 .88-.587l.525-2.023a.793.793 0 0 0-.445-.923L14.6 13.327a.792.792 0 0 0-.94.23z'/%3E%3C/svg%3E");
  --joinchat-font: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen-sans, ubuntu, cantarell, "Helvetica Neue", sans-serif;
}
</style>
			<?php
			echo ob_get_clean(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

		}

	}

	/**
	 * Undocumented function
	 *
	 * @since    4.5.0
	 * @return void
	 */
	public function register_patterns() {

		if ( ! function_exists( 'register_block_pattern' ) ) {
			return;
		}

		// Comming soon.
	}

	/**
	 * Allow Gutenberg sidebar
	 *
	 * @since    4.5.0
	 * @return bool
	 */
	public function show_sidebar() {

		return apply_filters( 'joinchat_gutenberg_sidebar', true );

	}

	/**
	 * Register post meta
	 *
	 * @since    4.5.0
	 * @return void
	 */
	public function register_meta() {

		if ( ! $this->show_sidebar() ) {
			return;
		}

		$post_types = jc_common()->get_public_post_types();

		foreach ( $post_types as $post_type ) {
			register_meta(
				'post',
				'_joinchat',
				array(
					'object_subtype' => $post_type,
					'type'           => 'object',
					'show_in_rest'   => array(
						'schema' => array(
							'type'       => 'object',
							'properties' => array(
								'telephone'    => array( 'type' => 'string' ),
								'message_text' => array( 'type' => 'string' ),
								'message_send' => array( 'type' => 'string' ),
								'view'         => array( 'type' => 'string' ),
							),
						),
					),
					'auth_callback'  => function () {
						return current_user_can( 'edit_posts' );
					},
					'single'         => true,
				)
			);
		}

		// Sanitize meta on save.
		add_filter( 'sanitize_post_meta__joinchat', array( $this, 'sanitize_meta' ) );
		add_action( 'updated_postmeta', array( $this, 'delete_empty_meta' ), 10, 4 );

	}

	/**
	 * Sanitize post meta
	 *
	 * @since    4.5.0
	 * @param  array $meta_value Current meta value.
	 * @return array
	 */
	public function sanitize_meta( $meta_value ) {

		Joinchat_Util::maybe_encode_emoji();

		return array_filter( Joinchat_Util::clean_input( $meta_value ) );

	}

	/**
	 * Delete empty post meta
	 *
	 * @since    4.5.0
	 * @param  int    $meta_id    Current meta ID.
	 * @param  int    $object_id  Current object ID.
	 * @param  string $meta_key   Current meta key.
	 * @param  mixed  $meta_value Current meta value.
	 * @return void
	 */
	public function delete_empty_meta( $meta_id, $object_id, $meta_key, $meta_value ) {

		if ( '_joinchat' === $meta_key && empty( maybe_unserialize( $meta_value ) ) ) {
			delete_metadata_by_mid( 'post', $meta_id );
		}

	}
}