Файл: concrete5.7.5.6/concrete/src/Attribute/Controller.php
Строк: 186
<?php
namespace ConcreteCoreAttribute;
use ConcreteCoreControllerAbstractController;
use ConcreteCoreSearchItemListDatabaseAttributedItemList;
use Core;
use ConcreteCoreAttributeView as AttributeTypeView;
use ConcreteCoreAttributeKeyCategory as AttributeKeyCategory;
class Controller extends AbstractController
{
protected $identifier;
/** @var ConcreteCoreAttributeKeyKey */
protected $attributeKey;
/** @var ConcreteCoreAttributeValueValue */
protected $attributeValue;
protected $searchIndexFieldDefinition;
protected $requestArray = false;
public function setRequestArray($array)
{
$this->requestArray = $array;
}
public function setAttributeKey($attributeKey)
{
$this->attributeKey = $attributeKey;
}
public function setAttributeValue($attributeValue)
{
$this->attributeValue = $attributeValue;
}
public function getAttributeKey()
{
return $this->attributeKey;
}
public function getAttributeValue()
{
return $this->attributeValue;
}
public function getAttributeType()
{
return $this->attributeType;
}
public function exportKey($ak)
{
return $ak;
}
public function importValue(SimpleXMLElement $akv)
{
if (isset($akv->value)) {
return (string) $akv->value;
}
}
public function exportValue(SimpleXMLElement $akv)
{
$val = $this->attributeValue->getValue();
if (is_object($val)) {
$val = (string) $val;
}
if (is_array($val)) {
$val = json_encode($val);
}
$cnode = $akv->addChild('value');
$node = dom_import_simplexml($cnode);
$no = $node->ownerDocument;
$node->appendChild($no->createCDataSection($val));
return $cnode;
}
public function importKey($akn)
{
}
protected function getAttributeValueID()
{
if (is_object($this->attributeValue)) {
return $this->attributeValue->getAttributeValueID();
}
}
public function filterByAttribute(AttributedItemList $list, $value, $comparison = '=')
{
$list->filter('ak_' . $this->attributeKey->getAttributeKeyHandle(), $value, $comparison);
}
public function field($fieldName)
{
return 'akID[' . $this->attributeKey->getAttributeKeyID() . '][' . $fieldName . ']';
}
public function label($customText = false)
{
if ($customText == false) {
$text = $this->attributeKey->getAttributeKeyDisplayName();
} else {
$text = $customText;
}
/** @var ConcreteCoreFormServiceForm $form */
$form = Core::make('helper/form');
print $form->label($this->field('value'), $text);
}
/**
* @param ConcreteCoreAttributeType $attributeType
*/
public function __construct($attributeType)
{
$this->identifier = $attributeType->getAttributeTypeID();
$this->attributeType = $attributeType;
$this->set('controller', $this);
}
public function post($field = false, $defaultValue = null)
{
// the only post that matters is the one for this attribute's name space
$req = ($this->requestArray == false) ? $_POST : $this->requestArray;
if (is_object($this->attributeKey) && isset($req['akID']) && is_array($req['akID'])) {
$p = $req['akID'][$this->attributeKey->getAttributeKeyID()];
if ($field) {
return $p[$field];
}
return $p;
}
return parent::post($field, $defaultValue);
}
public function requestFieldExists()
{
$req = ($this->requestArray == false) ? $_REQUEST : $this->requestArray;
if (is_object($this->attributeKey) && is_array($req['akID'])) {
return true;
}
return false;
}
public function request($field = false)
{
$req = ($this->requestArray == false) ? $_REQUEST : $this->requestArray;
if (is_object($this->attributeKey) && is_array($req['akID'])) {
$p = $req['akID'][$this->attributeKey->getAttributeKeyID()];
if ($field) {
return $p[$field];
}
return $p;
}
return parent::request($field);
}
public function getView()
{
if ($this->attributeValue) {
$av = new AttributeTypeView($this->attributeValue);
} else {
if ($this->attributeKey) {
$av = new AttributeTypeView($this->attributeKey);
} else {
$av = new AttributeTypeView($this->attributeType);
}
}
return $av;
}
public function getSearchIndexFieldDefinition()
{
return $this->searchIndexFieldDefinition;
}
public function setupAndRun($method)
{
$args = func_get_args();
$args = array_slice($args, 1);
if ($method) {
$this->task = $method;
}
if (method_exists($this, 'on_start')) {
$this->on_start($method);
}
if ($method == 'composer') {
$method = array('composer', 'form');
}
if ($method) {
$this->runTask($method, $args);
}
if (method_exists($this, 'on_before_render')) {
$this->on_before_render($method);
}
}
public function saveKey($data)
{
}
public function duplicateKey($newAK)
{
}
public function searchKeywords($keywords, $queryBuilder)
{
return $queryBuilder->expr()->like('ak_' . $this->attributeKey->getAttributeKeyHandle(), ':keywords');
}
/**
* Automatically run when an attribute key is added or updated.
*
* @param bool|array $args
*
* @return ConcreteCoreErrorError
*/
public function validateKey($args = false)
{
if ($args == false) {
$args = $this->post();
}
/** @var ConcreteCoreFormServiceValidation $val */
$val = Core::make('helper/validation/form');
/** @var ConcreteCoreValidationCSRFToken $valt */
$valt = Core::make('helper/validation/token');
$val->setData($args);
$val->addRequired("akHandle", t("Handle required."));
$val->addRequired("akName", t('Name required.'));
$val->addRequired("atID", t('Type required.'));
$val->test();
$error = $val->getError();
if (!$valt->validate('add_or_update_attribute')) {
$error->add($valt->getErrorMessage());
}
/** @var ConcreteCoreUtilityServiceValidationStrings $stringValidator */
$stringValidator = Core::make('helper/validation/strings');
if (!$stringValidator->handle($args['akHandle'])) {
$error->add(t('Attribute handles may only contain letters, numbers and underscore "_" characters'));
}
$akc = AttributeKeyCategory::getByID($args['akCategoryID']);
if (is_object($akc)) {
if ($akc->handleExists($args['akHandle'])) {
if (is_object($this->attributeKey)) {
$ak2 = $akc->getAttributeKeyByHandle($args['akHandle']);
if ($ak2->getAttributeKeyID() != $this->attributeKey->getAttributeKeyID()) {
$error->add(t("An attribute with the handle %s already exists.", $args['akHandle']));
}
} else {
$error->add(t("An attribute with the handle %s already exists.", $args['akHandle']));
}
}
} else {
$error->add('Invalid attribute category.');
}
return $error;
}
}