1.20.8: 2012-02-05 Murray Cumming Button scripts and Field Calculations: Test button: Check for pygtk2. * glom/mode_data/box_data.cc: :execute_button_script(): Move the warning UI into * glom/utils_ui.[h|cc]: a new script_check_for_pygtk2_with_warning() method. * glom/mode_design/fields/dialog_fieldcalculation.cc: on_button_test(): * glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.cc: on_button_test_script(): Use the new function here. 2012-02-03 Murray Cumming Button scripts: Check and warn about pygtk2 instead of crashing. * glom/libglom/utils.[h|cc]: Add script_check_for_pygtk(). * Makefile_tests.am: * tests/test_script_check_for_problems.cc: Add a test for the check function. * glom/mode_data/box_data.cc: execute_button_script(): Show a warning dialog, and do not run the script, if it seems to use pygtk. This should help with but #669196 (alien) and ##661766 (Andre Klapper) . 2012-02-03 Murray Cumming ReportBuilder: Add error checking. * glom/libglom/report_builder.[h|cc]: Return bool from the private methods and check those results. 2012-02-03 Murray Cumming Reports: Make summary fields work again. * glom/libglom/report_builder.cc: report_build_summary(): Remove any sort clause (ORDER BY) from the FoundSet because that makes no sense for a single row with summary fields. It looks like recent versions of PostgreSQL have become more strict about this, producing this error, for instance: column "invoices.invoice_id" must appear in the GROUP BY clause or be used in an aggregate function * Makefile_tests.am: * tests/test_selfhosting_new_then_report_summary.cc: Add a test for this. This fixes bug #669281 (alien) 2012-02-03 Murray Cumming Document: Really load the table privileges. * glom/libglom/db_utils.[h|cc]: add_group(): Take a bool superuser parameter. add_groups_from_document(): Use add_group() instead of executing the ADD GROUP query directly, to make sure that we also start with some sane table privileges defaults, in case nothing else sets the privielges. * glom/libglom/document/document.cc: load_after(): Fix a typo so that the group privileges are really loaded (and then saved again instead of being lost). * examples/example_film_manager.glom: * examples/example_smallbusiness.glom: Save these with useful group privileges, so the groups will be allowed to see tables. * tests/test_document_load.cc: Test the loading of the group privileges. Previously the examples were created with groups that could not even view the tables, which meant that they could not even find out about their existence. This deals with the problem found here: https://bugzilla.gnome.org/show_bug.cgi?id=669043#c2 But I would like to show the existence (and structure) of tables even if their data cannot be viewed, so there is more work to do. 2012-02-03 Murray Cumming Add some runtime warnings. * glom/libglom/db_utils.cc: get_table_names_from_database(): Slightly improved error checking. * glom/libglom/privs.cc: set_table_privileges(): Warn if a GRANT fails. 2012-02-02 Murray Cumming Share on Network: Add reassuring message when user removal fails. * glom/frame_glom.cc: Add a stdout message saying the the default user has been disabled, because the existing message about the failure to remove the user looks at first like a security problem. I still do not know why removal fails, even though we do change the ownership of the database. 2012-02-02 Murray Cumming test_selfhosting_new_empty_then_users: Test user removal. * glom/base_db.[h|cc]: Move remove_user() and remove_user_from_group() to * glom/libglom/db_utils.[h|cc]. * glom/frame_glom.cc: * glom/mode_design/users/dialog_users_list.cc: Adapted. * tests/test_selfhosting_new_empty_then_users.cc: Test these functions. 2012-02-02 Murray Cumming Really prevent changing to developer mode for non-developers. * glom/frame_glom.cc: on_menu_developer_developer(): Actually use the result of Privs::get_user_is_in_group(). * tests/test_selfhosting_new_from_example_operator.cc: Test this same function here, though this test currently fails anyway. This fixes bug #669043 (alien) 2012-02-01 Murray Cumming Allow user and group names to have spaces and other special characters. * glom/libglom/privs.cc: get_table_privileges(): Instead of parsing the relacl.pg_class field, use the PostgreSQL has_table_privilege() function, though it needs some strange quoting (see comments). This code is much simpler now. * tests/test_selfhosting_new_empty_then_users.cc: Add various other table, group, and user names, to excercise the code. This now passes. 2012-02-01 Murray Cumming test_selfhosting_new_empty_then_users: Show the problem with spaces. * tests/test_selfhosting_new_empty_then_users.cc: Privs::get_table_privileges() must parse a strange format. This test shows that it fails if the group name contains spaces. 2012-02-01 Murray Cumming Limit user and group name lengths. * glom/libglom/privs.[h|cc]: Add a MAX_ROLE_SIZE enum constants. I cannot find any PostgreSQL documentation of this 63 character limit. * glom/mode_design/users/dialog_new_group.cc: * glom/mode_design/users/dialog_user.cc: Use it to set maximum characters for the entry boxes. * tests/test_selfhosting_new_empty_then_users.cc: Show that the problem found so far was caused by too-long names, not spaces. I still need to check parsing of table permissions. 2012-02-01 Murray Cumming test_selfhosting_new_empty_then_users: Test user adding with all group names. * tests/test_selfhosting_new_empty_then_users.cc: Use for loops to simplify the code and to make sure that we test adding of users with all the group types. This shows a problem: Privs::get_database_groups() does not contain the expected user: group: somegroup with space characters1 user: someuser with space characters1for_somegroup with space characters1 2012-02-01 Murray Cumming test_selfhosting_new_empty_then_users: Improvements. * tests/test_selfhosting_new_empty_then_users.cc: Add tables that will be affected. Test strange characters in group and user names. 2012-02-01 Murray Cumming Add test_selfhosting_new_empty_then_users * glom/mode_design/users/dialog_groups_list.cc: on_button_group_new(): Move the group creation code to: * glom/libglom/db_utils.[h|cc]: * glom/libglom/privs.[h|cc]: set_table_privileges(): Return a bool to report failures. * Makefile_tests.am: * tests/test_selfhosting_new_empty_then_users.cc: Add this test to test simple creation of a group and a user. 2012-02-01 Murray Cumming Fix the build. * glom/mode_design/users/dialog_new_group.cc: * glom/mode_design/users/dialog_user.cc: Add includes to fix the build. 2012-02-01 Murray Cumming Limit user and group name lengths. * glom/libglom/privs.[h|cc]: Add a MAX_ROLE_SIZE enum constants. I cannot find any PostgreSQL documentation of this 63 character limit. * glom/mode_design/users/dialog_new_group.cc: * glom/mode_design/users/dialog_user.cc: Use it to set maximum characters for the entry boxes. * tests/test_selfhosting_new_empty_then_users.cc: Show that the problem found so far was caused by too-long names, not spaces. I still need to check parsing of table permissions. 2012-01-30 Murray Cumming test_selfhosting_new_empty: Simplify the cleanup code. * tests/test_selfhosting_new_empty.cc: Call cleanup if test() returns false, like we in the other tests, to avoid calling it in too many places. 2012-01-30 Murray Cumming Require the latest goocanvas because it has fixes that PrintLayout needs. * configure.ac: Require goocanvas 2.0.1. 2012-01-29 Murray Cumming Database Preferences: Really store the organization name in the database. * glom/libglom/db_utils.cc: set_database_preferences(): Also UPDATE the organization name. This fixes bug #668836 (alien) 2012-01-29 Murray Cumming Field Formatting: Related Choices: Default to showing the primary key. * glom/mode_design/layout/layout_item_dialogs/box_formatting.cc: on_combo_choices_relationship_changed(): By default, automatically choose the related table's primary key as the field to show in the choices. Other fields should then be shown (or looked up) based on the chosen ID. This avoids the confusion noticed here: https://bugzilla.gnome.org/show_bug.cgi?id=668759#c21 2012-01-29 Murray Cumming CellRendererDbList: Do not crash if one of the fields is hidden. * glom/mode_data/datawidget/cellrenderer_dblist.cc: repack_cells_related(): Do not crash if create_cell() returns 0, and add a comment explaining that that is OK. * glom/mode_data/datawidget/cellcreation.cc: Add explanatory comments. This fixes the second crash mentioned in #668759 (alien). 2012-01-29 Murray Cumming Choices: Allow the field to be be other than the primary key. * glom/mode_data/datawidget/treemodel_db.h: Make most methods and members private again, documentation what they *key methods and members really mean. * glom/mode_data/datawidget/treemodel_db_withextratext.[h|cc]: Add m_column_index_first and m_item_first members. Constructor: Set these by looking for the first LayoutItem_Field, because that is what we will want to show in the first cell of a combobox, which is where this model is used. Use these instead of the *key members, which were actually the primary key. We had previously assumed that the first field would always be the primary key, but we should not enforce that. This fixes crashing bug #668759 (alien). 2012-01-28 Murray Cumming ComboChoicesWithTreeModel: Make sure the model always has the primary key. * glom/libglom/data_structure/layout/layoutitem_field.h: predicate_LayoutItem_Field_IsSameField: Let this be used with containers of LayoutItems as well as just LayoutItem_Fields. * glom/libglom/utils.[h|cc]: Add get_layout_items_plus_primary_key(). * glom/mode_data/box_data_list.cc: create_layout(): Simplify code by using get_layout_items_plus_primary_key(). * glom/mode_data/datawidget/combochoiceswithtreemodel.cc: set_choices_related(): Use get_layout_items_plus_primary_key() so the model has the primary key, avoiding a warning and a later crash. 2012-01-27 Murray Cumming Test creation from examples in non-English locales. * Makefile_tests.am: * tests/test_selfhosting_new_from_example_in_locales.sh: Run the test_selfhosting_new_from_example example in various locales, to make sure that the libgda problem (see bug #668346), or something like it, does not come back. * tests/test_selfhosting_new_from_example.cc: Call setlocale().