!import
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
1 var gPrefInt = null;
2 var gAvailDirectories = null;
3 var gCurrentDirectoryServer = null;
4 var gCurrentDirectoryServerId = null;
5 var gRefresh = false;
6 var gNewServer = null;
7 var gNewServerString = null;
8 var gUpdate = false;
9 var gDeletedDirectories = new Array();
10 var gLDAPPrefsService;
11
initLDAPPrefsService
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
12 function initLDAPPrefsService()
13 {
14 if (gLDAPPrefsService)
15 return;
16
17 const LDAP_PREF_CONTRACT="@mozilla.org/ldapprefs-service;1";
18 if (LDAP_PREF_CONTRACT in Components.classes)
19 {
20 gLDAPPrefsService = Components.classes[LDAP_PREF_CONTRACT].getService(Components.interfaces.nsILDAPPrefsService);
21 }
22 }
23
onEditDirectories
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
24 function onEditDirectories()
25 {
26 window.openDialog("chrome://messenger/content/addressbook/pref-editdirectories.xul",
27 "editDirectories", "chrome,modal=yes,resizable=no", null);
28 if (gRefresh)
29 {
30 var popup = document.getElementById("directoriesListPopup");
31 if (popup)
32 {
33 while (popup.hasChildNodes())
34 popup.removeChild(popup.lastChild);
35 }
36 gAvailDirectories = null;
37 LoadDirectories(popup);
38 gRefresh = false;
39 }
40 }
41
enableAutocomplete
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
42 function enableAutocomplete()
43 {
44 var autocompleteLDAP = document.getElementById("autocompleteLDAP");
45 var directoriesList = document.getElementById("directoriesList");
46 var directoriesListPopup = document.getElementById("directoriesListPopup");
47 var editButton = document.getElementById("editButton");
48 // var autocompleteSkipDirectory = document.getElementById("autocompleteSkipDirectory");
49
50 if (autocompleteLDAP.checked) {
51 // If the default directory preference is locked
52 // disable the list popup
53 if (gPrefInt.prefIsLocked("ldap_2.autoComplete.directoryServer")) {
54 directoriesList.setAttribute("disabled", true);
55 directoriesListPopup.setAttribute("disabled", true);
56 }
57 else {
58 directoriesList.removeAttribute("disabled");
59 directoriesListPopup.removeAttribute("disabled");
60 }
61 editButton.removeAttribute("disabled");
62 // autocompleteSkipDirectory.removeAttribute("disabled");
63 }
64 else {
65 directoriesList.setAttribute("disabled", true);
66 directoriesListPopup.setAttribute("disabled", true);
67 editButton.setAttribute("disabled", true);
68 // autocompleteSkipDirectory.setAttribute("disabled", true);
69 }
70 // if we do not have any directories disable the dropdown list box
71 if (!gAvailDirectories || (gAvailDirectories.length < 1))
72 directoriesList.setAttribute("disabled", true);
73 LoadDirectories(directoriesListPopup);
74 }
75
setupDirectoriesList
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
76 function setupDirectoriesList()
77 {
78 var override = document.getElementById("identity.overrideGlobalPref").getAttribute("value");
79 var autocomplete = document.getElementById("ldapAutocomplete");
80 // useGlobalFlag is set when user changes the selectedItem on the radio button and switches
81 // to a different pane and switches back in Mail/news AccountSettings
82 var useGlobalFlag = document.getElementById("overrideGlobalPref").getAttribute("value");
83 // directoryServerFlag is set when user changes the server to None and switches
84 // to a different pane and switches back in Mail/news AccountSettings
85 var directoryServerFlag = document.getElementById("directoryServer").getAttribute("value");
86
87 if(override == "true" && !useGlobalFlag)
88 autocomplete.selectedItem = document.getElementById("directories");
89 else
90 autocomplete.selectedItem = document.getElementById("useGlobalPref");
91
92 var directoriesList = document.getElementById("directoriesList");
93 var directoryServer =
94 document.getElementById("identity.directoryServer").getAttribute('value');
95 if (directoryServerFlag) {
96 document.getElementById("identity.directoryServer").setAttribute("value", "");
97 directoryServer = "";
98 }
99 directoriesList.value = directoryServer;
100 }
101
createDirectoriesList
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
102 function createDirectoriesList()
103 {
104 var directoriesListPopup = document.getElementById("directoriesListPopup");
105
106 if (directoriesListPopup) {
107 LoadDirectories(directoriesListPopup);
108 }
109 }
110
LoadDirectories
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
111 function LoadDirectories(popup)
112 {
113 var prefCount = {value:0};
114 var description = "";
115 var item;
116 var j=0;
117 var arrayOfDirectories;
118 var position;
119 var dirType;
120 if (!gPrefInt) {
121 try {
122 gPrefInt = Components.classes["@mozilla.org/preferences-service;1"]
123 .getService(Components.interfaces.nsIPrefBranch);
124 }
125 catch (ex) {
126 gPrefInt = null;
127 }
128 }
129 if (!gAvailDirectories) {
130 try {
131 initLDAPPrefsService();
132 if (gLDAPPrefsService)
133 arrayOfDirectories = gLDAPPrefsService.getServerList(gPrefInt, prefCount);
134 }
135 catch (ex) {
136 }
137 if (arrayOfDirectories) {
138 gAvailDirectories = new Array();
139 for (var i = 0; i < prefCount.value; i++)
140 {
141 if ((arrayOfDirectories[i] != "ldap_2.servers.pab") &&
142 (arrayOfDirectories[i] != "ldap_2.servers.history")) {
143 try{
144 position = gPrefInt.getIntPref(arrayOfDirectories[i]+".position");
145 }
146 catch(ex){
147 position = 1;
148 }
149 try{
150 dirType = gPrefInt.getIntPref(arrayOfDirectories[i]+".dirType");
151 }
152 catch(ex){
153 dirType = 1;
154 }
155 if ((position != 0) && (dirType == 1)) {
156 try{
157 description = gPrefInt.getComplexValue(arrayOfDirectories[i]+".description",
158 Components.interfaces.nsISupportsString).data;
159 }
160 catch(ex){
161 description="";
162 }
163 if (description != "") {
164 if (popup) {
165 item=document.createElement("menuitem");
166 item.setAttribute("label", description);
167 item.setAttribute("value", arrayOfDirectories[i]);
168 popup.appendChild(item);
169 }
170 gAvailDirectories[j++] = {value:arrayOfDirectories[i], label:description};
171 }
172 }
173 }
174 }
175 if (popup)
176 {
177 // we are in mail/news Account settings
178 item = document.createElement("menuitem");
179 var addressBookBundle = document.getElementById("bundle_addressBook");
180 var directoryName = addressBookBundle.getString("directoriesListItemNone");
181 item.setAttribute("label", directoryName);
182 item.setAttribute("value", "");
183 popup.appendChild(item);
184
185 // Now check what we are displaying is valid.
186 var directoriesList = document.getElementById("directoriesList");
187 var value = directoriesList.value;
188 directoriesList.selectedItem = null;
189 directoriesList.value = value;
190 if (!directoriesList.selectedItem) {
191 directoriesList.value = "";
192 // If we have no other directories, also disable the popup.
193 if (gAvailDirectories.length == 0)
194 directoriesList.disabled = true;
195 }
196 // Only enable autocomplete if the pref isn't locked.
197 else if (!gPrefInt.prefIsLocked("ldap_2.autoComplete.directoryServer"))
198 directoriesList.disabled = false;
199 }
200 }
201 }
202 }
203
onInitEditDirectories
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
204 function onInitEditDirectories()
205 {
206 var listbox = document.getElementById("directoriesList");
207 LoadDirectoriesList(listbox);
208 // If the pref is locked disable the "Add" button
209 if (gPrefInt.prefIsLocked("ldap_2.disable_button_add"))
210 document.getElementById("addButton").setAttribute('disabled', true);
211 }
212
LoadDirectoriesList
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
213 function LoadDirectoriesList(listbox)
214 {
215 LoadDirectories();
216 if (listbox && gAvailDirectories)
217 {
218 for (var i=0; i<gAvailDirectories.length; i++)
219 {
220 var item = document.createElement('listitem');
221
222 item.setAttribute('label', gAvailDirectories[i].label);
223 item.setAttribute('string', gAvailDirectories[i].value);
224
225 listbox.appendChild(item);
226 }
227 }
228 }
229
selectDirectory
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
230 function selectDirectory()
231 {
232 var directoriesList = document.getElementById("directoriesList");
233 if(directoriesList && directoriesList.selectedItems
234 && directoriesList.selectedItems.length)
235 {
236 gCurrentDirectoryServer =
237 directoriesList.selectedItems[0].getAttribute('label');
238 gCurrentDirectoryServerId =
239 directoriesList.selectedItems[0].getAttribute('string');
240 }
241 else
242 {
243 gCurrentDirectoryServer = null;
244 gCurrentDirectoryServerId = null;
245 }
246
247 var editButton = document.getElementById("editButton");
248 var removeButton = document.getElementById("removeButton");
249 if(gCurrentDirectoryServer && gCurrentDirectoryServerId) {
250 editButton.removeAttribute("disabled");
251 // If the disable delete button pref for the selected directory is set
252 // disable the delete button for that directory.
253 var disable = false;
254 try {
255 disable = gPrefInt.getBoolPref(gCurrentDirectoryServerId + ".disable_delete");
256 }
257 catch(ex){
258 // if this preference is not set its ok.
259 }
260 if (disable)
261 removeButton.setAttribute("disabled", true);
262 else
263 removeButton.removeAttribute("disabled");
264 }
265 else {
266 editButton.setAttribute("disabled", true);
267 removeButton.setAttribute("disabled", true);
268 }
269 }
270
newDirectory
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
271 function newDirectory()
272 {
273 window.openDialog("chrome://messenger/content/addressbook/pref-directory-add.xul",
274 "addDirectory", "chrome,modal=yes,resizable=no,centerscreen");
275 if(gUpdate && gNewServer && gNewServerString) {
276 var listbox = document.getElementById("directoriesList");
277 var item = document.createElement('listitem');
278
279 item.setAttribute('label', gNewServer);
280 item.setAttribute('string', gNewServerString);
281
282 listbox.appendChild(item);
283 gNewServer = null;
284 gNewServerString = null;
285 window.opener.gRefresh = true;
286 }
287 }
288
editDirectory
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
289 function editDirectory()
290 {
291 if(gCurrentDirectoryServer && gCurrentDirectoryServerId) {
292 var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]
293 .getService(Components.interfaces.nsIRDFService);
294
295 // get the datasource for the addressdirectory
296 var addressbookDS = RDF.GetDataSource("rdf:addressdirectory");
297
298 // the RDF resource URI for LDAPDirectory will be moz-abldapdirectory://<prefName>
299 var selectedABURI = "moz-abldapdirectory://" + gCurrentDirectoryServerId;
300 var selectedABDirectory = RDF.GetResource(selectedABURI)
301 .QueryInterface(Components.interfaces.nsIAbDirectory);
302 window.openDialog("chrome://messenger/content/addressbook/pref-directory-add.xul",
303 "editDirectory",
304 "chrome,modal=yes,resizable=no,centerscreen",
305 { selectedDirectory: selectedABDirectory });
306 }
307 if(gUpdate)
308 {
309 // directory server properties have changed. So, update the
310 // LDAP Directory Servers dialog.
311 var directoriesList = document.getElementById("directoriesList");
312 var selectedNode = directoriesList.selectedItems[0];
313 selectedNode.setAttribute('label', gNewServer);
314 selectedNode.setAttribute('string', gNewServerString);
315
316 // window.opener is either global pref window or
317 // mail/news account settings window.
318 // set window.opener.gRefresh to true such that the
319 // dropdown list box gets updated
320 window.opener.gRefresh = true;
321 }
322 }
323
removeDirectory
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
324 function removeDirectory()
325 {
326 var directoriesList = document.getElementById("directoriesList");
327 var selectedNode = directoriesList.selectedItems[0];
328
329 var nextNode = selectedNode.nextSibling;
330 if (!nextNode)
331 if (selectedNode.previousSibling)
332 nextNode = selectedNode.previousSibling;
333
334 if(gCurrentDirectoryServer && gCurrentDirectoryServerId) {
335 var len= gDeletedDirectories.length;
336 gDeletedDirectories[len] = gCurrentDirectoryServerId;
337 }
338 directoriesList.removeChild(selectedNode);
339 if (nextNode)
340 directoriesList.selectItem(nextNode)
341 }
342
343 // remove all the directories that are selected for deletion from preferences
344 // check if the deleted directory is selected for autocompletion in global
345 // or identity prefs. If so change the pref to ""
onAccept
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
346 function onAccept()
347 {
348 var len = gDeletedDirectories.length;
349 if (len) {
350 try {
351 var directoryServer = gPrefInt.getCharPref("ldap_2.autoComplete.directoryServer");
352 }
353 catch(ex) {
354 directoryServer = null;
355 }
356 var am = Components.classes["@mozilla.org/messenger/account-manager;1"]
357 .getService(Components.interfaces.nsIMsgAccountManager);
358 if (am) {
359 var addressbook;
360 try {
361 addressbook = Components.classes["@mozilla.org/abmanager;1"]
362 .getService(Components.interfaces.nsIAbManager);
363 }
364 catch(ex){
365 dump("Failed to get addressbook " + ex + "\n");
366 }
367
368 var allIdentities = am.allIdentities;
369 var identitiesCount = allIdentities.Count();
370 var identityServer = new Array();
371 var currentIdentity = null;
372 var j;
373 for (j=0; j< identitiesCount; j++) {
374 currentIdentity = allIdentities.QueryElementAt(j, Components.interfaces.nsIMsgIdentity);
375 identityServer[j] = {server:currentIdentity.directoryServer, deleted:false};
376 }
377 var deletedGlobal = false;
378 for (var i=0; i< len; i++){
379 if (!deletedGlobal && directoryServer && (gDeletedDirectories[i] == directoryServer)) {
380 gPrefInt.setCharPref("ldap_2.autoComplete.directoryServer", "");
381 deletedGlobal = true;
382 }
383 for (j=0; j<identitiesCount; j++){
384 if (identityServer[j].server && !identityServer[j].deleted && (gDeletedDirectories[i] == identityServer[j].server)) {
385 identityServer[j].server = "";
386 identityServer[j].deleted = true;
387 }
388 }
389 try {
390 // The for LDAPDirectory will be moz-abldapdirectory://<prefName>
391 addressbook.deleteAddressBook("moz-abldapdirectory://" +
392 gDeletedDirectories[i]);
393 }
394 catch(ex){
395 dump("Failed to delete the addressbook " + ex + "\n");
396 }
397 }
398 var svc = Components.classes["@mozilla.org/preferences-service;1"]
399 .getService(Components.interfaces.nsIPrefService);
400 svc.savePrefFile(null);
401 }
402 }
403 window.opener.gRefresh = true;
404 return true;
405 }
406
doHelpButton
(0 calls, 0 incl. v-uS, 0 excl. v-uS)
407 function doHelpButton()
408 {
409 openHelp("mail-ldap-properties");
410 }