Skip to content

Commit

Permalink
Fixed issue #11974: Very slow rendering of first page
Browse files Browse the repository at this point in the history
Dev: whole attribute in one request
  • Loading branch information
Shnoulle committed Dec 5, 2016
1 parent 4a768e9 commit 97c93ec
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
7 changes: 2 additions & 5 deletions application/models/Question.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,7 @@ public function getAdvancedSettingsWithValues($iQuestionID, $sQuestionType, $iSu
{
$aLanguages = array($sLanguage);
}

if ($iQuestionID)
{
$aAttributeValues=QuestionAttribute::model()->getQuestionAttributes($iQuestionID);
}
$aAttributeValues=QuestionAttribute::model()->getQuestionAttributes($iQuestionID,$sLanguage);
$aAttributeNames = \ls\helpers\questionHelper::getQuestionAttributesSettings($sQuestionType);
uasort($aAttributeNames, 'categorySort');
foreach ($aAttributeNames as $iKey => $aAttribute)
Expand Down Expand Up @@ -255,6 +251,7 @@ public function getAdvancedSettingsWithValues($iQuestionID, $sQuestionType, $iSu
}
}
}

return $aAttributeNames;
}

Expand Down
46 changes: 29 additions & 17 deletions application/models/QuestionAttribute.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,12 @@ public function setMultiple($iSid, $aQidsAndLang, $aAttributesToUpdate, $aValidQ
*
* @access public
* @param int $iQuestionID
* @param string $sLanguage restrict to this language (@todo : add it in qanda)
* @return array
*/
public function getQuestionAttributes($iQuestionID)
public function getQuestionAttributes($iQuestionID,$sLanguage=null)
{

$iQuestionID=(int)$iQuestionID;
static $aQuestionAttributesStatic=array();// TODO : replace by Yii::app()->cache
// Limit the size of the attribute cache due to memory usage
Expand All @@ -181,8 +183,11 @@ public function getQuestionAttributes($iQuestionID)
$oQuestion = Question::model()->find("qid=:qid",array('qid'=>$iQuestionID)); // Maybe take parent_qid attribute before this qid attribute
if ($oQuestion)
{
$aLanguages = array_merge(array(Survey::model()->findByPk($oQuestion->sid)->language), Survey::model()->findByPk($oQuestion->sid)->additionalLanguages);

if($sLanguage){
$aLanguages = array($sLanguage);
}else{
$aLanguages = array_merge(array(Survey::model()->findByPk($oQuestion->sid)->language), Survey::model()->findByPk($oQuestion->sid)->additionalLanguages);
}
// Get all atribute set for this question
$sType=$oQuestion->type;

Expand All @@ -194,33 +199,40 @@ public function getQuestionAttributes($iQuestionID)

$aAttributeNames = \ls\helpers\questionHelper::getQuestionAttributesSettings($sType);

/* Get whole existing attribute for this question in an array*/
$oAttributeValues = QuestionAttribute::model()->findAll("qid=:qid",array('qid'=>$iQuestionID));
$aAttributeValues=array();
foreach($oAttributeValues as $oAttributeValue)
{
if($oAttributeValue->language){
$aAttributeValues[$oAttributeValue->attribute][$oAttributeValue->language]=$oAttributeValue->value;
}else{
/* Don't replace existing language, use '' for null key */
$aAttributeValues[$oAttributeValue->attribute]['']=$oAttributeValue->value;
}
}

// Fill with aQuestionAttributes with default attribute or with aAttributeValues
// Can not use array_replace due to i18n
foreach($aAttributeNames as $aAttribute)
{
$oAttributeNameValues = QuestionAttribute::model()->findAll("qid=:qid and attribute=:attribute",array(':qid'=>$iQuestionID,':attribute'=>$aAttribute['name']));
/* listData do an array with key language : get really all value : null key is set to empty string */
/* this allow to set an attribute to i18n without loose old value */
$aAttributeNameValues=CHtml::listData($oAttributeNameValues,'language','value');

if ($aAttribute['i18n'] == false)
{
if(isset($aAttributeNameValues['']))
{
$aQuestionAttributes[$aAttribute['name']]=$aAttributeNameValues[''];
}
else
{
if(isset($aAttributeValues[$aAttribute['name']][''])){
$aQuestionAttributes[$aAttribute['name']]=$aAttributeValues[$aAttribute['name']][''];
}else{
$aQuestionAttributes[$aAttribute['name']]=$aAttribute['default'];
}
}
else
{
foreach ($aLanguages as $sLanguage)
{
if (isset($aAttributeNameValues[$sLanguage])){
$aQuestionAttributes[$aAttribute['name']][$sLanguage] = $aAttributeNameValues[$sLanguage];
}elseif(isset($aAttributeNameValues[''])){
$aQuestionAttributes[$aAttribute['name']][$sLanguage] = $aAttributeNameValues[''];
if (isset($aAttributeValues[$aAttribute['name']][$sLanguage])){
$aQuestionAttributes[$aAttribute['name']][$sLanguage] = $aAttributeValues[$aAttribute['name']][$sLanguage];
}elseif(isset($aAttributeValues[$aAttribute['name']][''])){
$aQuestionAttributes[$aAttribute['name']][$sLanguage] = $aAttributeValues[$aAttribute['name']][''];
}else{
$aQuestionAttributes[$aAttribute['name']][$sLanguage] = $aAttribute['default'];
}
Expand Down

0 comments on commit 97c93ec

Please sign in to comment.