示例#1
0
 public function action_new()
 {
     $fieldset = array();
     $folders = $this->getFolders();
     $group = new Model_Material('groups');
     $data['groups'] = $group->getTree();
     $gid = $this->request->param('id');
     if ($gid != NULL) {
         $fields = $group->getParams($gid);
         foreach ($fields as $field) {
             //генерируем код для каждого поля
             //если поле - список выбора
             if ($field['type'] == 'select') {
                 $values = $group->getSelectValues($field['id']);
                 $field['myValues'] = $values;
             }
             if ($field['type'] == 'photoalbum') {
                 $base = new Model_Base();
                 $options = $base->getOptions();
                 $field['photos_base_path'] = $options['photos_base_path'];
             }
             if ($field['type'] == 'files') {
                 $base = new Model_Base();
                 $options = $base->getOptions();
                 $field['files_base_path'] = $options['files_base_path'];
             }
             $fieldset[] = View::factory('admin/fields/' . $field['type'])->bind('data', $field)->bind('folders', $folders)->bind('multiselect', $field['multiselect'])->bind('user', $this->user)->render();
         }
         $data['fieldset'] = $fieldset;
     }
     if (isset($_POST['new_material'])) {
         //PC::debug($_POST);
         //var_dump($_POST);
         $res = $group->newMaterial($_POST, $gid, $_FILES);
         if ($res) {
             Controller::redirect('admin/materials/' . $gid);
         } else {
             $data['errors'] = $group->getErrors();
         }
     }
     if (isset($_POST['save_selects'])) {
         $selects = new Model_Params_Selects();
         $values = $_POST;
         unset($values['save_selects']);
         $selects->saveSelectsValues($values, $_POST['save_selects']);
     }
     if (isset($_POST['save_param'])) {
         $selects = new Model_Selects();
         $values = $_POST;
         unset($values['save_param']);
         $selects->saveSelectsParam($values, $_POST['save_param'], $_FILES);
     }
     $wpm['status'] = Cookie::get('wpm', FALSE);
     $wpm['folder'] = Cookie::get('wpm_folder', '');
     $pictures = $this->action_pictures($wpm['folder']);
     $this->template->content = View::factory('admin/admMaterials', array('data' => $data, 'folders' => $folders, 'pictures' => $pictures, 'wpm' => $wpm, 'user' => $this->user));
 }
示例#2
0
 public function getFullMaterials2($gid, $limit = 0, $offset = 0, $search_string = NULL, $params = array(), $time = 0)
 {
     if (empty($params)) {
         $for_order = ' a.rating DESC,';
     } else {
         $for_order = '';
     }
     $sort = Arr::get($params, 'sort', 'price_down');
     $data = array();
     $vData = $params;
     //        $vData['date_start'] = $params['date_start'];
     $vData['gid'] = $gid;
     $vData['search_string'] = $search_string;
     $vData['sort'] = $sort;
     $vData['offset'] = $offset;
     $validation = Validation::factory($vData);
     $validation->rule('gid', 'not_empty');
     $validation->rule('gid', 'digit');
     //        $validation->rule('csrf', 'not_empty');
     //        $validation->rule('csrf', 'Security::check');
     $validation->rule('price_from', 'digit');
     $validation->rule('price_to', 'digit');
     if (!$validation->check()) {
         $data['errors'] = $validation->errors('filterErrors');
         return FALSE;
     }
     if ($sort && $sort != '') {
         $srt = explode('_', $sort);
         if (isset($srt[1]) && $srt[1] == 'down') {
             $svariant = 'DESC';
         } else {
             $svariant = 'ASC';
         }
         switch ($srt[0]) {
             case 'views':
                 $material_sort = 'views';
             default:
                 $sfield = 'price';
                 break;
         }
         $srtData = $this->getField($sfield, $gid);
         if (isset($material_sort)) {
             $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 ";
         } else {
             if ($gid != 0) {
                 $query = "SELECT DISTINCT a.*, b1.value\n\t\t\t\t\t\tFROM materials a, " . $srtData['type'] . " b1, group_param_values c1\n\t\t\t\t\t\tWHERE a.sleep = 0 ";
             } else {
                 $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 ";
             }
         }
     } else {
         $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 ";
     }
     if ($gid != 0) {
         $query .= "AND EXISTS (SELECT * FROM group_materials_rel g where a.id = g.mid AND g.gid = " . $gid . ") ";
     }
     if ($search_string) {
         //                //сначала получаем id лист вхождений по тексту
         $searcher = new Model_Search();
         $words = $searcher->getSearchString($search_string);
         if (!empty($words)) {
             if ($gid != 0) {
                 $for_order = 'CASE WHEN ';
             }
             $query .= 'AND (';
             $i = 0;
             foreach ($words as $word) {
                 if ($i != 0) {
                     $query .= ' AND ';
                 }
                 $query .= 'UPPER(a.name) LIKE \'%' . $word . '%\'';
                 if ($i != 0) {
                     $for_order .= ' AND ';
                 }
                 $for_order .= 'UPPER(a.name) LIKE \'%' . $word . '%\'';
                 ++$i;
             }
             if ($gid != 0) {
                 $for_order .= '  THEN 0 ELSE 1 END, ';
             }
             if ($gid == 0) {
                 $query .= ' OR EXISTS (SELECT * FROM groups g, group_materials_rel r WHERE a.id = r.mid AND g.id = r.gid ';
                 foreach ($words as $word) {
                     $query .= 'AND UPPER(g.name) LIKE \'%' . $word . '%\' ';
                 }
                 $query .= ' ) ';
             }
             if ($gid != 0) {
                 $query .= ' OR EXISTS (SELECT * FROM chars b, group_param_values c where a.id = c.mid AND b.id = c.`value` ';
             } else {
                 $query .= ' OR EXISTS (SELECT * FROM chars b, group_param_values c, group_params d where a.id = c.mid AND b.id = c.`value` AND d.type = "chars" AND d.id = c.pid ';
             }
             foreach ($words as $word) {
                 $query .= 'AND UPPER(b.value) LIKE \'%' . $word . '%\'';
             }
             $query .= ' ) ';
             if ($gid != 0) {
                 $query .= ' OR EXISTS (SELECT * FROM `select` s, group_param_values c where a.id = c.mid AND s.id = c.`value` ';
             } else {
                 $query .= ' OR EXISTS (SELECT * FROM `select` s, group_param_values c, group_params d where a.id = c.mid AND s.id = c.`value` AND d.type = "select" AND d.id = c.pid ';
             }
             foreach ($words as $word) {
                 $query .= 'AND UPPER(s.value) LIKE \'%' . $word . '%\'';
             }
             $query .= ' ) ';
             if ($gid != 0) {
                 $query .= ' OR EXISTS (SELECT * FROM `texts` t, group_param_values c where a.id = c.mid AND t.id = c.`value` ';
             } else {
                 $query .= ' OR EXISTS (SELECT * FROM `texts` t, group_param_values c, group_params d where a.id = c.mid AND t.id = c.`value` AND d.type = "texts" AND d.id = c.pid ';
             }
             foreach ($words as $word) {
                 $query .= 'AND UPPER(t.value) LIKE \'%' . $word . '%\'';
             }
             $query .= ' )) ';
         }
     }
     if (count($params) > 0) {
         foreach ($params as $key => $value) {
             if ($value != '') {
                 $key = addslashes($key);
                 $paramTitle = explode('_', $key);
                 $paramData = $this->getField($paramTitle[0], $gid);
                 //формируем параметры запроса к базе данных
                 switch ($key) {
                     case 'price_from':
                         $query .= 'AND EXISTS (SELECT * FROM price b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` >= ' . $value * 100 . ') ';
                         break;
                     case 'price_to':
                         $query .= 'AND EXISTS (SELECT * FROM price b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` <= ' . $value * 100 . ') ';
                         break;
                     case 'meh-shuby':
                         $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in (';
                         for ($i = 0; $i < count($value); ++$i) {
                             if ($i != 0) {
                                 $query .= ', ';
                             }
                             $query .= '\'' . addslashes(trim($value[$i])) . '\'';
                         }
                         $query .= ')) ';
                         break;
                     case 'type':
                         $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in (';
                         for ($i = 0; $i < count($value); ++$i) {
                             if ($i != 0) {
                                 $query .= ', ';
                             }
                             $query .= '\'' . addslashes(trim($value[$i])) . '\'';
                         }
                         $query .= ')) ';
                         break;
                     case 'material':
                         $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in (';
                         for ($i = 0; $i < count($value); ++$i) {
                             if ($i != 0) {
                                 $query .= ', ';
                             }
                             $query .= '\'' . addslashes(trim($value[$i])) . '\'';
                         }
                         $query .= ')) ';
                         break;
                     case 'razmer':
                         foreach ($value as $itm) {
                             $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` = \'' . mysql_real_escape_string(trim($itm)) . '\') ';
                         }
                         break;
                     case 'color':
                         $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in (';
                         for ($i = 0; $i < count($value); ++$i) {
                             if ($i != 0) {
                                 $query .= ', ';
                             }
                             $query .= '\'' . addslashes(trim($value[$i])) . '\'';
                         }
                         $query .= ')) ';
                         break;
                 }
             }
         }
     }
     if ($sort && $sort != '') {
         if (isset($material_sort)) {
             $query .= 'ORDER BY a.' . $material_sort . ' ' . $svariant;
         } else {
             if ($gid != 0) {
                 $query .= 'AND a.id = c1.mid AND b1.id = c1.`value` AND c1.pid = ' . $srtData['id'] . ' ORDER BY ' . $for_order . ' CAST(b1.value AS UNSIGNED) ' . $svariant;
             }
         }
     } else {
         $query .= 'ORDER BY a.rating DESC ';
     }
     $query .= ' LIMIT ' . $offset . ', ' . $limit;
     //        if($gid==0)
     //            echo $query;
     try {
         $result = DB::query(Database::SELECT, $query)->execute();
     } catch (Exception $e) {
         throw new HTTP_Exception_500();
     }
     $fieldtypes = array('chars', 'photoalbum', 'select', 'price');
     $chars = new Model_Params_Chars();
     $photoalbum = new Model_Params_Photoalbum('');
     $select = new Model_Params_Selects();
     $price = new Model_Params_Prices();
     $files = new Model_Params_Files('');
     $images = new Model_Params_Images();
     $dates = new Model_Params_Dates();
     $texts = new Model_Params_Texts();
     $catalog = new Model_Category('tree');
     $parents = $catalog->getParents(Arr::get($GLOBALS, 'categoryId'));
     $node = '';
     foreach ($parents as $key => $parent) {
         if ($parent["url"] == "glavnaya") {
             $node .= $parents[$key + 1]["url"] . "/";
             break;
         }
     }
     /*foreach($parents as $parent)
     		{
     			var_dump($parent);
     			if($parent['level']>1 && $parent['url']!='glavnaya')
     			{
     				$node .= $parent['url'].'/';
     			}
     		}*/
     if ($result) {
         foreach ($result as $item) {
             $mid = $item['id'];
             unset($item['id']);
             $gid = $this->getGroupFromMid($mid);
             //var_dump($gid.'-'.$item['name']);
             $charfileds = $chars->getTypeParams($mid, $gid);
             $new = array_merge($item, $charfileds);
             $photos = $photoalbum->getTypeParams($mid, $gid);
             $new = array_merge($new, $photos);
             $filesfield = $files->getTypeParams($mid, $gid);
             $new = array_merge($new, $filesfield);
             $textfields = $texts->getTypeParams($mid, $gid);
             $new = array_merge($new, $textfields);
             $datesfields = $dates->getTypeParams($mid, $gid);
             $new = array_merge($new, $datesfields);
             $imagefields = $images->getTypeParams($mid, $gid);
             $new = array_merge($new, $imagefields);
             $seletfields = $select->getTypeParams($mid, $gid);
             $new = array_merge($new, $seletfields);
             $prices = $price->getTypeParams($mid, $gid);
             $new = array_merge($new, $prices);
             //получаем ноду
             $new['node'] = $node;
             $data[$mid] = $new;
         }
         return $data;
     }
 }