HEX
HEX
Server: Apache
System: Linux localhost.localdomain 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64
User: www (1001)
PHP: 8.1.32
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,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_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/ahmsolaiman.com/wp-content/plugins/types/application/models/information/container.php
<?php


class Types_Information_Container {
	protected $id;
	protected $messages = array();
	protected $messages_filtered = array();
	protected $output_container = false;

	/**
	 * We need this option to show messages for hooks followed by a page reload.
	 * @var bool
	 */
	protected $cached = false;

	public function __construct( $id ) {
		$this->id = $id;
	}

	// get id
	public function get_id() {
		return $this->id;
	}

	// add message
	public function add_message( Types_Information_Message $message ) {
		$this->messages[] = $message;
	}

	public function get_messages() {
		return $this->messages;
	}

	/**
	 * @return array|bool
	 */
	public function get_descriptions() {
		if( empty( $this->messages ) )
			return false;

		// check if descriptions were already filtered
		if( isset( $this->messages_filtered['descriptions'] ) )
			return $this->messages_filtered['descriptions'];

		$descriptions = array();

		foreach( $this->messages as $message ){
			$descriptions[] = $message->get_description();
		}

		Types_Helper_Placeholder::replace( $descriptions );
		$this->messages_filtered['descriptions'] = $descriptions;
		return $descriptions;
	}


	/**
	 *
	 * @return bool
	 */
	public function get_examples() {
		if( empty( $this->messages ) )
			return false;

		// check if descriptions were already filtered
		if( isset( $this->messages_filtered['view_example'] ) )
			return $this->messages_filtered['view_example'];

		$examples = array();

		foreach( $this->messages as $message ) {
			if( !empty( $examples ) ) {
				$current_example = $message->get_example();

				// check if the view example is already applied
				foreach( $examples as $view ) {
					// skip to next message
					if( $view['label'] == $current_example['label'] )
						continue 2;
				}

				// no duplication, add view example
				$examples[] = $current_example;
				continue;
			}

			// view example has no value yet
			$examples[] = $message->get_example();
		}

		Types_Helper_Placeholder::replace( $examples );
		$this->messages_filtered['view_example'] = $examples;
		return $examples;
	}

	/**
	 * @param bool|string $output e.g., a rendered Twig template
	 *
	 * @return bool|string
	 */
	public function render( $output = false ) {

		$output = $output ? $output : '';

		if( $this->cached && !$this->is_cached() )
			return false;

		// use message render function if no output is set
		if( empty( $output ) && ! empty( $this->messages ) ) {
			foreach( $this->messages as $message ) {
				$output .= $message->render();
			}
		}

		// send output to container (e.g., meta-box) and return full container output
		if( $this->output_container ) {
			$this->output_container->set_content( $output );
			return $this->output_container->output();
		}

		return $output;
	}

	// set output container
	public function set_output_container( $output ) {
		// @todo type hinting Types_Helper_Output_Meta_Box
		$this->output_container = $output;
	}


	// cache on hook
	public function cache_on_hook( $hook ) {
		$this->cached = true;
		add_action( $hook, array( $this, 'cache' ) );
	}

	public function cache() {
		$this->cached = true;

		if( ! $this->id )
			return false;

		$db_messages = get_option( 'types_messages', array() );
		$db_messages[$this->id] = 1;

		update_option( 'types_messages', $db_messages );
	}

	/**
	 * Check if cached
	 *
	 * @return bool
	 */
	private function is_cached() {
		$db_messages = get_option( 'types_messages', array() );

		if( ! isset( $db_messages[$this->id] ) || empty( $db_messages[$this->id] ) )
			return false;

		// disable message again
		$db_messages[$this->id] = 0;
		update_option( 'types_messages', $db_messages );

		return true;
	}

}