From: Andrea Zagli Date: Mon, 26 Dec 2011 09:32:18 +0000 (+0100) Subject: Controllo, con libautoz, di chi può modificare comuni e vie (closes #95). X-Git-Tag: gtk3~8 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=661056ae0b5d9178a92bbc568261688305476696;p=solipa%2Fterritorio Controllo, con libautoz, di chi può modificare comuni e vie (closes #95). --- diff --git a/.anjuta/session/anjuta.session b/.anjuta/session/anjuta.session new file mode 100644 index 0000000..d63c88a --- /dev/null +++ b/.anjuta/session/anjuta.session @@ -0,0 +1,29 @@ + +[Anjuta] +Maximized=1 +Geometry=1366x741+0+0 + +[File Loader] +Files=file:///home/andreaz/files/comune/solipa/territorio/src/via.c#213%%%file:///home/andreaz/files/comune/solipa/territorio/src/widget.h#80%%%file:///home/andreaz/files/comune/solipa/territorio/src/widget.c#616%%%file:///home/andreaz/files/comune/solipa/territorio/src/vie.c#329 + +[Document Manager] +bookmarks=\n\n + +[Execution] +Run in terminal=2 +Working directories=file:///home/andreaz/files/comune/solipa/territorio + +[Project Manager] +Shortcut=territorio//territorio//src//territorio%%%territorio//territorio//libreria//libterritorio.la%%%territorio//territorio//tests//widget +Expand=territorio + +[Build] +Configuration list=1:Default:%%%1:Debug:Debug%%%1:Profiling:Profiling%%%1:Optimized:Optimized +Selected Configuration=Default +BuildArgs/Default=--enable-maintainer-mode +BuildArgs/Debug=--enable-maintainer-mode 'CFLAGS=-g -O0' 'CXXFLAGS=-g -O0' 'JFLAGS=-g -O0' 'FFLAGS=-g -O0' +BuildArgs/Profiling=--enable-maintainer-mode 'CFLAGS=-g -pg' 'CXXFLAGS=-g -pg' 'JFLAGS=-g -pg' 'FFLAGS=-g -pg' +BuildArgs/Optimized=--enable-maintainer-mode 'CFLAGS=-O2' 'CXXFLAGS=-O2' 'JFLAGS=-O2' 'FFLAGS=-O2' + +[Debugger] +Stop at beginning=2 diff --git a/.anjuta/session/dock-layout.xml b/.anjuta/session/dock-layout.xml new file mode 100644 index 0000000..995aec9 --- /dev/null +++ b/.anjuta/session/dock-layout.xml @@ -0,0 +1,2 @@ + + diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db index e8e1eba..9c64799 100644 Binary files a/.anjuta_sym_db.db and b/.anjuta_sym_db.db differ diff --git a/data/territorio/gui/territorio.gui b/data/territorio/gui/territorio.gui index 6c02e6e..0178d85 100644 --- a/data/territorio/gui/territorio.gui +++ b/data/territorio/gui/territorio.gui @@ -1,7 +1,7 @@ - + False @@ -101,6 +101,8 @@ + + @@ -3318,12 +3320,15 @@ True True lstore_vie - False + True True 1 Nome + True + True + 1 @@ -3335,10 +3340,13 @@ Comune + True + True + 3 - 2 + 3 @@ -3346,10 +3354,13 @@ Provincia + True + True + 4 - 3 + 4 @@ -3357,10 +3368,13 @@ Regione + True + True + 4 - 4 + 5 diff --git a/docs/territorio/examples/territorio.conf b/docs/territorio/examples/territorio.conf index e4f9853..d9da643 100644 --- a/docs/territorio/examples/territorio.conf +++ b/docs/territorio/examples/territorio.conf @@ -1,6 +1,6 @@ [AUTE] plugin=/usr/local/lib/libaute/plugins/libaute-db -cnc_string=PostgreSQL://postgres:postgres@HOST=localhost;PORT=5432;DB_NAME=aute +cnc_string=PostgreSQL://postgres:postgres@HOST=localhost;PORT=5432;DB_NAME=autedb [AUTOZ] cnc_string=PostgreSQL://postgres:postgres@HOST=localhost;PORT=5432;DB_NAME=autoz diff --git a/src/comune.c b/src/comune.c index d389352..b4ca114 100644 --- a/src/comune.c +++ b/src/comune.c @@ -197,6 +197,15 @@ TerritorioComune { gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button28")), FALSE); } + else if (priv->id != 0) + { + ires1 = autoz_get_resource_from_id (priv->commons->autoz, + g_strdup_printf ("territorio_comuni_%d_rw", priv->id)); + if (AUTOZ_IS_IRESOURCE (ires1) && !autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button28")), FALSE); + } + } return a; } diff --git a/src/comuni.c b/src/comuni.c index 49e543d..4160127 100644 --- a/src/comuni.c +++ b/src/comuni.c @@ -531,11 +531,27 @@ territorio_comuni_on_btn_elimina_clicked (GtkButton *button, GtkTreeIter iter; guint id; + AutozIResource *ires1; + TerritorioComuni *territorio_comuni = (TerritorioComuni *)user_data; TerritorioComuniPrivate *priv = TERRITORIO_COMUNI_GET_PRIVATE (territorio_comuni); if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) { + gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_comuni), &iter, + COL_ID, &id, + -1); + ires1 = autoz_get_resource_from_id (priv->commons->autoz, + g_strdup_printf ("territorio_comuni_%d_rw", id)); + if (AUTOZ_IS_IRESOURCE (ires1) && !autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + solipa_message_dialog (GTK_WIDGET (priv->wtransient), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Non si è autorizzati a eliminare il comune selezionato."); + return; + } + dialog = gtk_message_dialog_new (priv->wtransient, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, @@ -544,10 +560,6 @@ territorio_comuni_on_btn_elimina_clicked (GtkButton *button, risp = gtk_dialog_run (GTK_DIALOG (dialog)); if (risp == GTK_RESPONSE_YES) { - gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_comuni), &iter, - COL_ID, &id, - -1); - gdaex_execute (priv->commons->gdaex, g_strdup_printf ("UPDATE comuni SET status = 'E' WHERE id = %d", id)); diff --git a/src/via.c b/src/via.c index 5ff4a5c..d5242ec 100644 --- a/src/via.c +++ b/src/via.c @@ -69,6 +69,7 @@ struct _TerritorioViaPrivate GtkForm *form; GtkWidget *w; + GtkWidget *twidget; GObject **objects; @@ -121,7 +122,6 @@ TerritorioVia { GError *error; AutozIResource *ires1; - GtkWidget *twidget; TerritorioVia *a = TERRITORIO_VIA (g_object_new (territorio_via_get_type (), NULL)); @@ -149,8 +149,8 @@ TerritorioVia "label41", NULL); - twidget = territorio_widget_new (priv->commons); - g_object_set (G_OBJECT (twidget), + priv->twidget = territorio_widget_new (priv->commons); + g_object_set (G_OBJECT (priv->twidget), "show-stato", FALSE, "show-regione", FALSE, "show-provincia", FALSE, @@ -159,7 +159,7 @@ TerritorioVia "show-via", FALSE, NULL); - territorio_widget_add_to_gtkform (TERRITORIO_WIDGET (twidget), priv->form, + territorio_widget_add_to_gtkform (TERRITORIO_WIDGET (priv->twidget), priv->form, NULL, FALSE, NULL, @@ -172,8 +172,8 @@ TerritorioVia FALSE); gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (priv->commons->gtkbuilder, "hbox3")), - twidget, TRUE, TRUE, 0); - gtk_widget_show_all (twidget); + priv->twidget, TRUE, TRUE, 0); + gtk_widget_show_all (priv->twidget); g_signal_connect (priv->w, "delete-event", G_CALLBACK (territorio_via_on_w_via_delete_event), (gpointer)a); @@ -202,6 +202,15 @@ TerritorioVia { gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button52")), FALSE); } + else if (priv->id != 0) + { + ires1 = autoz_get_resource_from_id (priv->commons->autoz, + g_strdup_printf ("territorio_comuni_%d_rw", territorio_widget_get_comune (TERRITORIO_WIDGET (priv->twidget)))); + if (AUTOZ_IS_IRESOURCE (ires1) && !autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (commons->gtkbuilder, "button52")), FALSE); + } + } return a; } @@ -286,12 +295,9 @@ territorio_via_carica (TerritorioVia *territorio_via) static void territorio_via_salva (TerritorioVia *territorio_via) { - GError *error = NULL; gchar *sql; GtkWidget *dialog; - - GDate *da; - GDate *a; + AutozIResource *ires1; TerritorioViaClass *klass = TERRITORIO_VIA_GET_CLASS (territorio_via); @@ -302,6 +308,17 @@ territorio_via_salva (TerritorioVia *territorio_via) return; } + ires1 = autoz_get_resource_from_id (priv->commons->autoz, + g_strdup_printf ("territorio_comuni_%d_rw", territorio_widget_get_comune (TERRITORIO_WIDGET (priv->twidget)))); + if (AUTOZ_IS_IRESOURCE (ires1) && !autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + solipa_message_dialog (priv->w, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Non si è autorizzati a modificare le vie del comune selezionato."); + return; + } + if (priv->id == 0) { sql = gtk_form_get_sql (priv->form, GTK_FORM_SQL_INSERT); diff --git a/src/vie.c b/src/vie.c index c91acad..e504b81 100644 --- a/src/vie.c +++ b/src/vie.c @@ -92,6 +92,7 @@ enum { COL_ID, COL_NOME, + COL_ID_COMUNI, COL_COMUNE, COL_PROVINCIA, COL_REGIONE @@ -182,8 +183,8 @@ TerritorioVie error = NULL; gtk_builder_add_objects_from_file (priv->commons->gtkbuilder, priv->commons->guifile, g_strsplit (g_strconcat ("lstore_vie|", - (selezione ? "w_vie" : "vbox14"), - NULL), "|", -1), + (selezione ? "w_vie" : "vbox14"), + NULL), "|", -1), &error); if (error != NULL) { @@ -325,7 +326,7 @@ territorio_vie_carica (TerritorioVie *territorio_vie) } sql = g_strdup_printf ("SELECT v.id, v.nome," - " c.nome AS comune," + " v.id_comuni, c.nome AS comune," " p.nome || ' (' || p.sigla || ')' AS provincia," " r.nome AS regione" " FROM vie AS v" @@ -346,10 +347,10 @@ territorio_vie_carica (TerritorioVie *territorio_vie) for (row = 0; row < rows; row++) { gtk_list_store_append (priv->lstore_vie, &iter); - gtk_list_store_set (priv->lstore_vie, &iter, COL_ID, gdaex_data_model_get_field_value_integer_at (dm, row, "id"), COL_NOME, gdaex_data_model_get_field_value_stringify_at (dm, row, "nome"), + COL_ID_COMUNI, gdaex_data_model_get_field_value_integer_at (dm, row, "id_comuni"), COL_COMUNE, gdaex_data_model_get_field_value_stringify_at (dm, row, "comune"), COL_PROVINCIA, gdaex_data_model_get_field_value_stringify_at (dm, row, "provincia"), COL_REGIONE, gdaex_data_model_get_field_value_stringify_at (dm, row, "regione"), @@ -387,13 +388,10 @@ territorio_vie_modifica (TerritorioVie *territorio_vie) } else { - GtkWidget *dialog = gtk_message_dialog_new (priv->wtransient, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_OK, - "Occorre prima selezionare una via"); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + solipa_message_dialog (GTK_WIDGET (priv->wtransient), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare una via."); } } @@ -419,13 +417,10 @@ territorio_vie_selezionato (TerritorioVie *territorio_vie) } else { - GtkWidget *dialog = gtk_message_dialog_new (priv->wtransient, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_OK, - "Occorre prima selezionare una via."); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + solipa_message_dialog (GTK_WIDGET (priv->wtransient), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare una via."); } } @@ -555,12 +550,30 @@ territorio_vie_on_btn_elimina_clicked (GtkButton *button, GtkTreeIter iter; guint id; + guint id_comuni; + + AutozIResource *ires1; TerritorioVie *territorio_vie = (TerritorioVie *)user_data; TerritorioViePrivate *priv = TERRITORIO_VIE_GET_PRIVATE (territorio_vie); if (gtk_tree_selection_get_selected (priv->selection, NULL, &iter)) { + gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_vie), &iter, + COL_ID, &id, + COL_ID_COMUNI, &id_comuni, + -1); + ires1 = autoz_get_resource_from_id (priv->commons->autoz, + g_strdup_printf ("territorio_comuni_%d_rw", id_comuni)); + if (AUTOZ_IS_IRESOURCE (ires1) && !autoz_is_allowed (priv->commons->autoz, priv->commons->role_utente, ires1, FALSE)) + { + solipa_message_dialog (GTK_WIDGET (priv->wtransient), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Non si è autorizzati a eliminare le vie del comune selezionato."); + return; + } + dialog = gtk_message_dialog_new (priv->wtransient, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, @@ -569,10 +582,6 @@ territorio_vie_on_btn_elimina_clicked (GtkButton *button, risp = gtk_dialog_run (GTK_DIALOG (dialog)); if (risp == GTK_RESPONSE_YES) { - gtk_tree_model_get (GTK_TREE_MODEL (priv->lstore_vie), &iter, - COL_ID, &id, - -1); - gdaex_execute (priv->commons->gdaex, g_strdup_printf ("UPDATE vie SET status = 'E' WHERE id = %d", id)); @@ -582,13 +591,10 @@ territorio_vie_on_btn_elimina_clicked (GtkButton *button, } else { - dialog = gtk_message_dialog_new (priv->wtransient, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_OK, - "Occorre prima selezionare una via"); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + solipa_message_dialog (GTK_WIDGET (priv->wtransient), + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + "Occorre prima selezionare una via"); } } diff --git a/src/widget.c b/src/widget.c index 541b2d2..cf00abc 100644 --- a/src/widget.c +++ b/src/widget.c @@ -599,6 +599,121 @@ territorio_widget_add_to_gtkform (TerritorioWidget *widget, } } +guint +territorio_widget_get_stato (TerritorioWidget *widget) +{ + guint ret; + gboolean visible; + + TerritorioWidget *territorio_widget = TERRITORIO_WIDGET (widget); + TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (territorio_widget); + + g_return_val_if_fail (IS_TERRITORIO_WIDGET (widget), 0); + + ret = 0; + visible = FALSE; + + g_object_get (G_OBJECT (widget), "show-stato", &visible, NULL); + if (visible) + { + ret = strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_stato)), NULL, 10); + } + + return ret; +} + +guint +territorio_widget_get_regione (TerritorioWidget *widget) +{ + guint ret; + gboolean visible; + + TerritorioWidget *territorio_widget = TERRITORIO_WIDGET (widget); + TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (territorio_widget); + + g_return_val_if_fail (IS_TERRITORIO_WIDGET (widget), 0); + + ret = 0; + visible = FALSE; + + g_object_get (G_OBJECT (widget), "show-regione", &visible, NULL); + if (visible) + { + ret = strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_regione)), NULL, 10); + } + + return ret; +} + +guint +territorio_widget_get_provincia (TerritorioWidget *widget) +{ + guint ret; + gboolean visible; + + TerritorioWidget *territorio_widget = TERRITORIO_WIDGET (widget); + TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (territorio_widget); + + g_return_val_if_fail (IS_TERRITORIO_WIDGET (widget), 0); + + ret = 0; + visible = FALSE; + + g_object_get (G_OBJECT (widget), "show-provincia", &visible, NULL); + if (visible) + { + ret = strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_provincia)), NULL, 10); + } + + return ret; +} + +guint +territorio_widget_get_comune (TerritorioWidget *widget) +{ + guint ret; + gboolean visible; + + TerritorioWidget *territorio_widget = TERRITORIO_WIDGET (widget); + TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (territorio_widget); + + g_return_val_if_fail (IS_TERRITORIO_WIDGET (widget), 0); + + ret = 0; + visible = FALSE; + + g_object_get (G_OBJECT (widget), "show-comune", &visible, NULL); + if (visible) + { + ret = strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_comune)), NULL, 10); + } + + return ret; +} + +guint +territorio_widget_get_via (TerritorioWidget *widget) +{ + guint ret; + gboolean visible; + + TerritorioWidget *territorio_widget = TERRITORIO_WIDGET (widget); + TerritorioWidgetPrivate *priv = TERRITORIO_WIDGET_GET_PRIVATE (territorio_widget); + + g_return_val_if_fail (IS_TERRITORIO_WIDGET (widget), 0); + + ret = 0; + visible = FALSE; + + g_object_get (G_OBJECT (widget), "show-via", &visible, NULL); + if (visible) + { + ret = strtol (gtk_form_decoder_get_key (GTK_FORM_DECODER (priv->dec_via)), NULL, 10); + } + + return ret; +} + /* PRIVATE */ static void territorio_widget_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) diff --git a/src/widget.h b/src/widget.h index ac767cf..c8b710e 100644 --- a/src/widget.h +++ b/src/widget.h @@ -72,6 +72,12 @@ void territorio_widget_add_to_gtkform (TerritorioWidget *widget, const gchar *via_field, gboolean via_obligatory); +guint territorio_widget_get_stato (TerritorioWidget *widget); +guint territorio_widget_get_regione (TerritorioWidget *widget); +guint territorio_widget_get_provincia (TerritorioWidget *widget); +guint territorio_widget_get_comune (TerritorioWidget *widget); +guint territorio_widget_get_via (TerritorioWidget *widget); + G_END_DECLS