<?PHP // $Id$

// Graph size
$SURVEY_GHEIGHT = 500;
$SURVEY_GWIDTH  = 900;

$SURVEY_QTYPE = array (
        "-3" => "Virtual Actual and Preferred",
        "-2" => "Virtual Preferred",
        "-1" => "Virtual Actual",
         "0" => "Text",
         "1" => "Actual",
         "2" => "Preferred",
         "3" => "Actual and Preferred",
        );

// STANDARD FUNCTIONS ////////////////////////////////////////////////////////

function survey_add_instance($survey) {
// 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 
// of the new instance.

    if (!$template = get_record("survey", "id", $survey->template)) {
        return 0;
    }

    $survey->questions    = $template->questions; 
    $survey->timecreated  = time();
    $survey->timemodified = $survey->timecreated;

    return insert_record("survey", $survey);

}


function survey_update_instance($survey) {
// Given an object containing all the necessary data, 
// (defined by the form in mod.html) this function 
// will update an existing instance with new data.

    if (!$template = get_record("survey", "id", $survey->template)) {
        return 0;
    }

    $survey->id           = $survey->instance; 
    $survey->questions    = $template->questions; 
    $survey->timemodified = time();

    return update_record("survey", $survey);
}

function survey_delete_instance($id) {
// Given an ID of an instance of this module, 
// this function will permanently delete the instance 
// and any data that depends on it.  

    if (! $survey = get_record("survey", "id", "$id")) {
        return false;
    }

    $result = true;

    if (! delete_records("survey_analysis", "survey", "$survey->id")) {
        $result = false;
    }

    if (! delete_records("survey_answers", "survey", "$survey->id")) {
        $result = false;
    }

    if (! delete_records("survey", "id", "$survey->id")) {
        $result = false;
    }

    return $result;
}

function survey_user_outline($course, $user, $mod, $survey) {
    if ($answers = get_records_select("survey_answers", "survey='$survey->id' AND userid='$user->id'")) {

        $lastanswer = array_pop($answers);

        $result->info = get_string("done", "survey");
        $result->time = $lastanswer->time;
        return $result;
    }
    return NULL;
}


function survey_user_complete($course, $user, $mod, $survey) {
    global $CFG;

    if (survey_already_done($survey->id, $user->id)) {
        survey_print_graph("id=$mod->id&sid=$user->id&type=student.png");
    } else {
        print_string("notdone", "survey");
    }
}

function survey_print_recent_activity($course, $isteacher, $timestart) {
    global $CFG;

    $content = false;
    $surveys = NULL;

    if (!$logs = get_records_select("log", "time > '$timestart' AND ".
                                           "course = '$course->id' AND ".
                                           "module = 'survey' AND ".
                                           "action = 'submit' ", "time ASC")) {
        return false;
    }

    foreach ($logs as $log) {
        //Create a temp valid module structure (course,id)
        $tempmod->course = $log->course;
        $tempmod->id = $log->info;
        //Obtain the visible property from the instance
        $modvisible = instance_is_visible($log->module,$tempmod);
   
        //Only if the mod is visible
        if ($modvisible) {
            $surveys[$log->id] = survey_log_info($log);
            $surveys[$log->id]->time = $log->time;
            $surveys[$log->id]->url = $log->url;
        }
    }

    if ($surveys) {
        $content = true;
        $strftimerecent = get_string("strftimerecent");
        print_headline(get_string("newsurveyresponses", "survey").":");
        foreach ($surveys as $survey) {
            $date = userdate($survey->time, $strftimerecent);
            echo "<p><font size=1>$date - $survey->firstname $survey->lastname<br>";
            echo "\"<a href=\"$CFG->wwwroot/mod/survey/$survey->url\">";
            echo "$survey->name";
            echo "</a>\"</font></p>";
        }
    }
 
    return $content;
}


// SQL FUNCTIONS ////////////////////////////////////////////////////////


function survey_log_info($log) {
    global $CFG;
    return get_record_sql("SELECT s.name, u.firstname, u.lastname
                             FROM {$CFG->prefix}survey s, 
                                  {$CFG->prefix}user u
                            WHERE s.id = '$log->info' 
                              AND u.id = '$log->userid'");
}

function survey_get_responses($survey) {
    global $CFG;
    return get_records_sql("SELECT MAX(a.time) as time, 
                                   count(*) as numanswers, 
                                   u.id, u.firstname, u.lastname
                              FROM {$CFG->prefix}survey_answers AS a, 
                                   {$CFG->prefix}user AS u
                             WHERE a.answer1 <> '0' AND a.answer2 <> '0'
                                   AND a.survey = $survey 
                                   AND a.userid = u.id
                          GROUP BY u.id, u.firstname, u.lastname
                          ORDER BY time ASC");
}

function survey_get_analysis($survey, $user) {
    global $CFG;

    return get_record_sql("SELECT notes 
                             FROM {$CFG->prefix}survey_analysis 
                            WHERE survey='$survey' 
                              AND userid='$user'");
}

function survey_update_analysis($survey, $user, $notes) {
    global $CFG;

    return execute_sql("UPDATE {$CFG->prefix}survey_analysis 
                            SET notes='$notes' 
                          WHERE survey='$survey' 
                            AND userid='$user'");
}


function survey_get_user_answers($surveyid, $questionid) {
    global $CFG;

    return get_records_sql("SELECT sa.*,u.firstname,u.lastname,u.picture 
                              FROM {$CFG->prefix}survey_answers sa, 
                                   {$CFG->prefix}user u 
                             WHERE sa.survey = '$surveyid' 
                               AND sa.question = $questionid 
                               AND u.id = sa.userid 
                          ORDER BY sa.answer1,sa.answer2 ASC");
}

// MODULE FUNCTIONS ////////////////////////////////////////////////////////

function survey_add_analysis($survey, $user, $notes) {
    global $CFG;

    $record->survey = $survey;
    $record->userid = $user;
    $record->notes = $notes;

    return insert_record("survey_analysis", $record, false);
}

function survey_already_done($survey, $user) {
   return record_exists("survey_answers", "survey", $survey, "userid", $user);
}

function survey_count_responses($survey) {
    if ($responses = survey_get_responses($survey)) {
        return count($responses);
    } else {
        return 0;
    }
}


function survey_print_all_responses($survey, $results) {
    global $THEME;

    $dateformat = get_string("strftimedatetime");

    echo "<TABLE CELLPADDING=5 CELLSPACING=2 ALIGN=CENTER>";
    echo "<TR><TD>Name<TD>Time<TD>Answered</TR>";

    foreach ($results as $a) {
                 
        echo "<TR>";
        echo "<TD><A HREF=\"report.php?action=student&student=$a->id&id=$survey\">$a->firstname $a->lastname</A></TD>";
        echo "<TD>".userdate($a->time, $dateformat)."</TD>";
        echo "<TD align=right>$a->numanswers</TD>";
        echo "</TR>";
    }
    echo "</TABLE>";
}


function survey_get_template_name($templateid) {
    global $db;

    if ($templateid) {
        if ($ss = get_record("surveys", "id", $templateid)) {
            return $ss->name;
        }
    } else {
        return "";
    }
}



function survey_shorten_name ($name, $numwords) {
    $words = explode(" ", $name);
    for ($i=0; $i < $numwords; $i++) {
        $output .= $words[$i]." ";
    }
    return $output;
}



function survey_print_multi($question) {
    GLOBAL $db, $qnum, $checklist, $THEME;


    $stripreferthat = get_string("ipreferthat", "survey");
    $strifoundthat = get_string("ifoundthat", "survey");
    echo "<P>&nbsp</P>\n";
	echo "<P><FONT SIZE=4><B>$question->text</B></FONT></P>";

	echo "<TABLE ALIGN=CENTER WIDTH=90% CELLPADDING=4 CELLSPACING=1 BORDER=0>";

    $options = explode( ",", $question->options);
    $numoptions = count($options);

    $oneanswer = ($question->type == 1 || $question->type == 2) ? true : false;
	if ($question->type == 2) {
		$P = "P";
	} else {
		$P = "";
	}
   
    if ($oneanswer) { 
        echo "<TR WIDTH=100% ><TD COLSPAN=2><P>$question->intro</P></TD>";
    } else {
        echo "<TR WIDTH=100% ><TD COLSPAN=3><P>$question->intro</P></TD>"; 
    }

    while (list ($key, $val) = each ($options)) {
        echo "<TD width=10% ALIGN=CENTER><FONT SIZE=1><P>$val</P></FONT></TD>\n";
    }
    echo "<TD ALIGN=CENTER BGCOLOR=\"$THEME->body\">&nbsp</TD></TR>\n";

    $subquestions = get_records_list("survey_questions", "id", $question->multi);

    foreach ($subquestions as $q) {
        $qnum++;
        $bgcolor = survey_question_color($qnum);

        if ($q->text) {
            $q->text = get_string($q->text, "survey");
        }

        echo "<TR BGCOLOR=$bgcolor>";
        if ($oneanswer) {
            echo "<TD WIDTH=10 VALIGN=top><P><B>$qnum</B></P></TD>";
            echo "<TD VALIGN=top><P>$q->text</P></TD>";
            for ($i=1;$i<=$numoptions;$i++) {
                echo "<TD WIDTH=10% ALIGN=CENTER><INPUT TYPE=radio NAME=q$P$q->id VALUE=$i></TD>";
            }
            echo "<TD BGCOLOR=white><INPUT TYPE=radio NAME=q$P$q->id VALUE=0 checked></TD>";
            $checklist["q$P$q->id"] = $numoptions;
        
        } else {
            echo "<TD WIDTH=10 VALIGN=middle rowspan=2><P><B>$qnum</B></P></TD>";
            echo "<TD WIDTH=10% NOWRAP><P><FONT SIZE=1>$stripreferthat&nbsp;</FONT></P></TD>";
            echo "<TD WIDTH=40% VALIGN=middle rowspan=2><P>$q->text</P></TD>";
            for ($i=1;$i<=$numoptions;$i++) {
                echo "<TD WIDTH=10% ALIGN=CENTER><INPUT TYPE=radio NAME=qP$q->id VALUE=$i></TD>";
            }
            echo "<TD BGCOLOR=\"$THEME->body\"><INPUT TYPE=radio NAME=qP$q->id VALUE=0 checked></TD>";
            echo "</TR>";

            echo "<TR BGCOLOR=$bgcolor>";
            echo "<TD WIDTH=10% NOWRAP><P><FONT SIZE=1>$strifoundthat&nbsp;</P></TD>";
            for ($i=1;$i<=$numoptions;$i++) {
                echo "<TD WIDTH=10% ALIGN=CENTER><INPUT TYPE=radio NAME=q$q->id VALUE=$i></TD>";
            }
            echo "<TD WIDTH=5% BGCOLOR=\"$THEME->body\"><INPUT TYPE=radio NAME=q$q->id VALUE=0 checked></TD>";
            $checklist["qP$q->id"] = $numoptions;
            $checklist["q$q->id"] = $numoptions;
        }
        echo "</TR>\n";
    }
    echo "</TABLE>";
}



function survey_print_single($question) {
    GLOBAL $db, $qnum;

    $bgcolor = survey_question_color(0);

    $qnum++;

    echo "<P>&nbsp</P>\n";
    echo "<TABLE ALIGN=CENTER WIDTH=90% CELLPADDING=4 CELLSPACING=0>\n";
    echo "<TR BGCOLOR=$bgcolor>";
    echo "<TD VALIGN=top><B>$qnum</B></TD>";
    echo "<TD WIDTH=50% VALIGN=top><P>$question->text</P></TD>\n";
    echo "<TD WIDTH=50% VALIGN=top><P><FONT SIZE=+1>\n";


    if ($question->type == 0) {           // Plain text field
        echo "<TEXTAREA ROWS=3 COLS=30 WRAP=virtual NAME=\"$question->id\">$question->options</TEXTAREA>";

    } else if ($question->type > 0) {     // Choose one of a number
        $strchoose = get_string("choose");
        echo "<SELECT NAME=$question->id>";
        echo "<OPTION VALUE=0 SELECTED>$strchoose...</OPTION>";
        $options = explode( ",", $question->options);
        foreach ($options as $key => $val) {
            $key++;
            echo "<OPTION VALUE=\"$key\">$val</OPTION>";
        }
        echo "</SELECT>";

    } else if ($question->type < 0) {     // Choose several of a number
        $options = explode( ",", $question->options);
        notify("This question type not supported yet");
    }

    echo "</FONT></TD></TR></TABLE>";

}

function survey_question_color($qnum) {
    global $THEME;

    if ($qnum) {
        return $qnum % 2 ? $THEME->cellcontent : $THEME->cellcontent2;
        //return $qnum % 2 ? "#CCFFCC" : "#CCFFFF";
    } else {
        return $THEME->cellcontent;
    }
}

function survey_print_graph($url) {
    global $CFG, $SURVEY_GHEIGHT, $SURVEY_GWIDTH;

    if (empty($CFG->gdversion)) {
        echo "(".get_string("gdneed").")";

    } else {
        echo "<IMG HEIGHT=\"$SURVEY_GHEIGHT\" WIDTH=\"$SURVEY_GWIDTH\" BORDER=1".
             " SRC=\"$CFG->wwwroot/mod/survey/graph.php?$url\">";
    }
}

?>
