[WatuPRO] How To Make It Reload The Page on Each Question

This is a request we got few times. WatuPRO is designed to load pages in paginated quizzes nicely via ajax. This is the contemporary way of doing things and the desired behaviour for 99.9% of the customers. So “feature” to reload page on each refresh will probably never be added.

However this post will explain you how to customize the plugin yourself and achieve this in the rare case you need it (for example to get more ad impressions).

This is too complicated to be done as external plugin so it involves customizing WatuPRO directly. Here is it, step by step:

0. For all of this to work you must select “Automatically store user progress as they go from page to page” in the quiz settings.

1. Open lib/main.js and add:

WatuPRO.doReload = false;

under the other WatuPRO properties on top.

2. In method WatuPRO.nextQuestion in the same file add the following changes (in red) to the following piece of code:

       if(!this.doReload) {		
		jQuery("#question-" + WatuPRO.current_question).show();		
		
		this.hilitePage(WatuPRO.current_question, this.answered);			
		
		// show/hide next/submit button
		if(WatuPRO.total_questions <= WatuPRO.current_question) {		 			jQuery("#next-question").hide();		 			jQuery('#action-button').show(); 			if(jQuery('#WTPReCaptcha').length) jQuery('#WTPReCaptcha').show();  		} 		else { 			jQuery("#next-question").show();		 			if(jQuery('#WTPReCaptcha').length) jQuery('#WTPReCaptcha').hide(); 		} 		 		// show/hide previous button 		if(WatuPRO.current_question>1) jQuery('#prev-question').show();
		else jQuery('#prev-question').hide();
		
		// show/hide liveResult toggle if any
		if(jQuery('#questionWrap-'+WatuPRO.current_question).is(':hidden')) {
			jQuery('#liveResultBtn').hide();
		} else {
			if(jQuery('#liveResultBtn').length)  jQuery('#liveResultBtn').show();
		}
	}	
	else jQuery('.watupro-buttons').hide();

3. At the bottom of the same method add:

jQuery.post(WatuPRO.siteURL, data, function(msg){
		if(WatuPRO.doReload) location.reload();
	})	

This will make it reload when WatuPRO.doReload is true.
Now we have to make it true when clicking on buttons:

4. In the method initWatu in the same file REMOVE the red from the following code:

// different behavior if we have preloaded page
	if(!WatuPRO.pagePreLoaded) {
		jQuery("#question-1").show();
	} else WatuPRO.goto(null, WatuPRO.current_question);

so the goto gets executed always.

5. Open views/show_exam.php and find the calls to WatuPRO.nextQuestion(event, ‘previous’); and WatuPRO.nextQuestion(event). Make doReload to be true like this:

onclick=”WatuPRO.doReload=true;WatuPRO.nextQuestion(event, ‘previous’);”

6. If you use the paginator, do it for the paginator too. Models/exam.php static function paginator:

onclick=’WatuPRO.doReload=true;WatuPRO.goto(event, “.$j.”);’

7. Now if you want this to work for non-logged in users you need to make several PHP changes. By default WatuPRO never stores progress for non-logged in users to save server resources. But you can change this. In show_exam.php (not the view/ but the main file) add the following code (in red):

if(!empty($_SESSION['watupro_taking_id'])) {
	$in_progress = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".WATUPRO_TAKEN_EXAMS." 
		WHERE ID=%d AND exam_id=%d AND in_progress=1 ORDER BY ID DESC LIMIT 1", $_SESSION['watupro_taking_id'], $exam_id));
}
if(!empty($advanced_settings['dont_load_inprogress'])) $in_progress = null;

so we can get taking ID from session (Sessions MUST be enabled on your server)

8. In order to store tkaing ID in session you need to do several changes in lib/watupro.php. The first is to remove/comment the following from watupro_store_details() and watupro_store_all():

if(!is_user_logged_in()) exit;

9. Then in function add_taking() just before return $taking_id; add:

$_SESSION['watupro_taking_id'] = $taking_id;

10. In the same function just above if(empty($taking_id)) { add:

if(!empty($_SESSION['watupro_taking_id'])) $taking_id = $_SESSION['watupro_taking_id'];

That’s it. Shouldn’t take you more than 1-2 hours. If you can’t handle it yourself, we can provide the service for charge.

How To Change Text in a WordPress Plugin?

If you want to change some of the predefined texts in the user interface in any properly coded WordPress plugin you must translate it.

Many users are confused and think plugin translation is useful only if you want to use the plugin in another language.

No.

Translation is what you need to do even if you only want to change some words. It’s translation from English to English – there is no difference. So please check the link above, translation a plugin is not scary at all.

In case your WordPress installation is default, your plugin language files need to end in en_US.po and en_US.mo. Not en_EN please, there is no such locale.

HostelPRO 1.5

Our WordPress plugin for hostels, small hotels and BnB owners – Hostel PRO – has been updated to version 1.5. Here are the changes and improvements from version 1.4 to version 1.5:

  • Manage addon services – bike rentals, extra bed price, cleaning, extra linen etc
  • Added optional description to addon services and option to deactivate them
  • Added “vertical_after” parameter to the rooms listing shortcode. It allows you to change the “availability dates” from horizontal (table cells) to vertical (one under the other) after the selected period exceeds the given number of days
  • Added option to reorder the custom fields in the automatically generated booking form
  • Added “minimum stay” option
  • Option to automatically delete the unconfirmed bookings
  • Added default content for the booking email messages (you can of course change it)
  • Optional payment instructions can be added. You can use this field to add HTML payment button code from payment system of your choice.
  • The date format of the date selectors now use the date format from your WordPress Settings page