]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - jssource/src_files/include/javascript/popup_parent_helper.js
Release 6.5.0
[Github/sugarcrm.git] / jssource / src_files / include / javascript / popup_parent_helper.js
1 /*********************************************************************************
2  * SugarCRM Community Edition is a customer relationship management program developed by
3  * SugarCRM, Inc. Copyright (C) 2004-2012 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 var popup_request_data;
40 var close_popup;
41
42 function get_popup_request_data()
43 {
44         return YAHOO.lang.JSON.stringify(window.document.popup_request_data);
45 }
46
47 function get_close_popup()
48 {
49         return window.document.close_popup;
50 }
51
52 function open_popup(module_name, width, height, initial_filter, close_popup, hide_clear_button, popup_request_data, popup_mode, create, metadata)
53 {
54         if (typeof(popupCount) == "undefined" || popupCount == 0)
55            popupCount = 1;
56         // set the variables that the popup will pull from
57         window.document.popup_request_data = popup_request_data;
58         window.document.close_popup = close_popup;
59         //globally changing width and height of standard pop up window from 600 x 400 to 800 x 800 
60         width = (width == 600) ? 800 : width;
61         height = (height == 400) ? 800 : height;
62         
63         // launch the popup
64         URL = 'index.php?'
65                 + 'module=' + module_name
66                 + '&action=Popup';
67         
68         if(initial_filter != '')
69         {
70                 URL += '&query=true' + initial_filter;
71         }
72         
73         if(hide_clear_button)
74         {
75                 URL += '&hide_clear_button=true';
76         }
77         
78         windowName = module_name + '_popup_window' + popupCount;
79         popupCount++;
80         
81         windowFeatures = 'width=' + width
82                 + ',height=' + height
83                 + ',resizable=1,scrollbars=1';
84
85         if (popup_mode == '' && popup_mode == 'undefined') {
86                 popup_mode='single';            
87         }
88         URL+='&mode='+popup_mode;
89         if (create == '' && create == 'undefined') {
90                 create = 'false';
91         }
92         URL+='&create='+create;
93
94         if (metadata != '' && metadata != 'undefined') {
95                 URL+='&metadata='+metadata;     
96         }
97         
98     // Bug #46842 : The relate field field_to_name_array fails to copy over custom fields
99     // post fields that should be populated from popup form
100         if(popup_request_data.jsonObject) {
101                 var request_data = popup_request_data.jsonObject;
102         } else {
103                 var request_data = popup_request_data;
104         }
105     var field_to_name_array_url = '';
106     if (request_data && request_data.field_to_name_array != 'undefined') {        
107         for(var key in request_data.field_to_name_array) {
108             if ( key.toLowerCase() != 'id' ) {
109                 field_to_name_array_url += '&field_to_name[]='+encodeURIComponent(key.toLowerCase());
110             }
111         }
112     }
113     if ( field_to_name_array_url ) {
114         URL+=field_to_name_array_url;
115     }
116     
117         win = window.open(URL, windowName, windowFeatures);
118
119         if(window.focus)
120         {
121                 // put the focus on the popup if the browser supports the focus() method
122                 win.focus();
123         }
124         
125         win.popupCount = popupCount;
126
127         return win;
128 }
129
130 /**
131  * The reply data must be a JSON array structured with the following information:
132  *  1) form name to populate
133  *  2) associative array of input names to values for populating the form
134  */
135 var from_popup_return  = false;
136 function set_return(popup_reply_data)
137 {
138         from_popup_return = true;
139         var form_name = popup_reply_data.form_name;
140         var name_to_value_array = popup_reply_data.name_to_value_array;
141         
142         for (var the_key in name_to_value_array)
143         {
144                 if(the_key == 'toJSON')
145                 {
146                         /* just ignore */
147                 }
148                 else
149                 {
150                         var displayValue=name_to_value_array[the_key].replace(/&amp;/gi,'&').replace(/&lt;/gi,'<').replace(/&gt;/gi,'>').replace(/&#039;/gi,'\'').replace(/&quot;/gi,'"');;
151                         if(window.document.forms[form_name] && window.document.forms[form_name].elements[the_key])
152             {
153                                 window.document.forms[form_name].elements[the_key].value = displayValue;
154                 SUGAR.util.callOnChangeListers(window.document.forms[form_name].elements[the_key]);
155             }
156                 }
157         }
158 }
159
160 function set_return_and_save(popup_reply_data)
161 {
162         var form_name = popup_reply_data.form_name;
163         var name_to_value_array = popup_reply_data.name_to_value_array;
164         
165         for (var the_key in name_to_value_array)
166         {
167                 if(the_key == 'toJSON')
168                 {
169                         /* just ignore */
170                 }
171                 else
172                 {
173                         window.document.forms[form_name].elements[the_key].value = name_to_value_array[the_key];
174             SUGAR.util.callOnChangeListers(window.document.forms[form_name].elements[the_key]);
175                 }
176         }
177         
178         window.document.forms[form_name].return_module.value = window.document.forms[form_name].module.value;
179         window.document.forms[form_name].return_action.value = 'DetailView';
180         window.document.forms[form_name].return_id.value = window.document.forms[form_name].record.value;
181         window.document.forms[form_name].action.value = 'Save';
182         window.document.forms[form_name].submit();
183 }
184
185 function set_return_and_save_targetlist(popup_reply_data)
186 {
187         var form_name = popup_reply_data.form_name;
188         var name_to_value_array = popup_reply_data.name_to_value_array;
189         var form_index = document.forms.length - 1;
190         sugarListView.get_checks();
191         var uids = document.MassUpdate.uid.value;
192         if (uids == '') {
193                 return false;
194         }
195         /*
196          * Add the value returned from the popup to the form for submittal
197          */
198         for (var the_key in name_to_value_array)
199         {
200                 if(the_key == 'toJSON')
201                 {
202                         /* just ignore */
203                 }
204                 else
205                 {
206                         for ( i = form_index; i >= 0; i--)
207                         {
208                                 if ( form_name == window.document.forms[form_index] )
209                                 {
210                                         form_index = i;
211                                         break;
212                                 }
213                         }
214                         window.document.forms[form_index].elements[get_element_index(form_index,the_key)].value = name_to_value_array[the_key];
215             SUGAR.util.callOnChangeListers(window.document.forms[form_index].elements[get_element_index(form_index,the_key)]);
216                 }
217         }
218         window.document.forms[form_index].elements[get_element_index(form_index,"return_module")].value = window.document.forms[form_index].elements[get_element_index(form_index,"module")].value;
219         window.document.forms[form_index].elements[get_element_index(form_index,"return_action")].value = 'ListView';
220         window.document.forms[form_index].elements[get_element_index(form_index,"uids")].value = uids;
221         window.document.forms[form_index].submit();
222 }
223
224
225 function get_element_index(form_index,element_name) {
226         var j = 0;
227         while (j < window.document.forms[form_index].elements.length) {
228                 if(window.document.forms[form_index].elements[j].name == element_name) {
229                         index = j;
230                         break;
231                 }
232                 j++;
233         }
234         return index;
235 }
236
237
238 /**
239  * This is a helper function to construct the initial filter that can be
240  * passed into the open_popup() function.  It assumes that there is an
241  * account_id and account_name field in the given form_name to use to
242  * construct the intial filter string.
243  */
244 function get_initial_filter_by_account(form_name)
245 {
246         var account_id = window.document.forms[form_name].account_id.value;
247         var account_name = escape(window.document.forms[form_name].account_name.value);
248         var initial_filter = "&account_id=" + account_id + "&account_name=" + account_name;
249
250         return initial_filter;
251 }