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 ) {
2005-03-30 18:33:56 +00:00
if ( $answer = get_record ( 'choice_answers' , '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 ) {
2005-03-30 18:33:56 +00:00
if ( $answer = get_record ( 'choice_answers' , " 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 ) {
2006-11-24 12:20:26 +00:00
// Given an object containing all the necessary data,
// (defined by the form in mod.html) this function
// 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
2005-03-30 16:26:36 +00:00
if ( $choice -> id = 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 ();
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 ) {
2006-11-24 12:20:26 +00:00
// Given an object containing all the necessary data,
// (defined by the form in mod.html) 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 <> '' ) {
2005-04-14 21:10:39 +00:00
update_record ( " choice_options " , $option );
2005-04-11 20:34:13 +00:00
} else { //empty old option - needs to be deleted.
2006-11-24 12:20:26 +00:00
delete_records ( " choice_options " , " id " , $option -> id );
2005-04-14 21:10:39 +00:00
}
2006-11-24 12:20:26 +00:00
} else {
if ( isset ( $value ) && $value <> '' ) {
2006-10-16 00:01:13 +00:00
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
2005-03-30 16:26:36 +00:00
return update_record ( 'choice' , $choice );
2006-10-16 00:01:13 +00:00
2002-08-03 02:29:21 +00:00
}
2006-02-23 01:20:24 +00:00
function choice_show_form ( $choice , $user , $cm ) {
2006-11-24 12:20:26 +00:00
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 ;
foreach ( $choice -> option as $optionid => $text ) {
if ( isset ( $text )) { //make sure there are no dud entries in the db with blank text values.
$countanswers = ( get_records ( " choice_answers " , " optionid " , $optionid ));
2006-11-24 12:20:26 +00:00
$countans = 0 ;
2006-08-08 05:13:06 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
2006-04-04 23:03:15 +00:00
if ( ! empty ( $countanswers )) {
2006-10-16 00:01:13 +00:00
foreach ( $countanswers as $ca ) { //only return enrolled users.
2006-08-14 05:55:40 +00:00
if ( has_capability ( 'mod/choice:choose' , $context )) {
2006-04-04 23:03:15 +00:00
$countans = $countans + 1 ;
}
}
}
2006-02-23 01:20:24 +00:00
if ( $countanswers ) {
$countanswers = count ( $countanswers );
} else {
$countanswers = 0 ;
}
$maxans = $choice -> maxanswers [ $optionid ];
2006-08-09 13:45:49 +00:00
$cdisplay [ $aid ] -> optionid = $optionid ;
$cdisplay [ $aid ] -> text = $text ;
$cdisplay [ $aid ] -> maxanswers = $maxans ;
$cdisplay [ $aid ] -> countanswers = $countans ;
2006-02-23 01:20:24 +00:00
2006-08-09 13:45:49 +00:00
if ( $current = get_record ( 'choice_answers' , '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
}
2006-02-23 21:20:44 +00:00
if ( $choice -> limitanswers && ( $countans >= $maxans ) && ( 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 = '' ;
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\ " /> " ;
if ( ! isguest ()) { //don't show save button if the logged in user is the guest user.
echo " <input type= \" submit \" value= \" " . get_string ( " savemychoice " , " choice " ) . " \" /> " ;
} 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 ) {
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
$current = get_record ( 'choice_answers' , 'choiceid' , $choice -> id , 'userid' , $userid );
2006-08-09 13:45:49 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
$countanswers = get_records ( " choice_answers " , " optionid " , $formanswer );
2006-09-11 07:17:10 +00:00
if ( $countanswers ) {
$countans = 0 ;
foreach ( $countanswers as $ca ) { //only return enrolled users.
if ( has_capability ( 'mod/choice:choose' , $context )) {
$countans = $countans + 1 ;
}
2006-10-16 00:01:13 +00:00
}
$countanswers = $countans ;
2006-09-11 07:17:10 +00:00
} else {
$countanswers = 0 ;
}
$maxans = $choice -> maxanswers [ $formanswer ];
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 ();
if ( ! update_record ( " choice_answers " , $newanswer )) {
error ( " Could not update your choice because of a database error " );
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 ();
if ( ! insert_record ( " choice_answers " , $newanswer )) {
error ( " Could not save your choice " );
}
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
2006-11-24 12:20:26 +00:00
error ( " this choice is full! " );
2006-09-11 07:17:10 +00:00
}
}
2006-02-23 01:20:24 +00:00
}
function choice_show_reportlink ( $choice , $courseid , $cmid ) {
2006-09-11 07:17:10 +00:00
$context = get_context_instance ( CONTEXT_MODULE , $cmid );
if ( $allanswers = get_records ( " choice_answers " , " choiceid " , $choice -> id )) {
$responsecount = 0 ;
foreach ( $allanswers as $aa ) {
if ( has_capability ( 'mod/choice:readresponses' , $context )) {
$responsecount ++ ;
2006-02-23 01:20:24 +00:00
}
}
2006-09-11 07:17:10 +00:00
} else {
$responsecount = 0 ;
}
echo '<div class="reportlink">' ;
echo " <a href= \" report.php?id= $cmid\ " > " .get_string( " viewallresponses " , " choice " , $responsecount ). " </ a > " ;
echo '</div>' ;
2006-02-23 01:20:24 +00:00
}
function choice_show_results ( $choice , $course , $cm , $forcepublish = '' ) {
2006-10-16 00:01:13 +00:00
2006-09-11 07:17:10 +00:00
global $CFG , $COLUMN_HEIGHT , $USER ;
$context = get_context_instance ( CONTEXT_MODULE , $cm -> id );
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
}
2006-02-23 01:20:24 +00:00
/// Check to see if groups are being used in this choice
if ( $groupmode = groupmode ( $course , $cm )) { // Groups are being used
$currentgroup = setup_and_print_groups ( $course , $groupmode , $_SERVER [ 'PHP_SELF' ] . " ?id= $cm->id " );
} else {
$currentgroup = false ;
}
2006-09-11 07:17:10 +00:00
if ( $currentgroup ) {
$users = get_group_users ( $currentgroup , " u.firstname ASC " , '' , 'u.id, u.picture, u.firstname, u.lastname, u.idnumber' );
} else {
2006-11-15 06:28:37 +00:00
$users = get_users_by_capability ( $context , 'mod/choice:choose' , 'u.id, u.picture, u.firstname, u.lastname, u.idnumber' , 'u.firstname ASC' );
2006-09-11 07:17:10 +00:00
}
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
if ( ! $users ) {
print_heading ( get_string ( " nousersyet " ));
}
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
if ( $allresponses = get_records ( " choice_answers " , " choiceid " , $choice -> id )) {
foreach ( $allresponses as $aa ) {
$answers [ $aa -> userid ] = $aa ;
2006-02-23 01:20:24 +00:00
}
2006-09-11 07:17:10 +00:00
} else {
$answers = array () ;
}
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
$timenow = time ();
2006-02-23 01:20:24 +00:00
2006-09-11 07:17:10 +00:00
foreach ( $choice -> option as $optionid => $text ) {
$useranswer [ $optionid ] = array ();
}
if ( ! empty ( $users )) {
foreach ( $users as $user ) {
if ( ! empty ( $user -> id ) and ! empty ( $answers [ $user -> id ])) {
$answer = $answers [ $user -> id ];
$useranswer [( int ) $answer -> optionid ][] = $user ;
} else {
$useranswer [ 0 ][] = $user ;
2006-02-23 01:20:24 +00:00
}
}
2006-09-11 07:17:10 +00:00
}
foreach ( $choice -> option as $optionid => $text ) {
if ( ! $choice -> option [ $optionid ]) {
unset ( $useranswer [ $optionid ]); // Throw away any data that doesn't apply
2006-02-23 01:20:24 +00:00
}
2006-09-11 07:17:10 +00:00
}
ksort ( $useranswer );
switch ( $forcepublish ) {
case CHOICE_PUBLISH_NAMES :
2006-02-23 01:20:24 +00:00
$tablewidth = ( int ) ( 100.0 / count ( $useranswer ));
2006-08-14 05:55:40 +00:00
if ( has_capability ( 'mod/choice:readresponses' , $context )) {
2006-08-09 13:45:49 +00:00
echo '<div id="tablecontainer">' ;
2006-02-23 01:20:24 +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 ( 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" />' ;
}
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> " ;
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( $optionid ) {
2007-01-09 01:38:24 +00:00
echo " <th class= \" col $count header \" style= \" width: $tablewidth % \" scope= \" col \" > " ;
2006-02-23 01:20:24 +00:00
} else if ( $choice -> showunanswered ) {
2007-01-09 01:38:24 +00:00
echo " <th class= \" col $count header \" style= \" width: $tablewidth % \" scope= \" col \" > " ;
2006-02-23 01:20:24 +00:00
} else {
continue ;
}
echo format_string ( choice_get_option_text ( $choice , $optionid ));
echo " </th> " ;
$count ++ ;
}
echo " </tr><tr> " ;
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( $optionid ) {
2007-01-09 03:14:34 +00:00
echo " <td class= \" col $count data \" style= \" width: $tablewidth %; \" > " ;
2006-02-23 01:20:24 +00:00
} else if ( $choice -> showunanswered ) {
2007-01-09 03:14:34 +00:00
echo " <td class= \" col $count data \" style= \" width: $tablewidth %; \" > " ;
2006-02-23 01:20:24 +00:00
} else {
continue ;
}
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> " ;
2006-02-23 01:20:24 +00:00
foreach ( $userlist as $user ) {
2006-08-09 13:45:49 +00:00
// this needs to be fixed
2006-09-11 07:17:10 +00:00
// hide admin/editting teacher (users with editting privilages)
// show users without? I could be wrong.
if ( ! ( $optionid == 0 && has_capability ( 'mod/choice:readresponses' , $context , $user -> id ))) { // make sure admins and hidden teachers are not shown in not answered yet column.
2006-02-23 01:20:24 +00:00
echo " <tr> " ;
2006-09-11 07:17:10 +00:00
if ( has_capability ( 'mod/choice:readresponses' , $context ) && $optionid != 0 ) {
2007-01-09 01:38:24 +00:00
echo '<td class="attemptcell"><input type="checkbox" name="attemptid[]" value="' . $answers [ $user -> id ] -> id . '" /></td>' ;
2006-02-23 01:20:24 +00:00
}
2007-01-09 03:14:34 +00:00
echo " <td class= \" picture \" > " ;
2006-02-23 01:20:24 +00:00
print_user_picture ( $user -> id , $course -> id , $user -> picture );
2007-01-09 03:14:34 +00:00
echo " </td><td class= \" fullname \" > " ;
2006-02-23 01:20:24 +00:00
echo " <a href= \" $CFG->wwwroot /user/view.php?id= $user->id &course= $course->id\ " > " ;
2006-09-11 07:17:10 +00:00
echo fullname ( $user , has_capability ( 'moodle/site:viewfullnames' , $context ));
2006-02-23 01:20:24 +00:00
echo " </a> " ;
echo " </td></tr> " ;
}
}
$count ++ ;
echo " </table> " ;
echo " </td> " ;
}
echo " </tr><tr> " ;
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( ! $optionid and ! $choice -> showunanswered ) {
continue ;
}
echo " <td align= \" center \" class= \" count \" > " ;
2006-10-16 00:01:13 +00:00
$countanswers = get_records ( " choice_answers " , " optionid " , $optionid );
2006-11-24 12:20:26 +00:00
$countans = 0 ;
if ( ! empty ( $countanswers )) {
2006-10-16 00:01:13 +00:00
foreach ( $countanswers as $ca ) { //only return enrolled users.
if ( has_capability ( 'mod/choice:choose' , get_context_instance ( CONTEXT_MODULE , $cm -> id ))) {
2006-08-09 13:45:49 +00:00
$countans = $countans + 1 ;
2006-10-16 00:01:13 +00:00
}
2006-08-09 13:45:49 +00:00
}
2006-04-04 23:03:15 +00:00
}
2006-02-23 01:20:24 +00:00
if ( $choice -> limitanswers && ! $optionid == 0 ) {
echo get_string ( " taken " , " choice " ) . " : " ;
2006-02-23 21:20:44 +00:00
echo $countans ;
2007-01-04 23:38:17 +00:00
echo " <br/> " ;
2006-02-23 01:20:24 +00:00
echo get_string ( " limit " , " choice " ) . " : " ;
$choice_option = get_record ( " choice_options " , " id " , $optionid );
echo $choice_option -> maxanswers ;
}
echo " </td> " ;
$count ++ ;
}
2006-12-21 07:50:19 +00:00
echo " </tr> " ;
2006-11-24 12:20:26 +00:00
2006-09-11 07:17:10 +00:00
/// Print "Select all" etc.
if ( has_capability ( 'mod/choice:readresponses' , $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
}
2006-11-24 12:20:26 +00:00
2006-12-21 07:50:19 +00:00
echo " </table> " ;
2006-08-14 05:55:40 +00:00
if ( has_capability ( 'mod/choice:readresponses' , $context )) {
2007-01-09 03:14:34 +00:00
echo " </div></form></div> " ;
2006-08-09 13:45:49 +00:00
}
2006-02-23 01:20:24 +00:00
break ;
2006-09-11 07:17:10 +00:00
case CHOICE_PUBLISH_ANONYMOUS :
2006-10-16 00:01:13 +00:00
2006-02-23 01:20:24 +00:00
$tablewidth = ( int ) ( 100.0 / count ( $useranswer ));
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> " ;
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( $optionid ) {
2007-01-09 01:38:24 +00:00
echo " <th style= \" width: $tablewidth % \" class= \" col $count header \" scope= \" col \" > " ;
2006-02-23 01:20:24 +00:00
} else if ( $choice -> showunanswered ) {
2007-01-09 01:38:24 +00:00
echo " <th style= \" width: $tablewidth % \" class= \" col $count header \" scope= \" col \" > " ;
2006-02-23 01:20:24 +00:00
} else {
continue ;
}
echo format_string ( choice_get_option_text ( $choice , $optionid ));
echo " </th> " ;
$count ++ ;
}
2007-01-09 03:14:34 +00:00
echo " </tr> " ;
2006-02-23 01:20:24 +00:00
$maxcolumn = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( ! $optionid and ! $choice -> showunanswered ) {
continue ;
}
$column [ $optionid ] = 0 ;
foreach ( $userlist as $user ) {
2006-09-11 07:17:10 +00:00
if ( ! ( $optionid == 0 && has_capability ( 'mod/choice:readresponses' , $context , $user -> id ))) { //make sure admins and hidden teachers are not shown in not answered yet column.
2006-02-23 01:20:24 +00:00
$column [ $optionid ] ++ ;
}
}
if ( $column [ $optionid ] > $maxcolumn ) {
$maxcolumn = $column [ $optionid ];
}
}
2007-01-09 03:14:34 +00:00
echo " <tr> " ;
2006-02-23 01:20:24 +00:00
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( ! $optionid and ! $choice -> showunanswered ) {
continue ;
}
$height = 0 ;
if ( $maxcolumn ) {
$height = $COLUMN_HEIGHT * (( float ) $column [ $optionid ] / ( float ) $maxcolumn );
}
echo " <td valign= \" bottom \" align= \" center \" class= \" col $count data \" > " ;
echo " <img src= \" column.png \" height= \" $height\ " width = \ " 49 \" alt= \" \" /> " ;
echo " </td> " ;
$count ++ ;
}
echo " </tr> " ;
echo " <tr> " ;
$count = 0 ;
foreach ( $useranswer as $optionid => $userlist ) {
if ( ! $optionid and ! $choice -> showunanswered ) {
continue ;
}
echo " <td align= \" center \" class= \" col $count count \" > " ;
if ( $choice -> limitanswers && ! $optionid == 0 ) {
echo get_string ( " taken " , " choice " ) . " : " ;
echo $column [ $optionid ];
2007-01-04 23:38:17 +00:00
echo " <br/> " ;
2006-02-23 01:20:24 +00:00
echo get_string ( " limit " , " choice " ) . " : " ;
$choice_option = get_record ( " choice_options " , " id " , $optionid );
echo $choice_option -> maxanswers ;
} else {
echo $column [ $optionid ];
}
echo " </td> " ;
$count ++ ;
}
echo " </tr></table> " ;
2006-09-11 07:17:10 +00:00
break ;
2006-11-24 12:20:26 +00:00
}
2006-02-23 01:20:24 +00:00
}
function choice_delete_responses ( $attemptids ) {
2006-11-24 12:20:26 +00:00
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 ) {
if ( $todelete = get_record ( 'choice_answers' , 'id' , $attemptid )) {
delete_records ( 'choice_answers' , 'id' , $attemptid );
}
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 ) {
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
if ( ! $choice = get_record ( " choice " , " id " , " $id " )) {
return false ;
}
$result = true ;
2005-03-30 16:26:36 +00:00
if ( ! delete_records ( " choice_answers " , " choiceid " , " $choice->id " )) {
2002-08-03 02:29:21 +00:00
$result = false ;
}
2005-03-30 16:26:36 +00:00
if ( ! delete_records ( " choice_options " , " choiceid " , " $choice->id " )) {
2002-08-03 02:29:21 +00:00
$result = false ;
}
2005-03-30 16:26:36 +00:00
if ( ! delete_records ( " choice " , " 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
global $CFG ;
//Get students
2005-02-13 00:42:29 +00:00
$students = get_records_sql ( " SELECT DISTINCT u.id, u.id
2003-09-29 15:27:30 +00:00
FROM { $CFG -> prefix } user u ,
2005-03-30 16:26:36 +00:00
{ $CFG -> prefix } choice_answers a
WHERE a . choiceid = '$choiceid' and
u . id = a . userid " );
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 ) {
// Returns text string which is the answer that matches the id
if ( $result = get_record ( " choice_options " , " id " , $id )) {
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 ) {
2006-10-16 00:01:13 +00:00
// Gets a full choice record
2005-03-30 16:26:36 +00:00
if ( $choice = get_record ( " choice " , " id " , $choiceid )) {
if ( $options = get_records ( " choice_options " , " 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' );
}
2005-03-30 04:32:36 +00:00
?>