File: /home/accemeff/vendor/craftcms/cms/src/fields/Categories.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\elements\Category;
use craft\helpers\ArrayHelper;
use craft\helpers\ElementHelper;
/**
* Categories represents a Categories field.
*
* @author Pixel & Tonic, Inc. <support@pixelandtonic.com>
* @since 3.0
*/
class Categories extends BaseRelationField
{
// Static
// =========================================================================
/**
* @inheritdoc
*/
public static function displayName(): string
{
return Craft::t('app', 'Categories');
}
/**
* @inheritdoc
*/
protected static function elementType(): string
{
return Category::class;
}
/**
* @inheritdoc
*/
public static function defaultSelectionLabel(): string
{
return Craft::t('app', 'Add a category');
}
// Properties
// =========================================================================
/**
* @var int|null Branch limit
*/
public $branchLimit;
// Public Methods
// =========================================================================
/**
* @inheritdoc
*/
public function init()
{
parent::init();
$this->allowLimit = false;
$this->allowMultipleSources = false;
$this->settingsTemplate = '_components/fieldtypes/Categories/settings';
$this->inputTemplate = '_components/fieldtypes/Categories/input';
$this->inputJsClass = 'Craft.CategorySelectInput';
$this->sortable = false;
}
/**
* @inheritdoc
*/
public function normalizeValue($value, ElementInterface $element = null)
{
if (is_array($value)) {
/** @var Category[] $categories */
$categories = Category::find()
->siteId($this->targetSiteId($element))
->id(array_values(array_filter($value)))
->anyStatus()
->all();
// Fill in any gaps
$categoriesService = Craft::$app->getCategories();
$categoriesService->fillGapsInCategories($categories);
// Enforce the branch limit
if ($this->branchLimit) {
$categoriesService->applyBranchLimitToCategories($categories, $this->branchLimit);
}
$value = ArrayHelper::getColumn($categories, 'id');
}
return parent::normalizeValue($value, $element);
}
/**
* @inheritdoc
*/
public function getInputHtml($value, ElementInterface $element = null): string
{
// Make sure the field is set to a valid category group
if ($this->source) {
$source = ElementHelper::findSource(static::elementType(), $this->source, 'field');
}
if (empty($source)) {
return '<p class="error">' . Craft::t('app', 'This field is not set to a valid category group.') . '</p>';
}
return parent::getInputHtml($value, $element);
}
/**
* @inheritdoc
*/
protected function inputTemplateVariables($value = null, ElementInterface $element = null): array
{
$variables = parent::inputTemplateVariables($value, $element);
$variables['branchLimit'] = $this->branchLimit;
return $variables;
}
}