request->get('do') || $this->request->get('do') == 'groups') { if($this->request->get('action'))//Если есть действие "Добавить/изменить группу" { if($this->request->get('action') == 'edit' && $this->request->get('id'))//Если действие "изменить" подгружаем данные { $group = $this->banners->get_group((int)$this->request->get('id')); } if($this->request->post('session_id'))//Если получаем данные POST { if($this->request->post('name') && trim($this->request->post('name')) != '') { $group->name = $this->request->post('name'); if($this->request->get('action') == 'edit' && $this->request->get('id')) { $this->banners->update_group((int)$this->request->get('id'),array('name'=>$this->request->post('name'))); $this->design->assign('message_success', 'updated'); } elseif($this->request->get('action') == 'add') { $this->db->query($this->db->placehold("INSERT INTO __banners_groups SET ?%", array('name'=>$this->request->post('name')))); $this->design->assign('message_success', 'added'); } } else { $this->design->assign('message_error', 'empty_name'); } } $this->design->assign('group', $group); $this->design->assign('action', $this->request->get('action')); return $this->body = $this->design->fetch('banners.groups.add.edit.tpl'); } if($this->request->post('session_id')) $this->post_update(); //Если отправили данные с действием "удалить" list($groups,$groups_count) = $this->banners->get_groups(); foreach($groups as $key=>$value) { list($banner,$banner_count) = $this->banners->get_banners(ARRAY("BannerOfPage"=>10000,"group"=>$groups[$key]->id)); $groups[$key]->banner = $banner[0]; $groups[$key]->banner_count = $banner_count; } $this->design->assign('groups',$groups); return $this->body = $this->design->fetch('banners.groups.tpl'); } /******* Вывод баннеров ********************/ elseif($this->request->get('do') == 'banners') { if($this->request->get('action')) //Добавление или редактирование баннера { $categories = $this->categories->get_categories_tree(); $brands = $this->brands->get_brands(); $pages = $this->pages->get_pages(); //Если была POST отправка данных формы добавления/редактирования if($this->request->post('session_id')) { $banner->name = $this->request->post('name'); $banner->url = $this->request->post('url'); $banner->description = $this->request->post('description'); $banner->show_all_pages = (int)$this->request->post('show_all_pages'); $banner->visible = (int)$this->request->post('visible'); $banner->categories = implode(",",$this->request->post('categories')); $banner->brands = implode(",",$this->request->post('brands')); $banner->pages = implode(",",$this->request->post('pages')); $banner->id_group = $this->request->get('group'); //Если есть ошибки $upload_file = $this->request->files('image'); if($upload_file['name']=='' AND !$this->request->post('image_exist')) $error = 'not_image'; if(empty($banner->url) AND $banner->url=="") $error = 'empty_url'; if(empty($banner->name) AND $banner->name=="") $error = 'empty_name'; if($error)$this->design->assign('message_error', $error); if(!$error && $this->request->get('action') == "add" && $this->add_banner($banner))//Если добавление баннера { //Если данные успешно добавлены и успешно загружено изображение баннера, выводим сообщение $this->design->assign('message_success', 'added'); return $this->body = $this->design->fetch('banners.add.edit.tpl'); }elseif(!$error //Если реактирование баннера AND $this->request->get('action') == "edit" AND $this->request->get('id') AND $this->banners->update_banner($this->request->get('id'),Array( 'name'=>$banner->name, 'url'=>$banner->url, 'description'=>$banner->description, 'visible'=>(int)$banner->visible, 'show_all_pages'=>$banner->show_all_pages, 'categories'=>$banner->categories, 'brands'=>$banner->brands, 'pages'=>$banner->pages )) AND $this->upload_image($this->request->get('id'),TRUE)) { //Если данные успешно обновлены, и успешно загружено изображение баннера, выводим сообщение $this->design->assign('banners_group', $this->banners->get_group($this->request->get('group'))); $this->design->assign('message_success', 'updated'); return $this->body = $this->design->fetch('banners.add.edit.tpl'); } $banner->category_selected = $this->request->post('categories'); $banner->brand_selected = $this->request->post('brands'); $banner->page_selected = $this->request->post('pages'); }elseif($this->request->get('action') == "edit" && $this->request->get('id')) // если это редактирование баннера, получаем информацию из БД { $banner = $this->banners->get_banner($this->request->get('id')); $banner->image = $banner->image; $banner->category_selected = explode(",",$banner->categories);//Создаем массив категорий $banner->brand_selected = explode(",",$banner->brands);//Создаем массив брендов $banner->page_selected = explode(",",$banner->pages);//Создаем массив страниц } if(!isset($banner->visible)) $banner->visible = 1; $this->design->assign('banners_group', $this->banners->get_group($this->request->get('group'))); $this->design->assign('categories', $categories); $this->design->assign('banner', $banner); $this->design->assign('brands', $brands); $this->design->assign('pages', $pages); return $this->body = $this->design->fetch('banners.add.edit.tpl'); } /******* Вывод уже существующих баннеров ***************/ if($this->request->post('session_id')) $this->post_update(); //Если отправили данные с действием "Включить/выключить/удалить" list($banners,$banners_count) = $this->banners->get_banners(ARRAY("BannerOfPage"=>10000,"group"=>$this->request->get('group'))); $current_page = max(1, $this->request->get('page', 'integer')); $pages_count = (int)($banners_count/$this->BannerOfPage); foreach($banners as $key=>$value){ $banners[$key]->categories_count = ($banners[$key]->categories !=0)?(int)mb_substr_count($banners[$key]->categories,",","UTF-8")+1:0; $banners[$key]->brands_count = ($banners[$key]->brands != 0)?(int)mb_substr_count($banners[$key]->brands,",","UTF-8")+1:0; $banners[$key]->pages_count = ($banners[$key]->pages!=0)?(int)mb_substr_count($banners[$key]->pages,",","UTF-8")+1:0; } $this->design->assign('banners_group', $this->banners->get_group($this->request->get('group'))); $this->design->assign('banners_count', $banners_count); $this->design->assign('banners_images_dir', $this->config->banners_images_dir); $this->design->assign('pages_count', $pages_count); $this->design->assign('current_page', $current_page); $this->design->assign('banners', $banners); return $this->body = $this->design->fetch('banners.show.list.tpl'); } } /**** Функция добавления баннера ****/ function add_banner($banner) { $query = $this->db->placehold("INSERT INTO __banners SET ?%", $banner); //exit($query); $this->db->query($query); return $this->upload_image($this->db->insert_id())?true:false; } /**** Функция загрузки изображения баннера ****/ function upload_image($idBanner,$deleteOldImageBanner = FALSE) { // Загрузка изображения $image = $this->request->files('image'); $image = preg_replace("/\s+/", '_', $this->request->files('image')); $imageFilename = ""; if(isset($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { if($deleteOldImageBanner) { $banner = $this->banners->get_banner($idBanner); $this->banners->delete_image($banner->image); } $imageFilename = $idBanner.'-'.$image['name']; if(!move_uploaded_file($image['tmp_name'], $this->config->root_dir.$this->config->banners_images_dir.$imageFilename)) { $this->design->assign('message_error', 'error_uploading_image'); return false; } $query = $this->db->placehold("UPDATE __banners SET position=id, image=? WHERE id=? LIMIT 1", $imageFilename ,$idBanner); return $this->db->query($query)?true:false; } return true; } /**** Функция обновления баннера, а именно: показать/скрыть/удалить баннер ****/ function post_update() { if($this->request->get('do') == 'groups') { // Действия с выбранными $ids = $this->request->post('check'); if(!empty($ids)) { switch($this->request->post('action')) { case 'delete': { foreach($ids as $id) $this->banners->delete_group($id); break; } } } } elseif($this->request->get('do') == 'banners') { // Сортировка $positions = $this->request->post('positions'); $ids = array_keys($positions); sort($positions); foreach($positions as $i=>$position) { $this->banners->update_banner($ids[$i], array('position'=>$position)); } // Действия с выбранными $ids = $this->request->post('check'); if(!empty($ids)) { switch($this->request->post('action')) { case 'disable': { $this->banners->update_banner($ids, array('visible'=>0)); break; } case 'enable': { $this->banners->update_banner($ids, array('visible'=>1)); break; } case 'delete': { foreach($ids as $id) $this->banners->delete_banner($id); break; } } } } } }