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)); }
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; } }