File: /home/accemeff/vendor/craftcms/cms/src/fields/PlainText.php
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license https://craftcms.github.io/license/
*/
namespace craft\fields;
use Craft;
use craft\base\ElementInterface;
use craft\base\Field;
use craft\base\PreviewableFieldInterface;
use craft\helpers\Db;
use LitEmoji\LitEmoji;
use yii\db\Schema;
/**
* PlainText represents a Plain Text field.
*
* @author Pixel & Tonic, Inc. <support@pixelandtonic.com>
* @since 3.0
*/
class PlainText extends Field implements PreviewableFieldInterface
{
// Static
// =========================================================================
/**
* @inheritdoc
*/
public static function displayName(): string
{
return Craft::t('app', 'Plain Text');
}
// Properties
// =========================================================================
/**
* @var string|null The input’s placeholder text
*/
public $placeholder;
/**
* @var bool Whether the input should use monospace font
*/
public $code = false;
/**
* @var bool Whether the input should allow line breaks
*/
public $multiline = false;
/**
* @var int The minimum number of rows the input should have, if multi-line
*/
public $initialRows = 4;
/**
* @var int|null The maximum number of characters allowed in the field
*/
public $charLimit;
/**
* @var string The type of database column the field should have in the content table
*/
public $columnType = Schema::TYPE_TEXT;
// Public Methods
// =========================================================================
/**
* @inheritdoc
*/
public function __construct(array $config = [])
{
// This existed at one point way back in the day.
if (isset($config['maxLengthUnit'])) {
unset($config['maxLengthUnit']);
}
parent::__construct($config);
}
/**
* @inheritdoc
*/
public function rules()
{
$rules = parent::rules();
$rules[] = [['initialRows', 'charLimit'], 'integer', 'min' => 1];
$rules[] = [['charLimit'], 'validateCharLimit'];
return $rules;
}
/**
* Validates that the Character Limit isn't set to something higher than the Column Type will hold.
*
* @param string $attribute
*/
public function validateCharLimit(string $attribute)
{
if ($this->charLimit) {
$columnTypeMax = Db::getTextualColumnStorageCapacity($this->columnType);
if ($columnTypeMax && $columnTypeMax < $this->charLimit) {
$this->addError($attribute, Craft::t('app', 'Character Limit is too big for your chosen Column Type.'));
}
}
}
/**
* @inheritdoc
*/
public function getSettingsHtml()
{
return Craft::$app->getView()->renderTemplate('_components/fieldtypes/PlainText/settings',
[
'field' => $this
]);
}
/**
* @inheritdoc
*/
public function getContentColumnType(): string
{
return $this->columnType;
}
/**
* @inheritdoc
*/
public function normalizeValue($value, ElementInterface $element = null)
{
if ($value !== null) {
$value = LitEmoji::shortcodeToUnicode($value);
$value = trim(preg_replace('/\R/u', "\n", $value));
}
return $value !== '' ? $value : null;
}
/**
* @inheritdoc
*/
public function getInputHtml($value, ElementInterface $element = null): string
{
return Craft::$app->getView()->renderTemplate('_components/fieldtypes/PlainText/input',
[
'name' => $this->handle,
'value' => $value,
'field' => $this,
]);
}
/**
* @inheritdoc
*/
public function getElementValidationRules(): array
{
return [
['string', 'max' => $this->charLimit ?: null],
];
}
/**
* @inheritdoc
*/
public function serializeValue($value, ElementInterface $element = null)
{
if ($value !== null) {
$value = LitEmoji::unicodeToShortcode($value);
}
return $value;
}
/**
* @inheritdoc
*/
public function getSearchKeywords($value, ElementInterface $element): string
{
$value = (string)$value;
$value = LitEmoji::unicodeToShortcode($value);
return $value;
}
}