diff --git a/gresource.xml b/gresource.xml index 08c8d12..c29a06f 100644 --- a/gresource.xml +++ b/gresource.xml @@ -9,6 +9,7 @@ ubl-settings-usergroups-user.glade ubl-settings-usergroups-system.glade ubl-settings-usergroups-savesettings.glade + ubl-settings-usergroups-confirmation.glade ubl-settings-usergroups.css diff --git a/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg b/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg index d383f09..6ed49b5 100644 --- a/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg +++ b/icons/com.ublinux.ubl-settings-usergroups.save-symbolic.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b5fd2fb..30a24e5 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -32,6 +32,7 @@ set(DEPENDFILES ../ubl-settings-usergroups-user.glade ../ubl-settings-usergroups-group.glade ../ubl-settings-usergroups-savesettings.glade + ../ubl-settings-usergroups-confirmation.glade ../gresource.xml ../ubl-settings-usergroups-banner.png ../ubl-settings-usergroups.css diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 2d13f9c..f2122dc 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -5,8 +5,8 @@ config main_config; //functions int yon_load_proceed(YON_CONFIG_TYPE type){ - yon_config_load_register(YON_CONFIG_DEFAULT,"[users]","DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM",NULL); - if (yon_config_load_register_no_cleaning(type,"[users]","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]","[system]","SYSTEMBOOT_STATEMODE","[save]","SAVE_ROOTCOPY_CHANGES",NULL)){ + yon_config_load_register(YON_CONFIG_DEFAULT,"users","DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM",NULL); + if (yon_config_load_register_no_cleaning(type,"users","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]","[system]","SYSTEMBOOT_STATEMODE","[save]","SAVE_ROOTCOPY_CHANGES",NULL)){ return 1; } return 0; @@ -82,7 +82,7 @@ void yon_interface_update(main_window *widgets){ void on_config_local_load(GtkWidget *self, main_window *widgets){ yon_load_proceed(YON_CONFIG_LOCAL); textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=1; yon_interface_update(widgets); @@ -120,6 +120,104 @@ void on_saving_settings_save(GtkWidget *self, yon_savasettings_window *window){ on_subwindow_close(self); } +void on_delete_confirmation_delete_home_check(GtkCellRenderer *self, char *path, yon_confirmation_window *window){ + GtkTreeIter iter; + gboolean status; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,3,&status,-1); + gtk_list_store_set(window->list,&iter,3,!status,-1); + +} + +void on_delete_confirmation_delete_check(GtkCellRenderer *self, char *path, yon_confirmation_window *window){ + GtkTreeIter iter; + gboolean status; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,-1); + gtk_list_store_set(window->list,&iter,0,!status,-1); + +} + +void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ + GtkTreeIter iter,itar; + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); + for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1); + int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); + for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ + char *name_check; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,1,&name_check,-1); + if (!strcmp(name,name_check)){ + GtkTreeIter *it = gtk_tree_iter_copy(&iter); + if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ + iter = *gtk_tree_iter_copy(it); + if (!gtk_tree_model_iter_previous(GTK_TREE_MODEL(widgets->UsersList),&iter)){ + iter = *gtk_tree_iter_copy(it); + } + } + gtk_list_store_remove(widgets->UsersList,it); + yon_config_remove_by_key(USERADD(name)); + yon_config_remove_by_key(USERSHADOW(name)); + } + } + } + on_subwindow_close(self); +} + +yon_confirmation_window *yon_delete_confirmation_new(){ + yon_confirmation_window *window = malloc(sizeof(yon_confirmation_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_confirmation); + window->Window = yon_gtk_builder_get_widget(builder,"Window"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->DeletionTree = yon_gtk_builder_get_widget(builder,"DeletionTree"); + window->DeleteCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"DeleteCell")); + window->DeleteHomeCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"DeleteHomeCell")); + window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + gtk_window_set_title(GTK_WINDOW(window->Window),DELETE_CONFIRMATION_TITLE_LABEL); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->DeleteCell),"toggled",G_CALLBACK(on_delete_confirmation_delete_check),window); + g_signal_connect(G_OBJECT(window->DeleteHomeCell),"toggled",G_CALLBACK(on_delete_confirmation_delete_home_check),window); + return window; +} + +void yon_delete_confirmation_open(main_window *widgets){ + yon_confirmation_window *window = yon_delete_confirmation_new(); + GtkTreeIter iter,itar; + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_delete_confirmation_save),dict); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ + char *name,*parameters,*homedir=NULL; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,6,¶meters,-1); + if (strstr(parameters,"--home-dir")){ + int size; + config_str parsed = yon_char_parse(parameters,&size," "); + for (int i=0;ilist,&itar); + gtk_list_store_set(window->list,&itar,1,name,2,homedir,3,0,4,status,-1); + free(name); + free(parameters); + free(homedir); + } + gtk_widget_show(window->Window); +} + yon_savasettings_window *yon_saving_settings_new(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_savesettings); yon_savasettings_window *window = malloc(sizeof(yon_savasettings_window)); @@ -1450,19 +1548,7 @@ void on_main_delete(GtkWidget *self, main_window *widgets){ data->function=NULL; data->data=NULL; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ - model = GTK_TREE_MODEL(widgets->UsersList); - cur_tree=widgets->UsersTree; - if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){ - char *name; - gtk_tree_model_get(model,&iter,2,&name,-1); - data->action_text=DELETE_CONFIRMATION_LABEL("user",name); - if (yon_confirmation_dialog_call(self,data)==GTK_RESPONSE_ACCEPT){ - yon_config_remove_by_key(USERADD(name)); - yon_config_remove_by_key(USERADD_SYNC(name)); - yon_config_remove_by_key(USERSHADOW(name)); - gtk_list_store_remove(GTK_LIST_STORE(model),&iter); - } - } + yon_delete_confirmation_open(widgets); } else { model = GTK_TREE_MODEL(widgets->GroupsList); cur_tree=widgets->GroupsTree; diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index ff40b73..2369238 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -27,6 +27,7 @@ #define glade_path_ubl_settings_usergroups_system "/com/ublinux/ui/ubl-settings-usergroups-system.glade" #define glade_path_ubl_settings_usergroups_user "/com/ublinux/ui/ubl-settings-usergroups-user.glade" #define glade_path_ubl_settings_usergroups_savesettings "/com/ublinux/ui/ubl-settings-usergroups-savesettings.glade" +#define glade_path_ubl_settings_usergroups_confirmation "/com/ublinux/ui/ubl-settings-usergroups-confirmation.glade" #define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-usergroups.css" @@ -276,6 +277,17 @@ typedef struct{ GtkWidget *SambaCheck; } yon_savasettings_window; + typedef struct { + GtkWidget *Window; + GtkWidget *StatusBox; + GtkWidget *CancelButton; + GtkWidget *AcceptButton; + GtkWidget *DeletionTree; + GtkListStore *list; + GtkCellRenderer *DeleteCell; + GtkCellRenderer *DeleteHomeCell; + } yon_confirmation_window; + ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(); void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 143c13a..a72969f 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -160,4 +160,12 @@ //ubl-settings-usergroups-savesettings.glade #define SAVESETTINGS_TITLE_LABEL _("Additional configuration of service parameter saving") #define SAMBA_ROOTCOPY_LABEL _("At every system shutdown save changes of (root)/var/lib/samba\ninto (hd)/ublinux-data/rootcopy") -#define SYSTEM_SAVEMODE_LABEL _("For system save mode \"Sandbox\"") \ No newline at end of file +#define SYSTEM_SAVEMODE_LABEL _("For system save mode \"Sandbox\"") + +//ubl-settings-usergroups-confirmation.glade +#define DELETE_CONFIRMATION_TITLE_LABEL _("User deletion") +#define DELETE_CONFIRMATION_CONFIRM_LABEL _("Confirm user(-s) deletion:") +#define DELETE_CONFIRMATION_CHOSEN_LABEL _("Chosen") +#define DELETE_CONFIRMATION_USER_LABEL _("User") +#define DELETE_CONFIRMATION_HOME_LABEL _("Home directory") +#define DELETE_CONFIRMATION_DELETE_HOME_LABEL _("Delete home directory") \ No newline at end of file diff --git a/ubl-settings-usergroups-confirmation.glade b/ubl-settings-usergroups-confirmation.glade new file mode 100644 index 0000000..a99a9ca --- /dev/null +++ b/ubl-settings-usergroups-confirmation.glade @@ -0,0 +1,229 @@ + + + + + + + True + False + com.ublinux.ubl-settings-usergroups.cancel-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.accept-symbolic + + + + + + + + + + + + + + + + + 450 + 300 + False + False + True + 450 + com.ublinux.ubl-settings-usergroups + + + True + False + vertical + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + 20 + 20 + 20 + 20 + dialog-question-symbolic + 6 + + + False + True + 0 + + + + + True + False + Confirm user(-s) deletion: + 0 + + + True + True + 1 + + + + + False + True + 0 + + + + + True + True + in + + + True + True + liststore1 + + + + + + Chosen + + + + 0 + + + + + + + User + + + + 1 + + + + + + + Home directory + + + + 2 + + + + + + + Delete home directory + + + + 4 + 3 + + + + + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + + True + False + + + True + False + User deletion + + + + + + + + Cancel + True + True + True + image4 + + + + + + Accept + True + True + True + image5 + + + + end + 1 + + + + + + diff --git a/ubl-settings-usergroups-savesettings.glade b/ubl-settings-usergroups-savesettings.glade index e5f6bfe..fe73517 100644 --- a/ubl-settings-usergroups-savesettings.glade +++ b/ubl-settings-usergroups-savesettings.glade @@ -13,6 +13,8 @@ com.ublinux.ubl-settings-usergroups.accept-symbolic + 450 + 300 False False True diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index b490cce..f55656f 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -100,6 +100,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False com.ublinux.ubl-settings-usergroups.trash-symbolic + + True + False + com.ublinux.ubl-settings-usergroups.save-symbolic + True False @@ -239,6 +244,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 7 + + + True + False + + + False + True + 8 + + True @@ -253,7 +269,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 8 + 9 @@ -270,7 +286,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 9 + 10 @@ -577,9 +593,4 @@ status - - True - False - com.ublinux.ubl-settings-usergroups.save-symbolic - diff --git a/ubl-settings-usergroups.pot b/ubl-settings-usergroups.pot index bff1203..321db2c 100644 --- a/ubl-settings-usergroups.pot +++ b/ubl-settings-usergroups.pot @@ -593,3 +593,27 @@ msgstr "" #: source/ubl-strings.h:163 msgid "For system save mode \"Sandbox\"" msgstr "" + +#: source/ubl-strings.h:166 +msgid "User deletion" +msgstr "" + +#: source/ubl-strings.h:167 +msgid "Confirm user(-s) deletion:" +msgstr "" + +#: source/ubl-strings.h:168 +msgid "Chosen" +msgstr "" + +#: source/ubl-strings.h:169 +msgid "User" +msgstr "" + +#: source/ubl-strings.h:170 +msgid "Home directory" +msgstr "" + +#: source/ubl-strings.h:171 +msgid "Delete home directory" +msgstr "" diff --git a/ubl-settings-usergroups_ru.po b/ubl-settings-usergroups_ru.po index ea791f4..0a9d8d6 100644 --- a/ubl-settings-usergroups_ru.po +++ b/ubl-settings-usergroups_ru.po @@ -630,3 +630,27 @@ msgstr "" #: source/ubl-strings.h:163 msgid "For system save mode \"Sandbox\"" msgstr "Для режима сохранения системы \"Песочница\"" + +#: source/ubl-strings.h:166 +msgid "User deletion" +msgstr "Удаление пользователя(-лей)" + +#: source/ubl-strings.h:167 +msgid "Confirm user(-s) deletion:" +msgstr "Подтвердите удаление пользователя (-ей):" + +#: source/ubl-strings.h:168 +msgid "Chosen" +msgstr "Выбран" + +#: source/ubl-strings.h:169 +msgid "User" +msgstr "Пользователь" + +#: source/ubl-strings.h:170 +msgid "Home directory" +msgstr "Домашний каталог" + +#: source/ubl-strings.h:171 +msgid "Delete home directory" +msgstr "Удалить домашний каталог"