MOON
Server: Apache
System: Linux 54-179-220-51.cprapid.com 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
User: hunarpak (1005)
PHP: 7.4.29
Disabled: NONE
Upload Files
File: /home/hunarpak/public_html/wp-content/plugins/tlp-portfolio/lib/models/TlpPortfolioField.php
<?php
/**
 * Fields class.
 *
 * @package RT_Portfolio
 */

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
	exit( 'This script cannot be accessed directly.' );
}

if ( ! class_exists( 'TlpPortfolioField' ) ) :
	/**
	 * Fields class.
	 */
	class TlpPortfolioField {
		private $type;
		private $name;
		private $value;
		private $default;
		private $label;
		private $class;
		private $id;
		private $holderClass;
		private $description;
		private $options;
		private $option;
		private $optionLabel;
		private $attr;
		private $multiple;
		private $alignment;
		private $placeholder;
		private $blank;
		private $alpha;

		function __construct() {
		}

		/**
		 * Initiate the predefined property for the field object
		 *
		 * @param $attr
		 */
		private function setArgument( $key, $attr ) {
			$this->type     = isset( $attr['type'] ) ? ( $attr['type'] ? $attr['type'] : 'text' ) : 'text';
			$this->multiple = isset( $attr['multiple'] ) ? ( $attr['multiple'] ? $attr['multiple'] : false ) : false;
			$this->name     = ! empty( $key ) ? $key : null;
			$this->default  = isset( $attr['default'] ) ? $attr['default'] : null;
			$this->value    = isset( $attr['value'] ) ? ( $attr['value'] ? $attr['value'] : null ) : null;

			if ( ! $this->value ) {
				$post_id = get_the_ID();

				if ( ! TLPPortfolio()->meta_exist( $post_id, $this->name ) ) {
					$this->value = $this->default;
				} else {
					if ( $this->multiple ) {
						$this->value = get_post_meta( $post_id, $this->name );
					} else {
						$this->value = get_post_meta( $post_id, $this->name, true );
					}
				}
			}

			$this->label       = isset( $attr['label'] ) ? ( $attr['label'] ? $attr['label'] : null ) : null;
			$this->class       = isset( $attr['class'] ) ? ( $attr['class'] ? $attr['class'] : null ) : null;
			$this->holderClass = isset( $attr['holderClass'] ) ? ( $attr['holderClass'] ? $attr['holderClass'] : null ) : null;
			$this->placeholder = isset( $attr['placeholder'] ) ? ( $attr['placeholder'] ? $attr['placeholder'] : null ) : null;
			$this->description = isset( $attr['description'] ) ? ( $attr['description'] ? $attr['description'] : null ) : null;
			$this->options     = isset( $attr['options'] ) ? ( $attr['options'] ? $attr['options'] : [] ) : [];
			$this->option      = isset( $attr['option'] ) ? ( $attr['option'] ? $attr['option'] : null ) : null;
			$this->optionLabel = isset( $attr['optionLabel'] ) ? ( $attr['optionLabel'] ? $attr['optionLabel'] : null ) : null;
			$this->attr        = isset( $attr['attr'] ) && ! empty( $attr['attr'] ) ? $attr['attr'] : null;
			$this->alignment   = isset( $attr['alignment'] ) ? ( $attr['alignment'] ? $attr['alignment'] : null ) : null;
			$this->blank       = isset( $attr['blank'] ) && ! empty( $attr['blank'] ) ? $attr['blank'] : null;
			$this->alpha       = isset( $attr['alpha'] ) && ! empty( $attr['alpha'] ) ? true : false;
			$this->class       = $this->class ? $this->class . ' rt-form-control' : 'rt-form-control';
		}

		/**
		 * Create field
		 *
		 * @param $key
		 * @param $attr
		 *
		 * @return null|string
		 */
		public function Field( $key, $attr = [] ) {
			$this->setArgument( $key, $attr );
			$holderId = $this->name . '_holder';

			$html  = null;
			$html .= '<div class="rt-field-wrapper ' . esc_attr( $this->holderClass ) . '" id="' . esc_attr( $holderId ) . '">';
			$html .= sprintf(
				'<div class="rt-label">%s</div>',
				$this->label ? sprintf(
					'<label for="">%s</label>',
					wp_kses( $this->label, TLPPortfolio()->allowedHtml() )
				) : ''
			);

			$html .= "<div class='rt-field'>";

			switch ( $this->type ) {
				case 'text':
				case 'price':
				case 'slug':
					$html .= $this->text();
					break;

				case 'url':
					$html .= $this->url();
					break;

				case 'number':
					$html .= $this->number();
					break;

				case 'select':
					$html .= $this->select();
					break;

				case 'textarea':
					$html .= $this->textArea();
					break;

				case 'checkbox':
					$html .= $this->checkbox();
					break;

				case 'radio':
					$html .= $this->radioField();
					break;

				case 'colorpicker':
					$html .= $this->colorPicker();
					break;

				case 'custom_css':
					$html .= $this->customCss();
					break;

				case 'style':
					$html .= $this->smartStyle();
					break;

				case 'image':
					$html .= $this->image();
					break;

				case 'image_size':
					$html .= $this->imageSize();
					break;
				case 'radio-image':
					$html .= $this->radioImage();
					break;

			}

			if ( $this->description ) {
				$html .= '<p class="description">' . wp_kses( $this->description, TLPPortfolio()->allowedHtml() ) . '</p>';
			}

			$html .= '</div>'; // field.
			$html .= '</div>'; // field holder.

			return $html;
		}

		/**
		 * Generate text field
		 *
		 * @return null|string
		 */
		private function text() {
			$h  = null;
			$h .= '<input
					type="text"
					class="' . esc_attr( $this->class ) . '"
					id="' . esc_attr( $this->id ) . '"
					value="' . esc_attr( $this->value ) . '"
					name="' . esc_attr( $this->name ) . '"
					placeholder="' . esc_attr( $this->placeholder ) . '"
					' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '
					/>';

			return $h;
		}

		/**
		 * Generate color picker
		 *
		 * @return null|string
		 */
		private function colorPicker() {
			$alpha       = $this->alpha === true ? ' data-alpha-enabled="true"' : '';
			$this->class = $this->class . ' tlp-color';

			$h  = null;
			$h .= '<input
					type="text"
					' . $alpha . '
					class="' . esc_attr( $this->class ) . ' tlp-color"
					id="' . esc_attr( $this->id ) . '"
					value="' . esc_attr( $this->value ) . '"
					name="' . esc_attr( $this->name ) . '"
					placeholder="' . esc_attr( $this->placeholder ) . '"
					' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '
					/>';

			return $h;
		}

		/**
		 * Radio Image
		 *
		 * @return void
		 */
		private function radioImage() {
			$h  = null;
			$id = 'rtpfp-' . $this->name;

			$h .= sprintf( "<div class='rtpfp-radio-image %s' id='%s'>", esc_attr( $this->alignment ), esc_attr( $id ) );

			$selected_value = $this->value;

			if ( is_array( $this->options ) && ! empty( $this->options ) ) {
				foreach ( $this->options as $key => $value ) {
					$checked    = ( $key == $selected_value ? 'checked' : null );
					$title      = isset( $value['title'] ) && $value['title'] ? $value['title'] : '';
					$layout     = isset( $value['layout'] ) ? $value['layout'] : '';
					$demo_title = isset( $value['demoUrl'] ) && $value['demoUrl'] ? '<a href="' . $value['demoUrl'] . '" target="_blank">' . $title . '</a>' : $title;

					$h .= sprintf(
						'<label data-type="%7$s" class="radio-image %7$s" for="%2$s">
							<input type="radio" id="%2$s" %3$s name="%4$s" value="%2$s">
							<div class="rtpfp-radio-image-pro-wrap">
								<img src="%5$s" title="%1$s" alt="%1$s">
								<div class="rtpfp-checked"><span class="dashicons dashicons-yes"></span></div>
							</div>
							<div class="rtpfp-demo-name"> %6$s </div>
						</label>',
						esc_html( $title ),
						esc_attr( $key ),
						esc_attr( $checked ),
						esc_attr( $this->name ),
						esc_url( $value['img'] ),
						TLPPortfolio()->htmlKses( $demo_title, 'basic' ),
						esc_attr( $layout )
					);
				}
			}

			$h .= '</div>';

			return $h;
		}

		/**
		 * Custom css field
		 *
		 * @return null|string
		 */
		private function customCss() {
			$h  = null;
			$h .= '<div class="rt-custom-css">';
			$h .= '<div class="custom_css_pfp-container">';
			$h .= "<div name='" . esc_attr( $this->name ) . "' id='ret-" . absint( wp_rand() ) . "' class='custom-css'>";
			$h .= '</div>';
			$h .= '</div>';

			$h .= '<textarea
						style="display: none;"
						class="custom_css_textarea"
						id="' . esc_attr( $this->name ) . '"
						name="' . esc_attr( $this->name ) . '"
						>' . wp_kses_post( $this->value ) . '</textarea>';
			$h .= '</div>';

			return $h;
		}

		/**
		 * Generate URL field
		 *
		 * @return null|string
		 */
		private function url() {
			$h  = null;
			$h .= '<input
					type="url"
					class="' . esc_attr( $this->class ) . '"
					id="' . esc_attr( $this->id ) . '"
					value="' . esc_url( $this->value ) . '"
					name="' . esc_attr( $this->name ) . '"
					placeholder="' . esc_attr( $this->placeholder ) . '"
					' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '
					/>';

			return $h;
		}

		/**
		 * Generate number field
		 *
		 * @return null|string
		 */
		private function number() {
			$h  = null;
			$h .= '<input
					type="number"
					class="' . esc_attr( $this->class ) . '"
					id="' . esc_attr( $this->id ) . '"
					value="' . ( ! empty( $this->value ) ? absint( $this->value ) : null ) . '"
					name="' . esc_attr( $this->name ) . '"
					placeholder="' . esc_attr( $this->placeholder ) . '"
					' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '
					/>';

			return $h;
		}

		/**
		 * Generate Drop-down field
		 *
		 * @return null|string
		 */
		private function select() {
			$h = null;

			if ( $this->multiple ) {
				$this->attr .= " style='min-width:160px;'";
				$this->name  = $this->name . '[]';
				$this->attr  = $this->attr . " multiple='multiple'";
				$this->value = ( is_array( $this->value ) && ! empty( $this->value ) ? $this->value : [] );
			} else {
				$this->value = [ $this->value ];
			}

			$h .= '<select name="' . esc_attr( $this->name ) . '" id="' . esc_attr( $this->name ) . '" class="' . esc_attr( $this->class ) . '" ' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '>';

			if ( $this->blank ) {
				$h .= '<option value="">' . esc_html( $this->blank ) . '</option>';
			}

			if ( is_array( $this->options ) && ! empty( $this->options ) ) {
				foreach ( $this->options as $key => $value ) {
					$slt = ( in_array( $key, $this->value ) ? 'selected' : null );
					$h  .= '<option ' . esc_attr( $slt ) . ' value="' . esc_attr( $key ) . '">' . esc_html( $value ) . '</option>';
				}
			}

			$h .= '</select>';

			return $h;
		}

		/**
		 * Generate textArea field
		 *
		 * @return null|string
		 */
		private function textArea() {
			$h  = null;
			$h .= '<textarea
					class="' . esc_attr( $this->class ) . ' rt-textarea"
					id="' . esc_attr( $this->name ) . '"
					name="' . esc_attr( $this->name ) . '"
					placeholder="' . esc_attr( $this->placeholder ) . '"
					' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '
					>' . wp_kses_post( $this->value ) . '</textarea>';

			return $h;
		}

		/**
		 * Generate check box
		 *
		 * @return null|string
		 */
		private function checkbox() {
			$h  = null;
			$id = $this->name;

			if ( $this->multiple ) {
				$this->name  = $this->name . '[]';
				$this->value = ( is_array( $this->value ) && ! empty( $this->value ) ? $this->value : [] );
			}

			if ( $this->multiple ) {
				$h .= '<div class="checkbox-group ' . esc_attr( $this->alignment ) . '" id="' . esc_attr( $id ) . '">';

				if ( is_array( $this->options ) && ! empty( $this->options ) ) {
					foreach ( $this->options as $key => $value ) {
						$checked = ( in_array( $key, $this->value ) ? 'checked' : null );
						$h      .= '<label for="' . esc_attr( $id ) . '-' . esc_attr( $key ) . '">
										<input type="checkbox" id="' . esc_attr( $id ) . '-' . esc_attr( $key ) . '" ' . esc_attr( $checked ) . ' name="' . esc_attr( $this->name ) . '" value="' . esc_attr( $key ) . '" ' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . '>' . esc_html( $value ) . '
									</label>';
					}
				}

				$h .= '</div>';
			} else {
				$checked = ( $this->value == $this->option ? 'checked' : null );
				$h      .= '<label>
								<input type="checkbox" ' . esc_attr( $checked ) . ' id="' . esc_attr( $this->name ) . '" name="' . esc_attr( $this->name ) . '" value="' . esc_attr( $this->option ) . '" ' . TLPPortfolio()->htmlKses( $this->attr, 'basic' ) . ' />' . esc_html( $this->optionLabel ) . '
							</label>';
			}

			return $h;
		}

		/**
		 * Generate Radio field
		 *
		 * @return null|string
		 */
		private function radioField() {
			if ( $this->value === '' ) {
				$this->value = $this->default;
			}

			$h  = null;
			$h .= '<div class="radio-group ' . esc_attr( $this->alignment ) . '" id="' . esc_attr( $this->name ) . '">';

			if ( is_array( $this->options ) && ! empty( $this->options ) ) {
				foreach ( $this->options as $key => $value ) {
					$checked = ( $key == $this->value ? 'checked' : null );
					$h      .= '<label for="' . esc_attr( $this->name ) . '-' . esc_attr( $key ) . '">
									<input type="radio" id="' . esc_attr( $this->name ) . '-' . esc_attr( $key ) . '" ' . esc_attr( $checked ) . ' name="' . esc_attr( $this->name ) . '" value="' . esc_attr( $key ) . '">' . esc_html( $value ) . '
								</label>';
				}
			}

			$h .= '</div>';

			return $h;
		}

		private function smartStyle() {
			$h       = null;
			$sColor  = ! empty( $this->value['color'] ) ? $this->value['color'] : null;
			$sSize   = ! empty( $this->value['size'] ) ? $this->value['size'] : null;
			$sWeight = ! empty( $this->value['weight'] ) ? $this->value['weight'] : null;
			$sAlign  = ! empty( $this->value['align'] ) ? $this->value['align'] : null;

			$h .= "<div class='style-field-pfp-container clear'>";
			// color.
			$h .= "<div class='field-inner col-4'>";
			$h .= "<div class='field-inner-pfp-container size'>";
			$h .= "<span class='label'>Color</span>";
			$h .= "<input type='text' value='" . esc_attr( $sColor ) . "' class='tlp-color' name='" . esc_attr( $this->name ) . "[color]'>";
			$h .= '</div>';
			$h .= '</div>';

			// Font size.
			$h     .= "<div class='field-inner col-4'>";
			$h     .= "<div class='field-inner-pfp-container size'>";
			$h     .= "<span class='label'>Font size</span>";
			$h     .= "<select name='" . esc_attr( $this->name ) . "[size]' class='rt-select2'>";
			$fSizes = $this->scFontSize();
			$h     .= "<option value=''>Default</option>";

			foreach ( $fSizes as $size => $label ) {
				$sSlt = ( $size == $sSize ? 'selected' : null );
				$h   .= '<option value="' . esc_attr( $size ) . '" ' . esc_attr( $sSlt ) . '>' . esc_html( $label ) . '</option>';
			}

			$h .= '</select>';
			$h .= '</div>';
			$h .= '</div>';

			// Weight.
			$h      .= "<div class='field-inner col-4'>";
			$h      .= "<div class='field-inner-pfp-container weight'>";
			$h      .= "<span class='label'>Weight</span>";
			$h      .= "<select name='" . esc_attr( $this->name ) . "[weight]' class='rt-select2'>";
			$h      .= "<option value=''>Default</option>";
			$weights = $this->scTextWeight();

			foreach ( $weights as $weight => $label ) {
				$wSlt = ( $weight == $sWeight ? 'selected' : null );
				$h   .= '<option value="' . esc_attr( $weight ) . '" ' . esc_attr( $wSlt ) . '>' . esc_html( $label ) . '</option>';
			}

			$h .= '</select>';
			$h .= '</div>';
			$h .= '</div>';

			// Alignment.
			$h     .= "<div class='field-inner col-4'>";
			$h     .= "<div class='field-inner-pfp-container alignment'>";
			$h     .= "<span class='label'>Alignment</span>";
			$h     .= "<select name='" . esc_attr( $this->name ) . "[align]' class='rt-select2'>";
			$h     .= "<option value=''>Default</option>";
			$aligns = $this->scAlignment();

			foreach ( $aligns as $align => $label ) {
				$aSlt = ( $align == $sAlign ? 'selected' : null );
				$h   .= '<option value="' . esc_attr( $align ) . '" ' . esc_attr( $aSlt ) . '>' . esc_html( $label ) . '</option>';
			}

			$h .= '</select>';
			$h .= '</div>';
			$h .= '</div>';
			$h .= '</div>';

			return $h;
		}


		private function image() {
			$h   = null;
			$h  .= "<div class='rt-image-holder'>";
			$h  .= '<input type="hidden" name="' . esc_attr( $this->name ) . '" value="' . absint( $this->value ) . '" id="' . esc_attr( $this->name ) . '" class="hidden-image-id" />';
			$img = null;
			$c   = 'hidden';

			if ( $id = absint( $this->value ) ) {
				$aImg = wp_get_attachment_image_src( $id, 'thumbnail' );
				$img  = '<img src="' . esc_url( $aImg[0] ) . '" >';
				$c    = null;
			} else {
				$aImg = TLPPortfolio()->placeholder_img_src();
				$img  = '<img src="' . esc_url( $aImg ) . '" >';
			}

			$h .= "<div class='rt-image-preview'>
					" . TLPPortfolio()->htmlKses( $img, 'image' ) . "
					<span class='dashicons dashicons-plus-alt rtAddImage'></span>
					<span class='dashicons dashicons-trash rtRemoveImage " . esc_attr( $c ) . "'></span>
				</div>";
			$h .= '</div>';

			return $h;
		}

		private function imageSize() {
			$width  = ( ! empty( $this->value['width'] ) ? $this->value['width'] : null );
			$height = ( ! empty( $this->value['height'] ) ? $this->value['height'] : null );
			$cropV  = ( ! empty( $this->value['crop'] ) ? $this->value['crop'] : 'soft' );

			$h  = null;
			$h .= "<div class='rt-image-size-holder'>";
			$h .= "<div class='rt-image-size-width rt-image-size'>";
			$h .= '<label>Width</label>';
			$h .= "<input type='number' name='" . esc_attr( $this->name ) . "[width]' value='" . absint( $width ) . "' />";
			$h .= '</div>';

			$h .= "<div class='rt-image-size-height rt-image-size'>";
			$h .= '<label>Height</label>';
			$h .= "<input type='number' name='" . esc_attr( $this->name ) . "[height]' value='" . absint( $height ) . "' />";
			$h .= '</div>';

			$h       .= "<div class='rt-image-size-crop rt-image-size'>";
			$h       .= '<label>Crop</label>';
			$h       .= "<select name='" . esc_attr( $this->name ) . "[crop]' class='rt-select2'>";
			$cropList = TLPPortfolio()->imageCropType();

			foreach ( $cropList as $crop => $cropLabel ) {
				$cSl = ( $crop == $cropV ? 'selected' : null );
				$h  .= '<option value="' . esc_attr( $crop ) . '" ' . esc_attr( $cSl ) . '>' . esc_html( $cropLabel ) . '</option>';
			}

			$h .= '</select>';
			$h .= '</div>';
			$h .= '</div>';

			return $h;
		}


		private function scFontSize() {
			$num = [];

			for ( $i = 10; $i <= 60; $i++ ) {
				$num[ $i ] = $i . 'px';
			}

			return $num;
		}

		private function scAlignment() {
			return [
				'left'    => esc_html__( 'Left', 'tlp-portfolio' ),
				'right'   => esc_html__( 'Right', 'tlp-portfolio' ),
				'center'  => esc_html__( 'Center', 'tlp-portfolio' ),
				'justify' => esc_html__( 'Justify', 'tlp-portfolio' ),
			];
		}

		private function scTextWeight() {
			return [
				'normal'  => esc_html__( 'Normal', 'tlp-portfolio' ),
				'bold'    => esc_html__( 'Bold', 'tlp-portfolio' ),
				'bolder'  => esc_html__( 'Bolder', 'tlp-portfolio' ),
				'lighter' => esc_html__( 'Lighter', 'tlp-portfolio' ),
				'inherit' => esc_html__( 'Inherit', 'tlp-portfolio' ),
				'initial' => esc_html__( 'Initial', 'tlp-portfolio' ),
				'unset'   => esc_html__( 'Unset', 'tlp-portfolio' ),
				100       => esc_html__( '100', 'tlp-portfolio' ),
				200       => esc_html__( '200', 'tlp-portfolio' ),
				300       => esc_html__( '300', 'tlp-portfolio' ),
				400       => esc_html__( '400', 'tlp-portfolio' ),
				500       => esc_html__( '500', 'tlp-portfolio' ),
				600       => esc_html__( '600', 'tlp-portfolio' ),
				700       => esc_html__( '700', 'tlp-portfolio' ),
				800       => esc_html__( '800', 'tlp-portfolio' ),
				900       => esc_html__( '900', 'tlp-portfolio' ),
			];
		}
	}
endif;