private function get_structure_difference() { // Список таблиц $tables = Cms_Structure::get_all_tables(); $db_data = array(); $db_tables = array_diff(Cms::get_dal_instance()->get_tables(), Cms::get_ignore_tables()); foreach ($db_tables as $db_table_name) { $db_data[$db_table_name] = Cms::get_dal_instance()->get_columns($db_table_name); } $structure_table_names = Cms_Structure::get_all_table_names(); $to_del = array(); $to_add = array_diff($db_tables, $structure_table_names); $to_change = array(); foreach ($tables as $table) { $alias = $table->get_alias(); $tname = $table->get_table_name(); // Если таблица есть в БД - сравниваем столбцы if (array_key_exists($tname, $db_data)) { $tcolumns = $table->get_columns(); $db_columns = $db_data[$tname]; // Если столбцы в БД и в файле структуры различаются - требуются изменения if (array_keys($tcolumns) != array_keys($db_columns)) { $to_change[] = $alias; } } else { $to_del[] = $alias; } } $result = array('tables' => $tables, 'db_data' => $db_data, 'to_add' => $to_add, 'to_del' => $to_del, 'to_change' => $to_change); return $result; }
public function action_delete_table() { try { $tables = $this->request->post('tables'); if (Arr::is_array($tables)) { foreach ($tables as $alias) { $table = Cms_Structure::factory($alias); if ($table != NULL) { unlink($table->get_file_name()); } } } $this->add_result_data('urlToRedirect', Cms_Urlmanager::get_tools_url('structure')); } catch (Exception $exc) { $this->set_error($exc->getMessage()); } }