Skip to content

Commit

Permalink
Fixed issue #18848: setting specific values for steps in Array(number…
Browse files Browse the repository at this point in the history
…s) causes php timeout
  • Loading branch information
ptelu committed May 30, 2023
1 parent 892f097 commit 52cbf96
Show file tree
Hide file tree
Showing 8 changed files with 138 additions and 73 deletions.
26 changes: 20 additions & 6 deletions application/controllers/admin/DataEntry.php
Expand Up @@ -1199,11 +1199,18 @@ public function editdata($subaction, $id, $surveyid)
}
}

if (trim($qidattributes['multiflexible_step']) != '') {
$stepvalue = $qidattributes['multiflexible_step'];
$stepvalue = (trim($qidattributes['multiflexible_step']) != '' && $qidattributes['multiflexible_step'] > 0) ? $qidattributes['multiflexible_step'] : 1;

if ($qidattributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$stepvalue = 1;
$reverse = false;
}

if ($qidattributes['multiflexible_checkbox'] != 0) {
$minvalue = 0;
$maxvalue = 1;
Expand Down Expand Up @@ -2204,11 +2211,18 @@ public function view($surveyid)
}
}

if (trim($qidattributes['multiflexible_step']) != '') {
$stepvalue = $qidattributes['multiflexible_step'];
$stepvalue = (trim($qidattributes['multiflexible_step']) != '' && $qidattributes['multiflexible_step'] > 0) ? $qidattributes['multiflexible_step'] : 1;

if ($qidattributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$stepvalue = 1;
$reverse = false;
}

if ($qidattributes['multiflexible_checkbox'] != 0) {
$minvalue = 0;
$maxvalue = 1;
Expand Down
Expand Up @@ -4,17 +4,15 @@
<?= $this->setting['aFormElementOptions']['inputGroup']['prefix']; ?>
</div>
<?php endif; ?>
<!--
max=""
min=""
-->
<input
<input
type="number"
class="form-control"
name="<?= $inputBaseName ?>"
id="<?= CHtml::getIdByName($inputBaseName); ?>"
<?= ($this->setting['help']) ? 'aria-describedby="help-' . CHtml::getIdByName($inputBaseName) . '"' : "" ?>
value="<?= CHtml::encode($this->setting['value']); ?>"
min="<?= $this->setting['min'] ?? ''?>"
max="<?= $this->setting['max'] ?? ''?>"
/>
<?php if (isset($this->setting['aFormElementOptions']['inputGroup']['suffix'])) : ?>
<div class="input-group-addon">
Expand Down
31 changes: 21 additions & 10 deletions application/helpers/admin/statistics_helper.php
Expand Up @@ -1257,22 +1257,33 @@ protected function buildOutputList($rt, $language, $surveyid, $outputType, $sql,

case Question::QT_COLON_ARRAY_NUMBERS: // Array (Multiple Flexi) (Numbers)
$aQuestionAttributes = QuestionAttribute::model()->getQuestionAttributes($qiqid);
if (trim($aQuestionAttributes['multiflexible_max']) != '') {
$minvalue = 1;
$maxvalue = 10;
if (trim($aQuestionAttributes['multiflexible_max']) != '' && trim($aQuestionAttributes['multiflexible_min']) == '') {
$maxvalue = $aQuestionAttributes['multiflexible_max'];
} else {
$maxvalue = 10;
$minvalue = 1;
}

if (trim($aQuestionAttributes['multiflexible_min']) != '') {
if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) == '') {
$minvalue = $aQuestionAttributes['multiflexible_min'];
} else {
$minvalue = 1;
$maxvalue = $aQuestionAttributes['multiflexible_min'] + 10;
}
if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) != '') {
if ($aQuestionAttributes['multiflexible_min'] < $aQuestionAttributes['multiflexible_max']) {
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_max'];
}
}

if (trim($aQuestionAttributes['multiflexible_step']) != '') {
$stepvalue = $aQuestionAttributes['multiflexible_step'];
$stepvalue = (trim($aQuestionAttributes['multiflexible_step']) != '' && $aQuestionAttributes['multiflexible_step'] > 0) ? $aQuestionAttributes['multiflexible_step'] : 1;

if ($aQuestionAttributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$stepvalue = 1;
$reverse = false;
}

if ($aQuestionAttributes['multiflexible_checkbox'] != 0) {
Expand Down
38 changes: 35 additions & 3 deletions application/helpers/export_helper.php
Expand Up @@ -338,9 +338,41 @@ function SPSSGetValues($field, $qidattributes, $language)
'size' => numericSize($field['sql_name']),
);
} else {
$minvalue = trim($qidattributes['multiflexible_min']) ? $qidattributes['multiflexible_min'] : 1;
$maxvalue = trim($qidattributes['multiflexible_max']) ? $qidattributes['multiflexible_max'] : 10;
$stepvalue = trim($qidattributes['multiflexible_step']) ? $qidattributes['multiflexible_step'] : 1;
$minvalue = 1;
$maxvalue = 10;
if (trim($qidattributes['multiflexible_max']) != '' && trim($qidattributes['multiflexible_min']) == '') {
$maxvalue = $qidattributes['multiflexible_max'];
$minvalue = 1;
}
if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) == '') {
$minvalue = $qidattributes['multiflexible_min'];
$maxvalue = $qidattributes['multiflexible_min'] + 10;
}
if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) != '') {
if ($qidattributes['multiflexible_min'] < $qidattributes['multiflexible_max']) {
$minvalue = $qidattributes['multiflexible_min'];
$maxvalue = $qidattributes['multiflexible_max'];
}
}

$stepvalue = (trim($qidattributes['multiflexible_step']) != '' && $qidattributes['multiflexible_step'] > 0) ? $qidattributes['multiflexible_step'] : 1;

if ($qidattributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$reverse = false;
}

if ($qidattributes['multiflexible_checkbox']!=0)
{
$minvalue=0;
$maxvalue=1;
$stepvalue=1;
}
for ($i = $minvalue; $i <= $maxvalue; $i += $stepvalue) {
$answers[] = array('code' => $i, 'value' => $i);
}
Expand Down
35 changes: 14 additions & 21 deletions application/helpers/qanda_helper.php
Expand Up @@ -4177,40 +4177,33 @@ function do_array_multiflexi($ia)
$aQuestionAttributes = QuestionAttribute::model()->getQuestionAttributes($ia[0]);

// Define min and max value
$minvalue = 1;
$maxvalue = 10;
if (trim($aQuestionAttributes['multiflexible_max']) != '' && trim($aQuestionAttributes['multiflexible_min']) == '') {
$maxvalue = $aQuestionAttributes['multiflexible_max'];
$minvalue = 1;
$extraclass .= " maxvalue maxvalue-" . trim($aQuestionAttributes['multiflexible_max']); // @todo : move to data
$maxvalue = $aQuestionAttributes['multiflexible_max'];
$minvalue = 1;
}

if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) == '') {
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_min'] + 10;
$extraclass .= " minvalue minvalue-" . trim($aQuestionAttributes['multiflexible_max']); // @todo : move to data
}

if (trim($aQuestionAttributes['multiflexible_min']) == '' && trim($aQuestionAttributes['multiflexible_max']) == '') {
$maxvalue = 10;
$minvalue = (isset($minvalue['value']) && $minvalue['value'] == 0) ? 0 : 1;
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_min'] + 10;
}

if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) != '') {
if ($aQuestionAttributes['multiflexible_min'] < $aQuestionAttributes['multiflexible_max']) {
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_max'];
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_max'];
}
}

$stepvalue = (trim($aQuestionAttributes['multiflexible_step']) != '' && $aQuestionAttributes['multiflexible_step'] > 0) ? $aQuestionAttributes['multiflexible_step'] : 1;

if ($aQuestionAttributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$reverse = false;
$reverse = false;
}

$checkboxlayout = false;
Expand Down
31 changes: 21 additions & 10 deletions application/helpers/userstatistics_helper.php
Expand Up @@ -1203,22 +1203,33 @@ protected function buildOutputList($rt, $language, $surveyid, $outputType, $sql,

case Question::QT_COLON_ARRAY_NUMBERS: // Array (Multiple Flexi) (Numbers)
$aQuestionAttributes = QuestionAttribute::model()->getQuestionAttributes($qiqid);
if (trim($aQuestionAttributes['multiflexible_max']) != '') {
$minvalue = 1;
$maxvalue = 10;
if (trim($aQuestionAttributes['multiflexible_max']) != '' && trim($aQuestionAttributes['multiflexible_min']) == '') {
$maxvalue = $aQuestionAttributes['multiflexible_max'];
} else {
$maxvalue = 10;
$minvalue = 1;
}

if (trim($aQuestionAttributes['multiflexible_min']) != '') {
if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) == '') {
$minvalue = $aQuestionAttributes['multiflexible_min'];
} else {
$minvalue = 1;
$maxvalue = $aQuestionAttributes['multiflexible_min'] + 10;
}
if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) != '') {
if ($aQuestionAttributes['multiflexible_min'] < $aQuestionAttributes['multiflexible_max']) {
$minvalue = $aQuestionAttributes['multiflexible_min'];
$maxvalue = $aQuestionAttributes['multiflexible_max'];
}
}

if (trim($aQuestionAttributes['multiflexible_step']) != '') {
$stepvalue = $aQuestionAttributes['multiflexible_step'];
$stepvalue = (trim($aQuestionAttributes['multiflexible_step']) != '' && $aQuestionAttributes['multiflexible_step'] > 0) ? $aQuestionAttributes['multiflexible_step'] : 1;

if ($aQuestionAttributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$stepvalue = 1;
$reverse = false;
}

if ($aQuestionAttributes['multiflexible_checkbox'] != 0) {
Expand Down
39 changes: 22 additions & 17 deletions application/views/admin/export/statistics_subviews/_question.php
Expand Up @@ -640,30 +640,35 @@
//Get qidattributes for this question
echo '<h4 class="question-selector-title">'.$oStatisticsHelper::_showSpeaker($niceqtext).'</h4><br/>';
$qidattributes=QuestionAttribute::model()->getQuestionAttributes($flt[0]);
if (trim($qidattributes['multiflexible_max'])!='' && trim($qidattributes['multiflexible_min']) ==''){
$maxvalue=$qidattributes['multiflexible_max'];
$minvalue=1;
$minvalue = 1;
$maxvalue = 10;
if (trim($qidattributes['multiflexible_max']) != '' && trim($qidattributes['multiflexible_min']) == '') {
$maxvalue = $qidattributes['multiflexible_max'];
$minvalue = 1;
}
if (trim($qidattributes['multiflexible_min'])!='' && trim($qidattributes['multiflexible_max']) ==''){
$minvalue=$qidattributes['multiflexible_min'];
$maxvalue=$qidattributes['multiflexible_min'] + 10;
if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) == '') {
$minvalue = $qidattributes['multiflexible_min'];
$maxvalue = $qidattributes['multiflexible_min'] + 10;
}
if (trim($qidattributes['multiflexible_min'])=='' && trim($qidattributes['multiflexible_max']) ==''){
$minvalue=1;
$maxvalue=10;
}
if (trim($qidattributes['multiflexible_min']) !='' && trim($qidattributes['multiflexible_max']) !=''){
if($qidattributes['multiflexible_min'] < $qidattributes['multiflexible_max']){
$minvalue=$qidattributes['multiflexible_min'];
$maxvalue=$qidattributes['multiflexible_max'];
if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) != '') {
if ($qidattributes['multiflexible_min'] < $qidattributes['multiflexible_max']) {
$minvalue = $qidattributes['multiflexible_min'];
$maxvalue = $qidattributes['multiflexible_max'];
}
}

if (trim($qidattributes['multiflexible_step'])!='') {
$stepvalue=$qidattributes['multiflexible_step'];
$stepvalue = (trim($qidattributes['multiflexible_step']) != '' && $qidattributes['multiflexible_step'] > 0) ? $qidattributes['multiflexible_step'] : 1;

if ($qidattributes['reverse'] == 1) {
$tmp = $minvalue;
$minvalue = $maxvalue;
$maxvalue = $tmp;
$reverse = true;
$stepvalue = -$stepvalue;
} else {
$stepvalue=1;
$reverse = false;
}

if ($qidattributes['multiflexible_checkbox']!=0)
{
$minvalue=0;
Expand Down
Expand Up @@ -244,7 +244,8 @@
<category>Display</category>
<sortorder>111</sortorder>
<inputtype>integer</inputtype>
<default></default>
<default>1</default>
<min>1</min>
<help>Step value</help>
<caption>Step value</caption>
<i18n></i18n>
Expand Down

0 comments on commit 52cbf96

Please sign in to comment.