SuiteCRM-Core/include/Popups/PopupSmarty.php
Clemente Raposo 588534d022 Squashed 'public/legacy/' changes from 4f401678fd..5a66316965
5a66316965 SuiteCRM 7.12.3 Release
1cfaf51831 Fix #9454 - Avoid duplicate results in basic search
7eb52791f1 Fix #9455 - Popup metadata override removed when filtered
a21463bee1 Fix #8155 - Removed Unused PDF Settings
7f3c59f382 Fix #8948 - Make Project Tasks Importable
ac4a1e79a7 Fix #9191 - Add utf normalization repair command
bcb784eef7 Fix #9434 - Cron notion unit test fails
2e4aa8f594 Fix #8309 - Delete button showing for users with no delete access
bf5fe39148 Fix #8525 - Bulk Action label not showing for users without delete access
1a45a93b5c Fix #9398 - Consistently store dropdowns in $app_list_strings rather than $GLOBALS
664b2d5c74 Fix #9406 - Validation displayed static message isn't correct
de192fa845 Fix #9271 - Primary Email property is kept after ading an extra Email address
206db24eaa Fix #9378 - Filter by Email1 Field Through the API
6c39d73580 Fix #9312 - Declaring object within StudioClass to remove Strict Warnings
be2044b341 Fix #9387 - Correct Variable Names
7e3c96d5b4 Fix #9387 - Clean Cron Historic and Failed Jobs
b3e0556482 Fix #9387 - Display Actual Job Result in Subpanel
90b4e0423a Fix issue #9380 where date action in workflow fails to save Add check on if value is array, if is array don't attempt date formatting
864d614945 Fix #9408 - adding fix for deleting emails
7b442f10ca Merge next into suite 8
b522a5acf3 [Legacy] Meeting Module Styling Fixes
4e4d4e7d86 [Legacy] Admin Import Styling Fixes
e320acd63c [Legacy] Popup Selector Styling Fixes
60acfc36f5 [Legacy] Backup Modules Styling Fixes
73cc52ce14 [Legacy] Jotpad Dashlet Styling Fixes
0128df2e63 [Legacy] User Name Longtext styling fixes
f12c72e8f6 [Legacy] Diagnostic Tool Whitespace Styling Fixes
841b16e033 [Legacy] Dashboard Dashlet Styling Fixes
e274de5a58 [Legacy] Scheduler Styling Fixes
0c330bc280 [Legacy] Reports Subpanels Styling Fixes
0730d433b2 [Legacy] Meeting Popup Selector Styling Fixes
a22626df09 [Legacy] Bump version to 8.0.0
ebde6fb8cc [Legacy] Apply set-timezone styling ot the the users set-timezone page
55f1e360df [Legacy] Add name mapping for SetTimezone action
44fa660c65 [Legacy] Define summary templates for contacts, leads, prospects
f363b741f9 [Legacy] Change Contacts detailviewdefs to use full name
8afde55218 [Legacy] Fix .htaccess build to take the full CRM url into account
8373995c26 [Legacy] Admin diagnostic tool styling fixes
03593b259c [Legacy] Disable upgrade wizard in admin
66c9fe4d8f [Legacy] Remove lucene and AOD_index
21f9844286 [Legacy] Fix event invite mod_strings handling
04bdfd8975 [Legacy] Forgot Password Page Styling Fixes
ba459af407 [Legacy] fix redirect from projects subpanel
0f19a141d1 [Legacy] Add Default Link Item Mapper - add relate module injection on backend bean field_defs
efc2083eaf [Legacy] Email Body Styling Fixes
648a1d9350 Merge next into suite 8
a0cfd72ab3 [Legacy] Remove deprecated spots module
103fd1076f [Legacy] Fix capitalized url on user profile calendar options
97fca254bd [Legacy] Re-add user module reset password modal
864c35c4ad [Legacy] Remove echo on user save
169a15a6c9 [Legacy] Close user action dropdown on password reset
e8c400ab24 [Legacy] Fix user triggered password reset
e38f48c6d4 [Legacy] Fix password recovery templates setup on install
927969c9a3 [Legacy] Bump version to 8.0.0-rc.2
b27584577d [Legacy] UserProfile Settings Modal Styling Fixes
2aba88dfe8 [Legacy] Meetings Styling Fixes
13d743e598 [Legacy] Password & System Settings Action Button Fixes
cfb0bcc86d [Legacy] User Setup Modal Styling Fixes
d05f3aa4f5 [Legacy] Fix legacy widget acl definitions
e469e337f8 [Legacy] Suite 8 extensions to legacy plugins
41e84b1d17 [Legacy] Override server variables when doing kernel bypass
7f5d03f280 Merge commit '75ea167930' into suite7merge
c5f43d6c88 [Legacy] Popup Selector Styling Fixes
0445c1c0ab [Legacy] update install language label
eb3fe0472b [Legacy] Dashlet Settings Modal Styling Fixes
6f0918b73d [Legacy] User Profile Mobile Styling Fixes
5af790f7fa [Legacy] Add acls calculation on legacy list data calls
096a59a7cf [Legacy] Get list of visible modules from module name mapper
c2d618e631 Fix valid module check
aa79de3a31 [Legacy] add widget acl metadata - update acl config for top widget
315b554b7e [Legacy] Subpanels Action Button Styling Fixes
c87e66a262 remove photo widgets for contacts and leads
433940a72f [Legacy] Admin Release Styling Fixes
c0a1378873 Suite8 ChangeLog ModalPopup Styling Fixes
aa484f3f9e [Legacy] Add close menu label
8f81b47c65 [Legacy] Add not module selected label
36a0b05eb2 [Legacy] Add parent type ApiBeanMapper
7e02d1d23c [Legacy] Fix username display for unauthorized users
2ea8f210a1 [Legacy] DetailView Header Title Overlaps fixes
2a25edd6c4 [Legacy] Fix htaccess generation
34500ba791 Fix Date Filed for Targets
211ce6bfbb [Legacy] Remove Button Hover Fixes
223adf26bc [Legacy] Reports footer button removed fixes
c567777afe [Legacy] Reports Styling Fixes
6f71ed31c2 [Legacy] Maps Button Position Fixes
c5d5936c22 [Legacy] Add Tab Dashlet Sapcing Fixes
018c11c562 [Legacy] Dashlet Setting Modal Label Fix & Button Fixes
9645c68ca6 [Legacy] Activity Stream Post Button Hover color fixes
445ab52dae [Legacy] Bump version to 8.0.0-rc
e10b872b21 [Legacy] Remove license from install app strings
e5c21ca68c Merge commit 'dd455a1c2d' into legacy_update_2
3886e3cfa6 Fix ignore system checks valitation
415cdd57b0 [Legacy] Add install labels
70ae186de5 [Legacy] add new install labels
7e05e69580 [Legacy] add install validator class
4c4ed83f3d [Legacy] Add Label for Subpanel Edit Line Action
17d8f4e7e9 [Legacy] Dashboard Mobile Styling Fixes
abd914702a [Legacy] History Subpanel Button Styling Fixes
34a0dac449 [Legacy] Workflow Stying Fixes
32c4827895 [Legacy] Convert Lead Styling Fixes
f1ca14c009 [Legacy] Roles Styling Fixes
3dbdce8055 [Legacy] Admin Modules label font fixes
36a38a1c44 [Legacy] HomePage Mobile Fixes
a5b451ab12 update legacy handlers to apply new logic considering - base actions - action resolvers - fix url navigation issue in classic view
87e6e239ce [Legacy] Module framework - move suite 8 module config to legacy
ee973e74f6 [Legacy] Add support for more metadata on listviewdefs
ad312c45fd [Legacy] Add Support for all modules with parent css classes
a409d81e2b [Legacy] Security Group Styling Fixes
5171ae319f [Legacy] Password Management Mobile Fixes
d0eca8193d [Leagcy] Email Settings Fixes
766af5f4e6 [Legacy] Products Modules Buttons fixes
99ec9e30f9 [Legacy] OAUTH2 Clients and tokens fixes
54c962a532 [Legacy] adapt legacy install scripts to work with Suite8 install
d6f20e38e6 [Legacy] add labels for S8 Installer
83b00b6a94 [Legacy] Add widget not found label
3ac807db61 Merge commit '114b895b6d' into merge_develop
1feeb409f8 [Legacy] Email Action DropDown Styling Fixes

git-subtree-dir: public/legacy
git-subtree-split: 5a663169652b57bb561de74a7e3a8051c9330a83
2022-01-26 12:07:37 +00:00

596 lines
26 KiB
PHP
Executable file

<?php
/**
*
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2017 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
require_once('include/ListView/ListViewSmarty.php');
require_once('include/TemplateHandler/TemplateHandler.php');
require_once('include/SearchForm/SearchForm2.php');
define("NUM_COLS", 2);
class PopupSmarty extends ListViewSmarty
{
public $contextMenus = false;
public $export = false;
public $mailmerge = false;
public $mergeduplicates = false;
public $quickViewLinks = false;
public $multiSelect = false;
public $headerTpl;
public $footerTpl;
public $th;
public $tpl;
public $view;
public $field_defs;
public $formData;
public $_popupMeta;
public $_create = false;
public $searchdefs = array();
public $listviewdefs = array();
public $searchFields = array();
public $customFieldDefs;
public $filter_fields = array();
//rrs
public $searchForm;
public $module;
public $massUpdateData = '';
public function __construct($seed, $module)
{
parent::__construct();
$this->th = new TemplateHandler();
$this->th->loadSmarty();
$this->seed = $seed;
$this->view = 'Popup';
$this->module = $module;
$this->searchForm = new SearchForm($this->seed, $this->module);
$this->th->deleteTemplate($module, $this->view);
$this->headerTpl = 'include/Popups/tpls/header.tpl';
$this->footerTpl = 'include/Popups/tpls/footer.tpl';
}
/**
* Assign several arrow image attributes to TemplateHandler smarty. Such as width, height, etc.
*
* @return void
*/
public function processArrowVars()
{
$pathParts = pathinfo(SugarThemeRegistry::current()->getImageURL('arrow.gif', false));
list($width, $height) = getimagesize($pathParts['dirname'].'/'.$pathParts['basename']);
$this->th->ss->assign('arrowExt', $pathParts['extension']);
$this->th->ss->assign('arrowWidth', $width);
$this->th->ss->assign('arrowHeight', $height);
$this->th->ss->assign('arrowAlt', translate('LBL_SORT'));
}
/**
* Processes the request. Calls ListViewData process. Also assigns all lang strings, export links,
* This is called from ListViewDisplay
*
* @param file file Template file to use
* @param data array from ListViewData
* @param html_var string the corresponding html var in xtpl per row
*
*/
public function process($file, $data, $htmlVar)
{
global $odd_bg, $even_bg, $hilite_bg, $click_bg, $app_strings;
parent::process($file, $data, $htmlVar);
$this->tpl = $file;
$this->data = $data;
$totalWidth = 0;
foreach ($this->displayColumns as $name => $params) {
$totalWidth += $params['width'];
}
$adjustment = $totalWidth / 100;
$contextMenuObjectsTypes = array();
foreach ($this->displayColumns as $name => $params) {
$this->displayColumns[$name]['width'] = round($this->displayColumns[$name]['width'] / $adjustment, 2);
// figure out which contextMenu objectsTypes are required
if (!empty($params['contextMenu']['objectType'])) {
$contextMenuObjectsTypes[$params['contextMenu']['objectType']] = true;
}
}
$this->th->ss->assign('displayColumns', $this->displayColumns);
$this->th->ss->assign('bgHilite', $hilite_bg);
$this->th->ss->assign('colCount', count($this->displayColumns) + 1);
$this->th->ss->assign('htmlVar', strtoupper($htmlVar));
$this->th->ss->assign('moduleString', $this->moduleString);
$this->th->ss->assign('editLinkString', $GLOBALS['app_strings']['LBL_EDIT_BUTTON']);
$this->th->ss->assign('viewLinkString', $GLOBALS['app_strings']['LBL_VIEW_BUTTON']);
//rrs
$this->searchForm->parsedView = 'popup_query_form';
$this->searchForm->displayType = 'popupView';
$this->th->ss->assign('searchForm', $this->searchForm->display(false));
//rrs
if ($this->export) {
$this->th->ss->assign('exportLink', $this->buildExportLink());
}
$this->th->ss->assign('quickViewLinks', $this->quickViewLinks);
if ($this->mailMerge) {
$this->th->ss->assign('mergeLink', $this->buildMergeLink());
} // still check for mailmerge access
if ($this->mergeduplicates) {
$this->th->ss->assign('mergedupLink', $this->buildMergeDuplicatesLink());
}
if (!empty($_REQUEST['mode']) && strtoupper($_REQUEST['mode']) == 'MULTISELECT') {
$this->multiSelect = true;
}
// handle save checks and stuff
if ($this->multiSelect) {
$this->th->ss->assign('selectedObjectsSpan', $this->buildSelectedObjectsSpan());
$this->th->ss->assign('multiSelectData', $this->getMultiSelectData());
$this->th->ss->assign('MODE', "<input type='hidden' name='mode' value='MultiSelect'>");
$pageTotal = $this->data['pageData']['offsets']['next'] - $this->data['pageData']['offsets']['current'];
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
$pageTotal = $this->data['pageData']['offsets']['total'] - $this->data['pageData']['offsets']['current'];
}
$this->th->ss->assign('selectLink', $this->buildSelectLink('select_link', $this->data['pageData']['offsets']['total'], $pageTotal));
}
$this->processArrows($data['pageData']['ordering']);
$this->th->ss->assign('prerow', $this->multiSelect);
$this->th->ss->assign('rowColor', array('oddListRow', 'evenListRow'));
$this->th->ss->assign('bgColor', array($odd_bg, $even_bg));
$this->th->ss->assign('contextMenus', $this->contextMenus);
if ($this->contextMenus && !empty($contextMenuObjectsTypes)) {
$script = '';
$cm = new contextMenu();
foreach ($contextMenuObjectsTypes as $type => $value) {
$cm->loadFromFile($type);
$script .= $cm->getScript();
$cm->menuItems = array(); // clear menuItems out
}
$this->th->ss->assign('contextMenuScript', $script);
}
//rrs
$this->_build_field_defs();
// arrow image attributes
$this->processArrowVars();
}
/*
* Display the Smarty template. Here we are using the TemplateHandler for caching per the module.
*/
public function display($end = true)
{
global $app_strings;
if (!is_file(sugar_cached("jsLanguage/{$GLOBALS['current_language']}.js"))) {
require_once('include/language/jsLanguage.php');
jsLanguage::createAppStringsCache($GLOBALS['current_language']);
}
$jsLang = getVersionedScript("cache/jsLanguage/{$GLOBALS['current_language']}.js", $GLOBALS['sugar_config']['js_lang_version']);
$this->th->ss->assign('data', $this->data['data']);
$this->data['pageData']['offsets']['lastOffsetOnPage'] = $this->data['pageData']['offsets']['current'] + count($this->data['data']);
$this->th->ss->assign('pageData', $this->data['pageData']);
$navStrings = array('next' => $GLOBALS['app_strings']['LNK_LIST_NEXT'],
'previous' => $GLOBALS['app_strings']['LNK_LIST_PREVIOUS'],
'end' => $GLOBALS['app_strings']['LNK_LIST_END'],
'start' => $GLOBALS['app_strings']['LNK_LIST_START'],
'of' => $GLOBALS['app_strings']['LBL_LIST_OF']);
$this->th->ss->assign('navStrings', $navStrings);
$associated_row_data = array();
//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
$searchNameOverride = !empty($this->seed) && $this->seed instanceof Person && (isset($this->data['data'][0]['FIRST_NAME']) && isset($this->data['data'][0]['LAST_NAME'])) ? true : false;
global $locale;
foreach ($this->data['data'] as $val) {
$associated_row_data[$val['ID']] = $val;
if ($searchNameOverride) {
$associated_row_data[$val['ID']]['NAME'] = $locale->getLocaleFormattedName($val['FIRST_NAME'], $val['LAST_NAME']);
}
}
$is_show_fullname = showFullName() ? 1 : 0;
$json = getJSONobj();
$this->th->ss->assign('jsLang', $jsLang);
$this->th->ss->assign('lang', substr($GLOBALS['current_language'], 0, 2));
$this->th->ss->assign('headerTpl', $this->headerTpl);
$this->th->ss->assign('footerTpl', $this->footerTpl);
$this->th->ss->assign('ASSOCIATED_JAVASCRIPT_DATA', 'var associated_javascript_data = '.$json->encode($associated_row_data). '; var is_show_fullname = '.$is_show_fullname.';');
$this->th->ss->assign('module', $this->seed->module_dir);
$this->th->ss->assign('metadata', empty($_REQUEST['metadata']) ? '' : $_REQUEST['metadata']);
$request_data = empty($_REQUEST['request_data']) ? '' : $_REQUEST['request_data'];
$this->th->ss->assign('request_data', $request_data);
$this->th->ss->assign('fields', $this->fieldDefs);
$this->th->ss->assign('formData', $this->formData);
$this->th->ss->assign('APP', $GLOBALS['app_strings']);
$this->th->ss->assign('MOD', $GLOBALS['mod_strings']);
if (isset($this->_popupMeta['create']['createButton'])) {
$this->_popupMeta['create']['createButton'] = translate($this->_popupMeta['create']['createButton']);
}
$this->th->ss->assign('popupMeta', $this->_popupMeta);
$this->th->ss->assign('current_query', htmlentities(json_encode(($_REQUEST))));
$this->th->ss->assign('customFields', $this->customFieldDefs);
$this->th->ss->assign('numCols', NUM_COLS);
$this->th->ss->assign('massUpdateData', $this->massUpdateData);
$this->th->ss->assign('sugarVersion', $GLOBALS['sugar_version']);
$this->th->ss->assign('should_process', $this->should_process);
if ($this->_create) {
$this->th->ss->assign('ADDFORM', $this->getQuickCreate());//$this->_getAddForm());
$this->th->ss->assign('ADDFORMHEADER', $this->_getAddFormHeader());
$this->th->ss->assign('object_name', $this->seed->object_name);
}
$this->th->ss->assign(
'LIST_HEADER',
get_form_header($GLOBALS['mod_strings']['LBL_LIST_FORM_TITLE'], '', false)
);
$this->th->ss->assign(
'SEARCH_FORM_HEADER',
get_form_header($GLOBALS['mod_strings']['LBL_SEARCH_FORM_TITLE'], '', false)
);
$themeObject = SugarThemeRegistry::current();
$this->th->ss->assign("STYLE_JS", ob_get_contents() . $themeObject->getJS());
$str = $this->th->displayTemplate($this->seed->module_dir, $this->view, $this->tpl);
return $str;
}
/**
* Setup up the smarty template. we added an extra step here to add the order by from the popupdefs.
*
* @see ListViewDisplay::setup
*/
public function setup(
$seed,
$file = null,
$where = null,
$params = array(),
$offset = 0,
$limit = -1,
$filter_fields = array(),
$id_field = 'id',
$id = null
) {
$args = func_get_args();
return call_user_func_array(array($this, '_setup'), $args);
}
public function _setup($file)
{
if (isset($this->_popupMeta)) {
if (isset($this->_popupMeta['create']['formBase'])) {
require_once('modules/' . $this->seed->module_dir . '/' . $this->_popupMeta['create']['formBase']);
$this->_create = true;
}
}
if (!empty($this->_popupMeta['create'])) {
$formBase = new $this->_popupMeta['create']['formBaseClass']();
if (isset($_REQUEST['doAction']) && $_REQUEST['doAction'] == 'save') {
//If it's a new record, set useRequired to false
$useRequired = empty($_REQUEST['id']) ? false : true;
$formBase->handleSave('', false, $useRequired);
}
}
$params = array();
if (!empty($this->_popupMeta['orderBy'])) {
$params['orderBy'] = $this->_popupMeta['orderBy'];
}
if (file_exists('custom/modules/'.$this->module.'/metadata/metafiles.php')) {
require('custom/modules/'.$this->module.'/metadata/metafiles.php');
} elseif (file_exists('modules/'.$this->module.'/metadata/metafiles.php')) {
require('modules/'.$this->module.'/metadata/metafiles.php');
}
if (!empty($metafiles[$this->module]['searchfields'])) {
require($metafiles[$this->module]['searchfields']);
} elseif (file_exists('modules/'.$this->module.'/metadata/SearchFields.php')) {
require('modules/'.$this->module.'/metadata/SearchFields.php');
}
$this->searchdefs[$this->module]['templateMeta']['maxColumns'] = 2;
$this->searchdefs[$this->module]['templateMeta']['widths']['label'] = 10;
$this->searchdefs[$this->module]['templateMeta']['widths']['field'] = 30;
$this->searchForm->view = 'PopupSearchForm';
$this->searchForm->setup($this->searchdefs, $searchFields, 'SearchFormGenericAdvanced.tpl', 'advanced_search', $this->listviewdefs);
$lv = new ListViewSmarty();
$displayColumns = array();
if (!empty($_REQUEST['displayColumns'])) {
foreach (explode('|', $_REQUEST['displayColumns']) as $num => $col) {
if (!empty($listViewDefs[$this->module][$col])) {
$displayColumns[$col] = $this->listviewdefs[$this->module][$col];
}
}
} else {
foreach ($this->listviewdefs[$this->module] as $col => $para) {
if (!empty($para['default']) && $para['default']) {
$displayColumns[$col] = $para;
}
}
}
$params['massupdate'] = true;
if (!empty($_REQUEST['orderBy'])) {
$params['orderBy'] = $_REQUEST['orderBy'];
$params['overrideOrder'] = true;
if (!empty($_REQUEST['sortOrder'])) {
$params['sortOrder'] = $_REQUEST['sortOrder'];
}
}
$lv->displayColumns = $displayColumns;
$this->searchForm->lv = $lv;
$this->searchForm->displaySavedSearch = false;
$this->searchForm->populateFromRequest('advanced_search');
$searchWhere = $this->_get_where_clause();
$this->searchColumns = $this->searchForm->searchColumns;
//parent::setup($this->seed, $file, $searchWhere, $params, 0, -1, $this->filter_fields);
$this->should_process = true;
if (isset($params['export'])) {
$this->export = $params['export'];
}
if (!empty($params['multiSelectPopup'])) {
$this->multi_select_popup = $params['multiSelectPopup'];
}
if (!empty($params['massupdate']) && $params['massupdate'] != false) {
$this->show_mass_update_form = true;
$this->mass = new MassUpdate();
$this->mass->setSugarBean($this->seed);
if (!empty($params['handleMassupdate']) || !isset($params['handleMassupdate'])) {
$this->mass->handleMassUpdate();
}
}
// create filter fields based off of display columns
if (empty($this->filter_fields) || $this->mergeDisplayColumns) {
foreach ($this->displayColumns as $columnName => $def) {
$this->filter_fields[strtolower($columnName)] = true;
if (!empty($def['related_fields'])) {
foreach ($def['related_fields'] as $field) {
//id column is added by query construction function. This addition creates duplicates
//and causes issues in oracle. #10165
if ($field != 'id') {
$this->filter_fields[$field] = true;
}
}
}
if (!empty($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'])) {
foreach ($this->seed->field_defs[strtolower($columnName)]['db_concat_fields'] as $index=>$field) {
if (!isset($this->filter_fields[strtolower($field)]) || !$this->filter_fields[strtolower($field)]) {
$this->filter_fields[strtolower($field)] = true;
}
}
}
}
foreach ($this->searchColumns as $columnName => $def) {
$this->filter_fields[strtolower($columnName)] = true;
}
}
if (isset($_REQUEST['request_data'])) {
$request_data = json_decode(html_entity_decode($_REQUEST['request_data']), true);
$_POST['field_to_name'] = $_REQUEST['field_to_name'] = array_keys($request_data['field_to_name_array']);
}
/**
* Bug #46842 : The relate field field_to_name_array fails to copy over custom fields
* By default bean's create_new_list_query function loads fields displayed on the page or used in the search
* add fields used to populate forms from _viewdefs :: field_to_name_array to retrive from db
*/
if (isset($_REQUEST['field_to_name']) && $_REQUEST['field_to_name']) {
$_REQUEST['field_to_name'] = is_array($_REQUEST['field_to_name']) ? $_REQUEST['field_to_name'] : array($_REQUEST['field_to_name']);
foreach ($_REQUEST['field_to_name'] as $add_field) {
$add_field = strtolower($add_field);
if ($add_field != 'id' && !isset($this->filter_fields[$add_field]) && isset($this->seed->field_defs[$add_field])) {
$this->filter_fields[$add_field] = true;
}
}
}
if (!empty($_REQUEST['query']) || (!empty($GLOBALS['sugar_config']['save_query']) && $GLOBALS['sugar_config']['save_query'] != 'populate_only')) {
$data = $this->lvd->getListViewData($this->seed, $searchWhere, 0, -1, $this->filter_fields, $params, 'id');
} else {
$this->should_process = false;
$data = array(
'data'=>array(),
'pageData'=>array(
'bean'=>array('moduleDir'=>$this->seed->module_dir),
'ordering'=>'',
'offsets'=>array('total'=>0,'next'=>0,'current'=>0),
),
);
}
$this->fillDisplayColumnsWithVardefs();
$this->process($file, $data, $this->seed->object_name);
}
/*
* Return the where clause as per the REQUEST.
*/
public function _get_where_clause()
{
$where = '';
$where_clauses = $this->searchForm->generateSearchWhere(true, $this->seed->module_dir);
// Bug 43452 - FG - Changed the way generated Where array is imploded into the string.
// Now it's imploding in the same way view.list.php do.
if (count($where_clauses) > 0) {
$where = '( ' . implode(' and ', $where_clauses) . ' )';
}
// Need to include the default whereStatement
if (!empty($this->_popupMeta['whereStatement'])) {
if (!empty($where)) {
$where .= ' AND ';
}
$where .= $this->_popupMeta['whereStatement'];
}
return $where;
}
/*
* Generate the data for the search form on the header of the Popup.
*/
public function _build_field_defs()
{
$this->formData = array();
$this->customFieldDefs = array();
foreach ($this->searchdefs[$this->module]['layout']['advanced_search'] as $data) {
if (is_array($data)) {
$this->formData[] = array('field' => $data);
$value = '';
$this->customFieldDefs[$data['name']]= $data;
if (!empty($_REQUEST[$data['name']])) {
$value = $_REQUEST[$data['name']];
}
$this->customFieldDefs[$data['name']]['value'] = $value;
} else {
$this->formData[] = array('field' => array('name'=>$data));
}
}
$this->fieldDefs = array();
if ($this->seed) {
$this->seed->fill_in_additional_detail_fields();
foreach ($this->seed->toArray() as $name => $value) {
$this->fieldDefs[$name] = $this->seed->field_defs[$name];
//if we have a relate type then reset to name so that we end up with a textbox
//rather than a select button
$this->fieldDefs[$name]['name'] = $this->fieldDefs[$name]['name'];
if ($this->fieldDefs[$name]['type'] == 'relate') {
$this->fieldDefs[$name]['type'] = 'name';
}
if (isset($this->fieldDefs[$name]['options']) && isset($GLOBALS['app_list_strings'][$this->fieldDefs[$name]['options']])) {
$this->fieldDefs[$name]['options'] = $GLOBALS['app_list_strings'][$this->fieldDefs[$name]['options']]; // fill in enums
}
if (!empty($_REQUEST[$name])) {
$value = $_REQUEST[$name];
}
$this->fieldDefs[$name]['value'] = $value;
}
}
}
public function _getAddForm()
{
$addform = '';
if (!$this->seed->ACLAccess('save')) {
return;
}
if (!empty($this->_popupMeta['create'])) {
$formBase = new $this->_popupMeta['create']['formBaseClass']();
// TODO: cleanup the construction of $addform
$prefix = empty($this->_popupMeta['create']['getFormBodyParams'][0]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][0];
$mod = empty($this->_popupMeta['create']['getFormBodyParams'][1]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][1];
$formBody = empty($this->_popupMeta['create']['getFormBodyParams'][2]) ? '' : $this->_popupMeta['create']['getFormBodyParams'][2];
$getFormMethod = (empty($this->_popupMeta['create']['getFormMethod']) ? 'getFormBody' : $this->_popupMeta['create']['getFormMethod']);
$formbody = $formBase->$getFormMethod($prefix, $mod, $formBody);
$addform = '<table><tr><td nowrap="nowrap" valign="top">'
. str_replace('<br>', '</td><td nowrap="nowrap" valign="top">&nbsp;', $formbody)
. '</td></tr></table>'
. '<input type="hidden" name="action" value="Popup" />';
return $addform;
}
}
public function _getAddFormHeader()
{
$lbl_save_button_title = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_TITLE'];
$lbl_save_button_key = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_KEY'];
$lbl_save_button_label = $GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL'];
$module_dir = $this->seed->module_dir;
$formSave = <<<EOQ
<input type="hidden" name="create" value="true">
<input type="hidden" name="popup" value="true">
<input type="hidden" name="to_pdf" value="true">
<input type="hidden" name="return_module" value="$module_dir">
<input type="hidden" name="return_action" value="Popup">
EOQ;
// if metadata contains custom inputs for the quickcreate
if (!empty($this->_popupMeta['customInput']) && is_array($this->_popupMeta['customInput'])) {
foreach ($this->_popupMeta['customInput'] as $key => $value) {
$formSave .= '<input type="hidden" name="' . $key . '" value="'. $value .'">\n';
}
}
$addformheader = get_form_header(translate($this->_popupMeta['create']['createButton']), $formSave, false);
return $addformheader;
}
public function getQuickCreate()
{
require_once("include/EditView/PopupQuickCreate.php");
$qc = new PopupQuickCreate($this->module);
return $qc->process($this->module);
}
}