SuiteCRM-Core/include/utils.php

6250 lines
196 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.
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
* Copyright (C) 2011 - 2021 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');
}
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
require_once __DIR__ . '/../php_version.php';
require_once __DIR__ . '/../include/SugarObjects/SugarConfig.php';
require_once __DIR__ . '/../include/utils/security_utils.php';
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
use voku\helper\AntiXSS;
/**
* @param $sugar_config
*/
function make_sugar_config(&$sugar_config)
{
/* used to convert non-array config.php file to array format */
global $admin_export_only;
global $cache_dir;
global $calculate_response_time;
global $create_default_user;
global $dateFormats;
global $dbconfig;
global $dbconfigoption;
global $default_action;
global $default_charset;
global $default_currency_name;
global $default_currency_symbol;
global $default_currency_iso4217;
global $defaultDateFormat;
global $default_language;
global $default_module;
global $default_password;
global $default_theme;
global $defaultTimeFormat;
global $default_user_is_admin;
global $default_user_name;
global $disable_export;
global $disable_persistent_connections;
global $display_email_template_variable_chooser;
global $display_inbound_email_buttons;
global $google_auth_json;
global $history_max_viewed;
global $host_name;
global $import_dir;
global $languages;
global $list_max_entries_per_page;
global $lock_default_user_name;
global $log_memory_usage;
global $nameFormats;
global $requireAccounts;
global $RSS_CACHE_TIME;
global $session_dir;
global $site_URL;
global $site_url;
global $sugar_version;
global $timeFormats;
global $tmp_dir;
global $translation_string_prefix;
global $unique_key;
global $upload_badext;
global $upload_dir;
global $upload_maxsize;
global $import_max_execution_time;
global $list_max_entries_per_subpanel;
global $passwordsetting;
// assumes the following variables must be set:
// $dbconfig, $dbconfigoption, $cache_dir, $session_dir, $site_URL, $upload_dir
$sugar_config = array(
'admin_export_only' => empty($admin_export_only) ? false : $admin_export_only,
'export_delimiter' => empty($export_delimiter) ? ',' : $export_delimiter,
'cache_dir' => empty($cache_dir) ? 'cache/' : $cache_dir,
'calculate_response_time' => empty($calculate_response_time) ? true : $calculate_response_time,
'create_default_user' => empty($create_default_user) ? false : $create_default_user,
'chartEngine' => 'Jit',
Squashed 'public/legacy/' changes from ace35f6573..23d711b703 23d711b703 [Legacy] update install language label 58fe59c8da [Legacy] Dashlet Settings Modal Styling Fixes b880c34877 [Legacy] User Profile Mobile Styling Fixes ab33cfc7cf [Legacy] Add acls calculation on legacy list data calls 220bf5b8be [Legacy] Get list of visible modules from module name mapper a7a0754a2d Fix valid module check 020a5dcb1b [Legacy] add widget acl metadata - update acl config for top widget 89e8f7c0f2 [Legacy] Subpanels Action Button Styling Fixes 6c287af813 remove photo widgets for contacts and leads 4ac8347d61 [Legacy] Admin Release Styling Fixes 3336b10790 Suite8 ChangeLog ModalPopup Styling Fixes 8df8ad992c [Legacy] Add close menu label 1dfdf6a005 [Legacy] Add not module selected label b234b8a1fe [Legacy] Add parent type ApiBeanMapper 4def7cdfc6 [Legacy] Fix username display for unauthorized users c9771bd330 [Legacy] DetailView Header Title Overlaps fixes 0a0dd3c2c5 [Legacy] Fix htaccess generation 687d5ea7bd Fix Date Filed for Targets 5f863f4b16 [Legacy] Remove Button Hover Fixes 78672e7a27 [Legacy] Reports footer button removed fixes 4b3a9778e8 [Legacy] Reports Styling Fixes 3ab39b6584 [Legacy] Maps Button Position Fixes e50f76f3fc [Legacy] Add Tab Dashlet Sapcing Fixes d2f6433a06 [Legacy] Dashlet Setting Modal Label Fix & Button Fixes e5137262f7 [Legacy] Activity Stream Post Button Hover color fixes 71d44b7274 [Legacy] Bump version to 8.0.0-rc abafbc280b [Legacy] Remove license from install app strings 43281fae73 Fix ignore system checks valitation feab3f0abf [Legacy] Add install labels b0fc8ac7a6 [Legacy] add new install labels 8fea1b7c7f [Legacy] add install validator class e4f7648e50 [Legacy] Add Label for Subpanel Edit Line Action b8ecc0a37e [Legacy] Dashboard Mobile Styling Fixes 7d427720f5 [Legacy] History Subpanel Button Styling Fixes 63d10c40d6 [Legacy] Workflow Stying Fixes 811ad79455 [Legacy] Convert Lead Styling Fixes 01764542a1 [Legacy] Roles Styling Fixes 7ecc573f0e [Legacy] Admin Modules label font fixes 9f13c91e22 [Legacy] HomePage Mobile Fixes 005d1ac949 update legacy handlers to apply new logic considering - base actions - action resolvers - fix url navigation issue in classic view b3c7a14380 [Legacy] Module framework - move suite 8 module config to legacy 542198ac5c [Legacy] Add support for more metadata on listviewdefs e3c82fc9ea [Legacy] Add Support for all modules with parent css classes f2dd774903 [Legacy] Security Group Styling Fixes b6e5591cc4 [Legacy] Password Management Mobile Fixes 1624fdcfad [Leagcy] Email Settings Fixes e033259dac [Legacy] Products Modules Buttons fixes eae8efde52 [Legacy] OAUTH2 Clients and tokens fixes f90c5f5315 [Legacy] adapt legacy install scripts to work with Suite8 install d099fac028 [Legacy] add labels for S8 Installer 8be5c78c4c [Legacy] Add widget not found label eb4449777b [Legacy] Email Action DropDown Styling Fixes 06aff4ce92 SuiteCRM 7.12.0 Release 1cf315c98b Fix BasicSearchResults hit counter c7458ea520 Update PDF samples for compatibility with new PDF Engine a2a392f6d3 Update Reports PDF for compatibility with new PDF Engine 575561903b Update PDF Engines for backward compatibility 3ed5326ca1 Deprecate TCPDF b6c4a4941f Fix TCPDF image scale d6c47de2f5 Fix TCPDF filename 412fd0d006 Add optional malicious file scanner f88149fcfe Feature: Allow configuring the Calendar name for the Google Sync via the config. ae836af690 Fix SearchFormView visible options 5f3545193f Update workflow acceptance test 7c54f0fbc4 SuiteCRM 7.12.0-RC Release 0159e0cd86 Remove unused currency config entries 1c49d879ad Default new MySQL based installs to use utf8mb4 dee7ba0594 Clean up search setting b9b6aeae3a Cleanup old CSS files ed59f5f6d9 Add missing admin icons 732e84c6a3 Move Workflow to default as admin function 60dce30854 Update admin panel to improve grouping 6f7524b46a Fix filepath for mPDF class cdab640886 Add default Engines f79cc55782 Remove MPDFEngine Test 77d38a259d Add check for MPDF class 59261aac8d Remove PDF_Lib 49fb8525a0 Implement TCPDF git-subtree-dir: public/legacy git-subtree-split: 23d711b70345ccf90d7508ce6aa5ddc8fd3dc4dd
2021-11-05 15:19:00 +00:00
'pdf' => [
'defaultEngine' => 'TCPDFEngine'
],
'date_formats' => empty($dateFormats) ? array(
'Y-m-d' => '2010-12-23',
'd-m-Y' => '23-12-2010',
'm-d-Y' => '12-23-2010',
'Y/m/d' => '2010/12/23',
'd/m/Y' => '23/12/2010',
'm/d/Y' => '12/23/2010',
'Y.m.d' => '2010.12.23',
'd.m.Y' => '23.12.2010',
'm.d.Y' => '12.23.2010',
) : $dateFormats,
'dbconfig' => $dbconfig, // this must be set!!
'dbconfigoption' => $dbconfigoption, // this must be set!!
'default_action' => empty($default_action) ? 'index' : $default_action,
'default_charset' => empty($default_charset) ? 'UTF-8' : $default_charset,
'default_currency_name' => empty($default_currency_name) ? 'US Dollar' : $default_currency_name,
'default_currency_symbol' => empty($default_currency_symbol) ? '$' : $default_currency_symbol,
'default_currency_iso4217' => empty($default_currency_iso4217) ? '$' : $default_currency_iso4217,
'default_date_format' => empty($defaultDateFormat) ? 'm/d/Y' : $defaultDateFormat,
'default_locale_name_format' => empty($defaultNameFormat) ? 's f l' : $defaultNameFormat,
'default_export_charset' => 'UTF-8',
'default_language' => empty($default_language) ? 'en_us' : $default_language,
'default_module' => empty($default_module) ? 'Home' : $default_module,
'default_password' => empty($default_password) ? '' : $default_password,
'default_permissions' => array(
'dir_mode' => 02770,
'file_mode' => 0755,
'chown' => '',
'chgrp' => '',
),
'default_theme' => empty($default_theme) ? 'SuiteP' : $default_theme,
'default_time_format' => empty($defaultTimeFormat) ? 'h:ia' : $defaultTimeFormat,
'default_user_is_admin' => empty($default_user_is_admin) ? false : $default_user_is_admin,
'default_user_name' => empty($default_user_name) ? '' : $default_user_name,
'disable_export' => empty($disable_export) ? false : $disable_export,
'disable_persistent_connections' => empty($disable_persistent_connections) ? false : $disable_persistent_connections,
'display_email_template_variable_chooser' => empty($display_email_template_variable_chooser) ? false : $display_email_template_variable_chooser,
'display_inbound_email_buttons' => empty($display_inbound_email_buttons) ? false : $display_inbound_email_buttons,
'google_auth_json' => empty($google_auth_json) ? '' : $google_auth_json,
'history_max_viewed' => empty($history_max_viewed) ? 50 : $history_max_viewed,
'host_name' => empty($host_name) ? 'localhost' : $host_name,
'import_dir' => $import_dir, // this must be set!!
'import_max_records_per_file' => 100,
'import_max_records_total_limit' => '',
'languages' => empty($languages) ? array('en_us' => 'English (US)') : $languages,
'list_max_entries_per_page' => empty($list_max_entries_per_page) ? 20 : $list_max_entries_per_page,
'list_max_entries_per_subpanel' => empty($list_max_entries_per_subpanel) ? 10 : $list_max_entries_per_subpanel,
'lock_default_user_name' => empty($lock_default_user_name) ? false : $lock_default_user_name,
'log_memory_usage' => empty($log_memory_usage) ? false : $log_memory_usage,
'name_formats' => empty($nameFormats) ? array(
's f l' => 's f l',
'f l' => 'f l',
's l' => 's l',
'l, s f' => 'l, s f',
'l, f' => 'l, f',
's l, f' => 's l, f',
'l s f' => 'l s f',
'l f s' => 'l f s',
) : $nameFormats,
'oauth2_encryption_key' => base64_encode(random_bytes(32)),
'portal_view' => 'single_user',
'resource_management' => array(
'special_query_limit' => 50000,
'special_query_modules' => array('AOR_Reports', 'Export', 'Import', 'Administration', 'Sync'),
'default_limit' => 1000,
),
'require_accounts' => empty($requireAccounts) ? true : $requireAccounts,
'rss_cache_time' => empty($RSS_CACHE_TIME) ? '10800' : $RSS_CACHE_TIME,
'session_dir' => $session_dir, // this must be set!!
'site_url' => empty($site_URL) ? $site_url : $site_URL, // this must be set!!
'showDetailData' => true, // if true, read-only ACL fields will still appear on EditViews as non-editable
'showThemePicker' => true,
'sugar_version' => empty($sugar_version) ? 'unknown' : $sugar_version,
'time_formats' => empty($timeFormats) ? array(
'H:i' => '23:00',
'h:ia' => '11:00 pm',
'h:iA' => '11:00PM',
'H.i' => '23.00',
'h.ia' => '11.00 pm',
'h.iA' => '11.00PM',
) : $timeFormats,
'tmp_dir' => $tmp_dir, // this must be set!!
'translation_string_prefix' => empty($translation_string_prefix) ? false : $translation_string_prefix,
'unique_key' => empty($unique_key) ? md5(create_guid()) : $unique_key,
'upload_badext' => empty($upload_badext) ? array(
'php',
'php3',
'php4',
'php5',
'php6',
'php7',
'php8',
'pl',
'cgi',
'py',
'asp',
'cfm',
'js',
'vbs',
'html',
'htm',
'phtml',
'phar',
) : $upload_badext,
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
'valid_image_ext' => [
'gif',
'png',
'jpg',
'jpeg',
'svg'
],
'upload_dir' => $upload_dir, // this must be set!!
'upload_maxsize' => empty($upload_maxsize) ? 30000000 : $upload_maxsize,
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
'allowed_preview' => [
'pdf',
'gif',
'png',
'jpeg',
'jpg'
],
'import_max_execution_time' => empty($import_max_execution_time) ? 3600 : $import_max_execution_time,
'lock_homepage' => false,
'lock_subpanels' => false,
'max_dashlets_homepage' => 15,
'dashlet_display_row_options' => array('1', '3', '5', '10'),
'default_max_tabs' => empty($max_tabs) ? 8 : $max_tabs,
'default_subpanel_tabs' => empty($subpanel_tabs) ? true : $subpanel_tabs,
'default_subpanel_links' => empty($subpanel_links) ? false : $subpanel_links,
'default_swap_last_viewed' => empty($swap_last_viewed) ? false : $swap_last_viewed,
'default_swap_shortcuts' => empty($swap_shortcuts) ? false : $swap_shortcuts,
'default_navigation_paradigm' => empty($navigation_paradigm) ? 'm' : $navigation_paradigm,
'default_call_status' => 'Planned',
'js_lang_version' => 1,
'passwordsetting' => empty($passwordsetting) ? array(
'SystemGeneratedPasswordON' => '',
'generatepasswordtmpl' => '',
'lostpasswordtmpl' => '',
'factoremailtmpl' => '',
'forgotpasswordON' => true,
'linkexpiration' => '1',
'linkexpirationtime' => '30',
'linkexpirationtype' => '1',
'systexpiration' => '0',
'systexpirationtime' => '',
'systexpirationtype' => '0',
'systexpirationlogin' => '',
) : $passwordsetting,
'use_sprites' => function_exists('imagecreatetruecolor'),
'search_wildcard_infront' => false,
'search_wildcard_char' => '%',
'jobs' => array(
'min_retry_interval' => 60, // minimal job retry delay
'max_retries' => 5, // how many times to retry the job
'timeout' => 86400, // how long a job may spend as running before being force-failed
'soft_lifetime' => 7, // how many days until job record will be soft deleted after completion
'hard_lifetime' => 21, // how many days until job record will be purged from DB
),
'cron' => array(
'max_cron_jobs' => 10, // max jobs per cron schedule run
'max_cron_runtime' => 60, // max runtime for cron jobs
'min_cron_interval' => 30, // minimal interval between cron jobs
),
'strict_id_validation' => false,
'legacy_email_behaviour' => false,
);
}
/**
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
* Used for getting base values for array style config.php
* @return array
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
* @throws Exception
*/
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
function get_sugar_config_defaults(): array
{
global $locale;
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
$sugar_config_defaults = [
'disableAjaxUI' => true,
'admin_export_only' => false,
Squashed 'public/legacy/' changes from ace35f6573..23d711b703 23d711b703 [Legacy] update install language label 58fe59c8da [Legacy] Dashlet Settings Modal Styling Fixes b880c34877 [Legacy] User Profile Mobile Styling Fixes ab33cfc7cf [Legacy] Add acls calculation on legacy list data calls 220bf5b8be [Legacy] Get list of visible modules from module name mapper a7a0754a2d Fix valid module check 020a5dcb1b [Legacy] add widget acl metadata - update acl config for top widget 89e8f7c0f2 [Legacy] Subpanels Action Button Styling Fixes 6c287af813 remove photo widgets for contacts and leads 4ac8347d61 [Legacy] Admin Release Styling Fixes 3336b10790 Suite8 ChangeLog ModalPopup Styling Fixes 8df8ad992c [Legacy] Add close menu label 1dfdf6a005 [Legacy] Add not module selected label b234b8a1fe [Legacy] Add parent type ApiBeanMapper 4def7cdfc6 [Legacy] Fix username display for unauthorized users c9771bd330 [Legacy] DetailView Header Title Overlaps fixes 0a0dd3c2c5 [Legacy] Fix htaccess generation 687d5ea7bd Fix Date Filed for Targets 5f863f4b16 [Legacy] Remove Button Hover Fixes 78672e7a27 [Legacy] Reports footer button removed fixes 4b3a9778e8 [Legacy] Reports Styling Fixes 3ab39b6584 [Legacy] Maps Button Position Fixes e50f76f3fc [Legacy] Add Tab Dashlet Sapcing Fixes d2f6433a06 [Legacy] Dashlet Setting Modal Label Fix & Button Fixes e5137262f7 [Legacy] Activity Stream Post Button Hover color fixes 71d44b7274 [Legacy] Bump version to 8.0.0-rc abafbc280b [Legacy] Remove license from install app strings 43281fae73 Fix ignore system checks valitation feab3f0abf [Legacy] Add install labels b0fc8ac7a6 [Legacy] add new install labels 8fea1b7c7f [Legacy] add install validator class e4f7648e50 [Legacy] Add Label for Subpanel Edit Line Action b8ecc0a37e [Legacy] Dashboard Mobile Styling Fixes 7d427720f5 [Legacy] History Subpanel Button Styling Fixes 63d10c40d6 [Legacy] Workflow Stying Fixes 811ad79455 [Legacy] Convert Lead Styling Fixes 01764542a1 [Legacy] Roles Styling Fixes 7ecc573f0e [Legacy] Admin Modules label font fixes 9f13c91e22 [Legacy] HomePage Mobile Fixes 005d1ac949 update legacy handlers to apply new logic considering - base actions - action resolvers - fix url navigation issue in classic view b3c7a14380 [Legacy] Module framework - move suite 8 module config to legacy 542198ac5c [Legacy] Add support for more metadata on listviewdefs e3c82fc9ea [Legacy] Add Support for all modules with parent css classes f2dd774903 [Legacy] Security Group Styling Fixes b6e5591cc4 [Legacy] Password Management Mobile Fixes 1624fdcfad [Leagcy] Email Settings Fixes e033259dac [Legacy] Products Modules Buttons fixes eae8efde52 [Legacy] OAUTH2 Clients and tokens fixes f90c5f5315 [Legacy] adapt legacy install scripts to work with Suite8 install d099fac028 [Legacy] add labels for S8 Installer 8be5c78c4c [Legacy] Add widget not found label eb4449777b [Legacy] Email Action DropDown Styling Fixes 06aff4ce92 SuiteCRM 7.12.0 Release 1cf315c98b Fix BasicSearchResults hit counter c7458ea520 Update PDF samples for compatibility with new PDF Engine a2a392f6d3 Update Reports PDF for compatibility with new PDF Engine 575561903b Update PDF Engines for backward compatibility 3ed5326ca1 Deprecate TCPDF b6c4a4941f Fix TCPDF image scale d6c47de2f5 Fix TCPDF filename 412fd0d006 Add optional malicious file scanner f88149fcfe Feature: Allow configuring the Calendar name for the Google Sync via the config. ae836af690 Fix SearchFormView visible options 5f3545193f Update workflow acceptance test 7c54f0fbc4 SuiteCRM 7.12.0-RC Release 0159e0cd86 Remove unused currency config entries 1c49d879ad Default new MySQL based installs to use utf8mb4 dee7ba0594 Clean up search setting b9b6aeae3a Cleanup old CSS files ed59f5f6d9 Add missing admin icons 732e84c6a3 Move Workflow to default as admin function 60dce30854 Update admin panel to improve grouping 6f7524b46a Fix filepath for mPDF class cdab640886 Add default Engines f79cc55782 Remove MPDFEngine Test 77d38a259d Add check for MPDF class 59261aac8d Remove PDF_Lib 49fb8525a0 Implement TCPDF git-subtree-dir: public/legacy git-subtree-split: 23d711b70345ccf90d7508ce6aa5ddc8fd3dc4dd
2021-11-05 15:19:00 +00:00
'anti_malware_scanners' => [
'SuiteCRM\Utility\AntiMalware\Providers\ClamTCP' => [
'name' => 'ClamAntiVirus TCP',
'support_page' => 'https://www.clamav.net/',
'enabled' => false,
'path' => null,
'options' => [
'ip' => '127.0.0.1',
'port' => 3310,
'type' => 'local'
],
],
'SuiteCRM\Utility\AntiMalware\Providers\Sophos' => [
'name' => 'Sophos Anti Virus (Linux)',
'support_page' => 'https://www.sophos.com/en-us/products/free-tools/sophos-antivirus-for-linux.aspx',
'enabled' => false,
'path' => '/opt/sophos-av/bin/savscan',
'options' => '-ss'
]
],
'export_delimiter' => ',',
'export_excel_compatible' => false,
'cache_dir' => 'cache/',
'calculate_response_time' => true,
'create_default_user' => false,
'chartEngine' => 'Jit',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'date_formats' => [
'Y-m-d' => '2010-12-23',
'm-d-Y' => '12-23-2010',
'd-m-Y' => '23-12-2010',
'Y/m/d' => '2010/12/23',
'm/d/Y' => '12/23/2010',
'd/m/Y' => '23/12/2010',
'Y.m.d' => '2010.12.23',
'd.m.Y' => '23.12.2010',
'm.d.Y' => '12.23.2010',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'name_formats' => [
's f l' => 's f l',
'f l' => 'f l',
's l' => 's l',
'l, s f' => 'l, s f',
'l, f' => 'l, f',
's l, f' => 's l, f',
'l s f' => 'l s f',
'l f s' => 'l f s',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'dbconfigoption' => [
'persistent' => true,
'autofree' => false,
'debug' => 0,
'ssl' => false,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'default_action' => 'index',
'default_charset' => return_session_value_or_default('default_charset', 'UTF-8'),
'default_currency_name' => return_session_value_or_default('default_currency_name', 'US Dollar'),
'default_currency_symbol' => return_session_value_or_default('default_currency_symbol', '$'),
'default_currency_iso4217' => return_session_value_or_default('default_currency_iso4217', 'USD'),
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'default_currency_significant_digits' => return_session_value_or_default('default_currency_significant_digits',
2),
'default_number_grouping_seperator' => return_session_value_or_default('default_number_grouping_seperator',
','),
'default_decimal_seperator' => return_session_value_or_default('default_decimal_seperator', '.'),
'default_date_format' => 'm/d/Y',
'default_locale_name_format' => 's f l',
'default_export_charset' => 'UTF-8',
'default_language' => return_session_value_or_default('default_language', 'en_us'),
'default_module' => 'Home',
'default_password' => '',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'default_permissions' => [
'dir_mode' => 02770,
'file_mode' => 0755,
'user' => '',
'group' => '',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'default_theme' => return_session_value_or_default('site_default_theme', 'SuiteP'),
'default_time_format' => 'h:ia',
'default_user_is_admin' => false,
'default_user_name' => '',
'disable_export' => false,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'disable_persistent_connections' => return_session_value_or_default('disable_persistent_connections', false),
'default_module_favicon' => false,
'dashlet_auto_refresh_min' => 30,
'stack_trace_errors' => false,
'developerMode' => false,
'stackTrace' => false,
'display_email_template_variable_chooser' => false,
'display_inbound_email_buttons' => false,
'dump_slow_queries' => false,
'email_address_separator' => ',', // use RFC2368 spec unless we have a noncompliant email client
'email_default_editor' => 'html',
'email_default_client' => 'sugar',
'email_default_delete_attachments' => true,
'email_warning_notifications' => true,
'email_enable_auto_send_opt_in' => false,
'email_enable_confirm_opt_in' => SugarEmailAddress::COI_STAT_DISABLED,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'filter_module_fields' => [
'Users' => [
'show_on_employees',
'portal_only',
'is_group',
'system_generated_password',
'external_auth_only',
'sugar_login',
'authenticate_id',
'pwd_last_changed',
'is_admin',
'user_name',
'user_hash',
'password',
'last_login',
'oauth_tokens',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'Employees' => [
'show_on_employees',
'portal_only',
'is_group',
'system_generated_password',
'external_auth_only',
'sugar_login',
'authenticate_id',
'pwd_last_changed',
'is_admin',
'user_name',
'user_hash',
'password',
'last_login',
'oauth_tokens',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
]
],
'google_auth_json' => '',
'history_max_viewed' => 50,
'installer_locked' => true,
'import_max_records_per_file' => 100,
'import_max_records_total_limit' => '',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'languages' => ['en_us' => 'English (US)'],
'large_scale_test' => false,
'list_max_entries_per_page' => 20,
'list_max_entries_per_subpanel' => 10,
'lock_default_user_name' => false,
'log_memory_usage' => false,
'oauth2_encryption_key' => base64_encode(random_bytes(32)),
'portal_view' => 'single_user',
'pdf' => [
'defaultEngine' => 'TCPDFEngine'
],
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'resource_management' => [
'special_query_limit' => 50000,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'special_query_modules' => ['AOR_Reports', 'Export', 'Import', 'Administration', 'Sync'],
'default_limit' => 1000,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'require_accounts' => true,
'rss_cache_time' => return_session_value_or_default('rss_cache_time', '10800'),
'save_query' => 'all',
'showDetailData' => true, // if true, read-only ACL fields will still appear on EditViews as non-editable
'showThemePicker' => true,
'slow_query_time_msec' => '100',
'sugarbeet' => true,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'time_formats' => [
'H:i' => '23:00',
'h:ia' => '11:00pm',
'h:iA' => '11:00PM',
'h:i a' => '11:00 pm',
'h:i A' => '11:00 PM',
'H.i' => '23.00',
'h.ia' => '11.00pm',
'h.iA' => '11.00PM',
'h.i a' => '11.00 pm',
'h.i A' => '11.00 PM',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'tracker_max_display_length' => 15,
'translation_string_prefix' => return_session_value_or_default('translation_string_prefix', false),
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'upload_badext' => [
'php',
'php3',
'php4',
'php5',
'php6',
'php7',
'php8',
'pl',
'cgi',
'py',
'asp',
'cfm',
'js',
'vbs',
'html',
'htm',
'phtml',
'phar',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
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
'valid_image_ext' => [
'gif',
'png',
'jpg',
'jpeg',
'svg',
'bmp'
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
],
'allowed_preview' => [
'pdf',
'gif',
'png',
'jpeg',
'jpg'
],
'upload_maxsize' => 30000000,
'import_max_execution_time' => 3600,
// 'use_php_code_json' => returnPhpJsonStatus(),
'verify_client_ip' => true,
'js_custom_version' => '',
'js_lang_version' => 1,
'lead_conv_activity_opt' => 'donothing',
'lock_homepage' => false,
'lock_subpanels' => false,
'max_dashlets_homepage' => '15',
'default_max_tabs' => 8,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'dashlet_display_row_options' => ['1', '3', '5', '10'],
'default_subpanel_tabs' => true,
'default_subpanel_links' => false,
'default_swap_last_viewed' => false,
'default_swap_shortcuts' => false,
'default_navigation_paradigm' => 'm',
'admin_access_control' => false,
'use_common_ml_dir' => false,
'common_ml_dir' => '',
'vcal_time' => '2',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'calendar' => [
'default_view' => 'week',
'show_calls_by_default' => true,
'show_tasks_by_default' => true,
'show_completed_by_default' => true,
'editview_width' => 990,
'editview_height' => 485,
'day_timestep' => 15,
'week_timestep' => 30,
'items_draggable' => true,
'items_resizable' => true,
'enable_repeat' => true,
'max_repeat_count' => 1000,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'passwordsetting' => empty($passwordsetting) ? [
'SystemGeneratedPasswordON' => '',
'generatepasswordtmpl' => '',
'lostpasswordtmpl' => '',
'factoremailtmpl' => '',
'forgotpasswordON' => false,
'linkexpiration' => '1',
'linkexpirationtime' => '30',
'linkexpirationtype' => '1',
'systexpiration' => '1',
'systexpirationtime' => '7',
'systexpirationtype' => '1',
'systexpirationlogin' => '',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
] : $passwordsetting,
'use_real_names' => true,
'search_wildcard_infront' => false,
'search_wildcard_char' => '%',
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
'jobs' => [
'min_retry_interval' => 30, // 30 seconds minimal job retry
'max_retries' => 5, // how many times to retry the job
'timeout' => 86400, // how long a job may spend as running before being force-failed
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'cron' => [
'max_cron_jobs' => 10, // max jobs per cron schedule run
'max_cron_runtime' => 30, // max runtime for cron jobs
'min_cron_interval' => 30, // minimal interval between cron jobs
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
],
'strict_id_validation' => false,
'id_validation_pattern' => '/^[a-zA-Z0-9_-]*$/i',
'session_gc' => [
'enable' => true,
'gc_probability' => 1,
'gc_divisor' => 100,
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
],
'legacy_email_behaviour' => false,
Squashed 'public/legacy/' changes from f058c4c306..2aaee3c558 2aaee3c558 Implement PDFEngine bf78e964fd Fix PDF_Lib constructors cfe6e2a1e0 Replace deprecated fzaninotto/faker with fakerphp/faker 7f8d18b8fb Move test namespaces into autoload-dev 1778603d07 Upgrade nesbot/carbon to v2.x 171ef65335 Update Travis config to use composer v2.x 7a4d0007af Upgrade composer-merge-plugin to v2.x 0461d8f4ba Fix PHPUnit 9 deprecations and warnings 15906ef6a5 Fix test case class not matching filename deprecation warnings b92a9dcdbd Replace abandoned leafo/scssphp with scssphp/scssphp 9a0fea7c9e Upgrade Robo to v3.x 5462b82a22 Update composer.json 77d3575052 Fix missing default config values 1d4a0e7421 Consolidate global search settings e75e0f4add Remove duplicate "Global Search" link in the adminpanel 1bfa51fa73 Implement search engine selection d5a33281e1 Deprecate UnifiedSearchAdvanced fcce848d4c Unify search engines c8c02c5398 Remove new/legacy search engine labels e34cad759d Add codeception 4.1.x dependencies to composer cc3a504997 Migrate PHPUnit schema for 9.5.x ce5a63be20 Upgrade PHPUnit to 9.5.x f52dc24e61 Remove codeception 420303758e Fix tests remove incompletes c93e654768 Fix tests deprecated asserts 4feebbab22 Fix tests define return type hints abd327d267 Update test namespaces for PSR-4/PSR-8 f464e2a829 Fix tests redundant noinspection 5b74cc4d2c Fix tests misordered assert arguments 03a83246f4 Fix tests use appropriate asserts a04c048c18 Fix tests one-time use variables 683533e2b6 Fix tests method invocations 7e44ec9583 Update PHPUnit schema 2181ad7f3d Update Travis config to remove PHP 7.2 480a87c03a Update minimum required PHP to v7.3.0 200c6deb61 Update composer.lock git-subtree-dir: public/legacy git-subtree-split: 2aaee3c5581c025abca1114276e2d20c709f2812
2021-07-29 16:52:11 +01:00
];
if (!is_object($locale)) {
$locale = new Localization();
}
Squashed 'public/legacy/' changes from ace35f6573..23d711b703 23d711b703 [Legacy] update install language label 58fe59c8da [Legacy] Dashlet Settings Modal Styling Fixes b880c34877 [Legacy] User Profile Mobile Styling Fixes ab33cfc7cf [Legacy] Add acls calculation on legacy list data calls 220bf5b8be [Legacy] Get list of visible modules from module name mapper a7a0754a2d Fix valid module check 020a5dcb1b [Legacy] add widget acl metadata - update acl config for top widget 89e8f7c0f2 [Legacy] Subpanels Action Button Styling Fixes 6c287af813 remove photo widgets for contacts and leads 4ac8347d61 [Legacy] Admin Release Styling Fixes 3336b10790 Suite8 ChangeLog ModalPopup Styling Fixes 8df8ad992c [Legacy] Add close menu label 1dfdf6a005 [Legacy] Add not module selected label b234b8a1fe [Legacy] Add parent type ApiBeanMapper 4def7cdfc6 [Legacy] Fix username display for unauthorized users c9771bd330 [Legacy] DetailView Header Title Overlaps fixes 0a0dd3c2c5 [Legacy] Fix htaccess generation 687d5ea7bd Fix Date Filed for Targets 5f863f4b16 [Legacy] Remove Button Hover Fixes 78672e7a27 [Legacy] Reports footer button removed fixes 4b3a9778e8 [Legacy] Reports Styling Fixes 3ab39b6584 [Legacy] Maps Button Position Fixes e50f76f3fc [Legacy] Add Tab Dashlet Sapcing Fixes d2f6433a06 [Legacy] Dashlet Setting Modal Label Fix & Button Fixes e5137262f7 [Legacy] Activity Stream Post Button Hover color fixes 71d44b7274 [Legacy] Bump version to 8.0.0-rc abafbc280b [Legacy] Remove license from install app strings 43281fae73 Fix ignore system checks valitation feab3f0abf [Legacy] Add install labels b0fc8ac7a6 [Legacy] add new install labels 8fea1b7c7f [Legacy] add install validator class e4f7648e50 [Legacy] Add Label for Subpanel Edit Line Action b8ecc0a37e [Legacy] Dashboard Mobile Styling Fixes 7d427720f5 [Legacy] History Subpanel Button Styling Fixes 63d10c40d6 [Legacy] Workflow Stying Fixes 811ad79455 [Legacy] Convert Lead Styling Fixes 01764542a1 [Legacy] Roles Styling Fixes 7ecc573f0e [Legacy] Admin Modules label font fixes 9f13c91e22 [Legacy] HomePage Mobile Fixes 005d1ac949 update legacy handlers to apply new logic considering - base actions - action resolvers - fix url navigation issue in classic view b3c7a14380 [Legacy] Module framework - move suite 8 module config to legacy 542198ac5c [Legacy] Add support for more metadata on listviewdefs e3c82fc9ea [Legacy] Add Support for all modules with parent css classes f2dd774903 [Legacy] Security Group Styling Fixes b6e5591cc4 [Legacy] Password Management Mobile Fixes 1624fdcfad [Leagcy] Email Settings Fixes e033259dac [Legacy] Products Modules Buttons fixes eae8efde52 [Legacy] OAUTH2 Clients and tokens fixes f90c5f5315 [Legacy] adapt legacy install scripts to work with Suite8 install d099fac028 [Legacy] add labels for S8 Installer 8be5c78c4c [Legacy] Add widget not found label eb4449777b [Legacy] Email Action DropDown Styling Fixes 06aff4ce92 SuiteCRM 7.12.0 Release 1cf315c98b Fix BasicSearchResults hit counter c7458ea520 Update PDF samples for compatibility with new PDF Engine a2a392f6d3 Update Reports PDF for compatibility with new PDF Engine 575561903b Update PDF Engines for backward compatibility 3ed5326ca1 Deprecate TCPDF b6c4a4941f Fix TCPDF image scale d6c47de2f5 Fix TCPDF filename 412fd0d006 Add optional malicious file scanner f88149fcfe Feature: Allow configuring the Calendar name for the Google Sync via the config. ae836af690 Fix SearchFormView visible options 5f3545193f Update workflow acceptance test 7c54f0fbc4 SuiteCRM 7.12.0-RC Release 0159e0cd86 Remove unused currency config entries 1c49d879ad Default new MySQL based installs to use utf8mb4 dee7ba0594 Clean up search setting b9b6aeae3a Cleanup old CSS files ed59f5f6d9 Add missing admin icons 732e84c6a3 Move Workflow to default as admin function 60dce30854 Update admin panel to improve grouping 6f7524b46a Fix filepath for mPDF class cdab640886 Add default Engines f79cc55782 Remove MPDFEngine Test 77d38a259d Add check for MPDF class 59261aac8d Remove PDF_Lib 49fb8525a0 Implement TCPDF git-subtree-dir: public/legacy git-subtree-split: 23d711b70345ccf90d7508ce6aa5ddc8fd3dc4dd
2021-11-05 15:19:00 +00:00
$sugar_config_defaults = sugarArrayMerge($locale->getLocaleConfigDefaults(), $sugar_config_defaults);
return $sugar_config_defaults;
}
/**
* Gets the username of the user under which the PHP script is currently running
* Notes:
* - works on Windows and Linux, tries a variety of methods to accommodate different systems and hosting restrictions
* - on Windows, return full username in form DOMAIN\USER
* - returns empty string if failed
*/
function getRunningUser()
{
// works on Windows and Linux, but might return null on systems that include "exec" in
// disabled_functions in php.ini (typical in shared hosting)
$runningUser = exec('whoami');
if ($runningUser == null) { // matches null, false and ""
if (is_windows()) {
$runningUser = getenv('USERDOMAIN').'\\'.getenv('USERNAME');
} elseif (function_exists('posix_getpwuid') && function_exists('posix_geteuid')) {
$usr = posix_getpwuid(posix_geteuid());
$runningUser = $usr['name'];
}
}
return ($runningUser == null) ? '' : $runningUser;
}
/**
* Adds a username to the allowed_cron_users array in config.php
* Notes:
* - this is Linux only, does nothing on Windows
* - does not repeat the user if he is already there
* - creates the sub-array if previously unexisting
* - special treatment for user 'root' to require manual intervention from an admin to allow
* @param string $addUser the name of the user to add [usually obtained with getRunningUser()]
*/
function addCronAllowedUser($addUser)
{
global $sugar_config;
if (is_windows() || !isset($sugar_config) || !isset($addUser) || ($addUser == '')) {
return;
}
if (!array_key_exists('cron', $sugar_config)) {
$sugar_config['cron'] = array();
}
if (!array_key_exists('allowed_cron_users', $sugar_config['cron'])) {
$sugar_config['cron']['allowed_cron_users'] = array();
}
if (!in_array($addUser, $sugar_config['cron']['allowed_cron_users'])) {
if ($addUser == 'root') {
$addUser = 'root_REMOVE_THIS_NOTICE_IF_YOU_REALLY_WANT_TO_ALLOW_ROOT';
if (!in_array($addUser, $sugar_config['cron']['allowed_cron_users'])) {
$sugar_config['cron']['allowed_cron_users'][] = $addUser;
$GLOBALS['log']->error("You're using 'root' as the web-server user. This should be avoided " .
"for security reasons. Review allowed_cron_users configuration in config.php.");
}
} else {
$sugar_config['cron']['allowed_cron_users'][] = $addUser;
$GLOBALS['log']->info("Web server user $addUser added to allowed_cron_users in config.php.");
}
}
ksort($sugar_config);
write_array_to_file('sugar_config', $sugar_config, 'config.php');
}
/**
* @deprecated use SugarView::getMenu() instead
*/
function load_menu($path)
{
global $module_menu;
if (file_exists($path . 'Menu.php')) {
require $path . 'Menu.php';
}
if (file_exists('custom/' . $path . 'Ext/Menus/menu.ext.php')) {
require 'custom/' . $path . 'Ext/Menus/menu.ext.php';
}
if (file_exists('custom/application/Ext/Menus/menu.ext.php')) {
require 'custom/application/Ext/Menus/menu.ext.php';
}
return $module_menu;
}
/**
* get_notify_template_file
* This function will return the location of the email notifications template to use.
*
* @return string relative file path to email notifications template file
*/
function get_notify_template_file($language)
{
/*
* Order of operation:
* 1) custom version of specified language
* 2) stock version of specified language
* 3) custom version of en_us template
* 4) stock en_us template
*/
// set $file to the base code template so it's set if none of the conditions pass
$file = 'include/language/en_us.notify_template.html';
if (file_exists("custom/include/language/{$language}.notify_template.html")) {
$file = "custom/include/language/{$language}.notify_template.html";
} elseif (file_exists("include/language/{$language}.notify_template.html")) {
$file = "include/language/{$language}.notify_template.html";
} elseif (file_exists('custom/include/language/en_us.notify_template.html')) {
$file = 'custom/include/language/en_us.notify_template.html';
}
return $file;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function sugar_config_union($default, $override)
{
// a little different then array_merge and array_merge_recursive. we want
// the second array to override the first array if the same value exists,
// otherwise merge the unique keys. it handles arrays of arrays recursively
// might be suitable for a generic array_union
if (!is_array($override)) {
$override = array();
}
foreach ($default as $key => $value) {
if (!array_key_exists($key, $override)) {
$override[$key] = $value;
} elseif (is_array($key)) {
$override[$key] = sugar_config_union($value, $override[$key]);
}
}
return $override;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function make_not_writable($file)
{
// Returns true if the given file/dir has been made not writable
$ret_val = false;
if (is_file($file) || is_dir($file)) {
if (!is_writable($file)) {
$ret_val = true;
} else {
$original_fileperms = fileperms($file);
// take away writable permissions
$new_fileperms = $original_fileperms & ~0x0092;
@sugar_chmod($file, $new_fileperms);
if (!is_writable($file)) {
$ret_val = true;
}
}
}
return $ret_val;
}
/**
* This function returns the name of the person.
* It currently returns "first last". It should not put the space if either name is not available.
* It should not return errors if either name is not available.
* If no names are present, it will return ""
*
* @deprecated This function is unused and will be removed in a future release.
*
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function return_name($row, $first_column, $last_column)
{
$first_name = '';
$last_name = '';
$full_name = '';
if (isset($row[$first_column])) {
$first_name = stripslashes($row[$first_column]);
}
if (isset($row[$last_column])) {
$last_name = stripslashes($row[$last_column]);
}
$full_name = $first_name;
// If we have a first name and we have a last name
if ($full_name != '' && $last_name != '') {
// append a space, then the last name
$full_name .= ' ' . $last_name;
} // If we have no first name, but we have a last name
elseif ($last_name != '') {
// append the last name without the space.
$full_name .= $last_name;
}
return $full_name;
}
function get_languages()
{
global $sugar_config;
$lang = $sugar_config['languages'];
if (!empty($sugar_config['disabled_languages'])) {
foreach (explode(',', $sugar_config['disabled_languages']) as $disable) {
unset($lang[$disable]);
}
}
return $lang;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function get_all_languages()
{
global $sugar_config;
return $sugar_config['languages'];
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function get_language_display($key)
{
global $sugar_config;
return $sugar_config['languages'][$key];
}
/**
* Sets the currently active language.
* @param $language
* @return void
* @description Currently used by Suite8 - Front End - to translate
* the legacy language into the language selected by user
*/
function set_current_language(string $language): void
{
if (!empty($language)) {
$_SESSION['authenticated_user_language'] = $language;
}
}
/**
* Returns the currently active language string.
*
* @return string
*/
function get_current_language()
{
global $sugar_config;
if (!empty($_SESSION['authenticated_user_language'])) {
return $_SESSION['authenticated_user_language'];
} else {
return $sugar_config['default_language'];
}
}
function get_assigned_user_name($assigned_user_id, $is_group = '')
{
static $saved_user_list = null;
if (empty($saved_user_list)) {
$saved_user_list = get_user_array(false, '', '', false, null, $is_group);
}
if (isset($saved_user_list[$assigned_user_id])) {
return $saved_user_list[$assigned_user_id];
}
return '';
}
/**
* retrieves the user_name column value (login).
*
* @param string id GUID of user
*
* @return string
*/
function get_user_name($id)
{
$db = DBManagerFactory::getInstance();
if ($db === null) {
$db = DBManagerFactory::getInstance();
}
$idQuoted = $db->quoted($id);
$q = "SELECT user_name FROM users WHERE id=$idQuoted";
$r = $db->query($q);
$a = $db->fetchByAssoc($r);
return (empty($a)) ? '' : $a['user_name'];
}
Squashed 'public/legacy/' changes from 1b30d1900a..a403361326 a403361326 SuiteCRM 7.12.7 Release 8058ba3262 Fix #9736 - Elasticsearch still running repair in not enabled 39690e8921 Fix #9735 - Add elasticsearch option to admin menu 0ded1d1069 Fix #9258 - Fix for Notes module advanced date-modified search b0654ef913 Fix #9267 - Fix for popup &email reminder options ecb56747d0 Fix #9511: Case Updates Thread now displays updates from 'Unknown' sources. a323740456 Fix #9314 - Respect the subpanel `flat` flag 4f31f9e29c Fix #9686 - Draft Email Opens in Draft View From History Subpanel 6bec25a6d4 Fix #9421 - Fix ElasticSearch tests 42fbbcef04 Fix #9421 - Elastic search logic hooks fail to index properly 317ba16295 Fix #9593 - Fix elasticsearch indexing unnecessarily during QR+R. - Update config defaults to include allowed_preview value. 9549950373 Fix #9599 - Fix missing pagination on Elasticsearch results page f0f08a2724 Fix #9627 - Studio changes not picked up by CRM when opcache.validate_timestamps=0 e8964780a0 Fix #9660 - Copy only select files to custom/working directory c613905bc6 Fix #9663 - Smaller screens automatically collapse non-subpanel panels 27bc6ca1a7 Fix #9547 - Workflow actions not saving correctly for certain field types. 8df903d9c9 Fix #9163 - Outbound Email Accounts to use correct fields by default. 48b70d0018 Fix #9561 - Fail state was not handled when missing listviewdefs file. 0e021e7ac6 Fix #9609 - Change the logger level in setStream and getStream functions to prevent excessive log errors 729f3dd510 Fix #9569 - Fix issue with missing dropdown image 5ccfbf42f1 Fix #9545 - Fix Workflow tests 541a96e499 Fix #9545 - Quote potential reserved name e079865b99 Fix #9551 - Fix typo in fix b4c9b39b1a Fix #9551 - Update date period to include the users TZ. 92aef5b5a2 Fix #9594 - Don't convert nl to BR for contact updates as these contain HTML and come from emails in most cases. ad7c3017f2 Fix #9634 Add check on cron schedule to show the basic view on first load 5a20f5a5fe Fix #9636 Add styling of email recipient button git-subtree-dir: public/legacy git-subtree-split: a40336132686f0d5094a13cea9de3995c477c70b
2022-08-11 13:01:14 +00:00
/**
* Get currently authenticated user
* @return User
*/
function get_authenticated_user(): ?User {
$authenticatedUserId = $_SESSION['authenticated_user_id'] ?? '';
if (empty($authenticatedUserId)){
return null;
}
/** @var User $authenticatedUser */
$authenticatedUser = BeanFactory::getBean('Users', $authenticatedUserId);
if (empty($authenticatedUser)) {
return null;
}
return $authenticatedUser;
}
//TODO Update to use global cache
/**
* get_user_array.
*
* This is a helper function to return an Array of users depending on the parameters passed into the function.
* This function uses the get_register_value function by default to use a caching layer where supported.
* This function has been updated return the array sorted by user preference of name display (bug 62712)
*
* @param bool $add_blank Boolean value to add a blank entry to the array results, true by default
* @param string $status String value indicating the status to filter users by, "Active" by default
* @param string $user_id String value to specify a particular user id value (searches the id column of users table), blank by default
* @param bool $use_real_name Boolean value indicating whether or not results should include the full name or just user_name, false by default
* @param string $user_name_filter String value indicating the user_name filter (searches the user_name column of users table) to optionally search with, blank by default
* @param string $portal_filter String query filter for portal users (defaults to searching non-portal users), change to blank if you wish to search for all users including portal users
* @param bool $from_cache Boolean value indicating whether or not to use the get_register_value function for caching, true by default
*
* @return array Array of users matching the filter criteria that may be from cache (if similar search was previously run)
*/
function get_user_array($add_blank = true, $status = 'Active', $user_id = '', $use_real_name = false, $user_name_filter = '', $portal_filter = ' AND portal_only=0 ', $from_cache = true)
{
global $locale, $sugar_config, $current_user;
if (empty($locale)) {
$locale = new Localization();
}
if ($from_cache) {
$key_name = $add_blank . $status . $user_id . $use_real_name . $user_name_filter . $portal_filter;
$user_array = get_register_value('user_array', $key_name);
}
if (empty($user_array)) {
$db = DBManagerFactory::getInstance();
$temp_result = array();
// Including deleted users for now.
if (empty($status)) {
$query = 'SELECT id, first_name, last_name, user_name FROM users WHERE 1=1' . $portal_filter;
} else {
$query = "SELECT id, first_name, last_name, user_name from users WHERE status='$status'" . $portal_filter;
}
/* BEGIN - SECURITY GROUPS */
global $current_user, $sugar_config;
if (!is_admin($current_user) && isset($sugar_config['securitysuite_filter_user_list']) && $sugar_config['securitysuite_filter_user_list'] == true && (empty($_REQUEST['module']) || $_REQUEST['module'] != 'Home') && (empty($_REQUEST['action']) || $_REQUEST['action'] != 'DynamicAction')
) {
require_once 'modules/SecurityGroups/SecurityGroup.php';
global $current_user;
$group_where = SecurityGroup::getGroupUsersWhere($current_user->id);
$query .= ' AND (' . $group_where . ') ';
}
/* END - SECURITY GROUPS */
if (!empty($user_name_filter)) {
$user_name_filter = $db->quote($user_name_filter);
$query .= " AND user_name LIKE '$user_name_filter%' ";
}
if (!empty($user_id)) {
$query .= " OR id='{$user_id}'";
}
//get the user preference for name formatting, to be used in order by
$order_by_string = ' user_name ASC ';
if (!empty($current_user) && !empty($current_user->id)) {
$formatString = $current_user->getPreference('default_locale_name_format');
//create the order by string based on position of first and last name in format string
$order_by_string = ' user_name ASC ';
$firstNamePos = strpos($formatString, 'f');
$lastNamePos = strpos($formatString, 'l');
if ($firstNamePos !== false || $lastNamePos !== false) {
//its possible for first name to be skipped, check for this
if ($firstNamePos === false) {
$order_by_string = 'last_name ASC';
} else {
$order_by_string = ($lastNamePos < $firstNamePos) ? 'last_name, first_name ASC' : 'first_name, last_name ASC';
}
}
}
$query = $query . ' ORDER BY ' . $order_by_string;
$GLOBALS['log']->debug("get_user_array query: $query");
$result = $db->query($query, true, 'Error filling in user array: ');
if ($add_blank == true) {
// Add in a blank row
$temp_result[''] = '';
}
// Get the id and the name.
while ($row = $db->fetchByAssoc($result)) {
if ($use_real_name == true || showFullName()) {
if (isset($row['last_name'])) { // cn: we will ALWAYS have both first_name and last_name (empty value if blank in db)
$temp_result[$row['id']] = $locale->getLocaleFormattedName($row['first_name'], $row['last_name']);
} else {
$temp_result[$row['id']] = $row['user_name'];
}
} else {
$temp_result[$row['id']] = $row['user_name'];
}
}
$user_array = $temp_result;
if ($from_cache) {
set_register_value('user_array', $key_name, $temp_result);
}
}
return $user_array;
}
/**
* uses a different query to return a list of users than get_user_array()
* Used from QuickSearch.php.
*
* @param args string where clause entry
*
* @return array Array of Users' details that match passed criteria
*/
function getUserArrayFromFullName($args, $hide_portal_users = false)
{
global $locale;
$db = DBManagerFactory::getInstance();
// jmorais@dri - Bug #51411
//
// Refactor the code responsible for parsing supplied $args, this way we
// ensure that if $args has at least one space (after trim), the $inClause
// will be composed by several clauses ($inClauses) inside parenthesis.
//
// Ensuring that operator precedence is respected, and avoiding
// inactive/deleted users to be retrieved.
//
$args = trim($args);
if (strpos($args, ' ')) {
$inClauses = array();
$argArray = explode(' ', $args);
foreach ($argArray as $arg) {
$arg = $db->quote($arg);
$inClauses[] = "(first_name LIKE '{$arg}%' OR last_name LIKE '{$arg}%')";
}
$inClause = '(' . implode('OR ', $inClauses) . ')';
} else {
$args = $db->quote($args);
$inClause = "(first_name LIKE '{$args}%' OR last_name LIKE '{$args}%')";
}
// ~jmorais@dri
$query = "SELECT id, first_name, last_name, user_name FROM users WHERE status='Active' AND deleted=0 AND ";
if ($hide_portal_users) {
$query .= ' portal_only=0 AND ';
}
$query .= $inClause;
/* BEGIN - SECURITY GROUPS */
global $current_user, $sugar_config;
if (!is_admin($current_user) && isset($sugar_config['securitysuite_filter_user_list']) && $sugar_config['securitysuite_filter_user_list'] == true
) {
require_once 'modules/SecurityGroups/SecurityGroup.php';
global $current_user;
$group_where = SecurityGroup::getGroupUsersWhere($current_user->id);
$query .= ' AND (' . $group_where . ') ';
}
/* END - SECURITY GROUPS */
$query .= ' ORDER BY last_name ASC';
$r = $db->query($query);
$ret = array();
while ($a = $db->fetchByAssoc($r)) {
$ret[$a['id']] = $locale->getLocaleFormattedName($a['first_name'], $a['last_name']);
}
return $ret;
}
/**
* based on user pref then system pref.
*/
function showFullName()
{
global $sugar_config;
global $current_user;
static $showFullName = null;
if (is_null($showFullName)) {
$sysPref = !empty($sugar_config['use_real_names']);
$userPref = (is_object($current_user)) ? $current_user->getPreference('use_real_names') : null;
if ($userPref != null) {
$showFullName = ($userPref == 'on');
} else {
$showFullName = $sysPref;
}
}
return $showFullName;
}
function clean($string, $maxLength)
{
$string = substr($string, 0, $maxLength);
return escapeshellcmd($string);
}
/**
* Copy the specified request variable to the member variable of the specified object.
* Do no copy if the member variable is already set.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function safe_map($request_var, &$focus, $always_copy = false)
{
safe_map_named($request_var, $focus, $request_var, $always_copy);
}
/**
* Copy the specified request variable to the member variable of the specified object.
* Do no copy if the member variable is already set.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function safe_map_named($request_var, &$focus, $member_var, $always_copy)
{
if (isset($_REQUEST[$request_var]) && ($always_copy || is_null($focus->$member_var))) {
$GLOBALS['log']->debug("safe map named called assigning '{$_REQUEST[$request_var]}' to $member_var");
$focus->$member_var = $_REQUEST[$request_var];
}
}
/**
* This function retrieves an application language file and returns the array of strings included in the $app_list_strings var.
*
* @param string $language specific language to load
*
* @return array lang strings
*/
function return_app_list_strings_language($language)
{
global $app_list_strings;
global $sugar_config;
$cache_key = 'app_list_strings.' . $language;
// Check for cached value
$cache_entry = sugar_cache_retrieve($cache_key);
if (!empty($cache_entry)) {
if (!empty($sugar_config['disable_translations'])) {
return disable_translations($cache_entry);
}
return $cache_entry;
}
$default_language = isset($sugar_config['default_language']) ? $sugar_config['default_language'] : 'en_us';
$temp_app_list_strings = $app_list_strings;
$langs = array();
if ($language != 'en_us') {
$langs[] = 'en_us';
}
if ($default_language != 'en_us' && $language != $default_language) {
$langs[] = $default_language;
}
$langs[] = $language;
$app_list_strings_array = array();
foreach ($langs as $lang) {
$app_list_strings = array();
if (file_exists("include/language/$lang.lang.php")) {
include "include/language/$lang.lang.php";
$GLOBALS['log']->info("Found language file: $lang.lang.php");
}
if (file_exists("include/language/$lang.lang.override.php")) {
include "include/language/$lang.lang.override.php";
$GLOBALS['log']->info("Found override language file: $lang.lang.override.php");
}
if (file_exists("include/language/$lang.lang.php.override")) {
include "include/language/$lang.lang.php.override";
$GLOBALS['log']->info("Found override language file: $lang.lang.php.override");
}
$app_list_strings_array[] = $app_list_strings;
}
$app_list_strings = array();
foreach ($app_list_strings_array as $app_list_strings_item) {
$app_list_strings = sugarLangArrayMerge($app_list_strings, $app_list_strings_item);
}
foreach ($langs as $lang) {
if (file_exists("custom/application/Ext/Language/$lang.lang.ext.php")) {
$app_list_strings = _mergeCustomAppListStrings("custom/application/Ext/Language/$lang.lang.ext.php", $app_list_strings);
$GLOBALS['log']->info("Found extended language file: $lang.lang.ext.php");
}
if (file_exists("custom/include/language/$lang.lang.php")) {
include "custom/include/language/$lang.lang.php";
$GLOBALS['log']->info("Found custom language file: $lang.lang.php");
}
}
if (!isset($app_list_strings)) {
$GLOBALS['log']->fatal("Unable to load the application language file for the selected language ($language) or the default language ($default_language) or the en_us language");
return;
}
$return_value = $app_list_strings;
$app_list_strings = $temp_app_list_strings;
if (!empty($sugar_config['disable_translations'])) {
$app_list_strings = disable_translations($app_list_strings);
return disable_translations($return_value);
}
sugar_cache_put($cache_key, $return_value);
return $return_value;
}
/**
* The dropdown items in custom language files is $app_list_strings['$key']['$second_key'] = $value not
* $GLOBALS['app_list_strings']['$key'] = $value, so we have to delete the original ones in app_list_strings and relace it with the custom ones.
*
* @param file string the language that you want include,
* @param app_list_strings array the golbal strings
*
* @return array
*/
//jchi 25347
function _mergeCustomAppListStrings($file, $app_list_strings)
{
$app_list_strings_original = $app_list_strings;
unset($app_list_strings);
// FG - bug 45525 - $exemptDropdown array is defined (once) here, not inside the foreach
// This way, language file can add items to save specific standard codelist from being overwritten
$exemptDropdowns = array();
include $file;
if (!isset($app_list_strings) || !is_array($app_list_strings)) {
return $app_list_strings_original;
}
//Bug 25347: We should not merge custom dropdown fields unless they relate to parent fields or the module list.
// FG - bug 45525 - Specific codelists must NOT be overwritten
$exemptDropdowns[] = 'moduleList';
$exemptDropdowns[] = 'moduleListSingular';
$exemptDropdowns = array_merge($exemptDropdowns, getTypeDisplayList());
foreach ($app_list_strings as $key => $value) {
if (!in_array($key, $exemptDropdowns) && array_key_exists($key, $app_list_strings_original)) {
unset($app_list_strings_original[(string)$key]);
}
}
$app_list_strings = sugarArrayMergeRecursive($app_list_strings_original, $app_list_strings);
return $app_list_strings;
}
/**
* This function retrieves an application language file and returns the array of strings included.
*
* @param string $language specific language to load
*
* @return array lang strings
*/
function return_application_language($language)
{
global $app_strings, $sugar_config, $app_list_strings;
$cache_key = 'app_strings.' . $language;
// Check for cached value
$cache_entry = sugar_cache_retrieve($cache_key);
if (!empty($cache_entry)) {
if (!empty($sugar_config['disable_translations'])) {
return disable_translations($cache_entry);
}
return $cache_entry;
}
$temp_app_strings = $app_strings;
$default_language = isset($sugar_config['default_language']) ? $sugar_config['default_language'] : null;
$langs = array();
if ($language != 'en_us') {
$langs[] = 'en_us';
}
if ($default_language != 'en_us' && $language != $default_language) {
$langs[] = $default_language;
}
$langs[] = $language;
$app_strings_array = array();
foreach ($langs as $lang) {
$app_strings = array();
if (file_exists("include/language/$lang.lang.php")) {
include "include/language/$lang.lang.php";
$GLOBALS['log']->info("Found language file: $lang.lang.php");
}
if (file_exists("include/language/$lang.lang.override.php")) {
include "include/language/$lang.lang.override.php";
$GLOBALS['log']->info("Found override language file: $lang.lang.override.php");
}
if (file_exists("include/language/$lang.lang.php.override")) {
include "include/language/$lang.lang.php.override";
$GLOBALS['log']->info("Found override language file: $lang.lang.php.override");
}
if (file_exists("custom/application/Ext/Language/$lang.lang.ext.php")) {
include "custom/application/Ext/Language/$lang.lang.ext.php";
$GLOBALS['log']->info("Found extended language file: $lang.lang.ext.php");
}
if (file_exists("custom/include/language/$lang.lang.php")) {
include "custom/include/language/$lang.lang.php";
$GLOBALS['log']->info("Found custom language file: $lang.lang.php");
}
$app_strings_array[] = $app_strings;
}
$app_strings = array();
foreach ($app_strings_array as $app_strings_item) {
$app_strings = sugarLangArrayMerge($app_strings, $app_strings_item);
}
if (!isset($app_strings)) {
$GLOBALS['log']->fatal('Unable to load the application language strings');
return;
}
// If we are in debug mode for translating, turn on the prefix now!
if (!empty($sugar_config['translation_string_prefix'])) {
foreach ($app_strings as $entry_key => $entry_value) {
$app_strings[$entry_key] = $language . ' ' . $entry_value;
}
}
if (isset($_SESSION['show_deleted'])) {
$app_strings['LBL_DELETE_BUTTON'] = $app_strings['LBL_UNDELETE_BUTTON'];
$app_strings['LBL_DELETE_BUTTON_LABEL'] = $app_strings['LBL_UNDELETE_BUTTON_LABEL'];
$app_strings['LBL_DELETE_BUTTON_TITLE'] = $app_strings['LBL_UNDELETE_BUTTON_TITLE'];
$app_strings['LBL_DELETE'] = $app_strings['LBL_UNDELETE'];
}
$app_strings['LBL_ALT_HOT_KEY'] = get_alt_hot_key();
$return_value = $app_strings;
$app_strings = $temp_app_strings;
if (!empty($sugar_config['disable_translations'])) {
$app_strings = disable_translations($app_strings);
return disable_translations($return_value);
}
sugar_cache_put($cache_key, $return_value);
return $return_value;
}
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
/**
* load install languages
* @param string $language
* @return array
*/
function load_install_language(string $language): array
{
global $current_language;
$default_lang = 'en_us';
$current_language = $language ?? $default_lang;
$mod_strings = [];
if (file_exists(__DIR__ . "/../install/language/{$current_language}.lang.php")) {
include(__DIR__ . "/../install/language/{$current_language}.lang.php");
} else {
include(__DIR__ . "/../install/language/{$default_lang}.lang.php");
}
if ($current_language !== 'en_us') {
$my_mod_strings = $mod_strings;
include(__DIR__ . '/../install/language/en_us.lang.php');
$mod_strings = sugarLangArrayMerge($mod_strings, $my_mod_strings);
}
if(empty($mod_strings) || !is_array($mod_strings)){
return [];
}
return $mod_strings;
}
/**
* This function retrieves a module's language file and returns the array of strings included.
*
* @param string $language specific language to load
* @param string $module module name to load strings for
* @param bool $refresh optional, true if you want to rebuild the language strings
*
* @return array lang strings
*/
function return_module_language($language, $module, $refresh = false)
{
global $mod_strings;
global $sugar_config;
global $currentModule;
// Jenny - Bug 8119: Need to check if $module is not empty
if (empty($module) || !isAllowedModuleName($module)) {
$GLOBALS['log']->warn('Variable module is not in return_module_language, see more info: debug_backtrace()');
return array();
}
if (!$refresh) {
$cache_key = LanguageManager::getLanguageCacheKey($module, $language);
// Check for cached value
$cache_entry = sugar_cache_retrieve($cache_key);
if (!empty($cache_entry) && is_array($cache_entry)) {
if (!empty($sugar_config['disable_translations'])) {
return disable_translations($cache_entry);
}
return $cache_entry;
}
}
// Store the current mod strings for later
$temp_mod_strings = $mod_strings;
$loaded_mod_strings = array();
$language_used = $language;
$default_language = $sugar_config['default_language'];
if (empty($language)) {
$language = $default_language;
}
// Bug 21559 - So we can get all the strings defined in the template, refresh
// the vardefs file if the cached language file doesn't exist.
if (!file_exists(sugar_cached('modules/') . $module . '/language/' . $language . '.lang.php') && !empty($GLOBALS['beanList'][$module])
) {
$object = BeanFactory::getObjectName($module);
VardefManager::refreshVardefs($module, $object);
}
$loaded_mod_strings = LanguageManager::loadModuleLanguage($module, $language, $refresh);
// cn: bug 6048 - merge en_us with requested language
if ($language != $sugar_config['default_language']) {
$loaded_mod_strings = sugarLangArrayMerge(
LanguageManager::loadModuleLanguage($module, $sugar_config['default_language'], $refresh),
$loaded_mod_strings
);
}
// Load in en_us strings by default
if ($language != 'en_us' && $sugar_config['default_language'] != 'en_us') {
$loaded_mod_strings = sugarLangArrayMerge(
LanguageManager::loadModuleLanguage($module, 'en_us', $refresh),
$loaded_mod_strings
);
}
// If we are in debug mode for translating, turn on the prefix now!
if ($sugar_config['translation_string_prefix']) {
foreach ($loaded_mod_strings as $entry_key => $entry_value) {
$loaded_mod_strings[$entry_key] = $language_used . ' ' . $entry_value;
}
}
$return_value = $loaded_mod_strings;
if (!isset($mod_strings)) {
$mod_strings = $return_value;
} else {
$mod_strings = $temp_mod_strings;
}
if (!empty($sugar_config['disable_translations'])) {
$mod_strings = disable_translations($mod_strings);
return disable_translations($return_value);
} else {
$cache_key = LanguageManager::getLanguageCacheKey($module, $language);
sugar_cache_put($cache_key, $return_value);
}
return $return_value;
}
function disable_translations($strings)
{
if (empty($strings)) {
return $strings;
}
$unTranslated = [];
foreach ($strings as $languageKey => $languageValue) {
$unTranslated[$languageKey] = $languageKey;
if (is_array($languageValue)) {
$unTranslated[$languageKey] = disable_translations($languageValue);
}
}
return $unTranslated;
}
/** This function retrieves an application language file and returns the array of strings included in the $mod_list_strings var.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
* If you are using the current language, do not call this function unless you are loading it for the first time */
function return_mod_list_strings_language($language, $module)
{
global $mod_list_strings;
global $sugar_config;
global $currentModule;
$cache_key = 'mod_list_str_lang.' . $language . $module;
// Check for cached value
$cache_entry = sugar_cache_retrieve($cache_key);
if (!empty($cache_entry)) {
return $cache_entry;
}
$language_used = $language;
$temp_mod_list_strings = $mod_list_strings;
$default_language = $sugar_config['default_language'];
if ($currentModule == $module && isset($mod_list_strings) && $mod_list_strings != null) {
return $mod_list_strings;
}
// cn: bug 6351 - include en_us if file langpack not available
// cn: bug 6048 - merge en_us with requested language
include "modules/$module/language/en_us.lang.php";
$en_mod_list_strings = array();
if ($language_used != $default_language) {
$en_mod_list_strings = $mod_list_strings;
}
if (file_exists("modules/$module/language/$language.lang.php")) {
include "modules/$module/language/$language.lang.php";
}
if (file_exists("modules/$module/language/$language.lang.override.php")) {
include "modules/$module/language/$language.lang.override.php";
}
if (file_exists("modules/$module/language/$language.lang.php.override")) {
echo 'Please Change:<br>' . "modules/$module/language/$language.lang.php.override" . '<br>to<br>' . 'Please Change:<br>' . "modules/$module/language/$language.lang.override.php";
include "modules/$module/language/$language.lang.php.override";
}
// cn: bug 6048 - merge en_us with requested language
$mod_list_strings = sugarLangArrayMerge($en_mod_list_strings, $mod_list_strings);
// if we still don't have a language pack, then log an error
if (!isset($mod_list_strings)) {
$GLOBALS['log']->fatal("Unable to load the application list language file for the selected language($language) or the default language($default_language) for module({$module})");
return;
}
$return_value = $mod_list_strings;
$mod_list_strings = $temp_mod_list_strings;
sugar_cache_put($cache_key, $return_value);
return $return_value;
}
/**
* This function retrieves a theme's language file and returns the array of strings included.
*
* @deprecated This function is unused and will be removed in a future release.
*
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function return_theme_language($language, $theme)
{
global $mod_strings, $sugar_config, $current_language;
$language_used = $language;
$default_language = $sugar_config['default_language'];
include SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.php";
if (file_exists(SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.override.php")) {
include SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.override.php";
}
if (file_exists(SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.php.override")) {
echo 'Please Change:<br>' . SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.php.override" . '<br>to<br>' . 'Please Change:<br>' . SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.override.php";
include SugarThemeRegistry::get($theme)->getFilePath() . "/language/$current_language.lang.php.override";
}
if (!isset($theme_strings)) {
$GLOBALS['log']->warn('Unable to find the theme file for language: ' . $language . ' and theme: ' . $theme);
require SugarThemeRegistry::get($theme)->getFilePath() . "/language/$default_language.lang.php";
$language_used = $default_language;
}
if (!isset($theme_strings)) {
$GLOBALS['log']->fatal("Unable to load the theme($theme) language file for the selected language($language) or the default language($default_language)");
return;
}
// If we are in debug mode for translating, turn on the prefix now!
if ($sugar_config['translation_string_prefix']) {
foreach ($theme_strings as $entry_key => $entry_value) {
$theme_strings[$entry_key] = $language_used . ' ' . $entry_value;
}
}
return $theme_strings;
}
/** If the session variable is defined and is not equal to "" then return it. Otherwise, return the default value.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function return_session_value_or_default($varname, $default)
{
if (isset($_SESSION[$varname]) && $_SESSION[$varname] != '') {
return $_SESSION[$varname];
}
return $default;
}
/**
* Creates an array of where restrictions. These are used to construct a where SQL statement on the query
* It looks for the variable in the $_REQUEST array. If it is set and is not "" it will create a where clause out of it.
*
* @param &$where_clauses - The array to append the clause to
* @param $variable_name - The name of the variable to look for an add to the where clause if found
* @param $SQL_name - [Optional] If specified, this is the SQL column name that is used. If not specified, the $variable_name is used as the SQL_name.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function append_where_clause(&$where_clauses, $variable_name, $SQL_name = null)
{
if ($SQL_name == null) {
$SQL_name = $variable_name;
}
if (isset($_REQUEST[$variable_name]) && $_REQUEST[$variable_name] != '') {
array_push($where_clauses, "$SQL_name like '" . DBManagerFactory::getInstance()->quote($_REQUEST[$variable_name]) . "%'");
}
}
/**
* Generate the appropriate SQL based on the where clauses.
*
* @param $where_clauses - An Array of individual where clauses stored as strings
* @returns string where_clause - The final SQL where clause to be executed.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function generate_where_statement($where_clauses)
{
$where = '';
foreach ($where_clauses as $clause) {
if ($where != '') {
$where .= ' and ';
}
$where .= $clause;
}
$GLOBALS['log']->info("Here is the where clause for the list view: $where");
return $where;
}
/**
* determines if a passed string matches the criteria for a Sugar GUID.
*
* @param string $guid
*
* @return bool False on failure
*/
function is_guid($guid)
{
if (strlen($guid) != 36) {
return false;
}
if (preg_match("/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/i", $guid)) {
return true;
}
return true;
}
/**
* A temporary method of generating GUIDs of the correct format for our DB.
*
* @return string contianing a GUID in the format: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
*
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function create_guid()
{
$microTime = microtime();
list($a_dec, $a_sec) = explode(' ', $microTime);
$dec_hex = dechex($a_dec * 1000000);
$sec_hex = dechex($a_sec);
ensure_length($dec_hex, 5);
ensure_length($sec_hex, 6);
$guid = '';
$guid .= $dec_hex;
$guid .= create_guid_section(3);
$guid .= '-';
$guid .= create_guid_section(4);
$guid .= '-';
$guid .= create_guid_section(4);
$guid .= '-';
$guid .= create_guid_section(4);
$guid .= '-';
$guid .= $sec_hex;
$guid .= create_guid_section(6);
return $guid;
}
function create_guid_section($characters)
{
$return = '';
for ($i = 0; $i < $characters; ++$i) {
$return .= dechex(mt_rand(0, 15));
}
return $return;
}
function ensure_length(&$string, $length)
{
$strlen = strlen($string);
if ($strlen < $length) {
$string = str_pad($string, $length, '0');
} elseif ($strlen > $length) {
$string = substr($string, 0, $length);
}
}
function microtime_diff($a, $b)
{
list($a_dec, $a_sec) = explode(' ', $a);
list($b_dec, $b_sec) = explode(' ', $b);
return $b_sec - $a_sec + $b_dec - $a_dec;
}
// check if Studio is displayed.
function displayStudioForCurrentUser()
{
global $current_user;
if ($current_user->isAdmin()) {
return true;
}
return true;
}
function displayWorkflowForCurrentUser()
{
$_SESSION['display_workflow_for_user'] = false;
return false;
}
// return an array with all modules where the user is an admin.
function get_admin_modules_for_user($user)
{
$GLOBALS['log']->deprecated('get_admin_modules_for_user() is deprecated as of 6.2.2 and may disappear in the future, use Users->getDeveloperModules() instead');
if (!isset($user)) {
$modules = array();
return $modules;
}
return $user->getDeveloperModules();
}
function get_workflow_admin_modules_for_user($user)
{
if (isset($_SESSION['get_workflow_admin_modules_for_user'])) {
return $_SESSION['get_workflow_admin_modules_for_user'];
}
global $moduleList;
$workflow_mod_list = array();
foreach ($moduleList as $module) {
$workflow_mod_list[$module] = $module;
}
// This list is taken from teh previous version of workflow_utils.php
$workflow_mod_list['Tasks'] = 'Tasks';
$workflow_mod_list['Calls'] = 'Calls';
$workflow_mod_list['Meetings'] = 'Meetings';
$workflow_mod_list['Notes'] = 'Notes';
$workflow_mod_list['ProjectTask'] = 'Project Tasks';
$workflow_mod_list['Leads'] = 'Leads';
$workflow_mod_list['Opportunities'] = 'Opportunities';
// End of list
$workflow_admin_modules = array();
if (empty($user)) {
return $workflow_admin_modules;
}
$actions = ACLAction::getUserActions($user->id);
//check for ForecastSchedule because it doesn't exist in $workflow_mod_list
if (isset($actions['ForecastSchedule']['module']['admin']['aclaccess']) && ($actions['ForecastSchedule']['module']['admin']['aclaccess'] == ACL_ALLOW_DEV ||
$actions['ForecastSchedule']['module']['admin']['aclaccess'] == ACL_ALLOW_ADMIN_DEV)
) {
$workflow_admin_modules['Forecasts'] = 'Forecasts';
}
foreach ($workflow_mod_list as $key => $val) {
if (!in_array($val, $workflow_admin_modules) && ($val != 'iFrames' && $val != 'Feeds' && $val != 'Home' && $val != 'Dashboard' && $val != 'Calendar' && $val != 'Activities' && $val != 'Reports') &&
($user->isDeveloperForModule($key))
) {
$workflow_admin_modules[$key] = $val;
}
}
$_SESSION['get_workflow_admin_modules_for_user'] = $workflow_admin_modules;
return $workflow_admin_modules;
}
// Check if user is admin for at least one module.
function is_admin_for_any_module($user)
{
if (!isset($user)) {
return false;
}
if ($user->isAdmin()) {
return true;
}
return false;
}
// Check if user is admin for a specific module.
function is_admin_for_module($user, $module)
{
if (!isset($user)) {
return false;
}
if ($user->isAdmin()) {
return true;
}
return false;
}
/**
* Check if user id belongs to a system admin.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function is_admin($user)
{
if (empty($user)) {
return false;
}
return $user->isAdmin();
}
/**
* Return the display name for a theme if it exists.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*
* @deprecated use SugarThemeRegistry::get($theme)->name instead
*/
function get_theme_display($theme)
{
return SugarThemeRegistry::get($theme)->name;
}
/**
* Return an array of directory names.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*
* @deprecated use SugarThemeRegistry::availableThemes() instead.
*/
function get_themes()
{
return SugarThemeRegistry::availableThemes();
}
/**
* THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED; USE get_select_options_with_id()
* Create HTML to display select options in a dropdown list. To be used inside
* of a select statement in a form.
* param $option_list - the array of strings to that contains the option list
* param $selected - the string which contains the default value
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function get_select_options($option_list, $selected)
{
return get_select_options_with_id($option_list, $selected);
}
/**
* Create HTML to display select options in a dropdown list. To be used inside
* of a select statement in a form. This method expects the option list to have keys and values. The keys are the ids. The values are the display strings.
* param $option_list - the array of strings to that contains the option list
* param $selected - the string which contains the default value
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function get_select_options_with_id($option_list, $selected_key)
{
return get_select_options_with_id_separate_key($option_list, $option_list, $selected_key);
}
/**
* Create HTML to display select options in a dropdown list. To be used inside
* of a select statement in a form. This method expects the option list to have keys and values. The keys are the ids. The values are the display strings.
* param $label_list - the array of strings to that contains the option list
* param $key_list - the array of strings to that contains the values list
* param $selected - the string which contains the default value
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function get_select_options_with_id_separate_key($label_list, $key_list, $selected_key, $massupdate = false)
{
global $app_strings;
$select_options = '';
//for setting null selection values to human readable --None--
get_select_empty_option();
$pattern = "/'0?'></";
$replacement = "''>" . $app_strings['LBL_NONE'] . '<';
if ($massupdate) {
$replacement .= "/OPTION>\n<OPTION value='__SugarMassUpdateClearField__'><"; // Giving the user the option to unset a drop down list. I.e. none means that it won't get updated
}
if (empty($key_list)) {
$key_list = array();
}
//create the type dropdown domain and set the selected value if $opp value already exists
foreach ($key_list as $option_key => $option_value) {
$selected_string = '';
// the system is evaluating $selected_key == 0 || '' to true. Be very careful when changing this. Test all cases.
// The bug was only happening with one of the users in the drop down. It was being replaced by none.
if (
($option_key !== '' && $selected_key === $option_key) || (
$option_key === '' && (($selected_key === '' && !$massupdate) || $selected_key === '__SugarMassUpdateClearField__')
) || (is_array($selected_key) && in_array($option_key, $selected_key))
) {
$selected_string = 'selected ';
}
$html_value = $option_key;
$select_options .= "\n<OPTION " . $selected_string . "value='$html_value'>$label_list[$option_key]</OPTION>";
}
$select_options = preg_replace($pattern, $replacement, $select_options);
return $select_options;
}
/**
* @param string $value
* @param bool $isSelected
* @param string $app_strings_label
* @return string as HTML eg <OPTION value="">--None--</OPTION>
*/
function get_select_empty_option($value = '', $isSelected = false, $app_strings_label = 'LBL_NONE')
{
global $app_strings;
$response = '<OPTION value="' . $value . '"';
if ($isSelected === true) {
$response .= ' ' . 'selected';
}
$response .= '>' . $app_strings[$app_strings_label] . '</OPTION>';
return $response;
}
function get_select_full_option($value = '', $isSelected = false, $translatedLabel = '----')
{
global $app_strings;
$response = '<OPTION value="' . $value . '"';
if ($isSelected === true) {
$response .= ' ' . 'selected';
}
$response .= '>';
$response .= $translatedLabel;
$response .= '</OPTION>';
return $response;
}
/**
* @param array $option_list
* @param string $selected_key
* @return string as HTML <OPTION value="id1">apple</OPTION><OPTION value="id2">banana</OPTION>
*/
function get_select_full_options_with_id($option_list = array(), $selected_key = '')
{
$response = '';
foreach ($option_list as $option_key => $option_value) {
$isSelected = false;
if (empty($option_key)) {
continue;
}
if (empty($option_value)) {
continue;
}
if ($option_key === $selected_key) {
$isSelected = true;
}
$response .= get_select_full_option($option_key, $isSelected, $option_value);
}
return $response;
}
/**
* Call this method instead of die().
* We print the error message and then die with an appropriate
* exit code.
*/
function sugar_die($error_message, $exit_code = 1)
{
global $focus;
sugar_cleanup();
echo $error_message;
throw new \Exception($error_message, $exit_code);
}
/**
* Create javascript to clear values of all elements in a form.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function get_clear_form_js()
{
$the_script = <<<EOQ
<script type="text/javascript" language="JavaScript">
function clear_form(form) {
var newLoc = 'index.php?action=' + form.action.value + '&module=' + form.module.value + '&query=true&clear_query=true';
if(typeof(form.advanced) != 'undefined'){
newLoc += '&advanced=' + form.advanced.value;
}
document.location.href= newLoc;
}
</script>
EOQ;
return $the_script;
}
/**
* Create javascript to set the cursor focus to specific field in a form
* when the screen is rendered. The field name is currently hardcoded into the
* the function.
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function get_set_focus_js()
{
//TODO Clint 5/20 - Make this function more generic so that it can take in the target form and field names as variables
$the_script = <<<EOQ
<script type="text/javascript" language="JavaScript">
<!--
function set_focus() {
if (document.forms.length > 0) {
for (i = 0; i < document.forms.length; i++) {
for (j = 0; j < document.forms[i].elements.length; j++) {
var field = document.forms[i].elements[j];
if ((field.type == "text" || field.type == "textarea" || field.type == "password") &&
!field.disabled && (field.name == "first_name" || field.name == "name" || field.name == "user_name" || field.name=="document_name")) {
field.focus();
if (field.type == "text") {
field.select();
}
break;
}
}
}
}
}
-->
</script>
EOQ;
return $the_script;
}
/**
* Sort Multi Dimensional Array by Column
*
* @param mixed ... &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]]
* @see http://php.net/manual/en/function.array-multisort.php
* @return array
*
* Example: $array = array_csort($array,'town','age',SORT_DESC,'name');
*
* $array is the array you want to sort, 'col1' is the name of the column
* you want to sort, SORT_FLAGS are : SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
* you can repeat the 'col',FLAG,FLAG, as often you want, the highest priority is given to
* the first - so the array is sorted by the last given column first, then the one before ...
*
*/
function array_csort()
{
$args = func_get_args();
$argsShifted = array_shift($args);
$arrayMultiSortParameters = array();
$sorting = array();
for ($i = 0, $size = count($args); $i < $size; $i++) {
if (is_string($args[$i])) {
foreach ($argsShifted as $row) {
$sorting[$i][] = $row[$args[$i]];
}
} else {
$sorting[$i] = $args[$i];
}
$arrayMultiSortParameters[] = $sorting[$i];
}
$arrayMultiSortParameters[] = $argsShifted;
call_user_func_array('array_multisort', $arrayMultiSortParameters);
return end($arrayMultiSortParameters);
}
/**
* Converts localized date format string to jscalendar format
* Example: $array = array_csort($array,'town','age',SORT_DESC,'name');
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________..
*/
function parse_calendardate($local_format)
{
preg_match('/\(?([^-]{1})[^-]*-([^-]{1})[^-]*-([^-]{1})[^-]*\)/', $local_format, $matches);
$calendar_format = '%' . $matches[1] . '-%' . $matches[2] . '-%' . $matches[3];
return str_replace(array('y', 'ᅣ1<EFBF84>7', 'a', 'j'), array('Y', 'Y', 'Y', 'd'), $calendar_format);
}
function translate($string, $mod = '', $selectedValue = '')
{
//$test_start = microtime();
//static $mod_strings_results = array();
if (!empty($mod)) {
global $current_language;
//Bug 31275
if (isset($_REQUEST['login_language'])) {
$current_language = ($_REQUEST['login_language'] == $current_language) ? $current_language : $_REQUEST['login_language'];
}
$mod_strings = return_module_language($current_language, $mod);
if ($mod == '') {
echo 'Language is <pre>' . $mod_strings . '</pre>';
}
} else {
global $mod_strings;
}
$returnValue = '';
global $app_strings, $app_list_strings;
if (isset($mod_strings[$string])) {
$returnValue = $mod_strings[$string];
} elseif (isset($app_strings[$string])) {
$returnValue = $app_strings[$string];
} elseif (isset($app_list_strings[$string])) {
$returnValue = $app_list_strings[$string];
} elseif (isset($app_list_strings['moduleList']) && isset($app_list_strings['moduleList'][$string])) {
$returnValue = $app_list_strings['moduleList'][$string];
}
//$test_end = microtime();
//
// $mod_strings_results[$mod] = microtime_diff($test_start,$test_end);
//
// echo("translate results:");
// $total_time = 0;
// $total_strings = 0;
// foreach($mod_strings_results as $key=>$value)
// {
// echo("Module $key \t\t time $value \t\t<br>");
// $total_time += $value;
// }
//
// echo("Total time: $total_time<br>");
if (empty($returnValue)) {
return $string;
}
// Bug 48996 - Custom enums with '0' value were not returning because of empty check
// Added a numeric 0 checker to the conditional to allow 0 value indexed to pass
if (is_array($returnValue) && (!empty($selectedValue) || (is_numeric($selectedValue) && $selectedValue == 0)) && isset($returnValue[$selectedValue])) {
return $returnValue[$selectedValue];
}
return $returnValue;
}
/**
* Converts a number from '1,000' to '1000', and '1,50' (if using commas as a decimal separator) to '1.50'.
*
* @deprecated This function is unused and will be removed in a future release.
*/
function unTranslateNum($num)
{
static $dec_sep;
static $num_grp_sep;
global $current_user, $sugar_config;
if ($dec_sep == null) {
$user_dec_sep = $current_user->getPreference('dec_sep');
$dec_sep = (empty($user_dec_sep) ? $sugar_config['default_decimal_seperator'] : $user_dec_sep);
}
if ($num_grp_sep == null) {
$user_num_grp_sep = $current_user->getPreference('num_grp_sep');
$num_grp_sep = (empty($user_num_grp_sep) ? $sugar_config['default_number_grouping_seperator'] : $user_num_grp_sep);
}
$num = preg_replace("'" . preg_quote($num_grp_sep) . "'", '', $num);
$num = preg_replace("'" . preg_quote($dec_sep) . "'", '.', $num);
return $num;
}
/**
* @return bool
*/
function isSSL()
{
if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') ||
(!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on')
) {
return true;
}
return false;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function add_http($url)
{
if (!preg_match('@://@i', $url)) {
$scheme = 'http';
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$scheme = 'https';
}
return "{$scheme}://{$url}";
}
return $url;
}
/**
* returns a default array of XSS tags to clean.
*
* @return array
*/
function getDefaultXssTags()
{
$tmp = array(
'applet' => 'applet',
'base' => 'base',
'embed' => 'embed',
'form' => 'form',
'frame' => 'frame',
'frameset' => 'frameset',
'iframe' => 'iframe',
'import' => "\?import",
'layer' => 'layer',
'link' => 'link',
'object' => 'object',
'script' => 'script',
'xmp' => 'xmp',
);
$ret = base64_encode(serialize($tmp));
return $ret;
}
/**
* Remove potential xss vectors from strings.
*
* @param string str String to search for XSS attack vectors
*
* @deprecated
*
* @return string
*/
function remove_xss($str)
{
return SugarCleaner::cleanHtml($str, false);
}
/**
* Detects typical XSS attack patterns.
*
* @deprecated
*
* @param string str String to search for XSS attack vectors
* @param bool cleanImg Flag to allow <img> tags to survive - only used by InboundEmail for inline images.
*
* @return array Array of matches, empty on clean string
*/
function clean_xss($str, $cleanImg = true)
{
global $sugar_config;
if (empty($sugar_config['email_xss'])) {
$sugar_config['email_xss'] = getDefaultXssTags();
}
$xsstags = unserialize(base64_decode($sugar_config['email_xss']));
// cn: bug 13079 - "on\w" matched too many non-events (cONTact, strONG, etc.)
$jsEvents = 'onblur|onfocus|oncontextmenu|onresize|onscroll|onunload|ondblclick|onclick|';
$jsEvents .= 'onmouseup|onmouseover|onmousedown|onmouseenter|onmouseleave|onmousemove|onload|onchange|';
$jsEvents .= 'onreset|onselect|onsubmit|onkeydown|onkeypress|onkeyup|onabort|onerror|ondragdrop';
$attribute_regex = "#\b({$jsEvents})\s*=\s*(?|(?!['\"])\S+|['\"].+?['\"])#sim";
$javascript_regex = '@<[^/>][^>]+(expression\(|j\W*a\W*v\W*a|v\W*b\W*s\W*c\W*r|&#|/\*|\*/)[^>]*>@sim';
$imgsrc_regex = '#<[^>]+src[^=]*=([^>]*?http(s)?://[^>]*)>#sim';
$css_url = '#url\(.*\.\w+\)#';
$tagsrex = '#<\/?(\w+)((?:\s+(?:\w|\w[\w-]*\w)(?:\s*=\s*(?:\".*?\"|\'.*?\'|[^\'\">\s]+))?)+\s*|\s*)\/?>#im';
$tagmatches = array();
$matches = array();
preg_match_all($tagsrex, $str, $tagmatches, PREG_PATTERN_ORDER);
foreach ($tagmatches[1] as $no => $tag) {
if (in_array($tag, $xsstags)) {
// dangerous tag - take out whole
$matches[] = $tagmatches[0][$no];
continue;
}
$attrmatch = array();
preg_match_all($attribute_regex, $tagmatches[2][$no], $attrmatch, PREG_PATTERN_ORDER);
if (!empty($attrmatch[0])) {
$matches = array_merge($matches, $attrmatch[0]);
}
}
$matches = array_merge($matches, xss_check_pattern($javascript_regex, $str));
if ($cleanImg) {
$matches = array_merge(
$matches,
xss_check_pattern($imgsrc_regex, $str)
);
}
// cn: bug 13498 - custom white-list of allowed domains that vet remote images
preg_match_all($css_url, $str, $cssUrlMatches, PREG_PATTERN_ORDER);
if (isset($sugar_config['security_trusted_domains']) && !empty($sugar_config['security_trusted_domains']) && is_array($sugar_config['security_trusted_domains'])) {
if (is_array($cssUrlMatches) && count($cssUrlMatches) > 0) {
// normalize whitelist
foreach ($sugar_config['security_trusted_domains'] as $k => $v) {
$sugar_config['security_trusted_domains'][$k] = strtolower($v);
}
foreach ($cssUrlMatches[0] as $match) {
$domain = strtolower(substr(strstr($match, '://'), 3));
$baseUrl = substr($domain, 0, strpos($domain, '/'));
if (!in_array($baseUrl, $sugar_config['security_trusted_domains'])) {
$matches[] = $match;
}
}
}
} else {
$matches = array_merge($matches, $cssUrlMatches[0]);
}
return $matches;
}
/**
* Helper function used by clean_xss() to parse for known-bad vectors.
*
* @param string pattern Regex pattern to use
* @param string str String to parse for badness
*
* @return array
*/
function xss_check_pattern($pattern, $str)
{
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER);
return $matches[1];
}
/**
* Designed to take a string passed in the URL as a parameter and clean all "bad" data from it.
*
* @param string $str
* @param string $filter which corresponds to a regular expression to use; choices are:
* "STANDARD" ( default )
* "STANDARDSPACE"
* "FILE"
* "NUMBER"
* "SQL_COLUMN_LIST"
* "PATH_NO_URL"
* "SAFED_GET"
* "UNIFIED_SEARCH"
* "AUTO_INCREMENT"
* "ALPHANUM"
* @param bool $dieOnBadData true (default) if you want to die if bad data if found, false if not
*/
function clean_string($str, $filter = 'STANDARD', $dieOnBadData = true)
{
global $sugar_config;
$filters = array(
'STANDARD' => '#[^A-Z0-9\-_\.\@]#i',
'STANDARDSPACE' => '#[^A-Z0-9\-_\.\@\ ]#i',
'FILE' => '#[^A-Z0-9\-_\.]#i',
'NUMBER' => '#[^0-9\-]#i',
'SQL_COLUMN_LIST' => '#[^A-Z0-9\(\),_\.]#i',
'PATH_NO_URL' => '#://#i',
'SAFED_GET' => '#[^A-Z0-9\@\=\&\?\.\/\-_~+]#i', /* range of allowed characters in a GET string */
'UNIFIED_SEARCH' => '#[\\x00]#', /* cn: bug 3356 & 9236 - MBCS search strings */
'AUTO_INCREMENT' => '#[^0-9\-,\ ]#i',
'ALPHANUM' => '#[^A-Z0-9\-]#i',
);
if (preg_match($filters[$filter], $str)) {
if (isset($GLOBALS['log']) && is_object($GLOBALS['log'])) {
$GLOBALS['log']->fatal("SECURITY[$filter]: bad data passed in; string: {$str}");
}
if ($dieOnBadData) {
die("Bad data passed in; <a href=\"{$sugar_config['site_url']}\">Return to Home</a>");
}
return false;
}
return $str;
}
function clean_file_output($string, $mine_type)
{
$patterns = [];
if ($mine_type === 'image/svg+xml') {
$patterns[] = "/onload=\"window.location='(.*?)'\"/";
}
$string = preg_replace($patterns, '', $string);
return $string;
}
function clean_special_arguments()
{
if (isset($_SERVER['PHP_SELF'])) {
if (!empty($_SERVER['PHP_SELF'])) {
clean_string($_SERVER['PHP_SELF'], 'SAFED_GET');
}
}
if (!empty($_REQUEST) && !empty($_REQUEST['login_theme'])) {
clean_string($_REQUEST['login_theme'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['login_module'])) {
clean_string($_REQUEST['login_module'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['login_action'])) {
clean_string($_REQUEST['login_action'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['ck_login_theme_20'])) {
clean_string($_REQUEST['ck_login_theme_20'], 'STANDARD');
}
if (!empty($_SESSION) && !empty($_SESSION['authenticated_user_theme'])) {
clean_string($_SESSION['authenticated_user_theme'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['module_name'])) {
clean_string($_REQUEST['module_name'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['module'])) {
clean_string($_REQUEST['module'], 'STANDARD');
}
if (!empty($_POST) && !empty($_POST['parent_type'])) {
clean_string($_POST['parent_type'], 'STANDARD');
}
if (!empty($_REQUEST) && !empty($_REQUEST['mod_lang'])) {
clean_string($_REQUEST['mod_lang'], 'STANDARD');
}
if (!empty($_SESSION) && !empty($_SESSION['authenticated_user_language'])) {
clean_string($_SESSION['authenticated_user_language'], 'STANDARD');
}
if (!empty($_SESSION) && !empty($_SESSION['dyn_layout_file'])) {
clean_string($_SESSION['dyn_layout_file'], 'PATH_NO_URL');
}
if (!empty($_GET) && !empty($_GET['from'])) {
clean_string($_GET['from']);
}
if (!empty($_GET) && !empty($_GET['gmto'])) {
clean_string($_GET['gmto'], 'NUMBER');
}
if (!empty($_GET) && !empty($_GET['case_number'])) {
clean_string($_GET['case_number'], 'AUTO_INCREMENT');
}
if (!empty($_GET) && !empty($_GET['bug_number'])) {
clean_string($_GET['bug_number'], 'AUTO_INCREMENT');
}
if (!empty($_GET) && !empty($_GET['quote_num'])) {
clean_string($_GET['quote_num'], 'AUTO_INCREMENT');
}
clean_superglobals('stamp', 'ALPHANUM'); // for vcr controls
clean_superglobals('offset', 'ALPHANUM');
clean_superglobals('return_action');
clean_superglobals('return_module');
return true;
}
/**
* cleans the given key in superglobals $_GET, $_POST, $_REQUEST.
*/
function clean_superglobals($key, $filter = 'STANDARD')
{
if (isset($_GET[$key])) {
clean_string($_GET[$key], $filter);
}
if (isset($_POST[$key])) {
clean_string($_POST[$key], $filter);
}
if (isset($_REQUEST[$key])) {
clean_string($_REQUEST[$key], $filter);
}
}
function set_superglobals($key, $val)
{
$_GET[$key] = $val;
$_POST[$key] = $val;
$_REQUEST[$key] = $val;
}
// Works in conjunction with clean_string() to defeat SQL injection, file inclusion attacks, and XSS
function clean_incoming_data()
{
global $sugar_config;
global $RAW_REQUEST;
$RAW_REQUEST = $_REQUEST;
$req = array_map('securexss', $_REQUEST);
$post = array_map('securexss', $_POST);
$get = array_map('securexss', $_GET);
// PHP cannot stomp out superglobals reliably
foreach ($post as $k => $v) {
$_POST[$k] = $v;
}
foreach ($get as $k => $v) {
$_GET[$k] = $v;
}
foreach ($req as $k => $v) {
$_REQUEST[$k] = $v;
//ensure the keys are safe as well. If mbstring encoding translation is on, the post keys don't
//get translated, so scrub the data but don't die
if (ini_get('mbstring.encoding_translation') === '1') {
securexsskey($k, false);
} else {
securexsskey($k, true);
}
}
// Any additional variables that need to be cleaned should be added here
if (isset($_REQUEST['login_theme'])) {
clean_string($_REQUEST['login_theme']);
}
if (isset($_REQUEST['login_module'])) {
clean_string($_REQUEST['login_module']);
}
if (isset($_REQUEST['login_action'])) {
clean_string($_REQUEST['login_action']);
}
if (isset($_REQUEST['login_language'])) {
clean_string($_REQUEST['login_language']);
}
if (isset($_REQUEST['action'])) {
clean_string($_REQUEST['action']);
}
if (isset($_REQUEST['module'])) {
clean_string($_REQUEST['module']);
}
if (isset($_REQUEST['record'])) {
clean_string($_REQUEST['record'], 'STANDARDSPACE');
}
if (isset($_SESSION['authenticated_user_theme'])) {
clean_string($_SESSION['authenticated_user_theme']);
}
if (isset($_SESSION['authenticated_user_language'])) {
clean_string($_SESSION['authenticated_user_language']);
}
if (isset($_REQUEST['language'])) {
clean_string($_REQUEST['language']);
}
if (isset($sugar_config['default_theme'])) {
clean_string($sugar_config['default_theme']);
}
if (isset($_REQUEST['offset'])) {
clean_string($_REQUEST['offset']);
}
if (isset($_REQUEST['stamp'])) {
clean_string($_REQUEST['stamp']);
}
if (isset($_REQUEST['lvso'])) {
set_superglobals('lvso', (strtolower($_REQUEST['lvso']) === 'desc') ? 'desc' : 'asc');
}
// Clean "offset" and "order_by" parameters in URL
foreach ($_REQUEST as $key => $val) {
if (str_end($key, '_offset')) {
clean_string($_REQUEST[$key], 'ALPHANUM'); // keep this ALPHANUM for disable_count_query
set_superglobals($key, $_REQUEST[$key]);
} elseif (str_end($key, '_ORDER_BY')) {
clean_string($_REQUEST[$key], 'SQL_COLUMN_LIST');
set_superglobals($key, $_REQUEST[$key]);
}
}
return 0;
}
// Returns TRUE if $str begins with $begin
function str_begin($str, $begin)
{
return substr($str, 0, strlen($begin)) == $begin;
}
// Returns TRUE if $str ends with $end
function str_end($str, $end)
{
return substr($str, strlen($str) - strlen($end)) == $end;
}
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
/**
* @param $uncleanString
* @return array
*/
function securexss($uncleanString)
{
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
if (is_array($uncleanString)) {
$new = [];
foreach ($uncleanString as $key => $val) {
$new[$key] = securexss($val);
}
return $new;
}
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
static $xss_cleanup = [
'&quot;' => '&#38;',
'"' => '&quot;',
"'" => '&#039;',
'<' => '&lt;',
'>' => '&gt;',
'`' => '&#96;'
];
$uncleanString = preg_replace(array('/javascript:/i', '/\0/', '/javascript:/i'),
array('java script:', '', 'java script:'), $uncleanString);
$partialString = str_replace(array_keys($xss_cleanup), $xss_cleanup, $uncleanString);
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
$antiXss = new AntiXSS();
$antiXss->removeEvilAttributes(['style']);
Squashed 'public/legacy/' changes from 817a12dc0c..f058c4c306 f058c4c306 Fix #9106 - Update securexss for backwards compatibility 05471a51f3 Update composer.lock dee3305fce 7.11.19 0952712425 Fix Calender display issues in FullCalender 3.10 91bfb1cf3a Fix #7999 - Prevent securitygroups mass assign damage e36e1a52f5 Fix #5624 - Make SWSPEditRoleButton::displayList compatible w. parent 8265b5e29b Fix #8571 - Remove duplicate code in users detailviewdefs f63f05a4a2 Fix #8514 - Implement effective opcache file clearing 5e671f3b1b Fix #8461, #8462 - PHP files are potentially overwritten 0b18500b42 Fix #8700 - Various problems in PHPDocs throughout the codebase. 25dce7954d Fix #9067 - Fix the drop down width 28eecb4198 Add Additional api filter option `like` 8b5a152f7f Add filters in relationship API 7a92e5ec8a Add Relationship Beans in V8 API Response c192ccdf2e Fix #9090 - User menu alignment 466f2d96e7 Fix #6051 - Modulebuilder labels edit fixes fe5ed90fd9 Update JQuery JS Library to v3.6.0 e0382c1a6c Update FullCalendar JS Library to v3.10.2 86882a4d4f Update YUI JS Library to 2.9.1 540245494b Fix #8999 - Hardcoded 'by' label in calls e4f3c6a2fb Fix #9034 - Business Hours does not work in non-english languages b0a51cc667 Fix #8910 - Update the V8 Api to allow for upload of documents similar to notes 8408cd8e91 Fix #9010 - Add missing 'view task' label on calendar faa46f5a4c Fix #8894 - Add missing label for calendar dashlet 5905f3d308 Fix #9032 - Prevent Notice Error During Import 5c9e8700ba Fix #8182 - Update updateTimeDateFields to handle undefined dates fc3dd03386 Fix #9075 - Removing deleted related beans via link 039d9a69d2 Fix #8988 - Improve upon solution which doesn't cache incomplete beans f562c57c8d Fix #7772 - Only index ElasticSearch when enabled dd1a5bc244 Fix #9101 LangText exception breaking ElasticSearch 0c861d3f1a Fix #8472 - No or not complete Searchresults using elasticsearch engine e4e884667c Fix #6800 - Elasticsearch: Elastic index name is hardcoded e525634d7b Fix #8916 - Misspelled elasticsearch labels 28d7afaa59 Fix #9080 - Update config for google/apiclient at composer.json 66bd8998ec Fix #9060 - Project Form action should not be changed if delete is not confirmed 06195fe5f1 Fix #8676 - New Scheduled Reports does not run 89341758e2 Fix #2645 - Calendar quick create ignores required fields a329377bc0 Deprecate PdfParser e5c03ad198 Deprecate advanced open discovery (AOD) git-subtree-dir: public/legacy git-subtree-split: f058c4c3062e7fff72cc2b62440bf064a63e6843
2021-05-20 11:54:15 +01:00
return $antiXss->xss_clean($partialString);
}
function securexsskey($value, $die = true)
{
global $sugar_config;
$matches = array();
preg_match('/[\'"<>]/', $value, $matches);
if (!empty($matches)) {
if ($die) {
die("Bad data passed in; <a href=\"{$sugar_config['site_url']}\">Return to Home</a>");
}
unset($_REQUEST[$value]);
unset($_POST[$value]);
unset($_GET[$value]);
}
}
/**
* @param string|null $value
* @return string
*/
function purify_html(?string $value): string {
if (($value ?? '') === '') {
return '';
}
$cleanedValue = htmlentities(SugarCleaner::cleanHtml($value, true));
$decoded = html_entity_decode($cleanedValue);
$doubleDecoded = html_entity_decode($decoded);
if (stripos($decoded, '<script>') !== false || stripos($doubleDecoded, '<script>') !== false){
$cleanedValue = '';
}
return $cleanedValue;
}
function preprocess_param($value)
{
if (is_string($value)) {
$value = securexss($value);
} elseif (is_array($value)) {
foreach ($value as $key => $element) {
$value[$key] = preprocess_param($element);
}
}
return $value;
}
function cleanup_slashes($value)
{
if (is_string($value)) {
return stripslashes($value);
}
return $value;
}
function set_register_value($category, $name, $value)
{
return sugar_cache_put("{$category}:{$name}", $value);
}
function get_register_value($category, $name)
{
return sugar_cache_retrieve("{$category}:{$name}");
}
function clear_register_value($category, $name)
{
return sugar_cache_clear("{$category}:{$name}");
}
// this function cleans id's when being imported
function convert_id($string)
{
$errorLevelStored = error_reporting();
error_reporting(0);
$function = function ($matches) {
return ord($matches[0]);
};
if ($function === false) {
LoggerManager::getLogger()->warn('Function not created');
}
error_reporting($errorLevelStored);
return preg_replace_callback('|[^A-Za-z0-9\-]|', $function, $string);
}
/**
* @deprecated use SugarTheme::getImage()
*/
function get_image($image, $other_attributes, $width = '', $height = '', $ext = '.gif', $alt = '')
{
return SugarThemeRegistry::current()->getImage(basename($image), $other_attributes, empty($width) ? null : $width, empty($height) ? null : $height, $ext, $alt);
}
/**
* @deprecated use SugarTheme::getImageURL()
*/
function getImagePath($image_name)
{
return SugarThemeRegistry::current()->getImageURL($image_name);
}
function getWebPath($relative_path)
{
$current_theme = SugarThemeRegistry::current();
$theme_directory = $current_theme->dirName;
if (strpos($relative_path, "themes" . DIRECTORY_SEPARATOR . $theme_directory) === false) {
$test_path = SUGAR_PATH . DIRECTORY_SEPARATOR . "themes" . DIRECTORY_SEPARATOR . $theme_directory . DIRECTORY_SEPARATOR . $relative_path;
if (file_exists($test_path)) {
$resource_name = "themes" . DIRECTORY_SEPARATOR . $theme_directory . DIRECTORY_SEPARATOR . $relative_path;
}
}
//if it has a :// then it isn't a relative path
if (substr_count($relative_path, '://') > 0) {
return $relative_path;
}
if (defined('TEMPLATE_URL')) {
$relative_path = SugarTemplateUtilities::getWebPath($relative_path);
}
return $relative_path;
}
function getVersionedPath($path, $additional_attrs = '')
{
if (empty($GLOBALS['sugar_config']['js_custom_version'])) {
$GLOBALS['sugar_config']['js_custom_version'] = 1;
}
$js_version_key = isset($GLOBALS['js_version_key']) ? $GLOBALS['js_version_key'] : '';
if (inDeveloperMode()) {
static $rand;
if (empty($rand)) {
$rand = mt_rand();
}
$dev = $rand;
} else {
$dev = '';
}
if (is_array($additional_attrs)) {
$additional_attrs = implode('|', $additional_attrs);
}
// cutting 2 last chars here because since md5 is 32 chars, it's always ==
$str = substr(base64_encode(md5("$js_version_key|{$GLOBALS['sugar_config']['js_custom_version']}|$dev|$additional_attrs", true)), 0, -2);
// remove / - it confuses some parsers
$str = strtr($str, '/+', '-_');
if (empty($path)) {
return $str;
}
return $path . "?v=$str";
}
function getVersionedScript($path, $additional_attrs = '')
{
return '<script type="text/javascript" src="' . getVersionedPath($path, $additional_attrs) . '"></script>';
}
function getJSPath($relative_path, $additional_attrs = '')
{
if (defined('TEMPLATE_URL')) {
$relative_path = SugarTemplateUtilities::getWebPath($relative_path);
}
return getVersionedPath($relative_path) . (!empty($additional_attrs) ? "&$additional_attrs" : '');
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function getSWFPath($relative_path, $additional_params = '')
{
$path = $relative_path;
if (!empty($additional_params)) {
$path .= '?' . $additional_params;
}
if (defined('TEMPLATE_URL')) {
$path = TEMPLATE_URL . '/' . $path;
}
return $path;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function getSQLDate($date_str)
{
if (preg_match('/^(\d{1,2})-(\d{1,2})-(\d{4})$/', $date_str, $match)) {
if (strlen($match[2]) == 1) {
$match[2] = '0' . $match[2];
}
if (strlen($match[1]) == 1) {
$match[1] = '0' . $match[1];
}
return "{$match[3]}-{$match[1]}-{$match[2]}";
} elseif (preg_match('/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/', $date_str, $match)) {
if (strlen($match[2]) == 1) {
$match[2] = '0' . $match[2];
}
if (strlen($match[1]) == 1) {
$match[1] = '0' . $match[1];
}
return "{$match[3]}-{$match[1]}-{$match[2]}";
}
return '';
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function clone_history(&$db, $from_id, $to_id, $to_type)
{
global $timedate;
$old_note_id = null;
$old_filename = null;
require_once 'include/upload_file.php';
$tables = array('calls' => 'Call', 'meetings' => 'Meeting', 'notes' => 'Note', 'tasks' => 'Task');
$location = array('Email' => 'modules/Emails/Email.php',
'Call' => 'modules/Calls/Call.php',
'Meeting' => 'modules/Meetings/Meeting.php',
'Note' => 'modules/Notes/Note.php',
'Tasks' => 'modules/Tasks/Task.php',
);
foreach ($tables as $table => $bean_class) {
if (!class_exists($bean_class)) {
require_once $location[$bean_class];
}
$bProcessingNotes = false;
if ($table == 'notes') {
$bProcessingNotes = true;
}
$query = "SELECT id FROM $table WHERE parent_id='$from_id'";
$results = $db->query($query);
while ($row = $db->fetchByAssoc($results)) {
//retrieve existing record.
$bean = new $bean_class();
$bean->retrieve($row['id']);
//process for new instance.
if ($bProcessingNotes) {
$old_note_id = $row['id'];
$old_filename = $bean->filename;
}
$bean->id = null;
$bean->parent_id = $to_id;
$bean->parent_type = $to_type;
if ($to_type == 'Contacts' and in_array('contact_id', $bean->column_fields)) {
$bean->contact_id = $to_id;
}
$bean->update_date_modified = false;
$bean->update_modified_by = false;
if (isset($bean->date_modified)) {
$bean->date_modified = $timedate->to_db($bean->date_modified);
}
if (isset($bean->date_entered)) {
$bean->date_entered = $timedate->to_db($bean->date_entered);
}
//save
$new_id = $bean->save();
//duplicate the file now. for notes.
if ($bProcessingNotes && !empty($old_filename)) {
UploadFile::duplicate_file($old_note_id, $new_id, $old_filename);
}
//reset the values needed for attachment duplication.
$old_note_id = null;
$old_filename = null;
}
}
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function values_to_keys($array)
{
$new_array = array();
if (!is_array($array)) {
return $new_array;
}
foreach ($array as $arr) {
$new_array[$arr] = $arr;
}
return $new_array;
}
/**
* @param $db
* @param array $tables
* @param $from_column
* @param $from_id
* @param $to_id
*/
function clone_relationship(&$db, $tables, $from_column = null, $from_id = null, $to_id = null)
{
foreach ((array) $tables as $table) {
if ($table == 'emails_beans') {
$query = "SELECT * FROM $table WHERE $from_column='$from_id' and bean_module='Leads'";
} else {
$query = "SELECT * FROM $table WHERE $from_column='$from_id'";
}
$results = $db->query($query);
while ($row = $db->fetchByAssoc($results)) {
$query = "INSERT INTO $table ";
$names = '';
$values = '';
$row[$from_column] = $to_id;
$row['id'] = create_guid();
if ($table == 'emails_beans') {
$row['bean_module'] == 'Contacts';
}
foreach ($row as $name => $value) {
if (empty($names)) {
$names .= $name;
$values .= "'$value'";
} else {
$names .= ', ' . $name;
$values .= ", '$value'";
}
}
$query .= "($names) VALUES ($values)";
$db->query($query);
}
}
}
function get_unlinked_email_query($type, $bean)
{
global $current_user;
$return_array['select'] = 'SELECT emails.id ';
$return_array['from'] = 'FROM emails ';
$return_array['where'] = '';
$return_array['join'] = " JOIN (select DISTINCT email_id from emails_email_addr_rel eear
join email_addr_bean_rel eabr on eabr.bean_id ='$bean->id' and eabr.bean_module = '$bean->module_dir' and
eabr.email_address_id = eear.email_address_id and eabr.deleted=0
where eear.deleted=0 and eear.email_id not in
(select eb.email_id from emails_beans eb where eb.bean_module ='$bean->module_dir' and eb.bean_id = '$bean->id')
) derivedemails on derivedemails.email_id = emails.id";
$return_array['join_tables'][0] = '';
if (isset($type) and ! empty($type['return_as_array'])) {
return $return_array;
}
return $return_array['select'] . $return_array['from'] . $return_array['where'] . $return_array['join'];
}
// fn
function get_emails_by_assign_or_link($params)
{
$relation = $params['link'];
$bean = $GLOBALS['app']->controller->bean;
if (empty($bean->$relation)) {
$bean->load_relationship($relation);
}
if (empty($bean->$relation)) {
$GLOBALS['log']->error("Bad relation '$relation' for bean '{$bean->object_name}' id '{$bean->id}'");
return array();
}
$rel_module = $bean->$relation->getRelatedModuleName();
$rel_join = $bean->$relation->getJoin(array(
'join_table_alias' => 'link_bean',
'join_table_link_alias' => 'linkt',
));
$rel_join = str_replace("{$bean->table_name}.id", "'{$bean->id}'", $rel_join);
$return_array['select'] = 'SELECT DISTINCT emails.id ';
$return_array['from'] = 'FROM emails ';
$return_array['join'] = array();
// directly assigned emails
$return_array['join'][] = "
SELECT
eb.email_id,
'direct' source
FROM
emails_beans eb
WHERE
eb.bean_module = '{$bean->module_dir}'
AND eb.bean_id = '{$bean->id}'
AND eb.deleted=0
";
// Related by directly by email
$return_array['join'][] = "
SELECT DISTINCT
eear.email_id,
'relate' source
FROM
emails_email_addr_rel eear
INNER JOIN
email_addr_bean_rel eabr
ON
eabr.bean_id ='{$bean->id}'
AND eabr.bean_module = '{$bean->module_dir}'
AND eabr.email_address_id = eear.email_address_id
AND eabr.deleted=0
WHERE
eear.deleted=0
";
$showEmailsOfRelatedContacts = empty($bean->field_defs[$relation]['hide_history_contacts_emails']);
if (!empty($GLOBALS['sugar_config']['hide_history_contacts_emails']) && isset($GLOBALS['sugar_config']['hide_history_contacts_emails'][$bean->module_name])) {
$showEmailsOfRelatedContacts = empty($GLOBALS['sugar_config']['hide_history_contacts_emails'][$bean->module_name]);
}
if ($showEmailsOfRelatedContacts) {
// Assigned to contacts
$return_array['join'][] = "
SELECT DISTINCT
eb.email_id,
'contact' source
FROM
emails_beans eb
$rel_join AND link_bean.id = eb.bean_id
WHERE
eb.bean_module = '$rel_module'
AND eb.deleted=0
";
// Related by email to linked contact
$return_array['join'][] = "
SELECT DISTINCT
eear.email_id,
'relate_contact' source
FROM
emails_email_addr_rel eear
INNER JOIN
email_addr_bean_rel eabr
ON
eabr.email_address_id=eear.email_address_id
AND eabr.bean_module = '$rel_module'
AND eabr.deleted=0
$rel_join AND link_bean.id = eabr.bean_id
WHERE
eear.deleted=0
";
}
$return_array['join'] = ' INNER JOIN (' . implode(' UNION ', $return_array['join']) . ') email_ids ON emails.id=email_ids.email_id ';
$return_array['where'] = ' WHERE emails.deleted=0 ';
//$return_array['join'] = '';
$return_array['join_tables'][0] = '';
if ($bean->object_name == 'Case' && !empty($bean->case_number)) {
$where = str_replace('%1', $bean->case_number, $bean->getEmailSubjectMacro());
$return_array['where'] .= "\n AND (email_ids.source = 'direct' OR emails.name LIKE '%$where%')";
}
return $return_array;
}
/**
* Check to see if the number is empty or non-zero.
*
* @param $value
*
* @return bool
* */
function number_empty($value)
{
return empty($value) && $value != '0';
}
/**
* @param bool $add_blank
* @param $bean_name
* @param $display_columns
* @param string $where
* @param string $order_by
* @param bool $blank_is_none
* @return array
*/
function get_bean_select_array(
$add_blank,
$bean_name = null,
$display_columns = null,
$where = '',
$order_by = '',
$blank_is_none = false
) {
global $beanFiles;
// set $add_blank = true by default
if (!is_bool($add_blank)) {
$add_blank = true;
}
require_once $beanFiles[$bean_name];
$focus = new $bean_name();
$user_array = array();
$key = ($bean_name == 'EmailTemplate') ? $bean_name : $bean_name . $display_columns . $where . $order_by;
$user_array = get_register_value('select_array', $key);
if (!$user_array) {
$db = DBManagerFactory::getInstance();
$temp_result = array();
$query = "SELECT {$focus->table_name}.id, {$display_columns} as display from {$focus->table_name} ";
$query .= 'where ';
if ($where != '') {
$query .= $where . ' AND ';
}
$query .= " {$focus->table_name}.deleted=0";
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
$accessWhere = $focus->buildAccessWhere('list');
if (!empty($accessWhere)) {
$query .= ' AND ' . $accessWhere;
}
if ($order_by != '') {
$query .= " order by {$focus->table_name}.{$order_by}";
}
$GLOBALS['log']->debug("get_user_array query: $query");
$result = $db->query($query, true, 'Error filling in user array: ');
if ($add_blank == true) {
// Add in a blank row
if ($blank_is_none == true) { // set 'blank row' to "--None--"
global $app_strings;
$temp_result[''] = $app_strings['LBL_NONE'];
} else {
$temp_result[''] = '';
}
}
// Get the id and the name.
while ($row = $db->fetchByAssoc($result)) {
$temp_result[$row['id']] = $row['display'];
}
$user_array = $temp_result;
set_register_value('select_array', $key, $temp_result);
}
return $user_array;
}
/**
* @param unknown_type $listArray
*/
// function parse_list_modules
// searches a list for items in a user's allowed tabs and returns an array that removes unallowed tabs from list
function parse_list_modules(&$listArray)
{
global $modListHeader;
$returnArray = array();
foreach ($listArray as $optionName => $optionVal) {
if (array_key_exists($optionName, $modListHeader)) {
$returnArray[$optionName] = $optionVal;
}
// special case for projects
if (array_key_exists('Project', $modListHeader)) {
$returnArray['ProjectTask'] = $listArray['ProjectTask'];
}
}
$acldenied = ACLController::disabledModuleList($listArray, false);
foreach ($acldenied as $denied) {
unset($returnArray[$denied]);
}
asort($returnArray);
return $returnArray;
}
function display_notice($msg = false)
{
global $error_notice;
//no error notice - lets just display the error to the user
if (!isset($error_notice)) {
echo '<br>' . $msg . '<br>';
} else {
$error_notice .= $msg . '<br>';
}
}
/**
* Checks if it is a number that at least has the plus at the beginning.
*
* @deprecated No longer used, will be removed without replacement in SuiteCRM 7.12.
*/
function skype_formatted($number)
{
//kbrill - BUG #15375
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'Popup') {
return false;
}
return substr($number, 0, 1) == '+' || substr($number, 0, 2) == '00' || substr($number, 0, 3) == '011';
// return substr($number, 0, 1) == '+' || substr($number, 0, 2) == '00' || substr($number, 0, 2) == '011';
}
/**
* @deprecated No longer used, will be removed without replacement in SuiteCRM 7.12.
*/
function format_skype($number)
{
return preg_replace('/[^\+0-9]/', '', $number);
}
function insert_charset_header()
{
header('Content-Type: text/html; charset=UTF-8');
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function getCurrentURL()
{
$href = 'http:';
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$href = 'https:';
}
$href .= '//' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
return $href;
}
function javascript_escape($str)
{
$new_str = '';
for ($i = 0; $i < strlen($str); ++$i) {
if (ord(substr($str, $i, 1)) == 10) {
$new_str .= '\n';
} elseif (ord(substr($str, $i, 1)) == 13) {
$new_str .= '\r';
} else {
$new_str .= $str[$i];
}
}
$new_str = str_replace("'", "\\'", $new_str);
return $new_str;
}
function js_escape($str, $keep = true)
{
$str = html_entity_decode(str_replace('\\', '', $str), ENT_QUOTES);
if ($keep) {
$str = javascript_escape($str);
} else {
$str = str_replace("'", ' ', $str);
$str = str_replace('"', ' ', $str);
}
return $str;
//end function js_escape
}
function br2nl($str)
{
$regex = '#<[^>]+br.+?>#i';
preg_match_all($regex, $str, $matches);
foreach ($matches[0] as $match) {
$str = str_replace($match, '<br>', $str);
}
$brs = array('<br>', '<br/>', '<br />');
$str = str_replace("\r\n", "\n", $str); // make from windows-returns, *nix-returns
$str = str_replace("\n\r", "\n", $str); // make from windows-returns, *nix-returns
$str = str_replace("\r", "\n", $str); // make from windows-returns, *nix-returns
$str = str_ireplace($brs, "\n", $str); // to retrieve it
return $str;
}
/**
* Private helper function for displaying the contents of a given variable.
* This function is only intended to be used for SugarCRM internal development.
* The ppd stands for Pre Print Die.
* @deprecated This function is unused and will be removed in a future release.
*/
function _ppd($mixed)
{
}
/**
* Private helper function for displaying the contents of a given variable in
* the Logger. This function is only intended to be used for SugarCRM internal
* development. The pp stands for Pre Print.
*
* @param $mixed var to print_r()
* @param $die boolean end script flow
* @param $displayStackTrace also show stack trace
* @deprecated This function is unused and will be removed in a future release.
*/
function _ppl($mixed, $die = false, $displayStackTrace = false, $loglevel = 'fatal')
{
if (!isset($GLOBALS['log']) || empty($GLOBALS['log'])) {
$GLOBALS['log'] = LoggerManager:: getLogger();
}
$mix = print_r($mixed, true); // send print_r() output to $mix
$stack = debug_backtrace();
$GLOBALS['log']->$loglevel('------------------------------ _ppLogger() output start -----------------------------');
$GLOBALS['log']->$loglevel($mix);
if ($displayStackTrace) {
foreach ($stack as $position) {
$GLOBALS['log']->$loglevel($position['file'] . "({$position['line']})");
}
}
$GLOBALS['log']->$loglevel('------------------------------ _ppLogger() output end -----------------------------');
$GLOBALS['log']->$loglevel('------------------------------ _ppLogger() file: ' . $stack[0]['file'] . ' line#: ' . $stack[0]['line'] . '-----------------------------');
if ($die) {
die();
}
}
/**
* private helper function to quickly show the major, direct, field attributes of a given bean.
* The ppf stands for Pre[formatted] Print Focus [object].
*
* @param object bean The focus bean
* @deprecated This function is unused and will be removed in a future release.
*/
function _ppf($bean, $die = false)
{
}
/**
* Private helper function for displaying the contents of a given variable.
* This function is only intended to be used for SugarCRM internal development.
* The pp stands for Pre Print.
* @deprecated This function is unused and will be removed in a future release.
*/
function _pp($mixed)
{
}
/**
* Private helper function for displaying the contents of a given variable.
* This function is only intended to be used for SugarCRM internal development.
* The pp stands for Pre Print.
* @deprecated This function is unused and will be removed in a future release.
*/
function _pstack_trace($mixed = null)
{
}
/**
* Private helper function for displaying the contents of a given variable.
* This function is only intended to be used for SugarCRM internal development.
* The pp stands for Pre Print Trace.
* @deprecated This function is unused and will be removed in a future release.
*/
function _ppt($mixed, $textOnly = false)
{
}
/**
* Private helper function for displaying the contents of a given variable.
* This function is only intended to be used for SugarCRM internal development.
* The pp stands for Pre Print Trace Die.
* @deprecated This function is unused and will be removed in a future release.
*/
function _pptd($mixed)
{
}
/**
* Private helper function for decoding javascript UTF8
* This function is only intended to be used for SugarCRM internal development.
* @deprecated This function is unused and will be removed in a future release.
*/
function decodeJavascriptUTF8($str)
{
}
/**
* Will check if a given PHP version string is accepted or not.
* Do not pass in any pararameter to default to a check against the
* current environment's PHP version.
*
* @param string $sys_php_version Version to check against, defaults to the current environment's.
* @param string $min_php_version Minimum version to check against. Defaults to the SUITECRM_PHP_MIN_VERSION constant.
* @param string $rec_php_version Recommended version. Defaults to the SUITECRM_PHP_REC_VERSION constant
*
* @return integer 1 if version is greater than the recommended PHP version,
* 0 if version is between minimun and recomended PHP versions,
* -1 otherwise (less than minimum or buggy version)
*/
function check_php_version($sys_php_version = '', $min_php_version = '', $rec_php_version = '')
{
if ($sys_php_version === '') {
$sys_php_version = constant('PHP_VERSION');
}
if ($min_php_version === '') {
$min_php_version = constant('SUITECRM_PHP_MIN_VERSION');
}
if ($rec_php_version === '') {
$rec_php_version = constant('SUITECRM_PHP_REC_VERSION');
}
// versions below MIN_PHP_VERSION are not accepted, so return early.
if (version_compare($sys_php_version, $min_php_version, '<') === true) {
return -1;
}
// If the checked version is between the minimum and recommended versions, return 0.
if (version_compare($sys_php_version, $rec_php_version, '<') === true) {
return 0;
}
// Everything else is fair game
return 1;
}
/**
* Will check if a given IIS version string is supported (tested on this ver),
* unsupported (results unknown), or invalid (something will break on this
* ver).
*
* @return 1 implies supported, 0 implies unsupported, -1 implies invalid
*/
function check_iis_version($sys_iis_version = '')
{
$server_software = $_SERVER['SERVER_SOFTWARE'];
$iis_version = '';
if (strpos($server_software, 'Microsoft-IIS') !== false && preg_match_all("/^.*\/(\d+\.?\d*)$/", $server_software, $out)) {
$iis_version = $out[1][0];
}
$sys_iis_version = empty($sys_iis_version) ? $iis_version : $sys_iis_version;
// versions below $min_considered_iis_version considered invalid by default,
// versions equal to or above this ver will be considered depending
// on the rules that follow
$min_considered_iis_version = '6.0';
// only the supported versions,
// should be mutually exclusive with $invalid_iis_versions
$supported_iis_versions = array('6.0', '7.0');
$unsupported_iis_versions = array();
$invalid_iis_versions = array('5.0');
// default unsupported
$retval = 0;
// versions below $min_considered_iis_version are invalid
if (1 == version_compare($sys_iis_version, $min_considered_iis_version, '<')) {
$retval = -1;
}
// supported version check overrides default unsupported
foreach ($supported_iis_versions as $ver) {
if (1 == version_compare($sys_iis_version, $ver, 'eq') || strpos($sys_iis_version, $ver) !== false) {
$retval = 1;
break;
}
}
// unsupported version check overrides default unsupported
foreach ($unsupported_iis_versions as $ver) {
if (1 == version_compare($sys_iis_version, $ver, 'eq') && strpos($sys_iis_version, $ver) !== false) {
$retval = 0;
break;
}
}
// invalid version check overrides default unsupported
foreach ($invalid_iis_versions as $ver) {
if (1 == version_compare($sys_iis_version, $ver, 'eq') && strpos($sys_iis_version, $ver) !== false) {
$retval = -1;
break;
}
}
return $retval;
}
function pre_login_check()
{
global $action, $login_error;
if (!empty($action) && $action == 'Login') {
if (!empty($login_error)) {
$login_error = htmlentities($login_error);
$login_error = str_replace(array('&lt;pre&gt;', '&lt;/pre&gt;', "\r\n", "\n"), '<br>', $login_error);
$_SESSION['login_error'] = $login_error;
echo '<script>
function set_focus() {}
if(document.getElementById("post_error")) {
document.getElementById("post_error").innerHTML="' . $login_error . '";
document.getElementById("cant_login").value=1;
document.getElementById("login_button").disabled = true;
document.getElementById("user_name").disabled = true;
}
</script>';
}
}
}
/**
* Like exit() but will throw an exception if called during tests.
*
* This is to avoid exit() stopping the test suite without us noticing.
*
* @param int|string $status
* @throws Exception
*/
function suite_exit($status = 0)
{
if (defined('SUITE_PHPUNIT_RUNNER'))
throw new Exception("exit() called during tests with status: $status");
else
exit($status);
}
function sugar_cleanup($exit = false)
{
static $called = false;
if ($called) {
return;
}
$called = true;
set_include_path(realpath(dirname(__FILE__) . '/..') . PATH_SEPARATOR . get_include_path());
chdir(realpath(dirname(__FILE__) . '/..'));
global $sugar_config;
require_once 'include/utils/LogicHook.php';
LogicHook::initialize();
$GLOBALS['logic_hook']->call_custom_logic('', 'server_round_trip');
//added this check to avoid errors during install.
if (empty($sugar_config['dbconfig'])) {
if ($exit) {
suite_exit();
}
return;
}
if (!class_exists('Tracker', true)) {
require_once 'modules/Trackers/Tracker.php';
}
Tracker::logPage();
// Now write the cached tracker_queries
if (!empty($GLOBALS['savePreferencesToDB']) && $GLOBALS['savePreferencesToDB']) {
if (isset($GLOBALS['current_user']) && $GLOBALS['current_user'] instanceof User) {
$GLOBALS['current_user']->savePreferencesToDB();
}
}
//check to see if this is not an `ajax call AND the user preference error flag is set
if (
(isset($_SESSION['USER_PREFRENCE_ERRORS']) && $_SESSION['USER_PREFRENCE_ERRORS']) && ($_REQUEST['action'] != 'modulelistmenu' && $_REQUEST['action'] != 'DynamicAction') && ($_REQUEST['action'] != 'favorites' && $_REQUEST['action'] != 'DynamicAction') && (empty($_REQUEST['to_pdf']) || !$_REQUEST['to_pdf']) && (empty($_REQUEST['sugar_body_only']) || !$_REQUEST['sugar_body_only'])
) {
global $app_strings;
//this is not an ajax call and the user preference error flag is set, so reset the flag and print js to flash message
$err_mess = $app_strings['ERROR_USER_PREFS'];
$_SESSION['USER_PREFRENCE_ERRORS'] = false;
echo "
<script>
ajaxStatus.flashStatus('$err_mess',7000);
</script>";
}
pre_login_check();
if (class_exists('DBManagerFactory')) {
$db = DBManagerFactory::getInstance();
$db->disconnect();
if ($exit) {
suite_exit();
}
}
}
register_shutdown_function('sugar_cleanup');
/*
check_logic_hook - checks to see if your custom logic is in the logic file
if not, it will add it. If the file isn't built yet, it will create the file
*/
function check_logic_hook_file($module_name, $event, $action_array)
{
require_once 'include/utils/logic_utils.php';
$add_logic = false;
if (file_exists("custom/modules/$module_name/logic_hooks.php")) {
$hook_array = get_hook_array($module_name);
if (check_existing_element($hook_array, $event, $action_array) == true) {
//the hook at hand is present, so do nothing
} else {
$add_logic = true;
$logic_count = 0;
if (!empty($hook_array[$event])) {
$logic_count = count($hook_array[$event]);
}
if ($action_array[0] == '') {
$action_array[0] = $logic_count + 1;
}
$hook_array[$event][] = $action_array;
}
//end if the file exists already
} else {
$add_logic = true;
if ($action_array[0] == '') {
$action_array[0] = 1;
}
$hook_array = array();
$hook_array[$event][] = $action_array;
//end if else file exists already
}
if ($add_logic == true) {
//reorder array by element[0]
//$hook_array = reorder_array($hook_array, $event);
//!!!Finish this above TODO
$new_contents = replace_or_add_logic_type($hook_array);
write_logic_file($module_name, $new_contents);
//end if add_element is true
}
//end function check_logic_hook_file
}
function remove_logic_hook($module_name, $event, $action_array)
{
require_once 'include/utils/logic_utils.php';
$add_logic = false;
if (file_exists('custom/modules/' . $module_name . '/logic_hooks.php')) {
// The file exists, let's make sure the hook is there
$hook_array = get_hook_array($module_name);
if (check_existing_element($hook_array, $event, $action_array) == true) {
// The hook is there, time to take it out.
foreach ($hook_array[$event] as $i => $hook) {
// We don't do a full comparison below just in case the filename changes
if ($hook[0] == $action_array[0] && $hook[1] == $action_array[1] && $hook[3] == $action_array[3] && $hook[4] == $action_array[4]
) {
unset($hook_array[$event][$i]);
}
}
$new_contents = replace_or_add_logic_type($hook_array);
write_logic_file($module_name, $new_contents);
}
}
}
function display_stack_trace($textOnly = false)
{
$stack = debug_backtrace();
echo "\n\n display_stack_trace caller, file: " . $stack[0]['file'] . ' line#: ' . $stack[0]['line'];
if (!$textOnly) {
echo '<br>';
}
$first = true;
$out = '';
foreach ($stack as $item) {
$file = '';
$class = '';
$line = '';
$function = '';
if (isset($item['file'])) {
$file = $item['file'];
}
if (isset($item['class'])) {
$class = $item['class'];
}
if (isset($item['line'])) {
$line = $item['line'];
}
if (isset($item['function'])) {
$function = $item['function'];
}
if (!$first) {
if (!$textOnly) {
$out .= '<font color="black"><b>';
}
$out .= $file;
if (!$textOnly) {
$out .= '</b></font><font color="blue">';
}
$out .= "[L:{$line}]";
if (!$textOnly) {
$out .= '</font><font color="red">';
}
$out .= "({$class}:{$function})";
if (!$textOnly) {
$out .= '</font><br>';
} else {
$out .= "\n";
}
} else {
$first = false;
}
}
echo $out;
return $out;
}
function StackTraceErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
{
$error_msg = " $errstr occurred in <b>$errfile</b> on line $errline [" . date('Y-m-d H:i:s') . ']';
switch ($errno) {
// case 2048:
// return; //depricated we have lots of these ignore them
case E_USER_NOTICE:
$type = 'User notice';
// no break
case E_NOTICE:
$type = 'Notice';
$halt_script = false;
break;
case E_USER_WARNING:
$type = 'User warning';
// no break
case E_COMPILE_WARNING:
$type = 'Compile warning';
// no break
case E_CORE_WARNING:
$type = 'Core warning';
// no break
case E_WARNING:
$type = 'Warning';
$halt_script = false;
break;
case E_USER_ERROR:
$type = 'User error';
// no break
case E_COMPILE_ERROR:
$type = 'Compile error';
// no break
case E_CORE_ERROR:
$type = 'Core error';
// no break
case E_ERROR:
$type = 'Error';
$halt_script = true;
break;
case E_PARSE:
$type = 'Parse Error';
$halt_script = true;
break;
default:
//don't know what it is might not be so bad
$type = "Unknown Error ($errno)";
$halt_script = false;
break;
}
$error_msg = '<b>[' . $type . ']</b> ' . $error_msg;
echo $error_msg;
$trace = display_stack_trace();
\SuiteCRM\ErrorMessage::log("Catch an error: $error_msg \nTrace info:\n" . $trace);
if ($halt_script) {
exit(1);
}
}
if (isset($sugar_config['stack_trace_errors']) && $sugar_config['stack_trace_errors']) {
set_error_handler('StackTraceErrorHandler');
}
function get_sub_cookies($name)
{
$cookies = array();
if (isset($_COOKIE[$name])) {
$subs = explode('#', $_COOKIE[$name]);
foreach ($subs as $cookie) {
if (!empty($cookie)) {
$cookie = explode('=', $cookie);
$cookies[$cookie[0]] = $cookie[1];
}
}
}
return $cookies;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function mark_delete_components($sub_object_array, $run_second_level = false, $sub_sub_array = '')
{
if (!empty($sub_object_array)) {
foreach ($sub_object_array as $sub_object) {
//run_second level is set to true if you need to remove sub-sub components
if ($run_second_level == true) {
mark_delete_components($sub_object->get_linked_beans($sub_sub_array['rel_field'], $sub_sub_array['rel_module']));
//end if run_second_level is true
}
$sub_object->mark_deleted($sub_object->id);
//end foreach sub component
}
//end if this is not empty
}
//end function mark_delete_components
}
/**
* Translates php.ini memory values into bytes.
* For example, an input value of '8M' will return 8388608.
* 8M is 8 mebibytes, 1 mebibyte is 1,048,576 bytes or 2^20 bytes.
*
* @param string $val A string like '8M'.
* @return integer The number of bytes represented by that string.
*/
function return_bytes($val)
{
$val = trim($val);
$last = strtolower($val[strlen($val) - 1]);
$val = preg_replace("/[^0-9,.]/", "", $val);
switch ($last) {
case 'g':
$val *= 1024;
// no break
case 'm':
$val *= 1024;
// no break
case 'k':
$val *= 1024;
}
return $val;
}
/**
* Adds the href HTML tags around any URL in the $string.
*/
function url2html($string)
{
$return_string = preg_replace('/(\w+:\/\/)(\S+)/', ' <a href="\\1\\2" target="_new" style="font-weight: normal;">\\1\\2</a>', $string);
return $return_string;
}
/**
* tries to determine whether the Host machine is a Windows machine.
*/
function is_windows()
{
static $is_windows = null;
if (!isset($is_windows)) {
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) == 'WIN';
}
return $is_windows;
}
/**
* equivalent for windows filesystem for PHP's is_writable().
*
* @param string file Full path to the file/dir
*
* @return bool true if writable
*/
function is_writable_windows($file)
{
if ($file[strlen($file) - 1] == '/') {
return is_writable_windows($file . uniqid(mt_rand()) . '.tmp');
}
// the assumption here is that Windows has an inherited permissions scheme
// any file that is a descendant of an unwritable directory will inherit
// that property and will trigger a failure below.
if (is_dir($file)) {
return true;
}
$file = str_replace('/', '\\', $file);
if (file_exists($file)) {
if (!($f = @sugar_fopen($file, 'r+'))) {
return false;
}
fclose($f);
return true;
}
if (!($f = @sugar_fopen($file, 'w'))) {
return false;
}
fclose($f);
unlink($file);
return true;
}
/**
* best guesses Timezone based on webserver's TZ settings.
*/
function lookupTimezone($userOffset = 0)
{
return TimeDate::guessTimezone($userOffset);
}
function convert_module_to_singular($module_array)
{
global $beanList;
foreach ($module_array as $key => $value) {
if (!empty($beanList[$value])) {
$module_array[$key] = $beanList[$value];
}
if ($value == 'Cases') {
$module_array[$key] = 'Case';
}
if ($key == 'projecttask') {
$module_array['ProjectTask'] = 'Project Task';
unset($module_array[$key]);
}
}
return $module_array;
//end function convert_module_to_singular
}
/*
* Given the bean_name which may be plural or singular return the singular
* bean_name. This is important when you need to include files.
*/
function get_singular_bean_name($bean_name)
{
global $beanFiles, $beanList;
if (array_key_exists($bean_name, $beanList)) {
return $beanList[$bean_name];
}
return $bean_name;
}
/*
* Given the potential module name (singular name, renamed module name)
* Return the real internal module name.
*/
function get_module_from_singular($singular)
{
// find the internal module name for a singular name
if (isset($GLOBALS['app_list_strings']['moduleListSingular'])) {
$singular_modules = $GLOBALS['app_list_strings']['moduleListSingular'];
foreach ($singular_modules as $mod_name => $sin_name) {
if ($singular == $sin_name and $mod_name != $sin_name) {
return $mod_name;
}
}
}
// find the internal module name for a renamed module
if (isset($GLOBALS['app_list_strings']['moduleList'])) {
$moduleList = $GLOBALS['app_list_strings']['moduleList'];
foreach ($moduleList as $mod_name => $name) {
if ($singular == $name and $mod_name != $name) {
return $mod_name;
}
}
}
// if it's not a singular name, nor a renamed name, return the original value
return $singular;
}
function get_label($label_tag, $temp_module_strings)
{
global $app_strings;
if (!empty($temp_module_strings[$label_tag])) {
$label_name = $temp_module_strings[$label_tag];
} else {
if (!empty($app_strings[$label_tag])) {
$label_name = $app_strings[$label_tag];
} else {
$label_name = $label_tag;
}
}
return $label_name;
//end function get_label
}
function search_filter_rel_info(&$focus, $tar_rel_module, $relationship_name)
{
$rel_list = array();
foreach ($focus->relationship_fields as $rel_key => $rel_value) {
if ($rel_value == $relationship_name) {
$temp_bean = BeanFactory::getBean($tar_rel_module, $focus->$rel_key);
if ($temp_bean) {
$rel_list[] = $temp_bean;
return $rel_list;
}
}
}
foreach ($focus->field_defs as $field_name => $field_def) {
//Check if the relationship_name matches a "relate" field
if (!empty($field_def['type']) && $field_def['type'] == 'relate' && !empty($field_def['id_name']) && !empty($focus->field_defs[$field_def['id_name']]) && !empty($focus->field_defs[$field_def['id_name']]['relationship']) && $focus->field_defs[$field_def['id_name']]['relationship'] == $relationship_name
) {
$temp_bean = BeanFactory::getBean($tar_rel_module, $field_def['id_name']);
if ($temp_bean) {
$rel_list[] = $temp_bean;
return $rel_list;
}
//Check if the relationship_name matches a "link" in a relate field
} elseif (!empty($rel_value['link']) && !empty($rel_value['id_name']) && $rel_value['link'] == $relationship_name) {
$temp_bean = BeanFactory::getBean($tar_rel_module, $rel_value['id_name']);
if ($temp_bean) {
$rel_list[] = $temp_bean;
return $rel_list;
}
}
}
// special case for unlisted parent-type relationships
if (!empty($focus->parent_type) && $focus->parent_type == $tar_rel_module && !empty($focus->parent_id)) {
$temp_bean = BeanFactory::getBean($tar_rel_module, $focus->parent_id);
if ($temp_bean) {
$rel_list[] = $temp_bean;
return $rel_list;
}
}
return $rel_list;
//end function search_filter_rel_info
}
/**
* @param $module_name
* @return mixed
*/
function get_module_info($module_name)
{
return BeanFactory::getBean($module_name);
}
/**
* In order to have one place to obtain the proper object name. aCase for example causes issues throughout the application.
*
* @param string $moduleName
*/
function get_valid_bean_name($module_name)
{
global $beanList;
$vardef_name = $beanList[$module_name];
if ($vardef_name == 'aCase') {
$bean_name = 'Case';
} else {
$bean_name = $vardef_name;
}
return $bean_name;
}
function checkAuthUserStatus()
{
//authUserStatus();
}
/**
* This function returns an array of phpinfo() results that can be parsed and
* used to figure out what version we run, what modules are compiled in, etc.
*
* @param $level int info level constant (1,2,4,8...64);
*
* @return $returnInfo array array of info about the PHP environment
*
* @author original by "code at adspeed dot com" Fron php.net
* @author customized for Sugar by Chris N.
*/
function getPhpInfo($level = -1)
{
/* Name (constant) Value Description
INFO_GENERAL 1 The configuration line, php.ini location, build date, Web Server, System and more.
INFO_CREDITS 2 PHP Credits. See also phpcredits().
INFO_CONFIGURATION 4 Current Local and Master values for PHP directives. See also ini_get().
INFO_MODULES 8 Loaded modules and their respective settings. See also get_loaded_extensions().
INFO_ENVIRONMENT 16 Environment Variable information that's also available in $_ENV.
INFO_VARIABLES 32 Shows all predefined variables from EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE 64 PHP License information. See also the license FAQ.
INFO_ALL -1 Shows all of the above. This is the default value.
*/
ob_start();
phpinfo($level);
$phpinfo = ob_get_contents();
ob_end_clean();
$phpinfo = strip_tags($phpinfo, '<h1><h2><th><td>');
$phpinfo = preg_replace('/<th[^>]*>([^<]+)<\/th>/', '<info>\\1</info>', $phpinfo);
$phpinfo = preg_replace('/<td[^>]*>([^<]+)<\/td>/', '<info>\\1</info>', $phpinfo);
$parsedInfo = preg_split('/(<h.?>[^<]+<\/h.>)/', $phpinfo, -1, PREG_SPLIT_DELIM_CAPTURE);
$match = '';
$version = '';
$returnInfo = array();
if (preg_match('/<h1 class\=\"p\">PHP Version ([^<]+)<\/h1>/', $phpinfo, $version)) {
$returnInfo['PHP Version'] = $version[1];
}
for ($i = 1; $i < count($parsedInfo); ++$i) {
if (preg_match('/<h.>([^<]+)<\/h.>/', $parsedInfo[$i], $match)) {
$vName = trim($match[1]);
$parsedInfo2 = explode("\n", $parsedInfo[$i + 1]);
foreach ($parsedInfo2 as $vOne) {
$vPat = '<info>([^<]+)<\/info>';
$vPat3 = "/$vPat\s*$vPat\s*$vPat/";
$vPat2 = "/$vPat\s*$vPat/";
if (preg_match($vPat3, $vOne, $match)) { // 3cols
$returnInfo[$vName][trim($match[1])] = array(trim($match[2]), trim($match[3]));
} elseif (preg_match($vPat2, $vOne, $match)) { // 2cols
$returnInfo[$vName][trim($match[1])] = trim($match[2]);
}
}
} elseif (true) {
}
}
return $returnInfo;
}
/**
* This function will take a string that has tokens like {0}, {1} and will replace
* those tokens with the args provided.
*
* @param $format string to format
* @param $args args to replace
*
* @return $result a formatted string
*/
function string_format($format, $args, $escape = true)
{
$result = $format;
/* Bug47277 fix.
* If args array has only one argument, and it's empty, so empty single quotes are used '' . That's because
* IN () fails and IN ('') works.
*/
if (count($args) == 1) {
reset($args);
$singleArgument = current($args);
if (empty($singleArgument)) {
return str_replace('{0}', "''", $result);
}
}
/* End of fix */
if ($escape) {
$db = DBManagerFactory::getInstance();
}
for ($i = 0; $i < count($args); ++$i) {
if (strpos($args[$i], ',') !== false) {
$values = explode(',', $args[$i]);
if ($escape) {
foreach ($values as &$value) {
$value = $db->quote($value);
}
}
$args[$i] = implode("','", $values);
$result = str_replace('{'.$i.'}', $args[$i], $result);
}
else if ($escape){
$result = str_replace('{'.$i.'}', $db->quote($args[$i]), $result);
}
else{
$result = str_replace('{'.$i.'}', $args[$i], $result);
}
}
return $result;
}
/**
* Generate a string for displaying a unique identifier that is composed
* of a system_id and number. This is use to allow us to generate quote
* numbers using a DB auto-increment key from offline clients and still
* have the number be unique (since it is modified by the system_id.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @param $num of bean
* @param $system_id from system
*
* @return $result a formatted string
*/
function format_number_display($num, $system_id)
{
global $sugar_config;
if (isset($num) && !empty($num)) {
$num = unformat_number($num);
if (isset($system_id) && $system_id == 1) {
return sprintf('%d', $num);
}
return sprintf('%d-%d', $num, $system_id);
}
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function checkLoginUserStatus()
{
}
/**
* This function will take a number and system_id and format.
*
* @param $url URL containing host to append port
* @param $port the port number - if '' is passed, no change to url
*
* @return $resulturl the new URL with the port appended to the host
*/
function appendPortToHost($url, $port)
{
$resulturl = $url;
// if no port, don't change the url
if ($port != '') {
$split = explode('/', $url);
//check if it starts with http, in case they didn't include that in url
if (str_begin($url, 'http')) {
//third index ($split[2]) will be the host
$split[2] .= ':' . $port;
} else {
// otherwise assumed to start with host name
//first index ($split[0]) will be the host
$split[0] .= ':' . $port;
}
$resulturl = implode('/', $split);
}
return $resulturl;
}
/**
* Singleton to return JSON object.
*
* @return JSON object
*/
function getJSONobj()
{
static $json = null;
if (!isset($json)) {
require_once 'include/JSON.php';
$json = new JSON();
}
return $json;
}
require_once 'include/utils/db_utils.php';
/**
* Set default php.ini settings for entry points.
*/
function setPhpIniSettings()
{
// zlib module
// Bug 37579 - Comment out force enabling zlib.output_compression, since it can cause problems on certain hosts
/*
if(function_exists('gzclose') && headers_sent() == false) {
ini_set('zlib.output_compression', 1);
}
*/
// mbstring module
//nsingh: breaks zip/unzip functionality. Commenting out 4/23/08
/* if(function_exists('mb_strlen')) {
ini_set('mbstring.func_overload', 7);
ini_set('mbstring.internal_encoding', 'UTF-8');
} */
// http://us3.php.net/manual/en/ref.pcre.php#ini.pcre.backtrack-limit
// starting with 5.2.0, backtrack_limit breaks JSON decoding
$backtrack_limit = ini_get('pcre.backtrack_limit');
if (!empty($backtrack_limit)) {
ini_set('pcre.backtrack_limit', '-1');
}
}
/**
* Identical to sugarArrayMerge but with some speed improvements and used specifically to merge
* language files. Language file merges do not need to account for null values so we can get some
* performance increases by using this specialized function. Note this merge function does not properly
* handle null values.
*
* @param $gimp
* @param $dom
*
* @return array
*/
function sugarLangArrayMerge($gimp, $dom)
{
if (is_array($gimp) && is_array($dom)) {
foreach ($dom as $domKey => $domVal) {
if (isset($gimp[$domKey])) {
if (is_array($domVal)) {
$tempArr = array();
foreach ($domVal as $domArrKey => $domArrVal) {
$tempArr[$domArrKey] = $domArrVal;
}
foreach ($gimp[$domKey] as $gimpArrKey => $gimpArrVal) {
if (!isset($tempArr[$gimpArrKey])) {
$tempArr[$gimpArrKey] = $gimpArrVal;
}
}
$gimp[$domKey] = $tempArr;
} else {
$gimp[$domKey] = $domVal;
}
} else {
$gimp[$domKey] = $domVal;
}
}
} // if the passed value for gimp isn't an array, then return the $dom
elseif (is_array($dom)) {
return $dom;
}
return $gimp;
}
/**
* like array_merge() but will handle array elements that are themselves arrays;
* PHP's version just overwrites the element with the new one.
*
* @internal Note that this function deviates from the internal array_merge()
* functions in that it does does not treat numeric keys differently
* than string keys. Additionally, it deviates from
* array_merge_recursive() by not creating an array when like values
* found.
*
* @param array gimp the array whose values will be overloaded
* @param array dom the array whose values will pwn the gimp's
*
* @return array beaten gimp
*/
function sugarArrayMerge($gimp, $dom)
{
if (is_array($gimp) && is_array($dom)) {
foreach ($dom as $domKey => $domVal) {
if (array_key_exists($domKey, $gimp)) {
if (is_array($domVal)) {
$tempArr = array();
foreach ($domVal as $domArrKey => $domArrVal) {
$tempArr[$domArrKey] = $domArrVal;
}
foreach ($gimp[$domKey] as $gimpArrKey => $gimpArrVal) {
if (!array_key_exists($gimpArrKey, $tempArr)) {
$tempArr[$gimpArrKey] = $gimpArrVal;
}
}
$gimp[$domKey] = $tempArr;
} else {
$gimp[$domKey] = $domVal;
}
} else {
$gimp[$domKey] = $domVal;
}
}
} // if the passed value for gimp isn't an array, then return the $dom
elseif (is_array($dom)) {
return $dom;
}
return $gimp;
}
/**
* Similiar to sugarArrayMerge except arrays of N depth are merged.
*
* @param array gimp the array whose values will be overloaded
* @param array dom the array whose values will pwn the gimp's
*
* @return array beaten gimp
*/
function sugarArrayMergeRecursive($gimp, $dom)
{
if (is_array($gimp) && is_array($dom)) {
foreach ($dom as $domKey => $domVal) {
if (array_key_exists($domKey, $gimp)) {
if (is_array($domVal) && is_array($gimp[$domKey])) {
$gimp[$domKey] = sugarArrayMergeRecursive($gimp[$domKey], $domVal);
} else {
$gimp[$domKey] = $domVal;
}
} else {
$gimp[$domKey] = $domVal;
}
}
} // if the passed value for gimp isn't an array, then return the $dom
elseif (is_array($dom)) {
return $dom;
}
return $gimp;
}
/**
* Finds the correctly working versions of PHP-JSON.
* @deprecated This function is unused and will be removed in a future release.
*
* @return bool True if NOT found or WRONG version
*/
function returnPhpJsonStatus()
{
if (function_exists('json_encode')) {
$phpInfo = getPhpInfo(8);
return version_compare($phpInfo['json']['json version'], '1.1.1', '<');
}
return true; // not found
}
/**
* getTrackerSubstring.
*
* Returns a [number]-char or less string for the Tracker to display in the header
* based on the tracker_max_display_length setting in config.php. If not set,
* or invalid length, then defaults to 15 for COM editions, 30 for others.
*
* @param string name field for a given Object
*
* @return string [number]-char formatted string if length of string exceeds the max allowed
*/
function getTrackerSubstring($name)
{
static $max_tracker_item_length;
//Trim the name
$name = html_entity_decode($name, ENT_QUOTES, 'UTF-8');
$strlen = function_exists('mb_strlen') ? mb_strlen($name) : strlen($name);
global $sugar_config;
if (!isset($max_tracker_item_length)) {
if (isset($sugar_config['tracker_max_display_length'])) {
$max_tracker_item_length = (is_int($sugar_config['tracker_max_display_length']) && $sugar_config['tracker_max_display_length'] > 0 && $sugar_config['tracker_max_display_length'] < 50) ? $sugar_config['tracker_max_display_length'] : 15;
} else {
$max_tracker_item_length = 15;
}
}
if ($strlen > $max_tracker_item_length) {
$chopped = function_exists('mb_substr') ? mb_substr($name, 0, $max_tracker_item_length - 3, 'UTF-8') : substr($name, 0, $max_tracker_item_length - 3);
$chopped .= '...';
} else {
$chopped = $name;
}
return $chopped;
}
/**
* @param array $field_list
* @param array $values
* @param array $bean
* @param bool $add_custom_fields
* @param string $module
* @return array
*/
function generate_search_where(
$field_list,
$values,
&$bean = null,
$add_custom_fields = false,
$module = ''
) {
$where_clauses = array();
$like_char = '%';
$table_name = $bean->object_name;
foreach ($field_list[$module] as $field => $parms) {
if (isset($values[$field]) && $values[$field] != '') {
$operator = 'like';
if (!empty($parms['operator'])) {
$operator = $parms['operator'];
}
if (is_array($values[$field])) {
$operator = 'in';
$field_value = '';
foreach ($values[$field] as $key => $val) {
if ($val != ' ' and $val != '') {
if (!empty($field_value)) {
$field_value .= ',';
}
$field_value .= "'" . DBManagerFactory::getInstance()->quote($val) . "'";
}
}
} else {
$field_value = DBManagerFactory::getInstance()->quote($values[$field]);
}
//set db_fields array.
if (!isset($parms['db_field'])) {
$parms['db_field'] = array($field);
}
if (isset($parms['my_items']) and $parms['my_items'] == true) {
global $current_user;
$field_value = DBManagerFactory::getInstance()->quote($current_user->id);
$operator = '=';
}
$where = '';
$itr = 0;
if ($field_value != '') {
foreach ($parms['db_field'] as $db_field) {
if (strstr($db_field, '.') === false) {
$db_field = $bean->table_name . '.' . $db_field;
}
if (DBManagerFactory::getInstance()->supports('case_sensitive') && isset($parms['query_type']) && $parms['query_type'] == 'case_insensitive') {
$db_field = 'upper(' . $db_field . ')';
$field_value = strtoupper($field_value);
}
++$itr;
if (!empty($where)) {
$where .= ' OR ';
}
switch (strtolower($operator)) {
case 'like':
$where .= $db_field . " like '" . $field_value . $like_char . "'";
break;
case 'in':
$where .= $db_field . ' in (' . $field_value . ')';
break;
case '=':
$where .= $db_field . " = '" . $field_value . "'";
break;
}
}
}
if (!empty($where)) {
if ($itr > 1) {
array_push($where_clauses, '( ' . $where . ' )');
} else {
array_push($where_clauses, $where);
}
}
}
}
if ($add_custom_fields) {
require_once 'modules/DynamicFields/DynamicField.php';
$bean->setupCustomFields($module);
$bean->custom_fields->setWhereClauses($where_clauses);
}
return $where_clauses;
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function add_quotes($str)
{
return "'{$str}'";
}
/**
* This function will rebuild the config file.
*
* @param $sugar_config
* @param $sugar_version
*
* @return bool true if successful
*/
function rebuildConfigFile($sugar_config, $sugar_version)
{
// add defaults to missing values of in-memory sugar_config
$sugar_config = sugarArrayMerge(get_sugar_config_defaults(), $sugar_config);
// need to override version with default no matter what
$sugar_config['sugar_version'] = $sugar_version;
ksort($sugar_config);
if (write_array_to_file('sugar_config', $sugar_config, 'config.php')) {
return true;
}
return false;
}
/**
* Loads clean configuration, not overridden by config_override.php.
*
* @return array
*/
function loadCleanConfig()
{
$sugar_config = array();
require 'config.php';
return $sugar_config;
}
/**
* getJavascriptSiteURL
* This function returns a URL for the client javascript calls to access
* the site. It uses $_SERVER['HTTP_REFERER'] in the event that Proxy servers
* are used to access the site. Thus, the hostname in the URL returned may
* not always match that of $sugar_config['site_url']. Basically, the
* assumption is that however the user accessed the website is how they
* will continue to with subsequent javascript requests. If the variable
* $_SERVER['HTTP_REFERER'] is not found then we default to old algorithm.
*
* @return $site_url The url used to refer to the website
*/
function getJavascriptSiteURL()
{
global $sugar_config;
if (!empty($_SERVER['HTTP_REFERER'])) {
$url = parse_url($_SERVER['HTTP_REFERER']);
$replacement_url = $url['scheme'] . '://' . $url['host'];
if (!empty($url['port'])) {
$replacement_url .= ':' . $url['port'];
}
$site_url = preg_replace('/^http[s]?\:\/\/[^\/]+/', $replacement_url, $sugar_config['site_url']);
} else {
$site_url = preg_replace('/^http(s)?\:\/\/[^\/]+/', 'http$1://' . $_SERVER['HTTP_HOST'], $sugar_config['site_url']);
if (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') {
$site_url = preg_replace('/^http\:/', 'https:', $site_url);
}
}
$GLOBALS['log']->debug('getJavascriptSiteURL(), site_url=' . $site_url);
return $site_url;
}
/**
* Works nicely with array_map() -- can be used to wrap single quotes around
* each element in an array.
*
* @deprecated This function is unused and will be removed in a future release.
*/
function add_squotes($str)
{
return "'" . $str . "'";
}
/**
* Recursive function to count the number of levels within an array.
* @deprecated This function is unused and will be removed in a future release.
*/
function array_depth($array, $depth_count = -1, $depth_array = array())
{
++$depth_count;
if (is_array($array)) {
foreach ($array as $key => $value) {
$depth_array[] = array_depth($value, $depth_count);
}
} else {
return $depth_count;
}
foreach ($depth_array as $value) {
$depth_count = $value > $depth_count ? $value : $depth_count;
}
return $depth_count;
}
/**
* Creates a new Group User.
*
* @param string $name Name of Group User
*
* @return string GUID of new Group User
*/
function createGroupUser($name)
{
$group = BeanFactory::newBean('Users');
$group->user_name = $name;
$group->last_name = $name;
$group->is_group = 1;
$group->deleted = 0;
$group->status = 'Active'; // cn: bug 6711
$group->setPreference('timezone', TimeDate::userTimezone());
$group->save();
return $group->id;
}
/*
* Helper function to locate an icon file given only a name
* Searches through the various paths for the file
* @param string iconFileName The filename of the icon
* @return string Relative pathname of the located icon, or '' if not found
*/
function _getIcon($iconFileName)
{
if (file_exists(SugarThemeRegistry::current()->getImagePath() . DIRECTORY_SEPARATOR . 'icon_' . $iconFileName . '.svg')) {
$iconName = "icon_{$iconFileName}.svg";
$iconFound = SugarThemeRegistry::current()->getImageURL($iconName, false);
} else {
$iconName = "icon_{$iconFileName}.gif";
$iconFound = SugarThemeRegistry::current()->getImageURL($iconName, false);
}
//First try un-ucfirst-ing the icon name
if (empty($iconFound)) {
$iconName = 'icon_' . strtolower(substr($iconFileName, 0, 1)) . substr($iconFileName, 1) . '.gif';
}
$iconFound = SugarThemeRegistry::current()->getImageURL($iconName, false);
//Next try removing the icon prefix
if (empty($iconFound)) {
$iconName = "{$iconFileName}.gif";
}
$iconFound = SugarThemeRegistry::current()->getImageURL($iconName, false);
if (empty($iconFound)) {
$iconName = '';
}
return $iconName;
}
/**
* Function to grab the correct icon image for Studio.
*
* @param string $iconFileName Name of the icon file
* @param string $altfilename Name of a fallback icon file (displayed if the imagefilename doesn't exist)
* @param string $width Width of image
* @param string $height Height of image
* @param string $align Alignment of image
* @param string $alt Alt tag of image
*
* @return string $string <img> tag with corresponding image
*/
function getStudioIcon($iconFileName = '', $altFileName = '', $width = '48', $height = '48', $align = 'baseline', $alt = '')
{
global $app_strings, $theme;
$iconName = _getIcon($iconFileName);
if (empty($iconName)) {
$iconName = _getIcon($altFileName);
if (empty($iconName)) {
return $app_strings['LBL_NO_IMAGE'];
}
}
return SugarThemeRegistry::current()->getImage($iconName, "align=\"$align\" border=\"0\"", $width, $height);
}
/**
* Function to grab the correct icon image for Dashlets Dialog.
*
* @param string $filename Location of the icon file
* @param string $module Name of the module to fall back onto if file does not exist
* @param string $width Width of image
* @param string $height Height of image
* @param string $align Alignment of image
* @param string $alt Alt tag of image
*
* @return string $string <img> tag with corresponding image
*/
function get_dashlets_dialog_icon($module = '', $width = '32', $height = '32', $align = 'absmiddle', $alt = '')
{
global $app_strings, $theme;
$iconName = _getIcon($module . '_32');
if (empty($iconName)) {
$iconName = _getIcon($module);
}
if (empty($iconName)) {
return $app_strings['LBL_NO_IMAGE'];
}
return $iconName;
}
// works nicely to change UTF8 strings that are html entities - good for PDF conversions
function html_entity_decode_utf8($string)
{
static $trans_tbl;
// replace numeric entities
//php will have issues with numbers with leading zeros, so do not include them in what we send to code2utf.
$string = preg_replace_callback('~&#x0*([0-9a-f]+);~i', function ($matches) {
return code2utf(hexdec($matches[1]));
}, $string);
$string = preg_replace_callback('~&#0*([0-9]+);~', function ($matches) {
return code2utf($matches[1]);
}, $string);
// replace literal entities
if (!isset($trans_tbl)) {
$trans_tbl = array();
foreach (get_html_translation_table(HTML_ENTITIES) as $val => $key) {
$trans_tbl[$key] = utf8_encode($val);
}
}
return strtr($string, $trans_tbl);
}
// Returns the utf string corresponding to the unicode value
function code2utf($num)
{
if ($num < 128) {
return chr($num);
}
if ($num < 2048) {
return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
}
if ($num < 65536) {
return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
}
if ($num < 2097152) {
return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
}
return '';
}
/*
* @deprecated use DBManagerFactory::isFreeTDS
*/
function is_freetds()
{
return DBManagerFactory::isFreeTDS();
}
/**
* Chart dashlet helper function that returns the correct CSS file, dependent on the current theme.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @todo this won't work completely right until we impliment css compression and combination
* for now, we'll just include the last css file found.
*
* @return chart.css file to use
*/
function chartStyle()
{
return SugarThemeRegistry::current()->getCSSURL('chart.css');
}
/**
* Chart dashlet helper functions that returns the correct XML color file for charts,
* dependent on the current theme.
*
* @deprecated This function is unused and will be removed in a future release.
* @return sugarColors.xml to use
*/
function chartColors()
{
if (SugarThemeRegistry::current()->getCSSURL('sugarColors.xml') == '') {
return SugarThemeRegistry::current()->getImageURL('sugarColors.xml');
}
return SugarThemeRegistry::current()->getCSSURL('sugarColors.xml');
}
/* End Chart Dashlet helper functions */
/**
* This function is designed to set up the php enviroment
* for AJAX requests.
*
* @deprecated This function is unused and will be removed in a future release.
*/
function ajaxInit()
{
//ini_set('display_errors', 'false');
}
/**
* Returns an absolute path from the given path, determining if it is relative or absolute.
*
* @param string $path
*
* @return string
*/
function getAbsolutePath(
$path,
$currentServer = false
) {
$path = trim($path);
// try to match absolute paths like \\server\share, /directory or c:\
if ((substr($path, 0, 2) == '\\\\') || ($path[0] == '/') || preg_match('/^[A-z]:/i', $path) || $currentServer
) {
return $path;
}
return getcwd() . '/' . $path;
}
/**
* Returns the bean object of the given module.
*
* @deprecated use SugarModule::loadBean() instead
*
* @param string $module
*
* @return object
*/
function loadBean(
$module
) {
return SugarModule::get($module)->loadBean();
}
/**
* Returns true if the application is being accessed on a touch screen interface ( like an iPad ).
*/
function isTouchScreen()
{
$ua = empty($_SERVER['HTTP_USER_AGENT']) ? 'undefined' : strtolower($_SERVER['HTTP_USER_AGENT']);
// first check if we have forced use of the touch enhanced interface
if (isset($_COOKIE['touchscreen']) && $_COOKIE['touchscreen'] == '1') {
return true;
}
// next check if we should use the touch interface with our device
if (strpos($ua, 'ipad') !== false) {
return true;
}
return false;
}
/**
* Returns the shortcut keys to access the shortcut links. Shortcut
* keys vary depending on browser versions and operating systems.
*
* @return string value of the shortcut keys
*/
function get_alt_hot_key()
{
$ua = '';
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
}
$isMac = strpos($ua, 'mac') !== false;
$isLinux = strpos($ua, 'linux') !== false;
if (!$isMac && !$isLinux && strpos($ua, 'mozilla') !== false) {
if (preg_match('/firefox\/(\d)?\./', $ua, $matches)) {
return $matches[1] < 2 ? 'Alt+' : 'Alt+Shift+';
}
}
return $isMac ? 'Ctrl+' : 'Alt+';
}
function can_start_session()
{
if (!empty($_GET[session_name()])) {
return true;
}
$session_id = session_id();
return empty($session_id) ? true : false;
}
function load_link_class($properties)
{
$class = 'Link2';
if (!empty($properties['link_class']) && !empty($properties['link_file'])) {
if (!file_exists($properties['link_file'])) {
$GLOBALS['log']->fatal('File not found: ' . $properties['link_file']);
} else {
require_once $properties['link_file'];
$class = $properties['link_class'];
}
}
return $class;
}
function inDeveloperMode()
{
return isset($GLOBALS['sugar_config']['developerMode']) && $GLOBALS['sugar_config']['developerMode'];
}
/**
* Filter the protocol list for inbound email accounts.
*
* @param array $protocol
*/
function filterInboundEmailPopSelection($protocol)
{
if (!isset($GLOBALS['sugar_config']['allow_pop_inbound']) || !$GLOBALS['sugar_config']['allow_pop_inbound']) {
if (isset($protocol['pop3'])) {
unset($protocol['pop3']);
}
} else {
$protocol['pop3'] = 'POP3';
}
return $protocol;
}
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
/**
* Get Inbound Email protocols
*
* @return array
*/
function getInboundEmailProtocols(): array
{
global $app_list_strings, $sugar_config;
$protocols = $app_list_strings['dom_email_server_type'];
if (!isset($sugar_config['allow_pop_inbound']) || !$sugar_config['allow_pop_inbound']) {
if (isset($protocols['pop3'])) {
unset($protocols['pop3']);
}
} else {
$protocols['pop3'] = 'POP3';
}
return $protocols;
}
/**
* The function is used because currently we are not supporting mbstring.func_overload
* For some user using mssql without FreeTDS, they may store multibyte charaters in varchar using latin_general collation. It cannot store so many mutilbyte characters, so we need to use strlen.
* The varchar in MySQL, Orcale, and nvarchar in FreeTDS, we can store $length mutilbyte charaters in it. we need mb_substr to keep more info.
*
* @returns the substred strings.
*/
function sugar_substr($string, $length, $charset = 'UTF-8')
{
if (mb_strlen($string, $charset) > $length) {
$string = trim(mb_substr(trim($string), 0, $length, $charset));
}
return $string;
}
/**
* The function is used because on FastCGI enviroment, the ucfirst(Chinese Characters) will produce bad charcters.
* This will work even without setting the mbstring.*encoding.
*/
function sugar_ucfirst($string, $charset = 'UTF-8')
{
return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset) . mb_substr($string, 1, mb_strlen($string), $charset);
}
/**
* Given a multienum encoded as a string, convert it to an array of strings,
* e.g. `"^Monday^,^Tuesday^,^Wednesday^,^Thursday^"` becomes
* `["Monday", "Tuesday", "Wednesday", "Thursday"]`.
*
* @param string|string[] $string The encoded multienum value. If this is already an array, the array will be returned unchanged.
* @return string[] An array of strings representing the multienum's values.
*/
function unencodeMultienum($string)
{
if (is_array($string)) {
return $string;
}
if (substr($string, 0, 1) == '^' && substr($string, -1) == '^') {
$string = substr(substr($string, 1), 0, strlen($string) - 2);
}
return explode('^,^', $string);
}
function encodeMultienumValue($arr)
{
if (!is_array($arr)) {
return $arr;
}
if (empty($arr)) {
return '';
}
$string = '^' . implode('^,^', $arr) . '^';
return $string;
}
/**
* create_export_query is used for export and massupdate
* We haven't handle the these fields: $field['type'] == 'relate' && isset($field['link']
* This function will correct the where clause and output necessary join condition for them.
*
* @param $module : the module name
* @param $searchFields : searchFields which is got after $searchForm->populateFromArray()
* @param $where : where clauses
*
* @return array
*/
function create_export_query_relate_link_patch($module, $searchFields, $where)
{
if (file_exists('modules/' . $module . '/SearchForm.html')) {
$ret_array['where'] = $where;
return $ret_array;
}
$seed = BeanFactory::getBean($module);
foreach ($seed->field_defs as $name => $field) {
if ($field['type'] == 'relate' && isset($field['link']) && !empty($searchFields[$name]['value'])) {
$seed->load_relationship($field['link']);
$params = array();
if (empty($join_type)) {
$params['join_type'] = ' LEFT JOIN ';
} else {
$params['join_type'] = $join_type;
}
if (isset($data['join_name'])) {
$params['join_table_alias'] = $field['join_name'];
} else {
$params['join_table_alias'] = 'join_' . $field['name'];
}
if (isset($data['join_link_name'])) {
$params['join_table_link_alias'] = $field['join_link_name'];
} else {
$params['join_table_link_alias'] = 'join_link_' . $field['name'];
}
$fieldLink = $field['link'];
$join = $seed->$fieldLink->getJoin($params, true);
$join_table_alias = 'join_' . $field['name'];
if (isset($field['db_concat_fields'])) {
$db_field = DBManager::concat($join_table_alias, $field['db_concat_fields']);
$where = preg_replace('/' . $field['name'] . '/', $db_field, $where);
} else {
$where = preg_replace('/(^|[\s(])' . $field['name'] . '/', '${1}' . $join_table_alias . '.' . $field['rname'], $where);
}
}
}
$ret_array = array('where' => $where, 'join' => isset($join['join']) ? $join['join'] : '');
return $ret_array;
}
/**
* We need to clear all the js cache files, including the js language files in serval places in MB. So I extract them into a util function here.
*
* @Depends on QuickRepairAndRebuild.php
* @Relate bug 30642 ,23177
*/
function clearAllJsAndJsLangFilesWithoutOutput()
{
global $current_language, $mod_strings;
$MBmodStrings = $mod_strings;
$mod_strings = return_module_language($current_language, 'Administration');
include_once 'modules/Administration/QuickRepairAndRebuild.php';
$repair = new RepairAndClear();
$repair->module_list = array();
$repair->show_output = false;
$repair->clearJsLangFiles();
$repair->clearJsFiles();
$mod_strings = $MBmodStrings;
}
/**
* This function will allow you to get a variable value from query string.
*/
function getVariableFromQueryString($variable, $string)
{
$matches = array();
$number = preg_match("/{$variable}=([a-zA-Z0-9_-]+)[&]?/", $string, $matches);
if ($number) {
return $matches[1];
}
return false;
}
/**
* should_hide_iframes
* This is a helper method to determine whether or not to show iframes (My Sites) related
* information in the application.
*
* @return bool flag indicating whether or not iframes module should be hidden
*/
function should_hide_iframes()
{
//Remove the MySites module
if (file_exists('modules/iFrames/iFrame.php')) {
if (!class_exists('iFrame')) {
require_once 'modules/iFrames/iFrame.php';
}
return false;
}
return true;
}
/**
* Given a version such as 5.5.0RC1 return RC. If we have a version such as: 5.5 then return GA.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @param string $version
* @return string RC, BETA, GA
*/
function getVersionStatus($version)
{
if (preg_match('/^[\d\.]+?([a-zA-Z]+?)[\d]*?$/si', $version, $matches)) {
return strtoupper($matches[1]);
}
return 'GA';
}
/**
* Return the numeric portion of a version. For example if passed 5.5.0RC1 then return 5.5. If given
* 5.5.1RC1 then return 5.5.1.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @param string $version
*
* @return version
*/
function getMajorMinorVersion($version)
{
if (preg_match('/^([\d\.]+).*$/si', $version, $matches2)) {
$version = $matches2[1];
$arr = explode('.', $version);
if (count($arr) > 2) {
if ($arr[2] == '0') {
$version = substr($version, 0, 3);
}
}
}
return $version;
}
/**
* Return string composed of seconds & microseconds of current time, without dots.
*
* @return string
*/
function sugar_microtime()
{
$now = explode(' ', microtime());
$unique_id = $now[1] . str_replace('.', '', $now[0]);
return $unique_id;
}
/**
* Extract urls from a piece of text.
*
* @param $string
*
* @return array of urls found in $string
*/
function getUrls($string)
{
$lines = explode('<br>', trim($string));
$urls = array();
foreach ($lines as $line) {
$regex = '/http?\:\/\/[^\" ]+/i';
preg_match_all($regex, $line, $matches);
foreach ($matches[0] as $match) {
$urls[] = $match;
}
}
return $urls;
}
/**
* Sanitize image file from hostile content.
*
* @param string $path Image file
* @param bool $jpeg Accept only JPEGs?
*/
function verify_image_file($path, $jpeg = false)
{
if (function_exists('imagepng') && function_exists('imagejpeg') && function_exists('imagecreatefromstring')) {
$img = imagecreatefromstring(file_get_contents($path));
if (!$img) {
return false;
}
$img_size = getimagesize($path);
$filetype = $img_size['mime'];
//if filetype is jpeg or if we are only allowing jpegs, create jpg image
if ($filetype == 'image/jpeg' || $jpeg) {
ob_start();
imagejpeg($img);
$image = ob_get_clean();
// not writing directly because imagejpeg does not work with streams
if (file_put_contents($path, $image)) {
return true;
}
} elseif ($filetype == 'image/png') {
// else if the filetype is png, create png
imagealphablending($img, true);
imagesavealpha($img, true);
ob_start();
imagepng($img);
$image = ob_get_clean();
if (file_put_contents($path, $image)) {
return true;
}
} else {
return false;
}
} else {
// check image manually
$fp = fopen($path, 'rb');
if (!$fp) {
return false;
}
$data = '';
// read the whole file in chunks
while (!feof($fp)) {
$data .= fread($fp, 8192);
}
fclose($fp);
if (preg_match("/<(\?php|html|!doctype|script|body|head|plaintext|table|img |pre(>| )|frameset|iframe|object|link|base|style|font|applet|meta|center|form|isindex)/i", $data, $m)) {
$GLOBALS['log']->fatal("Found {$m[0]} in $path, not allowing upload");
return false;
}
return true;
}
return false;
}
/**
* Verify uploaded image
* Verifies that image has proper extension, MIME type and doesn't contain hostile content.
*
* @param string $path Image path
* @param bool $jpeg_only Accept only JPEGs?
*/
function verify_uploaded_image($path, $jpeg_only = false)
{
$supportedExtensions = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'tmp' => 'tmp');
if (!$jpeg_only) {
$supportedExtensions['png'] = 'image/png';
}
if (!file_exists($path) || !is_file($path)) {
return false;
}
$img_size = getimagesize($path);
$filetype = $img_size['mime'];
$tmpArray = explode('.', $path);
$ext = end($tmpArray);
if (substr_count('..', $path) > 0 || ($ext !== $path && !isset($supportedExtensions[strtolower($ext)])) ||
!in_array($filetype, array_values($supportedExtensions))
) {
return false;
}
return verify_image_file($path, $jpeg_only);
}
function cmp_beans($a, $b)
{
global $sugar_web_service_order_by;
//If the order_by field is not valid, return 0;
if (empty($sugar_web_service_order_by) || !isset($a->$sugar_web_service_order_by) || !isset($b->$sugar_web_service_order_by)) {
return 0;
}
if (is_object($a->$sugar_web_service_order_by) || is_object($b->$sugar_web_service_order_by) || is_array($a->$sugar_web_service_order_by) || is_array($b->$sugar_web_service_order_by)
) {
return 0;
}
if ($a->$sugar_web_service_order_by < $b->$sugar_web_service_order_by) {
return -1;
}
return 1;
}
function order_beans($beans, $field_name)
{
//Since php 5.2 doesn't include closures, we must use a global to pass the order field to cmp_beans.
global $sugar_web_service_order_by;
$sugar_web_service_order_by = $field_name;
usort($beans, 'cmp_beans');
return $beans;
}
/**
* Return search like string
* This function takes a user input string and returns a string that contains wild card(s) that can be used in db query.
*
* @param string $str string to be searched
* @param string $like_char Database like character, usually '%'
*
* @return string Returns a string to be searched in db query
*/
function sql_like_string($str, $like_char, $wildcard = '%', $appendWildcard = true)
{
// override default wildcard character
if (isset($GLOBALS['sugar_config']['search_wildcard_char']) &&
strlen($GLOBALS['sugar_config']['search_wildcard_char']) == 1
) {
$wildcard = $GLOBALS['sugar_config']['search_wildcard_char'];
}
// add wildcard at the beginning of the search string
if (isset($GLOBALS['sugar_config']['search_wildcard_infront']) &&
$GLOBALS['sugar_config']['search_wildcard_infront'] == true
) {
if (substr($str, 0, 1) != $wildcard) {
$str = $wildcard . $str;
}
}
// add wildcard at the end of search string (default)
if ($appendWildcard) {
if (substr($str, -1) != $wildcard) {
$str .= $wildcard;
}
}
return str_replace($wildcard, $like_char, $str);
}
//check to see if custom utils exists
if (file_exists('custom/include/custom_utils.php')) {
include_once 'custom/include/custom_utils.php';
}
//check to see if custom utils exists in Extension framework
if (file_exists('custom/application/Ext/Utils/custom_utils.ext.php')) {
include_once 'custom/application/Ext/Utils/custom_utils.ext.php';
}
/**
* @param $input - the input string to sanitize
* @param int $quotes - use quotes
* @param string $charset - the default charset
* @param bool $remove - strip tags or not
*
* @return string - the sanitized string
*/
function sanitize($input, $quotes = ENT_QUOTES, $charset = 'UTF-8', $remove = false)
{
return htmlentities($input, $quotes, $charset);
}
/**
* @return string - the full text search engine name
*/
function getFTSEngineType()
{
if (isset($GLOBALS['sugar_config']['full_text_engine']) && is_array($GLOBALS['sugar_config']['full_text_engine'])) {
foreach ($GLOBALS['sugar_config']['full_text_engine'] as $name => $defs) {
return $name;
}
}
return '';
}
/**
* @deprecated This function is unused and will be removed in a future release.
*
* @param string $optionName - name of the option to be retrieved from app_list_strings
* @return array - the array to be used in option element
*/
function getFTSBoostOptions($optionName)
{
if (isset($GLOBALS['app_list_strings'][$optionName])) {
return $GLOBALS['app_list_strings'][$optionName];
}
return array();
}
/**
* utf8_recursive_encode.
*
* This function walks through an Array and recursively calls utf8_encode on the
* values of each of the elements.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @param $data Array of data to encode
*
* @return utf8 encoded Array data
*/
function utf8_recursive_encode($data)
{
$result = array();
foreach ($data as $key => $val) {
if (is_array($val)) {
$result[$key] = utf8_recursive_encode($val);
} else {
$result[$key] = utf8_encode($val);
}
}
return $result;
}
/**
* get_language_header.
*
* This is a utility function for 508 Compliance. It returns the lang=[Current Language] text string used
* inside the <html> tag. If no current language is specified, it defaults to lang='en'.
*
* @return string The lang=[Current Language] markup to insert into the <html> tag
*/
function get_language_header()
{
return isset($GLOBALS['current_language']) ? "lang='{$GLOBALS['current_language']}'" : "lang='en'";
}
/**
* get_custom_file_if_exists.
*
* This function handles the repetitive code we have where we first check if a file exists in the
* custom directory to determine whether we should load it, require it, include it, etc. This function returns the
* path of the custom file if it exists. It basically checks if custom/{$file} exists and returns this path if so;
* otherwise it return $file
*
* @param $file String of filename to check
*
* @return $file String of filename including custom directory if found
*/
function get_custom_file_if_exists($file)
{
return file_exists("custom/{$file}") ? "custom/{$file}" : $file;
}
/**
* get_help_url.
*
* This will return the URL used to redirect the user to the help documentation.
* It can be overriden completely by setting the custom_help_url or partially by setting the custom_help_base_url
* in config.php or config_override.php.
*
* @deprecated This function is unused and will be removed in a future release.
*
* @param string $send_edition
* @param string $send_version
* @param string $send_lang
* @param string $send_module
* @param string $send_action
* @param string $dev_status
* @param string $send_key
* @param string $send_anchor
*
* @return string the completed help URL
*/
function get_help_url($send_edition = '', $send_version = '', $send_lang = '', $send_module = '', $send_action = '', $dev_status = '', $send_key = '', $send_anchor = '')
{
global $sugar_config;
if (!empty($sugar_config['custom_help_url'])) {
$sendUrl = $sugar_config['custom_help_url'];
} else {
if (!empty($sugar_config['custom_help_base_url'])) {
$baseUrl = $sugar_config['custom_help_base_url'];
} else {
$baseUrl = 'http://www.sugarcrm.com/crm/product_doc.php';
}
$sendUrl = $baseUrl . "?edition={$send_edition}&version={$send_version}&lang={$send_lang}&module={$send_module}&help_action={$send_action}&status={$dev_status}&key={$send_key}";
if (!empty($send_anchor)) {
$sendUrl .= '&anchor=' . $send_anchor;
}
}
return $sendUrl;
}
/**
* generateETagHeader.
*
* This function generates the necessary cache headers for using ETags with dynamic content. You
* simply have to generate the ETag, pass it in, and the function handles the rest.
*
* @param string $etag ETag to use for this content.
*/
function generateETagHeader($etag)
{
header('cache-control:');
header('Expires: ');
header('ETag: ' . $etag);
header('Pragma:');
if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
ob_clean();
header('Status: 304 Not Modified');
header('HTTP/1.0 304 Not Modified');
die();
}
}
}
/**
* getReportNameTranslation.
*
* Translates the report name if a translation exists,
* otherwise just returns the name
*
* @param string $reportName
*
* @return string translated report name
*/
function getReportNameTranslation($reportName)
{
global $current_language;
// Used for translating reports
$mod_strings = return_module_language($current_language, 'Reports');
// Search for the report name in the default language and get the key
$key = array_search($reportName, return_module_language('', 'Reports'));
// If the key was found, use it to get a translation, otherwise just use report name
if (!empty($key)) {
$title = $mod_strings[$key];
} else {
$title = $reportName;
}
return $title;
}
/**
* Remove vars marked senstitive from array.
*
* @param array $defs
* @param SugarBean|array $data
*
* @return mixed $data without sensitive fields
*/
function clean_sensitive_data($defs, $data)
{
foreach ($defs as $field => $def) {
if (!empty($def['sensitive'])) {
if (is_array($data)) {
$data[$field] = '';
}
if ($data instanceof SugarBean) {
$data->$field = '';
}
}
}
return $data;
}
/**
* Return relations with labels for duplicates.
*
* @deprecated This function is unused and will be removed in a future release.
*/
function getDuplicateRelationListWithTitle($def, $var_def, $module)
{
global $current_language;
$select_array = array_unique($def);
if (count($select_array) < count($def)) {
$temp_module_strings = return_module_language($current_language, $module);
$temp_duplicate_array = array_diff_assoc($def, $select_array);
$temp_duplicate_array = array_merge($temp_duplicate_array, array_intersect($select_array, $temp_duplicate_array));
foreach ($temp_duplicate_array as $temp_key => $temp_value) {
// Don't add duplicate relationships
if (!empty($var_def[$temp_key]['relationship']) && array_key_exists($var_def[$temp_key]['relationship'], $select_array)) {
continue;
}
$select_array[$temp_key] = $temp_value;
}
// Add the relationship name for easier recognition
foreach ($select_array as $key => $value) {
$select_array[$key] .= ' (' . $key . ')';
}
}
asort($select_array);
return $select_array;
}
/**
* Gets the list of "*type_display*".
*
* @return array
*/
function getTypeDisplayList()
{
return array('record_type_display', 'parent_type_display', 'record_type_display_notes');
}
/**
* Breaks given string into substring according
* to 'db_concat_fields' from field definition
* and assigns values to corresponding properties
* of bean.
*
* @param SugarBean $bean
* @param array $fieldDef
* @param string $value
*/
function assignConcatenatedValue(SugarBean $bean, $fieldDef, $value)
{
$valueParts = explode(' ', $value);
$valueParts = array_filter($valueParts);
$fieldNum = count($fieldDef['db_concat_fields']);
if (count($valueParts) == 1 && $fieldDef['db_concat_fields'] == array('first_name', 'last_name')) {
$bean->last_name = $value;
} // elseif ($fieldNum >= count($valueParts))
else {
for ($i = 0; $i < $fieldNum; ++$i) {
$fieldValue = array_shift($valueParts);
$fieldName = $fieldDef['db_concat_fields'][$i];
$bean->$fieldName = $fieldValue !== false ? $fieldValue : '';
}
if (!empty($valueParts)) {
$bean->$fieldName .= ' ' . implode(' ', $valueParts);
}
}
}
/**
* Performs unserialization. Accepts all types except Objects.
*
* @param string $value Serialized value of any type except Object
*
* @return mixed False if Object, converted value for other cases
*/
function sugar_unserialize($value)
{
preg_match('/[oc]:[^:]*\d+:/i', $value, $matches);
if (count($matches)) {
return false;
}
return unserialize($value);
}
define('DEFAULT_UTIL_SUITE_ENCODING', 'UTF-8');
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_strlen($input, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_strlen')) {
return mb_strlen($input, $encoding);
}
return strlen($input);
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_substr($input, $start, $length = null, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_substr')) {
return mb_substr($input, $start, $length, $encoding);
}
return substr($input, $start, $length);
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_strtoupper($input, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_strtoupper')) {
return mb_strtoupper($input, $encoding);
}
return strtoupper($input);
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_strtolower($input, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_strtolower')) {
return mb_strtolower($input, $encoding);
}
return strtolower($input);
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_strpos($haystack, $needle, $offset = 0, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_strpos')) {
return mb_strpos($haystack, $needle, $offset, $encoding);
}
return strpos($haystack, $needle, $offset);
}
/**
* @deprecated This function is unused and will be removed in a future release.
*/
function suite_strrpos($haystack, $needle, $offset = 0, $encoding = DEFAULT_UTIL_SUITE_ENCODING)
{
if (function_exists('mb_strrpos')) {
return mb_strrpos($haystack, $needle, $offset, $encoding);
}
return strrpos($haystack, $needle, $offset);
}
/**
* @deprecated deprecated since version 7.10 please use the SuiteValidator class
*/
function isValidId($id)
{
$deprecatedMessage = 'isValidId method is deprecated please update your code';
if (isset($GLOBALS['log'])) {
$GLOBALS['log']->deprecated($deprecatedMessage);
} else {
trigger_error($deprecatedMessage, E_USER_DEPRECATED);
}
$isValidator = new \SuiteCRM\Utility\SuiteValidator();
$result = $isValidator->isValidId($id);
return $result;
}
function isValidEmailAddress($email, $message = 'Invalid email address given', $orEmpty = true, $logInvalid = 'error')
{
if ($orEmpty && !$email) {
return true;
}
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
return true;
}
if ($logInvalid) {
$trace = debug_backtrace();
$where = "Called at {$trace[1]['file']}:{$trace[1]['line']} from function {$trace[1]['function']}.";
\SuiteCRM\ErrorMessage::log("$message: [$email] $where", $logInvalid);
}
return false;
}
function displayAdminError($errorString)
{
SugarApplication::appendErrorMessage($errorString);
}
function getAppString($key)
{
global $app_strings;
if (!isset($app_strings[$key])) {
LoggerManager::getLogger()->warn('Language key not found: ' . $key);
return $key;
}
if (!$app_strings[$key]) {
LoggerManager::getLogger()->warn('Language string is empty at key: ' . $key);
return $key;
}
return $app_strings[$key];
}
function set_session_name(){
$sessionName = 'LEGACYSESSID';
if (!empty($GLOBALS['sugar_config']['session_name'])) {
$sessionName = $GLOBALS['sugar_config']['session_name'];
}
if (session_status() === PHP_SESSION_NONE) {
session_name($sessionName);
}
}
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
/**
* Check if has valid image extension
* @param string $fieldName
* @param string $value
* @return bool
*/
function has_valid_image_extension($fieldName, $name)
{
global $sugar_config;
$validExtensions = [
'gif',
'png',
'jpg',
'jpeg',
'svg'
];
if (isset($sugar_config['valid_image_ext']) && is_array($sugar_config['valid_image_ext'])){
$validExtensions = $sugar_config['valid_image_ext'];
}
return has_valid_extension($fieldName, $name, $validExtensions);
}
/**
* Check if has valid extension
* @param string $fieldName
* @param string $name
* @param array $validExtensions
* @return bool
*/
function has_valid_extension($fieldName, $name, $validExtensions)
{
if ($name === '.' || empty($name)) {
LoggerManager::getLogger()->security("Invalid ext $fieldName : '$name'.");
return false;
}
$validExtensions = array_map('strtolower', $validExtensions);
$parts = explode('.', $name);
if (empty($parts)) {
LoggerManager::getLogger()->security("Invalid ext $fieldName : '$name'.");
return false;
}
$ext = array_pop($parts);
$trimmedValue = preg_replace('/.*\.([^\.]+)$/', '\1', $ext);
if (!in_array(strtolower($trimmedValue), $validExtensions, true)) {
LoggerManager::getLogger()->security("Invalid $fieldName: '$name'.");
return false;
}
return true;
}
/**
* Check if value is one of the accepted true representations
* @param $value
* @return bool
*/
function isTrue($value): bool {
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
return $value === true || $value === 'true' || $value === 1 || $value === '1' || $value === 'on';
}
/**
* Check if value is one of the accepted false representations
* @param $value
* @return bool
*/
function isFalse($value): bool {
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
return $value === false || $value === 'false' || $value === 0 || $value === '0';
}
/**
* Get validation pattern
* @return string
*/
function get_id_validation_pattern(): string {
global $sugar_config;
$pattern = '/^[a-zA-Z0-9_-]*$/i';
if (!empty($sugar_config['id_validation_pattern'])){
$pattern = $sugar_config['id_validation_pattern'];
}
return $pattern;
}
Squashed 'public/legacy/' changes from 60ccef0448..81ce7933fd 81ce7933fd SuiteCRM 7.13.0 Release 595d2bd92b Fix saveDropDown getting called statically a70c5d1b99 Fix message deletion after auto import f57b5ede02 Fix Inbound Email allow_outbound_group_usage filtering 9d38016f59 Remove external_oauth_providers config d5b4f0025c Remove provider field from ExternalOAuthConnection d457827c7d Change ExternalOAuthProvider to use open visibility by default for group records 3a51437d3a Add null check b49d6b79a0 Fix Inbound email tests 277f2c91cb Set default on inbound emails 261dae81c1 Add group to OutboundEmailAccounts menu 3e9dbdd5de Fix ExternalOAuthConnection list view pagination and checkboxes 36cbb6a90c Fix ExternalOAuthProvider list view pagination and checkboxes fe5f0a10d6 Fix OutboundEmailAccounts list view pagination and checkboxes b9217a36e2 Fix InboundEmail list view pagination and checkboxes 83bd0024a6 Allow selecting group InboundEmails in folder management f6a9111b25 Fix inbound email relationship definition 07b3110f8a Filter listview email displayed accounts according to preferences 6c49df527a Remove code that auto-selects a group email none is selected 243a0276af Fix preferences mail folder management dropdown e7838f0bd4 Fix owner field definition in OutboundEmailAccounts db9a52a27d Fix bounce mailbox type not being properly set 14d43e1efa Fix compose emails not sending f9e3677db8 Add optional connection string to InboundEmail module cef8b2bdb6 Allow setting placeholder for varchar on editview b2d669a022 Fix group_id not being saved properly on InboundEmail 8d25cc19d8 Fix: From not populating fae3d7b629 Fix folders not clearing subscription a8e9eba917 Fix signatures not being editable after being created 1762704a28 Fix menu label in ExternalOAuthConnections module e97ddb6af0 Fix inbound_emails_external_oauth_connections relationship 2cbebdd5a9 Replace External Oauth Provider sugar_config with module 89f2cee005 Add admin menu entry for ExternalOAuthProviders dbe91ffe26 Add External providers to ExternalOAuthConnector menu 63b944e033 Add ExternalOAuthProvider module 214f0d9008 Rename ExternalOAuthProvider to ExternalOAuthProviderConnector 972356fa90 Add stringmap field c701e4c6d5 Add json_decode smarty modifier 49024376be Update Travis build to remove php 7.3 test runs c23f0e57ac Update Minimum php version to php 7.4 b5914d782e Fix #9670 - Disabling the user profile option about notification of assignments does not work c2f260e477 Clear caches used by Inline Edition 89de5b620f Fix #99568: Ignore int length when comparing vardefs in newer MySQL versions fb50e2250e ElasticSearch Indexing batch error handling 32af678e4f Fix #9473 - Missing item "Survey" in campainglog_activity_type_dom a12f4f37be Fix #9638 - Elasticsearch issue with accented characters d85d72996d Fix #9499 - Add View Survey Responses Menu item dcd3ea1091 Fix #9574 - Update method to static for module renaming c56a5b2188 Fix #9646 - Display TinyMCE in step 4 of the campaigns form wizard d99439aca1 Fix #9717 - Security Suite Record Group selector doesn't appear when duplicating records ea0b42469a Add new ACL access logic hooks be0dec47dc Refactor module access query for extendability 8361cceb60 fix #9802 - Diagnostic checkboxes 44e4f47cca SuiteCRM 7.13.0-beta Release 0d6fef782e Fix #9839 - Make Inbound Email not auditable c0b93a5d2a Fix #9839 - Align Inbound and Outbound email menu labels 3883c2cb7e Fix #9839 - Inbound email assignment fields save and detail display 0a4fbfa2a9 Fix #9839 - Inbound email filters not displaying 6fefdd79a0 Fix #9839 - OutboundEmailAccounts list filtering 3dcab78053 Fix #9839 - Hide sort fields in search modal if none is sortable 95d099d3b4 Fix #9839 - Always sort emails by date received aff7965abd Fix #9839 - Add showing sort direction when field is not manually sortable e3f7d02a65 Fix #9839 - Use previously selected email mailbox when using the navigation links 01c96bf15c Fix #9839 - Add Imap2Handler to use imap2 lib d8dee51d94 Fix #9839 - Move email list retrieval from InboundEmail to ImapHandler f798b9af4a Fix #9839 - Update InboundEmail calls to mailparser to send 2nd argument 68a8fa97dd Fix #9839 - Move stream validity check to ImapHandlers fb4f1c81ec Fix #9839 - Fix InboundEmail pagination totals dc26951a35 Fix #9839 - Use previously selected email mailbox when using the navigation links cca80e945b Fix #9839 - Move case macro input to Case module settings admin menu 0fb1075aa2 Fix #9839 - Fix undefined error in listview displayEmptyDataMessages 990e98e4bc Fix #9839 - Add support to test oauth connection in InboundEmail 7259c9ce79 Fix #9839 - Allow refreshing ExternalOAuthConnection tokens 49c5c0ee09 Fix #9839 - Make ExternalOAuthConnection sensitive fields db_encrypted 17bbeb3683 Fix #9839 - Allow admins to list Group and personal ExternalOAuthConnection 0f559a6223 Fix #9839 - Allow encrypting fields on db by setting db_encrypted 471792d75f Fix #9839 - Apply acl and group check filtering to OutboundEmailAccounts 093f08f27b Fix #9839 - Apply acl and group check filtering to InboundEmail decdd27b23 Fix #9839 - Apply acl and group check filtering to ExternalOAuthConnection 584e40cfb3 Fix #9839 - Add user acl group action check 07c5b9f021 Fix #9839 - Show no-data message on empty OutboundEmailAccounts listview b857e4feab Fix #9839 - Show no-data message on empty ExternalOAuthConnection listview 9b6a7c4fcf Fix #9839 - Validate required fields on InboundEmail folder selection 0755e4bc7e Fix #9839 - Mark fields required when changing authType in InboundEmail 55123f4d70 Fix #9839 - Show no-data message on empty InboundEmail listview 059d112349 Fix #9839 - Fix InboundEmail save a656abd069 Fix #9839 - Make getUserRoleNames a static method ae49f130a9 Fix #9839 - Add is-value-set data to password field 2964fcbebc Fix #9839 - Add option to disable listview empty data messages a5794343cb Fix #9839 - Add ExternalOAuthConnection link to admin menu 215413931c Fix #9839 - Align mail related menu entries ee9e98741d Fix #9839 - Always keep write-only fields in OutboundEmailAccounts 4e0551e9f0 Fix #9839 - Disable massupdate and export in OutboundEmailAccounts bulk actions bbf351ee5e Fix #9839 - Disable massupdate and export in InboundEmail bulkactions 6871295c66 Fix #9839 - Allow selecting auth type in InboundEmail module 9befcd0ae6 Fix #9839 - Add ExternalOAuthConnection entrypoints 2cee6f1d67 Fix #9839 - Add ExternalOAuthConnection module 70025d5b66 Fix #9839 - Add write-only display option to text fields 25e2443850 Fix #9839 - Add write-only display option to varchar fields 6be8a334b1 Fix #9839 - Allow creating personal outbound email accounts 8bff1fb237 Fix #9839 - Align Outbound email accounts views with Inbound e396b7373c Fix #9839 - Allow admin to create personal inbound accounts for users 284d0eca76 Fix #9839 - Align inbound email and outbound email list views 186d8e41e4 Fix #9839 - Add Security Groups subpanel to Outbound email accounts c07f43decb Fix #9839 - Add Security Groups subpanel to Inbound email accounts 87c9eee413 Fix #9839 - Add access checks to personal outbound email accounts 2f76e6a5f5 Fix #9839 - Add access checks to personal inbound email accounts 88adc8135b Fix #9839 - Remove email account configuration from User Settings 33feb0b1c2 Fix #9839 - Allow setting personal InboundEmail signatures 4cb0fd99aa Fix #9839 - Allow setting personal InboundEmail as default b8cc31d8dd Fix #9839 - Add security groups to OutboundEmailAccounts 70a0daba51 Fix #9839 - Tidy OutboundEmailAccounts view definitions ca171a4460 Fix #9839 - Remove email_provider_chooser from OutboundEmailAccounts f8a6105618 Fix #9839 - Add menu definition to OutboundEmailAccounts 7d6cfd6c6c Fix #9839 - Load InboundEmail stored_options into fields on load f18ec84b47 Fix #9839 - Adjust InboundEmail save to use new fields 54bfb4f72c Fix #9839 - Remove InboundEmail legacy custom views 69d008671e Fix #9839 - Add new menu entries to InboundEmail d01a196f3b Fix #9839 - Add js code for inboundEmail 701498d007 Fix #9839 - Add standard view definitions to InboundEmail b5870531ba Fix #9839 - Add fields for stored_options in InboundEmail 8c57b07591 Fix #9839 - Add inbound and outbound email menu links to Users module a8bc647662 Fix #9839 - Add combinescripts smarty plugin e4db0fbfd4 Fix #9839 - Add writeonly display mode for password fields 1cc85c2dbf Fix #9839 - Add readonly display mode for enum fields git-subtree-dir: public/legacy git-subtree-split: 81ce7933fd9cecc378154ed4eac7eaab5ec1f139
2022-12-21 11:44:57 +00:00
/**
* Check if user has group and action acls defined
* @param string $module
* @param string $action
* @return bool
*/
function has_group_action_acls_defined(string $module, string $action): bool
{
global $current_user;
$hasGroupActionAcls = true;
$groups = SecurityGroup::getUserSecurityGroups($current_user->id);
$hasGroups = !empty($groups);
$aclActions = ACLAction::getUserActions($current_user->id, false, $module, 'module', $action);
$isDefaultListACL = !empty($aclActions['isDefault']) && isTrue($aclActions['isDefault']);
if (!$hasGroups) {
$hasGroupActionAcls = false;
}
if ($isDefaultListACL) {
$hasGroupActionAcls = false;
}
return $hasGroupActionAcls;
}
/**
* Check if is value is smtp in a case-insensitive way
* @param $value
* @return bool
*/
function isSmtp($value): bool {
if (empty($value) || !is_string($value)) {
return false;
}
return strtolower($value) === 'smtp';
}
/**
* Check if is string is an allowed module name
* @param string $value
* @return bool
*/
function isAllowedModuleName(string $value): bool {
if (empty($value)) {
return false;
}
$result = preg_match("/^[\w\-\_\.]+$/", $value);
if (!empty($result)) {
return true;
}
return false;
}
/**
* @param $endpoint
* @return bool
*/
function isSelfRequest($endpoint) : bool {
$domain = 'localhost';
if (isset($_SERVER["HTTP_HOST"])) {
$domain = $_SERVER["HTTP_HOST"];
}
$siteUrl = SugarConfig::getInstance()->get('site_url');
if (empty($siteUrl)){
$siteUrl = '';
}
return stripos($endpoint, $domain) !== false || stripos($endpoint, $siteUrl) !== false;
}