<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/

defined('_JEXEC') or die;

use Joomla\CMS\Factory;

require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/field.php';

class RSFormProFieldPreview extends RSFormProField
{
	// backend preview
	public function getPreviewInput()
	{
		$attachedField = '{value}';
		if ($data = $this->getAttachedFieldData())
		{
			$attachedField = $data['NAME'];
		}

		$value = $this->getProperty('TEXT', '');

		return '<pre class="rsfp-preview-freetext">'.str_replace('{value}', '<em>' . $attachedField . '</em>', $this->escape($value)).'</pre>';
	}
	
	// functions used for rendering in front view
	public function getFormInput()
	{
		if ($data = $this->getAttachedFieldData())
		{
			$options = array(
				'previewId' => $this->componentId,
				'fieldId' 	=> $data['componentId'],
				'fieldName' => $data['NAME'],
				'formId' 	=> $this->formId,
				'separator' => static::getFormSeparator($this->formId)
			);
			if (isset($data['DATESEPARATOR']))
			{
				$options['separator'] = $data['DATESEPARATOR'];
			}
			if (isset($data['FILESSEPARATOR']))
			{
				$options['separator'] = $data['FILESSEPARATOR'];
			}

			$this->addScriptDeclaration('RSFormPro.previewFields.elements.push(' . json_encode($options) . ');');
			$this->addScriptDeclaration('RSFormProUtils.addEvent(window, \'load\', function() { window.setTimeout(RSFormPro.previewFields.attachEvents, 1); });');
		}

		$html = $this->getProperty('TEXT', '');
		$html = str_replace('{value}', '<span id="preview-' . $this->componentId . '"></span>', $html);
		
		return $html;
	}

	protected function getAttachedFieldData()
	{
		if ($field = $this->getProperty('SELECTFIELD'))
		{
			if ($data = RSFormProHelper::getComponentProperties($field))
			{
				return $data;
			}
		}

		return false;
	}

	protected static function getFormSeparator($formId)
	{
		static $cache = array();

		if (!isset($cache[$formId]))
		{
			$db = Factory::getDbo();
			$query = $db->getQuery(true)
				->select($db->qn('MultipleSeparator'))
				->from($db->qn('#__rsform_forms'))
				->where($db->qn('FormId') . ' = ' . $db->q($formId));
			$cache[$formId] = str_replace(array('\n', '\r', '\t'), array("\n", "\r", "\t"), $db->setQuery($query)->loadResult());
		}

		return $cache[$formId];
	}
}