public function search()
 {
     $lang = Router::getLanguage();
     $dbc = Connect::getConnection();
     $indexModel = new IndexModel();
     $material_type_array = $indexModel->getType_of_Materials();
     $data_total = array();
     foreach ($material_type_array as $val) {
         $material_type = $val['type_name'];
         if ($material_type != 'Admin') {
             $fields = new FieldsModel($material_type);
             $fields_list = '';
             $fields_list_value = '';
             foreach ($fields->getFields() as $v) {
                 if ($v != 'id' && $v != 'alias' && $v != 'id_' . $material_type . '') {
                     $fields_list .= ',`' . $v . '` ';
                     $fields_list_value .= $v . " LIKE '%" . $this->search_request . "%' OR ";
                 }
             }
             $fields_list_value = trim($fields_list_value, 'OR ');
             $sql = "SELECT `id`, `id_{$material_type}` {$fields_list}, `alias` FROM `{$material_type}_{$lang}` WHERE {$fields_list_value}";
             $placeholders = array();
             $data = $dbc->getDate($sql, $placeholders);
             $data_total[$material_type] = $data;
         }
     }
     return $data_total;
 }
 public function totalListAction()
 {
     if (Session::hasUser('admin')) {
         $menuModel = new MenuModel();
         $menu_data = array();
         foreach (Config::get('languages') as $v) {
             foreach ($menuModel->getMainMenu($v) as $val) {
                 $t = $val['id_page'];
                 $menu_data[$v][$t] = $val;
             }
         }
         //  Debugger::PrintR($menu_data);
         $adminModel = new AdminModel();
         $data_admin = $adminModel->getAdminPage(Router::getId());
         $indexModel = new IndexModel();
         $material_type = $this->totalListMaterialType();
         $data_materials = $indexModel->getTotalList($material_type);
         foreach ($data_materials as $k => $v) {
             if ($v['status'] == 1) {
                 $v['status'] = __t('yes');
             } else {
                 $v['status'] = __t('no');
             }
             $data_materials[$k] = $v;
         }
         $items_count = $indexModel->getCount($material_type);
         $items_per_page = Config::get('materials_per_page');
         $request = new Request();
         $currentPage = $request->get('page') ? (int) $request->get('page') : 1;
         $data_pagination = self::getPagination($items_count, $items_per_page, $currentPage);
         if ($items_count) {
             $data_materials_page = array_chunk($data_materials, $items_per_page, true);
             if (isset($data_materials_page[$currentPage - 1])) {
                 $data_materials_page = $data_materials_page[$currentPage - 1];
             } else {
                 throw new Exception('Page (' . Router::getUri() . ') not found', 404);
             }
         } else {
             $data_materials_page = null;
         }
         $data_url = explode('?', Router::getUri());
         $type_of_materials = array();
         foreach ($indexModel->getType_of_Materials() as $v) {
             $type_of_materials[] = strtolower($v['type_name']);
         }
         $system_doc = array('404' => Config::get('default_id_error_404'), '403' => Config::get('default_id_error_403'), '204' => Config::get('default_id_error_204'), '500' => Config::get('default_id_error_500'), 'default_page' => Config::get('default_id'), 'not_publish' => Config::get('not_publish'), 'contacts' => Config::get('contacts'), 'news' => Config::get('news'), 'search' => Config::get('search'));
         $system_doc_rev = array_flip($system_doc);
         $args = array('data_admin' => $data_admin[0], 'data_materials' => $data_materials_page, 'data_pagination' => $data_pagination, 'data_url' => $data_url[0], 'type_of_materials' => $type_of_materials, 'system_doc' => $system_doc_rev, 'menu_data' => $menu_data, 'items_per_page' => $items_per_page);
         return $this->render_admin($args);
     } else {
         throw new Exception('Access is forbidden', 403);
     }
 }
 public function add($with_without_menu = null)
 {
     $publish = $this->publication ? 1 : 0;
     $indexModel = new IndexModel();
     $id_mat_type = '';
     foreach ($indexModel->getType_of_Materials() as $v) {
         if ($v['type_name'] == $this->material_type) {
             $id_mat_type = $v['id'];
         }
     }
     $controller = $this->material_type == 'basic_page' ? 'Index' : ucfirst($this->material_type);
     $placeholders = array('controller' => $controller, 'action' => 'index', 'publish' => $publish);
     $dbc = Connect::getConnection();
     $sql = "INSERT INTO `pages`(`id_mat_type`, `status`, `controller`, `action`) VALUES ({$id_mat_type},:publish,:controller,:action)";
     $sth = $dbc->getPDO()->prepare($sql);
     $sth->execute($placeholders);
     $sql = "SELECT MAX(id) AS max_id FROM pages";
     $placeholders = array();
     $date = $dbc->getDate($sql, $placeholders);
     $id_new_page = $date[0]['max_id'];
     $placeholders = array('id_new_page' => $id_new_page, 'img' => $this->img, 'date' => $this->date);
     $sql = "INSERT INTO `{$this->material_type}`(`id_page`, `img`, `date`) VALUES (:id_new_page, :img, :date)";
     $sth = $dbc->getPDO()->prepare($sql);
     $sth->execute($placeholders);
     if (!isset($with_without_menu)) {
         $placeholders = array('id_new_page' => $id_new_page, 'id_parent' => $this->id_parent);
         $sql = "INSERT INTO `main_menu`(`id_page`, `id_parent_page`, `status`) VALUES (:id_new_page,:id_parent,1)";
         $sth = $dbc->getPDO()->prepare($sql);
         $sth->execute($placeholders);
         $sql = "SELECT MAX(id) AS max_id FROM main_menu";
         $placeholders = array();
         $date = $dbc->getDate($sql, $placeholders);
         $id_new_menu = $date[0]['max_id'];
         $placeholders = array('id_new_menu' => $id_new_menu, 'title' => $this->title_or_menu_name, 'alias' => $this->new_alias);
         $lang = Config::get('default_language');
         $sql = "INSERT INTO `main_menu_{$lang}`(`id_main_menu`, `name`, `alias_menu`) VALUES (:id_new_menu,:title,:alias)";
         $sth = $dbc->getPDO()->prepare($sql);
         $sth->execute($placeholders);
         // Добавление укр данных в англ. меню - необходимо для нормальной работы меню
         foreach (Config::get('languages') as $v) {
             if ($v != Config::get('default_language')) {
                 $sql = "INSERT INTO `main_menu_{$v}`(`id_main_menu`, `name`, `alias_menu`) VALUES (:id_new_menu,:title,:alias)";
                 $sth = $dbc->getPDO()->prepare($sql);
                 $sth->execute($placeholders);
             }
         }
     }
     $sql = "SELECT MAX(id) AS max_id FROM {$this->material_type}";
     $placeholders = array();
     $date = $dbc->getDate($sql, $placeholders);
     $id_new_page = $date[0]['max_id'];
     $placeholders = array('id_new_page' => $id_new_page, 'title' => $this->title, 'alias' => $this->new_alias);
     $additional_fields = '';
     foreach ($this->additional_fields_arr as $v) {
         $additional_fields .= ", `{$v}`";
     }
     $lang = Config::get('default_language');
     $sql = "INSERT INTO {$this->material_type}_{$lang} (`id_{$this->material_type}`,`title`, `alias` {$additional_fields})\n        VALUES (:id_new_page, :title, :alias {$this->additional_fields_value})";
     $sth = $dbc->getPDO()->prepare($sql);
     $sth->execute($placeholders);
     //Добавление тайтла и алиаса для англоязычной версии (пока укр вариант  алиаса), необходимо для меню
     $placeholders = array('id_new_page' => $id_new_page, 'alias' => $this->new_alias);
     foreach (Config::get('languages') as $v) {
         if ($v != Config::get('default_language')) {
             $sql = "INSERT INTO {$this->material_type}_{$v} (`id_{$this->material_type}`, `alias`) VALUES (:id_new_page, :alias)";
             $sth = $dbc->getPDO()->prepare($sql);
             $sth->execute($placeholders);
         }
     }
 }