Detect if question is answered

More
1 month 3 weeks ago #183739 by flobau
getting this now: says that 'is_empty' only has 1 parameter, however we got 2 here.


Attachments:

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183744 by DenisChenu

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183746 by flobau
works with
{{ processString("{if(count(self.NAOK)>0,'<span>Mandatory question answered</span>',' <span>question not answered</span>')}")  }}
now, however it is not updating when a user answeres a question.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183751 by DenisChenu
Where did yout put this code ?
Proof of concept
{{ processString("{if(count(self.NAOK),' <span class=\"text-success\">'+count(self.NAOK)+' questions answered</span>','<span class=\"text-danger\">No question answered</span>')}")  }}

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .
Last edit: 1 month 3 weeks ago by DenisChenu.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183752 by flobau
inside the
question_text_content.twig
file.
{% if aQuestion.mandatory != '' %}
    {{ processString("{if(count(self.NAOK)>0,'<span>Mandatory question answered</span>',' <span>question not answered</span>')}")  }}
    <div class="{{ aSurveyInfo.class.questionasterix }} pull-left" {{ aSurveyInfo.attr.questionasterix }} >
        <small style="margin-right: 3px; font-size: 65%;" class="{{ aSurveyInfo.class.questionasterixsmall }} text-danger fa fa-asterisk small" {{ aSurveyInfo.attr.questionasterixsmall }}></small>
           <span class="{{ aSurveyInfo.class.questionasterixspan }} sr-only text-danger" {{ aSurveyInfo.attr.questionasterixspan }} >
            {{ gT("(This question is mandatory)") }}
        </span>
    </div>
{% endif %}

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183753 by DenisChenu
Seems there are an issue with count and integer comparaison ?

Need time to check, what happen if you put this inside question text ?

Maybe related to this issue : bugs.limesurvey.org/view.php?id=14198

Need tracking

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183794 by tpartner
I cannot get the Twig/EM variable to update dynamically either.

Here is a JavaScript solution that could be placed in question_text_content.twig.

Note that this is only for mandatory list-radio, list-dropdown, multiple-choice, short-text and long-text questions. It would have to be extended to work in arrays, multiple-short-text, multiple-numeric, ranking, etc.

<script type="text/javascript" charset="utf-8">
 
	function checkAnswered(thisQuestion) {
		$('.answered-tip', thisQuestion).hide();
		var answered = false;
		if($('input:radio:visible:checked, input:checkbox:visible:checked', thisQuestion).length > 0) {
			answered = true;
		}
		if($('select:visible, input:text:visible, textarea:visible', thisQuestion).filter(function() { return $.trim($(this).val()) != ''; }).length > 0) {
			answered = true;
		}
 
		if(answered == true) {
			$('.answered-tip.answered', thisQuestion).show();
		}
		else {
			$('.answered-tip.unanswered', thisQuestion).show();
		}
	}
 
	$(document).on('ready pjax:scriptcomplete',function(){
 
		// Identify this question
		var thisQuestion = $('#question{{ aQuestion.qid }}');
 
		// Initial state
		checkAnswered(thisQuestion);
 
		// Listener on the inputs
		$('input:visible, select:visible, textarea:visible', thisQuestion).on('click change keyup', function(e) {
			checkAnswered(thisQuestion);
		});
	});
</script>
 
{# If the question is mandatory, the asterisk will be shown  #}
{% if aQuestion.mandatory != '' %}
    <span class="answered-tip answered">Mandatory question answered</span>
    <span class="answered-tip unanswered">Question not answered</span>
    <!-- Add a visual information + just Mandatory string for aria : can be improved -->
    <div class="{{ aSurveyInfo.class.questionasterix }} pull-left" {{ aSurveyInfo.attr.questionasterix }} >
        <small class="{{ aSurveyInfo.class.questionasterixsmall }} text-danger fa fa-asterisk small" {{ aSurveyInfo.attr.questionasterixsmall }}></small>
        <span class="{{ aSurveyInfo.class.questionasterixspan }} sr-only text-danger" {{ aSurveyInfo.attr.questionasterixspan }} >
            {{ gT("(This question is mandatory)") }}
        </span>
    </div>
{% endif %}

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Official LimeSurvey Partner - partnersurveys.com
Last edit: 1 month 3 weeks ago by tpartner.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183821 by DenisChenu
See the proof of concept : it work but not with whole condition …
Here the < 0 seems an issue.

I try to check same equation inside question text …
But it's really strange … bugs.limesurvey.org/view.php?id=14817

I must check with vanilla, not only skelvanilla too …

EDIT:
Checked with vanilla too

Link to twig file

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .
Last edit: 1 month 3 weeks ago by DenisChenu.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183822 by DenisChenu
Yo \o/
Got a working solution
{% set questionCount = processString("{count(self.question)}") %}
{{ processString("{if(count(self.NAOK)== 0,'<span class=\"text-danger\">No question answered</span>')}")  }}
{{ processString("{if(count(self.NAOK) gt 0 and count(self.NAOK) lt "~questionCount~",'<span class=\"text-warning\">'+count(self.NAOK)+' question(s) answered</span>')}")  }}
{{ processString("{if(count(self.NAOK) == "~questionCount~",'<span class=\"text-success\">All questions answered</span>')}")  }}

Proof of concept
twig file

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .
The following user(s) said Thank You: tpartner

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183828 by tpartner
Nice!

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Official LimeSurvey Partner - partnersurveys.com

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183880 by flobau
Thanks for your answers guys! I tried Denis's solution, but
count(self.NAOK)
stays always 0 for me. I used the exact same code as you in my template.
{% set questionCount = processString("{count(self.question)}") %}
    count(self.question): {{ questionCount }} <br>
    count(self.NAOK): {{ processString("{count(self.NAOK)}") }} <br>
    {{ processString("{if(count(self.NAOK) == 0,'<span class=\"text-danger\">No question answered</span>')}")  }}
    {{ processString("{if(count(self.NAOK) gt 0 and count(self.NAOK) lt "~questionCount~",'<span class=\"text-warning\">'+count(self.NAOK)+' question(s) answered</span>')}")  }}



Here you can see, that self.NAOK is always 0, even when i answered the question.
Attachments:
Last edit: 1 month 3 weeks ago by flobau.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183881 by DenisChenu
Maybe a js issue, but you don't tell : LimeSurvey version and build number, if you use vanilla theme without ajax mode etc …

I can track down your issue and help you more.

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183882 by flobau
We are using LimeSurvey Version 3.17.0. I don't know where to find the build number.


The theme is extended from vanilla theme.

edit: Ajax Mode is on.
Last edit: 1 month 3 weeks ago by flobau.

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago #183885 by tpartner

Ajax Mode is on.

ALWAYS disable AJAX. In my opinion, it does nothing other than cause problems.

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Official LimeSurvey Partner - partnersurveys.com

Please Log in or Create an account to join the conversation.

More
1 month 3 weeks ago - 1 month 3 weeks ago #183887 by DenisChenu

tpartner wrote:

Ajax Mode is on.

ALWAYS disable AJAX. In my opinion, it does nothing other than cause problems.

Here, it seems to work with ajax on .

But possible other issue
1. Difference between 3.17.0 and 3.17.2, i don't think but …
2. Another issue in the survey that broke javascript.

EDIT : with or witout ajax mode : it don't work when reload or try to submit

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand .
An error happen ? Before make a new topic : remind the Debug mode .
Last edit: 1 month 3 weeks ago by DenisChenu. Reason: EDIT

Please Log in or Create an account to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!