public function autoComplete() { $f = new ARSelectFilter(); $f->setLimit(20); $resp = array(); $field = $this->request->get('field'); if ('specField_' == substr($field, 0, 10)) { list($foo, $id) = explode('_', $field); $handle = new ARFieldHandle('EavStringValue', 'value'); $locale = $this->locale->getLocaleCode(); $searchHandle = MultilingualObject::getLangSearchHandle($handle, $locale); $f->setCondition(new EqualsCond(new ARFieldHandle('EavStringValue', 'fieldID'), $id)); $f->mergeCondition(new LikeCond($handle, '%:"' . $this->request->get($field) . '%')); $f->mergeCondition(new LikeCond($searchHandle, $this->request->get($field) . '%')); $f->setOrder($searchHandle, 'ASC'); $results = ActiveRecordModel::getRecordSet('EavStringValue', $f); foreach ($results as $value) { $resp[$value->getValueByLang('value', $locale, MultilingualObject::NO_DEFAULT_VALUE)] = true; } $resp = array_keys($resp); } return new AutoCompleteResponse($resp); }
protected function importAttributes(ActiveRecordModel $instance, $record, $fields, $attrIdentifier = 'eavField') { if (isset($fields[$attrIdentifier])) { $impReq = new Request(); $fieldClass = ucfirst($attrIdentifier); $valueClass = 'eavField' == $attrIdentifier ? 'EavValue' : $fieldClass . 'Value'; foreach ($fields[$attrIdentifier] as $specFieldID => $csvIndex) { if (empty($record[$csvIndex])) { continue; } $attr = ActiveRecordModel::getInstanceByID($fieldClass, $specFieldID, ActiveRecord::LOAD_DATA); if ($attr->isSimpleNumbers()) { $impReq->set($attr->getFormFieldName(), (double) $record[$csvIndex]); } else { if ($attr->isSelector()) { if ($attr->isMultiValue->get()) { $values = explode(',', $record[$csvIndex]); } else { $values = array($record[$csvIndex]); } foreach ($values as $fieldValue) { $fieldValue = trim($fieldValue); $f = new ARSelectFilter(new LikeCond(MultilingualObject::getLangSearchHandle(new ARFieldHandle($valueClass, 'value'), $this->application->getDefaultLanguageCode()), $fieldValue . '%')); $f->setLimit(1); if (!($value = $attr->getRelatedRecordSet($valueClass, $f)->shift())) { $value = call_user_func_array(array($valueClass, 'getNewInstance'), array($attr)); if ($attr->type->get() == EavFieldCommon::TYPE_NUMBERS_SELECTOR) { $value->value->set($fieldValue); } else { $value->setValueByLang('value', $this->application->getDefaultLanguageCode(), $fieldValue); } $value->save(); } if (!$attr->isMultiValue->get()) { $impReq->set($attr->getFormFieldName(), $value->getID()); } else { $impReq->set($value->getFormFieldName(), true); } } } else { $impReq->set($attr->getFormFieldName(), $record[$csvIndex]); } } } $instance->loadRequestData($impReq); $instance->save(); } }