]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/Popups/PopupSmarty.php
Release 6.3.0
[Github/sugarcrm.git] / include / Popups / PopupSmarty.php
1 <?php
2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4  * SugarCRM Community Edition is a customer relationship management program developed by
5  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6  * 
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Affero General Public License version 3 as published by the
9  * Free Software Foundation with the addition of the following permission added
10  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13  * 
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
17  * details.
18  * 
19  * You should have received a copy of the GNU Affero General Public License along with
20  * this program; if not, see http://www.gnu.org/licenses or write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA.
23  * 
24  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26  * 
27  * The interactive user interfaces in modified source and object code versions
28  * of this program must display Appropriate Legal Notices, as required under
29  * Section 5 of the GNU Affero General Public License version 3.
30  * 
31  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32  * these Appropriate Legal Notices must retain the display of the "Powered by
33  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34  * technical reasons, the Appropriate Legal Notices must display the words
35  * "Powered by SugarCRM".
36  ********************************************************************************/
37
38 require_once('include/ListView/ListViewSmarty.php'); 
39
40 require_once('include/TemplateHandler/TemplateHandler.php');
41 require_once('include/SearchForm/SearchForm2.php');
42 define("NUM_COLS", 2);
43 class PopupSmarty extends ListViewSmarty{
44         
45         var $contextMenus = false;
46         var $export = false;
47         var $mailmerge = false;
48         var $mergeduplicates = false;
49         var $quickViewLinks = false;
50         var $multiSelect = false;
51         var $headerTpl;
52     var $footerTpl;
53     var $th;
54     var $tpl;
55     var $view;
56     var $field_defs;
57     var $formData;
58     var $_popupMeta;
59     var $_create = false;
60     var $searchdefs = array();
61     var $listviewdefs = array();
62     var $searchFields = array();
63     var $customFieldDefs;
64     var $filter_fields = array();
65     //rrs
66     var $searchForm;
67     var $module;
68     var $massUpdateData = '';
69         
70         function PopupSmarty($seed, $module){
71                 parent::ListViewSmarty();
72                 $this->th = new TemplateHandler();
73                 $this->th->loadSmarty();
74                 $this->seed = $seed;
75                 $this->view = 'Popup';
76                 $this->module = $module;
77                 $this->searchForm = new SearchForm($this->seed, $this->module);
78                 $this->th->deleteTemplate($module, $this->view); 
79                         
80         }
81         
82
83     /**
84      * Assign several arrow image attributes to TemplateHandler smarty. Such as width, height, etc.
85      * 
86      * @return void
87      */
88     function processArrowVars()
89     {
90         $pathParts = pathinfo(SugarThemeRegistry::current()->getImageURL('arrow.gif',false));
91
92         list($width,$height) = getimagesize($pathParts['dirname'].'/'.$pathParts['basename']);
93
94         $this->th->ss->assign('arrowExt', $pathParts['extension']);
95         $this->th->ss->assign('arrowWidth', $width);
96         $this->th->ss->assign('arrowHeight', $height);
97         $this->th->ss->assign('arrowAlt', translate('LBL_SORT'));
98     }
99
100         /**
101      * Processes the request. Calls ListViewData process. Also assigns all lang strings, export links,
102      * This is called from ListViewDisplay
103      *    
104      * @param file file Template file to use
105      * @param data array from ListViewData
106      * @param html_var string the corresponding html var in xtpl per row
107      *
108      */ 
109         function process($file, $data, $htmlVar) {
110
111                 global $odd_bg, $even_bg, $hilite_bg, $click_bg, $app_strings;
112                 parent::process($file, $data, $htmlVar);
113                 
114                 $this->tpl = $file;
115                 $this->data = $data;
116                 
117         $totalWidth = 0;
118         foreach($this->displayColumns as $name => $params) {
119             $totalWidth += $params['width'];
120         }
121         $adjustment = $totalWidth / 100;
122
123         $contextMenuObjectsTypes = array();
124         foreach($this->displayColumns as $name => $params) {
125             $this->displayColumns[$name]['width'] = round($this->displayColumns[$name]['width'] / $adjustment, 2);
126             // figure out which contextMenu objectsTypes are required
127             if(!empty($params['contextMenu']['objectType'])) 
128                 $contextMenuObjectsTypes[$params['contextMenu']['objectType']] = true;
129         }
130                 $this->th->ss->assign('displayColumns', $this->displayColumns);
131         
132        
133                 $this->th->ss->assign('bgHilite', $hilite_bg);
134                 $this->th->ss->assign('colCount', count($this->displayColumns) + 1);
135                 $this->th->ss->assign('htmlVar', strtoupper($htmlVar));
136                 $this->th->ss->assign('moduleString', $this->moduleString);
137         $this->th->ss->assign('editLinkString', $GLOBALS['app_strings']['LBL_EDIT_BUTTON']);
138         $this->th->ss->assign('viewLinkString', $GLOBALS['app_strings']['LBL_VIEW_BUTTON']);
139         
140         //rrs
141         $this->searchForm->parsedView = 'popup_query_form';
142         $this->searchForm->displayType = 'popupView';
143                 $this->th->ss->assign('searchForm', $this->searchForm->display(false));
144         //rrs
145
146                 if($this->overlib) $this->th->ss->assign('overlib', true);
147                 if($this->export) $this->th->ss->assign('exportLink', $this->buildExportLink());
148                 $this->th->ss->assign('quickViewLinks', $this->quickViewLinks);
149                 if($this->mailMerge) $this->th->ss->assign('mergeLink', $this->buildMergeLink()); // still check for mailmerge access
150                 if($this->mergeduplicates) $this->th->ss->assign('mergedupLink', $this->buildMergeDuplicatesLink());
151         
152
153                 if (!empty($_REQUEST['mode']) && strtoupper($_REQUEST['mode']) == 'MULTISELECT') {
154                         $this->multiSelect = true;
155                 }
156                 // handle save checks and stuff
157                 if($this->multiSelect) {
158                         $this->th->ss->assign('selectedObjectsSpan', $this->buildSelectedObjectsSpan());
159                         $this->th->ss->assign('multiSelectData', $this->getMultiSelectData());
160                         $this->th->ss->assign('MODE', "<input type='hidden' name='mode' value='MultiSelect'>");
161             $pageTotal = $this->data['pageData']['offsets']['next'] - $this->data['pageData']['offsets']['current'];
162             if($this->data['pageData']['offsets']['next'] < 0){ // If we are on the last page, 'next' is -1, which means we have to have a custom calculation
163                 $pageTotal = $this->data['pageData']['offsets']['total'] - $this->data['pageData']['offsets']['current'];
164             }
165                 $this->th->ss->assign('selectLink', $this->buildSelectLink('select_link', $this->data['pageData']['offsets']['total'], $pageTotal));
166                 }
167                 
168                 $this->processArrows($data['pageData']['ordering']);
169                 $this->th->ss->assign('prerow', $this->multiSelect);
170                 $this->th->ss->assign('rowColor', array('oddListRow', 'evenListRow'));
171                 $this->th->ss->assign('bgColor', array($odd_bg, $even_bg));
172         $this->th->ss->assign('contextMenus', $this->contextMenus);
173         
174
175         if($this->contextMenus && !empty($contextMenuObjectsTypes)) {
176             $script = '';
177             $cm = new contextMenu();
178             foreach($contextMenuObjectsTypes as $type => $value) {
179                 $cm->loadFromFile($type);
180                 $script .= $cm->getScript();
181                 $cm->menuItems = array(); // clear menuItems out
182             }
183             $this->th->ss->assign('contextMenuScript', $script);
184         }
185         
186         //rrs
187         $this->_build_field_defs();
188
189             // arrow image attributes
190             $this->processArrowVars();
191         }
192         
193         /*
194          * Display the Smarty template.  Here we are using the TemplateHandler for caching per the module.
195          */
196         function display($end = true) {
197         global $app_strings;
198               
199         if(!is_file($GLOBALS['sugar_config']['cache_dir'] . 'jsLanguage/' . $GLOBALS['current_language'] . '.js')) {
200             require_once('include/language/jsLanguage.php');
201             jsLanguage::createAppStringsCache($GLOBALS['current_language']);
202         }
203         $jsLang = '<script type="text/javascript" src="' . $GLOBALS['sugar_config']['cache_dir'] . 'jsLanguage/' . $GLOBALS['current_language'] . '.js?s=' . $GLOBALS['sugar_version'] . '&c=' . $GLOBALS['sugar_config']['js_custom_version'] . '&j=' . $GLOBALS['sugar_config']['js_lang_version'] . '"></script>';
204         
205         $this->th->ss->assign('data', $this->data['data']);
206                 $this->data['pageData']['offsets']['lastOffsetOnPage'] = $this->data['pageData']['offsets']['current'] + count($this->data['data']);
207                 $this->th->ss->assign('pageData', $this->data['pageData']);
208         
209         $navStrings = array('next' => $GLOBALS['app_strings']['LNK_LIST_NEXT'],
210                             'previous' => $GLOBALS['app_strings']['LNK_LIST_PREVIOUS'],
211                             'end' => $GLOBALS['app_strings']['LNK_LIST_END'],
212                             'start' => $GLOBALS['app_strings']['LNK_LIST_START'],
213                             'of' => $GLOBALS['app_strings']['LBL_LIST_OF']);
214         $this->th->ss->assign('navStrings', $navStrings);
215                 
216                 
217                 $associated_row_data = array();
218                 
219                 //C.L. - Bug 44324 - Override the NAME entry to not display salutation so that the data returned from the popup can be searched on correctly
220                 $searchNameOverride = !empty($this->seed) && $this->seed instanceof Person && (isset($this->data['data'][0]['FIRST_NAME']) && isset($this->data['data'][0]['LAST_NAME'])) ? true : false;
221                 
222                 global $locale;
223                 foreach($this->data['data'] as $val)
224                 {
225                         $associated_row_data[$val['ID']] = $val;
226                         if($searchNameOverride)
227                         {
228                            $associated_row_data[$val['ID']]['NAME'] = $locale->getLocaleFormattedName($val['FIRST_NAME'], $val['LAST_NAME']);
229                         }
230                 }
231                 $is_show_fullname = showFullName() ? 1 : 0;
232                 $json = getJSONobj();
233                 $this->th->ss->assign('jsLang', $jsLang);
234                 $this->th->ss->assign('lang', substr($GLOBALS['current_language'], 0, 2));
235                 $this->th->ss->assign('headerTpl', 'include/Popups/tpls/header.tpl');
236         $this->th->ss->assign('footerTpl', 'include/Popups/tpls/footer.tpl');
237         $this->th->ss->assign('ASSOCIATED_JAVASCRIPT_DATA', 'var associated_javascript_data = '.$json->encode($associated_row_data). '; var is_show_fullname = '.$is_show_fullname.';');
238                 $this->th->ss->assign('module', $this->seed->module_dir);
239                 $request_data = empty($_REQUEST['request_data']) ? '' : $_REQUEST['request_data'];
240                 $this->th->ss->assign('request_data', $request_data);
241                 $this->th->ss->assign('fields', $this->fieldDefs);
242                 $this->th->ss->assign('formData', $this->formData);
243                 $this->th->ss->assign('APP', $GLOBALS['app_strings']);
244                 $this->th->ss->assign('MOD', $GLOBALS['mod_strings']);
245                 $this->th->ss->assign('popupMeta', $this->_popupMeta);
246         $this->th->ss->assign('current_query', base64_encode(serialize($_REQUEST)));
247                 $this->th->ss->assign('customFields', $this->customFieldDefs);
248                 $this->th->ss->assign('numCols', NUM_COLS);
249                 $this->th->ss->assign('massUpdateData', $this->massUpdateData);
250                 $this->th->ss->assign('jsCustomVersion', $GLOBALS['sugar_config']['js_custom_version']);
251                 $this->th->ss->assign('sugarVersion', $GLOBALS['sugar_version']);
252         $this->th->ss->assign('should_process', $this->should_process);
253                 
254                 if($this->_create){
255                         $this->th->ss->assign('ADDFORM', $this->getQuickCreate());//$this->_getAddForm());
256                         $this->th->ss->assign('ADDFORMHEADER', $this->_getAddFormHeader());
257                         $this->th->ss->assign('object_name', $this->seed->object_name);
258                 }
259                 $this->th->ss->assign('LIST_HEADER', get_form_header($GLOBALS['mod_strings']['LBL_LIST_FORM_TITLE'], '', false));
260                 $this->th->ss->assign('SEARCH_FORM_HEADER', get_form_header($GLOBALS['mod_strings']['LBL_SEARCH_FORM_TITLE'], '', false));
261                 $str = $this->th->displayTemplate($this->seed->module_dir, $this->view, $this->tpl);
262                 return $str;
263         }
264         
265         /*
266          * Setup up the smarty template. we added an extra step here to add the order by from the popupdefs.
267          */
268         function setup($file) {
269
270             if(isset($this->_popupMeta)){
271                         if(isset($this->_popupMeta['create']['formBase'])) {
272                                 require_once('modules/' . $this->seed->module_dir . '/' . $this->_popupMeta['create']['formBase']);
273                                 $this->_create = true;
274                         }
275                 }
276             if(!empty($this->_popupMeta['create'])){
277                         $formBase = new $this->_popupMeta['create']['formBaseClass']();
278                         if(isset($_REQUEST['doAction']) && $_REQUEST['doAction'] == 'save')
279                         {
280                                 //If it's a new record, set useRequired to false
281                                 $useRequired = empty($_REQUEST['id']) ? false : true;
282                                 $formBase->handleSave('', false, $useRequired);
283                         }
284                 }
285             
286                 $params = array();
287                 if(!empty($this->_popupMeta['orderBy'])){
288                         $params['orderBy'] = $this->_popupMeta['orderBy'];
289                 }
290
291                 if(file_exists('custom/modules/'.$this->module.'/metadata/metafiles.php')){
292                         require('custom/modules/'.$this->module.'/metadata/metafiles.php');     
293                 }elseif(file_exists('modules/'.$this->module.'/metadata/metafiles.php')){
294                         require('modules/'.$this->module.'/metadata/metafiles.php');
295                 }
296
297                 if(!empty($metafiles[$this->module]['searchfields'])) {
298                         require($metafiles[$this->module]['searchfields']);
299                 } elseif(file_exists('modules/'.$this->module.'/metadata/SearchFields.php')) {
300                         require('modules/'.$this->module.'/metadata/SearchFields.php');
301             }
302         $this->searchdefs[$this->module]['templateMeta']['maxColumns'] = 2;
303         $this->searchdefs[$this->module]['templateMeta']['widths']['label'] = 10;
304         $this->searchdefs[$this->module]['templateMeta']['widths']['field'] = 30;
305
306         $this->searchForm->view = 'PopupSearchForm';
307                 $this->searchForm->setup($this->searchdefs, $searchFields, 'include/SearchForm/tpls/SearchFormGenericAdvanced.tpl', 'advanced_search', $this->listviewdefs);
308                 
309                 $lv = new ListViewSmarty();
310                 $displayColumns = array();
311                 if(!empty($_REQUEST['displayColumns'])) {
312                     foreach(explode('|', $_REQUEST['displayColumns']) as $num => $col) {
313                         if(!empty($listViewDefs[$this->module][$col])) 
314                             $displayColumns[$col] = $this->listviewdefs[$this->module][$col];
315                     }    
316                 }
317                 else {
318                     foreach($this->listviewdefs[$this->module] as $col => $para) {
319                         if(!empty($para['default']) && $para['default'])
320                             $displayColumns[$col] = $para;
321                     }
322                 } 
323                 $params['massupdate'] = true;
324                 if(!empty($_REQUEST['orderBy'])) {
325                     $params['orderBy'] = $_REQUEST['orderBy'];
326                     $params['overrideOrder'] = true;
327                     if(!empty($_REQUEST['sortOrder'])) $params['sortOrder'] = $_REQUEST['sortOrder'];
328                 }
329                 
330                 $lv->displayColumns = $displayColumns;
331         $this->searchForm->lv = $lv;
332         $this->searchForm->displaySavedSearch = false;
333
334         
335         $this->searchForm->populateFromRequest('advanced_search');
336         $searchWhere = $this->_get_where_clause();
337         $this->searchColumns = $this->searchForm->searchColumns;
338         //parent::setup($this->seed, $file, $searchWhere, $params, 0, -1, $this->filter_fields);
339
340         $this->should_process = true;
341         
342         if(isset($params['export'])) {
343           $this->export = $params['export'];
344         }
345         if(!empty($params['multiSelectPopup'])) {
346                   $this->multi_select_popup = $params['multiSelectPopup'];
347         }
348                 if(!empty($params['massupdate']) && $params['massupdate'] != false) {
349                         $this->show_mass_update_form = true;
350                         $this->mass = new MassUpdate();
351                         $this->mass->setSugarBean($this->seed);
352                         if(!empty($params['handleMassupdate']) || !isset($params['handleMassupdate'])) {
353                 $this->mass->handleMassUpdate();
354             }
355                 }
356
357         // create filter fields based off of display columns
358         if(empty($this->filter_fields) || $this->mergeDisplayColumns) {
359             foreach($this->displayColumns as $columnName => $def) {
360                $this->filter_fields[strtolower($columnName)] = true;
361                if(!empty($def['related_fields'])) {
362                     foreach($def['related_fields'] as $field) {
363                         //id column is added by query construction function. This addition creates duplicates
364                         //and causes issues in oracle. #10165
365                         if ($field != 'id') {
366                             $this->filter_fields[$field] = true;
367                         }
368                     }
369                 }
370                 if (!empty($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'])) {
371                         foreach($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'] as $index=>$field){
372                             if(!isset($this->filter_fields[strtolower($field)]) || !$this->filter_fields[strtolower($field)])
373                             {
374                                 $this->filter_fields[strtolower($field)] = true;
375                             }
376                         }
377                 }
378             }
379             foreach ($this->searchColumns as $columnName => $def )
380             {
381                 $this->filter_fields[strtolower($columnName)] = true;
382             }
383         }
384         
385
386                 if (!empty($_REQUEST['query']) || (!empty($GLOBALS['sugar_config']['save_query']) && $GLOBALS['sugar_config']['save_query'] != 'populate_only')) {
387                         $data = $this->lvd->getListViewData($this->seed, $searchWhere, 0, -1, $this->filter_fields, $params, 'id');
388                 } else {
389                         $this->should_process = false;
390                         $data = array(
391                                 'data'=>array(),
392                             'pageData'=>array(
393                                 'bean'=>array('moduleDir'=>$this->seed->module_dir),
394                                         'ordering'=>'',
395                                         'offsets'=>array('total'=>0,'next'=>0,'current'=>0),
396                                 ),
397                         );
398                 }
399                 
400                 foreach($this->displayColumns as $columnName => $def)
401                 {
402                         $seedName =  strtolower($columnName);
403                         
404                         if(empty($this->displayColumns[$columnName]['type'])){
405                                 if(!empty($this->lvd->seed->field_defs[$seedName]['type'])){
406                                         $seedDef = $this->lvd->seed->field_defs[$seedName];
407                             $this->displayColumns[$columnName]['type'] = (!empty($seedDef['custom_type']))?$seedDef['custom_type']:$seedDef['type'];
408                         }else{
409                                 $this->displayColumns[$columnName]['type'] = '';
410                         }
411                         }//fi empty(...)
412                         
413                         if(!empty($this->lvd->seed->field_defs[$seedName]['options'])){
414                                         $this->displayColumns[$columnName]['options'] = $this->lvd->seed->field_defs[$seedName]['options'];
415                         }
416
417                 //C.L. Fix for 11177
418                 if($this->displayColumns[$columnName]['type'] == 'html') {
419                     $cField = $this->seed->custom_fields;
420                        if(isset($cField) && isset($cField->bean->$seedName)) {
421                                 $seedName2 = strtoupper($columnName);
422                                 $htmlDisplay = html_entity_decode($cField->bean->$seedName);
423                                 $count = 0;
424                                 while($count < count($data['data'])) {
425                                         $data['data'][$count][$seedName2] = &$htmlDisplay;
426                                     $count++;
427                                 }
428                         }
429                 }//fi == 'html'
430
431                         if (!empty($this->lvd->seed->field_defs[$seedName]['sort_on'])) {
432                         $this->displayColumns[$columnName]['orderBy'] = $this->lvd->seed->field_defs[$seedName]['sort_on'];
433                     }
434                 }
435
436                 $this->process($file, $data, $this->seed->object_name);
437         }       
438         
439         /*
440          * Return the where clause as per the REQUEST. 
441          */
442         function _get_where_clause()
443         {
444                 $where = '';
445                 $where_clauses = $this->searchForm->generateSearchWhere(true, $this->seed->module_dir);
446                 // Bug 43452 - FG - Changed the way generated Where array is imploded into the string.
447                 //                  Now it's imploding in the same way view.list.php do.
448                 if (count($where_clauses) > 0 ) {
449                     $where = '( ' . implode(' and ', $where_clauses) . ' )';
450         }
451         
452         // Need to include the default whereStatement
453                 if(!empty($this->_popupMeta['whereStatement'])){
454             if(!empty($where))$where .= ' AND ';
455             $where .= $this->_popupMeta['whereStatement'];
456                 }
457
458                 return $where;
459         }
460         
461         /*
462          * Generate the data for the search form on the header of the Popup.
463          */
464                 function _build_field_defs(){
465                 $this->formData = array();
466                 $this->customFieldDefs = array();
467                 foreach($this->searchdefs[$this->module]['layout']['advanced_search'] as $data){
468                         if(is_array($data)){
469                                 
470                                 $this->formData[] = array('field' => $data);
471                                 $value = '';
472                                 $this->customFieldDefs[$data['name']]= $data;
473                                 if(!empty($_REQUEST[$data['name']]))
474                         $value = $_REQUEST[$data['name']];
475                     $this->customFieldDefs[$data['name']]['value'] = $value;
476                         }else
477                                 $this->formData[] = array('field' => array('name'=>$data));
478                 }
479                 $this->fieldDefs = array();
480                 if($this->seed){
481                         $this->seed->fill_in_additional_detail_fields();
482                         
483                 foreach($this->seed->toArray() as $name => $value) {
484                     $this->fieldDefs[$name] = $this->seed->field_defs[$name];
485                     //if we have a relate type then reset to name so that we end up with a textbox
486                     //rather than a select button
487                     $this->fieldDefs[$name]['name'] = $this->fieldDefs[$name]['name'];
488                     if($this->fieldDefs[$name]['type'] == 'relate')
489                         $this->fieldDefs[$name]['type'] = 'name';
490                     if(isset($this->fieldDefs[$name]['options']) && isset($GLOBALS['app_list_strings'][$this->fieldDefs[$name]['options']])) {
491                         $this->fieldDefs[$name]['options'] = $GLOBALS['app_list_strings'][$this->fieldDefs[$name]['options']]; // fill in enums
492                     }
493                     if(!empty($_REQUEST[$name]))
494                         $value = $_REQUEST[$name];
495                     $this->fieldDefs[$name]['value'] = $value;
496                 }
497                 }
498         }
499         
500         function _getAddForm(){
501                 $addform = '';
502         if(!$this->seed->ACLAccess('save')){
503             return;
504         }
505                 if(!empty($this->_popupMeta['create'])){
506                         $formBase = new $this->_popupMeta['create']['formBaseClass']();
507                                 
508                         
509                 
510                                 // TODO: cleanup the construction of $addform
511                                 $prefix = empty($this->_popupMeta['create']['getFormBodyParams'][0]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][0];
512                                 $mod = empty($this->_popupMeta['create']['getFormBodyParams'][1]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][1];
513                                 $formBody = empty($this->_popupMeta['create']['getFormBodyParams'][2]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][2];
514                                 
515                                 $getFormMethod = (empty($this->_popupMeta['create']['getFormMethod']) ? 'getFormBody' : $this->_popupMeta['create']['getFormMethod']);  
516                                 $formbody = $formBase->$getFormMethod($prefix, $mod, $formBody);
517                                 
518                                 $addform = '<table><tr><td nowrap="nowrap" valign="top">'
519                                         . str_replace('<br>', '</td><td nowrap="nowrap" valign="top">&nbsp;', $formbody)
520                                         . '</td></tr></table>'
521                                         . '<input type="hidden" name="action" value="Popup" />';
522                                         
523                         return $addform;
524                 }
525         }
526         
527         function _getAddFormHeader(){
528                 $lbl_save_button_title = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_TITLE'];
529                 $lbl_save_button_key = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_KEY'];
530                 $lbl_save_button_label = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL'];
531                 $module_dir = $this->seed->module_dir;
532 $formSave = <<<EOQ
533                         <input type="hidden" name="create" value="true">
534                         <input type="hidden" name="popup" value="true">
535                         <input type="hidden" name="to_pdf" value="true">
536                         <input type="hidden" name="return_module" value="$module_dir">
537                         <input type="hidden" name="return_action" value="Popup">
538 EOQ;
539                 // if metadata contains custom inputs for the quickcreate 
540                 if(!empty($this->_popupMeta['customInput']) && is_array($this->_popupMeta['customInput'])) {
541                         foreach($this->_popupMeta['customInput'] as $key => $value)
542                                 $formSave .= '<input type="hidden" name="' . $key . '" value="'. $value .'">\n';                                
543                 }
544
545
546                 $addformheader = get_form_header($this->_popupMeta['create']['createButton'], $formSave, false);
547                 return $addformheader;
548         }
549         
550         function getQuickCreate(){
551                 require_once("include/EditView/PopupQuickCreate.php");
552                 $qc = new PopupQuickCreate($this->module);
553                 return $qc->process($this->module);
554         }
555 }
556 ?>