aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/exchange-account-setup/exchange-delegates-user.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/exchange-account-setup/exchange-delegates-user.c')
-rw-r--r--plugins/exchange-account-setup/exchange-delegates-user.c332
1 files changed, 0 insertions, 332 deletions
diff --git a/plugins/exchange-account-setup/exchange-delegates-user.c b/plugins/exchange-account-setup/exchange-delegates-user.c
deleted file mode 100644
index 38166747f4..0000000000
--- a/plugins/exchange-account-setup/exchange-delegates-user.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/* Copyright (C) 2002-2004 Novell, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* ExchangeDelegatesUser: A single delegate */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "exchange-delegates-user.h"
-
-#include "e2k-global-catalog.h"
-#include "e2k-marshal.h"
-#include "e2k-sid.h"
-#include "e2k-utils.h"
-
-#include <e-util/e-dialog-utils.h>
-#include <e-util/e-dialog-widgets.h>
-#include <e-util/e-gtk-utils.h>
-#include <glade/glade.h>
-#include <gtk/gtkbox.h>
-#include <gtk/gtkdialog.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkmenushell.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtktogglebutton.h>
-
-#undef GTK_DISABLE_DEPRECATED
-#include <gtk/gtkoptionmenu.h>
-
-#include <string.h>
-
-#define EXCHANGE_DELEGATES_USER_SEPARATOR -2
-#define EXCHANGE_DELEGATES_USER_CUSTOM -3
-/* Can't use E2K_PERMISSIONS_ROLE_CUSTOM, because it's -1, which
- * means "end of list" to e_dialog_option_menu_get/set
- */
-
-static const int exchange_perm_map[] = {
- E2K_PERMISSIONS_ROLE_NONE,
- E2K_PERMISSIONS_ROLE_REVIEWER,
- E2K_PERMISSIONS_ROLE_AUTHOR,
- E2K_PERMISSIONS_ROLE_EDITOR,
-
- EXCHANGE_DELEGATES_USER_SEPARATOR,
- EXCHANGE_DELEGATES_USER_CUSTOM,
-
- -1
-};
-
-const char *exchange_delegates_user_folder_names[] = {
- "calendar", "tasks", "inbox", "contacts"
-};
-static const char *widget_names[] = {
- "calendar_perms", "task_perms", "inbox_perms", "contact_perms",
-};
-
-
-enum {
- EDITED,
- LAST_SIGNAL
-};
-
-static guint signals [LAST_SIGNAL] = { 0 };
-
-#define PARENT_TYPE G_TYPE_OBJECT
-static GObjectClass *parent_class = NULL;
-
-static void
-finalize (GObject *object)
-{
- ExchangeDelegatesUser *user = EXCHANGE_DELEGATES_USER (object);
-
- if (user->display_name)
- g_free (user->display_name);
- if (user->dn)
- g_free (user->dn);
- if (user->entryid)
- g_byte_array_free (user->entryid, TRUE);
- if (user->sid)
- g_object_unref (user->sid);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-class_init (GObjectClass *object_class)
-{
- parent_class = g_type_class_ref (PARENT_TYPE);
-
- object_class->finalize = finalize;
-
- /* signals */
- signals[EDITED] =
- g_signal_new ("edited",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ExchangeDelegatesUserClass, edited),
- NULL, NULL,
- e2k_marshal_NONE__NONE,
- G_TYPE_NONE, 0);
-}
-
-E2K_MAKE_TYPE (exchange_delegates_user, ExchangeDelegatesUser, class_init, NULL, PARENT_TYPE)
-
-static inline gboolean
-is_delegate_role (E2kPermissionsRole role)
-{
- return (role == E2K_PERMISSIONS_ROLE_NONE ||
- role == E2K_PERMISSIONS_ROLE_REVIEWER ||
- role == E2K_PERMISSIONS_ROLE_AUTHOR ||
- role == E2K_PERMISSIONS_ROLE_EDITOR);
-}
-
-static void
-set_perms (GtkWidget *omenu, E2kPermissionsRole role)
-{
- if (!is_delegate_role (role)) {
- GtkWidget *menu, *item;
-
- menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (omenu));
-
- item = gtk_menu_item_new ();
- gtk_widget_set_sensitive (item, FALSE);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_menu_item_new_with_label (_("Custom"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_widget_show_all (menu);
-
- role = EXCHANGE_DELEGATES_USER_CUSTOM;
- }
-
- e_dialog_option_menu_set (omenu, role, exchange_perm_map);
-}
-
-static void
-parent_window_destroyed (gpointer dialog, GObject *where_parent_window_was)
-{
- gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL);
-}
-
-/**
- * exchange_delegates_user_edit:
- * @user: a delegate
- * @parent_window: parent window for the editor dialog
- *
- * Brings up a dialog to edit @user's permissions as a delegate.
- * An %edited signal will be emitted if anything changed.
- *
- * Return value: %TRUE for "OK", %FALSE for "Cancel".
- **/
-gboolean
-exchange_delegates_user_edit (ExchangeDelegatesUser *user,
- GtkWidget *parent_window)
-{
- GladeXML *xml;
- GtkWidget *dialog, *table, *label, *menu, *check;
- char *title;
- int button, i;
- E2kPermissionsRole role;
- gboolean modified;
-
- g_return_val_if_fail (EXCHANGE_IS_DELEGATES_USER (user), FALSE);
- g_return_val_if_fail (E2K_IS_SID (user->sid), FALSE);
-
- /* Grab the Glade widgets */
- xml = glade_xml_new (
- CONNECTOR_GLADEDIR "/exchange-delegates.glade",
- "delegate_permissions", PACKAGE);
- g_return_val_if_fail (xml, FALSE);
-
- title = g_strdup_printf (_("Permissions for %s"), user->display_name);
-
- dialog = glade_xml_get_widget (xml, "delegate_permissions");
- gtk_window_set_title (GTK_WINDOW (dialog), title);
- e_dialog_set_transient_for (GTK_WINDOW (dialog), parent_window);
-
- table = glade_xml_get_widget (xml, "toplevel_table");
- gtk_widget_reparent (table, GTK_DIALOG (dialog)->vbox);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 6);
-
- label = glade_xml_get_widget (xml, "delegate_label");
- gtk_label_set_text (GTK_LABEL (label), title);
- g_free (title);
-
- /* Set up the permissions */
- for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) {
- menu = glade_xml_get_widget (xml, widget_names[i]);
- set_perms (menu, user->role[i]);
- }
- check = glade_xml_get_widget (xml, "see_private_checkbox");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
- user->see_private);
-
- /* Run the dialog, while watching its parent. */
- g_object_weak_ref (G_OBJECT (parent_window),
- parent_window_destroyed, dialog);
- g_object_add_weak_pointer (G_OBJECT (parent_window),
- (void **)&parent_window);
- button = gtk_dialog_run (GTK_DIALOG (dialog));
- if (parent_window) {
- g_object_remove_weak_pointer (G_OBJECT (parent_window),
- (void **)&parent_window);
- g_object_weak_unref (G_OBJECT (parent_window),
- parent_window_destroyed, dialog);
- }
-
- if (button != GTK_RESPONSE_OK) {
- gtk_widget_destroy (dialog);
- return FALSE;
- }
-
- /* And update */
- modified = FALSE;
- for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) {
- menu = glade_xml_get_widget (xml, widget_names[i]);
- role = e_dialog_option_menu_get (menu, exchange_perm_map);
-
- if (is_delegate_role (user->role[i]) &&
- user->role[i] != role) {
- user->role[i] = role;
- modified = TRUE;
- }
- }
- check = glade_xml_get_widget (xml, "see_private_checkbox");
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check)) !=
- user->see_private) {
- user->see_private = !user->see_private;
- modified = TRUE;
- }
-
- g_object_unref (xml);
- gtk_widget_destroy (dialog);
-
- if (modified)
- g_signal_emit (user, signals[EDITED], 0);
-
- return TRUE;
-}
-
-/**
- * exchange_delegates_user_new:
- * @display_name: the delegate's (UTF8) display name
- *
- * Return value: a new delegate user with default permissions (but
- * with most of the internal data blank).
- **/
-ExchangeDelegatesUser *
-exchange_delegates_user_new (const char *display_name)
-{
- ExchangeDelegatesUser *user;
- int i;
-
- user = g_object_new (EXCHANGE_TYPE_DELEGATES_USER, NULL);
- user->display_name = g_strdup (display_name);
-
- for (i = 0; i < EXCHANGE_DELEGATES_LAST; i++) {
- if (i == EXCHANGE_DELEGATES_CALENDAR ||
- i == EXCHANGE_DELEGATES_TASKS)
- user->role[i] = E2K_PERMISSIONS_ROLE_EDITOR;
- else
- user->role[i] = E2K_PERMISSIONS_ROLE_NONE;
- }
-
- return user;
-}
-
-/**
- * exchange_delegates_user_new_from_gc:
- * @gc: the global catalog object
- * @email: email address of the new delegate
- * @creator_entryid: The value of the PR_CREATOR_ENTRYID property
- * on the LocalFreebusy file.
- *
- * Return value: a new delegate user with default permissions and
- * internal data filled in from the global catalog.
- **/
-ExchangeDelegatesUser *
-exchange_delegates_user_new_from_gc (E2kGlobalCatalog *gc,
- const char *email,
- GByteArray *creator_entryid)
-{
- E2kGlobalCatalogStatus status;
- E2kGlobalCatalogEntry *entry;
- ExchangeDelegatesUser *user;
- guint8 *p;
-
- status = e2k_global_catalog_lookup (
- gc, NULL, /* FIXME: cancellable */
- E2K_GLOBAL_CATALOG_LOOKUP_BY_EMAIL, email,
- (E2K_GLOBAL_CATALOG_LOOKUP_SID |
- E2K_GLOBAL_CATALOG_LOOKUP_LEGACY_EXCHANGE_DN),
- &entry);
- if (status != E2K_GLOBAL_CATALOG_OK)
- return NULL;
-
- user = exchange_delegates_user_new (e2k_sid_get_display_name (entry->sid));
- user->dn = g_strdup (entry->dn);
- user->sid = entry->sid;
- g_object_ref (user->sid);
-
- user->entryid = g_byte_array_new ();
- p = creator_entryid->data + creator_entryid->len - 2;
- while (p > creator_entryid->data && *p)
- p--;
- g_byte_array_append (user->entryid, creator_entryid->data,
- p - creator_entryid->data + 1);
- g_byte_array_append (user->entryid, entry->legacy_exchange_dn,
- strlen (entry->legacy_exchange_dn));
- g_byte_array_append (user->entryid, "", 1);
-
- return user;
-}