4 *****************************************************************************
5 *** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ***
7 *** THIS MODULE IS NO LONGER COMPILED ***
9 *** YES, IT IS INTENTIONALLY BROKEN.... ***
11 *** DO NOT ADD ANY NEW CODE TO THIS MODULE ***
13 *** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ***
14 *****************************************************************************
18 * Copyright (C) 2010-11 SIPE Project <http://sipe.sourceforge.net/>
19 * Copyright (C) 2010 pier11 <pier11@operamail.com>
20 * Copyright (C) 2009 Anibal Avelar <debianmx@gmail.com>
21 * Copyright (C) 2009 pier11 <pier11@operamail.com>
22 * Copyright (C) 2008 Novell, Inc., Anibal Avelar <debianmx@gmail.com>
23 * Copyright (C) 2007 Anibal Avelar <debianmx@gmail.com>
24 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
27 * Thanks to Google's Summer of Code Program and the helpful mentors
30 * Session-based SIP MESSAGE documentation:
31 * http://tools.ietf.org/html/draft-ietf-simple-im-session-00
33 * This program is free software; you can redistribute it and/or modify
34 * it under the terms of the GNU General Public License as published by
35 * the Free Software Foundation; either version 2 of the License, or
36 * (at your option) any later version.
38 * This program is distributed in the hope that it will be useful,
39 * but WITHOUT ANY WARRANTY; without even the implied warranty of
40 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41 * GNU General Public License for more details.
43 * You should have received a copy of the GNU General Public License
44 * along with this program; if not, write to the Free Software
45 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
48 /** for Access levels menu */
49 #define INDENT_FMT " %s"
51 /** Member is indirectly belong to access level container.
52 * For example 'sameEnterprise' is in the container and user
53 * belongs to that same enterprise.
55 #define INDENT_MARKED_INHERITED_FMT "= %s"
58 sipe_buddy_menu_access_level_help_cb(PurpleBuddy
*buddy
)
60 /** Translators: replace with URL to localized page
61 * If it doesn't exist copy the original URL */
62 purple_notify_uri(buddy
->account
->gc
, _("https://sourceforge.net/apps/mediawiki/sipe/index.php?title=Access_Levels"));
66 sipe_buddy_menu_access_level_cb(PurpleBuddy
*buddy
,
67 struct sipe_container
*container
)
69 struct sipe_core_private
*sipe_private
= PURPLE_BUDDY_TO_SIPE_CORE_PRIVATE
;
70 sipe_ocs2007_change_access_level_from_container(sipe_private
,
74 /*--------------------- START WIP ------------------------------*/
76 if (SIPE_CORE_PRIVATE_FLAG_IS(OCS2007
)) {
77 GList
*menu_access_levels
= sipe_get_access_control_menu(sipe_private
, buddy
->name
);
79 act
= purple_menu_action_new(_("Access level"),
81 NULL
, menu_access_levels
);
82 menu
= g_list_prepend(menu
, act
);
84 /*--------------------- END WIP ------------------------------*/
87 sipe_ask_access_domain_cb(PurpleConnection
*gc
, PurpleRequestFields
*fields
)
89 struct sipe_core_private
*sipe_private
= PURPLE_GC_TO_SIPE_CORE_PRIVATE
;
90 const char *domain
= purple_request_fields_get_string(fields
, "access_domain");
91 guint index
= purple_request_fields_get_choice(fields
, "container_id");
92 sipe_ocs2007_change_access_level_for_domain(sipe_private
,
97 static void sipe_buddy_menu_access_level_add_domain_cb(PurpleBuddy
*buddy
)
99 PurpleConnection
*gc
= purple_account_get_connection(buddy
->account
);
100 PurpleRequestFields
*fields
;
101 PurpleRequestFieldGroup
*g
;
102 PurpleRequestField
*f
;
104 fields
= purple_request_fields_new();
106 g
= purple_request_field_group_new(NULL
);
107 f
= purple_request_field_string_new("access_domain", _("Domain"), "partner-company.com", FALSE
);
108 purple_request_field_set_required(f
, TRUE
);
109 purple_request_field_group_add_field(g
, f
);
111 f
= purple_request_field_choice_new("container_id", _("Access level"), 0);
112 purple_request_field_choice_add(f
, _("Personal")); /* index 0 */
113 purple_request_field_choice_add(f
, _("Team"));
114 purple_request_field_choice_add(f
, _("Company"));
115 purple_request_field_choice_add(f
, _("Public"));
116 purple_request_field_choice_add(f
, _("Blocked")); /* index 4 */
117 purple_request_field_choice_set_default_value(f
, 3); /* index */
118 purple_request_field_set_required(f
, TRUE
);
119 purple_request_field_group_add_field(g
, f
);
121 purple_request_fields_add_group(fields
, g
);
123 purple_request_fields(gc
, _("Add new domain"),
124 _("Add new domain"), NULL
, fields
,
125 _("Add"), G_CALLBACK(sipe_ask_access_domain_cb
),
127 buddy
->account
, NULL
, NULL
, gc
);
131 sipe_get_access_levels_menu(struct sipe_core_private
*sipe_private
,
132 const char* member_type
,
133 const char* member_value
,
134 const gboolean extra_menu
)
136 GList
*menu_access_levels
= NULL
;
139 PurpleMenuAction
*act
;
140 struct sipe_container
*container
;
141 gboolean is_group_access
= FALSE
;
142 int container_id
= sipe_ocs2007_find_access_level(sipe_private
,
146 guint container_max
= sipe_ocs2007_containers();
148 for (i
= 1; i
<= container_max
; i
++) {
149 /* to put Blocked level last in menu list.
150 * Blocked should remaim in the first place in the containers[] array.
152 unsigned int j
= (i
== container_max
) ? 0 : i
;
153 int container_j
= sipe_ocs2007_container_id(j
);
154 const gchar
*acc_level_name
= sipe_ocs2007_access_level_name(container_j
);
156 container
= sipe_ocs2007_create_container(j
,
161 /* libpurple memory leak workaround */
162 sipe_blist_menu_remember_container(sipe_private
, container
);
164 /* current container/access level */
165 if (container_j
== container_id
) {
166 menu_name
= is_group_access
?
167 g_strdup_printf(INDENT_MARKED_INHERITED_FMT
, acc_level_name
) :
168 g_strdup_printf(SIPE_OCS2007_INDENT_MARKED_FMT
, acc_level_name
);
170 menu_name
= g_strdup_printf(INDENT_FMT
, acc_level_name
);
173 act
= purple_menu_action_new(menu_name
,
174 PURPLE_CALLBACK(sipe_buddy_menu_access_level_cb
),
177 menu_access_levels
= g_list_prepend(menu_access_levels
, act
);
180 if (extra_menu
&& (container_id
>= 0)) {
182 act
= purple_menu_action_new(" --------------", NULL
, NULL
, NULL
);
183 menu_access_levels
= g_list_prepend(menu_access_levels
, act
);
185 if (!is_group_access
) {
186 container
= sipe_ocs2007_create_container(0,
191 /* libpurple memory leak workaround */
192 sipe_blist_menu_remember_container(sipe_private
, container
);
194 /* Translators: remove (clear) previously assigned access level */
195 menu_name
= g_strdup_printf(INDENT_FMT
, _("Unspecify"));
196 act
= purple_menu_action_new(menu_name
,
197 PURPLE_CALLBACK(sipe_buddy_menu_access_level_cb
),
200 menu_access_levels
= g_list_prepend(menu_access_levels
, act
);
204 menu_access_levels
= g_list_reverse(menu_access_levels
);
205 return menu_access_levels
;
209 sipe_get_access_groups_menu(struct sipe_core_private
*sipe_private
)
211 GList
*menu_access_groups
= NULL
;
212 PurpleMenuAction
*act
;
213 GSList
*access_domains
;
216 act
= purple_menu_action_new(_("People in my company"),
218 NULL
, sipe_get_access_levels_menu(sipe_private
, "sameEnterprise", NULL
, FALSE
));
219 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
221 /* this is original name, don't edit */
222 act
= purple_menu_action_new(_("People in domains connected with my company"),
224 NULL
, sipe_get_access_levels_menu(sipe_private
, "federated", NULL
, FALSE
));
225 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
227 act
= purple_menu_action_new(_("People in public domains"),
229 NULL
, sipe_get_access_levels_menu(sipe_private
, "publicCloud", NULL
, TRUE
));
230 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
232 access_domains
= sipe_ocs2007_get_access_domains(sipe_private
);
233 entry
= access_domains
;
235 gchar
*domain
= entry
->data
;
236 gchar
*menu_name
= g_strdup_printf(_("People at %s"), domain
);
238 /* takes over ownership of entry->data (= domain) */
239 act
= purple_menu_action_new(menu_name
,
241 NULL
, sipe_get_access_levels_menu(sipe_private
, "domain", domain
, TRUE
));
242 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
247 g_slist_free(access_domains
);
250 /* People in domains connected with my company */
251 act
= purple_menu_action_new("-------------------------------------------", NULL
, NULL
, NULL
);
252 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
254 act
= purple_menu_action_new(_("Add new domain..."),
255 PURPLE_CALLBACK(sipe_buddy_menu_access_level_add_domain_cb
),
257 menu_access_groups
= g_list_prepend(menu_access_groups
, act
);
259 menu_access_groups
= g_list_reverse(menu_access_groups
);
261 return menu_access_groups
;
265 sipe_get_access_control_menu(struct sipe_core_private
*sipe_private
,
268 GList
*menu_access_levels
= NULL
;
269 GList
*menu_access_groups
= NULL
;
271 PurpleMenuAction
*act
;
273 /* libpurple memory leak workaround */
274 sipe_blist_menu_free_containers(sipe_private
);
276 menu_access_levels
= sipe_get_access_levels_menu(sipe_private
, "user", sipe_get_no_sip_uri(uri
), TRUE
);
278 menu_access_groups
= sipe_get_access_groups_menu(sipe_private
);
280 menu_name
= g_strdup_printf(INDENT_FMT
, _("Access groups"));
281 act
= purple_menu_action_new(menu_name
,
283 NULL
, menu_access_groups
);
285 menu_access_levels
= g_list_append(menu_access_levels
, act
);
287 menu_name
= g_strdup_printf(INDENT_FMT
, _("Online help..."));
288 act
= purple_menu_action_new(menu_name
,
289 PURPLE_CALLBACK(sipe_buddy_menu_access_level_help_cb
),
292 menu_access_levels
= g_list_append(menu_access_levels
, act
);
294 return menu_access_levels
;