File:
[LON-CAPA] /
loncom /
interface /
lonpickcourse.pm
Revision
1.52:
download - view:
text,
annotated -
select for diffs
Tue Jul 11 02:28:22 2006 UTC (18 years ago) by
raeburn
Branches:
MAIN
CVS tags:
HEAD
Bug 4813. Retain backwards compatibility with legacy courses in which only a course owner's username is stored in environment.internal.courseowner, and in the course's record in nohist_courseids.db. New courses will include username:domain (escaped) in nohist_courseids.db. MCRS can be used to update legacy course owner information (just click "Modify Settings" button, it will be necessary to select the correct course owner where the course domain is different from the owner's domain.
1: # The LearningOnline Network
2: # Pick a course
3: #
4: # $Id: lonpickcourse.pm,v 1.52 2006/07/11 02:28:22 raeburn Exp $
5: #
6: # Copyright Michigan State University Board of Trustees
7: #
8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
9: #
10: # LON-CAPA is free software; you can redistribute it and/or modify
11: # it under the terms of the GNU General Public License as published by
12: # the Free Software Foundation; either version 2 of the License, or
13: # (at your option) any later version.
14: #
15: # LON-CAPA is distributed in the hope that it will be useful,
16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: # GNU General Public License for more details.
19: #
20: # You should have received a copy of the GNU General Public License
21: # along with LON-CAPA; if not, write to the Free Software
22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23: #
24: # /home/httpd/html/adm/gpl.txt
25: #
26: # http://www.lon-capa.org/
27: #
28:
29: package Apache::lonpickcourse;
30:
31: use strict;
32: use Apache::Constants qw(:common);
33: use Apache::loncommon;
34: use Apache::loncoursedata;
35: use Apache::lonnet;
36: use Apache::lonlocal;
37: use Apache::longroup;
38: use lib '/home/httpd/lib/perl/';
39: use LONCAPA;
40:
41: sub handler {
42: my $r = shift;
43: &Apache::loncommon::content_type($r,'text/html');
44: $r->send_http_header;
45: return OK if $r->header_only;
46:
47: # ------------------------------------------------------------ Print the screen
48:
49: # Get parameters from query string
50: &Apache::loncommon::get_unprocessed_cgi
51: ($ENV{'QUERY_STRING'},['domainfilter','descriptfilter',
52: 'sincefilter','form','cnumelement',
53: 'cdomelement','cnameelement','roleelement',
54: 'pickedcourse','instcodefilter',
55: 'ownerfilter','coursefilter','multiple',
56: 'type','ownerdomfilter']);
57: # domain filter and selection
58: my $domainfilter=$env{'form.domainfilter'};
59: $domainfilter=~s/\W//g;
60: unless ($domainfilter) { $domainfilter=''; }
61: my $domainselectform=&Apache::loncommon::select_dom_form($domainfilter,
62: 'domainfilter',1);
63: # description filter
64: my $descriptfilter=$env{'form.descriptfilter'};
65: unless ($descriptfilter) { $descriptfilter=''; }
66: my $listdescript=&HTML::Entities::encode($descriptfilter,'<>&"');
67: # institutional code filter
68: my $instcodefilter=$env{'form.instcodefilter'};
69: unless ($instcodefilter) { $instcodefilter=''; }
70: my $listinstcode=&HTML::Entities::encode($instcodefilter,'<>&"');
71: # course owner filter
72: my $ownerfilter=$env{'form.ownerfilter'};
73: $ownerfilter=~s/\W//g;
74: my $listowner=&HTML::Entities::encode($ownerfilter,'<>&"');
75: # course ownerdomain filter
76: my $ownerdomfilter=$env{'form.ownerdomfilter'};
77: $ownerdomfilter=~s/\W//g;
78: my $ownerdomselectform=
79: &Apache::loncommon::select_dom_form($ownerdomfilter,'ownerdomfilter',1);
80: # course ID filter for DCs only
81: my ($courseidtag,$coursefilter);
82: if ($env{'user.adv'} && $domainfilter && exists($env{'user.role.dc./'.
83: $domainfilter.'/'})) {
84: $coursefilter=$env{'form.coursefilter'};
85: unless ($coursefilter) { $coursefilter=''; }
86: my $listcourseid=&HTML::Entities::encode($coursefilter,'<>&"');
87: $courseidtag = &mt('LON-CAPA course ID');
88: $courseidtag .= qq|: <input type="text" name="coursefilter" size="25" value="$listcourseid" />
89: <br />
90: |;
91: }
92: # last course activity filter and selection
93: my $sincefilter=$env{'form.sincefilter'};
94: $sincefilter=~s/[^\d-]//g;
95: unless ($sincefilter) { $sincefilter=-1; }
96: my $sincefilterform=&Apache::loncommon::select_form($sincefilter,
97: 'sincefilter',('-1'=>'',
98: '86400' => 'today',
99: '604800' => 'last week',
100: '2592000' => 'last month',
101: '7776000' => 'last three months',
102: '15552000' => 'last six months',
103: '31104000' => 'last year',
104: 'select_form_order' =>
105: ['-1','86400','604800','2592000','7776000',
106: '15552000','31104000']));
107: # if called from loncreateuser, report sections, then close
108: my (%loaditem,$seclist,$groupslist,$roleslist,$rolesnameslist,
109: $accesslist,$accessnameslist);
110: my $sec_element = 'currsec';
111: my $grplist_element = 'groups';
112: my $num_sections = 0;
113: my $num_groups = 0;
114: my $num_roles = 0;
115: my $num_access = 0;
116: my ($cdom,$cnum);
117: if ($env{'form.pickedcourse'}) {
118: ($cdom,$cnum) = split/_/,$env{'form.pickedcourse'};
119: }
120: my $type = $env{'form.type'};
121: if (!defined($env{'form.type'})) {
122: $type = 'Course';
123: }
124: if ($env{'form.form'} eq 'cu' && $env{'form.pickedcourse'}) {
125: $loaditem{'onload'} ="setSections()";
126: ($seclist,$num_sections,$groupslist,$num_groups) =
127: &build_selection_lists($cdom,$cnum,$type,undef,undef,
128: $env{'form.form'});
129: }
130: # if called from portfolio, report roles, sections, groups and close
131: my ($roles_element,$groups_element,$status_element,$setitems_function);
132: if ($env{'form.form'} eq 'portform' && $env{'form.pickedcourse'}) {
133: my ($row_id) = ($env{'form.cnumelement'} =~ /^crsnum_(\d+)$/);
134: $roles_element = 'role_'.$row_id.'_1';
135: $groups_element = 'group_'.$row_id.'_1';
136: $sec_element = 'section_'.$row_id.'_1';
137: $status_element = 'access_'.$row_id.'_1';
138: $grplist_element = 'grplist_'.$row_id.'_1';
139: $loaditem{'onload'} ="setItems()";
140: ($seclist,$num_sections,$groupslist,$num_groups,$roleslist,$num_roles,
141: $rolesnameslist,$accesslist,$num_access,$accessnameslist) =
142: &build_selection_lists($cdom,$cnum,$type,1,1,$env{'form.form'});
143: $setitems_function = qq|
144: function setItems() {
145: opener.document.$env{"form.form"}.activate.checked = true;
146: setRoles();
147: setGroups();
148: setStatus();
149: setSections();
150: }
151:
152: function setRoles() {
153: var numRoles = $num_roles
154: var rolesArray = new Array("$roleslist");
155: var roleNamesArray = new Array("$rolesnameslist");
156: opener.document.$env{"form.form"}.$roles_element.length = 0;
157: if (numRoles == 0) {
158: opener.document.$env{"form.form"}.$roles_element.multiple=false;
159: opener.document.$env{"form.form"}.$roles_element.size=1;
160: opener.document.$env{"form.form"}.$roles_element.options[0] = new Option('No existing roles','',false,false);
161: } else {
162: if (numRoles == 1) {
163: opener.document.$env{"form.form"}.$roles_element.multiple=false;
164: opener.document.$env{"form.form"}.$roles_element.size=1;
165: opener.document.$env{"form.form"}.$roles_element.options[0] = new Option('Select','',true,true);
166: opener.document.$env{"form.form"}.$roles_element.options[1] = new Option(roleNamesArray[0],rolesArray[0],false,false);
167: } else {
168: for (var i=0; i<numRoles; i++) {
169: opener.document.$env{"form.form"}.$roles_element.options[i] = new Option(roleNamesArray[i],rolesArray[i],false,false);
170: }
171: opener.document.$env{"form.form"}.$roles_element.multiple=true;
172: if (numRoles < 3) {
173: opener.document.$env{"form.form"}.$roles_element.size=numRoles;
174: } else {
175: opener.document.$env{"form.form"}.$roles_element.size=3;
176: }
177: opener.document.$env{"form.form"}.$roles_element.options[0].selected = false;
178: }
179: }
180: }
181:
182: function setStatus() {
183: var numStatus = $num_access;
184: var statusArray = new Array("$accesslist");
185: var statusNamesArray = new Array("$accessnameslist");
186: opener.document.$env{"form.form"}.$status_element.multiple=true;
187: opener.document.$env{"form.form"}.$status_element.size=3;
188: for (var i=0; i<numStatus; i++) {
189: opener.document.$env{"form.form"}.$status_element.options[i] = new Option(statusNamesArray[i],statusArray[i],false,false);
190: }
191: }
192:
193: function setGroups() {
194: var numGroups = $num_groups;
195: var groupsArray = new Array("$groupslist");
196: opener.document.$env{"form.form"}.$groups_element.length = 0;
197: if (numGroups == 0) {
198: opener.document.$env{"form.form"}.$groups_element.multiple=false;
199: opener.document.$env{"form.form"}.$groups_element.size=1;
200: opener.document.$env{"form.form"}.$groups_element.options[0] = new Option('No existing groups','',false,false);
201: } else {
202: if (numGroups == 1) {
203: opener.document.$env{"form.form"}.$groups_element.multiple=false;
204: opener.document.$env{"form.form"}.$groups_element.size=1;
205: opener.document.$env{"form.form"}.$groups_element.options[0] = new Option('Select','',true,true);
206: opener.document.$env{"form.form"}.$groups_element.options[1] = new Option('No group','',false,false);
207: opener.document.$env{"form.form"}.$groups_element.options[2] = new Option(groupsArray[0],groupsArray[0],false,false);
208: } else {
209: for (var i=0; i<numGroups; i++) {
210: opener.document.$env{"form.form"}.$groups_element.options[i] = new Option(groupsArray[i],groupsArray[i],false,false);
211: }
212: opener.document.$env{"form.form"}.$groups_element.multiple=true;
213: if (numGroups < 3) {
214: opener.document.$env{"form.form"}.$groups_element.size=numGroups;
215: } else {
216: opener.document.$env{"form.form"}.$groups_element.size=3;
217: }
218: opener.document.$env{"form.form"}.$groups_element.options[0].selected = false;
219: }
220: }
221: }
222:
223: |;
224: }
225: my $jscript;
226: my $typeselectform = '<select name="type" size="1"';
227: $typeselectform .= ">\n";
228: foreach my $posstype ('Course','Group') {
229: $typeselectform.='<option value="'.$posstype.'" "'.
230: ($posstype eq $type ? 'selected="selected" ' : ''). ">$posstype</option>\n";
231: }
232: $typeselectform.="</select>";
233: my $title = &mt('Selecting a [_1]',$type);
234: # Setup for multiple course selections, if flag for multiples set.
235: my $multiple = $env{'form.multiple'};
236: my $multelement;
237: if ($multiple) {
238: $title = &mt('Selecting [_1](s)',lc($type));
239: $jscript = &Apache::loncommon::check_uncheck_jscript();
240: $multelement = '<input type="hidden" name="multiple" value="'.$multiple.'" />';
241: }
242: $r->print(&Apache::loncommon::start_page($title,undef,
243: {'add_entries' => \%loaditem,
244: 'no_nav_bar' => 1, }));
245: my %lt = (
246: 'cac' => &mt('[_1] Activity',$type),
247: 'cde' => &mt('[_1] Description',$type),
248: 'cdo' => &mt('[_1] Domain',$type),
249: 'cin' => &mt('Course Institutional Code'),
250: 'cow' => &mt("[_1] Owner's Username",$type),
251: 'cod' => &mt("[_1] Owner's Domain", $type),
252: 'cog' => &mt('Course or Group')
253: );
254:
255: my ($name_code,$name_input);
256: if (defined($env{'form.cnameelement'}) && $env{'form.cnameelement'} ne '') {
257: $name_code = "opener.document.$env{'form.form'}.$env{'form.cnameelement'}.value=cdesc;";
258: $name_input ='<input type="hidden" name="cnameelement" value="'.
259: $env{'form.cnameelement'}.'" />';
260: }
261: my $submitopener = '';
262: my $autosubmit = '';
263: my $roleelement = '';
264: my $lastaction = 'self.close()';
265: if ($env{'form.form'} eq 'cu') {
266: $lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
267: 'document.courselist.submit();';
268: }
269: if ($env{'form.form'} eq 'portform') {
270: $lastaction = 'document.courselist.pickedcourse.value = cdom+"_"+cname;'."\n".
271: 'document.courselist.submit();';
272: }
273: my $roledom = $env{'form.roleelement'};
274: if ($roledom) {
275: $roleelement = '<input type="hidden" name="roleelement" value="'.$roledom.'" />';
276: $submitopener = &Apache::lonroles::processpick();
277: $autosubmit = 'process_pick("'.$roledom.'")';
278: }
279: my $instcodeform;
280: if ($type eq 'Course') {
281: $instcodeform = $lt{'cin'}.': <input type="text" name="instcodefilter"
282: size="10" value="'.$listinstcode.'" /><br />';
283: }
284: my %elements = (
285: Course => {
286: name => 'coursepick',
287: total => 'coursetotal',
288: list => 'courselist',
289: },
290: Group => {
291: name => 'grouppick',
292: total => 'grouptotal',
293: list => 'grouplist',
294: },
295: );
296:
297: $r->print(<<ENDSCRIPT);
298: <script>
299: function gochoose(cname,cdom,cdesc,multiple,caller) {
300: var openerForm = "$env{'form.form'}";
301: courseCount = 0;
302: var courses = '';
303: if (multiple) {
304: if (typeof(document.courselist.course_id.length) == 'undefined') {
305: // only 1 course checkbox was created
306: if (document.courselist.course_id.checked) {
307: courses = courses + document.courselist.course_id.value + "&&";
308: courseCount ++;
309: }
310: } else {
311: for (var j=0; j<document.courselist.course_id.length; j++) {
312: if (document.courselist.course_id[j].checked) {
313: courses = courses + document.courselist.course_id[j].value + "&&";
314: courseCount ++;
315: }
316: }
317: }
318: opener.document.$env{'form.form'}.$elements{$type}{'total'}.value = courseCount;
319: if (typeof(opener.document.$env{'form.form'}.$elements{$type}{'name'}.length) ==
320: 'undefined') {
321: if (opener.document.$env{'form.form'}.$elements{$type}{'name'}.value == 'specific') {
322: opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = true;
323: } else {
324: opener.document.$env{'form.form'}.$elements{$type}{'name'}.checked = false;
325: }
326: } else {
327: for (var j=0; j<opener.document.$env{'form.form'}.$elements{$type}{'name'}.length; j++) {
328: if (opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].value == 'specific') {
329: opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = true;
330: } else {
331: opener.document.$env{'form.form'}.$elements{$type}{'name'}\[j].checked = false;
332: }
333: }
334: }
335: if (courseCount > 0) {
336: courses = courses.substr(0,courses.length-2);
337: opener.document.$env{'form.form'}.$elements{$type}{'list'}.value = courses;
338: }
339: } else {
340: $name_code
341: opener.document.$env{'form.form'}.$env{'form.cnumelement'}.value=cname;
342: var slct=opener.document.$env{'form.form'}.$env{'form.cdomelement'};
343: if (slct.options == undefined) {
344: opener.document.$env{'form.form'}.$env{'form.cdomelement'}.value=cdom;
345: }
346: else {
347: var i;
348: for (i=0;i<slct.length;i++) {
349: if (slct.options[i].value==cdom) { slct.selectedIndex=i; }
350: }
351: }
352: }
353: $autosubmit
354: $lastaction
355: }
356:
357: function setSections() {
358: var numSections = $num_sections
359: var sectionsArray = new Array("$seclist")
360: opener.document.$env{"form.form"}.$sec_element.length = 0
361: if (numSections == 0) {
362: opener.document.$env{"form.form"}.$sec_element.multiple=false
363: opener.document.$env{"form.form"}.$sec_element.size=1;
364: opener.document.$env{"form.form"}.$sec_element.options[0] = new Option('No existing sections','',false,false)
365: } else {
366: if (numSections == 1) {
367: opener.document.$env{"form.form"}.$sec_element.multiple=false;
368: opener.document.$env{"form.form"}.$sec_element.size=1;
369: opener.document.$env{"form.form"}.$sec_element.options[0] = new Option('Select','',true,true);
370: opener.document.$env{"form.form"}.$sec_element.options[1] = new Option('No section','',false,false)
371: opener.document.$env{"form.form"}.$sec_element.options[2] = new Option(sectionsArray[0],sectionsArray[0],false,false);
372: } else {
373: for (var i=0; i<numSections; i++) {
374: opener.document.$env{"form.form"}.$sec_element.options[i] = new Option(sectionsArray[i],sectionsArray[i],false,false)
375: }
376: opener.document.$env{"form.form"}.$sec_element.multiple=true
377: if (numSections < 3) {
378: opener.document.$env{"form.form"}.$sec_element.size=numSections;
379: } else {
380: opener.document.$env{"form.form"}.$sec_element.size=3;
381: }
382: opener.document.$env{"form.form"}.$sec_element.options[0].selected = false
383: }
384: }
385: opener.document.$env{"form.form"}.$grplist_element.value='$groupslist';
386: self.close()
387: }
388:
389: $setitems_function
390:
391: $jscript
392: </script>
393: $submitopener
394: <form method="post" name="filterpicker" action="/adm/pickcourse">
395: <input type="hidden" name="cnumelement" value="$env{'form.cnumelement'}" />
396: <input type="hidden" name="cdomelement" value="$env{'form.cdomelement'}" />
397: $name_input
398: <input type="hidden" name="form" value="$env{'form.form'}" />
399: $roleelement
400: $multelement
401: $lt{'cac'}: $sincefilterform
402: <br />
403: $lt{'cdo'}: $domainselectform
404: <br />
405: $lt{'cog'}: $typeselectform
406: <br />
407: $instcodeform
408: $lt{'cow'}:
409: <input type="text" name="ownerfilter" size="10" value="$listowner" />
410: <br />
411: $lt{'cod'}: $ownerdomselectform
412: <br />
413: $courseidtag
414: $lt{'cde'}:
415: <input type="text" name="descriptfilter" size="40" value="$listdescript" />
416: <p><input type="submit" name="gosearch" value="Search" /></p>
417: </form>
418: <hr />
419: ENDSCRIPT
420: # ---------------------------------------------------------------- Get the data
421: if ($env{'form.gosearch'}) {
422: $r->print(&mt('Searching').' ...<br /> <br />');
423: $r->rflush();
424: unless ($descriptfilter) { $descriptfilter='.'; }
425: unless ($instcodefilter) { $instcodefilter='.'; }
426: my $combownerfilter;
427: if (($ownerfilter ne '') || ($ownerdomfilter ne '')) {
428: $combownerfilter = $ownerfilter.':'.$ownerdomfilter;
429: }
430: if ($combownerfilter eq '') { $combownerfilter='.'; }
431: if ($coursefilter eq '') { $coursefilter='.'; }
432: if ($type eq '') { $type = '.'; }
433: my $timefilter=($sincefilter==-1?1:time-$sincefilter);
434: my %courses = &Apache::lonnet::courseiddump($domainfilter,$descriptfilter,
435: $timefilter,$instcodefilter,$combownerfilter,
436: $coursefilter,undef,undef,$type);
437: $r->print('<form name="courselist" method="post" action="/adm/pickcourse">');
438: my %by_descrip;
439: my $numcourses = keys(%courses);
440: foreach my $course (keys(%courses)) {
441: my $descr;
442: if ($courses{$course} =~ m/^([^:]*):/i) {
443: $descr = &unescape($1);
444: } else {
445: $descr = &unescape($courses{$course});
446: }
447: my $description = $descr;
448: push (@{$by_descrip{$description}}, $course);
449: }
450: if ($numcourses > 1 && $multiple) {
451: $r->print('<input type="button" value="check all"
452: onclick="javascript:checkAll(document.courselist.course_id)" /> <input type="button" value="uncheck all"
453: onclick="javascript:uncheckAll(document.courselist.course_id)" />
454: <br /><br />');
455: }
456: foreach my $description (sort
457: { lc($a) cmp lc($b) } (keys(%by_descrip))) {
458: foreach my $course (@{$by_descrip{$description}}) {
459: my $cleandesc=&HTML::Entities::encode($description,'<>&"');
460: $cleandesc=~s/'/\\'/g;
461: my ($cdom,$cnum)=split(/\_/,$course);
462: my ($descr,$instcode,$owner,$ttype) = split/:/,$courses{$course};
463: $r->print(&course_chooser($multiple,$cdom,$cnum,$cleandesc));
464: $r->print($description.'('.
465: ($Apache::lonnet::domaindescription{$cdom}?
466: $Apache::lonnet::domaindescription{$cdom}:$cdom).")");
467: unless ($instcode eq '') {
468: $r->print(" - ".&unescape($instcode));
469: }
470: unless ($owner eq '') {
471: $r->print(", owner - ".&unescape($owner));
472: }
473: unless ($ttype eq '') {
474: $r->print('('.&Apache::lonnet::unescape($ttype).')');
475: }
476: if ($multiple) { $r->print("</label>\n"); }
477: $r->print("<br />\n");
478: }
479: }
480: if (!%courses) {
481: $r->print(&mt('None found'));
482: } elsif ($multiple) {
483: $r->print('<input type="button" value="Submit" onClick="gochoose('."'','','',1)".'" />');
484: }
485: $r->print('<input type="hidden" name="form" value="'.$env{'form.form'}.'" />'."\n".
486: '<input type="hidden" name="pickedcourse" value="" />'."\n".
487: '<input type="hidden" name="cnumelement" value="'.$env{'form.cnumelement'}.'" />'."\n".
488: '<input type="hidden" name="cdomelement" value="'.$env{'form.cdomelement'}.'" />'."\n".
489: '<input type="hidden" name="type" value="'.$type.'" />'."\n");
490: if ((exists($env{'form.roleelement'})) && ($env{'form.form'} eq 'rolechoice')) {
491: $r->print('<input type="hidden" name="roleelement" value="'.$env{'form.roleelement'}.'" />'."\n");
492: }
493: $r->print("</form>\n");
494: }
495: $r->print(&Apache::loncommon::end_page());
496: return OK;
497: }
498:
499: sub course_chooser {
500: my ($multiple,$cdom,$cnum,$cleandesc) = @_;
501: my $output;
502: if ($multiple) {
503: $output = '<label><input type="checkbox" name="course_id" value="'.$cdom.'_'.$cnum.'" />'."\n";
504: } else {
505: $output = '<input type="button" value="Select" onClick="gochoose('.
506: "'".$cnum."','".$cdom."','".$cleandesc."')".'" />'."\n";
507: }
508: return $output;
509: }
510:
511: sub build_selection_lists {
512: my ($cdom,$cnum,$type,$needroles,$needaccess,$caller) = @_;
513: my ($sections,$groups,$allroles,$roleshash,$accesshash) =
514: &Apache::loncommon::get_secgrprole_info($cdom,$cnum,$needroles,$type);
515: if ($caller eq 'portform') {
516: if (@{$sections} == 0) {
517: @{$sections} = ('none');
518: } else {
519: unshift(@{$sections},('all','none'));
520: }
521: if (@{$groups} == 0) {
522: @{$groups} = ('none');
523: } else {
524: unshift(@{$groups},('all','none'));
525: }
526:
527: }
528: my $num_sections = scalar(@{$sections});
529: my $seclist = join('","',@{$sections});
530: my $num_groups = scalar(@{$groups});
531: my $groupslist = join('","',@{$groups});
532: my ($roleslist,$num_roles,$rolesnameslist,$num_access,$accesslist,
533: $accessnameslist);
534: if ($needroles) {
535: $num_roles = @{$allroles};
536: $roleslist = join('","',@{$allroles});
537: my @allrolesnames;
538: foreach my $role (@{$allroles}) {
539: push(@allrolesnames,$$roleshash{$role});
540: }
541: $rolesnameslist = join('","',@allrolesnames);
542: }
543: if ($needaccess) {
544: $num_access = keys(%{$accesshash});
545: my (@allaccess,@allaccessnames);
546: foreach my $key (sort(keys(%{$accesshash}))) {
547: push(@allaccess,$key);
548: push(@allaccessnames,$$accesshash{$key});
549: }
550: $accesslist = join('","',@allaccess);
551: $accessnameslist = join('","',@allaccessnames);
552: }
553: return ($seclist,$num_sections,$groupslist,$num_groups,$roleslist,
554: $num_roles,$rolesnameslist,$accesslist,$num_access,$accessnameslist);
555: }
556:
557: 1;
558: __END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>