Page 1 of 2

Looking for Additions

Posted: Mon Mar 24, 2008 7:30 am
by DakotaSurfer
If you read my Intro post you see that I have a forum that just loves this Quiz mod... and as Administrator it's not that hard of a mod to handle but there are a couple things I'd like to see done or added or made available on this Quiz mod.

First would be a sorting function on the Quiz Stats page. Some of the options would be sort by Quiz or Quiz Participant. I plan on awarding prizes and being able to sort them by user ID or Quiz would be nice. I did notice that under the stats your second column says Quiz Author but it should be Quiz Participant since I author all the Quizzes. Along with the sorting option, it would be nice to be able to sort Ascending or Descending.

Secondly, I would like to be able to see additional pages of attempts. Right now we can set how many statistics will be displayed for each module? I plan on having probably over 200 Quizzes eventually and rather than setting the number to 200 maybe if there could be pages of stats like there are in a thread when there are several pages of posts in a thread. Hope I'm not losing anyone yet.

Last but not least, I think it would be nice if there was a section under the member's profiles where it could show a Quiz Stats Summary for each member. It could show:

Quizzes Taken | Total Questions | Total Correct | Total Incorrect | Total Percentage
.......25...................50...................40...............10.................80%

If you could come up with these additions to your Mod John Wayne fans would be forever grateful.

Thanks Pilgrims!!!

Re: Looking for Additions

Posted: Thu Mar 27, 2008 9:29 am
by battye
Like I said in this topic - http://forums.cricketmx.com/viewtopic.p ... 578#p88578 - I have seen this and I will reply on the weekend.

Re: Looking for Additions

Posted: Sun Mar 30, 2008 1:46 am
by battye
Can you post the file "quiz_stats.php" into your next post (within

Code: Select all

 tags :)) and I'll see what I can whip up for you :)

Re: Looking for Additions

Posted: Tue Apr 01, 2008 4:44 am
by DakotaSurfer
Sorry... I've been gone for a few days... Here is the quiz_stats.php file. Thanks!

Code: Select all

<?php
/***************************************************************************
 *                               quiz_stats.php
 *                            -------------------
 *   begin                : Fri, Nov 18, 2005
 *   copyright          : (C) 2005 Battye @ CricketMX.com
 *   email                : cricketmx@hotmail.com
 *
 *   $Id: quiz_stats.php, v1 (Nov 2005) battye Exp $
 *
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/functions_quiz.'.$phpEx);

	$language = $board_config['default_lang'];
	
	if (!file_exists($phpbb_root_path . 'language/lang_' . $language . '/lang_quiz.' . $phpEx))
	{
		$language = 'english';
	}
	
	include($phpbb_root_path . 'language/lang_' . $language . '/lang_quiz.' . $phpEx);
	
	// Statistical functions
	function qs_convert_quiz($quiz_id)
	{
	global $db;
	
	$sql = "SELECT quiz_name FROM " . QUIZ_GENERAL_TABLE . " WHERE quiz_id = " . intval($quiz_id);
		
		if(!$result = $db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, '', 'Could not obtain quiz name', __LINE__, __FILE__, $sql);
		}
	
		$row = $db->sql_fetchrow($result);
		
	return $row['quiz_name'];	
	}

	function qs_convert_userid($user_id)
	{
	global $db, $board_config;
	
	$sql = "SELECT username FROM " . USERS_TABLE . " WHERE user_id = " . intval($user_id);
		
		if(!$result = $db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, '', 'Could not obtain username', __LINE__, __FILE__, $sql);
		}
	
		$row = $db->sql_fetchrow($result);
		
	return $row['username'];	
	}
	
$userdata = session_pagestart($user_ip, PAGE_QUIZ);
init_userprefs($userdata);

$mode = ( isset($HTTP_GET_VARS['mode']) ) ? $HTTP_GET_VARS['mode'] : '';

	if( $mode == '' || isset($HTTP_GET_VARS[POST_QUIZ_URL]) )
	{
	$page_title = $lang['Quiz_stats'];
	include($phpbb_root_path . "includes/page_header.$phpEx");
	$template->set_filenames(array("quiz_stats" => 'quiz_statistics_body.tpl'));

		$template->assign_vars( array(
		"L_MP_QUIZ" => $lang['Quiz_stats_most_plays'],
		"L_MP_PLAYS" => $lang['Quiz_stats_plays'],
		
		"L_QUIZ" => $lang['Quiz'],
		"L_CORRECT" => $lang['Quiz_stats_correct'],
		"L_INCORRECT" => $lang['Quiz_stats_incorrect'],
		"L_PERCENTAGE" => $lang['Quiz_stats_percentage'],
		"L_AUTHOR" => $lang['Quiz_stats_author'],
		"L_ALL_TIME_HI" => $lang['Quiz_stats_all_time_highest'],
		"L_STATS" => $lang['Quiz_stats']));

		if( isset($HTTP_GET_VARS[POST_QUIZ_URL]) )
		{
		$template->set_filenames(array("quiz_i_stats" => 'quiz_statistics_particular_body.tpl'));
		$quiz_statistics_name = qs_convert_quiz(  $HTTP_GET_VARS[POST_QUIZ_URL]  );
		
		$template->assign_vars( array(
		"U_I_QUIZ" => sprintf($lang['Quiz_stats_individual_high'], qs_convert_quiz($HTTP_GET_VARS[POST_QUIZ_URL]))));
		
			$hi_sql = "SELECT * FROM " . QUIZ_STATISTICS_TABLE . " WHERE quiz_id = " . intval($HTTP_GET_VARS[POST_QUIZ_URL]) . " ORDER BY stats_correct DESC LIMIT " .  $board_config['Quiz_Stats_Display'];
		
			if(!$hi_result = $db->sql_query($hi_sql))
			{
				message_die(GENERAL_ERROR, '', 'Could not obtain highest scores', __LINE__, __FILE__, $hi_sql);
			}
			
			if( $db->sql_numrows($hi_result) == 0 )
			{
				$template->assign_block_vars("qs_no_stats_row", array(
				"L_NOSTATS" => $lang['Quiz_stats_none']));
			}
			
			while( $hi_row = $db->sql_fetchrow($hi_result) )
			{
				$template->assign_block_vars("qs_i_highestscores_row", array(
				"U_USER" => "<a href='" . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $hi_row['user_id'] . "") . "'>" . qs_convert_userid($hi_row['user_id']) . "</a>",
				"U_CORRECT" => intval($hi_row['stats_correct']),
				"U_INCORRECT" => intval($hi_row['stats_incorrect']),
				"U_PERCENTAGE" => intval($hi_row['stats_percentage']) . '%'));
			}
		
		$template->pparse("quiz_i_stats");
		include($phpbb_root_path . "includes/page_tail.$phpEx");
		}
		
	$template->set_filenames(array("quiz_stats" => 'quiz_statistics_body.tpl'));
		
   $hi_sql = "SELECT * FROM " . QUIZ_STATISTICS_TABLE . " ORDER BY stats_correct DESC LIMIT " .  $board_config['Quiz_Stats_Display'];
	
	if(!$hi_result = $db->sql_query($hi_sql))
	{
		message_die(GENERAL_ERROR, '', 'Could not obtain highest scores', __LINE__, __FILE__, $hi_sql);
	}
		
		while( $hi_row = $db->sql_fetchrow($hi_result) )
		{
			$template->assign_block_vars("qshighestscores_row", array(
			"U_QUIZ" => "<a href='" . append_sid("quiz.$phpEx?" . POST_QUIZ_URL . "=" . $hi_row['quiz_id'] . "") . "'>" . qs_convert_quiz($hi_row['quiz_id']) . "</a>",
			"U_USER" => "<a href='" . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $hi_row['user_id'] . "") . "'>" . qs_convert_userid($hi_row['user_id']) . "</a>",
			"U_CORRECT" => intval($hi_row['stats_correct']),
			"U_INCORRECT" => intval($hi_row['stats_incorrect']),
			"U_PERCENTAGE" => intval($hi_row['stats_percentage']) . '%'));
		}
		
	$plays_sql = "SELECT * FROM " . QUIZ_GENERAL_TABLE . " ORDER BY quiz_plays DESC LIMIT " .  $board_config['Quiz_Stats_Display'];
		
	if(!$plays_result = $db->sql_query($plays_sql))
	{
		message_die(GENERAL_ERROR, '', 'Could not obtain most played quizzes', __LINE__, __FILE__, $plays_sql);
	}
		
		while( $plays_row = $db->sql_fetchrow($plays_result) )
		{
			$template->assign_block_vars("qsmostplays_row", array(
			"U_QUIZ" => "<a href='" . append_sid("quiz.$phpEx?" . POST_QUIZ_URL . "=" . $plays_row['quiz_id'] . "") . "'>" . qs_convert_quiz($plays_row['quiz_id']) . "</a>",
			"U_PLAYS" => intval($plays_row['quiz_plays'])));
		}
	
			
	$template->pparse("quiz_stats");
	include($phpbb_root_path . "includes/page_tail.$phpEx");
	}
?>

Re: Looking for Additions

Posted: Fri Apr 11, 2008 6:29 am
by battye
If you find

Code: Select all

 $hi_sql = "SELECT * FROM " . QUIZ_STATISTICS_TABLE . " WHERE quiz_id = " . intval($HTTP_GET_VARS[POST_QUIZ_URL]) . " ORDER BY stats_correct DESC LIMIT " .  $board_config['Quiz_Stats_Display'];
and replace with

Code: Select all

if( $HTTP_GET_VARS['sortoption'] == 'quiz' )
{
$sort_option = 'quiz_id';
}

else
{
$sort_option = 'stats_correct';
}

 $hi_sql = "SELECT * FROM " . QUIZ_STATISTICS_TABLE . " WHERE quiz_id = " . intval($HTTP_GET_VARS[POST_QUIZ_URL]) . " ORDER BY $sort_option DESC LIMIT " .  $board_config['Quiz_Stats_Display'];
And then go to quiz_stats.php?sortoption=quiz does it display differently?

Re: Looking for Additions

Posted: Mon Apr 14, 2008 4:06 am
by DakotaSurfer
I tried it and it didn't do a thing... no change at all.

Re: Looking for Additions

Posted: Sun Apr 20, 2008 3:39 pm
by battye
It's going to be too hard to help you by posting potential changes and you testing them, because I don't have this MOD set up anywhere. My boards are on phpBB3 now.

So what I might need to do is use your installation. If you could PM me your FTP username and password (or create a new FTP account I can use) I will do the changes directly to your installation of the Quiz MOD :)

Re: Looking for Additions

Posted: Tue Apr 22, 2008 12:26 pm
by battye
If we have a member that is active and answers a few quizzes but then we dump him and delete his account. It still shows the Quiz name with no name next to it but it still has the stats for it as well.

Where the blank spaces are is where the members name used to be at. Can these be purged or are we stuck with them until that quiz is deleted? Thanks for any help.
This one should be a simple SQL query to purge the statistics. The user that you deleted, do you remember his user_id number (ie. which number his account was). If so, all of his entries can be removed in one swift step through phpMyAdmin (do you have phpMyAdmin installed?).

Re: Looking for Additions

Posted: Tue Apr 22, 2008 11:41 pm
by DakotaSurfer
Yes, but unfortunately I have no access. I told you, these people are really strict on access. Eventually I will dump the quizzes as they get old so the blanks will leave then I guess.

Re: Looking for Additions

Posted: Wed Apr 23, 2008 2:55 am
by battye
DakotaSurfer wrote:Yes, but unfortunately I have no access. I told you, these people are really strict on access. Eventually I will dump the quizzes as they get old so the blanks will leave then I guess.
Okay. What about FTP access? If I gave you a file with which to run containing this SQL query, would you be able to upload it, and then execute it?

Re: Looking for Additions

Posted: Wed Apr 23, 2008 5:03 am
by DakotaSurfer
battye wrote:
DakotaSurfer wrote:Yes, but unfortunately I have no access. I told you, these people are really strict on access. Eventually I will dump the quizzes as they get old so the blanks will leave then I guess.
Okay. What about FTP access? If I gave you a file with which to run containing this SQL query, would you be able to upload it, and then execute it?
Yes, that I do have. I run SQL updates when I install mods and have to put a db_update.php file on the server then run it from my browser. That would work. And it's user #738. If you put that in then I'd know where to put the next number if it happens again.

Re: Looking for Additions

Posted: Sun Apr 27, 2008 2:57 am
by battye
Here is the file:

Look for these:

// Edit these
$q_user_id = 738;
$q_quiz_table = 'phpbb_quiz_statistics';

Edit the number to change the user_id, and if you use a table prefix other than phpbb_ you can change the $q_quiz_table variable to reflect this. :)

Code: Select all

<?php
/***************************************************************************
 *                               db_update.php
 *                            -------------------
 *
 *   copyright            : ©2003 Freakin' Booty ;-P & Antony Bailey
 *   project              : http://sourceforge.net/projects/dbgenerator
 *   Website              : http://freakingbooty.no-ip.com/ & http://www.rapiddr3am.net
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

// Edit these
$q_user_id = 738;
$q_quiz_table = 'phpbb_quiz_statistics';

if( !$userdata['session_logged_in'] )
{
    $header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
    header($header_location . append_sid("login.$phpEx?redirect=db_update.$phpEx", true));
    exit;
}

if( $userdata['user_level'] != ADMIN )
{
    message_die(GENERAL_MESSAGE, 'You are not authorised to access this page');
}


$page_title = 'Updating the database';
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

echo '<table width="100%" cellspacing="1" cellpadding="2" border="0" class="forumline">';
echo '<tr><th>Updating the database</th></tr><tr><td><span class="genmed"><ul type="circle">';


$sql = array();
$sql[] = "DELETE FROM $q_quiz_table WHERE user_id = $q_user_id";

for( $i = 0; $i < count($sql); $i++ )
{
    if( !$result = $db->sql_query ($sql[$i]) )
    {
        $error = $db->sql_error();

        echo '<li>' . $sql[$i] . '<br /> +++ <font color="#FF0000"><b>Error:</b></font> ' . $error['message'] . '</li><br />';
    }
    else
    {
        echo '<li>' . $sql[$i] . '<br /> +++ <font color="#00AA00"><b>Successful</b></font></li><br />';
    }
}


echo '</ul></span></td></tr><tr><td class="catBottom" height="28">&nbsp;</td></tr>';

echo '<tr><th>Installation Complete</th></tr><tr><td><span class="genmed">Please be sure to delete this file now.<br />If you require any further assistance, please visit the <a href="http://www.phpbbhacks.com/forums">phpBBHacks.com Support Forums</a>.</span></td></tr>';
echo '<tr><td class="catBottom" height="28" align="center"><span class="genmed"><a href="' . append_sid("index.$phpEx") . '">Go back to your index page</a>.</span></td></table>';

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
As always when deleting data, it is advisable to create a database backup first.

Re: Looking for Additions

Posted: Mon Apr 28, 2008 7:53 pm
by DakotaSurfer
battye wrote:Here is the file:

Look for these:

// Edit these
$q_user_id = 738;
$q_quiz_table = 'phpbb_quiz_statistics';

Edit the number to change the user_id, and if you use a table prefix other than phpbb_ you can change the $q_quiz_table variable to reflect this. :)

As always when deleting data, it is advisable to create a database backup first.
You da man... it worked perfectly. I'm sure I'm not the only one that would like this option. It's perfect for when you need to delete a member and it leaves the blank stats behind. Thanks a bunch.

Re: Looking for Additions

Posted: Sun May 04, 2008 3:24 pm
by battye
DakotaSurfer wrote:
battye wrote:Here is the file:

Look for these:

// Edit these
$q_user_id = 738;
$q_quiz_table = 'phpbb_quiz_statistics';

Edit the number to change the user_id, and if you use a table prefix other than phpbb_ you can change the $q_quiz_table variable to reflect this. :)

As always when deleting data, it is advisable to create a database backup first.
You da man... it worked perfectly. I'm sure I'm not the only one that would like this option. It's perfect for when you need to delete a member and it leaves the blank stats behind. Thanks a bunch.
Good to hear it worked! :)
I'll link to that post in the announcement at the top of this forum so others can find it easily if they look for it.

Re: Looking for Additions

Posted: Sat May 17, 2008 1:45 pm
by DakotaSurfer
I have another option for you... what if someone make a valid mistake and hit "Enter" before they were done with a quiz. Now I know he quiz gets assigned a number. If I wanted to delete quiz #4 or q=4 for user# 738 or $q_user_id = 738, could that be put in that SQL deletion routine so I can only delete the info for one quiz on a specific member using a php file? (here's hoping)