<?php
/*
 * Copyright (c) 2013, webvariants GbR, http://www.webvariants.de
 *
 * This file is released under the terms of the MIT license. You can find the
 * complete text in the attached LICENSE file or online at:
 *
 * http://www.opensource.org/licenses/mit-license.php
 */

/**
 * Datentyp "Einzeiliger Text"
 *
 * Dieser Datentyp kann bis zu 65k Zeichen lange einzeilige Strings als Werte
 * annehmen. Die Minimal- und Maximallänge kann dabei beschränkt werden.
 */
class _WV_Datatype_StringLine extends _WV_Datatype_Base_String implements WV_IDatatype {
	private static $autocomplete = null;

	public function renderForm(sly_Form $form, WV_IProperty $property, $value) {
		$value  = $this->decodeFormValue($property, $value);
		$params = $property->getParams();

		extract($this->deserializeParams($params));

		// Style vorberechnen

		$style = '';

		if (!empty($width)) $style[] = 'width:'.intval($width).'px';
		if (!empty($align)) $style[] = 'text-align:'.$align;
		if (!empty($css))   $style[] = $css;

		// Element einrichten

		$input = new sly_Form_Input_Text('property_'.$property->getID().'_value', $property->getTitle(), $value);

		$input->setMaxLength($maxlength);
		$input->addClass('property_errorable');
		$input->setMultilingual($property->isMultilingual());
		$input->setAttribute('style', implode(';', $style));

		if (!empty($hide)) $input->addFormRowClass('hide');

		// Autocomplete einrichten

		if (!empty($autocomplete)) {
			$layout = sly_Core::getLayout();
			$base   = sly_Core::getVersion('X.Y') === '0.6' ? '../data/dyn/public/developer_utils/' : sly_Util_AddOn::assetBaseUri('webvariants/developer-utils');

			$layout->addJavaScriptFile($base.'js/jquery.autocomplete.min.js');

			$input->addClass('devutils_autocomplete');
			$input->setAttribute('data-acparam', $autocomplete);
			$input->setAttribute('data-property', $property->getID());
		}

		if (!empty($choices)) {
			$layout = sly_Core::getLayout();
			$base   = sly_Core::getVersion('X.Y') === '0.6' ? '../data/dyn/public/developer_utils/' : sly_Util_AddOn::assetBaseUri('webvariants/developer-utils');

			$layout->addJavaScriptFile($base.'js/stringline-choices.js');

			$input->addClass('devutils_stringline_choices');
			$input->setAttribute('data-choices', json_encode($choices));

			if (!empty($choices_label)) {
				$input->setAttribute('data-choices_label', $choices_label);
			}
			if (!empty($choices_style_ul)) {
				$input->setAttribute('data-choices_style_ul', json_encode($choices_style_ul));
			}
		}

		// Element in Slice einhängen

		if (!empty($annotation)) {
			$input->setAnnotation($annotation);
		}

		WV_Datatype::setHelpTextOnElement($form, $input, $property);
		$form->add($input);
		return $form;
	}

	/**
	 * Autocomplete aktivieren
	 *
	 * Diese Methode aktiviert für den nächsten renderConfigForm-Aufruf die Option
	 * für das Autocomplete. Um die Funktionalität zu nutzen, muss der Name des
	 * später in renderForm() zu verwendenden GET-Parameters angegeben werden,
	 * damit ein AddOn anhand dieses Parameters die Suchanfrage entgegennehmen
	 * und auswerten kann.
	 *
	 * Nach dem Aufruf von renderConfigForm() wird die Einstellung wieder
	 * zurückgesetzt.
	 */
	public static function enableAutocomplete($queryParam) {
		self::$autocomplete = $queryParam;
	}
}
