File:  [LON-CAPA] / loncom / interface / loncoursegroups.pm
Revision 1.1: download - view: text, annotated - select for diffs
Thu Oct 27 23:32:27 2005 UTC (18 years, 6 months ago) by raeburn
Branches: MAIN
CVS tags: HEAD
Start on interface to manage course groups.

#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA 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.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#

package Apache::loncoursegroups;

use strict;
use Apache::lonnet;
use Apache::loncommon;
use Apache::lonhtmlcommon;
use Apache::lonlocal;
use Apache::Constants qw(:common :http);

sub handler {
    my ($r) = @_;
    &Apache::loncommon::content_type($r,'text/html');
    $r->send_http_header;
                                                                                
    if ($r->header_only) {
        return OK;
    }

    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                            ['action','state']);

    $r->print(&header());

    &Apache::lonhtmlcommon::clear_breadcrumbs();
    &Apache::lonhtmlcommon::add_breadcrumb
        ({href=>"/adm/groups",
          text=>"Group Management",
          faq=>9,bug=>'Instructor Interface',});
    #  Needs to be in a course
    if (! ($env{'request.course.fn'})) {
        # Not in a course
        $env{'user.error.msg'}=
            "/adm/groups:mdg:0:0:Cannot create, modify or delete course groups";
        return HTTP_NOT_ACCEPTABLE;
    }

    my $view_permission =
        &Apache::lonnet::allowed('vcg',$env{'request.course.id'});
    my $manage_permission =
        &Apache::lonnet::allowed('mdg',$env{'request.course.id'});

    if (! exists($env{'form.action'})) {
        $r->print(&Apache::lonhtmlcommon::breadcrumbs
                  (undef,'Course Group Manager'));
        &print_main_menu($r,$manage_permission,$view_permission);
    } elsif ($env{'form.action'} eq 'create' && $manage_permission) {
        &Apache::lonhtmlcommon::add_breadcrumb
            ({href=>'/adm/coursegroups?action=create&state=',
              text=>"Create Group"});
        $r->print(&Apache::lonhtmlcommon::breadcrumbs
                  (undef,'Create Group','Course_Create_Group'));
        if (! exists($env{'form.state'})) {
            &first_creation_form($r);
        } elsif ($env{'form.state'} eq 'pick_members') {
            &second_creation_form($r);
        } elsif ($env{'form.state'} eq 'complete') {
            &completed_creation($r);
        } else {
            &first_creation_form($r);
        }
    }
    $r->print(&footer());
    return OK;
}

sub header {
    my $html=&Apache::lonxml::xmlbegin();
    my $bodytag=&Apache::loncommon::bodytag('Course Groups Manager');
    my $title = &mt('LON-CAPA Groups Manager');
    return(<<ENDHEAD);
$html
<head>
<title>$title</title>
</head>
$bodytag
<form method="post"
      action="/adm/coursegroup" name="form">
ENDHEAD
}

sub print_main_menu {
    my ($r,$manage_permission,$view_permission)=@_;
    my ($cdom,$cnum) = split/_/,$env{'request.course.id'};
    my @menu =
        (
          { text => 'Create a new group',
            help => 'Course_Create_Group',
            action => 'create',
            permission => $manage_permission,
            },
          { text => 'Modify an existing group',
            help => 'Course_Modify_Group',
            action => 'modify',
            permission => $manage_permission,
            },
          { text => 'Delete an existing group',
            help => 'Course_Delete_Group',
            action => 'delete',
            permission => $manage_permission,
            },
          { text => 'Enter an existing group',
            help => 'Course_Display_Group',
            action => 'display',
            permission => $view_permission,
            },
          );
    my $menu_html = '';
    foreach my $menu_item (@menu) {
        next if (! $menu_item->{'permission'});
        $menu_html.='<p>';
        $menu_html.='<font size="+1">';
        if (exists($menu_item->{'url'})) {
            $menu_html.=qq{<a href="$menu_item->{'url'}">};
        } else {
            $menu_html.=
                qq{<a href="/adm/coursegroups?action=$menu_item->{'action'}">};
        }
        $menu_html.= &mt($menu_item->{'text'}).'</a></font>';
        if (exists($menu_item->{'help'})) {
            $menu_html.=
                &Apache::loncommon::help_open_topic($menu_item->{'help'});
        }
        $menu_html.='</p>'.$/;
    }
    $r->print($menu_html);
    return;
}

sub footer {
       return(<<ENDFOOT);
  </form>
 </body>
</html>
ENDFOOT
 
}

sub first_creation_form {
    my ($r) = @_;
    my %lt = &Apache::lonlocal::texthash(
        'gmem' => 'Group membership options',
        'picr' => 'Pick the criteria to use to build a list of course users from which you will select members of the new group',   
        'gdat' => 'Group open and close dates',
        'sten' => 'Set a start date/time and end date/time for the group',
        'acst' => 'Active/Inactive status',
        'coro' => 'Course roles',
        'cose' => 'Course sections',
        'gfun' => 'Group functionality',
    );

    my %status_types = (
                   active => &mt('Currently has access'),
                   previous => &mt('Previously had access'),
                   future => &mt('Will have future access'),
                   );

    my @roles = ('st','cc','in','ta','ep','cr');

    my %sectioncount = ();
    my @sections = ();
    my $section_sel = '';
    my $numvisible;
    my $numsections = &Apache::loncommon::get_sections($env{'course.'.$env{'request.course.id'}.'.domain'},$env{'course.'.$env{'request.course.id'}.'.num'},\%sectioncount);

    @sections = sort {$a cmp $b} keys(%sectioncount);
    unshift(@sections,'all'); # Put 'all' at the front of the list
    if ($numsections < 4) {
        $numvisible = $numsections + 1;
    }

    $r->print(<<"END");
<b>$lt{'gmem'}</b><br/> $lt{'picr'}
<br /><br />
<table border="0">
 <tr>
 <td><b>$lt{'acst'}</b></td>
  <td>&nbsp;</td>
  <td><b>$lt{'coro'}</b></td>
  <td>&nbsp;</td>
  <td><b>$lt{'cose'}</b></td>
  <td>&nbsp;</td>
 </tr>
 <tr>
 <tr>
END
    $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));
    $r->print('<td>&nbsp;</td>');
    $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
    $r->print(<<"END");
  <td>&nbsp;</td>
  <td align="center">
   <select name="sectionpick" multiple="true" size="$numvisible">
    $section_sel
   </select>
  </td>
 </tr>
</table>
END
    return;
}

sub second_creation_form {
    my ($r) = @_;
}

sub completed_creation {
    my ($r) = @_;
}

1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>