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_model = new shopFeatureModel();
     if ($type_id = waRequest::get('type_id')) {
         $features = $feature_model->getByType($type_id, 'id');
     } else {
         $features = $feature_model->getAll('id');
     }
     $selectable = array();
     foreach ($features as $f_id => $f) {
         if ($f['selectable']) {
             $selectable[$f_id] = $f;
         }
     }
     if ($selectable) {
         $selectable = $feature_model->getValues($selectable);
         foreach ($selectable as $f_id => $f) {
             $f['values'] = array_values($f['values']);
             $f['values']['_element'] = 'value';
             $features[$f_id] = $f;
         }
     }
     $this->response = $features;
     $this->response['_element'] = 'feature';
 }
 public function getFeatures(shopProduct $product)
 {
     $features_model = new shopFeatureModel();
     $product_features_model = new shopProductFeaturesModel();
     $features = array();
     foreach ($features_model->getByType($product->type_id, 'code', true) as $f) {
         if ($f['multiple'] || $f['code'] == 'weight') {
             $features[$f['code']] = $f;
         }
     }
     // attach values
     $features = $features_model->getValues($features);
     return $features;
 }
 public function execute()
 {
     if ($id = waRequest::get('id', 0, waRequest::TYPE_INT)) {
         #load product
         $this->view->assign('product', $product = new shopProduct($id));
         #load product types
         $type_model = new shopTypeModel();
         $this->view->assign('product_types', $product_types = $type_model->getAll($type_model->getTableId(), true));
         if ($param = waRequest::request('param', array(), waRequest::TYPE_ARRAY_INT)) {
             $type_id = reset($param);
             if (!isset($product_types[$type_id])) {
                 $type_id = $product->type_id;
             }
         } else {
             $type_id = $product->type_id;
         }
         $this->view->assign('type_id', $type_id);
         #load feature's values
         $model = new shopFeatureModel();
         $changed_features = array();
         if ($data = waRequest::post('product')) {
             $changed_features = empty($data['features']) || !is_array($data['features']) ? array() : $data['features'];
             foreach ($changed_features as $code => $value) {
                 if (isset($product->features[$code])) {
                     if (is_array($value)) {
                         $intersect = array_unique(array_merge($value, (array) $product->features[$code]));
                         if (count($value) == count($intersect)) {
                             unset($changed_features[$code]);
                         }
                     } elseif ($value === $product->features[$code]) {
                         unset($changed_features[$code]);
                     }
                 }
             }
         }
         #load changed feature's values
         $this->view->assign('changed_features', $changed_features);
         $codes = array_keys($product->features);
         foreach ($changed_features as $code => $value) {
             if ($value !== '') {
                 $codes[] = $code;
             }
         }
         $codes = array_unique($codes);
         $features = $model->getByType($type_id, 'code');
         foreach ($features as $code => &$feature) {
             $feature['internal'] = true;
             $key = array_search($code, $codes);
             if ($key !== false) {
                 unset($codes[$key]);
             }
         }
         unset($feature);
         if ($codes) {
             $features += $model->getByField('code', $codes, 'code');
         }
         foreach ($features as $code => &$feature) {
             $feature['feature_id'] = intval($feature['id']);
         }
         unset($feature);
         $features = $model->getValues($features);
         $this->view->assign('features', $features);
     }
 }