Пример #1
0
 public function setValue($val)
 {
     if (!is_object($this->object)) {
         return false;
     }
     switch ($this->data_type) {
         case 'multiple':
             $fv = FieldsValues::model()->findAllByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id));
             $exists = array();
             $hasErrors = false;
             if (is_array($fv) && count($fv)) {
                 foreach ($fv as $item) {
                     if (!in_array($item->int_val, $val)) {
                         $item->delete();
                     } else {
                         $exists[] = $item->int_val;
                     }
                 }
             }
             if (is_array($val) && count($val)) {
                 foreach ($val as $v) {
                     if (!in_array($v, $exists)) {
                         $listItem = ListsItems::model()->findByPk($v);
                         if (is_object($listItem)) {
                             $newFieldValue = new FieldsValues();
                             $newFieldValue->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $v));
                             if (!$newFieldValue->save()) {
                                 $hasErrors = true;
                             }
                         }
                     }
                 }
             }
             return !$hasErrors;
         case 'list':
             $hasErrors = true;
             $fv = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => is_object($this->object) ? $this->object->id : 0));
             if (!is_object($fv)) {
                 $fv = new FieldsValues();
             }
             $v = ListsItems::model()->findByPk($val);
             if (is_object($v)) {
                 $fv->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $val));
                 if ($fv->save()) {
                     $hasErrors = false;
                 }
             }
             return !$hasErrors;
         case 'int':
         case 'bool':
         case 'date':
             $v = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id));
             if (!is_object($v)) {
                 $v = new FieldsValues();
             }
             $v->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "int_val" => $val));
             return $v->save();
         default:
             $v = FieldsValues::model()->findByAttributes(array("field_id" => $this->id, "object_id" => $this->object->id));
             if (!is_object($v)) {
                 $v = new FieldsValues();
             }
             $v->setAttributes(array("field_id" => $this->id, "object_id" => $this->object->id, "text_val" => $val));
             return $v->save();
     }
 }
Пример #2
0
 public function actionSearch1()
 {
     $objects = array();
     $criteria = new CDbCriteria();
     $criteria->alias = 'catalog_filtered_fields_values';
     $criteria->condition = "object_id > 0";
     if (isset($_REQUEST['data'])) {
         $criteria->condition = "";
         $data = $_REQUEST['data'];
         if (is_array($data) && count($data)) {
             foreach ($data as $fieldName => $items) {
                 $field = CatalogFilteredFields::model()->findByAttributes(array("category_id" => 1, "name" => $fieldName));
                 if (is_object($field) && is_array($items) && count($items)) {
                     foreach ($items as $item) {
                         if (is_numeric($item)) {
                             $criteria->addCondition("field_id = " . $field->id . " AND int_val = " . $item, "OR");
                         }
                     }
                 }
             }
         }
     }
     $criteria->group = "object_id";
     if (isset($_REQUEST['min_price']) && isset($_REQUEST['max_price'])) {
         $criteria->join = "LEFT JOIN `catalog_objects` ON `catalog_filtered_fields_values`.`object_id` = `catalog_objects`.`id`";
         $criteria->addBetweenCondition('price', CatalogObjects::convertPrice($_REQUEST['min_price']), CatalogObjects::convertPrice($_REQUEST['max_price']));
     }
     $objects = FieldsValues::model()->findAll($criteria);
     $this->renderPartial('objects', array('objects' => $objects));
 }
Пример #3
0
                            echo in_array($option->id, $fvArr) ? ' selected="selected"' : '';
                            ?>
><?php 
                            echo $option->name;
                            ?>
</option>
                                                                        <?php 
                        }
                    }
                }
                ?>
                                                        </select>
                                                        <?php 
                break;
            case 'bool':
                $fValue = FieldsValues::model()->findByAttributes(array("field_id" => $field->id, "object_id" => $model->id));
                ?>
                                                        <input type="checkbox" name="data[additional][<?php 
                echo $field->name;
                ?>
]" value="1"<?php 
                echo is_object($fValue) && $fValue->int_val ? ' checked="checked"' : '';
                ?>
 />
                                                        <label><?php 
                echo $field->title;
                ?>
</label>
                                                        <?php 
                break;
        }
Пример #4
0
 public function updateObject($artikul, $name, $langId, $dataArray)
 {
     $model = null;
     switch ($langId) {
         case 19:
             $criteria = new CDbCriteria();
             $criteria->addCondition("field_id = 11");
             $criteria->addCondition("text_val = " . $artikul);
             $fv = FieldsValues::model()->find($criteria);
             if (is_object($fv)) {
                 $model = $fv->object;
             }
             break;
         case 20:
             $criteria = new CDbCriteria();
             $criteria->addCondition("field_id = 29");
             $criteria->addCondition("text_val = " . $artikul);
             $fv = FieldsValues::model()->find($criteria);
             if (is_object($fv)) {
                 $model = $fv->object;
             }
             break;
         case 21:
             $criteria = new CDbCriteria();
             $criteria->addCondition("field_id = 47");
             $criteria->addCondition("text_val = " . $artikul);
             $fv = FieldsValues::model()->find($criteria);
             if (is_object($fv)) {
                 $model = $fv->object;
             }
             break;
     }
     if (!is_object($model)) {
         $this->createObject($dataArray['name_orig'], $langId, $dataArray);
     } else {
         //prepare data
         $attributes = array();
         $uploaddir = 'images/upload/' . date("d.m.Y", time());
         switch ($langId) {
             case 19:
                 $attributes['category_id'] = 1;
                 //@todo Выбор категории для импорта
                 break;
             case 20:
                 $attributes['category_id'] = 5;
                 break;
             case 21:
                 $attributes['category_id'] = 9;
                 break;
         }
         $attributes['name'] = $name;
         $toUrl = $langId == 21 ? $name . "-" . $dataArray['artikul'] . "-fr" : $name . "-" . $dataArray['artikul'];
         $attributes['url'] = translit::convert($toUrl, "-");
         $attributes['h1'] = $name;
         $attributes['title'] = $name;
         $attributes['price'] = isset($dataArray['price']) ? str_replace(",", ".", $dataArray['price']) : 0;
         if ($langId == 19) {
             $attributes['anons'] = $dataArray['name_ru'];
         } else {
             $attributes['anons'] = '';
         }
         if (is_dir('import_images/' . $artikul)) {
             if (is_file('import_images/' . $artikul . '/1.jpg')) {
                 if (isset($model->anons_pic) && is_file($model->anons_pic)) {
                     unlink($model->anons_pic);
                 }
                 if (isset($model->content_pic) && is_file($model->content_pic)) {
                     unlink($model->content_pic);
                 }
                 if (isset($model->extra_img) && is_file($model->extra_img)) {
                     unlink($model->extra_img);
                 }
                 $anonsPicPath = $uploaddir . "/a_" . md5(time() . $artikul . "a1") . ".jpg";
                 $contentPicPath = $uploaddir . "/c_" . md5(time() . $artikul . "c1") . ".jpg";
                 if (copy('import_images/' . $artikul . '/1.jpg', $anonsPicPath)) {
                     $attributes['anons_pic'] = "/" . $anonsPicPath;
                 }
                 if (copy('import_images/' . $artikul . '/1.jpg', $contentPicPath)) {
                     $attributes['content_pic'] = "/" . $contentPicPath;
                 }
             }
             if (is_file('import_images/' . $artikul . '/2.jpg')) {
                 $extraPicPath = $uploaddir . "/e_" . md5(time() . $artikul . "2") . ".jpg";
                 if (copy('import_images/' . $artikul . '/2.jpg', $extraPicPath)) {
                     $attributes['extra_img'] = "/" . $extraPicPath;
                 }
             }
         }
         //push data
         $model->setAttributes($attributes);
         if ($model->save()) {
             //prepare additional data
             if (isset($dataArray['ratings']['RP'])) {
                 $model->field('rp')->setValue($dataArray['ratings']['RP']);
             }
             if (isset($dataArray['ratings']['WS'])) {
                 $model->field('ws')->setValue($dataArray['ratings']['WS']);
             }
             $additionalFields = CatalogFilteredFields::model()->findAllByAttributes(array("category_id" => $model->category_id));
             if (is_array($additionalFields) && count($additionalFields)) {
                 foreach ($additionalFields as $f) {
                     $fieldData = isset($dataArray[$f->name]) ? $dataArray[$f->name] : null;
                     $langPrefix = 'ru';
                     switch ($langId) {
                         case 19:
                             $langPrefix = 'ru';
                             break;
                         case 20:
                             $langPrefix = 'en';
                             break;
                         case 21:
                             $langPrefix = 'fr';
                             break;
                     }
                     //if(is_array($fieldData) || ($fieldData && !is_array($fieldData))){
                     switch ($f->data_type) {
                         case 'int':
                             if (is_numeric($dataArray[$f->name])) {
                                 $model->field($f->name)->setValue($dataArray[$f->name]);
                             }
                             break;
                         case 'date':
                             if ($dataArray[$f->name]) {
                                 $model->field($f->name)->setValue(strtotime($dataArray[$f->name]));
                             }
                             break;
                         case 'bool':
                             $model->field($f->name)->setValue($fieldData ? 1 : 0);
                             break;
                         case 'multiple':
                             if (is_array($fieldData) && isset($fieldData[$langPrefix])) {
                                 $values = $fieldData[$langPrefix];
                                 if (is_array($values) && count($values)) {
                                     $setArr = array();
                                     $num = 0;
                                     foreach ($values as $value) {
                                         $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value));
                                         if (!is_object($listItem)) {
                                             $listItem = new ListsItems();
                                             $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value));
                                             $listItem->save();
                                             if (isset($fieldData['en'][$num]) && $fieldData['en'][$num]) {
                                                 $listItem->field("en_name")->setValue($fieldData['en'][$num]);
                                             }
                                             if (isset($fieldData['fr'][$num]) && $fieldData['fr'][$num]) {
                                                 $listItem->field("fr_name")->setValue($fieldData['fr'][$num]);
                                             }
                                         }
                                         $setArr[] = $listItem->id;
                                         $num++;
                                     }
                                     $model->field($f->name)->setValue($setArr);
                                 }
                             } else {
                                 if (is_array($fieldData)) {
                                     $values = $fieldData;
                                     if (is_array($values) && count($values)) {
                                         $setArr = array();
                                         foreach ($values as $value) {
                                             $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value));
                                             if (!is_object($listItem)) {
                                                 $listItem = new ListsItems();
                                                 $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value));
                                                 $listItem->save();
                                             }
                                             $setArr[] = $listItem->id;
                                         }
                                         $model->field($f->name)->setValue($setArr);
                                     }
                                 }
                             }
                             break;
                         case 'list':
                             if (is_array($fieldData) && isset($fieldData[$langPrefix])) {
                                 $value = $fieldData[$langPrefix];
                                 $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value));
                                 if (!is_object($listItem)) {
                                     $listItem = new ListsItems();
                                     $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value));
                                     $listItem->save();
                                     if (isset($fieldData['en']) && $fieldData['en']) {
                                         $listItem->field("en_name")->setValue($fieldData['en']);
                                     }
                                     if (isset($fieldData['fr']) && $fieldData['fr']) {
                                         $listItem->field("fr_name")->setValue($fieldData['fr']);
                                     }
                                 }
                                 $model->field($f->name)->setValue($listItem->id);
                             } else {
                                 if ($f->name == 'brand') {
                                     $value = $fieldData['name'];
                                     $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $value));
                                     if (!is_object($listItem)) {
                                         $listItem = new ListsItems();
                                         $listItem->setAttributes(array("list_id" => $f->rel, "name" => $value));
                                         $listItem->save();
                                         if (isset($fieldData['en']) && $fieldData['en']) {
                                             $listItem->field("en_name")->setValue($fieldData['en']);
                                         }
                                         if (isset($fieldData['fr']) && $fieldData['fr']) {
                                             $listItem->field("fr_name")->setValue($fieldData['fr']);
                                         }
                                         if (isset($fieldData['site'])) {
                                             $listItem->field('ru_site')->setValue($fieldData['site']);
                                         }
                                     } else {
                                         if (isset($fieldData['en']) && $fieldData['en']) {
                                             $listItem->field("en_name")->setValue($fieldData['en']);
                                         }
                                         if (isset($fieldData['fr']) && $fieldData['fr']) {
                                             $listItem->field("fr_name")->setValue($fieldData['fr']);
                                         }
                                         if (isset($fieldData['site'])) {
                                             $listItem->field('ru_site')->setValue($fieldData['site']);
                                         }
                                     }
                                     $model->field($f->name)->setValue($listItem->id);
                                 } else {
                                     if (!is_array($fieldData)) {
                                         //$value = $fieldData;
                                         $listItem = ListsItems::model()->findByAttributes(array("list_id" => $f->rel, "name" => $fieldData));
                                         if (!is_object($listItem)) {
                                             $listItem = new ListsItems();
                                             $listItem->setAttributes(array("list_id" => $f->rel, "name" => $fieldData));
                                             $listItem->save();
                                         }
                                         $model->field($f->name)->setValue($listItem->id);
                                     }
                                 }
                             }
                             break;
                         default:
                             $value = is_array($fieldData) && isset($fieldData[$langPrefix]) ? $fieldData[$langPrefix] : $fieldData;
                             $model->field($f->name)->setValue(trim($value));
                             break;
                     }
                     //}
                 }
             }
         }
     }
 }
Пример #5
0
                if (is_array($regions) && count($regions)) {
                    ?>
                                <ul class="region f_<?php 
                    echo $fieldName;
                    ?>
">
                                <?php 
                    foreach ($regions as $region) {
                        $regionField = CatalogFilteredFields::model()->findByAttributes(array("category_id" => $this->currentCategory->id, "name" => "region"));
                        $count = 0;
                        if (is_object($regionField)) {
                            $countCriteria = new CDbCriteria();
                            $countCriteria->addCondition("field_id = " . $regionField->id);
                            $countCriteria->addCondition("int_val = " . $region->id);
                            $countCriteria->group = "object_id";
                            $count = FieldsValues::model()->count($countCriteria);
                        }
                        if ($count) {
                            ?>
                                    <li>
                                        <input type="checkbox" data-name="<?php 
                            echo $region->name;
                            ?>
" id="c<?php 
                            echo $region->id;
                            ?>
" name="data[region][]" value="<?php 
                            echo $region->id;
                            ?>
"<?php 
                            if (in_array($region->id, $requestData)) {
Пример #6
0
                break;
            case 20:
                $regionFieldId = 25;
                break;
            case 21:
                $regionFieldId = 43;
                break;
        }
        if ($regionFieldId) {
            $countCriteria = new CDbCriteria();
            $countCriteria->alias = 'fv';
            $countCriteria->addCondition("field_id = " . $regionFieldId);
            $countCriteria->addCondition("int_val = " . $region->id);
            $countCriteria->join = "INNER JOIN `catalog_objects` as co ON `fv`.`object_id` = `co`.`id` AND `co`.`lang_id` = " . $this->lang . ' AND `co`.`is_active` = 1';
            $countCriteria->group = "object_id";
            $count = count(FieldsValues::model()->findAll($countCriteria));
        }
        if ($count) {
            ?>
            <li>
                <input type="checkbox" data-name="<?php 
            echo $region->name;
            ?>
" id="c<?php 
            echo $region->id;
            ?>
" name="data[region][]" value="<?php 
            echo $region->id;
            ?>
"<?php 
            if (in_array($region->id, $requestData)) {