]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - jssource/src_files/include/javascript/popup_helper.js
Release 6.4.0
[Github/sugarcrm.git] / jssource / src_files / include / javascript / popup_helper.js
1 /*********************************************************************************
2  * SugarCRM Community Edition is a customer relationship management program developed by
3  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by the
7  * Free Software Foundation with the addition of the following permission added
8  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
9  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
10  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License along with
18  * this program; if not, see http://www.gnu.org/licenses or write to the Free
19  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20  * 02110-1301 USA.
21  * 
22  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
23  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
30  * these Appropriate Legal Notices must retain the display of the "Powered by
31  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
32  * technical reasons, the Appropriate Legal Notices must display the words
33  * "Powered by SugarCRM".
34  ********************************************************************************/
35
36
37
38
39 /**
40  * Helper function used in send_backs to close the popup window if closePopup is true.
41  */
42 function closePopup() {
43         var closePopup = window.opener.get_close_popup();
44         if (closePopup)
45         {
46                 window.close();
47         }       
48 }
49
50 /**
51  * Bug: 48726
52  * Helper function used in send_backs to show confirm dialog with appropriate message. 
53  * Collects label data from the the parent window.
54  * 
55  * If similar bugs appear, please refer to Bug 48726, and use these helper functions.
56  */
57 function confirmDialog(arrayContents, formName) {
58         var newData = '';
59         var labels = '';
60         var oldData = '';
61         eval("var data = {" + arrayContents.join(",") + "}");
62         var opener = window.opener.document;
63         for (var key in data)
64         {
65                 var displayValue = replaceHTMLChars(data[key]);
66                 if (opener.forms[formName] && opener.getElementById(key + '_label') != null && !key.match(/account/))
67                 {
68                 var dataLabel = opener.getElementById(key + '_label').innerHTML.replace(/\n/gi,'').replace(/<\/?[^>]+(>|$)/g, "");
69                 labels += dataLabel + ' \n';
70                         newData += dataLabel + ' ' + displayValue + '\n';
71                         if(window.opener.document.forms[formName].elements[key]) {
72                                 oldData += dataLabel + ' ' + opener.forms[formName].elements[key].value + '\n';
73                         }
74                 }
75         }
76
77         var popupConfirm = 0;
78         if (data['account_id'] && (newData.split("\n").length - 1) > 2)
79         {
80                 if(newData != oldData && oldData != labels)
81                 {
82                         if(confirm(SUGAR.language.get('app_strings', 'NTC_OVERWRITE_ADDRESS_PHONE_CONFIRM') + '\n\n' + newData))
83                         {
84                                 popupConfirm = 1;
85                         } else {
86                                 popupConfirm = -1;      
87                         }
88                 }
89         }
90         
91         return popupConfirm;
92 }
93
94 function send_back(module, id)
95 {
96         var associated_row_data = associated_javascript_data[id];
97
98         // cn: bug 12274 - stripping false-positive security envelope
99         eval("var temp_request_data = " + window.document.forms['popup_query_form'].request_data.value);
100         if(temp_request_data.jsonObject) {
101                 var request_data = temp_request_data.jsonObject;
102         } else {
103                 var request_data = temp_request_data; // passed data that is NOT incorrectly encoded via JSON.encode();
104         }
105         // cn: end bug 12274 fix
106         
107         var passthru_data = Object();
108         if(typeof(request_data.passthru_data) != 'undefined')
109         {
110                 passthru_data = request_data.passthru_data;
111         }
112         var form_name = request_data.form_name;
113         var field_to_name_array = request_data.field_to_name_array;
114         
115         var call_back_function = eval("window.opener." + request_data.call_back_function);
116         var array_contents = Array();
117
118         // constructs the array of values associated to the bean that the user clicked
119         for(var the_key in field_to_name_array)
120         {
121                 if(the_key != 'toJSON')
122                 {
123                         var the_name = field_to_name_array[the_key];
124                         var the_value = '';
125
126                         if(module != '' && id != '')
127                         {
128                                 if(associated_row_data['DOCUMENT_NAME'] && the_key.toUpperCase() == "NAME"){
129                                 the_value = associated_row_data['DOCUMENT_NAME'];
130                                 
131                         }  
132                                 else if((the_key.toUpperCase() == 'USER_NAME' || the_key.toUpperCase() == 'LAST_NAME' || the_key.toUpperCase() == 'FIRST_NAME') && typeof(is_show_fullname) != 'undefined' && is_show_fullname && form_name != 'search_form') {//if it is from searchform, it will search by assigned_user_name like 'ABC%', then it will return nothing
133                     the_value = associated_row_data['FULL_NAME'];
134                 }
135                 else {
136                     the_value = associated_row_data[the_key.toUpperCase()];
137                }
138                         }
139                         
140                         if (typeof(the_value) == 'string') {
141                                 the_value = the_value.replace(/\r\n|\n|\r/g, '\\n');
142                         }
143                         
144                         array_contents.push('"' + the_name + '":"' + the_value + '"');
145                 }
146         }
147
148         var popupConfirm = confirmDialog(array_contents, form_name);
149         
150         eval("var name_to_value_array = {" + array_contents.join(",") + "}");
151         
152         closePopup();
153
154         var result_data = {"form_name":form_name,"name_to_value_array":name_to_value_array,"passthru_data":passthru_data,"popupConfirm":popupConfirm};
155         call_back_function(result_data);
156 }
157
158 function send_back_teams(module, form, field, error_message, request_data, form_team_id)
159 {       
160         var array_contents = Array();
161         
162         if(form_team_id){
163                 array_contents.push(form_team_id);
164         }else{
165                 var j=0;
166                 for (i = 0; i < form.elements.length; i++){
167                         if(form.elements[i].name == field) { 
168                                 if (form.elements[i].checked == true) {
169                                         array_contents.push(form.elements[i].value);
170                                 }
171                         }
172                 }
173         }
174         
175         if (array_contents.length ==0 ) {
176                 window.alert(error_message);    
177                 return;
178         }
179         
180     var field_to_name_array = request_data.field_to_name_array;
181     var array_teams = new Array();
182     for(team_id in array_contents) {
183         if(typeof array_contents[team_id] == 'string') {
184                     var team = {"team_id" : associated_javascript_data[array_contents[team_id]].ID, 
185                                 "team_name" : associated_javascript_data[array_contents[team_id]].NAME};
186                     array_teams.push(team);
187         }
188         }
189         
190         var passthru_data = Object();
191         
192         if(typeof request_data.call_back_function == 'undefined' && typeof request_data == 'object') {
193                 request_data = YAHOO.lang.JSON.parse(request_data.value);
194         }       
195         
196         if(typeof(request_data.passthru_data) != 'undefined')
197         {
198                 passthru_data = request_data.passthru_data;
199         }
200         
201         var form_name = request_data.form_name;
202         var field_name = request_data.field_name;
203
204         closePopup();
205         
206         var call_back_function = eval("window.opener." + request_data.call_back_function);
207         var result_data={"form_name":form_name,"field_name":field_name,"teams":array_teams,"passthru_data":passthru_data};
208         call_back_function(result_data);
209
210 }
211
212 function send_back_selected(module, form, field, error_message, request_data)
213 {
214         var array_contents = Array();
215         var j=0;
216         for (i = 0; i < form.elements.length; i++){
217                 if(form.elements[i].name == field) { 
218                         if (form.elements[i].checked == true) {
219                                 ++j;
220                                 array_contents.push('"' + "ID_" + j  + '":"' + form.elements[i].value + '"');
221                         }
222                 }
223         }
224         
225         if (array_contents.length ==0 ) {
226                 window.alert(error_message);    
227                 return;
228         }
229         
230         eval("var selection_list_array = {" + array_contents.join(",") + "}");
231         
232         // cn: bug 12274 - stripping false-positive security envelope
233         eval("var temp_request_data = " + window.document.forms['popup_query_form'].request_data.value);
234
235         if(temp_request_data.jsonObject) {
236                 var request_data = temp_request_data.jsonObject;
237         } else {
238                 var request_data = temp_request_data; // passed data that is NOT incorrectly encoded via JSON.encode();
239         }
240
241         // cn: end bug 12274 fix
242
243         var passthru_data = Object();
244         if(typeof(request_data.passthru_data) != 'undefined')
245         {
246                 passthru_data = request_data.passthru_data;
247         }
248         var form_name = request_data.form_name;
249         var field_to_name_array = request_data.field_to_name_array;
250         
251         closePopup();
252         
253         var call_back_function = eval("window.opener." + request_data.call_back_function);
254         var result_data={"form_name":form_name,"selection_list":selection_list_array ,"passthru_data":passthru_data,"select_entire_list":form.select_entire_list.value,"current_query_by_page":form.current_query_by_page.value};
255         call_back_function(result_data);
256 }
257
258
259
260 function toggleMore(spanId, img_id, module, action, params){
261         toggle_more_go = function() {
262                 oReturn = function(body, caption, width, theme) {
263                                         return overlib(body, CAPTION, caption, STICKY, MOUSEOFF, 1000, WIDTH, width, CLOSETEXT, ('<img border=0 style="margin-left:2px; margin-right: 2px;" src=themes/' + theme + '/images/close.gif>'), CLOSETITLE, 'Click to Close', CLOSECLICK, FGCLASS, 'olFgClass', CGCLASS, 'olCgClass', BGCLASS, 'olBgClass', TEXTFONTCLASS, 'olFontClass', CAPTIONFONTCLASS, 'olCapFontClass', CLOSEFONTCLASS, 'olCloseFontClass', REF, spanId, REFC, 'LL', REFX, 13);
264                                 }
265                 success = function(data) {
266                                         eval(data.responseText);
267
268                                         SUGAR.util.additionalDetailsCache[spanId] = new Array();
269                                         SUGAR.util.additionalDetailsCache[spanId]['body'] = result['body'];
270                                         SUGAR.util.additionalDetailsCache[spanId]['caption'] = result['caption'];
271                                         SUGAR.util.additionalDetailsCache[spanId]['width'] = result['width'];
272                                         SUGAR.util.additionalDetailsCache[spanId]['theme'] = result['theme'];
273                                         ajaxStatus.hideStatus();
274                                         return oReturn(SUGAR.util.additionalDetailsCache[spanId]['body'], SUGAR.util.additionalDetailsCache[spanId]['caption'], SUGAR.util.additionalDetailsCache[spanId]['width'], SUGAR.util.additionalDetailsCache[spanId]['theme']);
275                                 }
276
277                                 if(typeof SUGAR.util.additionalDetailsCache[spanId] != 'undefined')
278                                         return oReturn(SUGAR.util.additionalDetailsCache[spanId]['body'], SUGAR.util.additionalDetailsCache[spanId]['caption'], SUGAR.util.additionalDetailsCache[spanId]['width'], SUGAR.util.additionalDetailsCache[spanId]['theme']);
279
280                                 if(typeof SUGAR.util.additionalDetailsCalls[spanId] != 'undefined') // call already in progress
281                                         return;
282                                 ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING'));
283                                 url = 'index.php?module='+module+'&action='+action+'&'+params;
284                                 SUGAR.util.additionalDetailsCalls[spanId] = YAHOO.util.Connect.asyncRequest('GET', url, {success: success, failure: success});
285
286                                 return false;
287         }
288         SUGAR.util.additionalDetailsRpcCall = window.setTimeout('toggle_more_go()', 250);
289 }
290
291 // The following line of code was copy / pasted in a whole bunch of modules.
292 SUGAR.util.doWhen("window.document.forms['popup_query_form'] != null "
293         + "&& typeof(window.document.forms['popup_query_form'].request_data) != 'undefined'",
294     function() {
295         /* initialize the popup request from the parent */
296         if(window.document.forms['popup_query_form'].request_data.value == "")
297         {
298             window.document.forms['popup_query_form'].request_data.value = window.opener.get_popup_request_data();
299         }
300     }
301 );