~ubuntu-branches/ubuntu/precise/glom/precise-updates

« back to all changes in this revision

Viewing changes to glom/mode_design/users/dialog_users_list.cc

  • Committer: Bazaar Package Importer
  • Author(s): Chris Coulson
  • Date: 2009-10-09 16:50:36 UTC
  • mfrom: (1.1.42 upstream)
  • Revision ID: james.westby@ubuntu.com-20091009165036-orinvwmohk838xxl
Tags: 1.12.2-0ubuntu1
* New upstream version:
  - FFE LP: #391664
* debian/control:
  - Bump python-gnome2-extras-dev build-dep to >= 2.25.3.
  - Bump libgdamm3.0-dev build-dep to libgdamm4.0-dev >= 3.99.14.
  - Change libgda3-dev build-dep to libgda-4.0-dev.
  - Change libgda3-postgres dependency to libgda-4.0-postgres.
  - Bump libgtkmm-2.4-dev build-dep to >= 2.14.
  - Add build-dep on libgconfmm-2.6-dev.
  - Bump libgoocanvasmm-dev build-dep to >= 0.14.0.
  - Remove build-dep on libbakery-2.6-dev.
  - Bump postgresql-8.3 dependency to postgresql-8.4.
  - Change scrollkeeper build-dep to rarian-compat.
  - Rename libglom{0,-dev} -> libglom-1.12-{0,dev}. Upstream include
    APIVER in the library name now.
* debian/rules:
  - Update --with-postgres-utils configure flag to point to the new
    path.
  - Drop deprecated --disable-scrollkeeper configure flag.
  - Update DEB_SHLIBDEPS_INCLUDE with new libglom-1.12-0 package name.
  - Don't include /usr/share/cdbs/1/rules/simple-patchsys.mk - there
    are currently no patches.
* debian/libglom-1.12-0.install:
  - Updated for new version.
* debian/libglom-1.12-dev.install:
  - Install pc and header files.
* debian/glom-doc.install:
  - Updated for new version.
* debian/glom.install:
  - Updated for new version.
* Fix debian/watch.
* Dropped obsolete 10-distro-install-postgres-change.patch.
* Built against latest libgoocanvasmm (LP: #428445).
* Also closes LP: #230007, LP: #393229, LP: #393231, LP: #394507,
  LP: #394887, LP: #394894, LP: #397409, LP: #381563.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#include "dialog_user.h"
23
23
#include "dialog_choose_user.h"
24
24
#include <glom/glom_privs.h>
25
 
#include <glom/libglom/glade_utils.h>
26
 
#include <bakery/App/App_Gtk.h> //For util_bold_message().
 
25
#include <glom/glade_utils.h>
 
26
#include <glom/utils_ui.h> //For bold_message()).
27
27
//#include <libgnome/gnome-i18n.h>
28
28
#include <glibmm/i18n.h>
29
29
 
30
30
namespace Glom
31
31
{
32
32
 
33
 
Dialog_UsersList::Dialog_UsersList(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
 
33
Dialog_UsersList::Dialog_UsersList(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& builder)
34
34
: Gtk::Dialog(cobject),
35
35
  m_treeview_users(0),
36
36
  m_combo_group(0),
40
40
  m_button_user_delete(0),
41
41
  m_button_user_edit(0)
42
42
{
43
 
  refGlade->get_widget_derived("combobox_group", m_combo_group);
 
43
  builder->get_widget_derived("combobox_group", m_combo_group);
44
44
  m_combo_group->signal_changed().connect(sigc::mem_fun(*this, &Dialog_UsersList::on_combo_group_changed));
45
45
 
46
46
 
47
 
  refGlade->get_widget("treeview_users", m_treeview_users);
 
47
  builder->get_widget("treeview_users", m_treeview_users);
48
48
  if(m_treeview_users)
49
49
  {
50
50
    Glib::RefPtr<Gtk::TreeView::Selection> refSelection = m_treeview_users->get_selection();
65
65
  }
66
66
 
67
67
 
68
 
  refGlade->get_widget("button_delete", m_button_user_delete);
 
68
  builder->get_widget("button_delete", m_button_user_delete);
69
69
  m_button_user_delete->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_UsersList::on_button_user_delete) );
70
70
 
71
 
  refGlade->get_widget("button_add", m_button_user_add);
 
71
  builder->get_widget("button_add", m_button_user_add);
72
72
  m_button_user_add->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_UsersList::on_button_user_add) );
73
73
 
74
 
  refGlade->get_widget("button_remove", m_button_user_remove);
 
74
  builder->get_widget("button_remove", m_button_user_remove);
75
75
  m_button_user_remove->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_UsersList::on_button_user_remove) );
76
76
 
77
 
  refGlade->get_widget("button_new", m_button_user_new);
 
77
  builder->get_widget("button_new", m_button_user_new);
78
78
  m_button_user_new->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_UsersList::on_button_user_new) );
79
79
 
80
 
  refGlade->get_widget("button_edit", m_button_user_edit);
 
80
  builder->get_widget("button_edit", m_button_user_edit);
81
81
  m_button_user_edit->signal_clicked().connect( sigc::mem_fun(*this, &Dialog_UsersList::on_button_user_edit) );
82
82
 
83
83
  enable_buttons();
129
129
        const Glib::ustring user = row[m_model_columns_users.m_col_name];
130
130
        if(!user.empty())
131
131
        {
132
 
          Glib::ustring strQuery = "ALTER GROUP \"" + m_combo_group->get_active_text() + "\" DROP USER \"" + user + "\"";
133
 
          query_execute(strQuery, this);
 
132
          remove_user_from_group(user, m_combo_group->get_active_text());
134
133
 
135
134
          fill_list();
136
135
        }
157
156
        const Glib::ustring user = row[m_model_columns_users.m_col_name];
158
157
        if(!user.empty())
159
158
        {
160
 
          Gtk::MessageDialog dialog(Bakery::App_Gtk::util_bold_message(_("Delete User")), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_OK_CANCEL);
 
159
          Gtk::MessageDialog dialog(Utils::bold_message(_("Delete User")), true, Gtk::MESSAGE_QUESTION, Gtk::BUTTONS_OK_CANCEL);
161
160
          dialog.set_secondary_text(_("Are your sure that you wish to delete this user?"));
162
161
          dialog.set_transient_for(*this);
163
162
 
164
 
          int response = dialog.run();
 
163
          const int response = dialog.run();
165
164
          dialog.hide();
166
165
 
167
166
          if(response == Gtk::RESPONSE_OK)
168
167
          {
169
 
            Glib::ustring strQuery = "DROP USER +\"" + user + "\"";
170
 
            query_execute(strQuery, this);
171
 
 
 
168
            remove_user(user);
172
169
            fill_list();
173
170
          }
174
171
        }
184
181
  Dialog_ChooseUser* dialog = 0;
185
182
  try
186
183
  {
187
 
    Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create(Utils::get_glade_file_path("glom_developer.glade"), "dialog_choose_user");
 
184
    Glib::RefPtr<Gtk::Builder> refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path("glom_developer.glade"), "dialog_choose_user");
188
185
 
189
186
    refXml->get_widget_derived("dialog_choose_user", dialog);
190
187
  }
191
 
  catch(const Gnome::Glade::XmlError& ex)
 
188
  catch(const Gtk::BuilderError& ex)
192
189
  {
193
190
    std::cerr << ex.what() << std::endl;
194
191
  }
210
207
  if(!user.empty())
211
208
  {
212
209
    //Add it to the group:
213
 
    Glib::ustring strQuery = "ALTER GROUP \"" + m_combo_group->get_active_text() + "\" ADD USER \"" + user + "\"";
214
 
    query_execute(strQuery, this);
 
210
    const Glib::ustring strQuery = "ALTER GROUP \"" + m_combo_group->get_active_text() + "\" ADD USER \"" + user + "\"";
 
211
    const bool test = query_execute(strQuery);
 
212
    if(!test)
 
213
      std::cerr << "Dialog_UsersList::on_button_user_add(): ALTER GROUP failed." << std::endl;
215
214
 
216
215
    //Remove any user rights, so that all rights come from the user's presence in the group:
217
 
    Document_Glom::type_listTableInfo table_list = get_document()->get_tables();
 
216
    Document::type_listTableInfo table_list = get_document()->get_tables();
218
217
 
219
 
    for(Document_Glom::type_listTableInfo::const_iterator iter = table_list.begin(); iter != table_list.end(); ++iter)
 
218
    for(Document::type_listTableInfo::const_iterator iter = table_list.begin(); iter != table_list.end(); ++iter)
220
219
    {
221
 
      Glib::ustring strQuery = "REVOKE ALL PRIVILEGES ON \"" + (*iter)->get_name() + "\" FROM \"" + user + "\"";
222
 
      query_execute(strQuery, this);
 
220
      const Glib::ustring strQuery = "REVOKE ALL PRIVILEGES ON \"" + (*iter)->get_name() + "\" FROM \"" + user + "\"";
 
221
      const bool test = query_execute(strQuery);
 
222
      if(!test)
 
223
        std::cerr << "Dialog_UsersList::on_button_user_add(): REVOKE failed." << std::endl;
223
224
    }
224
225
 
225
226
    fill_list();
231
232
  Dialog_User* dialog = 0;
232
233
  try
233
234
  {
234
 
    Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create(Utils::get_glade_file_path("glom_developer.glade"), "dialog_user");
 
235
    Glib::RefPtr<Gtk::Builder> refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path("glom_developer.glade"), "dialog_user");
235
236
 
236
237
    refXml->get_widget_derived("dialog_user", dialog);
237
238
  }
238
 
  catch(const Gnome::Glade::XmlError& ex)
 
239
  catch(const Gtk::BuilderError& ex)
239
240
  {
240
241
    std::cerr << ex.what() << std::endl;
241
242
  }
268
269
  if(response != Gtk::RESPONSE_OK)
269
270
    return;
270
271
 
271
 
 
272
 
  if(!user.empty() && !password.empty())
273
 
  {
274
 
    //Create the user:
275
 
    Glib::ustring strQuery = "CREATE USER \"" + user + "\" PASSWORD '" + password + "'" ;
276
 
    Glib::RefPtr<Gnome::Gda::DataModel> data_model = query_execute(strQuery, this);
277
 
 
278
 
    //Add it to the group:
279
 
    strQuery = "ALTER GROUP \"" + m_combo_group->get_active_text() + "\" ADD USER \"" + user + "\"";
280
 
    data_model = query_execute(strQuery, this);
281
 
 
282
 
    fill_list();
283
 
  }
 
272
  add_user(user, password, m_combo_group->get_active_text() /* group */);
 
273
  fill_list();
284
274
}
285
275
 
286
276
void Dialog_UsersList::on_button_user_edit()
297
287
      Dialog_User* dialog = 0;
298
288
      try
299
289
      {
300
 
        Glib::RefPtr<Gnome::Glade::Xml> refXml = Gnome::Glade::Xml::create(Utils::get_glade_file_path("glom_developer.glade"), "dialog_user");
 
290
        Glib::RefPtr<Gtk::Builder> refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path("glom_developer.glade"), "dialog_user");
301
291
 
302
292
        refXml->get_widget_derived("dialog_user", dialog);
303
293
      }
304
 
      catch(const Gnome::Glade::XmlError& ex)
 
294
      catch(const Gtk::BuilderError& ex)
305
295
      {
306
296
        std::cerr << ex.what() << std::endl;
307
297
      }
313
303
      dialog->m_entry_user->set_sensitive(false); //They can edit the password, but not the name. TODO: Allow editing of name?
314
304
 
315
305
      //Fill groups:
316
 
      dialog->m_combo_group->clear_text();
 
306
      dialog->m_combo_group->clear_items();
317
307
 
318
 
      type_vecStrings group_list = Privs::get_database_groups();
319
 
      for(type_vecStrings::const_iterator iter = group_list.begin(); iter != group_list.end(); ++iter)
 
308
      type_vec_strings group_list = Privs::get_database_groups();
 
309
      for(type_vec_strings::const_iterator iter = group_list.begin(); iter != group_list.end(); ++iter)
320
310
      {
321
311
         dialog->m_combo_group->append_text(*iter);
322
312
      }
352
342
 
353
343
      if(!user.empty() && !password.empty())
354
344
      {
355
 
        Glib::ustring strQuery = "ALTER USER \"" + user + "\" PASSWORD '" + password + "'" ;
356
 
        Glib::RefPtr<Gnome::Gda::DataModel> data_model = query_execute(strQuery, this);
 
345
        const Glib::ustring strQuery = "ALTER USER \"" + user + "\" PASSWORD '" + password + "'" ; //TODO: Escape the password.
 
346
        const bool test = query_execute(strQuery);
 
347
        if(!test)
 
348
          std::cerr << "Dialog_UsersList::on_button_user_edit(): ALTER USER failed." << std::endl;
357
349
 
358
350
        //Change the password in the current connection, if this is the current user.
359
 
         ConnectionPool* connection_pool = ConnectionPool::get_instance();
360
 
         if(connection_pool->get_user() == user)
361
 
           connection_pool->set_password(password);
 
351
        ConnectionPool* connection_pool = ConnectionPool::get_instance();
 
352
        if(connection_pool->get_user() == user)
 
353
          connection_pool->set_password(password);
362
354
 
363
355
        fill_list();
364
356
      }
390
382
  if(m_combo_group)
391
383
  {
392
384
    const Glib::ustring group_name = m_combo_group->get_active_text();
393
 
    const type_vecStrings user_list = Privs::get_database_users(group_name);
394
 
    for(type_vecStrings::const_iterator iter = user_list.begin(); iter != user_list.end(); ++iter)
 
385
    const type_vec_strings user_list = Privs::get_database_users(group_name);
 
386
    for(type_vec_strings::const_iterator iter = user_list.begin(); iter != user_list.end(); ++iter)
395
387
    {
396
388
      Gtk::TreeModel::iterator iterTree = m_model_users->append();
397
389
      Gtk::TreeModel::Row row = *iterTree;
404
396
void Dialog_UsersList::set_group(const Glib::ustring& group_name)
405
397
{
406
398
  //Fill the list of groups:
407
 
  m_combo_group->clear_text();
 
399
  m_combo_group->clear_items();
408
400
 
409
 
  type_vecStrings group_list = Privs::get_database_groups();
410
 
  for(type_vecStrings::const_iterator iter = group_list.begin(); iter != group_list.end(); ++iter)
 
401
  type_vec_strings group_list = Privs::get_database_groups();
 
402
  for(type_vec_strings::const_iterator iter = group_list.begin(); iter != group_list.end(); ++iter)
411
403
  {
412
404
    m_combo_group->append_text(*iter);
413
405
  }
427
419
  {
428
420
    if(m_model_users->children().size() == 1)
429
421
    {
430
 
      Gtk::MessageDialog dialog(Bakery::App_Gtk::util_bold_message(_("Developer group may not be empty.")), true, Gtk::MESSAGE_WARNING);
 
422
      Gtk::MessageDialog dialog(Utils::bold_message(_("Developer group may not be empty.")), true, Gtk::MESSAGE_WARNING);
431
423
      dialog.set_secondary_text(_("The developer group must contain at least one user."));
432
424
      dialog.set_transient_for(*this);
433
425
      dialog.run();