SuiteCRM-Core/modules/AOW_WorkFlow/aow_utils.php

1028 lines
40 KiB
PHP
Raw Normal View History

<?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 - 2018 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');
}
function getModuleFields(
$module,
$view = 'EditView',
$value = '',
$valid = array(),
$override = array()
) {
global $app_strings, $beanList, $current_user;
$blockedModuleFields = array(
// module = array( ... fields )
'Users' => array(
'id',
'is_admin',
'name',
'user_hash',
'user_name',
'system_generated_password',
'pwd_last_changed',
'authenticate_id',
'sugar_login',
'external_auth_only',
'deleted',
'is_group',
)
);
$fields = array('' => $app_strings['LBL_NONE']);
$unset = array();
if ($module !== '') {
if (isset($beanList[$module]) && $beanList[$module]) {
$mod = new $beanList[$module]();
foreach ($mod->field_defs as $name => $arr) {
if (ACLController::checkAccess($mod->module_dir, 'list', true)) {
if (array_key_exists($mod->module_dir, $blockedModuleFields)) {
if (in_array(
$arr['name'],
$blockedModuleFields[$mod->module_dir]
) && !$current_user->isAdmin()
) {
$GLOBALS['log']->debug('hiding ' . $arr['name'] . ' field from ' . $current_user->name);
continue;
}
}
if ($arr['type'] !== 'link'
&& $name !== 'currency_name'
&& $name !== 'currency_symbol'
&& (empty($valid) || in_array($arr['type'], $valid))
&& ((!isset($arr['source']) || $arr['source'] !== 'non-db')
|| ($arr['type'] === 'relate' && isset($arr['id_name']))
|| in_array($name, $override))
) {
if (isset($arr['vname']) && $arr['vname'] !== '') {
$fields[$name] = rtrim(translate($arr['vname'], $mod->module_dir), ':');
} else {
$fields[$name] = $name;
}
if ($arr['type'] === 'relate' && isset($arr['id_name']) && $arr['id_name'] !== '') {
$unset[] = $arr['id_name'];
}
}
}
} //End loop.
foreach ($unset as $name) {
if (isset($fields[$name])) {
unset($fields[$name]);
}
}
}
}
asort($fields);
if ($view == 'JSON') {
return json_encode($fields);
}
if ($view == 'EditView') {
return get_select_options_with_id($fields, $value);
}
return $fields[$value];
}
function getRelModuleFields($module, $rel_field, $view='EditView', $value = '')
{
global $beanList;
if ($module == $rel_field) {
return getModuleFields($module, $view, $value);
}
$mod = new $beanList[$module]();
$data = $mod->field_defs[$rel_field];
if (isset($data['module']) && $data['module'] != '') {
return getModuleFields($data['module'], $view, $value);
}
}
/**
* @param string $module
* @param string $linkFields
* @return string
*/
function getRelatedModule($module, $linkFields)
{
$linkField = explode(':', $linkFields, 2);
$link = $linkField[0];
$relatedModule = $module;
if ($module === $link) {
$relatedModule = $module;
} else {
$bean = BeanFactory::newBean($module);
if ($bean && $bean->load_relationship($link)) {
$relatedModule = $bean->$link->getRelatedModuleName();
}
}
if (!empty($linkField[1])) {
return getRelatedModule($relatedModule, $linkField[1]);
}
return $relatedModule;
}
function getModuleTreeData($module)
{
global $beanList, $app_list_strings;
$sort_fields = array();
$module_label = isset($app_list_strings['moduleList'][$module]) ? $app_list_strings['moduleList'][$module] : $module;
$fields = array(
$module => array('label' => $module_label,
'type' => 'module',
'module' => $module,
'module_label'=> $module_label)
);
if ($module != '' && ACLController::checkAccess($module, 'list', true)) {
if (isset($beanList[$module]) && $beanList[$module]) {
$mod = new $beanList[$module]();
foreach ($mod->get_linked_fields() as $name => $arr) {
if (isset($arr['module']) && $arr['module'] != '') {
$rel_module = $arr['module'];
} elseif ($mod->load_relationship($name)) {
$rel_module = $mod->$name->getRelatedModuleName();
}
if (!ACLController::checkAccess($rel_module, 'list', true)) {
continue;
}
$rel_module_label = isset($app_list_strings['moduleList'][$rel_module]) ? $app_list_strings['moduleList'][$rel_module] : $rel_module;
if (isset($arr['vname']) && $arr['vname'] != '') {
$label = $rel_module_label . ' : ' . translate($arr['vname'], $mod->module_dir);
$module_label = trim(translate($arr['vname'], $mod->module_dir), ':');
} else {
$label = $rel_module_label . ' : '. $name;
$module_label = $name;
}
$sort_fields[$name] = array('label'=>$label,'type'=>'relationship','module' => $rel_module,'module_label'=>$module_label);
if ($arr['type'] == 'relate' && isset($arr['id_name']) && $arr['id_name'] != '') {
if (isset($fields[$arr['id_name']])) {
unset($fields[$arr['id_name']]);
}
}
} //End loop.
uasort($sort_fields, function ($a, $b) {
return strcmp($a['label'], $b['label']);
});
$fields = array_merge((array)$fields, (array)$sort_fields);
}
}
return json_encode($fields);
}
function getModuleRelationships($module, $view='EditView', $value = '')
{
global $beanList, $app_list_strings;
$fields = array($module=>$app_list_strings['moduleList'][$module]);
$sort_fields = array();
$invalid_modules = array();
if ($module != '') {
if (isset($beanList[$module]) && $beanList[$module]) {
$mod = new $beanList[$module]();
/*if($mod->is_AuditEnabled()){
$fields['Audit'] = translate('LBL_AUDIT_TABLE','AOR_Fields');
}*/
foreach ($mod->get_linked_fields() as $name => $arr) {
if (isset($arr['module']) && $arr['module'] != '') {
$rel_module = $arr['module'];
} elseif ($mod->load_relationship($name)) {
$rel_module = $mod->$name->getRelatedModuleName();
}
if (!in_array($rel_module, $invalid_modules)) {
$relModuleName = isset($app_list_strings['moduleList'][$rel_module]) ? $app_list_strings['moduleList'][$rel_module] : $rel_module;
if (isset($arr['vname']) && $arr['vname'] != '') {
$sort_fields[$name] = $relModuleName.' : '.translate($arr['vname'], $mod->module_dir);
} else {
$sort_fields[$name] = $relModuleName.' : '. $name;
}
if ($arr['type'] == 'relate' && isset($arr['id_name']) && $arr['id_name'] != '') {
if (isset($fields[$arr['id_name']])) {
unset($fields[$arr['id_name']]);
}
}
}
} //End loop.
array_multisort($sort_fields, SORT_ASC, $sort_fields);
$fields = array_merge((array)$fields, (array)$sort_fields);
}
}
if ($view == 'EditView') {
return get_select_options_with_id($fields, $value);
}
return $fields[$value];
}
function getValidFieldsTypes($module, $field)
{
global $beanFiles, $beanList;
require_once($beanFiles[$beanList[$module]]);
$focus = new $beanList[$module];
$vardef = $focus->getFieldDefinition($field);
switch ($vardef['type']) {
case 'double':
case 'decimal':
case 'float':
case 'currency':
$valid_type = array('double','decimal','float','currency');
break;
case 'uint':
case 'ulong':
case 'long':
case 'short':
case 'tinyint':
case 'int':
$valid_type = array('uint','ulong','long','short','tinyint','int');
break;
case 'date':
case 'datetime':
case 'datetimecombo':
$valid_type = array('date','datetime', 'datetimecombo');
break;
case 'id':
case 'relate':
case 'link':
$valid_type = array('relate', 'id');
//if($vardef['module'] == 'Users') $valid_type = array();
break;
default:
$valid_type = array();
break;
}
return $valid_type;
}
function getModuleField(
$module,
$fieldname,
$aow_field,
$view='EditView',
$value = '',
$alt_type = '',
$currency_id = '',
$params= array()
) {
global $current_language;
global $app_strings;
global $app_list_strings;
global $current_user;
global $beanFiles;
global $beanList;
// use the mod_strings for this module
$mod_strings = return_module_language($current_language, $module);
// if aor condition
if (strstr($aow_field, 'aor_conditions_value') !== false) {
// get aor condition row
$aor_row = str_replace('aor_conditions_value', '', $aow_field);
$aor_row = str_replace('[', '', $aor_row);
$aor_row = str_replace(']', '', $aor_row);
// set the filename for this control
$file = create_cache_directory('modules/AOW_WorkFlow/')
. $module
. $view
. $alt_type
. $fieldname
. $aor_row
. '.tpl';
} else {
// its probably result of the report
// set the filename for this control
$file = create_cache_directory('modules/AOW_WorkFlow/')
. $module
. $view
. $alt_type
. $fieldname
. '.tpl';
}
$displayParams = array();
if (!is_file($file)
|| $view === 'EditView'
|| inDeveloperMode()
|| !empty($_SESSION['developerMode'])) {
if (!isset($vardef)) {
require_once($beanFiles[$beanList[$module]]);
$focus = new $beanList[$module];
$vardef = $focus->getFieldDefinition($fieldname);
}
// Bug: check for AOR value SecurityGroups value missing
if (stristr($fieldname, 'securitygroups') != false && empty($vardef)) {
require_once($beanFiles[$beanList['SecurityGroups']]);
$module = 'SecurityGroups';
$focus = new $beanList[$module];
$vardef = $focus->getFieldDefinition($fieldname);
}
//$displayParams['formName'] = 'EditView';
// if this is the id relation field, then don't have a pop-up selector.
if ($vardef['type'] == 'relate' && $vardef['id_name'] == $vardef['name']) {
$vardef['type'] = 'varchar';
}
//$vardef['precision'] = $locale->getPrecedentPreference('default_currency_significant_digits', $current_user);
if ($vardef['type'] == 'datetime') {
$vardef['type'] = 'datetimecombo';
}
if ($vardef['type'] == 'datetimecombo') {
$displayParams['originalFieldName'] = $aow_field;
// Replace the square brackets by a deliberately complex alias to avoid JS conflicts
$displayParams['idName'] = createBracketVariableAlias($aow_field);
}
// trim down textbox display
if ($vardef['type'] == 'text') {
$vardef['rows'] = 2;
$vardef['cols'] = 32;
}
// create the dropdowns for the parent type fields
if ($vardef['type'] == 'parent_type') {
$vardef['type'] = 'enum';
}
if ($vardef['type'] == 'link') {
$vardef['type'] = 'relate';
$vardef['rname'] = 'name';
$vardef['id_name'] = $vardef['name'].'_id';
if ((!isset($vardef['module']) || $vardef['module'] == '') && $focus->load_relationship($vardef['name'])) {
$relName = $vardef['name'];
$vardef['module'] = $focus->$relName->getRelatedModuleName();
}
}
//check for $alt_type
if ($alt_type != '') {
$vardef['type'] = $alt_type;
}
// remove the special text entry field function 'getEmailAddressWidget'
if (isset($vardef['function'])
&& ($vardef['function'] == 'getEmailAddressWidget'
|| $vardef['function']['name'] == 'getEmailAddressWidget')) {
unset($vardef['function']);
}
if (isset($vardef['name']) && ($vardef['name'] == 'date_entered' || $vardef['name'] == 'date_modified')) {
$vardef['name'] = 'aow_temp_date';
}
// load SugarFieldHandler to render the field tpl file
static $sfh;
if (!isset($sfh)) {
require_once('include/SugarFields/SugarFieldHandler.php');
$sfh = new SugarFieldHandler();
}
$contents = $sfh->displaySmarty('fields', $vardef, $view, $displayParams);
// Remove all the copyright comments
$contents = preg_replace('/\{\*[^\}]*?\*\}/', '', $contents);
if ($view == 'EditView' && ($vardef['type'] == 'relate' || $vardef['type'] == 'parent')) {
$contents = str_replace(
'"' . $vardef['id_name'] . '"',
'{/literal}"{$fields.' . $vardef['name'] . '.id_name}"{literal}',
$contents
);
$contents = str_replace(
'"' . $vardef['name'] . '"',
'{/literal}"{$fields.' . $vardef['name'] . '.name}"{literal}',
$contents
);
}
if ($view == 'DetailView' && $vardef['type'] == 'image') {
// Because TCPDF could not read image from download entryPoint, we need change entryPoint link to image path to resolved issue Image is not showing in PDF report
if ($_REQUEST['module'] == 'AOR_Reports' && $_REQUEST['action'] == 'DownloadPDF') {
global $sugar_config;
$upload_dir = isset($sugar_config['upload_dir']) ? $sugar_config['upload_dir'] : 'upload/';
$contents = str_replace('index.php?entryPoint=download&id=', $upload_dir, $contents);
$contents = str_replace('&type={$module}', '', $contents);
}
$contents = str_replace('{$fields.id.value}', '{$record_id}', $contents);
}
// hack to disable one of the js calls in this control
if (isset($vardef['function']) && ($vardef['function'] == 'getCurrencyDropDown' || $vardef['function']['name'] == 'getCurrencyDropDown')) {
$contents .= "{literal}<script>function CurrencyConvertAll() { return; }</script>{/literal}";
}
// Save it to the cache file
if ($fh = @sugar_fopen($file, 'w')) {
fwrite($fh, $contents);
fclose($fh);
}
}
// Now render the template we received
$ss = new Sugar_Smarty();
// Create Smarty variables for the Calendar picker widget
global $timedate;
$time_format = $timedate->get_user_time_format();
$date_format = $timedate->get_cal_date_format();
$ss->assign('USER_DATEFORMAT', $timedate->get_user_date_format());
$ss->assign('TIME_FORMAT', $time_format);
$time_separator = ":";
$match = array();
if (preg_match('/\d+([^\d])\d+([^\d]*)/s', $time_format, $match)) {
$time_separator = $match[1];
}
$t23 = strpos($time_format, '23') !== false ? '%H' : '%I';
if (!isset($match[2]) || $match[2] == '') {
$ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M");
} else {
$pm = $match[2] == "pm" ? "%P" : "%p";
$ss->assign('CALENDAR_FORMAT', $date_format . ' ' . $t23 . $time_separator . "%M" . $pm);
}
$ss->assign('CALENDAR_FDOW', $current_user->get_first_day_of_week());
// populate the fieldlist from the vardefs
$fieldlist = array();
if (!isset($focus) || !($focus instanceof SugarBean)) {
require_once($beanFiles[$beanList[$module]]);
}
$focus = new $beanList[$module];
// create the dropdowns for the parent type fields
$vardefFields = $focus->getFieldDefinitions();
if (isset($vardefFields[$fieldname]['type']) && $vardefFields[$fieldname]['type'] == 'parent_type') {
$focus->field_defs[$fieldname]['options'] = $focus->field_defs[$vardefFields[$fieldname]['group']]['options'];
}
foreach ($vardefFields as $name => $properties) {
$fieldlist[$name] = $properties;
// fill in enums
if (isset($fieldlist[$name]['options']) && is_string($fieldlist[$name]['options']) && isset($app_list_strings[$fieldlist[$name]['options']])) {
$fieldlist[$name]['options'] = $app_list_strings[$fieldlist[$name]['options']];
} // Bug 32626: fall back on checking the mod_strings if not in the app_list_strings
elseif (isset($fieldlist[$name]['options']) && is_string($fieldlist[$name]['options']) && isset($mod_strings[$fieldlist[$name]['options']])) {
$fieldlist[$name]['options'] = $mod_strings[$fieldlist[$name]['options']];
}
// Bug 22730: make sure all enums have the ability to select blank as the default value.
// Make sure the enum has an 'options' array to append a new value to.
if (isset($fieldlist[$name]['options']) && is_array($fieldlist[$name]['options']) && !isset($fieldlist[$name]['options'][''])) {
$fieldlist[$name]['options'][''] = '';
}
if ($fieldlist[$name]['type'] == 'enum' || $fieldlist[$name]['type'] == 'multienum' || $fieldlist[$name]['type'] == 'dynamicenum') {
if ($params['value_set'] === true && $value === "") {
$fieldlist[$name]['default'] = $value;
}
}
}
// fill in function return values
if (!in_array($fieldname, array('email1','email2'))) {
if (!empty($fieldlist[$fieldname]['function']['returns']) && $fieldlist[$fieldname]['function']['returns'] == 'html') {
$function = $fieldlist[$fieldname]['function']['name'];
// include various functions required in the various vardefs
if (isset($fieldlist[$fieldname]['function']['include']) && is_file($fieldlist[$fieldname]['function']['include'])) {
require_once($fieldlist[$fieldname]['function']['include']);
}
$_REQUEST[$fieldname] = $value;
$value = $function($focus, $fieldname, $value, $view);
$value = str_ireplace($fieldname, $aow_field, $value);
}
}
if (isset($fieldlist[$fieldname]['type']) && $fieldlist[$fieldname]['type'] == 'link') {
$fieldlist[$fieldname]['id_name'] = $fieldlist[$fieldname]['name'].'_id';
if ((!isset($fieldlist[$fieldname]['module']) || $fieldlist[$fieldname]['module'] == '') && $focus->load_relationship($fieldlist[$fieldname]['name'])) {
$relName = $fieldlist[$fieldname]['name'];
$fieldlist[$fieldname]['module'] = $focus->$relName->getRelatedModuleName();
}
}
if (isset($fieldlist[$fieldname]['name']) && ($fieldlist[$fieldname]['name'] == 'date_entered' || $fieldlist[$fieldname]['name'] == 'date_modified')) {
$fieldlist[$fieldname]['name'] = 'aow_temp_date';
$fieldlist['aow_temp_date'] = $fieldlist[$fieldname];
$fieldname = 'aow_temp_date';
}
$quicksearch_js = '';
if (isset($fieldlist[$fieldname]['id_name']) && $fieldlist[$fieldname]['id_name'] != '' && $fieldlist[$fieldname]['id_name'] != $fieldlist[$fieldname]['name']) {
$rel_value = $value;
// avoid printing js content in CLI commands for example cron
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) != 'cli') {
require_once("include/TemplateHandler/TemplateHandler.php");
$template_handler = new TemplateHandler();
$quicksearch_js = $template_handler->createQuickSearchCode($fieldlist, $fieldlist, $view);
$quicksearch_js = str_replace($fieldname, $aow_field.'_display', $quicksearch_js);
$quicksearch_js = str_replace($fieldlist[$fieldname]['id_name'], $aow_field, $quicksearch_js);
echo $quicksearch_js;
}
if (isset($fieldlist[$fieldname]['module']) && $fieldlist[$fieldname]['module'] == 'Users') {
$rel_value = get_assigned_user_name($value);
} elseif (isset($fieldlist[$fieldname]['module'])) {
require_once($beanFiles[$beanList[$fieldlist[$fieldname]['module']]]);
$rel_focus = new $beanList[$fieldlist[$fieldname]['module']];
$rel_focus->retrieve($value);
if (isset($fieldlist[$fieldname]['rname']) && $fieldlist[$fieldname]['rname'] != '') {
$relDisplayField = $fieldlist[$fieldname]['rname'];
} else {
$relDisplayField = 'name';
}
$rel_value = $rel_focus->$relDisplayField;
}
$fieldlist[$fieldlist[$fieldname]['id_name']]['value'] = $value;
$fieldlist[$fieldname]['value'] = $rel_value;
$fieldlist[$fieldname]['id_name'] = $aow_field;
$fieldlist[$fieldlist[$fieldname]['id_name']]['name'] = $aow_field;
$fieldlist[$fieldname]['name'] = $aow_field.'_display';
} elseif (isset($fieldlist[$fieldname]['type']) && $view == 'DetailView' && ($fieldlist[$fieldname]['type'] == 'datetimecombo' || $fieldlist[$fieldname]['type'] == 'datetime' || $fieldlist[$fieldname]['type'] == 'date')) {
$value = $focus->convertField($value, $fieldlist[$fieldname]);
if (!empty($params['date_format']) && isset($params['date_format'])) {
$convert_format = "Y-m-d H:i:s";
if ($fieldlist[$fieldname]['type'] == 'date') {
$convert_format = "Y-m-d";
}
$fieldlist[$fieldname]['value'] = $timedate->to_display($value, $convert_format, $params['date_format']);
} else {
if ($fieldlist[$fieldname]['type'] == 'date') {
$fieldlist[$fieldname]['value'] = $timedate->to_display_date($value, true, true);
} else {
$fieldlist[$fieldname]['value'] = $timedate->to_display_date_time($value, true, true);
}
}
$fieldlist[$fieldname]['name'] = $aow_field;
} elseif (isset($fieldlist[$fieldname]['type']) && ($fieldlist[$fieldname]['type'] == 'datetimecombo' || $fieldlist[$fieldname]['type'] == 'datetime' || $fieldlist[$fieldname]['type'] == 'date')) {
$value = $focus->convertField($value, $fieldlist[$fieldname]);
Squashed 'public/legacy/' changes from 2aaee3c558..7ce0eaf560 7ce0eaf560 Merge commit 'a9b7e9d38c89bb831eed5c46ae88e1a340a9e745' into refactor_legacy 77175ae5ca Fix undefined property sentAssignmentNotifications a12d18b3c9 Update CleanCSVTest ed7951dc93 Update Composer 21c3adc06f SuiteCRM 7.11.21 Release d6aa88abd2 Allow filtering Survey campaigns 7ab8113825 Adding new attribute to CaseTest for sentAssignmentNotification as well as other Tests 3b13d3d4ac Retrieve SuiteCRM version in get_server_info db739a3116 Improve Contacts duplicates list 1ebfecf604 Help text containing quotes is not correctly displayed 9191047355 Wrong spelling of AOR_Reports module e3aa666d15 fix for #8991 0ae8676656 Link fix to documentation site e6bcec88cb Notes for abbreviations, VAT, Activity Stream, SAML d2a0f08ab9 Indentation fix 9602a5ab9f Space typo fix 6105f4b231 Moving comment next to the string 49be1068b5 https url fix 85a3dfb122 SuiteP template translators notes 6025f859e4 Fix for: #9179 AOR_Charts getShortenedLabel fails on utf8 characters 092ab1f7fa Add the ability import Projects a91fe3995e Fix Issue #4145 5d077d44e2 Fix #9205 - Duplicate audit records. 925f194db2 Fix #9203 - Duplicate notification emails. 16f6fda636 Fix Archive Folder Query 504f16f0a8 Add cases to email object_arr fe07e1660c Fix only init Currency once 5692da9269 Fix broken image path in reports HTML ce93d319d7 Fix php notices 013e0eee39 Change pdfheader/pdffooter data type to longtext 175df9ffe9 Set default perms on new log file 4caedf2fdf Update CaseUpdatesHook.php 8d4678fdb1 Remove spaces in fnc call ACLController::filterModuleList() 1e5e8bfecc Fix function declaration of TabController::get_key_array() 9e85083916 Wrong spelling of ProspectLists module ce8f3b0665 Fix #9201 - Filter form label styling. 568839d1bd Fix #9237 where dates in aow actions & conditions are not saved or displayed correctly 17363c3f60 Fix #6997 - User profile password auto-fill 5b87663738 Correct layout of date fields 1de52dc97d 7.11.20 6737e71506 Fix Users index incompatible with MSSQL bd9dd96f3a Change populateDefaultValues fatal log on empty field_defs to warning 9039d97b07 Fix theme display issues ffb434042f Fix Missing locale in FullCalender 3.10 32e8146664 Fix Php compatibility within Admin ConfigureTabs e0904414a1 Fix Email Address loading performance fdea144ecb Fix #8319 - Multiple IMAP Inboxes fails to display emails 45a6527e91 Fix #7285 - Allow filter of custom fields on V8 API Get Modules 55dab76a1a Fix #8420 - V8 API issues fails on windows 8994449ef8 Upgrade ElasticSearch to v7.x cd2e17a49a Implement PDFEngine 1a50079341 Fix PDF_Lib constructors 17035aa25b Replace deprecated fzaninotto/faker with fakerphp/faker 854daa3ef7 Move test namespaces into autoload-dev a801513237 Upgrade nesbot/carbon to v2.x 889e73b943 Update Travis config to use composer v2.x 22f956cf74 Upgrade composer-merge-plugin to v2.x 753e6242fa Fix PHPUnit 9 deprecations and warnings f62d8d7bed Fix test case class not matching filename deprecation warnings 1b4cefb5c3 Replace abandoned leafo/scssphp with scssphp/scssphp 53a1cf3765 Upgrade Robo to v3.x 32231c4f1d Update composer.json 5b8ea6cd49 Fix missing default config values 2555dc14b7 Consolidate global search settings 12d51f8e5c Remove duplicate "Global Search" link in the adminpanel 6c28c687ee Implement search engine selection 24a3e9d6c2 Deprecate UnifiedSearchAdvanced 6453ebf25c Unify search engines a740042295 Remove new/legacy search engine labels dc8a8bc8e1 Add codeception 4.1.x dependencies to composer 8404643044 Migrate PHPUnit schema for 9.5.x ac144b8dfc Upgrade PHPUnit to 9.5.x 2f7e5790bc Remove codeception 4882f9531e Fix tests remove incompletes 74596e24b8 Fix tests deprecated asserts 8539246027 Fix tests define return type hints ff8e2f2973 Update test namespaces for PSR-4/PSR-8 5f17109ce4 Fix tests redundant noinspection 65fa1662d2 Fix tests misordered assert arguments d3d589c4fc Fix tests use appropriate asserts f1c8e05d00 Fix tests one-time use variables fad98fcead Fix tests method invocations e660423312 Update PHPUnit schema 251bf18f31 Update Travis config to remove PHP 7.2 a715d7120c Update minimum required PHP to v7.3.0 369cd99c3a Fix #9106 - Update securexss for backwards compatibility b1263f189f Update composer 42c065dd91 7.11.19 cdc3b47207 Fix Calender display issues in FullCalender 3.10 3caa17e1f8 Fix #7999 - Prevent securitygroups mass assign damage df0c687ad0 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent a173f1b1d2 Fix #8571 - Remove duplicate code in users detailviewdefs 4e3c62fe56 Fix #8514 - Implement effective opcache file clearing afca8fa5f8 Fix #8461, #8462 - PHP files are potentially overwritten 5b0f1f13ed Fix #8700 - Various problems in PHPDocs throughout the codebase. f89f115fe6 Fix #9067 - Fix the drop down width 579b894f65 Add Additional api filter option `like` 88316f8612 Add filters in relationship API 277b9e5520 Add Relationship Beans in V8 API Response e178ef8495 Fix #9090 - User menu alignment 631c756fc0 Fix #6051 - Modulebuilder labels edit fixes 2c2b5e689b Update JQuery JS Library to v3.6.0 065306623d Update FullCalendar JS Library to v3.10.2 0634e7f533 Update YUI JS Library to 2.9.1 a74ccf7eae Fix #8999 - Hardcoded 'by' label in calls c8f6cd9061 Fix #9034 - Business Hours does not work in non-english languages e554511cb0 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes ef590862fb Fix #9010 - Add missing 'view task' label on calendar b339312d79 Fix #8894 - Add missing label for calendar dashlet f936a6366a Fix #9032 - Prevent Notice Error During Import 42f87aac1d Fix #8182 - Update updateTimeDateFields to handle undefined dates a744e89bf6 Fix #9075 - Removing deleted related beans via link b17ef78ced Fix #8988 - Improve upon solution which doesn't cache incomplete beans 315c1ecf63 Fix #7772 - Only index ElasticSearch when enabled 7c05a09d90 Fix #9101 LangText exception breaking ElasticSearch 2bad09d0c0 Fix #8472 - No or not complete Searchresults using elasticsearch engine 6978a22cb1 Fix #6800 - Elasticsearch: Elastic index name is hardcoded cf8b487e6d Fix #8916 - Misspelled elasticsearch labels 8029916390 Fix #9080 - Update config for google/apiclient at composer.json 318d91a15c Fix #9060 - Project Form action should not be changed if delete is not confirmed b68834c47b Fix #8676 - New Scheduled Reports does not run d87c7a0748 Fix #2645 - Calendar quick create ignores required fields 91e9d7540a Deprecate PdfParser a1ee531f3d Deprecate advanced open discovery (AOD) 122b872c2b Fix subpanel insights to support function query f2b6be56e2 [Legacy] Update list count query to accept alias name 932d700511 [Legacy] Admin Release Styling Fixes e13201af39 [Legacy] Quotes & Invoices Faint Line Removed 1f0fdf0fb1 [Legacy] History Subpanel Styling Changes a01fe52c40 [Legacy] Date Calendar Icon Color Fixes c84dc60a1c [Legacy] Fix Add Dashlet Tab via Enter Key in Home Page Redirects to Legacy 3ea774916c [Legacy] Make anchor links within Convert Lead module point to S8 290978a5d3 [Legacy] add language labels for user auth guard ACL Error Messages 8d0ccd3ddf create user auth guard backend handler to handle User ACL 377e85090c [Legacy] Scrollbar color fix globally e776c38c42 [Legacy] Action DropDown Arrow Alignment Fixes bc384c226e Border Outline Color Fixes 811df34b1f [Legacy] Add utility method to retrieve install languages 39f3629b08 [Legacy] Add labels e6388fa338 [Legacy] Configure Module Menu Styling Changes 5653a6904a [Legacy] - Increment suitecrm_version.php 95073941fa [Legacy] Add labels 5597e87745 [Legacy] Add EmailAddressLinkMapper to ApiBeanMapper 17e9e91d04 [Legacy] Add LineItemSaveHandler 366dc162e0 [Legacy] Add BeanSaveHandlers 5e38fc88d8 [Legacy] Rename Modules Styling Changes 3bb5a5d6a9 Merge commit '9c71e8c884c7d5b277db136897113ec96618dc63' into fix/legacy_update 8b45c9a338 [Legacy] Fix Display Module & Subpanel Styling 85d70377d1 [Legacy] Add line item single primary email validation label da4a6a6c40 [Legacy] Add labels b80198be11 [Legacy] Add labels 56637aa080 Refactor filter content ApiBeanMapper to use filter mapper bee6f9c10b [Legacy] Move Legacy Filter Mapper to legacy 6ac12e5bd4 [Legacy] Fix Campaign Email Settings Styling 0aff61bc38 [Legacy] System Settings Hover Button Changes b9194c1c66 [Legacy] Activity Stream Styling Changes 37b80cefd6 [Legacy] Admin Language Styling Changes ec53218574 [Legacy] Fix Theme Setting Styling Changes 951e1ae844 [Legacy] Update SugarBean to support custom union query for history timeline widget 49c754ed87 Update history timeline backend handler to handle activities and audit data along with history data 4807b6fa45 [Legacy] Add labels for history timeline widget 174bba1e38 [Legacy] Fix Admin Diagnostic Tool Styling Changes b10a2d7e26 [Legacy] Fix Button Hover Styling 631cbbbe0e [Leagcy] Workflow & Invoice & Quotes Line Items Styling Fix ec22f577c9 [Legacy] Fix Help Icon Styling 9a092d2d51 [Legacy] Fix Security Groups Create Styling 96dda062d2 [Legacy] Fix Security Suite Settings Styling ed05b461aa [Legacy] Dashboard modal dashlet & add tab & edit tab 2b741a982a [Legacy] Fix Role List User Styling b2abf4588c [Legacy] Fix AOP Settings Styling 763d0ed66b [Legacy] Dashlet Table Scroll Fixes aa2aebfa82 [Legacy] Add attribute array mapping to ApiBeanMapper b8e3926ace [Legacy] Add MassUpdatePort 327ddf764d [Legacy] Add labels d10884fbad [Legacy] Fix Outline Border color 0d08b6684b [Legacy] Add Post Upgrade port service de0ebec1d4 [Legacy] Fix Business Hours Styling a69aa7f89b [Legacy] Fix AOS Settings Styling 942b635996 [Legacy] iFrame Modal Page Styling Changes 95c4d8a89a [Legacy] Admin Locale Styling Changes 4b4aade088 [Legacy] Role CreateView Styling Changes 4b8082c1b0 [Legacy] Password Management Styling Changes f542903e46 [Legacy] Currency Recordview styling changes 0efba176b7 [Legacy] Email Settings Send Email Styling Changes f8aad710e1 [Legacy] Email Settings Styling Changes 3e41d46bc6 [Legacy] Changes to support Legacy integration of Merge Duplicates action to Suite8 254619ad37 [Legacy] Roles Management Styling Changes 2ac0e9f126 [Legacy] Add legacy portability services to add records or contacts to a target list 42a1ab8e88 [Legacy] Add labels for add to target list messages 8933416dc2 [Legacy] Dashboard Settings ModalPopup Changes 157ce24459 [Legacy] Project Resource Calendar Styling Changes 86b806d990 [Legacy] System Settings CSS Changes 80e5ce0e5e [Legacy] Add Language Label Change Log b2e9a36e6a [Legacy] Increment suitecrm_version af1d13f4a6 Merge commit '2473298dc64fa8c2318bc9d1ead5c6a4e46d8198' into beta2 039df6a308 [Legacy] Add Legacy portability Link Service cde96fd758 [Legacy] Change Case update wiget items display 8ee998700d [Legacy] Add generic action success label 357655058c [Legacy] Change Cases calculated field rules 49120c6a05 [Legacy] Add non-db source field to cases 6f9cc072db [Legacy] Add null checks to CaseUpdate sendUpdate cc68ead8ca [Legacy] Remove case threads from case detailviewdefs b651151cc9 [Legacy] Add case updates widget configuration 5960f06d73 [Legacy] Add record-thread component related labels 2824f62499 [Legacy] Add case updates api bean mappers 7244666094 [Legacy] Add non-db author field to case updates 19e839e022 [Legacy] Add case thread update label eae9e509f6 define datetime format conversion mappers for datetimecombo field 48ff651d60 [Legacy] Inbound Email ListView Styling Changes 144a01f3c7 [Legacy] Add link label 9a3bbaec3f [Legacy] Labels definition for link entity relationship via record subpanels 1c7b7d1770 [Legacy] Update unlink related labels 79088c678c [Legacy] Add unlink service port 7495fa6d86 [Legacy] Changes for Unlink Subpanel Relationship c8df2643cf [Legacy] User Profile Styling Changes ce539098dd [Legacy] Homepage Mobile Changes 22c6e4736e [Legacy] Add Saved filter related labels 6971d34c2c [Legacy] Add SavedSearch module metadata 5a70355c52 [Legacy] Add api to bean mapping handling to ApiBeanMapper e1a94f7cd1 [Legacy] Add null check to SavedSearch bean e37dbf171b [Legacy] Add SavedSearch module api bean mappers a441ec08ef [Legacy] Add ApiBeanModuleMappers 913cce923f Search Bar Mobile Changes ee1593f735 [Legacy] Remove advanced open discovery (AOD) 8f60fafec3 [Legacy] Define a new function to return all columns defined for the module list view ead86f0d02 [Legacy] Convert Lead Styling Changes 5606baede5 [Legacy] Subpanel Design Changes 7bf0e84681 [Legacy] Tab Arrwo Misalignment Changes 6a03cc65f2 [Legacy] Inbound Email Styling Changes 784f089a90 [Legacy] Update legacy vendor pathing aa1e3d8c59 [Legacy] Remove legacy composer 9e990b8ce7 [Legacy] Add global labels for listView Column Selector git-subtree-dir: public/legacy git-subtree-split: 7ce0eaf560b55293ca3f105ac776ff936b319679
2021-08-30 10:17:18 +01:00
if($fieldlist[$fieldname]['type'] === "date"){
$displayValue = $timedate->to_display_date($value);
}else{
$displayValue = $timedate->to_display_date_time($value);
}
$fieldlist[$fieldname]['value'] = $fieldlist[$aow_field]['value'] = $displayValue;
$fieldlist[$fieldname]['name'] = $aow_field;
} else {
$fieldlist[$fieldname]['value'] = $value;
$fieldlist[$fieldname]['name'] = $aow_field;
}
if (isset($fieldlist[$fieldname]['type']) && $fieldlist[$fieldname]['type'] == 'datetimecombo' || $fieldlist[$fieldname]['type'] == 'datetime') {
$fieldlist[$aow_field]['aliasId'] = createBracketVariableAlias($aow_field);
$fieldlist[$aow_field]['originalId'] = $aow_field;
}
if (isset($fieldlist[$fieldname]['type']) && $fieldlist[$fieldname]['type'] == 'currency' && $view != 'EditView') {
static $sfh;
if (!isset($sfh)) {
require_once('include/SugarFields/SugarFieldHandler.php');
$sfh = new SugarFieldHandler();
}
if ($currency_id != '' && !stripos($fieldname, '_USD')) {
$userCurrencyId = $current_user->getPreference('currency');
if ($currency_id != $userCurrencyId) {
$currency = BeanFactory::newBean('Currencies');
$currency->retrieve($currency_id);
$value = $currency->convertToDollar($value);
$currency->retrieve($userCurrencyId);
$value = $currency->convertFromDollar($value);
}
}
$parentfieldlist[strtoupper($fieldname)] = $value;
return($sfh->displaySmarty($parentfieldlist, $fieldlist[$fieldname], 'ListView', $displayParams));
}
$ss->assign("QS_JS", $quicksearch_js);
$ss->assign("fields", $fieldlist);
$ss->assign("form_name", $view);
$ss->assign("bean", $focus);
// Add in any additional strings
$ss->assign("MOD", $mod_strings);
$ss->assign("APP", $app_strings);
$ss->assign("module", $module);
if (!empty($params['record_id'])) {
$ss->assign("record_id", $params['record_id']);
}
return $ss->fetch($file);
}
/**
* Convert a bracketed variable into a string that can become a JS variable
*
* @param string $variable
* @return string
*/
function createBracketVariableAlias($variable)
{
$replaceRightBracket = str_replace(']', '', $variable);
$replaceLeftBracket = str_replace('[', '', $replaceRightBracket);
return $replaceLeftBracket;
}
/**
* @param string $module
* @param string $aow_field
* @param string $view
* @param $value
* @param bool $field_option
* @return string
*/
function getDateField($module, $aow_field, $view, $value = null, $field_option = true)
{
global $app_list_strings;
// set $view = 'EditView' as default
if (!$view) {
$view = 'EditView';
}
$value = json_decode(html_entity_decode_utf8($value), true);
if (!file_exists('modules/AOBH_BusinessHours/AOBH_BusinessHours.php')) {
unset($app_list_strings['aow_date_type_list']['business_hours']);
}
$field = '';
if ($view == 'EditView') {
$field .= "<select type='text' name='$aow_field".'[0]'."' id='$aow_field".'[0]'."' title='' tabindex='116'>". getDateFields($module, $view, $value[0], $field_option) ."</select>&nbsp;&nbsp;";
$field .= "<select type='text' name='$aow_field".'[1]'."' id='$aow_field".'[1]'."' onchange='date_field_change(\"$aow_field\")' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_date_operator'], $value[1]) ."</select>&nbsp;";
$display = 'none';
if ($value[1] == 'plus' || $value[1] == 'minus') {
$display = '';
}
$field .= "<input type='text' style='display:$display' name='$aow_field".'[2]'."' id='$aow_field".'[2]'."' title='' value='$value[2]' tabindex='116'>&nbsp;";
$field .= "<select type='text' style='display:$display' name='$aow_field".'[3]'."' id='$aow_field".'[3]'."' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_date_type_list'], $value[3]) ."</select>";
} else {
$field = getDateFields($module, $view, $value[0], $field_option).' '.$app_list_strings['aow_date_operator'][$value[1]];
if ($value[1] == 'plus' || $value[1] == 'minus') {
$field .= ' '.$value[2].' '.$app_list_strings['aow_date_type_list'][$value[3]];
}
}
return $field;
}
function getDateFields($module, $view='EditView', $value = '', $field_option = true)
{
global $beanList, $app_list_strings;
$fields = $app_list_strings['aow_date_options'];
if (!$field_option) {
unset($fields['field']);
}
if ($module != '') {
if (isset($beanList[$module]) && $beanList[$module]) {
$mod = new $beanList[$module]();
foreach ($mod->field_defs as $name => $arr) {
if ($arr['type'] == 'date' || $arr['type'] == 'datetime' || $arr['type'] == 'datetimecombo') {
if (isset($arr['vname']) && $arr['vname'] != '') {
$fields[$name] = translate($arr['vname'], $mod->module_dir);
} else {
$fields[$name] = $name;
}
}
} //End loop.
}
}
if ($view == 'EditView') {
return get_select_options_with_id($fields, $value);
}
return $fields[$value];
}
function getAssignField($aow_field, $view, $value)
{
global $app_list_strings;
$value = json_decode(html_entity_decode_utf8($value), true);
$roles = get_bean_select_array(true, 'ACLRole', 'name', '', 'name', true);
if (!file_exists('modules/SecurityGroups/SecurityGroup.php')) {
unset($app_list_strings['aow_assign_options']['security_group']);
} else {
$securityGroups = get_bean_select_array(true, 'SecurityGroup', 'name', '', 'name', true);
}
$field = '';
if ($view == 'EditView') {
$field .= "<select type='text' name='$aow_field".'[0]'."' id='$aow_field".'[0]'."' onchange='assign_field_change(\"$aow_field\")' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_assign_options'], $value[0]) ."</select>&nbsp;&nbsp;";
if (!file_exists('modules/SecurityGroups/SecurityGroup.php')) {
$field .= "<input type='hidden' name='$aow_field".'[1]'."' id='$aow_field".'[1]'."' value='' />";
} else {
$display = 'none';
if ($value[0] == 'security_group') {
$display = '';
}
$field .= "<select type='text' style='display:$display' name='$aow_field".'[1]'."' id='$aow_field".'[1]'."' title='' tabindex='116'>". get_select_options_with_id($securityGroups, $value[1]) ."</select>&nbsp;&nbsp;";
}
$display = 'none';
if ($value[0] == 'role' || $value[0] == 'security_group') {
$display = '';
}
$field .= "<select type='text' style='display:$display' name='$aow_field".'[2]'."' id='$aow_field".'[2]'."' title='' tabindex='116'>". get_select_options_with_id($roles, $value[2]) ."</select>&nbsp;&nbsp;";
} else {
$field = $app_list_strings['aow_assign_options'][$value[1]];
}
return $field;
}
function getDropdownList($list_id, $selected_value)
{
global $app_list_strings;
$option = '';
foreach ($app_list_strings[$list_id] as $key => $value) {
if (base64_decode($selected_value) == $key) {
$option .= '<option value="'.$key.'" selected>'.$value.'</option>';
} elseif ($selected_value == $key) {
$option .= '<option value="'.$key.'" selected>'.$value.'</option>';
} else {
$option .= '<option value="'.$key.'">'.$value.'</option>';
}
}
return $option;
}
function getLeastBusyUser($users, $field, SugarBean $bean)
{
$counts = array();
foreach ($users as $id) {
$c = $bean->db->getOne("SELECT count(*) AS c FROM ".$bean->table_name." WHERE $field = '$id' AND deleted = 0");
$counts[$id] = $c;
}
asort($counts);
$countsKeys = array_flip($counts);
return array_shift($countsKeys);
}
function getRoundRobinUser($users, $id)
{
$file = create_cache_directory('modules/AOW_WorkFlow/Users/') . $id . 'lastUser.cache.php';
if (isset($_SESSION['lastuser'][$id]) && $_SESSION['lastuser'][$id] != '') {
$users_by_key = array_flip($users); // now keys are values
$key = $users_by_key[$_SESSION['lastuser'][$id]] + 1;
if (!empty($users[$key])) {
return $users[$key];
}
} elseif (is_file($file)) {
require_once($file);
if (isset($lastUser['User']) && $lastUser['User'] != '') {
$users_by_key = array_flip($users); // now keys are values
$key = $users_by_key[$lastUser['User']] + 1;
if (!empty($users[$key])) {
return $users[$key];
}
}
}
return $users[0];
}
function setLastUser($user_id, $id)
{
$_SESSION['lastuser'][$id] = $user_id;
$file = create_cache_directory('modules/AOW_WorkFlow/Users/') . $id . 'lastUser.cache.php';
$arrayString = var_export_helper(array('User' => $user_id));
$content =<<<eoq
<?php
\$lastUser = {$arrayString};
?>
eoq;
if ($fh = @sugar_fopen($file, 'w')) {
fwrite($fh, $content);
fclose($fh);
}
return true;
}
function getEmailableModules()
{
global $beanFiles, $beanList, $app_list_strings;
$emailableModules = array();
foreach ($app_list_strings['aow_moduleList'] as $bean_name => $bean_dis) {
if (isset($beanList[$bean_name]) && isset($beanFiles[$beanList[$bean_name]])) {
require_once($beanFiles[$beanList[$bean_name]]);
$obj = new $beanList[$bean_name];
if ($obj instanceof Person || $obj instanceof Company) {
$emailableModules[] = $bean_name;
}
}
}
asort($emailableModules);
return $emailableModules;
}
function getRelatedEmailableFields($module)
{
global $beanList, $app_list_strings;
$relEmailFields = array();
$checked_link = array();
$emailableModules = getEmailableModules();
if ($module != '') {
if (isset($beanList[$module]) && $beanList[$module]) {
$mod = new $beanList[$module]();
foreach ($mod->get_related_fields() as $field) {
if (isset($field['link'])) {
$checked_link[] = $field['link'];
}
if (!isset($field['module']) || !in_array($field['module'], $emailableModules) || (isset($field['dbType']) && $field['dbType'] == "id")) {
continue;
}
$relEmailFields[$field['name']] = translate($field['module']) . ": "
. trim(translate($field['vname'], $mod->module_name), ":");
}
foreach ($mod->get_linked_fields() as $field) {
if (!in_array($field['name'], $checked_link) && !in_array($field['relationship'], $checked_link)) {
if (isset($field['module']) && $field['module'] != '') {
$rel_module = $field['module'];
} elseif ($mod->load_relationship($field['name'])) {
$relField = $field['name'];
$rel_module = $mod->$relField->getRelatedModuleName();
}
if (in_array($rel_module, $emailableModules)) {
if (isset($field['vname']) && $field['vname'] != '') {
$relEmailFields[$field['name']] = $app_list_strings['moduleList'][$rel_module] . ' : ' . translate($field['vname'], $mod->module_dir);
} else {
$relEmailFields[$field['name']] = $app_list_strings['moduleList'][$rel_module] . ' : ' . $field['name'];
}
}
}
}
array_multisort($relEmailFields, SORT_ASC, $relEmailFields);
}
}
return $relEmailFields;
}
function fixUpFormatting($module, $field, $value)
{
global $timedate, $beanFiles, $beanList;
require_once($beanFiles[$beanList[$module]]);
$bean = new $beanList[$module];
static $boolean_false_values = array('off', 'false', '0', 'no');
switch ($bean->field_defs[$field]['type']) {
case 'datetime':
case 'datetimecombo':
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 '75ea167930117424c176a1868d5e11e32c87df94' 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 'dd455a1c2d0658a843945edce1815fd6291f42a8' 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 '114b895b6d3418aa538b41169267c21beb9ff357' 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
// If value is array, don't attempt to convert to DB format
if (empty($value) || is_array($value)) {
break;
}
if ($value == 'NULL') {
$value = '';
break;
}
if (! preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/', $value)) {
// This appears to be formatted in user date/time
$value = $timedate->to_db($value);
}
break;
case 'date':
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 '75ea167930117424c176a1868d5e11e32c87df94' 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 'dd455a1c2d0658a843945edce1815fd6291f42a8' 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 '114b895b6d3418aa538b41169267c21beb9ff357' 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
// If value is array, don't attempt to convert to DB format
if (empty($value) || is_array($value)) {
break;
}
if ($value == 'NULL') {
$value = '';
break;
}
if (! preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $value)) {
// This date appears to be formatted in the user's format
$value = $timedate->to_db_date($value, false);
}
break;
case 'time':
if (empty($value)) {
break;
}
if ($value == 'NULL') {
$value = '';
break;
}
if (preg_match('/(am|pm)/i', $value)) {
// This time appears to be formatted in the user's format
$value = $timedate->fromUserTime($value)->format(TimeDate::DB_TIME_FORMAT);
}
break;
case 'double':
case 'decimal':
case 'currency':
case 'float':
if ($value === '' || $value == null || $value == 'NULL') {
break;
}
if (is_string($value)) {
$value = (float)unformat_number($value);
}
break;
case 'uint':
case 'ulong':
case 'long':
case 'short':
case 'tinyint':
case 'int':
if ($value === '' || $value == null || $value == 'NULL') {
break;
}
if (is_string($value)) {
$value = (int)unformat_number($value);
}
break;
case 'bool':
if (empty($value)) {
$value = false;
} elseif (true === $value || 1 == $value) {
$value = true;
} elseif (in_array((string)$value, $boolean_false_values)) {
$value = false;
} else {
$value = true;
}
break;
}
return $value;
}