ce9821b90eeb5f105c8dd83277882778f684d107
[bse.git] / site / cgi-bin / modules / BSE / UI / NUser.pm
1 package BSE::UI::NUser;
2 use strict;
3 use base 'BSE::UI::Dispatch';
4
5 our $VERSION = "1.000";
6
7 sub controller_section {
8   'nuser controllers';
9 }
10
11 sub dispatch {
12   my ($class, $req) = @_;
13
14   my $controller_id = $req->cgi->param('_p');
15   my ($action, $rest);
16   unless ($controller_id) {
17     my @components = split '/', $ENV{PATH_INFO}, -1;
18     shift @components if @components && $components[0] eq '';
19     my @rest;
20     ($controller_id, $action, @rest) = @components;
21     $rest = join '/', @rest;
22   }
23
24   my $section = $class->controller_section;
25   $controller_id ||= $req->cfg->entry($section, 'default');
26   $controller_id
27     or return $class->error($req, "No controller found in path");
28
29   my $controller_class = 
30     $req->cfg->entry($section, $controller_id)
31       or return $class->error($req, "No class found for controller $controller_id");
32
33   (my $controller_file = $controller_class . ".pm") =~ s!::!/!g;
34   eval {
35     local @INC = @INC;
36     my $local_inc = $req->cfg->entry('paths', 'libraries');
37     unshift @INC, $local_inc if $local_inc;
38
39     require $controller_file;
40   };
41   if ($@) {
42     print STDERR "Error loading controller $controller_file: $@";
43     return $class->error($req, "Internal error: Could not load controller class");
44   }
45   my %opts;
46   $action and $opts{action} = $action;
47   defined $rest or $rest = '';
48   $opts{rest} = $rest;
49   $opts{controller_id} = $controller_id;
50   my $controller = $controller_class->new(%opts);
51
52   return $controller->dispatch($req);
53 }
54
55 1;
56
57 __END__
58
59 =head1 NAME
60
61 BSE::UI::NUser - dispatcher for user side functionality.
62
63 =cut