View Issue Details

IDProjectCategoryView StatusLast Update
12622Feature requests[All Projects] _ Unknownpublic2017-08-23 13:49
ReportercrestAssigned To 
PrioritynoneSeverityfeature 
Status newResolutionopen 
Product Version 
Target VersionFixed in Version 
Summary12622: New feature "Response rate" in admin survey list
Description

Hi,

as i already described in the forum[1], it would be great if you can re-implement the feature "Response Rate" which get lost after updating from 1.91 to 2.xx version of Limesurvey. LouisGac suggested to open a feature request.

the Feature was implemented in:

"Changes from 1.87+ (build 8518) to 1.90+ (build 9561) Legend: # updated feature, - bug fix":
+New feature: Show number of tokens and response rate for surveys using tokens. (maziminke)

and is not available anymore in the 2.xx branch.

I try to migrate the code from the 1.91 branch version 2.67.3 of limesurvey. A patch which i used to implement the feature in our production environment and a screenshot of the working code is attached.

Thanks,
Robin

[1] https://www.limesurvey.org/forum/development/112277-missing-feature-response-rate-in-admin-survey-list

TagsNo tags attached.

Activities

crest

crest

2017-08-23 13:36

reporter  

responserate_diff.txt (2,636 bytes)
diff --git a/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php b/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
index e1463106c..5c8d41a7a 100644
--- a/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
+++ b/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
@@ -127,6 +127,14 @@
                     ),
 
                     array(
+                        'header' => gT('Response Rate'),
+                        'name' => 'response_rate',
+                        'type' => 'raw',
+                        'value'=>'CHtml::link($data->responseRate . "%", Yii::app()->createUrl("admin/survey/sa/view/",array("surveyid"=>$data->sid)))',
+                        'htmlOptions' => array('class' => 'has-link'),
+                    ),
+
+                    array(
                         'header' => '',
                         'name' => 'actions',
                         'value'=>'$data->buttons',
diff --git a/application/models/Survey.php b/application/models/Survey.php
index 75fe90480..8b98b8397 100644
--- a/application/models/Survey.php
+++ b/application/models/Survey.php
@@ -106,6 +106,7 @@ class Survey extends LSActiveRecord
 
     private $fac;
     private $pac;
+    private $responseRate;
 
     /**
      * init to set default
@@ -1323,4 +1324,36 @@ class Survey extends LSActiveRecord
         $criteria->addNotInCondition('title', CHtml::listData($validSubQuestion,'title','title'));
         Question::model()->deleteAll($criteria);// Must log count of deleted ?
     }
+
+    public function getResponseRate()
+    {
+        if ($this->responseRate!=null)
+        {
+            return $this->responseRate;
+        }
+        else {
+            $table = '{{tokens_' . $this->sid . '}}';
+            if (tableExists("$table"))
+            {
+                $tokencount = Yii::app()->db->createCommand('SELECT count(tid) FROM ' . $table  )->queryScalar();
+                //get the number of COMLETED tokens for each survey
+                $tokencompleted = $this->getCountTotalAnswers();
+
+                if($tokencompleted != 0 && $tokencount != 0)
+                {
+                    $tokenpercentage = round(($tokencompleted / $tokencount) * 100, 1);
+                }
+                else
+                {
+                    $tokenpercentage = 0;
+                }
+            }
+            else
+            {
+                $tokenpercentage = 0;
+            }
+            $this->responseRate = $tokenpercentage;
+            return $tokenpercentage;
+        }
+    }
 }
responserate_diff.txt (2,636 bytes)
responserate.PNG (24,518 bytes)
responserate.PNG (24,518 bytes)
crest

crest

2017-08-23 13:49

reporter   ~44336

Ups I just take a look at my screenshot and recongnizes that there are responserates > 100%. I accidentally used $tokencompleted = $this->getCountFullAnswers(); instead of $tokencompleted = $this->getCountTotalAnswers();

fixed patch with updated screenshot attached.

Regards,
Robin



responserate-2.PNG (34,058 bytes)
responserate-2.PNG (34,058 bytes)
responserate.diff (2,633 bytes)
diff --git a/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php b/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
index e1463106c..5c8d41a7a 100644
--- a/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
+++ b/application/extensions/admin/survey/ListSurveysWidget/views/listSurveys.php
@@ -127,6 +127,14 @@
                     ),
 
                     array(
+                        'header' => gT('Response Rate'),
+                        'name' => 'response_rate',
+                        'type' => 'raw',
+                        'value'=>'CHtml::link($data->responseRate . "%", Yii::app()->createUrl("admin/survey/sa/view/",array("surveyid"=>$data->sid)))',
+                        'htmlOptions' => array('class' => 'has-link'),
+                    ),
+
+                    array(
                         'header' => '',
                         'name' => 'actions',
                         'value'=>'$data->buttons',
diff --git a/application/models/Survey.php b/application/models/Survey.php
index 75fe90480..a5ee1fac2 100644
--- a/application/models/Survey.php
+++ b/application/models/Survey.php
@@ -106,6 +106,7 @@ class Survey extends LSActiveRecord
 
     private $fac;
     private $pac;
+    private $responseRate;
 
     /**
      * init to set default
@@ -1323,4 +1324,35 @@ class Survey extends LSActiveRecord
         $criteria->addNotInCondition('title', CHtml::listData($validSubQuestion,'title','title'));
         Question::model()->deleteAll($criteria);// Must log count of deleted ?
     }
+
+    public function getResponseRate()
+    {
+        if ($this->responseRate!=null)
+        {
+            return $this->responseRate;
+        }
+        else {
+            $table = '{{tokens_' . $this->sid . '}}';
+            if (tableExists("$table"))
+            {
+                $tokencount = Yii::app()->db->createCommand('SELECT count(tid) FROM ' . $table  )->queryScalar();
+                //get the number of COMLETED tokens for each survey
+                $tokencompleted = $this->getCountFullAnswers();
+                if($tokencompleted != 0 && $tokencount != 0)
+                {
+                    $tokenpercentage = round(($tokencompleted / $tokencount) * 100, 1);
+                }
+                else
+                {
+                    $tokenpercentage = 0;
+                }
+            }
+            else
+            {
+                $tokenpercentage = 0;
+            }
+            $this->responseRate = $tokenpercentage;
+            return $tokenpercentage;
+        }
+    }
 }
responserate.diff (2,633 bytes)

Issue History

Date Modified Username Field Change
2017-08-23 13:36 crest New Issue
2017-08-23 13:36 crest File Added: responserate_diff.txt
2017-08-23 13:36 crest File Added: responserate.PNG
2017-08-23 13:49 crest File Added: responserate-2.PNG
2017-08-23 13:49 crest File Added: responserate.diff
2017-08-23 13:49 crest Note Added: 44336