function wiki_print_menu_groups_and_students($listgroups, $listgroupsmembers, &$WS)
{
    //this function prints the groupmode menu with the students
    global $CFG, $COURSE, $USER;
    if (empty($listgroupsmembers)) {
        return;
    }
    $wikimanager = wiki_manager_get_instance();
    $wikipersistor = new wiki_persistor();
    //if we are in visible groups with separate students
    //and the user is not a teacher or admin
    //then we don't take his group in the menu list
    $context = get_context_instance(CONTEXT_MODULE, $WS->cm->id);
    //if((($WS->dfwiki->groupmode == 1) && ($WS->cm->studentmode == 2))
    if (isset($WS->cm->groupmode) && $WS->cm->groupmode == 1 && $WS->dfwiki->studentmode > 0 && !has_capability('mod/wiki:editanywiki', $context)) {
        $usergroupids = $wikipersistor->get_groupid_by_userid_and_courseid($USER->id, $COURSE->id);
        $userid = array();
        foreach ($usergroupids as $usergroup) {
            $userid[] = $usergroup->groupid;
        }
        foreach ($listgroups as $key => $group) {
            if (!in_array($group->id, $userid)) {
                unset($listgroups[$key]);
            }
        }
    }
    if (isset($WS->cm->groupmode) && $WS->cm->groupmode == 1 && $WS->dfwiki->studentmode == 1 && !has_capability('mod/wiki:editanywiki', $context)) {
        foreach ($listgroupsmembers as $key => $member) {
            foreach ($usergroupids as $usergroup) {
                if ($member->groupid == $usergroup->groupid && $member->id != $USER->id) {
                    unset($listgroupsmembers[$key]);
                }
            }
        }
    }
    //if((($WS->dfwiki->groupmode == 2) && ($WS->cm->studentmode == 1))
    if (isset($WS->cm->groupmode) && $WS->cm->groupmode == 2 && $WS->dfwiki->studentmode == 1 && !has_capability('mod/wiki:editanywiki', $context)) {
        //the user group
        $usergroupids = $wikipersistor->get_groupid_by_userid_and_courseid($USER->id, $COURSE->id);
        $listgroups = $wikimanager->get_course_groups($COURSE->id);
        //Course students list without the user group
        //We take the groups, and id, firstname and lastname of the students
        //$listgroupmembers = $wikimanager->get_course_members($COURSE->id);
        foreach ($listgroupsmembers as $key => $member) {
            foreach ($usergroupids as $usergroup) {
                if ($member->groupid == $usergroup->groupid && $member->id != $USER->id) {
                    unset($listgroupsmembers[$key]);
                    //break;
                }
            }
        }
    }
    $cm->id = isset($WS->dfcourse) ? $COURSE->id : $WS->cm->id;
    $prop = null;
    $prop->type = "text/javascript";
    $info = '  //<![CDATA[

    function wiki_select_group(groups, groupstudent){
            var i=0;
            var j=0;
            var k=0;
            var numstudents=0 ;
            var numgroups=0;

            numgroups = groups.length;
            for(i=0; i<numgroups; i++){
                numstudents = groupstudent[i].length;
                for(j=0; j<numstudents; j++){
                    if((document.forms[\'form_sel_group\'].selectstudent.options[k].selected)&&(document.forms[\'form_sel_group\'].selectstudent.options[k].value == groupstudent[i][j])){
                            document.forms[\'form_sel_group\'].selectgroup.value = groups[i];
                    }
                k++;
            }
        }
    }

    var groups = new Array();';
    $ind = 0;
    foreach ($listgroups as $lgroup) {
        $info .= "\n            groups[{$ind}] = '{$lgroup->id}';";
        $ind++;
    }
    if (has_capability('mod/wiki:editawiki', get_context_instance(CONTEXT_MODULE, $cm->id))) {
        $info .= "\n\t\t\tgroups[{$ind}] = '0';";
    } else {
        if (isset($usergroupids)) {
            foreach ($usergroupids as $usergroup) {
                $info .= "\n\t\t\t\t   groups[{$ind}] = '{$usergroup->groupid}';";
            }
        }
    }
    $info .= '
    var groupstudent = new Array();

	//]]>';
    wiki_script($info, $prop);
    $prop = null;
    $prop->border = "0";
    $prop->class = "boxalignright";
    $prop->classtd = "nwikileftnow";
    wiki_table_start($prop);
    $group = get_field('groups_members', 'id', 'groupid', $WS->groupmember->groupid, 'userid', $WS->member->id);
    if (!empty($group) and isset($listgroupsmembers[$group])) {
        echo get_string('viewpagestudent', 'wiki') . $listgroupsmembers[$group]->lastname . ', ' . $listgroupsmembers[$group]->firstname;
        wiki_table_end();
        $prop = null;
        $prop->border = "0";
        $prop->class = "boxalignright";
        $prop->classtd = "nwikileftnow";
        wiki_table_start($prop);
    }
    print_string('anotherstudent', 'wiki');
    wiki_change_column();
    $prop = null;
    $prop->id = "form_sel_group";
    $prop->method = "post";
    $prop->action = 'view.php?id=' . $cm->id;
    wiki_form_start($prop);
    wiki_div_start();
    $i = 0;
    $opt = null;
    $opt2 = null;
    foreach ($listgroups as $lgroup) {
        $liststudentsingroup[$i] = wiki_students_in_a_group($lgroup->id, $listgroupsmembers);
        $j = 0;
        $prop = null;
        $prop->type = "text/javascript";
        $info = "groupstudent[{$i}] = new Array();";
        wiki_script($info, $prop);
        foreach ($liststudentsingroup[$i] as $lstudentsingroup) {
            $prop = null;
            $prop->value = $lstudentsingroup->id;
            $opt .= wiki_option($lstudentsingroup->lastname . ', ' . $lstudentsingroup->firstname, $prop, true);
            $prop = null;
            $prop->type = "text/javascript";
            $info = "groupstudent[{$i}][{$j}]= '{$lstudentsingroup->id}';";
            wiki_script($info, $prop);
            $j++;
        }
        if ($WS->cm->groupmode != 0) {
            $prop = null;
            $prop->label = $lgroup->name;
            $opt2 .= wiki_optgroup($opt, $prop, true);
            $opt = null;
        }
        $i++;
    }
    if (has_capability('mod/wiki:editawiki', get_context_instance(CONTEXT_MODULE, $cm->id))) {
        $prop = null;
        $prop->value = $USER->id;
        $opt .= wiki_option($USER->lastname . ', ' . $USER->firstname, $prop, true);
        $prop = null;
        $prop->type = "text/javascript";
        $info = "groupstudent[{$i}] = new Array(); groupstudent[{$i}][0] = {$USER->id};";
        wiki_script($info, $prop);
        $prop = null;
        $prop->label = "teacher";
        $opt2 .= wiki_optgroup($opt, $prop, true);
        $opt = null;
    } else {
        if (isset($usergroupid)) {
            $prop = null;
            $prop->value = $USER->id;
            $opt .= wiki_option($USER->lastname . ', ' . $USER->firstname, $prop, true);
            $prop = null;
            $prop->type = "text/javascript";
            $info = "groupstudent[{$i}] = new Array(); groupstudent[{$i}][0] = {$USER->id};";
            wiki_script($info, $prop);
            $prop = null;
            $prop->label = "user";
            $opt2 .= wiki_optgroup($opt, $prop, true);
            $opt = null;
        }
    }
    $prop = null;
    $prop->id = "selectstudent";
    $prop->name = "dfformselectstudent";
    $prop->events = 'onchange="javascript:wiki_select_group(groups, groupstudent)"';
    wiki_select($opt2, $prop);
    $prop = null;
    $prop->id = "selectgroup";
    $prop->name = "dfformselectgroup";
    wiki_input_hidden($prop);
    $prop = null;
    $prop->type = "text/javascript";
    $info = "this.wiki_select_group(groups, groupstudent)";
    wiki_script($info, $prop);
    $prop = null;
    $prop->value = get_string("continue");
    wiki_input_submit($prop);
    wiki_div_end();
    wiki_form_end();
    wiki_table_end();
}
 /**
  * This function tests the whole class wiki manager.
  * By the moment this functionis not implemented but test is prepared
  */
 function test_wiki_persistor()
 {
     //First of all test wiki and wiki page are preparated.
     $wiki = new stdClass();
     $wiki_page = new stdClass();
     // Create a default wiki.
     $wiki->course = 0;
     $wiki->name = 'WikiUnitSimpleTest';
     $wiki->intro = 'Simple Test to wiki class';
     $wiki->introformat = 1;
     $wiki->pagename = 'First Page Test';
     // Test with past time: Tuesday, 15 May 2007 17:45
     $wiki->timemodified = 1171902549;
     $wiki->editable = 1;
     $wiki->attach = 0;
     $wiki->restore = 0;
     $wiki->editor = 'dfwiki';
     $wiki->studentmode = 1;
     $wiki->teacherdiscussion = 0;
     $wiki->studentdiscussion = 0;
     $wiki->evaluation = 'noeval';
     $wiki->notetype = 'quant';
     $wiki->editanothergroup = 0;
     $wiki->editanotherstudent = 0;
     $wiki->votemode = 0;
     $wiki->listofteachers = 0;
     $wiki->editorrows = 40;
     $wiki->editorcols = 60;
     $wiki->wikicourse = 0;
     // Create a default wiki_page.
     $wiki_page->pagename = "SimpleTest Name";
     $wiki_page->version = 2;
     $wiki_page->content = "This is the wiki page content.";
     $wiki_page->author = "Laura";
     $wiki_page->userid = 3;
     // Test with past time: Wednesday, 30 May 2007 19:42
     $wiki_page->created = 1180546919;
     $wiki_page->lastmodified = 1180546944;
     $wiki_page->refs = "http://morfeo.upc.es/crom/course/view.php?id=4";
     $wiki_page->hits = 1;
     $wiki_page->editable = 1;
     $wiki_page->highlight = 1;
     $wiki_page->dfwiki = 25;
     $wiki_page->editor = "nwiki";
     $wiki_page->groupid = 0;
     $wiki_page->ownerid = 0;
     $wiki_page->evaluation = "";
     $id = insert_record("wiki", $wiki);
     $wiki->id = $id;
     $wiki_object = new wiki(RECORD, $wiki);
     $id_page = insert_record("wiki_pages", $wiki_page);
     $wiki_page->id = $id_page;
     $wiki_page_object = new wiki_page(RECORD, $wiki_page);
     $wiki_persistor = new wiki_persistor();
     $message = 'Whether wikis gets by the id are the same';
     $this->assertEqual($wiki_persistor->get_wiki_by_id($id), $wiki_object, $message);
     $message = 'Whether wiki pages gets by id are the same';
     $this->assertEqual($wiki_persistor->get_wiki_page_by_id($id_page), $wiki_page_object, $message);
     delete_records("wiki", 'id', $id);
     delete_records("wiki_pages", 'id', $id_page);
 }