File: /home/accemeff/vendor/craftcms/cms/src/fields/Tags.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\Element;
use craft\base\ElementInterface;
use craft\elements\db\ElementQueryInterface;
use craft\elements\Tag;
use craft\models\TagGroup;
/**
* Tags represents a Tags field.
*
* @author Pixel & Tonic, Inc. <support@pixelandtonic.com>
* @since 3.0
*/
class Tags extends BaseRelationField
{
// Static
// =========================================================================
/**
* @inheritdoc
*/
public static function displayName(): string
{
return Craft::t('app', 'Tags');
}
/**
* @inheritdoc
*/
protected static function elementType(): string
{
return Tag::class;
}
/**
* @inheritdoc
*/
public static function defaultSelectionLabel(): string
{
return Craft::t('app', 'Add a tag');
}
// Properties
// =========================================================================
/**
* @var
*/
private $_tagGroupId;
// Public Methods
// =========================================================================
/**
* @inheritdoc
*/
public function init()
{
parent::init();
$this->allowMultipleSources = false;
$this->allowLimit = false;
}
/**
* @inheritdoc
*/
public function getInputHtml($value, ElementInterface $element = null): string
{
/** @var Element|null $element */
if ($element !== null && $element->hasEagerLoadedElements($this->handle)) {
$value = $element->getEagerLoadedElements($this->handle);
}
if ($value instanceof ElementQueryInterface) {
$value = $value
->anyStatus()
->all();
} else if (!is_array($value)) {
$value = [];
}
$tagGroup = $this->_getTagGroup();
if ($tagGroup) {
return Craft::$app->getView()->renderTemplate('_components/fieldtypes/Tags/input',
[
'elementType' => static::elementType(),
'id' => Craft::$app->getView()->formatInputId($this->handle),
'name' => $this->handle,
'elements' => $value,
'tagGroupId' => $tagGroup->id,
'targetSiteId' => $this->targetSiteId($element),
'sourceElementId' => $element !== null ? $element->id : null,
'selectionLabel' => $this->selectionLabel ? Craft::t('site', $this->selectionLabel) : static::defaultSelectionLabel(),
]);
}
return '<p class="error">' . Craft::t('app', 'This field is not set to a valid source.') . '</p>';
}
// Private Methods
// =========================================================================
/**
* Returns the tag group associated with this field.
*
* @return TagGroup|null
*/
private function _getTagGroup()
{
$tagGroupId = $this->_getTagGroupId();
if ($tagGroupId !== false) {
return Craft::$app->getTags()->getTagGroupByUid($tagGroupId);
}
return null;
}
/**
* Returns the tag group ID this field is associated with.
*
* @return int|false
*/
private function _getTagGroupId()
{
if ($this->_tagGroupId !== null) {
return $this->_tagGroupId;
}
if (!preg_match('/^taggroup:(([0-9a-f\-]+))$/', $this->source, $matches)) {
return $this->_tagGroupId = false;
}
return $this->_tagGroupId = $matches[1];
}
}