public function execute() { if (!$this->getUser()->getRights('shop', 'settings')) { throw new waRightsException(_w('Access denied')); } $types_per_page = $this->getConfig()->getOption('types_per_page'); $values_per_feature = 7; $type_model = new shopTypeModel(); $type_features_model = new shopTypeFeaturesModel(); $feature_model = new shopFeatureModel(); $types = $type_model->getAll($type_model->getTableId(), true); $type_features_model->countFeatures($types); $show_all_features = $feature_model->countAll() < $this->getConfig()->getOption('features_per_page'); if ($show_all_features) { $feature_model = new shopFeatureModel(); if ($features = $feature_model->getFeatures(true, null, 'id', $values_per_feature)) { $show_all_features = count($features); $type_features_model->fillTypes($features, $types); shopFeatureModel::appendTypeNames($features); } } else { $features = array(); } $this->view->assign('type_templates', shopTypeModel::getTemplates()); $this->view->assign('show_all_features', $show_all_features); $this->view->assign('show_all_types', count($types) - $types_per_page < 3); $this->view->assign('types_per_page', $types_per_page); $this->view->assign('values_per_feature', $values_per_feature); $this->view->assign('icons', (array) $this->getConfig()->getOption('type_icons')); $this->view->assign('product_types', $types); $this->view->assign('features', $features); }
public function execute() { if (!$this->getUser()->getRights('shop', 'settings')) { throw new waRightsException(_w('Access denied')); } $feature_model = new shopFeatureModel(); $values_per_feature = 7; $type = waRequest::get('type', waRequest::TYPE_STRING, ''); if ($type_id = intval($type)) { $features = $feature_model->getByType($type_id, 'id', $values_per_feature); } else { if ($type === 'empty') { $features = $feature_model->getByType(null, 'id', $values_per_feature); } elseif ($type === '') { $features = $feature_model->getFeatures(true, null, 'id', $values_per_feature); } else { $features = $feature_model->getByType(0, 'id', $values_per_feature); } } if ($features) { shopFeatureModel::appendTypeNames($features); $type_features_model = new shopTypeFeaturesModel(); $type_features_model->fillTypes($features); } $this->view->assign('features', $features); $this->view->assign('values_per_feature', $values_per_feature); }
public function execute() { $feature_id = waRequest::post('feature_id'); $feature_model = new shopFeatureModel(); $feature = $feature_model->getById($feature_id); if (!$feature) { throw new waException(_w('Unknown feature')); } if (waRequest::post('subtype')) { $to = waRequest::post('subtype'); } else { $to = waRequest::post('type'); } $to = array('type' => $to, 'selectable' => (int) waRequest::post('selectable', 0, waRequest::TYPE_INT), 'multiple' => (int) waRequest::post('multiple', 0, waRequest::TYPE_INT)); $result = shopFeatureValuesConverter::run($feature_id, $to); if (!$result) { $this->errors[] = _w('Feature type conversion is not allowed or failed'); } else { if ($feature = $feature_model->getById($feature_id)) { $this->response = array($feature_id => &$feature); $feature['selectable'] = (int) $feature['selectable']; $feature['multiple'] = (int) $feature['multiple']; if ($feature['selectable']) { $this->response = $feature_model->getValues($this->response, true); $sort = 0; foreach ($feature['values'] as $id => &$value) { if (!is_object($value)) { $value = array('id' => $id, 'value' => $value, 'sort' => $sort++); unset($value); } else { if (method_exists($value, 'getRaw')) { $value = $value->getRaw(); } else { $value = array('id' => $id, 'value' => (string) $value, 'sort' => $sort++); } } } $feature['values'] = array_values($feature['values']); } shopFeatureModel::appendTypeNames($this->response); $type_features_model = new shopTypeFeaturesModel(); $type_features_model->fillTypes($this->response); $feature['types'] = array_keys($feature['types']); sort($feature['types']); } } }
/** * @param shopProduct $product * @return array|bool * @example <pre> * array( * 'feature_1'=>array( * 'selected'=>int, * 'values'=>array( * %value_id%=> array( * 'value_id'=>int, * 'value'=>string, * 'selected'=>bool, * ), * ), * ), * ) * </pre> */ public function getData(shopProduct $product) { $feature_model = new shopFeatureModel(); if ($product->sku_type == shopProductModel::SKU_TYPE_SELECTABLE) { $selected = $this->getByProduct($product->id); $env = wa()->getEnv(); if ($env == 'backend') { $features = $feature_model->getMultipleSelectableFeaturesByType($product->type_id); } else { $features = $feature_model->getById(array_keys($selected)); if ($product->type_id) { $types = array($product->type_id => true); $type_features_model = new shopTypeFeaturesModel(); $type_features_model->fillTypes($features, $types); foreach ($features as &$feature) { unset($feature['types']); $feature['sort'] = ifset($feature['sort'][$product->type_id]); unset($feature); } uasort($features, create_function('$a,$b', 'return max(-1,min(1,$a["sort"]-$b["sort"]));')); } } // attach values $features = $feature_model->getValues($features); foreach ($features as &$f) { $count = 0; foreach ($f['values'] as $id => &$v) { $is_selected = isset($selected[$f['id']][$id]); if ($env == 'backend') { if (is_object($v)) { $v['selected'] = $is_selected; } else { $v = array('value' => htmlentities((string) $v, ENT_NOQUOTES, 'utf-8'), 'selected' => $is_selected); } unset($v); if ($is_selected) { $count += 1; } } elseif (!$is_selected) { unset($f['values'][$id]); } } $f['selected'] = $count; unset($f); } } else { if (wa()->getEnv() == 'backend') { $features = $feature_model->isTypeMultipleSelectable($product->type_id); } else { $features = array(); } } return $features; //Frontend $data = $feature_model->getValues($data); foreach ($data as $code => $f) { foreach ($f['values'] as $id => $v) { if (!isset($v_id, $selected[$code][$id])) { unset($data[$code]['values'][$id]); } } } return $data; }