public static function deleteByID($className, $id, $foreignKeyName) { $inst = ActiveRecordModel::getInstanceById($className, $id, ActiveRecordModel::LOAD_DATA); $inst->getOwner()->load(); $inst->deleteImageFiles(); // check if main image is being deleted $owner = $inst->getOwner(); $owner->load(array(get_class($inst))); if ($owner->defaultImage->get()->getID() == $id) { // set next image (by position) as the main image $f = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle(get_class($inst), $foreignKeyName), $owner->getID()); $cond->addAND(new NotEqualsCond(new ARFieldHandle(get_class($inst), 'ID'), $inst->getID())); $f->setCondition($cond); $f->setOrder(new ARFieldHandle(get_class($inst), 'position')); $f->setLimit(1); $newDefaultImage = ActiveRecordModel::getRecordSet(get_class($inst), $f); if ($newDefaultImage->size() > 0) { $owner->defaultImage->set($newDefaultImage->get(0)); $owner->save(); } } ActiveRecordModel::executeUpdate('SET FOREIGN_KEY_CHECKS=0'); ActiveRecordModel::executeUpdate('UPDATE ' . $className . ' SET ' . $foreignKeyName . '=NULL , protectedFields="|' . $foreignKeyName . '|" WHERE ID=' . $id); //return parent::deleteByID($className, $id); }
private function getRatingTypeFilter(Product $product) { $path = $product->getCategory()->getPathNodeArray(Category::INCLUDE_ROOT_NODE); $filter = new ARSelectFilter(); $filter->setOrder(new ARFieldHandle("Category", "lft"), 'ASC'); $filter->setOrder(new ARFieldHandle(__CLASS__, "position"), 'ASC'); $cond = new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $product->getCategory()->getID()); foreach ($path as $node) { $cond->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $node['ID'])); } $filter->setCondition($cond); return $filter; }
public static function getInstance(Product $product, Currency $currency) { $filter = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle('ProductPrice', 'productID'), $product->getID()); $cond->addAND(new EqualsCond(new ARFieldHandle('ProductPrice', 'currencyID'), $currency->getID())); $filter->setCondition($cond); $set = parent::getRecordSet('ProductPrice', $filter); if ($set->size() > 0) { $instance = $set->get(0); } else { $instance = self::getNewInstance($product, $currency); } return $instance; }
public static function getStateIDByName($countryCode, $name) { $f = new ARSelectFilter(); $f->setCondition(new EqualsCond(new ARFieldHandle('State', 'countryID'), $countryCode)); $nameCond = new EqualsCond(new ARFieldHandle('State', 'name'), $name); $nameCond->addOr(new EqualsCond(new ARFieldHandle('State', 'code'), $name)); $f->mergeCondition($nameCond); $f->setOrder(new ARFieldHandle('State', 'name')); $f->setLimit(1); $stateArray = ActiveRecordModel::getRecordSetArray('State', $f); if ($stateArray) { return $stateArray[0]['ID']; } else { return null; } }
public static function addNewRolesNames($roleNames, $deleteOther = false) { // unset meta- roles if ($i = array_search('login', $roleNames)) { unset($roleNames[$i]); } if (!is_array($roleNames) || empty($roleNames)) { return; } $filter = new ARSelectFilter(); $deleteFilter = new ARDeleteFilter(); $condition = new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]); $deleteCondition = new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]); foreach ($roleNames as $roleName) { $condition->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName)); $deleteCondition->addAnd(new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName)); } $filter->setCondition($condition); $deleteFilter->setCondition($deleteCondition); if ($deleteOther) { self::deleteRecordSet(__CLASS__, $deleteFilter); } // Find new roles $invertedRoleNames = array_flip($roleNames); foreach (self::getRecordSet($filter) as $role) { if (isset($invertedRoleNames[$role->name->get()])) { unset($invertedRoleNames[$role->name->get()]); } } // Add new roles to database foreach ($invertedRoleNames as $role => $value) { if (!empty($role)) { $newRole = Role::getNewInstance($role); $newRole->save(); } } }
private function isRated(Product $product, $isRating = false) { if (!empty($_COOKIE['rating_' . $product->getID()])) { return true; } if ($isRating) { ClassLoader::importNow("application.helper.getDateFromString"); $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('ProductRating', 'productID'), $product->getID())); if (!$this->user->isAnonymous()) { $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'userID'), $this->user->getID()); } else { if ($hours = $this->config->get('RATING_SAME_IP_TIME')) { $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'ip'), $this->request->getIPLong()); $cond->addAnd(new MoreThanCond(new ARFieldHandle('ProductRating', 'dateCreated'), getDateFromString('-' . $hours . ' hours'))); } } if (isset($cond)) { $f->mergeCondition($cond); return ActiveRecordModel::getRecordCount('ProductRating', $f) > 0; } } }
public function info() { ClassLoader::importNow("application.helper.getDateFromString"); $product = Product::getInstanceById($this->request->get('id'), ActiveRecord::LOAD_DATA, array('DefaultImage' => 'ProductImage', 'Manufacturer', 'Category')); $thisMonth = date('m'); $lastMonth = date('Y-m', strtotime(date('m') . '/15 -1 month')); $periods = array('_last_1_h' => "-1 hours | now", '_last_3_h' => "-3 hours | now", '_last_6_h' => "-6 hours | now", '_last_12_h' => "-12 hours | now", '_last_24_h' => "-24 hours | now", '_last_3_d' => "-3 days | now", '_this_week' => "w:Monday | now", '_last_week' => "w:Monday ~ -1 week | w:Monday", '_this_month' => $thisMonth . "/1 | now", '_last_month' => $lastMonth . "-1 | " . $lastMonth . "/1", '_this_year' => "January 1 | now", '_last_year' => "January 1 last year | January 1", '_overall' => "now | now"); $purchaseStats = array(); $prevCount = 0; foreach ($periods as $key => $period) { list($from, $to) = explode(' | ', $period); $cond = new EqualsCond(new ARFieldHandle('OrderedItem', 'productID'), $product->getID()); if ('now' != $from) { $cond->addAND(new EqualsOrMoreCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($from))); } if ('now' != $to) { $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($to))); } $f = new ARSelectFilter($cond); $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), true)); $f->removeFieldList(); $f->addField('SUM(OrderedItem.count)'); $query = new ARSelectQueryBuilder(); $query->setFilter($f); $query->includeTable('OrderedItem'); $query->joinTable('CustomerOrder', 'OrderedItem', 'ID', 'customerOrderID'); if (($count = array_shift(array_shift(ActiveRecordModel::getDataBySql($query->getPreparedStatement(ActiveRecord::getDBConnection()))))) && ($count > $prevCount || '_overall' == $key)) { $purchaseStats[$key] = $count; } if ($count > $prevCount) { $prevCount = $count; } } $response = new ActionResponse(); $response->set('together', $product->getProductsPurchasedTogether(10)); $response->set('product', $product->toArray()); $response->set('purchaseStats', $purchaseStats); return $response; }
private static function getCategoryCondition(Category $category) { $own = new EqualsCond(new ARFieldHandle(__CLASS__, 'categoryID'), $category->getID()); $parent = new EqualsOrLessCond(new ARFieldHandle('Category', 'lft'), $category->lft->get()); $parent->addAND(new EqualsOrMoreCond(new ARFieldHandle('Category', 'rgt'), $category->rgt->get())); $parent->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isSubcategories'), true)); $own->addOR($parent); return $own; }
/** * Crates a select filter for specification fields related to category * * @param bool $includeParentFields * @return ARSelectFilter * @todo Order by categories (top-level category fields go first) */ private function getSpecificationFilter($includeParentFields) { $filter = new ARSelectFilter(); $filter->setOrder(new ARFieldHandle("SpecFieldGroup", "position"), 'ASC'); $filter->setOrder(new ARFieldHandle("SpecField", "position"), 'ASC'); $cond = new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $this->getID()); if ($includeParentFields) { foreach (self::getPathNodeArray(Category::INCLUDE_ROOT_NODE) as $node) { $cond->addOR(new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $node['ID'])); } } $filter->setCondition($cond); return $filter; }
private function getTypeCondition($type) { switch ($type) { case self::TYPE_ALL: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); break; case self::TYPE_CURRENT: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING); // @todo fix NEW status = NULL bug $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status"))); $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING)); $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW)); $cond->addAND($cond2); break; case self::TYPE_NEW: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW); // @todo fix NEW status = NULL bug $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status"))); $cond->addAND($cond2); break; case self::TYPE_PROCESSING: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_AWAITING: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_SHIPPED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_SHIPPED); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_RETURNED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_RETURNED); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_CANCELLED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), true); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_CARTS: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 0); break; case self::TYPE_RECURRING: $cond = new AndChainCondition(array(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1), new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1), new OrChainCondition(array(new MoreThanCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0), new IsNullCond(new ARFieldHandle('CustomerOrder', 'isRecurring')))))); break; case self::TYPE_RECURRING_ALL: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1)); $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID'))); break; case self::TYPE_RECURRING_EXPIRED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1); $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0)); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1)); $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID'))); break; case self::TYPE_RECURRING_CANCELLED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isCancelled'), 1)); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1)); $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID'))); break; case self::TYPE_RECURRING_WITH_PARENT: $parentID = $this->getRequest()->get('parentID'); if (!$parentID) { $parentID = -1; } $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'parentID'), $parentID)); break; default: return; } $filters = $this->request->get('filters'); if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED, self::TYPE_RECURRING_CANCELLED))) { $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0)); } // $f = new ARSelectFilter(); // $f->setCondition($cond); // pp($f->createString()); return $cond; }
private function updateRoles() { @unlink($this->getRoleCacheFile()); if (count($this->canceledRoles) > 0) { // Delete canceled associations $deleteFilter = new ARDeleteFilter(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->canceledRoles)->getID()); foreach ($this->canceledRoles as $key => $role) { if ($role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->canceledRoles[$key]); } } $condition->addAND($roleConditions); $deleteFilter->setCondition($condition); if (!empty($this->canceledRoles)) { AccessControlAssociation::deleteRecordSet('AccessControlAssociation', $deleteFilter); } } if (count($this->appliedRoles) > 0 && is_object(reset($this->appliedRoles))) { // adding new associations is a bit trickier // First, find all nodes that are already in DB // There is no point to apply them $appliedRolesFilter = new ARSelectFilter(); $appliedIDs = array(); $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID()); $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->appliedRoles)->getID()); foreach ($this->appliedRoles as $key => $role) { if (is_object($role) && $role->isExistingRecord()) { $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID())); } else { unset($this->appliedRoles[$key]); } } $condition->addAND($roleConditions); $appliedRolesFilter->setCondition($condition); // Unset already applied nodes foreach (AccessControlAssociation::getRecordSetByUserGroup($this, $appliedRolesFilter, self::LOAD_REFERENCES) as $assoc) { unset($this->appliedRoles[$assoc->role->get()->getID()]); } // Apply roles foreach ($this->appliedRoles as $role) { $assoc = AccessControlAssociation::getNewInstance($this, $role); $assoc->save(); } } }
private function getTypeCondition($type) { switch ($type) { case self::TYPE_ALL: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); break; case self::TYPE_CURRENT: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING); // @todo fix NEW status = NULL bug $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status"))); $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING)); $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW)); $cond->addAND($cond2); break; case self::TYPE_NEW: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1); $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW); // @todo fix NEW status = NULL bug $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status"))); $cond->addAND($cond2); break; case self::TYPE_PROCESSING: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_AWAITING: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_SHIPPED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_SHIPPED); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_RETURNED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_RETURNED); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_CANCELLED: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), true); $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1)); break; case self::TYPE_CARTS: $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 0); break; default: return; } $filters = $this->request->get('filters'); if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED))) { $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0)); } return $cond; }
protected final function loadData($loadReferencedRecords, ARSelectQueryBuilder $query) { $className = get_class($this); $PKCond = null; foreach ($this->schema->getPrimaryKeyList() as $name => $PK) { if ($PK instanceof ARForeignKey) { $PKValue = $this->data[$name]->get()->getID(); } else { $PKValue = $this->data[$name]->get(); } if ($PKCond == null) { $PKCond = new EqualsCond(new ARFieldHandle($className, $name), $PKValue); } else { $PKCond->addAND(new EqualsCond(new ARFieldHandle($className, $name), $PKValue)); } } $query->getFilter()->mergeCondition($PKCond); $rowDataArray = self::fetchDataFromDB($query); if (empty($rowDataArray)) { throw new ARNotFoundException($className, $this->getID()); } if (count($rowDataArray) > 1) { throw new ARException("Unexpected behavior: got more than one record from a database while loading single instance data"); } $parsedRowData = self::prepareDataArray($className, $this->schema, $rowDataArray[0], $loadReferencedRecords); $this->createDataAccessVariables($parsedRowData['recordData'], $this->getID()); if (!empty($parsedRowData['miscData'])) { $this->miscRecordDataHandler($parsedRowData['miscData']); } }
private function getSibling($count = 0, $direction = self::DIRECTION_RIGHT, $loadReferencedRecords = false) { if (!$this->isLoaded()) { $this->load(); } $className = get_class($this); $filter = new ARSelectFilter(); $cond = new EqualsCond(new ARFieldHandle($className, self::PARENT_NODE_FIELD_NAME), $this->getField(self::PARENT_NODE_FIELD_NAME)->get()->getID()); $cond->addAND(new OperatorCond(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), $this->getField(self::LEFT_NODE_FIELD_NAME)->get(), self::DIRECTION_RIGHT == $direction ? "<" : ">")); $filter->setCondition($cond); $filter->setOrder(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), self::DIRECTION_RIGHT == $direction ? ARSelectFilter::ORDER_DESC : ARSelectFilter::ORDER_ASC); $filter->setLimit(1, $count); $recordSet = ActiveRecord::getRecordSet($className, $filter, $loadReferencedRecords); foreach ($recordSet as $record) { return $record; } return null; }
public static function getInstanceByCoupon($code) { $c = new EqualsCond(new ARFieldHandle(__CLASS__, 'couponCode'), $code); $c->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isEnabled'), 1)); $set = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($c)); if ($set->size()) { return $set->get(0); } }
/** * Gets an instance of user by using login information * * @param string $email * @param string $password * @return mixed User instance or null if user is not found */ public static function getInstanceByLogin($email, $password) { $loginCond = new EqualsCond(new ARFieldHandle('User', 'email'), $email); //$loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'password'), md5($password))); $loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'isEnabled'), true)); $recordSet = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($loginCond)); if (!$recordSet->size()) { return null; } else { $user = $recordSet->get(0); return $user->isPasswordValid($password) ? $user : null; } }
/** * Validates specification field form * * @param array $values List of values to validate. * @param array $config * @return array List of all errors */ protected function validate($values = array(), $languageCodes) { $errors = array(); if (!isset($values['name']) || $values['name'] == '') { $errors['name'] = '_error_name_empty'; } if (!isset($values['handle']) || $values['handle'] == '' || preg_match('/[^\\w\\d_.]/', $values['handle'])) { $errors['handle'] = '_error_handle_invalid'; } else { $values['ID'] = !isset($values['ID']) ? -1 : $values['ID']; $filter = new ARSelectFilter(); $handleCond = new EqualsCond(new ARFieldHandle($this->getFieldClass(), 'handle'), $values['handle']); $handleCond->addAND(new EqualsCond(new ARFieldHandle($this->getFieldClass(), call_user_func(array($this->getFieldClass(), 'getOwnerIDColumnName'))), $values['categoryID'])); $handleCond->addAND(new NotEqualsCond(new ARFieldHandle($this->getFieldClass(), 'ID'), $values['ID'])); $filter->setCondition($handleCond); if (count(ActiveRecordModel::getRecordSetArray($this->getFieldClass(), $filter)) > 0) { $errors['handle'] = '_error_handle_exists'; } } if (!isset($values['handle']) || $values['handle'] == '') { $errors['handle'] = '_error_handle_empty'; } if (in_array($values['type'], EavFieldCommon::getSelectorValueTypes()) && isset($values['values']) && is_array($values['values'])) { $countValues = count($values['values']); $i = 0; foreach ($values['values'] as $key => $v) { $i++; if ($countValues == $i && preg_match('/new/', $key) && empty($v[$languageCodes[0]])) { continue; } else { if (!strlen($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_empty'; } else { if (EavFieldCommon::getDataTypeFromType($values['type']) == 2 && !is_numeric($v[$languageCodes[0]])) { $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_is_not_a_number'; } } } } } return $errors; }