2004-09-12 15:06:29 +00:00
< ? php // $Id$
2002-07-25 13:48:14 +00:00
2003-01-01 06:34:13 +00:00
$COLUMN_HEIGHT = 300 ;
2005-03-10 13:30:57 +00:00
define ( 'CHOICE_PUBLISH_ANONYMOUS' , '0' );
define ( 'CHOICE_PUBLISH_NAMES' , '1' );
2003-01-01 06:34:13 +00:00
2006-02-08 23:46:21 +00:00
define ( 'CHOICE_SHOWRESULTS_NOT' , '0' );
define ( 'CHOICE_SHOWRESULTS_AFTER_ANSWER' , '1' );
define ( 'CHOICE_SHOWRESULTS_AFTER_CLOSE' , '2' );
define ( 'CHOICE_SHOWRESULTS_ALWAYS' , '3' );
2004-07-01 09:20:51 +00:00
2005-03-29 23:46:17 +00:00
define ( 'CHOICE_DISPLAY_HORIZONTAL' , '0' );
define ( 'CHOICE_DISPLAY_VERTICAL' , '1' );
2005-03-10 13:30:57 +00:00
$CHOICE_PUBLISH = array ( CHOICE_PUBLISH_ANONYMOUS => get_string ( 'publishanonymous' , 'choice' ),
CHOICE_PUBLISH_NAMES => get_string ( 'publishnames' , 'choice' ));
2003-01-01 06:34:13 +00:00
2006-02-08 23:46:21 +00:00
$CHOICE_SHOWRESULTS = array ( CHOICE_SHOWRESULTS_NOT => get_string ( 'publishnot' , 'choice' ),
CHOICE_SHOWRESULTS_AFTER_ANSWER => get_string ( 'publishafteranswer' , 'choice' ),
CHOICE_SHOWRESULTS_AFTER_CLOSE => get_string ( 'publishafterclose' , 'choice' ),
CHOICE_SHOWRESULTS_ALWAYS => get_string ( 'publishalways' , 'choice' ));
2004-07-01 09:20:51 +00:00
2005-03-29 23:46:17 +00:00
$CHOICE_DISPLAY = array ( CHOICE_DISPLAY_HORIZONTAL => get_string ( 'displayhorizontal' , 'choice' ),
CHOICE_DISPLAY_VERTICAL => get_string ( 'displayvertical' , 'choice' ));
2003-01-01 06:34:13 +00:00
/// Standard functions /////////////////////////////////////////////////////////
2002-07-25 13:48:14 +00:00
function choice_user_outline ( $course , $user , $mod , $choice ) {
2008-06-04 06:42:54 +00:00
global $DB ;
if ( $answer = $DB -> get_record ( 'choice_answers' , array ( 'choiceid' => $choice -> id , 'userid' => $user -> id ))) {
2005-04-14 22:37:43 +00:00
$result -> info = " ' " . format_string ( choice_get_option_text ( $choice , $answer -> optionid )) . " ' " ;
2005-03-30 18:33:56 +00:00
$result -> time = $answer -> timemodified ;
2002-07-25 13:48:14 +00:00
return $result ;
}
return NULL ;
}
function choice_user_complete ( $course , $user , $mod , $choice ) {
2008-06-04 06:42:54 +00:00
global $DB ;
if ( $answer = $DB -> get_record ( 'choice_answers' , array ( " choiceid " => $choice -> id , " userid " => $user -> id ))) {
2005-04-14 22:37:43 +00:00
$result -> info = " ' " . format_string ( choice_get_option_text ( $choice , $answer -> optionid )) . " ' " ;
2005-03-30 18:33:56 +00:00
$result -> time = $answer -> timemodified ;
2005-04-14 22:37:43 +00:00
echo get_string ( " answered " , " choice " ) . " : $result->info . " . get_string ( " updated " , '' , userdate ( $result -> time ));
2002-07-25 13:48:14 +00:00
} else {
2002-08-12 08:28:04 +00:00
print_string ( " notanswered " , " choice " );
2002-07-25 13:48:14 +00:00
}
}
2002-08-03 02:29:21 +00:00
function choice_add_instance ( $choice ) {
2008-06-01 21:36:11 +00:00
global $DB ;
2006-11-24 12:20:26 +00:00
// Given an object containing all the necessary data,
2008-06-01 19:09:13 +00:00
// (defined by the form in mod_form.php) this function
2006-11-24 12:20:26 +00:00
// will create a new instance and return the id number
2002-08-03 02:29:21 +00:00
// of the new instance.
$choice -> timemodified = time ();
2006-11-24 12:20:26 +00:00
if ( empty ( $choice -> timerestrict )) {
2004-07-01 12:52:15 +00:00
$choice -> timeopen = 0 ;
$choice -> timeclose = 0 ;
}
2006-10-16 00:01:13 +00:00
//insert answers
2008-06-01 21:36:11 +00:00
if ( $choice -> id = $DB -> insert_record ( " choice " , $choice )) {
2006-11-24 12:20:26 +00:00
foreach ( $choice -> option as $key => $value ) {
$value = trim ( $value );
if ( isset ( $value ) && $value <> '' ) {
$option = new object ();
$option -> text = $value ;
$option -> choiceid = $choice -> id ;
if ( isset ( $choice -> limit [ $key ])) {
$option -> maxanswers = $choice -> limit [ $key ];
2005-03-30 16:26:36 +00:00
}
2006-11-24 12:20:26 +00:00
$option -> timemodified = time ();
2008-06-01 21:36:11 +00:00
$DB -> insert_record ( " choice_options " , $option );
2005-03-29 23:46:17 +00:00
}
}
}
2005-03-30 16:26:36 +00:00
return $choice -> id ;
2002-08-03 02:29:21 +00:00
}
function choice_update_instance ( $choice ) {
2008-06-01 21:36:11 +00:00
global $DB ;
2006-11-24 12:20:26 +00:00
// Given an object containing all the necessary data,
2008-06-01 19:09:13 +00:00
// (defined by the form in mod_form.php) this function
2002-08-03 02:29:21 +00:00
// will update an existing instance with new data.
$choice -> id = $choice -> instance ;
$choice -> timemodified = time ();
2004-07-01 12:52:15 +00:00
2006-11-24 12:20:26 +00:00
if ( empty ( $choice -> timerestrict )) {
2004-07-01 12:52:15 +00:00
$choice -> timeopen = 0 ;
$choice -> timeclose = 0 ;
}
2006-10-16 00:01:13 +00:00
2006-11-24 12:20:26 +00:00
//update, delete or insert answers
foreach ( $choice -> option as $key => $value ) {
2005-03-30 16:26:36 +00:00
$value = trim ( $value );
2006-11-24 12:20:26 +00:00
$option = new object ();
$option -> text = $value ;
$option -> choiceid = $choice -> id ;
if ( isset ( $choice -> limit [ $key ])) {
$option -> maxanswers = $choice -> limit [ $key ];
}
$option -> timemodified = time ();
2006-12-05 13:32:32 +00:00
if ( isset ( $choice -> optionid [ $key ]) && ! empty ( $choice -> optionid [ $key ])){ //existing choice record
2006-11-24 12:20:26 +00:00
$option -> id = $choice -> optionid [ $key ];
2005-06-27 00:58:24 +00:00
if ( isset ( $value ) && $value <> '' ) {
2008-06-01 21:36:11 +00:00
$DB -> update_record ( " choice_options " , $option );
2005-04-11 20:34:13 +00:00
} else { //empty old option - needs to be deleted.
2008-06-01 21:36:11 +00:00
$DB -> delete_records ( " choice_options " , array ( " id " => $option -> id ));
2005-04-14 21:10:39 +00:00
}
2006-11-24 12:20:26 +00:00
} else {
if ( isset ( $value ) && $value <> '' ) {
2008-06-01 21:36:11 +00:00
$DB -> insert_record ( " choice_options " , $option );
2005-03-30 16:26:36 +00:00
}
2006-10-16 00:01:13 +00:00
}
2005-03-29 23:46:17 +00:00
}
2004-07-01 12:52:15 +00:00
2008-06-01 21:36:11 +00:00
return $DB -> update_record ( 'choice' , $choice );
2006-10-16 00:01:13 +00:00
2002-08-03 02:29:21 +00:00
}
2008-03-03 04:42:01 +00:00
function choice_show_form ( $choice , $user , $cm , $allresponses ) {
2008-06-04 06:42:54 +00:00
global $DB ;
2006-02-23 01:20:24 +00:00
//$cdisplay is an array of the display info for a choice $cdisplay[$optionid]->text - text name of option.
// ->maxanswers -maxanswers for this option
// ->full - whether this option is full or not. 0=not full, 1=full
2006-09-11 07:17:10 +00:00
$cdisplay = array ();
2006-02-23 01:20:24 +00:00
$aid = 0 ;
2008-01-18 00:32:31 +00:00
$choicefull = false ;
2008-03-03 04:42:01 +00:00
$cdisplay = array ();
2008-01-18 00:32:31 +00:00
if ( $choice -> limitanswers ) { //set choicefull to true by default if limitanswers.
$choicefull = true ;
}
2008-03-03 04:42:01 +00:00
2008-01-18 00:32:31 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
2006-02-23 01:20:24 +00:00
foreach ( $choice -> option as $optionid => $text ) {
2008-03-06 19:56:29 +00:00
if ( isset ( $text )) { //make sure there are no dud entries in the db with blank text values.
2006-08-09 13:45:49 +00:00
$cdisplay [ $aid ] -> optionid = $optionid ;
$cdisplay [ $aid ] -> text = $text ;
2008-03-03 04:42:01 +00:00
$cdisplay [ $aid ] -> maxanswers = $choice -> maxanswers [ $optionid ];
2008-03-11 19:01:34 +00:00
if ( isset ( $allresponses [ $optionid ])) {
$cdisplay [ $aid ] -> countanswers = count ( $allresponses [ $optionid ]);
} else {
$cdisplay [ $aid ] -> countanswers = 0 ;
}
2008-06-04 06:42:54 +00:00
if ( $current = $DB -> get_record ( 'choice_answers' , array ( 'choiceid' => $choice -> id , 'userid' => $user -> id , 'optionid' => $optionid ))) {
2006-10-16 00:01:13 +00:00
$cdisplay [ $aid ] -> checked = ' checked="checked" ' ;
2006-08-09 13:45:49 +00:00
} else {
2006-10-16 00:01:13 +00:00
$cdisplay [ $aid ] -> checked = '' ;
2006-08-09 13:45:49 +00:00
}
2008-06-04 06:42:54 +00:00
if ( $choice -> limitanswers &&
( $cdisplay [ $aid ] -> countanswers >= $cdisplay [ $aid ] -> maxanswers ) &&
2008-03-03 04:42:01 +00:00
( empty ( $cdisplay [ $aid ] -> checked )) ) {
2006-10-16 00:01:13 +00:00
$cdisplay [ $aid ] -> disabled = ' disabled="disabled" ' ;
2006-08-09 13:45:49 +00:00
} else {
2006-11-24 12:20:26 +00:00
$cdisplay [ $aid ] -> disabled = '' ;
2008-03-03 04:42:01 +00:00
if ( $choice -> limitanswers && ( $cdisplay [ $aid ] -> countanswers < $cdisplay [ $aid ] -> maxanswers )) {
2008-01-18 00:32:31 +00:00
$choicefull = false ; //set $choicefull to false - as the above condition hasn't been set.
}
2006-08-09 13:45:49 +00:00
}
2006-02-23 01:20:24 +00:00
$aid ++ ;
}
}
2006-09-11 07:17:10 +00:00
switch ( $choice -> display ) {
case CHOICE_DISPLAY_HORIZONTAL :
2007-01-09 01:38:24 +00:00
echo " <table cellpadding= \" 20 \" cellspacing= \" 20 \" class= \" boxaligncenter \" ><tr> " ;
2006-11-24 12:20:26 +00:00
foreach ( $cdisplay as $cd ) {
2006-09-11 07:17:10 +00:00
echo " <td align= \" center \" valign= \" top \" > " ;
2006-10-16 00:01:13 +00:00
echo " <input type= \" radio \" name= \" answer \" value= \" " . $cd -> optionid . " \" alt= \" " . strip_tags ( format_text ( $cd -> text )) . " \" " . $cd -> checked . $cd -> disabled . " /> " ;
2006-11-24 12:20:26 +00:00
if ( ! empty ( $cd -> disabled )) {
2006-10-16 00:01:13 +00:00
echo format_text ( $cd -> text . " <br /><strong> " . get_string ( 'full' , 'choice' ) . " </strong> " );
2006-09-11 07:17:10 +00:00
} else {
echo format_text ( $cd -> text );
2006-02-23 01:20:24 +00:00
}
2006-10-16 00:01:13 +00:00
echo " </td> " ;
2006-09-11 07:17:10 +00:00
}
echo " </tr> " ;
echo " </table> " ;
break ;
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
case CHOICE_DISPLAY_VERTICAL :
$displayoptions -> para = false ;
2007-01-09 01:38:24 +00:00
echo " <table cellpadding= \" 10 \" cellspacing= \" 10 \" class= \" boxaligncenter \" > " ;
2006-10-16 00:01:13 +00:00
foreach ( $cdisplay as $cd ) {
2006-09-11 07:17:10 +00:00
echo " <tr><td align= \" left \" > " ;
2006-10-16 00:01:13 +00:00
echo " <input type= \" radio \" name= \" answer \" value= \" " . $cd -> optionid . " \" alt= \" " . strip_tags ( format_text ( $cd -> text )) . " \" " . $cd -> checked . $cd -> disabled . " /> " ;
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
echo format_text ( $cd -> text . ' ' , FORMAT_MOODLE , $displayoptions ); //display text for option.
2006-10-16 00:01:13 +00:00
2006-09-11 07:17:10 +00:00
if ( $choice -> limitanswers && ( $choice -> showresults == CHOICE_SHOWRESULTS_ALWAYS ) ){ //if limit is enabled, and show results always has been selected, display info beside each choice.
echo " </td><td> " ;
2006-10-16 00:01:13 +00:00
2006-09-11 07:17:10 +00:00
if ( ! empty ( $cd -> disabled )) {
echo get_string ( 'full' , 'choice' );
} elseif ( ! empty ( $cd -> checked )) {
2006-08-09 13:45:49 +00:00
//currently do nothing - maybe some text could be added here to signfy that the choice has been 'selected'
2006-09-11 07:17:10 +00:00
} elseif ( $cd -> maxanswers - $cd -> countanswers == 1 ) {
echo ( $cd -> maxanswers - $cd -> countanswers );
echo " " . get_string ( 'spaceleft' , 'choice' );
} else {
echo ( $cd -> maxanswers - $cd -> countanswers );
echo " " . get_string ( 'spacesleft' , 'choice' );
}
echo " </td> " ;
} else if ( $choice -> limitanswers && ( $cd -> countanswers >= $cd -> maxanswers )) { //if limitanswers and answers exceeded, display "full" beside the choice.
echo " <strong> " . get_string ( 'full' , 'choice' ) . " </strong> " ;
2006-02-23 01:20:24 +00:00
}
2006-09-11 07:17:10 +00:00
echo " </td> " ;
echo " </tr> " ;
}
echo " </table> " ;
break ;
}
//show save choice button
2007-01-09 01:38:24 +00:00
echo '<div class="button">' ;
2006-09-11 07:17:10 +00:00
echo " <input type= \" hidden \" name= \" id \" value= \" $cm->id\ " /> " ;
2008-01-18 00:32:31 +00:00
if ( has_capability ( 'mod/choice:choose' , $context , $user -> id , false )) { //don't show save button if the logged in user is the guest user.
if ( $choicefull ) {
print_string ( 'choicefull' , 'choice' );
echo " </br> " ;
} else {
echo " <input type= \" submit \" value= \" " . get_string ( " savemychoice " , " choice " ) . " \" /> " ;
}
2008-06-04 06:42:54 +00:00
if ( $choice -> allowupdate && $aaa = $DB -> get_record ( 'choice_answers' , 'choiceid' , $choice -> id , 'userid' , $user -> id )) {
2007-10-24 21:27:26 +00:00
echo " <br /><a href='view.php?id= " . $cm -> id . " &action=delchoice'> " . get_string ( " removemychoice " , " choice " ) . " </a> " ;
2007-05-03 00:04:53 +00:00
}
2006-09-11 07:17:10 +00:00
} else {
print_string ( 'havetologin' , 'choice' );
}
2007-01-09 01:38:24 +00:00
echo " </div> " ;
2006-02-23 01:20:24 +00:00
}
2006-04-04 23:03:15 +00:00
function choice_user_submit_response ( $formanswer , $choice , $userid , $courseid , $cm ) {
2008-06-04 06:42:54 +00:00
global $DB ;
$current = $DB -> get_record ( 'choice_answers' , array ( 'choiceid' => $choice -> id , 'userid' => $userid ));
2006-08-09 13:45:49 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
2008-05-27 10:16:25 +00:00
$countanswers = 0 ;
if ( $choice -> limitanswers ) {
// Find out whether groups are being used and enabled
if ( groups_get_activity_groupmode ( $cm ) > 0 ) {
$currentgroup = groups_get_activity_group ( $cm );
} else {
$currentgroup = 0 ;
}
if ( $currentgroup ) {
// If groups are being used, retrieve responses only for users in
// current group
global $CFG ;
2008-06-04 06:42:54 +00:00
$answers = $DB -> get_records_sql ( "
SELECT
2008-05-27 10:16:25 +00:00
ca .*
2008-06-04 06:42:54 +00:00
FROM
{ choice_answers } ca
INNER JOIN { groups_members } gm ON ca . userid = gm . userid
2008-05-27 10:16:25 +00:00
WHERE
2008-06-04 06:42:54 +00:00
optionid = ?
AND gm . groupid = ? " , array( $formanswer , $currentgroup ));
2008-05-27 10:16:25 +00:00
} else {
// Groups are not used, retrieve all answers for this option ID
2008-06-04 06:42:54 +00:00
$answers = $DB -> get_records ( " choice_answers " , array ( " optionid " => $formanswer ));
2006-10-16 00:01:13 +00:00
}
2008-05-27 10:16:25 +00:00
if ( $answers ) {
foreach ( $answers as $a ) { //only return enrolled users.
if ( has_capability ( 'mod/choice:choose' , $context , $a -> userid , false )) {
$countanswers ++ ;
}
}
}
$maxans = $choice -> maxanswers [ $formanswer ];
2006-09-11 07:17:10 +00:00
}
2006-10-16 00:01:13 +00:00
if ( ! ( $choice -> limitanswers && ( $countanswers >= $maxans ) )) {
2006-09-11 07:17:10 +00:00
if ( $current ) {
2006-11-24 12:20:26 +00:00
2006-09-11 07:17:10 +00:00
$newanswer = $current ;
$newanswer -> optionid = $formanswer ;
$newanswer -> timemodified = time ();
2008-06-04 06:42:54 +00:00
if ( ! $DB -> update_record ( " choice_answers " , $newanswer )) {
2008-05-23 07:03:17 +00:00
print_error ( 'cannotupdatechoice' , 'choice' );
2006-02-23 01:20:24 +00:00
}
2006-09-11 07:17:10 +00:00
add_to_log ( $courseid , " choice " , " choose again " , " view.php?id= $cm->id " , $choice -> id , $cm -> id );
} else {
$newanswer = NULL ;
$newanswer -> choiceid = $choice -> id ;
$newanswer -> userid = $userid ;
$newanswer -> optionid = $formanswer ;
$newanswer -> timemodified = time ();
2008-06-04 06:42:54 +00:00
if ( ! $DB -> insert_record ( " choice_answers " , $newanswer )) {
2008-05-23 07:03:17 +00:00
print_error ( 'cannotsavechoice' , 'choice' );
2006-09-11 07:17:10 +00:00
}
add_to_log ( $courseid , " choice " , " choose " , " view.php?id= $cm->id " , $choice -> id , $cm -> id );
}
} else {
if ( ! ( $current -> optionid == $formanswer )) { //check to see if current choice already selected - if not display error
2008-05-23 07:03:17 +00:00
print_error ( 'choicefull' , 'choice' );
2006-09-11 07:17:10 +00:00
}
}
2006-02-23 01:20:24 +00:00
}
2008-03-03 04:42:01 +00:00
function choice_show_reportlink ( $user , $cm ) {
$responsecount = 0 ;
foreach ( $user as $optionid => $userlist ) {
if ( $optionid ) {
$responsecount += count ( $userlist );
}
2008-03-03 04:36:32 +00:00
}
2008-01-10 14:08:19 +00:00
2006-09-11 07:17:10 +00:00
echo '<div class="reportlink">' ;
2008-01-10 14:08:19 +00:00
echo " <a href= \" report.php?id= $cm->id\ " > " .get_string( " viewallresponses " , " choice " , $responsecount ). " </ a > " ;
2006-09-11 07:17:10 +00:00
echo '</div>' ;
2006-02-23 01:20:24 +00:00
}
2008-03-03 05:24:55 +00:00
function choice_show_results ( $choice , $course , $cm , $allresponses , $forcepublish = '' ) {
2008-03-03 04:42:01 +00:00
global $CFG , $COLUMN_HEIGHT ;
2008-06-04 06:42:54 +00:00
2006-10-16 00:01:13 +00:00
print_heading ( get_string ( " responses " , " choice " ));
2006-09-11 07:17:10 +00:00
if ( empty ( $forcepublish )) { //alow the publish setting to be overridden
$forcepublish = $choice -> publish ;
2006-10-16 00:01:13 +00:00
}
2008-03-03 05:24:55 +00:00
if ( ! $allresponses ) {
2006-09-11 07:17:10 +00:00
print_heading ( get_string ( " nousersyet " ));
}
2008-03-03 05:12:22 +00:00
$totalresponsecount = 0 ;
2008-03-03 05:24:55 +00:00
foreach ( $allresponses as $optionid => $userlist ) {
2008-03-03 05:12:22 +00:00
if ( $choice -> showunanswered || $optionid ) {
$totalresponsecount += count ( $userlist );
}
}
2008-06-04 06:42:54 +00:00
2008-03-03 04:42:01 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
2006-02-23 01:20:24 +00:00
2008-03-03 04:42:01 +00:00
$hascapfullnames = has_capability ( 'moodle/site:viewfullnames' , $context );
2008-06-04 06:42:54 +00:00
$viewresponses = has_capability ( 'mod/choice:readresponses' , $context );
2006-09-11 07:17:10 +00:00
switch ( $forcepublish ) {
case CHOICE_PUBLISH_NAMES :
2008-08-19 05:17:07 +00:00
echo '<div id="tablecontainer">' ;
if ( $viewresponses ) {
2008-09-23 21:22:04 +00:00
echo '<form id="attemptsform" method="post" action="' . $_SERVER [ 'PHP_SELF' ] . '" onsubmit="var menu = document.getElementById(\'menuaction\'); return (menu.options[menu.selectedIndex].value == \'delete\' ? \'' . addslashes_js ( get_string ( 'deleteattemptcheck' , 'quiz' )) . '\' : true);">' ;
2007-01-09 03:14:34 +00:00
echo '<div>' ;
2006-02-23 01:20:24 +00:00
echo '<input type="hidden" name="id" value="' . $cm -> id . '" />' ;
echo '<input type="hidden" name="mode" value="overview" />' ;
2008-08-19 05:17:07 +00:00
}
2006-10-16 00:01:13 +00:00
2007-01-09 01:38:24 +00:00
echo " <table cellpadding= \" 5 \" cellspacing= \" 10 \" class= \" results names \" > " ;
2006-02-23 01:20:24 +00:00
echo " <tr> " ;
2008-06-04 06:42:54 +00:00
2007-04-24 20:09:01 +00:00
$columncount = array (); // number of votes in each column
2008-03-03 04:42:01 +00:00
if ( $choice -> showunanswered ) {
$columncount [ 0 ] = 0 ;
echo " <th class= \" col0 header \" scope= \" col \" > " ;
print_string ( 'notanswered' , 'choice' );
echo " </th> " ;
}
$count = 1 ;
foreach ( $choice -> option as $optionid => $optiontext ) {
2007-04-24 20:09:01 +00:00
$columncount [ $optionid ] = 0 ; // init counters
2008-03-03 04:42:01 +00:00
echo " <th class= \" col $count header \" scope= \" col \" > " ;
echo format_string ( $optiontext );
2006-02-23 01:20:24 +00:00
echo " </th> " ;
$count ++ ;
}
echo " </tr><tr> " ;
2008-03-03 04:42:01 +00:00
if ( $choice -> showunanswered ) {
echo " <td class= \" col $count data \" > " ;
2007-01-09 03:14:34 +00:00
// added empty row so that when the next iteration is empty,
// we do not get <table></table> erro from w3c validator
// MDL-7861
echo " <table class= \" choiceresponse \" ><tr><td></td></tr> " ;
2008-03-03 05:24:55 +00:00
foreach ( $allresponses [ 0 ] as $user ) {
2008-03-03 04:42:01 +00:00
echo " <tr> " ;
echo " <td class= \" picture \" > " ;
print_user_picture ( $user -> id , $course -> id , $user -> picture );
echo " </td><td class= \" fullname \" > " ;
echo " <a href= \" $CFG->wwwroot /user/view.php?id= $user->id &course= $course->id\ " > " ;
echo fullname ( $user , $hascapfullnames );
echo " </a> " ;
echo " </td></tr> " ;
2006-02-23 01:20:24 +00:00
}
2008-03-03 04:42:01 +00:00
echo " </table></td> " ;
}
$count = 0 ;
foreach ( $choice -> option as $optionid => $optiontext ) {
echo '<td class="col' . $count . ' data" >' ;
// added empty row so that when the next iteration is empty,
// we do not get <table></table> erro from w3c validator
// MDL-7861
echo '<table class="choiceresponse"><tr><td></td></tr>' ;
2008-03-03 05:24:55 +00:00
if ( isset ( $allresponses [ $optionid ])) {
foreach ( $allresponses [ $optionid ] as $user ) {
2008-03-03 04:42:01 +00:00
$columncount [ $optionid ] += 1 ;
echo '<tr><td class="attemptcell">' ;
2008-05-22 10:13:55 +00:00
if ( $viewresponses and has_capability ( 'mod/choice:deleteresponses' , $context )) {
2008-03-03 04:42:01 +00:00
echo '<input type="checkbox" name="attemptid[]" value="' . $user -> id . '" />' ;
}
echo '</td><td class="picture">' ;
print_user_picture ( $user -> id , $course -> id , $user -> picture );
echo '</td><td class="fullname">' ;
echo " <a href= \" $CFG->wwwroot /user/view.php?id= $user->id &course= $course->id\ " > " ;
echo fullname ( $user , $hascapfullnames );
echo '</a>' ;
echo '</td></tr>' ;
}
}
$count ++ ;
echo '</table></td>' ;
2006-02-23 01:20:24 +00:00
}
echo " </tr><tr> " ;
$count = 0 ;
2008-06-04 06:42:54 +00:00
2008-03-03 04:42:01 +00:00
if ( $choice -> showunanswered ) {
echo " <td></td> " ;
}
2008-06-04 06:42:54 +00:00
2008-03-03 04:42:01 +00:00
foreach ( $choice -> option as $optionid => $optiontext ) {
2006-02-23 01:20:24 +00:00
echo " <td align= \" center \" class= \" count \" > " ;
2008-03-03 04:42:01 +00:00
if ( $choice -> limitanswers ) {
2006-02-23 01:20:24 +00:00
echo get_string ( " taken " , " choice " ) . " : " ;
2007-04-24 20:09:01 +00:00
echo $columncount [ $optionid ];
2007-01-04 23:38:17 +00:00
echo " <br/> " ;
2006-02-23 01:20:24 +00:00
echo get_string ( " limit " , " choice " ) . " : " ;
2008-06-04 06:42:54 +00:00
$choice_option = $DB -> get_record ( " choice_options " , array ( " id " => $optionid ));
2006-02-23 01:20:24 +00:00
echo $choice_option -> maxanswers ;
2007-10-22 21:49:58 +00:00
} else {
2008-03-03 04:42:01 +00:00
if ( isset ( $columncount [ $optionid ])) {
echo $columncount [ $optionid ];
}
2006-02-23 01:20:24 +00:00
}
echo " </td> " ;
$count ++ ;
}
2006-12-21 07:50:19 +00:00
echo " </tr> " ;
2008-06-04 06:42:54 +00:00
2006-09-11 07:17:10 +00:00
/// Print "Select all" etc.
2008-05-22 10:13:55 +00:00
if ( $viewresponses and has_capability ( 'mod/choice:deleteresponses' , $context )) {
2006-12-21 07:50:19 +00:00
echo '<tr><td></td><td>' ;
2006-09-11 07:17:10 +00:00
echo '<a href="javascript:select_all_in(\'DIV\',null,\'tablecontainer\');">' . get_string ( 'selectall' , 'quiz' ) . '</a> / ' ;
echo '<a href="javascript:deselect_all_in(\'DIV\',null,\'tablecontainer\');">' . get_string ( 'selectnone' , 'quiz' ) . '</a> ' ;
echo ' ' ;
$options = array ( 'delete' => get_string ( 'delete' ));
echo choose_from_menu ( $options , 'action' , '' , get_string ( 'withselected' , 'quiz' ), 'if(this.selectedIndex > 0) submitFormById(\'attemptsform\');' , '' , true );
echo '<noscript id="noscriptmenuaction" style="display: inline;">' ;
2007-01-09 03:14:34 +00:00
echo '<div>' ;
echo '<input type="submit" value="' . get_string ( 'go' ) . '" /></div></noscript>' ;
2006-09-11 07:17:10 +00:00
echo '<script type="text/javascript">' . " \n <!-- \n " . 'document.getElementById("noscriptmenuaction").style.display = "none";' . " \n --> \n " . '</script>' ;
2006-12-21 07:50:19 +00:00
echo '</td><td></td></tr>' ;
2006-09-11 07:17:10 +00:00
}
2008-06-04 06:42:54 +00:00
2008-08-19 05:17:07 +00:00
echo " </table></div> " ;
2008-03-03 04:42:01 +00:00
if ( $viewresponses ) {
2008-08-19 05:17:07 +00:00
echo " </form></div> " ;
2006-08-09 13:45:49 +00:00
}
2006-02-23 01:20:24 +00:00
break ;
2008-06-04 06:42:54 +00:00
2006-09-11 07:17:10 +00:00
case CHOICE_PUBLISH_ANONYMOUS :
2006-10-16 00:01:13 +00:00
2007-01-09 01:38:24 +00:00
echo " <table cellpadding= \" 5 \" cellspacing= \" 0 \" class= \" results anonymous \" > " ;
2006-02-23 01:20:24 +00:00
echo " <tr> " ;
2008-03-03 04:42:01 +00:00
$maxcolumn = 0 ;
if ( $choice -> showunanswered ) {
echo " <th class= \" col0 header \" scope= \" col \" > " ;
print_string ( 'notanswered' , 'choice' );
2006-02-23 01:20:24 +00:00
echo " </th> " ;
2008-03-03 04:42:01 +00:00
$column [ 0 ] = 0 ;
2008-03-03 05:24:55 +00:00
foreach ( $allresponses [ 0 ] as $user ) {
2008-03-03 04:42:01 +00:00
$column [ 0 ] ++ ;
}
$maxcolumn = $column [ 0 ];
2006-02-23 01:20:24 +00:00
}
2008-03-03 04:42:01 +00:00
$count = 1 ;
2006-02-23 01:20:24 +00:00
2008-03-03 04:42:01 +00:00
foreach ( $choice -> option as $optionid => $optiontext ) {
echo " <th class= \" col $count header \" scope= \" col \" > " ;
echo format_string ( $optiontext );
echo " </th> " ;
2008-06-04 06:42:54 +00:00
2006-02-23 01:20:24 +00:00
$column [ $optionid ] = 0 ;
2008-03-03 05:24:55 +00:00
if ( isset ( $allresponses [ $optionid ])) {
$column [ $optionid ] = count ( $allresponses [ $optionid ]);
2008-03-03 04:42:01 +00:00
if ( $column [ $optionid ] > $maxcolumn ) {
$maxcolumn = $column [ $optionid ];
}
} else {
$column [ $optionid ] = 0 ;
2006-02-23 01:20:24 +00:00
}
}
2008-03-03 04:42:01 +00:00
echo " </tr><tr> " ;
2006-02-23 01:20:24 +00:00
2008-03-03 04:42:01 +00:00
$height = 0 ;
if ( $choice -> showunanswered ) {
if ( $maxcolumn ) {
$height = $COLUMN_HEIGHT * (( float ) $column [ 0 ] / ( float ) $maxcolumn );
2006-02-23 01:20:24 +00:00
}
2008-03-03 04:42:01 +00:00
echo " <td style= \" vertical-align:bottom \" align= \" center \" class= \" col0 data \" > " ;
echo " <img src= \" column.png \" height= \" $height\ " width = \ " 49 \" alt= \" \" /> " ;
echo " </td> " ;
}
$count = 1 ;
foreach ( $choice -> option as $optionid => $optiontext ) {
2006-02-23 01:20:24 +00:00
if ( $maxcolumn ) {
$height = $COLUMN_HEIGHT * (( float ) $column [ $optionid ] / ( float ) $maxcolumn );
}
2007-10-24 21:27:26 +00:00
echo " <td style= \" vertical-align:bottom \" align= \" center \" class= \" col $count data \" > " ;
2006-02-23 01:20:24 +00:00
echo " <img src= \" column.png \" height= \" $height\ " width = \ " 49 \" alt= \" \" /> " ;
echo " </td> " ;
$count ++ ;
}
2008-03-03 04:42:01 +00:00
echo " </tr><tr> " ;
2006-02-23 01:20:24 +00:00
2008-03-03 04:42:01 +00:00
if ( $choice -> showunanswered ) {
2008-03-03 05:12:22 +00:00
echo '<td align="center" class="col0 count">' ;
if ( ! $choice -> limitanswers ) {
echo $column [ 0 ];
echo '<br />(' . format_float ((( float ) $column [ 0 ] / ( float ) $totalresponsecount ) * 100.0 , 1 ) . '%)' ;
}
echo '</td>' ;
2008-03-03 04:42:01 +00:00
}
$count = 1 ;
foreach ( $choice -> option as $optionid => $optiontext ) {
2006-02-23 01:20:24 +00:00
echo " <td align= \" center \" class= \" col $count count \" > " ;
2008-03-03 04:42:01 +00:00
if ( $choice -> limitanswers ) {
2006-02-23 01:20:24 +00:00
echo get_string ( " taken " , " choice " ) . " : " ;
2008-03-03 05:12:22 +00:00
echo $column [ $optionid ] . '<br />' ;
2006-02-23 01:20:24 +00:00
echo get_string ( " limit " , " choice " ) . " : " ;
2008-06-04 06:42:54 +00:00
$choice_option = $DB -> get_record ( " choice_options " , array ( " id " => $optionid ));
2006-02-23 01:20:24 +00:00
echo $choice_option -> maxanswers ;
} else {
echo $column [ $optionid ];
2008-03-03 05:12:22 +00:00
echo '<br />(' . format_float ((( float ) $column [ $optionid ] / ( float ) $totalresponsecount ) * 100.0 , 1 ) . '%)' ;
2006-02-23 01:20:24 +00:00
}
echo " </td> " ;
$count ++ ;
}
echo " </tr></table> " ;
2008-06-04 06:42:54 +00:00
2008-03-03 04:42:01 +00:00
break ;
2006-11-24 12:20:26 +00:00
}
2006-02-23 01:20:24 +00:00
}
2008-03-03 04:42:01 +00:00
function choice_delete_responses ( $attemptids , $choiceid ) {
2008-06-04 06:42:54 +00:00
global $DB ;
2006-08-09 13:45:49 +00:00
if ( ! is_array ( $attemptids ) || empty ( $attemptids )) {
2006-02-23 01:20:24 +00:00
return false ;
}
foreach ( $attemptids as $num => $attemptid ) {
if ( empty ( $attemptid )) {
unset ( $attemptids [ $num ]);
}
}
foreach ( $attemptids as $attemptid ) {
2008-06-04 06:42:54 +00:00
if ( $todelete = $DB -> get_record ( 'choice_answers' , array ( 'choiceid' => $choiceid , 'userid' => $attemptid ))) {
$DB -> delete_records ( 'choice_answers' , array ( 'choiceid' => $choiceid , 'userid' => $attemptid ));
2006-02-23 01:20:24 +00:00
}
2006-11-24 12:20:26 +00:00
}
2006-02-23 01:20:24 +00:00
return true ;
}
2002-08-03 02:29:21 +00:00
function choice_delete_instance ( $id ) {
2008-06-01 21:36:11 +00:00
global $DB ;
2006-11-24 12:20:26 +00:00
// Given an ID of an instance of this module,
// this function will permanently delete the instance
// and any data that depends on it.
2002-08-03 02:29:21 +00:00
2008-06-01 21:36:11 +00:00
if ( ! $choice = $DB -> get_record ( " choice " , array ( " id " => " $id " ))) {
2002-08-03 02:29:21 +00:00
return false ;
}
$result = true ;
2008-06-01 21:36:11 +00:00
if ( ! $DB -> delete_records ( " choice_answers " , array ( " choiceid " => " $choice->id " ))) {
2002-08-03 02:29:21 +00:00
$result = false ;
}
2008-06-01 21:36:11 +00:00
if ( ! $DB -> delete_records ( " choice_options " , array ( " choiceid " => " $choice->id " ))) {
2002-08-03 02:29:21 +00:00
$result = false ;
}
2005-03-30 16:26:36 +00:00
2008-06-01 21:36:11 +00:00
if ( ! $DB -> delete_records ( " choice " , array ( " id " => " $choice->id " ))) {
2005-03-29 23:46:17 +00:00
$result = false ;
2006-11-24 12:20:26 +00:00
}
2002-08-03 02:29:21 +00:00
return $result ;
}
2003-09-29 15:27:30 +00:00
function choice_get_participants ( $choiceid ) {
//Returns the users with data in one choice
2005-03-29 23:46:17 +00:00
//(users with records in choice_responses, students)
2003-09-29 15:27:30 +00:00
2008-08-15 09:21:33 +00:00
global $DB ;
2003-09-29 15:27:30 +00:00
//Get students
2008-06-04 06:42:54 +00:00
$students = $DB -> get_records_sql ( " SELECT DISTINCT u.id, u.id
FROM { user } u ,
{ choice_answers } a
WHERE a . choiceid = ? AND
u . id = a . userid " , array( $choiceid ));
2003-09-29 15:27:30 +00:00
//Return students array (it contains an array of unique users)
return ( $students );
}
2002-08-03 02:29:21 +00:00
2005-03-30 16:26:36 +00:00
function choice_get_option_text ( $choice , $id ) {
2008-06-04 06:42:54 +00:00
global $DB ;
2005-03-30 16:26:36 +00:00
// Returns text string which is the answer that matches the id
2008-06-04 06:42:54 +00:00
if ( $result = $DB -> get_record ( " choice_options " , array ( " id " => $id ))) {
2005-03-30 16:26:36 +00:00
return $result -> text ;
2005-03-29 23:46:17 +00:00
} else {
return get_string ( " notanswered " , " choice " );
2006-10-16 00:01:13 +00:00
}
2002-08-12 08:28:04 +00:00
}
2002-09-08 09:42:07 +00:00
function choice_get_choice ( $choiceid ) {
2008-06-04 06:42:54 +00:00
global $DB ;
2006-10-16 00:01:13 +00:00
// Gets a full choice record
2005-03-30 16:26:36 +00:00
2008-06-04 06:42:54 +00:00
if ( $choice = $DB -> get_record ( " choice " , array ( " id " => $choiceid ))) {
if ( $options = $DB -> get_records ( " choice_options " , array ( " choiceid " => $choiceid ), " id " )) {
2006-10-16 00:01:13 +00:00
foreach ( $options as $option ) {
2006-11-24 12:20:26 +00:00
$choice -> option [ $option -> id ] = $option -> text ;
2005-04-14 21:10:39 +00:00
$choice -> maxanswers [ $option -> id ] = $option -> maxanswers ;
2006-10-16 00:01:13 +00:00
}
2005-03-30 16:26:36 +00:00
return $choice ;
}
}
return false ;
2002-09-08 09:42:07 +00:00
}
2005-09-01 04:14:31 +00:00
function choice_get_view_actions () {
return array ( 'view' , 'view all' , 'report' );
}
function choice_get_post_actions () {
return array ( 'choose' , 'choose again' );
}
2007-11-29 14:43:04 +00:00
/**
* Implementation of the function for printing the form elements that control
* whether the course reset functionality affects the choice .
* @ param $mform form passed by reference
*/
function choice_reset_course_form_definition ( & $mform ) {
$mform -> addElement ( 'header' , 'choiceheader' , get_string ( 'modulenameplural' , 'choice' ));
$mform -> addElement ( 'advcheckbox' , 'reset_choice' , get_string ( 'removeresponses' , 'choice' ));
}
/**
* Course reset form defaults .
*/
function choice_reset_course_form_defaults ( $course ) {
return array ( 'reset_choice' => 1 );
}
/**
* Actual implementation of the rest coures functionality , delete all the
* choice responses for course $data -> courseid .
* @ param $data the data submitted from the reset course .
* @ return array status array
*/
function choice_reset_userdata ( $data ) {
2008-06-04 06:42:54 +00:00
global $CFG , $DB ;
2007-11-29 14:43:04 +00:00
$componentstr = get_string ( 'modulenameplural' , 'choice' );
$status = array ();
if ( ! empty ( $data -> reset_choice )) {
$choicessql = " SELECT ch.id
2008-06-04 06:42:54 +00:00
FROM { choice } ch
WHERE ch . course = ? " ;
2007-11-29 14:43:04 +00:00
2008-06-04 06:42:54 +00:00
$DB -> delete_records_select ( 'choice_answers' , " choiceid IN ( $choicessql ) " , array ( $data -> courseid ));
2007-11-29 14:43:04 +00:00
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'removeresponses' , 'choice' ), 'error' => false );
}
/// updating dates - shift may be negative too
if ( $data -> timeshift ) {
shift_course_mod_dates ( 'choice' , array ( 'timeopen' , 'timeclose' ), $data -> timeshift , $data -> courseid );
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'datechanged' ), 'error' => false );
}
return $status ;
}
2008-03-03 04:42:01 +00:00
function choice_get_response_data ( $choice , $cm , $groupmode ) {
2008-06-04 06:42:54 +00:00
global $CFG , $USER , $DB ;
2008-03-03 04:42:01 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
/// Get the current group
if ( $groupmode > 0 ) {
$currentgroup = groups_get_activity_group ( $cm );
} else {
$currentgroup = 0 ;
}
2008-03-03 05:24:55 +00:00
/// Initialise the returned array, which is a matrix: $allresponses[responseid][userid] = responseobject
$allresponses = array ();
2008-03-03 04:42:01 +00:00
/// First get all the users who have access here
/// To start with we assume they are all "unanswered" then move them later
2008-03-03 05:24:55 +00:00
$allresponses [ 0 ] = get_users_by_capability ( $context , 'mod/choice:choose' , 'u.id, u.picture, u.firstname, u.lastname, u.idnumber' , 'u.firstname ASC' , '' , '' , $currentgroup , '' , false , true );
2008-03-03 04:42:01 +00:00
/// Get all the recorded responses for this choice
2008-06-04 06:42:54 +00:00
$rawresponses = $DB -> get_records ( 'choice_answers' , array ( 'choiceid' => $choice -> id ));
2008-03-03 04:42:01 +00:00
/// Use the responses to move users into the correct column
2008-03-03 05:24:55 +00:00
if ( $rawresponses ) {
foreach ( $rawresponses as $response ) {
if ( isset ( $allresponses [ 0 ][ $response -> userid ])) { // This person is enrolled and in correct group
$allresponses [ 0 ][ $response -> userid ] -> timemodified = $response -> timemodified ;
$allresponses [ $response -> optionid ][ $response -> userid ] = clone ( $allresponses [ 0 ][ $response -> userid ]);
unset ( $allresponses [ 0 ][ $response -> userid ]); // Remove from unanswered column
2008-03-03 04:42:01 +00:00
}
}
}
2008-03-03 05:24:55 +00:00
return $allresponses ;
2008-07-24 21:59:13 +00:00
}
2008-03-03 04:42:01 +00:00
2008-07-24 21:59:13 +00:00
/**
* Returns all other caps used in module
*/
2008-08-11 21:19:21 +00:00
function choice_get_extra_capabilities () {
2008-07-24 21:59:13 +00:00
return array ( 'moodle/site:accessallgroups' );
2008-03-03 04:42:01 +00:00
}
2008-07-24 21:59:13 +00:00
2008-07-29 17:22:47 +00:00
/**
* @ param string $feature FEATURE_xx constant for requested feature
* @ return mixed True if module supports feature , null if doesn ' t know
*/
function choice_supports ( $feature ) {
switch ( $feature ) {
case FEATURE_COMPLETION_TRACKS_VIEWS : return true ;
default : return null ;
}
}
2005-03-30 04:32:36 +00:00
?>