mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-08-29 08:17:18 +08:00
Squashed 'public/legacy/' changes from 4e205ecf45..92c30d9960
92c30d9960 SuiteCRM 7.13.2 Release e3d6036790 Fix Surveys text labels ac66701d90 Add new modules to unit tests a3ca5cc324 Update goggle/apiclient to 2.13.0 9c346b259f Fix #9900 - Conditions doesn't recognize some of the characters set f6cc372db3 Fix #9926 - Add missing check on product image upload dc68a7164a Fix #9914 - Update dashboard.scss for dashlet options overflow 70f684abde Fix #9909 - Default empty item when creating a new Dropdown field 63fac08ea5 Fix #9883 - Security Groups do not work with modules whose name exceeds 36 characters. e3605783b5 Fix #9882 - opcache install module copy action 40a646c7f4 Fix #9871 - Javascript message error when bulk updating all user records 1a9d821ee2 Fix #9873 - Plesk php.ini disable_functions = opcache_get_status 0c6e039eb6 Fix #9835 - Case Updates save bug c1d90382b3 Fix #4646 - Hard coded messages in Surveys module 7efb6a7dd8 Fix salesagility#9750 - Receive related parameters of type dynamicenum in workflow formulas bd8f86e70a Closing count bracket before condition ec8a5e6aee Fix #9665 - Set unique id for "Reset module" button in studio 5783ac3acc Fix #9954 - Fix Campaigns parenthesis 20270e7639 FIX #9344 Error in Browsers console after adding tabs to Quickcreate: selectTabOnError git-subtree-dir: public/legacy git-subtree-split: 92c30d9960dd8da3146fcf0b09d41854026ee77f
This commit is contained in:
parent
c5f636e5bc
commit
444c2169fe
42 changed files with 368 additions and 120 deletions
|
@ -123,7 +123,7 @@ function caseUpdates(record){
|
|||
|
||||
showSubPanel('history', null, true);
|
||||
//Reload the case updates stream and history panels
|
||||
$("#LBL_AOP_CASE_UPDATES").load("index.php?module=Cases&action=DetailView&record="+record + " #LBL_AOP_CASE_UPDATES", function(){
|
||||
$("#aop_case_updates_threaded_span").load("index.php?module=Cases&action=DetailView&record="+record + " #aop_case_updates_threaded_span", function(){
|
||||
|
||||
|
||||
//Collapse all except newest update
|
||||
|
|
|
@ -35,5 +35,11 @@ class AOS_PDF_Templates extends AOS_PDF_Templates_sugar
|
|||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function cleanBean()
|
||||
{
|
||||
parent::cleanBean();
|
||||
$this->pdfheader = purify_html($this->pdfheader);
|
||||
$this->description = purify_html($this->description);
|
||||
$this->pdffooter = purify_html($this->pdffooter);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,10 +64,12 @@ class AOS_Products extends AOS_Products_sugar
|
|||
require_once('include/upload_file.php');
|
||||
$GLOBALS['log']->debug('UPLOADING PRODUCT IMAGE');
|
||||
|
||||
$imageFileName = $_FILES['uploadimage']['name'] ?? '';
|
||||
if (!has_valid_image_extension('AOS_Products Uploaded image file: ' . $imageFileName , $imageFileName)) {
|
||||
LoggerManager::getLogger()->fatal("AOS_Products save - Invalid image file ext : '$imageFileName'.");
|
||||
throw new RuntimeException('Invalid request');
|
||||
if(!empty($_FILES['uploadimage']['name'])){
|
||||
$imageFileName = $_FILES['uploadimage']['name'] ?? '';
|
||||
if (!has_valid_image_extension('AOS_Products Uploaded image file: ' . $imageFileName , $imageFileName)) {
|
||||
LoggerManager::getLogger()->fatal("AOS_Products save - Invalid image file ext : '$imageFileName'.");
|
||||
throw new RuntimeException('Invalid request');
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_FILES['uploadimage']['tmp_name']) && verify_uploaded_image($_FILES['uploadimage']['tmp_name'])) {
|
||||
|
|
|
@ -278,7 +278,7 @@ class actionComputeField extends actionBase
|
|||
if ($relationParameterTypes[$i] == actionComputeField::FORMATTED_VALUE) {
|
||||
$dataType = $entity->field_name_map[$relationParameterFields[$i]]['type'];
|
||||
|
||||
if ($dataType == 'enum') {
|
||||
if ($dataType == 'enum' || $dataType == 'dynamicenum') {
|
||||
$resolvedRelationParameters[$i] =
|
||||
$GLOBALS['app_list_strings'][$entity->field_defs[$relationParameterFields[$i]]['options']][$entity->{$relationParameterFields[$i]}];
|
||||
} else {
|
||||
|
@ -472,7 +472,7 @@ class actionComputeField extends actionBase
|
|||
|
||||
function onFieldChange$line(dropdown, valueDropdown) {
|
||||
var value = $(dropdown).find('option:selected').attr('dataType');
|
||||
if (value == 'enum' || value == 'multienum') {
|
||||
if (value == 'enum' || value == 'multienum' || value == 'dynamicenum') {
|
||||
$(valueDropdown).show();
|
||||
} else {
|
||||
$(valueDropdown).hide();
|
||||
|
|
|
@ -823,6 +823,10 @@ class AOW_WorkFlow extends Basic
|
|||
} elseif ($data['type'] == 'bool' && (!(bool)$value || strtolower($value) == 'false')) {
|
||||
$value = 0;
|
||||
}
|
||||
$type = $data['dbType'] ?? $data['type'];
|
||||
if ((strpos($type, 'char') !== false || strpos($type, 'text') !== false) && !empty($field)) {
|
||||
$field = from_html($field);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ if (strstr($focus->settings['notify_fromaddress'], 'example.com')) {
|
|||
$conf_msg .= "<tr><th scope='col' width='20%'><b>".$mod_strings['LBL_WIZ_FROM_NAME']."</b></th>"
|
||||
. " <th scope='col' width='20%'><b>".$mod_strings['LBL_WIZ_FROM_ADDRESS']."</b></th>"
|
||||
. " <th scope='col' width='20%'><b>".$mod_strings['LBL_MAIL_SENDTYPE']."</b></th>";
|
||||
if (strtolower(isSmtp($focus->settings['mail_sendtype'] ?? '')) {
|
||||
if (strtolower(isSmtp($focus->settings['mail_sendtype'] ?? ''))) {
|
||||
$conf_msg .= " <th scope='col' width='20%'><b>".$mod_strings['LBL_MAIL_SMTPSERVER']."</b></th>"
|
||||
. " <th scope='col' width='20%'><b>".$mod_strings['LBL_MAIL_SMTPUSER']."</b></th></tr>";
|
||||
} else {
|
||||
|
|
|
@ -88,6 +88,8 @@ function get_body(&$ss, $vardef)
|
|||
}
|
||||
}
|
||||
$dropdowns = array_keys($my_list_strings);
|
||||
// Adding a default empty list
|
||||
$dropdowns[] = '';
|
||||
sort($dropdowns);
|
||||
$default_dropdowns = array();
|
||||
if (!empty($vardef['options']) && !empty($my_list_strings[$vardef['options']])) {
|
||||
|
|
|
@ -90,6 +90,8 @@
|
|||
}
|
||||
}
|
||||
$dropdowns = array_keys($my_list_strings);
|
||||
// Adding a default empty list
|
||||
$dropdowns[] = '';
|
||||
sort($dropdowns);
|
||||
$default_dropdowns = array();
|
||||
if (!empty($vardef['options']) && !empty($my_list_strings[$vardef['options']])) {
|
||||
|
|
|
@ -141,9 +141,7 @@ class RSSDashlet extends Dashlet
|
|||
* @param array $req $_REQUEST
|
||||
* @return array filtered options to save
|
||||
*/
|
||||
public function saveOptions(
|
||||
array $req
|
||||
) {
|
||||
public function saveOptions($req) {
|
||||
$options = array();
|
||||
$options['title'] = $req['title'];
|
||||
$options['url'] = $req['url'];
|
||||
|
|
|
@ -76,6 +76,10 @@ class iFrameDashlet extends Dashlet
|
|||
$this->url = $options['url'];
|
||||
}
|
||||
|
||||
if (isSelfRequest($this->url)) {
|
||||
$this->url = '';
|
||||
}
|
||||
|
||||
if (empty($options['height']) || (int)$options['height'] < 1) {
|
||||
$this->height = 315;
|
||||
} else {
|
||||
|
|
|
@ -6307,7 +6307,10 @@ class InboundEmail extends SugarBean
|
|||
$service = empty($service) ? $this->getServiceString() : $service;
|
||||
$mbox = empty($mbox) ? $this->mailbox : $mbox;
|
||||
|
||||
$connectString = '{' . $this->server_url . ':' . $this->port . '/service=' . $this->protocol . $service . '}';
|
||||
$protocol = $this->protocol ?? 'imap';
|
||||
$port = $this->port ?? '143';
|
||||
|
||||
$connectString = '{' . $this->server_url . ':' . $port . '/service=' . $protocol . $service . '}';
|
||||
|
||||
if (!empty($this->connection_string)){
|
||||
$connectString = '{' . $this->connection_string . '}';
|
||||
|
|
|
@ -175,7 +175,7 @@ $mod_strings = array(
|
|||
'backBtn' => 'Return to the previous step.',
|
||||
'studioHelp' => 'Use <b>Studio</b> to determine what and how information is displayed in the modules.',
|
||||
'moduleBtn' => 'Click to edit this module.',
|
||||
'moduleHelp' => 'The components that you can customize for the module appear here.<br><br>Click an icon to select the component to edit.',
|
||||
'moduleHelp' => 'The components that you can customize for the module appear here.<br><br>Click an icon to select the component to edit.<br><br>Click <b>Reset Module</b> to remove customizations and restore to original status.',
|
||||
'fieldsBtn' => 'Create and customize <b>Fields</b> to store information in the module.',
|
||||
'labelsBtn' => 'Edit the <b>Labels</b> that display for the fields and other titles in the module.',
|
||||
'relationshipsBtn' => 'Add new or view existing <b>Relationships</b> for the module.',
|
||||
|
|
|
@ -172,7 +172,7 @@ class ModuleBuilderViewWizard extends SugarView
|
|||
$this->help = 'moduleHelp' ;
|
||||
global $current_user;
|
||||
if (is_admin($current_user)) {
|
||||
$this->actions = "<input class=\"button\" type=\"button\" id=\"exportBtn\" name=\"exportBtn\" "
|
||||
$this->actions = "<input class=\"button\" type=\"button\" id=\"resetModule\" name=\"resetModule\" "
|
||||
. "onclick=\"ModuleBuilder.getContent('module=ModuleBuilder&action=resetmodule&view_module=$this->editModule');\" value=\""
|
||||
. translate('LBL_RESET_MODULE') . '">' ;
|
||||
}
|
||||
|
|
|
@ -79,5 +79,7 @@ $mod_strings = array(
|
|||
'LBL_SURVEYS_SURVEYRESPONSES_FROM_SURVEYS_TITLE' => 'Survey',
|
||||
'LBL_QUESTION_RESPONSES_DISPLAY' => 'Question Responses',
|
||||
'LBL_SURVEYRESPONSES_CAMPAIGNS_FROM_CAMPAIGNS_TITLE' => 'Campaign',
|
||||
'LBL_QUESTION' => 'Question',
|
||||
'LBL_RESPONSE' => 'Response'
|
||||
|
||||
);
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<tr>
|
||||
<th></th>
|
||||
<th>
|
||||
Question
|
||||
{$MOD.LBL_QUESTION}
|
||||
</th>
|
||||
<th>
|
||||
Response
|
||||
{$MOD.LBL_RESPONSE}
|
||||
</th>
|
||||
</tr>
|
||||
{foreach from=$questionResponses item=questionResponse}
|
||||
|
|
|
@ -6,7 +6,7 @@ var Survey = (function ($) {
|
|||
var resultTable = $('#' + clickedElement.data('question-id') + 'List');
|
||||
|
||||
resultTable.slideToggle(500, function () {
|
||||
clickedElement.text(resultTable.is(':visible') ? 'Hide responses' : 'Show responses');
|
||||
clickedElement.text(resultTable.is(':visible') ? SUGAR.language.translate('Surveys', 'LBL_HIDE_RESPONSE') : SUGAR.language.translate('Surveys', 'LBL_SHOW_RESPONSE'));
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -91,4 +91,15 @@ $mod_strings = array(
|
|||
'LBL_SURVEYS_SURVEYQUESTIONS_FROM_SURVEYQUESTIONS_TITLE' => 'Survey Questions',
|
||||
'LBL_SURVEYS_SURVEYRESPONSES_FROM_SURVEYRESPONSES_TITLE' => 'Survey Responses',
|
||||
'LBL_SHOW_RESPONSES' => 'Show responses',
|
||||
'LBL_SURVEY_QUESTION' => 'Question',
|
||||
'LBL_SURVEY_TEXT' => 'Text',
|
||||
'LBL_SURVEY_TYPE' => 'Type',
|
||||
'LBL_SURVEY_ACTIONS' => 'Actions',
|
||||
'LBL_SURVEY_NEW_QUESTION' => 'New Question',
|
||||
'LBL_SURVEY_RESPONSES' => 'New Question',
|
||||
'LBL_SURVEYS_SENT' => 'Surveys Sent:',
|
||||
'LBL_SURVEY_DISTINCT' => 'Distinct Surveys Sent:',
|
||||
'LBL_DRAFT' => 'Draft',
|
||||
'LBL_SUBMIT' => 'Submit',
|
||||
'LBL_STARS' => 'Stars'
|
||||
);
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<table id="questionTable" class="table table-bordered">
|
||||
<tr>
|
||||
<th>
|
||||
Question
|
||||
{$MOD.LBL_SURVEY_QUESTION}
|
||||
</th>
|
||||
<th>
|
||||
Text
|
||||
{$MOD.LBL_SURVEY_TEXT}
|
||||
</th>
|
||||
<th>
|
||||
Type
|
||||
{$MOD.LBL_SURVEY_TYPE}
|
||||
</th>
|
||||
</tr>
|
||||
{foreach from=$questions item=question}
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
<input type="hidden" name="survey_questions_supplied" value="1">
|
||||
<table id="questionTable" class="table table-bordered">
|
||||
<tr>
|
||||
<th>
|
||||
Question
|
||||
</th>
|
||||
<th>
|
||||
Text
|
||||
</th>
|
||||
<th>
|
||||
Type
|
||||
</th>
|
||||
<th>Actions</th>
|
||||
<th>
|
||||
{$MOD.LBL_SURVEY_QUESTION}
|
||||
</th>
|
||||
<th>
|
||||
{$MOD.LBL_SURVEY_TEXT}
|
||||
</th>
|
||||
<th>
|
||||
{$MOD.LBL_SURVEY_TYPE}
|
||||
</th>
|
||||
<th>{$MOD.LBL_SURVEY_ACTIONS}</th>
|
||||
</tr>
|
||||
</table>
|
||||
<button type="button" class="button" id="newQuestionButton">New Question</button>
|
||||
<button type="button" class="button" id="newQuestionButton">{$MOD.LBL_SURVEY_NEW_QUESTION}</button>
|
||||
</div>
|
||||
{literal}
|
||||
<script>
|
||||
|
@ -132,10 +132,10 @@
|
|||
newRow += "<td>";
|
||||
newRow += "</td>";
|
||||
newRow += "<td>";
|
||||
newRow += "<strong>Options</strong>";
|
||||
newRow += "<strong>{/literal}{$MOD.LBL_OPTIONS}{literal}</strong>";
|
||||
newRow += "<ul style='list-style: none;' class='optionList'>";
|
||||
newRow += "</ul>";
|
||||
newRow += "<button class='addOptionButton button' data-question-index='" + createQuestion.questionCount + "' type='button'>Add option</button>";
|
||||
newRow += "<button class='addOptionButton button' data-question-index='" + createQuestion.questionCount + "' type='button'>{/literal}{$MOD.LBL_ADD_OPTION}{literal}</button>";
|
||||
newRow += "</td>";
|
||||
newRow += "<td>";
|
||||
newRow += "</td>";
|
||||
|
@ -175,4 +175,4 @@
|
|||
});
|
||||
|
||||
</script>
|
||||
{/literal}
|
||||
{/literal}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<h1>{$survey.name}</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Responses:</th>
|
||||
<th>{$MOD.LBL_SURVEY_RESPONSES}</th>
|
||||
<td>{$responsesCount}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Surveys Sent:</th>
|
||||
<th>{$MOD.LBL_SURVEYS_SENT}</th>
|
||||
<td>{$surveysSent}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Distinct Surveys Sent:</th>
|
||||
<th>{$MOD.LBL_SURVEY_DISTINCT}</th>
|
||||
<td>{$surveysSentDistinct}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -50,7 +50,7 @@ $dictionary['Surveys'] = array(
|
|||
'vname' => 'LBL_STATUS',
|
||||
'type' => 'enum',
|
||||
'massupdate' => 0,
|
||||
'default' => 'Draft',
|
||||
'default' => 'LBL_DRAFT',
|
||||
'no_default' => false,
|
||||
'comments' => '',
|
||||
'help' => '',
|
||||
|
|
|
@ -182,12 +182,14 @@ EOF;
|
|||
|
||||
private function getRatingQuestionSkeleton($arr)
|
||||
{
|
||||
global $mod_strings;
|
||||
|
||||
for ($x = 1; $x <= 5; $x++) {
|
||||
$arr['chartLabels'][$x] = $x . ' Stars';
|
||||
$arr['chartLabels'][$x] = $x . $mod_strings['LBL_STARS'];
|
||||
$arr['chartData'][$x] = 0;
|
||||
$arr['responses'][$x] = array(
|
||||
'count' => 0,
|
||||
'label' => $x . ' Stars',
|
||||
'label' => $x . $mod_strings['LBL_STARS'],
|
||||
'order' => $x
|
||||
);
|
||||
}
|
||||
|
|
|
@ -97,6 +97,7 @@ $mod_strings = array(
|
|||
'LBL_REGULAR_DESC' => 'User can access modules and records based on roles.',
|
||||
'LBL_PHOTO' => 'Photo',
|
||||
'LBL_ADMIN' => 'System Administrator',
|
||||
'LBL_LAST_ADMIN_NOTICE' => 'Current selection could include yourself. You cannot change your own type of user or status.',
|
||||
'LBL_ADVANCED' => 'Advanced',
|
||||
'LBL_ANY_ADDRESS' => 'Any Address:',
|
||||
'LBL_ANY_EMAIL' => 'Any Email',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue