CipUX-CAT-Web-3.4.0.3000755001750001750 011413636115 14565 5ustar00ckuelkerckuelker000000000000MANIFEST000444001750001750 1423411413636115 16020 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3bin/cipux_cat_web_configuration bin/cipux_cat_web_list_plugin bin/cipux_cat_web_module Build.PL cgi/cat.pl Changes doc/cipux-cat-web.txt doc/dep/depgraph.dot doc/dep/depgraph.png doc/dep/depgraph.svg doc/example/cipux_apache.conf doc/example/js-help.txt doc/future/cipux-cat-web.ini doc/i18n.txt doc/l10n.txt doc/maketext.files etc/apache2/conf.d/cipux_apache.conf lib/CipUX/CAT/Web.pm lib/CipUX/CAT/Web/Action.pm lib/CipUX/CAT/Web/Controller.pm lib/CipUX/CAT/Web/Exception.pm lib/CipUX/CAT/Web/I18N/da.po lib/CipUX/CAT/Web/I18N/de.po lib/CipUX/CAT/Web/I18N/en.po lib/CipUX/CAT/Web/I18N/fr.po lib/CipUX/CAT/Web/I18N/ja.po lib/CipUX/CAT/Web/I18N/messages.pot lib/CipUX/CAT/Web/L10N.pm lib/CipUX/CAT/Web/Module.pm lib/CipUX/CAT/Web/Module/BasicAssignment.pm lib/CipUX/CAT/Web/Module/BasicObject.pm lib/CipUX/CAT/Web/Module/Chooser.pm lib/CipUX/CAT/Web/Module/ExternalLink.pm lib/CipUX/CAT/Web/Module/Index.pm lib/CipUX/CAT/Web/Module/ModuleBrowser.pm lib/CipUX/CAT/Web/Module/ModuleCustody.pm lib/CipUX/CAT/Web/Module/ModuleSwitch.pm lib/CipUX/CAT/Web/Module/PerlVersion.pm lib/CipUX/CAT/Web/Module/ServerInfo.pm lib/CipUX/CAT/Web/Plugin.pm lib/CipUX/CAT/Web/Setup/Client.pm lib/CipUX/CAT/Web/View.pm Makefile.PL MANIFEST This list of files MANIFEST.SKIP META.yml README t/00_load.t t/10_i18n.t t/L10N.t t/leaktrace.t t/pod.t t/refcount.t t/Web.t tpl/Berlin/basic_assignment/group.html tpl/Berlin/basic_assignment/index.html tpl/Berlin/basic_assignment/layout.html tpl/Berlin/basic_object/create.html tpl/Berlin/basic_object/layout.html tpl/Berlin/basic_object/list.html tpl/Berlin/chooser/index.html tpl/Berlin/chooser/layout.html tpl/Berlin/default.css tpl/Berlin/error/index.html tpl/Berlin/error/layout.html tpl/Berlin/exception/index.html tpl/Berlin/exception/layout.html tpl/Berlin/externallink/index.html tpl/Berlin/externallink/layout.html tpl/Berlin/footer/index.html tpl/Berlin/footer/layout.html tpl/Berlin/form.css tpl/Berlin/header/index.html tpl/Berlin/img/admin.png tpl/Berlin/img/assignment.png tpl/Berlin/img/basicobject.png tpl/Berlin/img/cat.png tpl/Berlin/img/chooser.png tpl/Berlin/img/externallink.png tpl/Berlin/img/group.png tpl/Berlin/img/layer.png tpl/Berlin/img/module.png tpl/Berlin/img/perlversion.png tpl/Berlin/img/role.png tpl/Berlin/img/senior.png tpl/Berlin/img/serverinfo.png tpl/Berlin/img/setup.png tpl/Berlin/img/skel.png tpl/Berlin/img/user.png tpl/Berlin/index/index.html tpl/Berlin/index/layout.html tpl/Berlin/js-head.javascript tpl/Berlin/login/index.html tpl/Berlin/login/layout.html tpl/Berlin/logout/layout.html tpl/Berlin/logout/logout.html tpl/Berlin/module_browser/index.html tpl/Berlin/module_browser/layout.html tpl/Berlin/module_custody/index.html tpl/Berlin/module_custody/layout.html tpl/Berlin/module_switch/index.html tpl/Berlin/module_switch/layout.html tpl/Berlin/nav/abcnav.html tpl/Berlin/perlversion/index.html tpl/Berlin/perlversion/layout.html tpl/Berlin/serverinfo/index.html tpl/Berlin/serverinfo/layout.html tpl/Berlin/status_line/index.html tpl/Berlin/status_line/layout.html tpl/default/basic_assignment/group.html tpl/default/basic_assignment/index.html tpl/default/basic_assignment/layout.html tpl/default/basic_object/create.html tpl/default/basic_object/layout.html tpl/default/basic_object/list.html tpl/default/chooser/index.html tpl/default/chooser/layout.html tpl/default/default.css tpl/default/error/index.html tpl/default/error/layout.html tpl/default/exception/index.html tpl/default/exception/layout.html tpl/default/externallink/index.html tpl/default/externallink/layout.html tpl/default/footer/index.html tpl/default/footer/layout.html tpl/default/form.css tpl/default/header/index.html tpl/default/img/admin.png tpl/default/img/assignment.png tpl/default/img/basicobject.png tpl/default/img/cat.png tpl/default/img/chooser.png tpl/default/img/externallink.png tpl/default/img/group.png tpl/default/img/module.png tpl/default/img/perlversion.png tpl/default/img/role.png tpl/default/img/senior.png tpl/default/img/serverinfo.png tpl/default/img/setup.png tpl/default/img/skel.png tpl/default/img/user.png tpl/default/index/index.html tpl/default/index/layout.html tpl/default/js-head.javascript tpl/default/login/index.html tpl/default/login/layout.html tpl/default/logout/layout.html tpl/default/logout/logout.html tpl/default/module_browser/index.html tpl/default/module_browser/layout.html tpl/default/module_custody/index.html tpl/default/module_custody/layout.html tpl/default/module_switch/index.html tpl/default/module_switch/layout.html tpl/default/nav/abcnav.html tpl/default/perlversion/index.html tpl/default/perlversion/layout.html tpl/default/serverinfo/index.html tpl/default/serverinfo/layout.html tpl/default/status_line/index.html tpl/default/status_line/layout.html tpl/default/translation/translation.html tpl/Zeuthen/basic_assignment/group.html tpl/Zeuthen/basic_assignment/index.html tpl/Zeuthen/basic_assignment/layout.html tpl/Zeuthen/basic_object/create.html tpl/Zeuthen/basic_object/layout.html tpl/Zeuthen/basic_object/list.html tpl/Zeuthen/chooser/index.html tpl/Zeuthen/chooser/layout.html tpl/Zeuthen/default.css tpl/Zeuthen/error/index.html tpl/Zeuthen/error/layout.html tpl/Zeuthen/exception/index.html tpl/Zeuthen/exception/layout.html tpl/Zeuthen/externallink/index.html tpl/Zeuthen/externallink/layout.html tpl/Zeuthen/footer/index.html tpl/Zeuthen/footer/layout.html tpl/Zeuthen/form.css tpl/Zeuthen/header/index.html tpl/Zeuthen/img/layer.png tpl/Zeuthen/index/empty.html tpl/Zeuthen/index/index.html tpl/Zeuthen/index/layout.html tpl/Zeuthen/js-head.javascript tpl/Zeuthen/login/index.html tpl/Zeuthen/login/layout.html tpl/Zeuthen/logout/layout.html tpl/Zeuthen/logout/logout.html tpl/Zeuthen/module_browser/index.html tpl/Zeuthen/module_browser/layout.html tpl/Zeuthen/module_custody/index.html tpl/Zeuthen/module_custody/layout.html tpl/Zeuthen/module_switch/index.html tpl/Zeuthen/module_switch/layout.html tpl/Zeuthen/nav/abcnav.html tpl/Zeuthen/perlversion/index.html tpl/Zeuthen/perlversion/layout.html tpl/Zeuthen/serverinfo/index.html tpl/Zeuthen/serverinfo/layout.html tpl/Zeuthen/status_line/index.html tpl/Zeuthen/status_line/layout.html tst/i10ntest.pl usr/share/cipux/etc/cipux-cat-web.ini usr/share/cipux/etc/cipux-cat-web.log4perl etc/cipux-cat-web/log4perl.conf Build.PL000444001750001750 510311413636115 16136 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3use strict; use warnings; use Module::Build::CipUX; use version; our $VERSION = qv('3.4.0.3'); my $builder = Module::Build::CipUX->new( module_name => 'CipUX::CAT::Web', license => 'gpl2', dist_author => 'Christian Kuelker ', dist_version => "$VERSION", dist_abstract => 'CAT - CipUX administration Tool', # create_makefile_pl => 'traditional', # create_readme => 1, verbose => 1, installdirs => 'vendor', meta_merge => { resources => { homepage => q(http://www.cipux.org), }, }, recommends => { 'Test::Perl::Critic' => 0, 'Test::Pod::Coverage' => '1.04', 'Module::List::Pluggable' => '0.08', 'Filesys::DiskFree' => 0, 'Sys::Info::OS' => 0, 'Sys::Info' => 0, 'Sys::MemInfo' => 0, }, build_requires => { 'Module::Build' => 0, 'Module::Build::CipUX' => '0.3.0', 'Test::More' => 0, 'Test::Pod' => '1.14', }, requires => { 'version' => 0, 'Carp' => 0, 'CGI' => 0, 'CGI::FormBuilder' => 0, 'Class::Std' => '0.0.9', 'CipUX' => '3.4.0.0', 'CipUX::RPC::Client' => '3.4.0.6', #'Contextual::Return' => 0, 'Cwd' => 0, 'Data::Dumper' => 0, 'Date::Manip' => 0, #'File::Basename' => 0, #'File::Spec' => 0, 'Getopt::Long' => 0, 'Locale::Maketext' => 0, 'Locale::Maketext::Lexicon' => 0, 'Log::Log4perl' => 0, 'Module::Pluggable' => 0, 'Pod::Usage' => 0, 'POSIX' => 0, 'Readonly' => 0, 'Scalar::Util::Numeric' => 0, 'Template' => 0, #'Text::ParseWords' => 0, 'version' => 0, }, logforperl_files => { 'usr/share/cipux/etc/cipux-cat-web.log4perl' => 'logforperl/cipux-cat-web.log4perl', }, install_path => { logforperl => '/usr/share/cipux/etc', }, add_to_cleanup => ['CipUX-CAT-Web-*'], ); # new BUILD and INSTALL target (lib/*/*.po) # (will install all po files under lib) $builder->add_build_element('po'); $builder->add_build_element('ini'); $builder->add_build_element('logforperl'); # BUILD target #$builder->do_create_readme(); #$builder->do_create_makefile_pl(); $builder->create_build_script(); README000444001750001750 123111413636115 15520 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3CipUX-CAT-Web version 3.4.0.3 Web Frontend for CipUX. INSTALLATION To install this module, preferably run the following commands: perl Build.PL ./Build ./Build test ./Build install DEPENDENCIES version Carp CGI CGI::FormBuilder CipUX CipUX::RPC::Client Cwd Data::Dumper Date::Manip Getopt::Long Locale::Maketext Locale::Maketext::Lexicon Log::Log4perl Module::Pluggable Pod::Usage POSIX Readonly Template version COPYRIGHT AND LICENCE Copyright (C) 2008 - 2010 by Christian Kuelker This library is licensed under the GNU GPL - GNU General Public License version 2 or later. META.yml000444001750001750 566111413636115 16124 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3--- name: CipUX-CAT-Web version: v3.4.0.3 author: - 'Christian Kuelker ' abstract: 'CAT - CipUX administration Tool' license: gpl2 resources: homepage: http://www.cipux.org license: http://opensource.org/licenses/gpl-2.0.php build_requires: Module::Build: 0 Module::Build::CipUX: v0.3.0 Test::More: 0 Test::Pod: 1.14 requires: CGI: 0 CGI::FormBuilder: 0 Carp: 0 CipUX: v3.4.0.0 CipUX::RPC::Client: v3.4.0.6 Class::Std: v0.0.9 Cwd: 0 Data::Dumper: 0 Date::Manip: 0 Getopt::Long: 0 Locale::Maketext: 0 Locale::Maketext::Lexicon: 0 Log::Log4perl: 0 Module::Pluggable: 0 POSIX: 0 Pod::Usage: 0 Readonly: 0 Scalar::Util::Numeric: 0 Template: 0 version: 0 recommends: Filesys::DiskFree: 0 Module::List::Pluggable: 0.08 Sys::Info: 0 Sys::Info::OS: 0 Sys::MemInfo: 0 Test::Perl::Critic: 0 Test::Pod::Coverage: 1.04 configure_requires: Module::Build: 0.35 provides: CipUX::CAT::Web: file: lib/CipUX/CAT/Web.pm version: v3.4.0.3 CipUX::CAT::Web::Action: file: lib/CipUX/CAT/Web/Action.pm version: v3.4.0.3 CipUX::CAT::Web::Controller: file: lib/CipUX/CAT/Web/Controller.pm version: v3.4.0.3 CipUX::CAT::Web::Exception: file: lib/CipUX/CAT/Web/Exception.pm version: v3.4.0.3 CipUX::CAT::Web::L10N: file: lib/CipUX/CAT/Web/L10N.pm version: v3.4.0.3 CipUX::CAT::Web::Module: file: lib/CipUX/CAT/Web/Module.pm version: v3.4.0.3 CipUX::CAT::Web::Module::BasicAssignment: file: lib/CipUX/CAT/Web/Module/BasicAssignment.pm version: v3.4.0.3 CipUX::CAT::Web::Module::BasicObject: file: lib/CipUX/CAT/Web/Module/BasicObject.pm version: v3.4.0.3 CipUX::CAT::Web::Module::Chooser: file: lib/CipUX/CAT/Web/Module/Chooser.pm version: v3.4.0.3 CipUX::CAT::Web::Module::ExternalLink: file: lib/CipUX/CAT/Web/Module/ExternalLink.pm version: v3.4.0.3 CipUX::CAT::Web::Module::Index: file: lib/CipUX/CAT/Web/Module/Index.pm version: v3.4.0.3 CipUX::CAT::Web::Module::ModuleBrowser: file: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm version: v3.4.0.3 CipUX::CAT::Web::Module::ModuleCustody: file: lib/CipUX/CAT/Web/Module/ModuleCustody.pm version: v3.4.0.3 CipUX::CAT::Web::Module::ModuleSwitch: file: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm version: v3.4.0.3 CipUX::CAT::Web::Module::PerlVersion: file: lib/CipUX/CAT/Web/Module/PerlVersion.pm version: v3.4.0.3 CipUX::CAT::Web::Module::ServerInfo: file: lib/CipUX/CAT/Web/Module/ServerInfo.pm version: v3.4.0.3 CipUX::CAT::Web::Plugin: file: lib/CipUX/CAT/Web/Plugin.pm version: v3.4.0.3 CipUX::CAT::Web::Setup::Client: file: lib/CipUX/CAT/Web/Setup/Client.pm version: v3.4.0.3 CipUX::CAT::Web::View: file: lib/CipUX/CAT/Web/View.pm version: v3.4.0.3 generated_by: Module::Build version 0.35 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 Makefile.PL000444001750001750 17111413636115 16574 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3use Module::Build::Compat; Module::Build::Compat->run_build_pl(args => \@ARGV); Module::Build::Compat->write_makefile(); Changes000444001750001750 610411413636115 16137 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3Revision history for CipUX-Cat-Web 3.4.0.3 2010-07-03T20:14:08 - Changes: * add missing log4perl conf - Contributors: Christian Kuelker Kurt Gramlich (documentation) - version created by: Christian Kuelker 3.4.0.2 2010-02-19T14:28:24 - Changes: * recommendation Filesys::DiskFree for serverinfo.cgi * new French translations * new external link module - Contributors: Christian Kuelker Xavier Oswald (French translation) - version created by: Christian Kuelker 3.4.0.1 2010-01-16T00:14:47 - Changes: * More modules are now translated to Danish * new CAT module perlversion.cgi * new exception method 'error' (without resetting cookies) * overwrite method maketext in the hope to trap errors * new icons for Berlin theme * fix i18n bug in Locale::Maketext of BasicObject.pm and BasicAsssignment.pm that make CGI::Formbuilder render method run forever. Bug was submitted by Xavier. * new CAT module serverinfo.cgi * new dependency Scalar::Util::Numeric * recommendation Module::List::Pluggable for perlversion.cgi * recommendation Sys::Info::OS, Sys::Info and Sys::MemInfo for serverinfo.cgi * German fully translated * Most up to date translation for Japanese - Contributors: Jonas Smedegaard (Danish) Christian Kuelker Xavier Oswald (testing) - version created by: Christian Kuelker 3.4.0.0 2010-01-11+02:39:44 Initial Release - contributor: Kurt Gramlich (documentation) Christian Kuelker Xavier Oswald (French) Jonas Smedegaard (Danish and others) Roland F.Teichert (German) - version created by: Christian Kuelker 3.002016 2007-04-02+10:45:36 - version created by: Christian Kuelker 3.002015 2006-12-29+13:52:31 - version created by: Christian Kuelker 3.002013 2006-12-29+03:20:12 - version created by: Christian Kuelker 3.002012 2006-12-27+18:56:37 - version created by: Christian Kuelker 3.002012 2006-10-30+21:20:25 - version created by: Christian Kuelker 3.002015 Fri Oct 13 22:24:25 2006 - original version; created by h2xs 1.23 with options -v 3.002015 -XA -n CAT-Web MANIFEST.SKIP000444001750001750 22711413636115 16522 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3-stamp$ \.orig$ \.bak$ \.swp$ \.svn _build blib Build$ \.ptkdb$ .deb$ .build$ .changes$ .upload$ .asc$ .dsc$ .tar.gz$ .cvsignore debian/files$ \..*\~$ lib000755001750001750 011413636115 15254 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3CipUX000755001750001750 011413636115 16244 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/libCAT000755001750001750 011413636115 16653 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUXWeb.pm000444001750001750 1446611413636115 20116 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT# +========================================================================+ # || Common subroutines for CipUX-CAT-Web. || # || || # || Copyright (C) 2006 - 2008 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id: Web.pm 4900 2010-07-03 13:27:21Z christian-guest $ # Revision: $Revision: 4900 $ # Head URL: $HeadURL: svn+ssh://christian-guest@svn.debian.org/svn/cipux/trunk/cipux-core/cat-web/lib/CipUX/CAT/Web.pm $ # Date: $Date: 2010-07-03 15:27:21 +0200 (Sat, 03 Jul 2010) $ # Source: $Source$ package CipUX::CAT::Web; use 5.008000; use strict; use warnings; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser); use CGI qw(-cookie); use CipUX::CAT::Web::Controller; use Class::Std; use Data::Dumper; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use POSIX; use Readonly; use base qw(CipUX); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $CACHE_DIR => '/var/cache/cipux-cat-web'; # GLOBAL my $cfg_hr = $EMPTY_STRING; # from $CFG sub get_cat_web_cfg { my ( $self, $arg_r ) = @_; my $cd = ( exists $arg_r->{cache_dir} ) ? $self->l( $arg_r->{cache_dir} ) : $CACHE_DIR; $cfg_hr = $self->cfg( { 'pkg' => 'cipux', 'sub' => 'cat-web', cache_dir => $cd } ); return $cfg_hr; } sub run { my ( $self, $arg_r ) = @_; my $cd = ( exists $arg_r->{cache_dir} ) ? $self->l( $arg_r->{cache_dir} ) : $CACHE_DIR; my $cfg_hr = $self->get_cat_web_cfg($arg_r); my $debugconf = q( log4perl.category.CipUX = DEBUG, F log4perl.appender.F = Log::Log4perl::Appender::File log4perl.appender.F.filename = /var/log/cipux-cat-web/cipux-cat-web.log log4perl.appender.F.stderr = 0 log4perl.appender.F.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.F.layout.ConversionPattern=%d{yyyy-MM-dd+HH:mm:ss} %M <%L>: %m%n ); if ( exists $cfg_hr->{base}->{catweb_l4pconf} and defined $cfg_hr->{base}->{catweb_l4pconf} and -e $cfg_hr->{base}->{catweb_l4pconf} ) { Log::Log4perl::init_once( $cfg_hr->{base}->{catweb_l4pconf} ); } else { # Catch-22 Log::Log4perl::init_once( \$debugconf ); } my $l = get_logger(__PACKAGE__); $l->debug( 'cfg_hr: ', { filter => \&Dumper, value => $cfg_hr } ); my $cat = CipUX::CAT::Web::Controller->new; $cat->set_cfg_hr( { cfg_hr => $cfg_hr } ); $l->debug('get_cgi_obj'); my $cgi = $cat->get_cgi_obj; $l->debug('exract_url_from_obj'); my $url_hr = $self->exract_url_from_obj( { obj => $cgi } ); my $m = $url_hr->{module}; $l->debug('get a list of all modules'); my $v_hr = $self->module_list; if ( $l->is_debug() ) { foreach my $v ( sort keys %{$v_hr} ) { $l->debug("got [$v]"); } } # cat module 'index' # perl module load 'CipUX::CAT::Web::Module::Index' # for 'index.cgi' $l->debug('require a module'); $self->load_module( { cat_module => $m, perl_module => $v_hr->{ $m . '.cgi' } } ); $l->debug("set module [$m.cgi]"); $cat->set_module( $v_hr->{ $m . '.cgi' } ); #my $v = $cat->get_module(); #die "VIEW [$v] [".$v_hr->{$m.'.cgi'}."]"; $l->debug('dispatch'); $cat->dispatch( { name => $url_hr->{module} } ); return; } sub exract_url_from_obj { my ( $self, $arg_r ) = @_; my $obj = ( exists $arg_r->{obj} and ref $arg_r->{obj} ) ? $arg_r->{obj} : $self->perr('obj'); my $l = get_logger(__PACKAGE__); my $url_hr = {}; $url_hr->{module} = ( defined $obj->param('module') ) ? $self->l( $obj->param('module') ) : 'index'; $url_hr->{module} =~ s{\.cgi$}{}smx; $l->debug( 'extracted module [' . $url_hr->{module} . ']' ); return $url_hr; } sub module_list { my ( $self, $arg_r ) = @_; my $l = get_logger(__PACKAGE__); my $plugin = CipUX::CAT::Web::Plugin->new(); $plugin->init(); # MODULE $module povided by $v_hr->{$module} # EG: index.cgi -> CipUX::CAT::Web::Module::Index my $module_hr = $plugin->get_module_name_register(); return $module_hr; } sub load_module { my ( $self, $arg_r ) = @_; my $cat_module = ( exists $arg_r->{cat_module} ) ? $self->l( $arg_r->{cat_module} ) : $self->perr('cat_module'); my $perl_module = ( exists $arg_r->{perl_module} and defined $arg_r->{perl_module} ) ? $self->l( $arg_r->{perl_module} ) : 'CipUX::CAT::Web::Module::Index'; my $l = get_logger(__PACKAGE__); $l->debug("evaluate [$perl_module]"); my $return = eval { require $perl_module }; if ($EVAL_ERROR) { my $msg = "EXCEPTION: perl_module [$perl_module] not available!"; $msg .= " $EVAL_ERROR"; # MAIBE TOODO: we gota always an eval error here. Why taht? Since the # module load just fine. #$l->debug($msg); #confess $msg; } else { $l->debug("successfully load [$perl_module]"); } eval { $perl_module->new; }; if ($EVAL_ERROR) { my $msg = "EXCEPTION during perl_module [$perl_module] init! $EVAL_ERROR"; $l->debug($msg); confess $msg; } else { $l->debug("successfully init [$perl_module]"); } return; } } 1; __END__ Web000755001750001750 011413636115 17370 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CATException.pm000444001750001750 770211413636115 22027 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Exception; use 5.008001; use warnings; use strict; use Class::Std; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser cluck); use CGI::FormBuilder; use Data::Dumper; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Readonly; use base qw(CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; # OBJECT my %login_of : ATTR( init_arg => 'cat_login' :set :default('view_login') ); my %session_of : ATTR( init_arg => 'cat_session' :set :default('view_session') ); my %locale_of : ATTR( init_arg => 'cat_locale' :set :default('en') ); my %theme_of : ATTR( init_arg => 'cat_theme' :set :default('default') ); sub exception { my ( $self, $arg_r ) = @_; $arg_r->{type} = 'exception'; return $self->throw($arg_r); } sub error { my ( $self, $arg_r ) = @_; $arg_r->{type} = 'error'; return $self->throw($arg_r); } sub throw { my ( $self, $arg_r ) = @_; my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : 'unknown'; my $msg = ( exists $arg_r->{msg} ) ? $arg_r->{msg} : 'unknown'; # exception, error my $type = ( exists $arg_r->{type} ) ? $arg_r->{type} : 'exception'; #TODO? #my $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $self->h( $arg_r->{cfg_hr} ) : $self->perr('cfg_hr'); my $tag = ( defined $locale_of{ ident $self} and $locale_of{ ident $self} ) ? $locale_of{ ident $self} : 'en'; my $lh = CipUX::CAT::Web::L10N->get_handle($tag); my $theme = ( defined $theme_of{ ident $self} and $theme_of{ ident $self} ) ? $theme_of{ ident $self} : 'default'; my $path = 'tpl/' . $theme; my $style = $path . '/form.css'; my $template = $path . "/$type/index.html"; my $layout = $path . "/$type/layout.html"; my $cookie_hr = {}; if ( $type eq 'exception' ) { $cookie_hr = { cat_login => 'login', cat_session => 'login' }; } return { cookie_hr => $cookie_hr, layout => $layout, layout_ar => [ { begin_html => 1, }, { tt2_hr => { tpl => $template, param_hr => { SHOW_DEBUG => 0, LOGIN => $login_of{ ident $self}, SESSION => $session_of{ ident $self}, THEME => $theme_of{ ident $self}, LOCALE => $locale_of{ ident $self}, PATH => $path, MODULE => $module, MSG => $msg, TAG => $tag, lh => $lh, }, }, }, { end_html => 1, }, ], }; } } 1; __END__ Controller.pm000444001750001750 7214611413636115 22240 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 - 2010 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Controller; use 5.008001; use warnings; use strict; use CGI; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser); use CGI::FormBuilder; use CipUX::RPC::Client; use CipUX::CAT::Web::View; use Class::Std; use Data::Dumper; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Readonly; use Template; use base qw(CipUX CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $DEF_LOCALE_MAKETEXT => 'en'; # OBJECT my %module_of : ATTR( init_arg => 'module' :get :set :default('CipUX::CAT::Web::Module::Index')); # GLOBAL my $c_hr = {}; # cookie_hr my $cfg_hr = {}; # configuration my $q = CGI->new(); # my @page = (); my $letter = 'A'; my @c_name = qw(cat_login cat_session cat_theme cat_locale); my $header_cookie_hr = {}; my $module_hr = {}; my $rpc = undef; # METHODS sub get_cgi_obj { return $q; } sub set_cfg_hr { my ( $self, $arg_r ) = @_; $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $self->h( $arg_r->{cfg_hr} ) : $self->perr('cfg_hr'); return; } sub dispatch { my ( $self, $arg_r ) = @_; my $l4pcfg = ( exists $cfg_hr->{base}->{catweb_l4pconf} ) ? $self->l( $cfg_hr->{base}->{catweb_l4pconf} ) : '/usr/share/cipux/etc/cipux-cat-web.log4perl'; Log::Log4perl::init_once($l4pcfg); my $l = get_logger(__PACKAGE__); my $module_hr = $self->evaluate($arg_r); # throw it out $l->debug('throw it out'); my $result = $self->display( { cgi => $q, module_hr => $module_hr } ); } sub evaluate { my ( $self, $arg_r ) = @_; my $name = ( exists $arg_r->{name} ) ? $arg_r->{name} : 'index'; my $l = get_logger(__PACKAGE__); my $proto = 'http'; my $host = 'localhost'; my $port = 8001; my $url = ( exists $cfg_hr->{base}->{catweb_rpc_server} ) ? $cfg_hr->{base}->{catweb_rpc_server} : $proto . q{://} . $host . q{:} . $port . q{/RPC2}; $rpc = CipUX::RPC::Client->new( { url => $url, client => 'CipUX::CAT::Web', version => "$VERSION", } ); # Template::Toolkit has a limitation in its WHILE construct. This # value will not limit the WHILE loop. This might be needed by some # import module $Template::Directive::WHILE_MAX = -1; # retrieve all cookies and params or set it to defaults or to 'login' foreach my $f (@c_name) { next if not defined $f; $l->debug("process c_name [$f] ..."); my $p = $q->param($f); if ( defined $p ) { $l->debug("param [$p]"); } my $c = $q->cookie($f); if ( defined $c ) { $l->debug("cookie [$c]"); } $c_hr->{$f} = ( defined $p and $p ) ? $p : ( defined $c and $c ) ? $c : ( $f eq 'cat_locale' ) ? $cfg_hr->{base}->{catweb_login_language} : ( $f eq 'cat_theme' ) ? 'default' : 'login'; $l->debug("result $f [$c_hr->{$f}]"); } $l->debug("got cat_session [$c_hr->{cat_session}]"); # in the second run the RPC::Client do not have the propper # ticket set, we do that now: if ( $rpc->get_ticket eq 'rc_dummy' ) { $rpc->set_ticket( $c_hr->{cat_session} ); $l->debug('second run: set ticket!'); } my $pwd = ( $q->param('cat_password') and $q->param('cat_password') ne $EMPTY_STRING ) ? $q->param('cat_password') : undef; # we got a cat_login and a cat_password, we want to authenticate if ( $c_hr->{cat_login} ne 'login' and defined $pwd ) { $l->debug('we will authenticate'); $c_hr->{cat_session} = $self->authenticate( { password => $pwd } ); $l->debug("new auth session [$c_hr->{cat_session}]"); } # if we came here from a 2nd run (form submit), we have to # find out from which page we came, so that we can adjust the # module accordingly if ( defined $q->param('module') and $q->param('module') ne $EMPTY_STRING ) { $l->debug("adjust module name, old [$name]"); $name = $q->param('module'); $name =~ s{\.cgi}{}smx; $l->debug("adjust module name, new [$name]"); } # we should get the lang handle now, because we need it # either for display a module or dsiplay login view my $lh = CipUX::CAT::Web::L10N->get_handle( $c_hr->{cat_locale} ); $l->debug("setting first lh_obj to [$c_hr->{cat_locale}]"); $l->debug("lh_obj is [$lh]"); # if we have no login or a new session we should login # if not (we have a login or an old session) if ( not( $c_hr->{cat_login} ne 'login' and defined $c_hr->{cat_session} and $c_hr->{cat_session} ne 'login' and $c_hr->{cat_session} ) ) { # we have no login and/or no session, we should log in $l->debug("invalid cat_session [$c_hr->{cat_session}]"); $l->debug("corresp login [$c_hr->{cat_login}]"); $l->debug("corresp theme [$c_hr->{cat_theme}]"); $l->debug("corresp locale [$c_hr->{cat_locale}]"); $l->debug("lh_obj is [$lh]"); $l->debug('display login screen'); # display login screen my $view = CipUX::CAT::Web::View->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); $module_hr = $view->login( { cgi => $q, cfg_hr => $cfg_hr, lh_obj => $lh } ); return $module_hr; } $l->debug("got old cat_session [$c_hr->{cat_session}]"); $l->debug('we have login and an old session we can module'); # test the access. (Not really needed, even if you can see the # module you will never execute the corresponding tasks to fill the # template) Just for convenience. my $access = $self->module_access( { module => $name . ".cgi" } ); # do we have access? if ( not $access ) { # access denined, wrong login or wrong session my $m = "Acesss DENIED to [$name.cgi]"; $m .= " for [$c_hr->{cat_login}]!"; $l->info($m); my $e = CipUX::CAT::Web::Exception->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); my $m_hr = $e->exception( { module => 'cat.cgi', msg => $m } ); return $m_hr; } # ACCESS OK my $info = "ACCESS granted to [$name]"; $info .= " for [$c_hr->{cat_login}]"; $l->info($info); $l->debug( 'display module ', $module_of{ ident $self} ); $l->debug("cat_session is OK [$c_hr->{cat_session}]"); my $mod_access_hr = $self->all_module_access; $l->debug( 'mod_access_hr: ', { filter => \&Dumper, value => $mod_access_hr } ); my $view = CipUX::CAT::Web::View->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); # renew session $rpc->set_ticket( $c_hr->{cat_session} ); my $t = $rpc->rpc_session; if ( not $t ) { # then ticket BAD my $m = invalid_session_msg($lh); $l->info($m); my $e = CipUX::CAT::Web::Exception->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); my $m_hr = $e->exception( { module => 'cat.cgi', msg => $m } ); return $m_hr; } # renew session OK, ticket OK $rpc->set_ticket($t); $c_hr->{cat_session} = $t; my $ta = 'cipux_task_retrieve_all_cat_module'; $ta .= '_name_shortdescription_templatedir_'; $ta .= 'author_version_license_isenabled_icon'; my $a_hr = $rpc->xmlrpc( { cmd => $ta } ); # if no CAT module list if ( $a_hr->{status} eq 'FALSE' ) { my $m = 'Got no list of CAT modules!'; $m .= ' Did the administrator forgot to give'; $m .= ' you access to index.cgi?'; if ( exists $a_hr->{msg} and defined $a_hr->{msg} and $a_hr->{msg} ) { $m .= q{ } . $a_hr->{msg}; } my $e = CipUX::CAT::Web::Exception->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); my $m_hr = $e->exception( { 'module' => 'cat.cgi', msg => $m } ); return $m_hr; } # if our module is not enabled if ( not $self->is_module_enabled( { a_hr => $a_hr, module => $name } ) ) { my $m = "The module $name is not enabled!"; $m .= ' Did the administrator forgot to enable'; $m .= ' that module?'; my $e = CipUX::CAT::Web::Exception->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); my $m_hr = $e->exception( { 'module' => 'cat.cgi', msg => $m } ); return $m_hr; } # display module my $v = $module_of{ ident $self}->new( { name => $name } ); # RUN the CAT module my $module_hr = $v->module( { c_hr => $c_hr, # cookies cfg_hr => $cfg_hr, # config space cgi_obj => $q, # cgi object rpc_obj => $rpc, # rpc object view_obj => $view, # view object lh_obj => $lh, # i18n object mod_access_hr => $mod_access_hr # mod access info } ); return $module_hr; } sub authenticate { my ( $self, $arg_r ) = @_; my $p = $arg_r->{password}; my $login = $c_hr->{cat_login}; my $l = get_logger(__PACKAGE__); $l->debug('rpc_ping'); if ( $rpc->rpc_ping() ) { $l->debug('rpc_ping SUCCESS'); # SUCCESS } else { $l->debug('rpc_ping FAILURE'); # FAILURE } $l->debug('rpc_login'); my $login_ok = $rpc->rpc_login( { login => $login, password => $p } ); if ($login_ok) { # SUCCESS $l->debug('rpc_login SUCCESS'); my $t = scalar $rpc->get_ticket(); my $info = "Login OK. Got new ticket [$t] for login [$login]"; $l->info($info); $l->debug("new cat_session via login [$c_hr->{cat_session}]"); return $t; } else { # FAILURE $l->debug( "Ctrdummy cat_session via bad login [$c_hr->{cat_session}]"); $c_hr->{cat_session} = 'login'; $c_hr->{cat_session} = 'Ctrdummy'; my $info = 'Login FILAURE.'; $info .= " Set ticket to [Ctrdummy] for login [login}]"; $l->info($info); $l->debug('rpc_login FAILURE'); } return $c_hr->{cat_session}; } sub get_new_session { my ( $self, $arg_r ) = @_; my $l = get_logger(__PACKAGE__); my $t = $rpc->rpc_session; if ($t) { $l->debug("got new session [$t]"); $l->debug("get new cat_session [$c_hr->{cat_session}]"); return $t; } else { $l->debug("got no new session!"); $l->debug("get NO new cat_session [$c_hr->{cat_session}]"); return 0; } return 0; } sub all_module_access { my ( $self, $arg_r ) = @_; my $l = get_logger(__PACKAGE__); use CipUX::CAT::Web::Module; my $plugin = CipUX::CAT::Web::Module->new(); $plugin->init(); $l->debug( "get theme[" . $plugin->get_theme . "]" ); $plugin->set_theme( $c_hr->{cat_theme} ); # or it will be default $l->debug("set theme[$c_hr->{cat_theme}]"); # simple interface my @module = $plugin->get_module_name_register(); my $r_hr = {}; foreach my $m (@module) { my $access = $self->module_access( { module => $m } ); $l->debug("module [$m] [$access]"); $r_hr->{$m} = $access; } # 'student.cgi' => 0|1 $l->debug( 'r_hr: ', { filter => \&Dumper, value => $r_hr } ); return $r_hr; } sub module_access { my ( $self, $arg_r ) = @_; my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); # This will be the result by the rpc function # '$rpc->rpc_check_access' which will be send # to the RPC server: # my $param_hr = { # 'entity' => 'cat_module', # 'to_ar' => [$module], ---> eq $param_ar # 'rpcmode' => 'rpc_info', # 'from' => $login, # 'subcmd' => 'cat_module_access', # 'scope' => 'single' # }; # However, we have just to specify this: # subcmd: user_task_access | user_task_access_survey | # user_cat_module_access | user_cat_module_access_survey | # user_rpc_intern_access | user_rpc_intern_access_survey # rpc_mode: rpc_info | rpc_intern # entity: task | rpc_intern | cat_module # scope: single | manifold # param_ar: array reference of to be tested modules # evtl set_login $rpc->set_login( $c_hr->{cat_login} ); # did the client forgot it? my ( $from, $access_hr ) = $rpc->rpc_check_access( { subcmd => 'cat_module_access', rpcmode => 'rpc_info', entity => 'cat_module', scope => 'single', # from to param_ar => [ $c_hr->{cat_login}, $module ], } ); # access_hr = { # 'frodo' => '1', # 'language.cgi' => '0' # }; $l->debug( 'access_hr: ', { filter => \&Dumper, value => $access_hr } ); $l->debug( 'from: ', $from ); if ( exists $access_hr->{$module} and $access_hr->{$module} ) { $l->info("Access GRANTED for [$from] to [$module]"); return 1; } $l->info("Access DENIED for [$from] to [$module]"); return 0; } sub display { my ( $self, $arg_r ) = @_; my $module_hr = $arg_r->{module_hr}; my $q = $arg_r->{cgi}; my $caller = exists $arg_r->{caller} ? $arg_r->{caller} : 'unknown'; my $l = get_logger(__PACKAGE__); my @page = (); $l->debug( 'module_hr: ', { filter => \&Dumper, value => $module_hr } ); $l->debug("cat_session [$c_hr->{cat_session}]"); my $page_ar = $module_hr->{page_ar}; # array ref or empty # generate default header cookies foreach my $c (@c_name) { $header_cookie_hr->{$c} = $q->cookie( -name => $c, -value => $c_hr->{$c} ); } # get the cookies for the page if there some my $page_cookie_hr = ( exists $module_hr->{cookie_hr} and ref $module_hr->{cookie_hr} eq 'HASH' ) ? $module_hr->{cookie_hr} : {}; # cookies from page will overwrite cookies from param or controller # cookies this might also add cookies. CAT will do nothing with them # at the moment, except to set them in the header. The module has to # deal with it, if it wants that foreach my $c ( keys %{$page_cookie_hr} ) { $header_cookie_hr->{$c} = $q->cookie( -name => $c, -value => $page_cookie_hr->{$c} ); } # TODO?: write that sub! (this is probabably the best location to execute?) # now e to have the session renew in sub session_is_ok # get a new session # $c_hr->{cat_session} = $self->get_new_session; my $css = 'tpl/' . $c_hr->{cat_theme} . '/default.css'; push @page, $q->header( -cookie => [ values %{$header_cookie_hr} ], -type => 'text/html', -expires => 'now', -charset => 'utf-8', ); #$l->debug( # 'standard CGI header: ', # { # filter => \&Dumper, # value => $q->header( # -cookie => [ values %{$header_cookie_hr} ], # -type => 'text/html', # -expires => 'now', # -charset => 'utf-8', # ) # } #); my $page_hr = {}; my $part = 0; foreach my $v_hr ( @{ $module_hr->{layout_ar} } ) { if ( exists $v_hr->{cgi_header} ) { $l->debug( 'replace standard CGI header with custom: ', { filter => \&Dumper, value => $v_hr->{cgi_header} } ); # replace our CGI header with the header which comes from the # module, the module seems to know it better shift @page; unshift @page, $v_hr->{cgi_header}; } elsif ( exists $v_hr->{begin_html} ) { $l->debug('begin_html exists'); my $lang = $c_hr->{cat_locale}; $lang =~ s{_}{-}smxg; $page_hr->{"part$part"} = $q->start_html( -style => $css, -lang => $lang, -encoding => 'utf8', -author => 'cipux-devel@cipux.org', -title => $module_of{ ident $self}, -meta => { 'keywords' => 'CipUX CAT Web', 'copyright' => 'GNU GPL version 2 or any later version', } ); $part++; } elsif ( exists $v_hr->{page_ar} ) { $l->debug('page_ar exists'); $page_hr->{"part$part"} = join "\n", @{ $v_hr->{page_ar} }; $part++; } elsif ( exists $v_hr->{body_ar} ) { $l->debug('body_ar exists'); $page_hr->{"part$part"} = join "\n", @{ $v_hr->{body_ar} }; $part++; } elsif ( exists $v_hr->{formbuilder_hr} ) { $l->debug('formbuilder_hr exists'); $page_hr->{"part$part"} = $v_hr->{formbuilder_hr}->{form}->render(); $part++; } elsif ( exists $v_hr->{tt2_hr} ) { # if the module was not able to set the language and theme, # we use this fallback if ( not $v_hr->{tt2_hr}->{tpl} =~ m{^tpl/}gmx ) { $v_hr->{tt2_hr}->{tpl} = 'tpl/default/exception/index.html'; } $l->debug('tt2_hr exists'); my $msg = 'Template process failed for template'; $msg .= " theme [$header_cookie_hr->{theme}]" if defined $header_cookie_hr->{theme}; $msg .= " locale [$header_cookie_hr->{locale}]" if defined $header_cookie_hr->{locale}; my $tpl = Template->new(); my $output = q{}; $l->debug("sub template: [$v_hr->{tt2_hr}->{tpl}]"); my $out = $tpl->process( $v_hr->{tt2_hr}->{tpl}, $v_hr->{tt2_hr}->{param_hr}, \$output ) || confess "$msg [$v_hr->{tt2_hr}->{tpl}]! \n" . $tpl->error(); $page_hr->{"part$part"} = $output; $part++; # TODO: add teplate var to output if not defined by module: # #LOGIN => $login_of{ ident $self}, # #THEME => $theme_of{ ident $self}, # #LOCALE => $locale_of{ ident $self}, # MODULE => $MODULE, # #SHOW_DEBUG => $debug, # PATH => $path, } elsif ( exists $v_hr->{statusline} ) { $l->debug('statusline exists'); my $view = CipUX::CAT::Web::View->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); $l->debug("statusline object [$view]"); my $module_hr = $view->status_line( { rpc_obj => $rpc, cgi => $q, frommodule => __PACKAGE__, } ); my $tpl = Template->new(); my $output = q{}; my $msg = 'Template process failed for template'; foreach my $v_hr ( @{ $module_hr->{layout_ar} } ) { $l->debug( 'param_hr [' . $v_hr->{tt2_hr}->{param_hr} . '] ' ); foreach my $k ( sort keys %{ $v_hr->{tt2_hr}->{param_hr} } ) { $l->debug( "param_hr key [$k] $v_hr->{tt2_hr}->{param_hr}->{$k}" ); } my $out = $tpl->process( $v_hr->{tt2_hr}->{tpl}, $v_hr->{tt2_hr}->{param_hr}, \$output ) || confess "$msg [$v_hr->{tt2_hr}->{tpl}]! \n
" . $tpl->error(); } #my $output = $module_hr; $l->debug($output); $page_hr->{"part$part"} = $output; $part++; } elsif ( exists $v_hr->{footer_hr} ) { $l->debug('footer_hr exists'); my $view = CipUX::CAT::Web::View->new( { 'cat_login' => $c_hr->{cat_login}, 'cat_session' => $c_hr->{cat_session}, 'cat_locale' => $c_hr->{cat_locale}, 'cat_theme' => $c_hr->{cat_theme}, } ); my $module_hr = $view->footer( { frommodule => __PACKAGE__, rpc_obj => $rpc, cgi => $q, show_index_back => $v_hr->{footer_hr}->{show_index_back}, show_script_back => $v_hr->{footer_hr}->{show_script_back}, script_back => $v_hr->{footer_hr}->{script_back}, } ); my $tpl = Template->new(); my $output = q{}; my $msg = 'Template process failed for template'; foreach my $v_hr ( @{ $module_hr->{layout_ar} } ) { $l->debug( 'param_hr [' . $v_hr->{tt2_hr}->{param_hr} . '] ' ); foreach my $k ( sort keys %{ $v_hr->{tt2_hr}->{param_hr} } ) { $l->debug( "param_hr key [$k] $v_hr->{tt2_hr}->{param_hr}->{$k}" ); } my $out = $tpl->process( $v_hr->{tt2_hr}->{tpl}, $v_hr->{tt2_hr}->{param_hr}, \$output ) || confess "$msg [$v_hr->{tt2_hr}->{tpl}]! \n
" . $tpl->error(); } $l->debug($output); $page_hr->{"part$part"} = $output; $part++; } elsif ( exists $v_hr->{end_html} ) { $l->debug('end_html exists'); $page_hr->{"part$part"} = $q->end_html; $part++; } } my $msg = 'LAYOUT Template process failed!'; if ( defined $header_cookie_hr->{theme} ) { $msg .= " theme [$header_cookie_hr->{theme}]"; } else { $msg .= ' No theme cookie.'; } if ( defined $header_cookie_hr->{locale} ) { $msg .= " locale [$header_cookie_hr->{locale}]"; } else { $msg .= ' No locale cookie.'; } my $tpl = Template->new(); my $output = q{}; $l->debug("arange template: [$module_hr->{layout}]"); $l->debug("arange template: [$header_cookie_hr->{theme}]"); $l->debug("arange template: [$c_hr->{cat_theme}]"); if ( $module_hr->{layout} =~ m{^/} ) { $module_hr->{layout} = 'tpl/' . $c_hr->{cat_theme} . q{/} . $module_hr->{layout}; } # TODO, use earlier created lh my $lh = CipUX::CAT::Web::L10N->get_handle( $c_hr->{cat_locale} ); $page_hr->{lh} = $lh; my $p = Dumper($page_hr); my $out = $tpl->process( $module_hr->{layout}, $page_hr, \$output ) || confess "Process exception FILE [$module_hr->{layout}]" . " OUT [$output] PAGE [$p]" . " TPL ERROR [" . $tpl->error() . "]"; # || confess "$msg Regarding template [$module_hr->{layout}]" # ; #. Dumper($page_hr); push @page, $output; $l->debug("cat_session [$c_hr->{cat_session}]"); foreach my $line (@page) { print $line or croak 'Can not print page to STDOUT!'; } return $part; } sub is_module_enabled { my ( $self, $arg_r ) = @_; my $a_hr = ( exists $arg_r->{a_hr} ) ? $self->h( $arg_r->{a_hr} ) : $self->perr('a_hr'); my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); # find out if the module is enabled my $r_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr } ); my $d_ar = $r_hr->{tpl_data_ar}; foreach my $hr ( @{$d_ar} ) { my $m = $hr->{cn}; next if $m ne "$module.cgi"; return 1 if $hr->{cipuxIsEnabled} eq 'TRUE'; return 0 if $hr->{cipuxIsEnabled} eq 'FALSE'; } return 0; } sub invalid_session_msg { my $lh = shift; return $lh->maketext('The session got invalid. Please login again.'); } } 1; __END__ Plugin.pm000444001750001750 515011413636115 21322 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Webpackage CipUX::CAT::Web::Plugin; use warnings; use strict; use Class::Std; use English qw( -no_match_vars); use Readonly; use Module::Pluggable search_path => ['CipUX::CAT::Web::Module'], instantiate => 'new', sub_name => 'register'; use base qw(CipUX); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; # GLOBAL my $module_name_register_hr = {}; my $module_cfg_register_hr = {}; # METHOD sub init { my $self = shift; foreach my $module ( $self->register ) { next until $module->can('register'); $module->register(); } return; } sub set_module_name_register { my ( $self, $arg_r ) = @_; my $class = exists $arg_r->{class} ? $self->l( $arg_r->{class} ) : $self->perr('class'); my $name = exists $arg_r->{name} ? $self->l( $arg_r->{name} ) : $self->perr('name'); $module_name_register_hr->{$name} = $class; return; } # returns Perl Module name for registers names sub get_module_name_register { if (wantarray) { return keys %{$module_name_register_hr}; } return $module_name_register_hr; } sub set_module_cfg_register { my ( $self, $arg_r ) = @_; my $cfg_ar = exists $arg_r->{cfg_ar} ? $arg_r->{cfg_ar} : $self->perr('cfg_ar'); my $name = exists $arg_r->{name} ? $self->l( $arg_r->{name} ) : $self->perr('name'); foreach my $ar ( @{$cfg_ar} ) { # cumulated by class::std # should be excactly one hash ref in one array ref: foreach my $hr ( @{$ar} ) { # need because of class::std # simple merge: foreach my $attr ( sort keys %{$hr} ) { #print "MT ATTR[$attr]\n"; $module_cfg_register_hr->{$name}->{$attr} = $hr->{$attr}; } } } return; } sub get_module_cfg_register { my ( $self, $arg_r ) = @_; my $name = exists $arg_r->{name} ? $self->l( $arg_r->{name} ) : undef; if ( defined $name and exists $module_cfg_register_hr->{$name} ) { return $module_cfg_register_hr->{$name}; } return $module_cfg_register_hr; } } 1; __END__ Action.pm000444001750001750 1611711413636115 21326 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Action; use 5.008001; use warnings; use strict; use Class::Std; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser cluck); use Date::Manip; use Data::Dumper; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Readonly; use base qw(CipUX); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; sub create_object { my ( $self, $arg_r ) = @_; my $form = exists $arg_r->{form} ? $arg_r->{form} : $self->perr('form'); my $rpc = exists $arg_r->{rpc_obj} ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cipux_entity = exists $arg_r->{cipux_entity} ? $arg_r->{cipux_entity} : $self->perr('cipux_entity'); my $t = exists $arg_r->{task} ? $self->l( $arg_r->{task} ) : $self->perr('task'); my $l = get_logger(__PACKAGE__); $l->debug( 'form: ', $form ); $l->debug( 'cipux_entity: ', $cipux_entity ); $l->debug( 'task: ', $t ); $l->debug( 'rcp obj:', $rpc ); my $letter = undef; my $id = $form->field('id'); confess 'No object ID (OID) given' if not defined $id; $l->debug( 'id: ', $id ); my $firstname = ( defined $form->field('cipuxFirstname') and $form->field('cipuxFirstname') ) ? $self->l( $form->field('cipuxFirstname') ) : "Basic"; $l->debug( 'firstname: ', $firstname ); my $lastname = ( defined $form->field('cipuxLastname') and $form->field('cipuxLastname') ) ? $form->field('cipuxLastname') : 'Group'; $l->debug( 'lastname: ', $lastname ); # no_password_given my $p1 = $form->field('password') || confess 'No password given (first password)'; $l->debug('password: (not printed)'); # no_password_given (repeat) my $p2 = $form->field('password_repeat') || confess 'No password given (second password)'; $l->debug('password repeat: (not printed)'); # ACTION if ( $p1 eq $p2 ) { $l->debug('passwords match'); my $p_hr = { object => $id, userPassword => $p1, cipuxFirstname => $firstname, cipuxLastname => $lastname, }; $l->debug('create object new RPC object ...'); my $a_hr = $rpc->xmlrpc( { cmd => $t, param_hr => $p_hr } ) or confess "execution of task [$t] was not successful"; if ( $a_hr->{status} eq 'TRUE' ) { $l->debug('... object was created'); my $msg = $self->get('The object %s has been created.'); $letter = ucfirst( substr $id, 0, 1 ); } else { # not able to create object $l->debug('... object was NOT created'); $self->wwarn( { number => '2-017-0024-016' } ); } } else { # passwords_not_equal $l->debug('passwords did NOT match'); croak 'Given passwords are not equal!'; } $l->debug("out letter: [$letter]"); return { letter => $letter, }; } sub destroy_object { my ( $self, $arg_r ) = @_; my $form = exists $arg_r->{form} ? $arg_r->{form} : $self->perr('form'); my $rpc = exists $arg_r->{rpc_obj} ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cipux_entity = exists $arg_r->{cipux_entity} ? $arg_r->{cipux_entity} : $self->perr('cipux_entity'); my $t = exists $arg_r->{task} ? $self->l( $arg_r->{task} ) : $self->perr('task'); my $l = get_logger(__PACKAGE__); # no_oid_given my $id = $form->field('id') || confess 'No object id (OID) given'; # ACTION my $a_hr = $rpc->xmlrpc( { cmd => $t, param_hr => { object => $id }, } ) or confess 'Failed to execute task [$t]!'; if ( $a_hr->{status} eq 'TRUE' ) { my $msg = 'The object %s has been deleted.'; $l->debug($msg); } else { # not able to delete object my $msg = 'Was not able to delete object!'; $l->debug($msg); croak $msg; } return {}; } sub set_object_password { my ( $self, $arg_r ) = @_; my $form = exists $arg_r->{form} ? $arg_r->{form} : $self->perr('form'); my $rpc = exists $arg_r->{rpc_obj} ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cipux_entity = exists $arg_r->{cipux_entity} ? $arg_r->{cipux_entity} : $self->perr('cipux_entity'); my $t = exists $arg_r->{task} ? $self->l( $arg_r->{task} ) : $self->perr('task'); my $l = get_logger(__PACKAGE__); # no_oid_given my $id = $form->field('id') || confess 'No object id (OID) given!'; # no_password_given my $p1 = $form->field('password') || confess 'No (first) password given!'; # no_password_given my $p2 = $form->field('password_repeat') || confess 'No (second) password given!'; # password not equal if ( $p1 eq $p2 ) { my $a_hr = $rpc->xmlrpc( { cmd => $t, param_hr => { object => $id, value => $p1 }, } ) or confess "Execution of RPC task [$t] failed!"; if ( $a_hr->{status} eq 'TRUE' ) { my $msg = 'The password for %s has been changed.'; $l->debug($msg); } else { # not able to set password my $msg = 'Was not able to set the password!'; $l->debug($msg); croak $msg; } } else { # passwords_not_equal my $msg = 'Given passwords are not equal!'; $l->debug($msg); croak $msg; } return {}; } } 1; __END__ Module.pm000444001750001750 1733511413636115 21341 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module; use 5.008001; use warnings; use strict; use Class::Std; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser cluck confess); use CipUX::CAT::Web::Exception; use CipUX::CAT::Web::View; use Data::Dumper; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Readonly; use base qw(CipUX CipUX::CAT::Web CipUX::CAT::Web::Plugin CipUX::CAT::Web::Action); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $MAX_COL => 7; # OBJECT my %name_of : ATTR( init_arg => 'name' :default('noname')); my %login_of : ATTR( init_arg => 'cat_login' :get :set :default('login')); my %session_of : ATTR( init_arg => 'cat_session' :get :set :default('login')); my %locale_of : ATTR( init_arg => 'cat_locale' :get :default('en') ); my %theme_of : ATTR( init_arg => 'cat_theme' :get :set :default('default')); sub get_l4p_cfg { # TODO # get a conf file, beacause the admin might have its # own idea about log file format # my $l4p_conf = # ( exists $cfg_hr->{catweb_l4pconf} # and defined $cfg_hr->{catweb_l4pconf} # and -e $self->l( $cfg_hr->{catweb_l4pconf} ) ) # ? $self->l( $cfg_hr->{catweb_l4pconf} ) # : undef; my $l4p_conf = undef; return $l4p_conf; } sub get_template_path { my $self = shift; my $module = shift; # standard way of calulation path my $path = 'tpl/' . $theme_of{ ident $self} . q{/} . $module; return $path; } sub get_cookie_hr { my $self = shift; my $l = get_logger(__PACKAGE__); my $c_hr = { cat_login => $login_of{ ident $self}, cat_session => $session_of{ ident $self}, cat_locale => $locale_of{ ident $self}, cat_theme => $theme_of{ ident $self}, }; $l->debug( 'cookie_hr: ', { filter => \&Dumper, value => $c_hr } ); return $c_hr; } sub is_debug_mode { my $self = shift; my $l4p_conf = $self->get_l4p_cfg(); # TODO: get that from config my $cfg_hr = {}; if ( exists $cfg_hr->{catweb_debug} and defined $cfg_hr->{catweb_debug} and $cfg_hr->{catweb_debug} and defined $l4p_conf ) { return 1; } return 0; } # You can overwrite this subroutine, if you would like to define # your own description. sub desc { my $self = shift; my $module = shift; my $add = shift; my $desc = "This is the package cipux-cat-web-$module."; $desc .= 'It is a standard CipUX CAT-Web'; $desc .= "\nmodule.\n$add\n"; return $desc; } sub get_max_col { # TODO: overlay that with config value: my $max_col = $MAX_COL; return $max_col; } # TODO: replace with i10n sub get { my $self = shift; my $word = shift; return $word; } sub exception { my ( $self, $arg_r ) = @_; my $m = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : 'unknown'; my $msg = ( exists $arg_r->{msg} ) ? $arg_r->{msg} : 'unknown'; my $e = CipUX::CAT::Web::Exception->new( $self->get_cookie_hr ); my $module_hr = $e->exception( { module => $m, msg => $msg } ); return $module_hr; } sub error { my ( $self, $arg_r ) = @_; my $m = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : 'unknown'; my $msg = ( exists $arg_r->{msg} ) ? $arg_r->{msg} : 'unknown'; my $e = CipUX::CAT::Web::Exception->new( $self->get_cookie_hr ); my $module_hr = $e->error( { module => $m, msg => $msg } ); return $module_hr; } # sub set_object_password { # my ( $self, $arg_r ) = @_; # my $obj = CipUX::CAT::Web::Action->new; # my $r_hr = $obj->set_object_password($arg_r); # return $r_hr; # } # sub create_object { # my ( $self, $arg_r ) = @_; # my $obj = CipUX::CAT::Web::Action->new; # my $r_hr = $obj->create_object($arg_r); # return $r_hr; # } # sub destroy_object { # my ( $self, $arg_r ) = @_; # my $obj = CipUX::CAT::Web::Action->new; # my $r_hr = $obj->destroy_object($arg_r); # return $r_hr; # } # old Module::Single sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $license = 'GNU General Public License - GNU GPL - version 2'; $license .= ' or (at your opinion) any later version'; my $module_hr = { # mandatory cn => 'teacher.cgi', # U must be *.cgi cipuxName => 'teacher', # U i18n name cipuxTemplateDir => 'basicobject', # - tpl dir cipuxTemplate => 'list.html', # - tpl file cipuxEntity => 'teacher_account', # - obj CIPUX_ENTITY cipuxIsModuleArray => 'TRUE', # - FALSE f. single mod cipuxModality => 'teacher', # - ARRAY kind cipuxAuthor => ['Christian Kuelker'], # U one or more cipuxLicense => $license, # U test cipuxYear => ['2010'], # - one or more cipuxScript => 'teacher.cgi', # ? cipuxIcon => 'senior.png', # U cipuxTask => ['NULL'], # U default invalid cipuxShortDescription => 'Manage teacher accounts.', # auxiallary cipuxIsEnabled => 'FALSE', # should be FALSE by default cipuxPosition => '', cipxuId => '1', cipuxVersion => '3.4.0.0', cipuxI18n => 'cipux-cat-web', cipuxAclGroupMember => [], cipuxAclUserMember => [], cipuxAclRoleMember => [], #cipuxAclRoleMember => [qw(admin assistant)], cipuxFile => '', cipuxLang => [qw(en de da jp fr)], cipuxCreationDate => '', cipuxKey => '', cipuxRemark => 'No remark', cipuxMailAddress => ['christian@skolelinux.de'], cipuxPackage => 'cipux-cat-web', cipuxWebURL => 'http://www.cipux.org', cipuxDescription => 'The CipUX CAT module teacher.cgi is a CAT core module. It is written with two aims: 1) To have basic management functions for the entity teacher. 2) To show a basic interface not to burden beginners.', }; return [$module_hr]; } } 1; __END__ L10N.pm000444001750001750 1344011413636115 20557 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 - 2010 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # $Id$ # $Revision$ # $HeadURL$ # $Date$ # $Source$ package CipUX::CAT::Web::L10N; use warnings; use strict; use Class::Std; use Data::Dumper; use English qw( -no_match_vars); use Locale::Maketext::Lexicon; use Log::Log4perl qw(get_logger :levels); use Readonly; use base qw(CipUX Locale::Maketext); # CONST Readonly::Scalar my $PATH_I18N => substr( __FILE__, 0, -7 ) . 'I18N'; Readonly::Scalar my $EMPTY_STRING => q{}; _do_import( { domain => $EMPTY_STRING } ); { use version; our $VERSION = qv('3.4.0.3'); sub _do_import : PRIVATE { my ($arg_r) = @_; my $domain = ( exists $arg_r->{domain} ) ? $arg_r->{domain} : $EMPTY_STRING; my $import_hr = { _auto => 1, # needed to set auto answer mode (really?) _AUTO => 1, # needed to set auto answer mode (sure) en => ['Auto'], # set the answer source for en (!) }; my $dest = join '/', ( $PATH_I18N, $domain, '*.po' ); my @file = glob $dest; foreach my $f (@file) { my $tag = $f; #'/usr/share/perl5/CipUX/CAT/Web/I18N/fr.po' $tag =~ s{^.*/}{}gmx; # rm path/ $tag =~ s{\.po$}{}gmx; # rm .po # de => [ Gettext => '/usr/share/perl5/CipUX/CAT/Web/I18N/fr.po' ], if ( $tag =~ m{^[a-z-]+$} ) { $import_hr->{$tag} = [ Gettext => $f ]; } } Locale::Maketext::Lexicon->import($import_hr); return; } sub import_lexicon { my ( $self, $arg_r ) = @_; my $domain = ( exists $arg_r->{domain} ) ? $self->l( $arg_r->{domain} ) : $self->perr('domain'); _do_import( { domain => $domain } ); return; } sub i18n_theme { my ( $self, $arg_r ) = @_; my $lh = ( exists $arg_r->{lh_obj} and defined $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $arg_r->{cfg_hr} : $self->perr('cfg_hr'); my $l = get_logger(__PACKAGE__); my $theme_hr = { default => $lh->maketext('default') }; # fall back if ( exists $cfg_hr->{theme} and ref $cfg_hr->{theme} eq 'HASH' ) { # owerwrite theme_hr with translation where available foreach my $t ( %{ $cfg_hr->{theme} } ) { # all themes next if $t eq $EMPTY_STRING; next if not exists $cfg_hr->{theme}->{$t}; next if not defined $cfg_hr->{theme}->{$t}; next if not $cfg_hr->{theme}->{$t}; my $trans = $lh->maketext($t); next if not defined $trans; next if not $trans; # add only enabled theme with translation $theme_hr->{$t} = $trans; } } $l->debug( 'theme_hr: ', { filter => \&Dumper, value => $theme_hr } ); return $theme_hr; } sub i18n_locale { my ( $self, $arg_r ) = @_; my $lh = ( exists $arg_r->{lh_obj} and defined $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $arg_r->{cfg_hr} : $self->perr('cfg_hr'); my $l = get_logger(__PACKAGE__); my $locale_hr = ( exists $cfg_hr->{language} ) ? $cfg_hr->{language} : { 'en' => 'English' }; if ( exists $cfg_hr->{language} and ref $cfg_hr->{language} eq 'HASH' ) { # owerwrite locale_hr with translation where available foreach my $tag ( %{ $cfg_hr->{language} } ) { next if $tag eq $EMPTY_STRING; next if not exists $cfg_hr->{language}->{$tag}; next if not defined $cfg_hr->{language}->{$tag}; next if not $cfg_hr->{language}->{$tag}; my $trans = $lh->maketext( $cfg_hr->{language}->{$tag} ); next if not defined $trans; next if not $trans; $locale_hr->{$tag} = $trans; } } $l->debug( 'locale_hr: ', { filter => \&Dumper, value => $locale_hr } ); return $locale_hr; } # for debug, if you would like to know what the string to be translated is sub i18n { my ( $self, $lh, $s ) = @_; my $fn = '/tmp/cat.log'; open my $f, q{>>}, $fn or die "Can not open $fn!\n"; print $f "try to translate [$s]\n"; close $f; my $trans = $lh->maketext($s); return $trans; } # not used, consider to use sub l10n_failure_handler { my ( $failing_lh, $key, $params ) = @_; #my $l = get_logger(__PACKAGE__); #$l->debug("translation failed for key [$key] in "); return; } # overwrite to trap errors sub maketext { my ( $lh, @stuff ) = @_; my $l = get_logger(__PACKAGE__); my $out; eval { $out = $lh->SUPER::maketext(@stuff) }; if(not $EVAL_ERROR){ foreach my $s (@stuff) { $l->debug("translate [$s] -> [$out]"); } return $out if not $EVAL_ERROR; } foreach my $s (@stuff) { $l->error("ERROR: Can not translate [$s]!"); } return @stuff; } } 1; View.pm000444001750001750 2520511413636115 21021 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web# +========================================================================+ # || Copyright (C) 2009 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::View; use 5.008001; use warnings; use strict; use Class::Std; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser cluck); use CGI::FormBuilder; use Data::Dumper; use Date::Manip; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Readonly; use Sys::Hostname; use base qw(CipUX CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; # OBJECT my %login_of : ATTR( init_arg => 'cat_login' :set :default('view_login') ); my %session_of : ATTR( init_arg => 'cat_session' :set :default('view_session') ); my %locale_of : ATTR( init_arg => 'cat_locale' :set :default('en') ); my %theme_of : ATTR( init_arg => 'cat_theme' :set :default('default') ); sub login { my ( $self, $arg_r ) = @_; my $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $self->h( $arg_r->{cfg_hr} ) : $self->perr('cfg_hr'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $l = get_logger(__PACKAGE__); my $path = $self->get_path; $l->debug("path [$path]"); my $demo = 0; my $demo_restore_time = 'unknown'; if ( exists $cfg_hr->{base}->{catweb_demo} and defined $cfg_hr->{base}->{catweb_demo} and $cfg_hr->{base}->{catweb_demo} eq "1" ) { $demo = 1; my $fn = '/usr/share/cipux-cat-web/tpl/TIME_STAMP'; open my $f, q{<}, $fn or croak "Can not open $fn!"; my @TS = <$f>; close $f; #2010-01-07T12:17:45 $TS[0] =~ m{^(\d+-\d+-\d+T\d+:\d+:\d+)$}mx; if ($1) { $demo_restore_time = $1; } } my $style = $path . '/form.css'; my $template = $path . '/login/index.html'; my $form = CGI::FormBuilder->new( method => 'post', fields => [qw/cat_theme cat_locale cat_login cat_password/], submit => [ $lh->maketext('OK') ], #params => $cat{cgi}, keepextra => 1, debug => 0, reset => 0, sticky => 0, stylesheet => $style, template => { type => 'TT2', template => $template, variable => 'form', data => { lh => $lh, DEMO => $demo, DEMO_RESTORE_TIME => $demo_restore_time, }, } ); $l->debug( 'cfg_hr: ', { filter => \&Dumper, value => $cfg_hr } ); #my $locale_hr = { de-de => 'German', en => 'English' }; my $locale_hr = $self->i18n_locale( { lh_obj => $lh, cfg_hr => $cfg_hr } ); my $theme_hr = $self->i18n_theme( { lh_obj => $lh, cfg_hr => $cfg_hr } ); $form->field( name => 'cat_password', type => 'password' ); # TODO : get that from cfg $form->field( name => 'server_name', type => 'text', value => 'TEST' ); $form->field( name => 'cat_locale', type => 'select', selectname => 0, size => 1, value => $locale_of{ ident $self}, options => $locale_hr ); $form->field( name => 'cat_theme', type => 'select', selectname => 0, size => 1, value => $theme_of{ ident $self}, options => $theme_hr ); my $param_hr = { theme => $theme_of{ ident $self}, locale => $locale_of{ ident $self} }; my $r_hr = { cookie_hr => { cat_login => $login_of{ ident $self}, cat_session => $session_of{ ident $self}, cat_locale => $locale_of{ ident $self}, cat_theme => $theme_of{ ident $self}, }, layout => "$path/login/layout.html", layout_ar => [ { begin_html => 1, }, { formbuilder_hr => { form => $form }, }, { footer_hr => {}, }, { end_html => 1, }, ], }; #return ( SCALAR {$form} HASHREF {$r_hr} ); return ($r_hr); } sub logout { my ( $self, $arg_r ) = @_; my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $path = $self->get_path; my $form = CGI::FormBuilder->new( method => 'post', fields => [qw(cat_login cat_session )], submit => [ $lh->maketext('logout') ], action => 'cat.cgi', params => undef, debug => 0, sticky => 0, keepextra => 1, table => 0, reset => 0, sticky => 0, stylesheet => $path . '/form.css', template => { type => 'TT2', template => $path . '/logout/logout.html', variable => 'form', } ); $form->field( name => 'cat_login', type => 'hidden', value => 'login', force => 1 ); $form->field( name => 'cat_session', type => 'hidden', value => 'login', force => 1 ); my $r_hr = { cookie_hr => { cat_login => 'login', cat_session => 'login', }, layout => "$path/logout/layout.html", layout_ar => [ { begin_html => 1, }, { formbuilder_hr => { form => $form }, }, { end_html => 1, }, ], }; #return ( SCALAR {$form} HASHREF {$r_hr} ); return $form; } sub footer { my ( $self, $arg_r ) = @_; my $rpc_obj = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $show_index_back = ( exists $arg_r->{show_index_back} and defined $arg_r->{show_index_back} and $arg_r->{show_index_back} > 0 ) ? 1 : 0; my $show_script_back = ( exists $arg_r->{show_script_back} and defined $arg_r->{show_script_back} and $arg_r->{show_script_back} > 0 ) ? 1 : 0; my $script_back = ( exists $arg_r->{script_back} and defined $arg_r->{script_back} and $arg_r->{script_back} ne $EMPTY_STRING ) ? $arg_r->{script_back} : 'cat.cgi'; my $l = get_logger(__PACKAGE__); $l->debug("self [$self]"); my $path = $self->get_path; $l->debug("path [$path]"); return { layout => "$path/footer/layout.html", layout_ar => [ { tt2_hr => { tpl => "$path/footer/index.html", param_hr => { SHOW_DEBUG => 0, SHOW_INDEX_BACK => $show_index_back, SHOW_SCRIPT_BACK => $show_script_back, SCRIPT_BACK => $script_back, DATA => [ 'hallo', 'hello' ], MODULE => 'footer', VERSION => $VERSION, PATH => $path, }, }, }, ], }; } sub status_line { my ( $self, $arg_r ) = @_; my $rpc_obj = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $logger = get_logger(__PACKAGE__); $logger->debug('START'); $logger->debug("self [$self]"); my $path = $self->get_path; return { cookie_hr => { cat_login => $login_of{ ident $self}, cat_session => $session_of{ ident $self}, cat_locale => $locale_of{ ident $self}, cat_theme => $theme_of{ ident $self}, }, layout => "$path/status_line/layout.html", layout_ar => [ { tt2_hr => { tpl => "$path/status_line/index.html", param_hr => { SHOW_DEBUG => 0, DATA => [ 'hallo', 'hello' ], MODULE => 'statusline', SERVER => hostname, ROLE => 'TODOrole', STATUS => 'TODOstatus', INSTITUTION => 'TODOinstitution', CUSTOMER => 'TODOcustom', DATE => $self->get_date, VERSION => $VERSION, PATH => $path, LOGIN => $login_of{ ident $self}, LOCALE => $locale_of{ ident $self}, THEME => $theme_of{ ident $self}, SESSION => $session_of{ ident $self}, }, }, }, ], }; } sub get_path { my ( $self, $arg_r ) = @_; my $path = "tpl/$theme_of{ident $self}"; return $path; } sub get_date { return UnixDate( 'today', '%Y-%m-%dT%H:%M' ); } } 1; __END__ Module000755001750001750 011413636115 20615 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/WebChooser.pm000444001750001750 1636111413636115 22741 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $ID$ # Revision: $Revision$ # Head URL: $Head URL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::Chooser; use warnings; use strict; use Log::Log4perl qw(get_logger :levels); use base qw( CipUX::CAT::Web::Module CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Array my @MODULE => qw(language.cgi theme.cgi); # OBJECT # used in BUILD/new to pass entity from Comtroller.pm my %name_of : ATTR( init_arg => 'name' :default('theme') ); # METHOD sub register { my $self = shift; my $c = __PACKAGE__; # module class name foreach my $m (@MODULE) { $self->set_module_name_register( { class => $c, name => $m } ); my $c_ar = $self->module_cfg( $self, $m ); $self->set_module_cfg_register( { cfg_ar => $c_ar, name => $m } ); } return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $module = shift; my $name = $self; if ( defined $module ) { $name = $module; } $name =~ s{\.cgi}{}smx; #my $name = $module; #$name =~ s{\.cgi}{}smx; my %desc = ( 'theme' => 'Choose a theme', 'language' => 'Choose a language', ); my %ldesc = ( 'theme' => 'This module let you chosse your theme.', 'language' => 'This module let you chosse your language.', ); my $module_hr = {}; $module_hr->{cipuxName} = $name; $module_hr->{cipuxTemplateDir} = 'chooser'; $module_hr->{cipuxIcon} = 'chooser.png'; $module_hr->{cipuxDescription} = $ldesc{$name}; $module_hr->{cipuxShortDescription} = $desc{$name}; $module_hr->{cipuxTask} = 'NULL'; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; my $cgi = $arg_r->{cgi}; my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $cfg_hr = ( exists $arg_r->{cfg_hr} ) ? $self->h( $arg_r->{cfg_hr} ) : $self->perr('cfg_hr'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $self->h( $arg_r->{c_hr} ) : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); my $name = $name_of{ ident $self}; $l->debug("name [$name]"); # chooser_hr could have for example this keys and values: # $chooser_hr->{field_ar} | ['cat_theme'], # $chooser_hr->{submit_ar} | ['change'], # $chooser_hr->{name} | 'cat_theme' # $chooser_hr->{value} | 'theme' | 'Berlin' # $chooser_hr->{options_hr}| {default=>'default', Berlin=>'Berlin'} # $chooser_hr->{CHOOSER_TITLE} | "Chooser" # $chooser_hr->{CHOOSER_LABEL} | "Please choose a value" my $chooser_hr = {}; if ( $name eq 'theme' ) { # its a theme chooser my $theme_hr = $self->i18n_theme( { lh_obj => $lh, cfg_hr => $cfg_hr } ); $chooser_hr = { field_ar => ['cat_theme'], submit_ar => [ $lh->maketext('change') ], name => 'cat_theme', value => $cfg_hr->{base}->{catweb_login_theme}, options_hr => $theme_hr, CHOOSER_TITLE => $lh->maketext('theme'), CHOOSER_LABEL => $lh->maketext('Please choose a theme'), }; } if ( $name eq 'language' ) { # is a language chooser my $locale_hr = $self->i18n_locale( { lh_obj => $lh, cfg_hr => $cfg_hr } ); $chooser_hr = { field_ar => ['cat_locale'], submit_ar => [ $lh->maketext('change') ], name => 'cat_locale', value => $cfg_hr->{base}->{catweb_login_language}, options_hr => $locale_hr, CHOOSER_TITLE => $lh->maketext('Language'), CHOOSER_LABEL => $lh->maketext('Please choose a language'), }; } my $path = "tpl/$c_hr->{cat_theme}"; my $style = $path . '/form.css'; my $template = $path . '/chooser/index.html'; my $form = CGI::FormBuilder->new( method => 'post', fields => $chooser_hr->{field_ar}, submit => $chooser_hr->{submit_ar}, keepextra => 1, debug => 0, reset => 0, sticky => 0, stylesheet => $style, template => { type => 'TT2', template => $template, variable => 'form', data => { MODULE => $name .'.cgi', NAME => $name, CHOOSER_NAME => $chooser_hr->{name}, CHOOSER_TITLE => $chooser_hr->{CHOOSER_TITLE}, CHOOSER_LABEL => $chooser_hr->{CHOOSER_LABEL}, lh => $lh, }, } ); # use this if, you want that it jumps not to index.cgi # (however this could completely deleted and has the same effect: # it jumps to index.cgi - where else should it jump?) $form->field( name => 'module', type => 'hidden', value => "index.cgi" ); $form->field( name => $chooser_hr->{name}, type => 'select', selectname => 0, size => 1, value => $chooser_hr->{value}, options => $chooser_hr->{options_hr}, ); return { # cookie_hr => { # cat_login => $self->$login_of{ ident $self}, # cat_session => $session_of{ ident $self}, # cat_locale => $locale_of{ ident $self}, # cat_theme => $theme_of{ ident $self}, # }, layout => "$path/chooser/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext( $chooser_hr->{CHOOSER_TITLE} ) ] }, { formbuilder_hr => { form => $form }, }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } } 1; __END__ ModuleBrowser.pm000444001750001750 1127411413636115 24126 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2009 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $ID$ # Revision: $Revision$ # Head URL: $Head URL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::ModuleBrowser; use warnings; use strict; use CipUX::CAT::Web::Plugin; use base qw(CipUX::CAT::Web::Module); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Hash my %MODULE => ( 'module_browser.cgi' => { name => 'module browser', }, ); # OBJECT my %name_of : ATTR( init_arg => 'name' :default('noname') ); # METHOD sub register { my $self = shift; my $c = __PACKAGE__; # module class name foreach my $m ( sort keys %MODULE ) { my $n = $MODULE{$m}->{name}; $self->set_module_name_register( { class => $c, name => $m } ); my $c_ar = $self->module_cfg( $self, $m, $n ); $self->set_module_cfg_register( { cfg_ar => $c_ar, name => $m } ); } return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; # TODO: sometimes not blessed, why? my $module = shift; my $name = shift; my $desc = "Browse CAT module data"; my $ldesc = "This module can be use to see technical data concerning modules."; my $module_hr = {}; $module_hr->{cipuxName} = $name; $module_hr->{cipuxTemplateDir} = 'module_browser'; $module_hr->{cipuxIcon} = 'module.png'; $module_hr->{cipuxDescription} = $ldesc; $module_hr->{cipuxShortDescription} = $desc; $module_hr->{cipuxTask} = 'NULL'; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; # will be used to differentiate output/usage my $module = exists $arg_r->{module} ? $self->l( $arg_r->{module} ) : 'module_browser.cgi'; my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $plugin = CipUX::CAT::Web::Module->new(); $plugin->init(); # module =module_browser.cgi my @tpl_data = (); my $p_hr = $plugin->get_module_name_register(); my $o_hr = $plugin->get_module_cfg_register(); foreach my $o ( sort keys %{$p_hr} ) { # to provide all data: #$o_hr->{$o}->{name} = $o; #$o_hr->{$o}->{provided_by} = $p_hr->{$o}; #push @tpl_data, $o_hr->{$o}; # but we do only provide some my $data_hr = { # MODULE $o povided by $p_hr->{$o} name => $o, provided_by => $p_hr->{$o}, task => $o_hr->{$o}->{cipuxTask}, }; push @tpl_data, $data_hr; } my $path = "tpl/$c_hr->{cat_theme}"; my $style = $path . '/form.css'; my $template = $path . '/module_browser/index.html'; my $layout = $path . '/module_browser/layout.html'; return { cookie_hr => {}, layout => $layout, layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Module Browser')] }, { tt2_hr => { tpl => $template, param_hr => { SHOW_DEBUG => 0, DATA => \@tpl_data, MODULE => $name_of{ ident $self}, PATH => $path, lh => $lh, }, } }, #{ formbuilder_hr => { form => $form }, }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } } 1; __END__ ExternalLink.pm000444001750001750 1346311413636115 23737 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Modulepackage CipUX::CAT::Web::Module::ExternalLink; use warnings; use strict; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parentheses tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer Readonly::Scalar my $NAME => 'externallink'; Readonly::Scalar my $MODULE => 'externallink.cgi'; sub register { my $self = shift; $self->set_module_name_register( { class => __PACKAGE__, name => $MODULE } ); # Merge and set the configuration my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $MODULE } ); return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $sdesc = 'External link list'; my $ldesc = 'List external links for convenience. '; my $module_hr = {}; $module_hr->{cipuxName} = $NAME; $module_hr->{cipuxTemplateDir} = $NAME; $module_hr->{cipuxIcon} = $NAME . '.png'; $module_hr->{cipuxShortDescription} = $sdesc; $module_hr->{cipuxDescription} = $ldesc; $module_hr->{cipuxTask} = ['NULL']; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); $l->debug("module [$MODULE]"); my $path = "tpl/$c_hr->{cat_theme}/$NAME"; $l->debug("template path [$path]"); my $data_ar = [ { url => 'http://www.cipux.org', text => 'CipUX Main Website' }, { url => 'http://wiki.debian.org/CipUX', text => 'English CipUX Wiki' }, { url => 'http://wiki.skolelinux.de/CipUX', text => 'German CipUX Wiki' }, { url => 'http://release.cipux.org', text => 'CipUX Release Repository' }, ]; return { layout => "$path/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('External link list') ] }, { tt2_hr => { tpl => "$path/index.html", param_hr => { DATA => $data_ar, MODULE => $MODULE, PATH => $path, lh => $lh, }, } }, { footer_hr => { show_index_back => 1, }, }, { end_html => 1, }, ], }; } } 1; __END__ =pod =head1 NAME CipUX::CAT::Web::Module::ExternalLink - Lists all perl versions of CipUX =head1 VERSION This document describes CipUX::CAT::Web::Module::ExternalLink version 3.4.0.3 =head1 SYNOPSIS This CAT Web module can be used to see installed CipUX Perl module versions. =head1 DESCRIPTION This CAT Web module can be used to see installed CipUX Perl module versions. =head1 INTERFACE =head2 module Use this method to start the list. =head1 DIAGNOSTICS Throws the error To use this module, please install Module::List::Pluggable! if Module::List::Pluggable is not installed. =head1 CONFIGURATION AND ENVIRONMENT CipUX::CAT::Web::Module::ExternalLink requires no configuration files or environment variables. However it merges its configuration from CipUX::CAT::Web::Module and itself. =head1 DEPENDENCIES Log::Log4perl CipUX::CAT::Web::Module Module::List::Pluggable =head1 INCOMPATIBILITIES None reported. =head1 BUGS AND LIMITATIONS No bugs have been reported. =head1 AUTHOR Christian Kuelker C<< >> =head1 LICENCE AND COPYRIGHT Copyright (C) 2010, Christian Kuelker C<< >>. All rights reserved. This module is free software; you can redistribute it and/or modify it under the GNU GPL licence version 2 or any later version. =head1 DISCLAIMER OF WARRANTY BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. =cut ServerInfo.pm000444001750001750 2126511413636115 23420 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Modulepackage CipUX::CAT::Web::Module::ServerInfo; use warnings; use strict; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use Scalar::Util::Numeric qw(:all); use base qw(CipUX::CAT::Web::Module CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parentheses tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer Readonly::Scalar my $NAME => 'serverinfo'; Readonly::Scalar my $MODULE => 'serverinfo.cgi'; sub register { my $self = shift; $self->set_module_name_register( { class => __PACKAGE__, name => $MODULE } ); # Merge and set the configuration my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $MODULE } ); return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $sdesc = 'Server information'; my $ldesc = 'Lists information about '; $ldesc .= 'the local operating system.'; my $module_hr = {}; $module_hr->{cipuxName} = $NAME; $module_hr->{cipuxTemplateDir} = $NAME; $module_hr->{cipuxIcon} = $NAME . '.png'; $module_hr->{cipuxShortDescription} = $sdesc; $module_hr->{cipuxDescription} = $ldesc; $module_hr->{cipuxTask} = ['NULL']; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); $l->debug("module [$MODULE]"); my $path = "tpl/$c_hr->{cat_theme}/$NAME"; $l->debug("template path [$path]"); eval { require Sys::Info::OS; }; if ($EVAL_ERROR) { my $m = not_installed_msg( $lh, 'Sys::Info::OS' ); return $self->error( { module => $MODULE, msg => $m } ); } eval { require Sys::Info; }; if ($EVAL_ERROR) { my $m = not_installed_msg( $lh, 'Sys::Info' ); return $self->error( { module => $MODULE, msg => $m } ); } eval { require Sys::MemInfo; }; if ($EVAL_ERROR) { my $m = not_installed_msg( $lh, 'Sys::MemInfo' ); return $self->error( { module => $MODULE, msg => $m } ); } eval { require Filesys::DiskFree; }; if ($EVAL_ERROR) { my $m = not_installed_msg( $lh, 'Filesys::DiskFree' ); return $self->error( { module => $MODULE, msg => $m } ); } my %options = (); my $os = Sys::Info::OS->new(%options); my $si = Sys::Info->new(%options); my $cpu = $si->device('CPU'); my $data_hr = { os_name => $os->name( long => 1, edition => 1 ), node_name => $os->node_name, domain_name => $os->domain_name, ip => $os->ip, is_linux => $os->is_linux, is_bsd => $os->is_bsd, httpd => $si->httpd || $lh->maketext('unknown'), cpu => scalar $cpu->identify, mem_main_total => Sys::MemInfo::totalmem(), mem_main_free => Sys::MemInfo::freemem(), mem_swap_total => Sys::MemInfo::totalswap(), mem_swap_free => Sys::MemInfo::freeswap(), }; if ( my $up = $os->uptime ) { my $t = $os->tick_count; my $up_hr = { up_since => scalar localtime $up, up_hours => sprintf( "%.2f", $t / 3600 ), up_days => sprintf( "%.2f", $t / 86400 ), up_months => sprintf( "%.2f", $t / 2592000 ), }; $data_hr->{up} = $up_hr; } my $handle = new Filesys::DiskFree; $handle->df(); my @mnt = $handle->disks(); $data_hr->{disks_ar} = \@mnt; foreach my $id (@mnt) { push @{ $data_hr->{diskfree} }, { id => $id, device_id => $handle->device($id), device_avail => $handle->avail($id), device_total => $handle->total($id), device_used => $handle->used($id), device_mount => $handle->mount($id), }; } return { layout => "$path/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Server information') ] }, { tt2_hr => { tpl => "$path/index.html", param_hr => { DATA => $data_hr, MODULE => $MODULE, PATH => $path, lh => $lh, sizefmt => \&sizefmt, }, } }, { footer_hr => { show_index_back => 1, }, }, { end_html => 1, }, ], }; } sub not_installed_msg { my $lh = shift; my $m = shift; return $lh->maketext( 'To use this module, please install [_1]!', $m ); } sub sizefmt { my @sizefmt = qw/bytes Kb Mb Gb Tb Eb Pb/; my $v = shift; return $v if not isint($v); $v =~ s{/d+}{}gmx; my $c = 0; while ( $v >= 1024.0 ) { $v = $v / 1024.0; $c++; last if not defined $sizefmt[$c]; } if ( $v < 10 ) { $v = sprintf( "%1.2f", $v ); } else { $v = sprintf( "%.1f", $v ); } $v =~ s/0+$//g; $v =~ s/\.$//g; my $e = ( defined $sizefmt[$c] ) ? $sizefmt[$c] : 'very large'; return "$v $e"; } } 1; __END__ =pod =head1 NAME CipUX::CAT::Web::Module::ServerInfo - Lists all perl versions of CipUX =head1 VERSION This document describes CipUX::CAT::Web::Module::ServerInfo version 3.4.0.3 =head1 SYNOPSIS This CAT Web module can be used to see installed CipUX Perl module versions. =head1 DESCRIPTION This CAT Web module can be used to see installed CipUX Perl module versions. =head1 INTERFACE =head2 module Use this method to start the list. =head1 DIAGNOSTICS Throws the error To use this module, please install Module::List::Pluggable! if Module::List::Pluggable is not installed. =head1 CONFIGURATION AND ENVIRONMENT CipUX::CAT::Web::Module::ServerInfo requires no configuration files or environment variables. However it merges its configuration from CipUX::CAT::Web::Module and itself. =head1 DEPENDENCIES Log::Log4perl CipUX::CAT::Web::Module Module::List::Pluggable =head1 INCOMPATIBILITIES None reported. =head1 BUGS AND LIMITATIONS No bugs have been reported. =head1 AUTHOR Christian Kuelker C<< >> =head1 LICENCE AND COPYRIGHT Copyright (C) 2010, Christian Kuelker C<< >>. All rights reserved. This module is free software; you can redistribute it and/or modify it under the GNU GPL licence version 2 or any later version. =head1 DISCLAIMER OF WARRANTY BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. =cut BasicObject.pm000444001750001750 5106111413636115 23503 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $ID$ # Revision: $Revision$ # Head URL: $Head URL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::BasicObject; use warnings; use strict; use Data::Dumper; use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module); #use Template; { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $TEMPLATE => q{basic_object}; Readonly::Scalar my $LETTER_START => 'A'; Readonly::Scalar my $SMALL_LIST => 15; Readonly::Array my @ABC => ( $LETTER_START .. 'Z' ); Readonly::Array my @MODULE => qw(admin.cgi class.cgi student.cgi teacher.cgi); Readonly::Hash my %ENTITY => ( 'admin' => 'admin_account', 'class' => 'class_share', 'student' => 'student_account', 'teacher' => 'teacher_account', ); Readonly::Hash my %MODALITY => ( 'admin' => 'admin', 'class' => 'class', 'student' => 'student', 'teacher' => 'teacher', ); Readonly::Hash my %ENTITY_TYPE => ( 'admin' => 'account', 'class' => 'share', 'student' => 'account', 'teacher' => 'account', ); # cipux_task_retrieve_all_$cipux_entity_lastname_firstname'; # firstname and lastname only important for accounts # cipux_task_list_' . $cipux_entity . 's'; Readonly::Hash my %LIST_ALL_TASK => ( 'admin' => 'cipux_task_retrieve_all_admin_account_lastname_firstname', 'class' => 'cipux_task_list_class_shares', 'student' => 'cipux_task_retrieve_all_student_account_lastname_firstname', 'teacher' => 'cipux_task_retrieve_all_teacher_account_lastname_firstname', ); Readonly::Hash my %ICON => ( 'admin' => 'admin.png', 'class' => 'group.png', 'student' => 'user.png', 'teacher' => 'senior.png', ); # OBJECT # used in BUILD/new to pass entity from Comtroller.pm my %name_of : ATTR( init_arg => 'name' :default('student') ); # GLOBAL my $task_hr = {}; my $cipux_entity = $EMPTY_STRING; my $cipux_entity_type = $EMPTY_STRING; # letter of the shown object my $letter_shown = $LETTER_START; # letter of the first found object my $letter_first = $LETTER_START; # METHOD sub register { my $self = shift; my $c = __PACKAGE__; # module class name foreach my $m (@MODULE) { $self->set_module_name_register( { class => $c, name => $m } ); $self->task_cfg($m); my $c_ar = $self->module_cfg($m); # ( $self, $m ); $self->set_module_cfg_register( { cfg_ar => $c_ar, name => $m } ); } return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $module = shift; # somtimes there is no object in self. Probably wrong usage # by cipux_cat_web_module client? my $name = $self; if ( defined $module ) { $name = $module; } $name =~ s{\.cgi}{}smx; my %desc = ( $name => 'Basic ' . lcfirst $name . ' management' ); my $d = "This module let you create, destroy, list $name"; $d .= ' accounts or shares and set passwords.'; my %ldesc = ( $name => $d ); my $module_hr = {}; $module_hr->{cipuxName} = $name; $module_hr->{cipuxTemplateDir} = 'basic_object'; $module_hr->{cipuxIcon} = 'basicobject.png'; if ( $name eq 'teacher' ) { $module_hr->{cipuxIcon} = 'senior.png'; } elsif ( $name eq 'admin' ) { $module_hr->{cipuxIcon} = 'admin.png'; } elsif ( $name eq 'class' ) { $module_hr->{cipuxIcon} = 'group.png'; } $module_hr->{cipuxDescription} = $ldesc{$name}; $module_hr->{cipuxShortDescription} = $desc{$name}; # save all tasks for ACL foreach my $t (qw(list create destroy change_password)) { if ( defined $name and exists $task_hr->{$name} and defined $t and exists $task_hr->{$name}->{$t} ) { push @{ $module_hr->{cipuxTask} }, $task_hr->{$name}->{$t}; } else { push @{ $module_hr->{cipuxTask} }, 'NULL'; } } return [$module_hr]; } sub task_cfg { my $self = shift; my $module = shift; # module_access.cgi => module_access $module =~ s{\.cgi}{}smx; my $prefix = 'cipux_task_'; # = cat_module # = class_share $cipux_entity = $ENTITY{$module}; # = module # = share $cipux_entity_type = $ENTITY_TYPE{$module}; # = _class_share my $e = '_' . $ENTITY{$module}; # cipux_task_retrieve_all_student_account_lastname_firstname # cipux_task_list_class_shares $task_hr->{$module}->{list} = $LIST_ALL_TASK{$module}; $task_hr->{$module}->{create} = $prefix . 'create' . $e; $task_hr->{$module}->{destroy} = $prefix . 'destroy' . $e; $task_hr->{$module}->{change_password} = $prefix . 'change' . $e . '_password'; return; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cgi = ( exists $arg_r->{cgi_obj} ) ? $arg_r->{cgi_obj} : $self->perr('cgi_obj'); my $view = ( exists $arg_r->{view_obj} ) ? $arg_r->{view_obj} : $self->perr('view_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); my $module = $name_of{ ident $self}; $module =~ s{\.cgi}{}smx; $l->debug("module [$module]"); my $message = $EMPTY_STRING; $l->debug('set message to empty'); # form have to be defined first my $form = $self->_form( { cipux_entity_type => $ENTITY_TYPE{$module}, page => 'list', mode => 'list', rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); # | submitted # submitted falues have to be checked second $l->debug('evaluate submitted fields ...'); my $mode = ( defined $form->field('mode') and scalar $form->field('mode') ne $EMPTY_STRING ) ? $form->field('mode') : 'list'; $l->debug( 'got mode: ', $mode ); my $letter = $self->l( $form->field('letter') ); $l->debug( 'got (shown) letter: ', $letter ); $letter_shown = ( defined $letter and $letter ) ? $letter : $letter_first; $l->debug( 'got letter shown: ', $letter_shown ); $form->field( name => 'letter', type => 'hidden', value => "$letter_shown", force => 1 ); $l->debug('... evaluated submitted fields'); if ( $form->submitted ) { $l->debug('we got something submitted'); # SET if ( $form->submitted eq $lh->maketext('set') ) { $l->debug('submitteed value was "set"'); $l->debug("cipux_entity [$ENTITY{$module}]"); my $cmd = $task_hr->{$module}->{change_password}; $l->debug("cmd [$cmd]"); my $result_hr = $self->set_object_password( { rpc_obj => $rpc, cgi_obj => $cgi, form => $form, cipux_entity => $ENTITY{$module}, task => $cmd, } ); } elsif ( $form->submitted eq $lh->maketext('delete') ) { $l->debug('submitteed value was "delete"'); # DESTROY my $cmd = $task_hr->{$module}->{destroy}; my $result_hr = $self->destroy_object( { rpc_obj => $rpc, cgi_obj => $cgi, form => $form, cipux_entity => $ENTITY{$module}, task => $cmd, } ); } } if ( $form->submitted && $form->validate ) { $l->debug('got something submitted and validated'); # CREATE if ( $form->submitted eq $lh->maketext('create') ) { $l->debug('submitteed value was "create"'); $l->debug('create object'); my $cmd = $task_hr->{$module}->{create}; my $result_hr = $self->create_object( { rpc_obj => $rpc, cgi_obj => $cgi, form => $form, cipux_entity => $ENTITY{$module}, task => $cmd, } ); $letter_shown = ( exists $result_hr->{letter} and defined $result_hr->{letter} ) ? $result_hr->{letter} : $letter_first; $l->debug("letter shown [$letter_shown] create call"); } } my $task = $LIST_ALL_TASK{$module}; $l->debug( 'use task: ', $task ); my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{list}, param_hr => {} } ); $l->debug( 'rpc answer_hr ', { filter => \&Dumper, value => $a_hr } ); # extract data and letters my $return_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr, letter => 1 } ); my $data_ar = $return_hr->{tpl_data_ar}; my $lettercount_hr = $return_hr->{firstletter_hr}; my $letter_first = $return_hr->{firstletter}; $l->debug( 'letter first: ', $letter_first ); # determine letter to use $l->debug( 'old letter shown: ', $letter_shown ); $letter_shown = ( ord $letter_shown < ord $letter_first ) ? $letter_first : $letter_shown; $l->debug( 'new letter shown: ', $letter_shown ); my $use_letter_first = ( ord $letter_shown < ord $letter_first ) ? 'TRUE' : 'FALSE'; # path needed for form and abcnav my $path = "tpl/$c_hr->{cat_theme}"; $l->debug("path [$path]"); my $object_count = scalar @{$data_ar}; if ( $object_count > $SMALL_LIST ) { # aggregate the link battery my @link = (); foreach my $l ( sort keys %{$lettercount_hr} ) { push @link, "$l"; } # ABC nav my $tpl = Template->new(); my $output = q{}; my $t = $path . '/nav/abcnav.html'; $l->debug("sub template: [$t]"); my $out = $tpl->process( $t, { abc => \@link }, \$output ) || die "Can not process template [$t]!"; $form->field( name => 'abcnav', type => 'static', force => 1, value => "$output" ); } my @data = (); foreach my $d_hr ( @{$data_ar} ) { #$l->debug( 'show object: ', $object ); #next if not $show_object_hr->{$object}; $d_hr->{'letter'} = $letter_shown; $d_hr->{'LETTER_COUNT'} = $lettercount_hr; $d_hr->{'LETTER_FIRST'} = $letter_first; $d_hr->{'LETTER_SHOWN'} = $letter_shown; $d_hr->{'USE_LETTER_FIRST'} = $use_letter_first; $d_hr->{'CIPUX_ENTITY_TYPE'} = $ENTITY_TYPE{$module}; $d_hr->{'CIPUX_ENTITY'} = $ENTITY{$module}; #_account if ( $object_count > $SMALL_LIST ) { $d_hr->{'SHOW_OBJECT'} = 'FALSE'; } else { $d_hr->{'SHOW_OBJECT'} = 'TRUE'; } foreach my $attr (qw(uid cn ou)) { # calc first letter of object my $fl = $LETTER_START; if ( exists $d_hr->{$attr} ) { $fl = uc( substr( $d_hr->{$attr}, 0, 1 ) ); $d_hr->{'OBJECT_LETTER_FIRST'} = $fl; } # if this first letter has to be shown, mark it as such if ( exists $d_hr->{$attr} and $fl eq $letter_shown ) { $d_hr->{'SHOW_OBJECT'} = 'TRUE'; } } push @data, $d_hr; } $form->field( name => 'data', type => 'text', value => \@data ); $form->field( name => 'name', type => 'static', value => $lh->maketext( $ENTITY{$module} ), force => 1 ); $form->field( name => 'letter', type => 'hidden', value => "$letter_shown", force => 1 ); my $list_body = $form->render(); # create form $l->debug('print object create'); $form = $self->_form( { cipux_entity_type => $ENTITY_TYPE{$module}, page => 'create', mode => 'create', rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); $form->field( name => 'id', type => 'text', value => $EMPTY_STRING ); $form->field( name => 'letter', type => 'hidden', value => "$letter_shown", force => 1 ); $form->submit( [ $lh->maketext('create') ] ); $l->debug('print create table'); #push @page, $form->render(); my $create_body = $form->render(); return { cookie_hr => {}, layout => "$path/basic_object/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Basic Object Administration') ] }, { body_ar => [$list_body] }, { body_ar => [$create_body] }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } sub _form { my ( $self, $arg_r ) = @_; my $page = ( exists $arg_r->{page} and defined $arg_r->{page} and $arg_r->{page} ) ? $self->l( $arg_r->{page} ) : $self->perr('page'); # curr mode: list, create my $mode = ( exists $arg_r->{mode} and defined $arg_r->{mode} ) ? $self->l( $arg_r->{mode} ) : $self->perr('mode'); # next mode: list, create my $module = ( exists $arg_r->{module} and defined $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); $l->debug( '-> page: ', $page ); $l->debug( '-> mode: ', $mode ); $l->debug( '-> module: ', $module ); if ( $mode eq $EMPTY_STRING ) { $mode = 'list'; } my $path = "tpl/$c_hr->{cat_theme}"; my $style = "$path/form.css"; my $tpl = "$path/basic_object/" . $page . '.html'; my $module_tr = $module; $module_tr =~ s{_}{ }gmx; my $form = CGI::FormBuilder->new( method => 'post', fields => [qw/id password password_repeat mode letter/], # validate => {oid => '^[a-z0-9]+$'}, # required => 'oid', submit => [ $lh->maketext('set'), $lh->maketext('delete') ], #params => $cgi, debug => 0, keepextra => 1, table => 0, reset => 0, sticky => 0, stylesheet => $style, template => { type => 'TT2', template => $tpl, variable => 'form', data => { MODULE => $module, MODALITY => $MODALITY{$module}, CIPUX_MODALITY => $module, CIPUX_MODALITY_TR => $module_tr, SHOW_DEBUG => 0, TEMPLATE => $TEMPLATE, ICON => $ICON{$module}, CIPUX_ENTITY_TYPE => $ENTITY_TYPE{$module}, CIPUX_ENTITY => $ENTITY{$module}, lh => $lh, }, }, ); $form->field( name => 'mode', type => 'hidden', value => "$mode" ); $form->field( name => 'module', type => 'hidden', value => "$module" ); $form->field( name => 'id', type => 'hidden' ); $form->field( name => 'password', type => 'password', value => $EMPTY_STRING ); $form->field( name => 'password_repeat', type => 'password', value => $EMPTY_STRING ); $form->field( name => 'cipuxFirstname', type => 'text', value => $EMPTY_STRING ); $form->field( name => 'cipuxLastname', type => 'text', value => $EMPTY_STRING ); return $form; } # TODO: obsolete? sub get_entity { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cmd = exists $arg_r->{cmd} ? $self->l( $arg_r->{cmd} ) : $self->perr('cmd'); my $view = exists $arg_r->{view} ? $self->l( $arg_r->{view} ) : $self->perr('view'); my $l = get_logger(__PACKAGE__); my $a_hr = $rpc->xmlrpc( { cmd => $cmd } ); if ( $a_hr->{status} eq 'FALSE' ) { $l->debug('answer is FALSE'); $l->debug('build exception object'); $l->debug('return this object'); return $view->exception( { module => 'BasicObject', msg => $a_hr->{msg} } ); } $l->debug('answer is TRUE'); # Filter all CAT, and use only CAT-Web ( m{\.cgi$}smx my @tpl_data = (); my $d_ar = $rpc->extract_data_for_tpl( { answer_hr => $a_hr } ); foreach my $hr ( @{$d_ar} ) { $l->debug("CN [$hr->{cn}]"); #if ( $hr->{cn} =~ m{\.cgi$}smx ) { push @tpl_data, $hr; #} } if ( scalar @tpl_data ) { return { success => 1, data_ar => \@tpl_data, }; } else { return { success => 0, data_ar => undef, }; } } } 1; __END__ PerlVersion.pm000444001750001750 1502211413636115 23600 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Modulepackage CipUX::CAT::Web::Module::PerlVersion; use warnings; use strict; use English qw( -no_match_vars); use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module CipUX::CAT::Web::L10N); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parentheses tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer Readonly::Scalar my $NAME => 'perlversion'; Readonly::Scalar my $MODULE => 'perlversion.cgi'; sub register { my $self = shift; $self->set_module_name_register( { class => __PACKAGE__, name => $MODULE } ); # Merge and set the configuration my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $MODULE } ); return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $sdesc = 'Versions of CipUX Perl modules'; my $ldesc = 'List all versions of CipUX Perl '; $ldesc .= 'modules installed on this server.'; my $module_hr = {}; $module_hr->{cipuxName} = $NAME; $module_hr->{cipuxTemplateDir} = $NAME; $module_hr->{cipuxIcon} = $NAME . '.png'; $module_hr->{cipuxShortDescription} = $sdesc; $module_hr->{cipuxDescription} = $ldesc; $module_hr->{cipuxTask} = ['NULL']; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); $l->debug("module [$MODULE]"); my $path = "tpl/$c_hr->{cat_theme}/$NAME"; $l->debug("template path [$path]"); eval { require Module::List::Pluggable; }; if ($EVAL_ERROR) { my $m = not_installed_msg($lh); return $self->error( { module => $MODULE, msg => $m } ); } my $data_ar = [ { name => 'CipUX', version => $CipUX::VERSION, }, ]; # get a list of all modules installed under a given point # in perl's module namespace my $plugins = Module::List::Pluggable::list_modules_under("CipUX"); Module::List::Pluggable::import_modules( "CipUX", { import => 0 } ); foreach my $p ( sort @{$plugins} ) { # excl direct base classes next if $p eq 'CipUX'; # gernally I would like to use Module::Info or # Module::InstalledVersion but the have to much # problems with -T my $v = $lh->maketext('n.a.'); $v = $p->VERSION; if ( not defined $v ) { $v = $lh->maketext('unknown'); } push @{$data_ar}, { name => $p, version => $v, }; } return { layout => "$path/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Perl module versions') ] }, { tt2_hr => { tpl => "$path/index.html", param_hr => { DATA => $data_ar, MODULE => $MODULE, PATH => $path, lh => $lh, }, } }, { footer_hr => { show_index_back => 1, }, }, { end_html => 1, }, ], }; } sub not_installed_msg { my $lh = shift; return $lh->maketext( 'To use this module, please install [_1]!', 'Module::List::Pluggable' ); } } 1; __END__ =pod =head1 NAME CipUX::CAT::Web::Module::PerlVersion - Lists all perl versions of CipUX =head1 VERSION This document describes CipUX::CAT::Web::Module::PerlVersion version 3.4.0.3 =head1 SYNOPSIS This CAT Web module can be used to see installed CipUX Perl module versions. =head1 DESCRIPTION This CAT Web module can be used to see installed CipUX Perl module versions. =head1 INTERFACE =head2 module Use this method to start the list. =head1 DIAGNOSTICS Throws the error To use this module, please install Module::List::Pluggable! if Module::List::Pluggable is not installed. =head1 CONFIGURATION AND ENVIRONMENT CipUX::CAT::Web::Module::PerlVersion requires no configuration files or environment variables. However it merges its configuration from CipUX::CAT::Web::Module and itself. =head1 DEPENDENCIES Log::Log4perl CipUX::CAT::Web::Module Module::List::Pluggable =head1 INCOMPATIBILITIES None reported. =head1 BUGS AND LIMITATIONS No bugs have been reported. =head1 AUTHOR Christian Kuelker C<< >> =head1 LICENCE AND COPYRIGHT Copyright (C) 2010, Christian Kuelker C<< >>. All rights reserved. This module is free software; you can redistribute it and/or modify it under the GNU GPL licence version 2 or any later version. =head1 DISCLAIMER OF WARRANTY BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. =cut ModuleCustody.pm000444001750001750 2072111413636115 24132 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2010 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $ID$ # Revision: $Revision$ # Head URL: $Head URL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::ModuleCustody; use warnings; use strict; use CipUX::CAT::Web::Plugin; use Data::Dumper; use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $N => 'module custody'; Readonly::Scalar my $M => 'module_custody.cgi'; Readonly::Scalar my $I => 'module.png'; Readonly::Scalar my $T => 'cipux_task' . '_retrieve_all_cat_module' . '_name_shortdescription_templatedir' . '_author_version_license_isenabled_icon'; # OBJECT my %name_of : ATTR( init_arg => 'name' :default('noname') ); # METHOD sub register { my $self = shift; my $c = __PACKAGE__; $self->set_module_name_register( { class => $c, name => $M } ); my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $M } ); return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; # TODO: sometimes not blessed, why? my $module = shift; my $name = shift; my $desc = "Manage CAT modules"; my $ldesc = "This module can be use to manage CAT modules."; my $module_hr = {}; my @TASK = ($T); $module_hr->{cipuxName} = $N; $module_hr->{cipuxTemplateDir} = $N; $module_hr->{cipuxIcon} = $I; $module_hr->{cipuxDescription} = $ldesc; $module_hr->{cipuxShortDescription} = $desc; $module_hr->{cipuxTask} = \@TASK; return [$module_hr]; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cgi = ( exists $arg_r->{cgi_obj} ) ? $arg_r->{cgi_obj} : $self->perr('cgi_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); my $c_access = ( defined $cgi->param('access') ) ? $cgi->param('access') : undef; my $c_module = ( defined $cgi->param('change') ) ? $cgi->param('change') : undef; if ( defined $c_access and defined $c_module ) { $l->debug("c_access [$c_access]"); $l->debug("c_module [$c_module]"); $self->do_change_access( { access => $c_access, module => $c_module, rpc_obj => $rpc } ); } # installed stuff my $plugin = CipUX::CAT::Web::Module->new(); $plugin->init(); my $p_hr = $plugin->get_module_name_register(); my $o_hr = $plugin->get_module_cfg_register(); # database stuff my $a_hr = $rpc->xmlrpc( { cmd => $T } ); my $m = 'Can not retrieve module list! ' . $a_hr->{msg}; return $self->exception( { msg => $m } ) if $a_hr->{status} ne 'TRUE'; my $r_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr } ); my $d_ar = $r_hr->{tpl_data_ar}; my @tpl_data = (); foreach my $hr ( @{$d_ar} ) { # every reegisterd module $l->debug("CN [$hr->{cn}]"); #$l->debug( 'a_hr: ', { filter => \&Dumper, value => $a_hr } ); my $o = $hr->{cn}; my $data_hr = { # MODULE $o povided by $p_hr->{$o} # task => $o_hr->{$o}->{cipuxTask}, name => $o, real_name => $hr->{cipuxName}, # reg name icon => $hr->{cipuxIcon}, # reg icon provided_by => ( exists $p_hr->{$o} ) ? $p_hr->{$o} : 'none', registered => ( exists $hr->{cn} ) ? 1 : 0, catweb => ( ( exists $hr->{cn} or exists $p_hr->{$o} ) and $hr->{cn} =~ m{\.cgi$}smx ) ? 1 : 0, installed => ( exists $p_hr->{$o} ) ? 1 : 0, enabled => ( exists $hr->{cipuxIsEnabled} and $hr->{cipuxIsEnabled} eq 'TRUE' ) ? 1 : 0, }; $p_hr->{$o} = undef; push @tpl_data, $data_hr; } # add non registered stuff $l->debug( 'p_hr: ', { filter => \&Dumper, value => $p_hr } ); $l->debug( 'o_hr: ', { filter => \&Dumper, value => $o_hr } ); foreach my $o ( %{$p_hr} ) { next; # TODO, remove this an debugging please next if not defined $o; next if not $o =~ m{\.cgi$}mx; my $data_hr = { name => $o, real_name => $o_hr->{$o}->{cipuxName}, # fs name icon => $o_hr->{$o}->{cipuxIcon}, # fs icon provided_by => ( exists $p_hr->{$o} ) ? $p_hr->{$o} : 'none', registered => 0, catweb => ( $o =~ m{\.cgi$}smx ) ? 1 : 0, installed => 1, enabled => 0, }; push @tpl_data, $data_hr; } my $path = "tpl/$c_hr->{cat_theme}"; my $style = $path . '/form.css'; my $template = $path . '/module_custody/index.html'; my $layout = $path . '/module_custody/layout.html'; return { layout => $layout, layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Module Custody') ] }, { tt2_hr => { tpl => $template, param_hr => { SHOW_DEBUG => 0, DATA => \@tpl_data, MODULE => $name_of{ ident $self}, PATH => $path, lh => $lh, }, } }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } sub do_change_access { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $access = ( exists $arg_r->{access} ) ? $arg_r->{access} : $self->perr('access'); my $o = ( exists $arg_r->{module} ) ? $arg_r->{module} : $self->perr('module'); my $l = get_logger(__PACKAGE__); my $c = 'cipux_task_disable_cat_module'; my $p_hr = { object => $o, cipuxIsEnabled => 'FALSE' }; if ($access) { $c = 'cipux_task_enable_cat_module'; $p_hr = { object => $o, cipuxIsEnabled => 'TRUE' }; } $l->debug("cmd [$c]"); my $a_hr = $rpc->xmlrpc( { cmd => $c, param_hr => $p_hr } ); my $m = "Can not change access to module [$o]! " . $a_hr->{msg}; return $self->exception( { msg => $m } ) if $a_hr->{status} ne 'TRUE'; $c = 'rpc_intern'; $l->debug("cmd [$c]"); $p_hr = { subcmd => 'flush', }; $a_hr = $rpc->xmlrpc( { cmd => $c, param_hr => $p_hr } ); $m = "Can not flush rbac! " . $a_hr->{msg}; return $self->exception( { msg => $m } ) if $a_hr->{status} ne 'TRUE'; return; } } 1; __END__ ModuleSwitch.pm000444001750001750 2072011413636115 23740 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2006 - 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::ModuleSwitch; use warnings; use strict; use Data::Dumper; use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; # name of the module or module array Readonly::Scalar my $NAME => 'module_switch'; Readonly::Scalar my $MODULE => 'module_switch.cgi'; Readonly::Scalar my $ICON => 'module.png'; # task to be registerd for this module. Readonly::Array my @TASK => qw( cipux_task_retrieve_all_cat_module_name_shortdescription_templatedir_author_version_license_isenabled_icon ); sub register { my $self = shift; # provide a name $self->set_module_name_register( { class => __PACKAGE__, name => $MODULE } ); my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $MODULE } ); return 1; } # This will called last, because of base first sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $trans_name = $NAME; $trans_name =~ s{_}{ }gmx; my $desc = 'This module can be used to enable or'; $desc .= ' disable CipUX CAT Web modules.'; my $module_hr = {}; $module_hr->{cipuxName} = $trans_name; $module_hr->{cipuxTemplateDir} = $NAME; $module_hr->{cipuxIcon} = $ICON; $module_hr->{cipuxDescription} = $desc; $module_hr->{cipuxShortDescription} = 'Switch on/off modules'; $module_hr->{cipuxTask} = \@TASK; return [$module_hr]; } # this is the subroutine which trigger the module output sub module { my ( $self, $arg_r ) = @_; my $cmd = $TASK[0]; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cgi = ( exists $arg_r->{cgi_obj} ) ? $arg_r->{cgi_obj} : $self->perr('cgi_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); $l->debug("module [$MODULE]"); $l->debug("rpc [$rpc]"); $l->debug("cgi [$cgi]"); my $c = ( $cgi->param('change') ) ? $cgi->param('change') : 0; if ( not defined $c ) { $c = 0; } $l->debug("change [$c]"); my $d_ar = $self->get_index( { cmd => $cmd, rpc_obj => $rpc } ); if ($c) { $d_ar = $self->do_switch( { tpl_data_ar => $d_ar, rpc_obj => $rpc, cgi => $cgi, change => $c } ); } my $module_hr = $self->get_module_name_register(); foreach my $m ( sort keys %{$module_hr} ) { $l->debug("found registered module [$m]"); } my $h_ar = [ $lh->maketext('Module Switch') ]; my $path = "tpl/$c_hr->{cat_theme}/module_switch"; $l->debug("template path [$path]"); return { # cookies have to be returned (even if empty) cookie_hr => {}, # point to the layout template, please use word layout.html layout => "$path/layout.html", # array ref for output, one anon hash ref for each part # this have 3 orderd parts: begin_html, tt2_hr, end_html # For valid anon hash keys ( like begin_html, tt2_hr, ...) # see CipUX::CAT::Web::Controller layout_ar => [ { begin_html => 1, }, { body_ar => $h_ar }, { body_ar => [] }, # $page_ar { tt2_hr => { tpl => "$path/index.html", param_hr => { SHOW_DEBUG => 0, DATA => $d_ar, MODULE => $MODULE, PATH => $path, LOGIN => $rpc->get_login(), LOCALE => $self->get_locale(), THEME => $self->get_theme(), lh => $lh, }, }, }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } # get all relevant object for the index sub get_index { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cmd = exists $arg_r->{cmd} ? $self->l( $arg_r->{cmd} ) : $self->perr('cmd'); my $l = get_logger(__PACKAGE__); $l->debug("cmd [$cmd]"); my $a_hr = $rpc->xmlrpc( { cmd => $cmd } ); $l->debug( 'a_hr: ', { filter => \&Dumper, value => $a_hr } ); if ( $a_hr->{status} eq 'FALSE' ) { $l->debug('answer is FALSE'); $l->debug('build exception object'); # TODO build EASY execption obj } $l->debug('answer is TRUE'); # Filter all CAT, and use only CAT-Web ( m{\.cgi$}smx my @tpl_data = (); my $r_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr } ); my $d_ar = $r_hr->{tpl_data_ar}; foreach my $hr ( @{$d_ar} ) { $l->debug("CN [$hr->{cn}]"); if ( $hr->{cn} =~ m{\.cgi$}smx ) { push @tpl_data, $hr; } } return \@tpl_data; } sub do_switch { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $d_ar = ( exists $arg_r->{tpl_data_ar} ) ? $arg_r->{tpl_data_ar} : $self->perr('tpl_data_ar'); my $cgi = ( exists $arg_r->{cgi} ) ? $arg_r->{cgi} : $self->perr('cgi'); my $c = ( exists $arg_r->{change} ) ? $arg_r->{change} : $self->perr('change'); # contains cn or 0 my $l = get_logger(__PACKAGE__); foreach my $hr ( @{$d_ar} ) { next if not $c; next if $hr->{cn} ne $c; $l->debug("change object exists [$hr->{cn}] [$c]"); if ( $hr->{cipuxIsEnabled} eq 'TRUE' ) { $l->debug("disable [$c]"); # cipux_task_client -t cipux_task_disable_cat_module \ # -o theme.cgi -x cipuxIsEnabled=FALSE my $cmd = 'cipux_task_disable_cat_module'; my $p_hr = { object => $c, cipuxIsEnabled => 'FALSE' }; my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr } ); $hr->{cipuxIsEnabled} = 'FALSE'; } elsif ( $hr->{cipuxIsEnabled} eq 'FALSE' ) { $l->debug("enable [$c]"); my $cmd = 'cipux_task_enable_cat_module'; my $p_hr = { object => $c, cipuxIsEnabled => 'TRUE' }; my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr } ); $hr->{cipuxIsEnabled} = 'TRUE'; } } my $cmd = 'rpc_intern'; $l->debug("cmd [$cmd]"); my $p_hr = { subcmd => 'flush', }; my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr } ); return $d_ar; } } 1; BasicAssignment.pm000555001750001750 7015711413636115 24417 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ package CipUX::CAT::Web::Module::BasicAssignment; use warnings; use strict; use Data::Dumper; use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; # Add this, after debugging this module entity, or remove permanently # task_access.cgi (list problem, too long names) # object_class_assignment.cgi (not a sharp instrument) Readonly::Array my @MODULE => qw( admin_class_assignment.cgi teacher_class_assignment.cgi student_class_assignment.cgi module_access.cgi class_role_assignment.cgi admin_role_assignment.cgi teacher_role_assignment.cgi student_role_assignment.cgi ); # this can not be used every where, update all if you change: Readonly::Scalar my $DEFAULT_MODULE => 'student_class_assignment.cgi'; Readonly::Scalar my $TEMPLATE => 'basic_assignment'; Readonly::Scalar my $FIRST_LETTER => 'A'; Readonly::Hash my %ENTITY => ( 'task_access' => 'task', 'object_class_assignment' => 'class_share', 'admin_class_assignment' => 'class_share', 'student_class_assignment' => 'class_share', 'teacher_class_assignment' => 'class_share', 'module_access' => 'cat_module', 'class_role_assignment' => 'role_account', 'admin_role_assignment' => 'role_account', 'teacher_role_assignment' => 'role_account', 'student_role_assignment' => 'role_account', ); Readonly::Hash my %ENTITY_TYPE => ( 'admin_class_assignment' => 'share', 'object_class_assignment' => 'share', 'student_class_assignment' => 'share', 'teacher_class_assignment' => 'share', 'module_access' => 'module', 'task_access' => '', 'class_role_assignment' => 'account', 'admin_role_assignment' => 'account', 'teacher_role_assignment' => 'account', 'student_role_assignment' => 'account', ); Readonly::Hash my %LIST_ALL_TASK => ( 'module_access' => 'cipux_task_list_role_accounts', 'task_access' => 'cipux_task_list_cat_modules', 'object_class_assignment' => 'cipux_task_list_user_accounts', 'student_class_assignment' => 'cipux_task_list_student_accounts', 'teacher_class_assignment' => 'cipux_task_list_teacher_accounts', 'admin_class_assignment' => 'cipux_task_list_admin_accounts', 'class_role_assignment' => 'cipux_task_list_class_shares', 'admin_role_assignment' => 'cipux_task_list_admin_accounts', 'teacher_role_assignment' => 'cipux_task_list_teacher_accounts', 'student_role_assignment' => 'cipux_task_list_student_accounts', ); Readonly::Hash my %FLUSH => ( 'module_access' => 1, 'task_access' => 1, 'object_class_assignment' => 0, 'student_class_assignment' => 0, 'teacher_class_assignment' => 0, 'admin_class_assignment' => 0, 'class_role_assignment' => 1, 'admin_role_assignment' => 1, 'teacher_role_assignment' => 1, 'student_role_assignment' => 1, ); # TODO: get this from task or object layer! Readonly::Hash my %TARGET_ATTR => ( 'module_access' => 'cipuxMemberRid', 'object_class_assignment' => 'memberUid', 'student_class_assignment' => 'memberUid', 'teacher_class_assignment' => 'memberUid', 'admin_class_assignment' => 'memberUid', 'class_role_assignment' => 'memberUid', 'admin_role_assignment' => 'memberUid', 'teacher_role_assignment' => 'memberUid', 'student_role_assignment' => 'memberUid', ); # OBJECT # used in BUILD/new to pass entity from Comtroller.pm my %name_of : ATTR( init_arg => 'name' :default('student_class_assignment') ); # GLOBAL my $task_hr = {}; my $cipux_entity = $EMPTY_STRING; my $cipux_entity_type = $EMPTY_STRING; my $letter = $FIRST_LETTER; my $target_attr = $EMPTY_STRING; # METHOD sub register { my $self = shift; my $c = __PACKAGE__; # module class name foreach my $m (@MODULE) { $self->set_module_name_register( { class => $c, name => $m } ); $self->task_cfg($m); my $c_ar = $self->module_cfg($m); $self->set_module_cfg_register( { cfg_ar => $c_ar, name => $m } ); } return 1; } sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $module = shift; # somtimes there is no object in self. Probably wrong usage # by cipux_cat_module client? my $name = $self; if ( defined $module ) { $name = $module; } $name =~ s{\.cgi}{}smx; my $trans_name = $name; $trans_name =~ s{_}{ }gmx; my %desc = ( $name => 'Basic ' . $trans_name ); my $ldesc = "This module let you make assignments to $trans_name."; my %ldesc = ( $name => $ldesc ); my $module_hr = {}; $module_hr->{cipuxName} = $trans_name; $module_hr->{cipuxTemplateDir} = $TEMPLATE; $module_hr->{cipuxIcon} = 'assignment.png'; if ( $name eq 'module_access' ) { $module_hr->{cipuxIcon} = 'module.png'; $ldesc{$name} .= 'by adding and removing roles'; $ldesc{$name} .= ' you can decide who has access.'; } elsif ( $name eq 'task_access' ) { $module_hr->{cipuxIcon} = 'module.png'; $ldesc{$name} .= 'by adding and removing CAT modules'; $ldesc{$name} .= ' you can decide who has access.'; } $module_hr->{cipuxDescription} = $ldesc{$name}; $module_hr->{cipuxShortDescription} = $desc{$name}; # save all tasks for ACL foreach my $t (qw(add_member remove_member list list_member list_all)) { if ( defined $name and exists $task_hr->{$name} and defined $t and exists $task_hr->{$name}->{$t} ) { push @{ $module_hr->{cipuxTask} }, $task_hr->{$name}->{$t}; } else { push @{ $module_hr->{cipuxTask} }, 'NULL'; } } return [$module_hr]; } sub task_cfg { my $self = shift; # TODO: sometimes not blessed, why? my $module = shift; # 'add member' : cipux_task_add_member_to_ # 'remove member' : cipux_task_remove_member_from_ # 'list' : cipux_task_list_s # 'list_member' : cipux_task_list_members_of_ # 'list_all' : cipux_task_list_user_accounts # module_access.cgi => module_access $module =~ s{\.cgi}{}smx; $target_attr = $TARGET_ATTR{$module}; # = cat_module # = class_share $cipux_entity = $ENTITY{$module}; # = module # = share $cipux_entity_type = $ENTITY_TYPE{$module}; # = _cat_module my $e = '_' . $ENTITY{$module}; my $prefix = 'cipux_task_'; # 'list' : cipux_task_list_s $task_hr->{$module}->{list} = $prefix . 'list' . $e . 's'; # 'list_all' : cipux_task_list_user_accounts $task_hr->{$module}->{list_all} = $LIST_ALL_TASK{$module}; # 'list_member': cipux_task_list_members_of_ $task_hr->{$module}->{list_member} = $prefix . 'list_members_of' . $e; # 'add' : cipux_task_add_member_to_ $task_hr->{$module}->{add_member} = $prefix . 'add_member_to' . $e; # 'remove' : cipux_task_remove_member_from_ $task_hr->{$module}->{remove_member} = $prefix . 'remove_member_from' . $e; return; } sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cgi = ( exists $arg_r->{cgi_obj} ) ? $arg_r->{cgi_obj} : $self->perr('cgi_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $l = get_logger(__PACKAGE__); my $module = $name_of{ ident $self}; $module =~ s{\.cgi}{}smx; $l->debug("module [$module]"); my $modulecgi = $module . '.cgi'; $l->debug("modulecgi [$modulecgi]"); $target_attr = $TARGET_ATTR{$module}; $l->debug("target_attr [$target_attr]"); $cipux_entity = $ENTITY{$module}; $l->debug("cipux_entity [$cipux_entity]"); $cipux_entity_type = $ENTITY_TYPE{$module}; $l->debug("cipux_entity type [$cipux_entity_type]"); $l->debug('initialize forms'); # initialize forms after ticket is known # form have to be defined first my $form = $self->_form( { page => 'index', mode => 'overview', rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); # | submitted # submitted values have to be checked second # read CGI values after form is defined (before redefined) my $mode = ( defined $form->field('mode') ) ? $form->field('mode') : 'overview'; $l->debug("read mode as [$mode]"); $letter = ( defined $form->field('letter') ) ? $letter = $form->field('letter') : $letter; $form->field( name => 'letter', type => 'hidden', value => "$letter", force => 1 ); $l->debug("letter $letter"); my @object = $form->field( name => 'obj', cgi_value => 1 ); my $oid = $form->field( name => 'oid', cgi_value => 1 ); my $flush_needed = 0; # submitted if ( $form->submitted ) { # ACTION: ADMIT if ( $form->submitted eq $lh->maketext('admit') && $form->validate ) { $l->debug('action really admit (member)'); foreach my $o (@object) { my $p_hr = { object => $oid, value => $o }; $l->debug("object ID [$oid]"); $l->debug("value [$o]"); my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{add_member}, param_hr => $p_hr } ); if ( $a_hr->{status} eq 'TRUE' ) { my $m = $lh->maketext( 'The object %s has been added to %s.'); $flush_needed = 1; } else { # not able to set password $self->wwarn( { number => '0-999-0023-999' } ); } } } # ACTION: DISMISS elsif ($form->submitted eq $lh->maketext('dismiss') && $form->validate ) { $l->debug('action really dissmiss (member)'); foreach my $o (@object) { my $p_hr = { object => $oid, value => $o }; $l->debug("object ID [$oid]"); my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{remove_member}, param_hr => $p_hr } ); if ( $a_hr->{status} eq 'TRUE' ) { $flush_needed = 1; my $msg = $lh->maketext( 'Object %s has been removed from course %s.'); } else { $self->wwarn( { number => '0-999-0023-999' } ); } } } # LISTING: MEMBER (LIST) elsif ( $form->submitted eq $lh->maketext('list member') ) { $l->debug('list pushed'); # no_gid_given my $oid = $form->field('oid') || die 'No object Id (OID) given!'; # nextmode list OID Members $form = $self->_form( { page => 'group', mode => 'list', list => 1, oid => $oid, rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); } # LISTING: NON MEMBER (ADMIT) elsif ( $form->submitted eq $lh->maketext('admit member') ) { $l->debug('admit pushed'); # no_gid_given my $oid = $form->field('oid') || die 'No object ID (OID) given!'; $l->debug("oid [$oid]"); $form = $self->_form( { page => 'group', mode => 'admit', list => 0, oid => $oid, rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); } # LISTING: MEMBER (DISMISS,REMOVE) elsif ( $form->submitted eq $lh->maketext('dismiss member') ) { $l->debug('dismiss pushed'); # no_gid_given my $oid = $form->field('oid') || die 'No object ID (OID) given!'; $form = $self->_form( { page => 'group', mode => 'dismiss', list => 0, oid => $oid, rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); } # INDEX else { $l->debug('OK pressed. go to index'); $form = $self->_form( { page => 'index', mode => 'overview', rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); } } else { $l->debug('new page. go to index'); $form = $self->_form( { page => 'index', mode => 'overview', rpc_obj => $rpc, lh_obj => $lh, c_hr => $c_hr, module => $module, } ); } if ( $FLUSH{$module} and $flush_needed ) { my $a_hr = $rpc->xmlrpc( { cmd => 'rpc_intern', param_hr => { subcmd => 'flush', }, } ); } my $path = "tpl/$c_hr->{cat_theme}"; return { cookie_hr => {}, layout => "$path/basic_assignment/layout.html", layout_ar => [ { begin_html => 1, }, { body_ar => [ $lh->maketext('Basic Group Administration') ] }, { formbuilder_hr => { form => $form, } }, { footer_hr => { show_index_back => 1, show_script_back => 0 }, }, { end_html => 1, }, ], }; } sub _form { # This function needs to be called before the query of CGI can return # values. The need to define the form in the first step is because the # object reference must be defined to evaluate if the form was # submitted. # # Therefore the definition (and redefinition) of fields must be the # least possible, because if a field is defined before the value is # queried the value is lost. # # The redefinition and definition of new fiels should be done just # before rendering the form. # # With FormBuilder it make not much sence to have more than one # form, because the object is global and the submitted query can # NOT distinguish well between different form objects. # my ( $self, $arg_r ) = @_; my $page = ( exists $arg_r->{page} and defined $arg_r->{page} and $arg_r->{page} ) ? $self->l( $arg_r->{page} ) : $self->perr('page'); # curr mode: list, create my $mode = ( exists $arg_r->{mode} and defined $arg_r->{mode} ) ? $self->l( $arg_r->{mode} ) : $self->perr('mode'); # next mode: {overview|list|admit|dismiss} my $list = ( exists $arg_r->{list} and defined $arg_r->{list} ) ? $self->l( $arg_r->{list} ) : 1; # 1 = list | 0 = {admit|dismiss} my $oid = ( exists $arg_r->{oid} and defined $arg_r->{oid} ) ? $self->l( $arg_r->{oid} ) : undef; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : $self->perr('c_hr'); my $module = ( exists $arg_r->{module} and defined $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); $l->debug("mode [$mode]"); $l->debug("page [$page]"); my $path = "tpl/$c_hr->{cat_theme}"; $l->debug("path [$path]"); my $module_tr = $module; $module_tr =~ s{_}{ }gmx; my $form = CGI::FormBuilder->new( method => 'post', fields => [qw/oid/], # validate => {id => 'NAME'}, # require => 'id', #], #params => $cgi, debug => 0, keepextra => 1, table => 0, reset => 0, sticky => 0, stylesheet => "$path/form.css", template => { type => 'TT2', template => "$path/$TEMPLATE/$page.html", variable => 'form', data => { CIPUX_MODALITY => $module, CIPUX_MODALITY_TR => $module_tr, SHOW_DEBUG => 0, TEMPLATE => $TEMPLATE, ICON => 'assignment.png', CIPUX_ENTITY_TYPE => $cipux_entity_type, CIPUX_ENTITY => $cipux_entity, MODE => $mode, lh => $lh, } }, ); my $member_ar = $EMPTY_STRING; $l->debug("mode eq [$mode]"); if ( $mode eq 'overview' ) { $l->debug(' _form is overview'); $form->submit( [ $lh->maketext('list member'), $lh->maketext('admit member'), $lh->maketext('dismiss member'), ] ); my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{list}, param_hr => {} } ); my @course = sort keys %{ $a_hr->{cmdres_r} }; $form->field( name => 'group', options => \@course, force => 1 ); } elsif ( $mode eq 'list' ) { $l->debug("go mode eq [$mode]"); $form->submit( [ $lh->maketext('OK') ] ); $form->field( name => 'oid', value => "$oid", type => 'static', force => 1 ); my $p_hr = { object => $oid }; $l->debug('will exec cmd [' . $task_hr->{$module}->{list_member} . ']' ); $l->debug("object ID [$oid]"); $l->debug("rpc_obj [$rpc]"); my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{list_member}, param_hr => $p_hr } ); $l->debug( 'rpc answer_hr ', { filter => \&Dumper, value => $a_hr } ); $l->debug('evaluate answer'); # 'cmdres_r' => { # 'index.cgi' => { # 'cipuxMemberRid' => [ # 'admins' # ], my @member = ref( $a_hr->{cmdres_r}->{$oid}->{$target_attr} ) eq 'ARRAY' ? sort @{ $a_hr->{cmdres_r}->{$oid}->{$target_attr} } : (); $l->debug( 'found [' . scalar @member . '] member' ); foreach my $member (@member) { $l->debug("member [$member]"); } $form->field( name => 'obj', options => \@member, force => 1 ); $form->field( name => 'object', options => \@member, force => 1, multiple => 1 ); #my $cmd = 'cipux_task_retrieve_all_user_account_lastname_firstname_role'; my $cmd = $LIST_ALL_TASK{$module}; # TODO, code for old return value and parameter return_tpl_data => 1, my $return_tpl_data = {}; $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr } ); $form->tmpl_param( data => $return_tpl_data ); $form->tmpl_param( test => 'hallo' ); } elsif ( $mode eq 'admit' ) { # we would like to admit members $l->debug("enter mode [$mode]"); $form->submit( [ $lh->maketext('admit'), $lh->maketext('cancel') ] ); $form->field( name => 'oid', value => "$oid", type => 'static', force => 1 ); # [1] list all members of the group, to calulate # what we can not admit later my $p_hr = { object => $oid }; my $cmd = $task_hr->{$module}->{list_member}; $l->debug("cmd [$cmd]"); my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr, } ) or die "RPC command [$cmd] failed!"; $l->debug( 'rpc answer_hr ', { filter => \&Dumper, value => $a_hr } ); my @member = sort @{ $a_hr->{cmdres_r}->{$oid}->{$target_attr} }; if ( exists $a_hr->{cmdres_r}->{$oid} and exists $a_hr->{cmdres_r}->{$oid}->{$target_attr} ) { push @member, @{ $a_hr->{cmdres_r}->{$oid}->{$target_attr} }; } else { push @member, keys %{ $a_hr->{cmdres_r} }; } $l->debug( 'member ', { filter => \&Dumper, value => \@member } ); # [2] get all object as a set where we can choose from $cmd = $task_hr->{$module}->{list_all}; $l->debug("list all cmd [$cmd]"); $p_hr = {}; $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr, } ); $l->debug( 'rpc answer_hr ', { filter => \&Dumper, value => $a_hr } ); my $return_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr, use_ltarget => 1 } ); my $tpl_data_ar = $return_hr->{tpl_data_ar}; my $ltarget = $return_hr->{ltarget}; $l->debug( 'tpl_data_ar ', { filter => \&Dumper, value => $tpl_data_ar } ); my @all = (); foreach my $anon_hash ( @{$tpl_data_ar} ) { foreach my $key ( keys %{$anon_hash} ) { $l->debug("all key [$key] value [$anon_hash->{$key}]"); push @all, $anon_hash->{$key}; } } # calculate difference quantity #my @all = keys %{ $a_hr->{cmdres_r} }; my %seen = map { $_ => 1 } @member; my @nonmember = sort grep { not exists $seen{$_} } @all; $form->field( name => 'obj', options => \@nonmember, force => 1 ); $form->field( name => 'object', multiple => 1, options => \@nonmember, force => 1 ); } elsif ( $mode eq 'dismiss' ) { $l->debug("go mode eq [$mode]"); $form->submit( [ $lh->maketext('dismiss'), $lh->maketext('cancel') ] ); $form->field( name => 'oid', value => "$oid", type => 'static', force => 1 ); my $p_hr = { object => $oid }; my $a_hr = $rpc->xmlrpc( { cmd => $task_hr->{$module}->{list_member}, param_hr => $p_hr } ); my @member = sort @{ $a_hr->{cmdres_r}->{$oid}->{$target_attr} }; $l->debug(' member_ar'); $form->field( name => 'obj', options => \@member, force => 1 ); $form->field( name => 'object', multiple => 1, type => 'checkbox', options => \@member, force => 1 ); } $form->field( name => 'mode', type => 'static', value => "$mode", force => 1 ); $form->field( name => 'module', type => 'hidden', value => $module ); $form->field( name => 'letter', type => 'hidden', value => "$letter" ); $form->field( name => 'showlist', type => 'static', value => "$list", force => 1 ); return $form; } } 1; __END__ Index.pm000444001750001750 2002411413636115 22375 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Module# +========================================================================+ # || Copyright (C) 2006 - 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version || # +========================================================================+ # ID: $Id: Index.pm 4900 2010-07-03 13:27:21Z christian-guest $ # Revision: $Revision: 4900 $ # Head URL: $HeadURL: svn+ssh://christian-guest@svn.debian.org/svn/cipux/trunk/cipux-core/cat-web/lib/CipUX/CAT/Web/Module/Index.pm $ # Date: $Date: 2010-07-03 15:27:21 +0200 (Sat, 03 Jul 2010) $ # Source: $Source$ package CipUX::CAT::Web::Module::Index; use 5.008001; use warnings; use strict; use Data::Dumper; use Log::Log4perl qw(get_logger :levels); use base qw(CipUX::CAT::Web::Module); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST # name of the module or module array Readonly::Scalar my $NAME => 'index'; Readonly::Scalar my $MODULE => 'index.cgi'; # task to be registerd for this module. Readonly::Array my @TASK => qw( cipux_task_retrieve_all_cat_module_name_shortdescription_templatedir_author_version_license_isenabled_icon ); # OBJECT my %register_module_of : ATTR( :set); # METHOD sub register { my $self = shift; # provide a name $self->set_module_name_register( { class => __PACKAGE__, name => $MODULE } ); my $cfg_ar = $self->module_cfg; $self->set_module_cfg_register( { cfg_ar => $cfg_ar, name => $MODULE } ); return 1; } # This will called last, because base will be called first sub module_cfg : CUMULATIVE(BASE FIRST) { my $self = shift; my $add = 'The index show all registered CAT-Web modules.'; my $module_hr = {}; $module_hr->{cipuxName} = $NAME; $module_hr->{cipuxEntity} = 'cat_module'; $module_hr->{cipuxModality} = 'cat'; $module_hr->{cipuxIcon} = $NAME . '.png'; $module_hr->{cipuxDescription} = $add; $module_hr->{cipuxShortDescription} = 'module overview'; $module_hr->{cipuxTask} = \@TASK; # not used, but to be correct: $module_hr->{cipuxScript} = $NAME . '.cgi'; $module_hr->{cipuxTemplate} = 'index.html'; $module_hr->{cipuxTemplateDir} = 'index'; $module_hr->{cipuxIsModuleArray} = 'FALSE'; return [$module_hr]; } # this is the subroutine which trigger the module output sub module { my ( $self, $arg_r ) = @_; my $rpc = ( exists $arg_r->{rpc_obj} ) ? $arg_r->{rpc_obj} : $self->perr('rpc_obj'); my $cgi = ( exists $arg_r->{cgi_obj} ) ? $arg_r->{cgi_obj} : $self->perr('cgi_obj'); my $view = ( exists $arg_r->{view_obj} ) ? $arg_r->{view_obj} : $self->perr('view_obj'); my $lh = ( exists $arg_r->{lh_obj} ) ? $arg_r->{lh_obj} : $self->perr('lh_obj'); my $mod_access_hr = ( exists $arg_r->{mod_access_hr} ) ? $arg_r->{mod_access_hr} : {}; my $c_hr = ( exists $arg_r->{c_hr} ) ? $arg_r->{c_hr} : {}; my $l = get_logger(__PACKAGE__); $l->debug("module [$MODULE]"); $l->debug("theme [$c_hr->{cat_theme}]"); $l->debug("rpc [$rpc]"); $l->debug("cgi [$cgi]"); $l->debug( 'mod_access_hr: ', { filter => \&Dumper, value => $mod_access_hr } ); # Index # BasicObject # aux: room, netgroup # user: admin, assistant, lecturer, professor, pupil, student, # teacher, tutor # group: class, course, group, lecture, reading, seminar, # studygroup, team, tutorial, workshop # CipUX::CAT::Web::Module::Assignment # group: class, course, group, lecture, reading, seminar, # studygroup, team, tutorial, workshop # other: skel # aux: role_assignment # CipUX::CAT::Web::Module::CatModule # # internetadmin # examadmin # transferadmin # import # client my $cmd = $TASK[0]; my $a_hr = $rpc->xmlrpc( { cmd => $cmd } ); if ( $a_hr->{status} eq 'FALSE' ) { $l->debug('answer is FALSE'); my $msg = 'RPC call failed, got no list of CAT modules!'; if ( exists $a_hr->{msg} and defined $a_hr->{msg} and $a_hr->{msg} ) { $msg .= q{ } . $a_hr->{msg}; } return $self->exception( { 'module' => $MODULE, msg => $msg } ); } $l->debug('answer is TRUE'); # Filter all CAT, and use only CAT-Web ( m{\.cgi$}smx my @tpl_data = (); #my ($d_ar, $sorted_ar) my $r_hr = $rpc->extract_data_for_tpl( { answer_hr => $a_hr } ); my $d_ar = $r_hr->{tpl_data_ar}; foreach my $hr ( @{$d_ar} ) { my $m = $hr->{cn}; $l->debug("module (CN) [$m]"); next if $m eq 'index.cgi'; next if $hr->{cipuxIsEnabled} ne 'TRUE'; next if not exists $mod_access_hr->{$m}; next if not defined $mod_access_hr->{$m}; next if not $mod_access_hr->{$m}; #$hr->{NAME} = $lh->maketext($hr->{cipuxName}); $hr->{NAME} = $hr->{cipuxName}; #my $dummy = $lh->maketext('admin'); #$hr->{NAME} =~ s{_}{ }smxg; #$hr->{NAME} = $self->get( $hr->{NAME} ); if ( $hr->{cn} =~ m{\.cgi$}smx ) { push @tpl_data, $hr; } } my $login = $rpc->get_login(); my $module_hr = $self->get_module_name_register(); foreach my $m ( sort keys %{$module_hr} ) { $l->debug("found registered module [$m]"); } my $header_ar = [$lh->maketext('Module Index')]; my $path = "tpl/$c_hr->{cat_theme}/$NAME"; $l->debug("template path [$path]"); $l->debug("template login [$login]"); $l->debug( '@tpl_data', { filter => \&Dumper, value => \@tpl_data } ); return { # cookies have to be returned (even if empty) cookie_hr => {}, # point to the layout template, please use the word # "layout.html" if possible layout => "$path/layout.html", # array ref for output, one anon hash ref for each part # this have 3 orderd parts: begin_html, tt2_hr, end_html # For valid anon hash keys ( like begin_html, tt2_hr, ...) # see CipUX::CAT::Web::Controller layout_ar => [ { begin_html => 1, }, { body_ar => $header_ar }, { body_ar => [] }, # $page_ar { statusline => 1 }, { tt2_hr => { tpl => "$path/index.html", param_hr => { SHOW_DEBUG => 0, DATA => \@tpl_data, MODULE => $MODULE, PATH => $path, MAXCOL => $self->get_max_col(), lh => $lh, }, } }, { formbuilder_hr => { form => scalar $view->logout( { lh_obj => $lh } ) }, }, { footer_hr => {}, }, { end_html => 1, }, ], }; } } 1; __END__ Setup000755001750001750 011413636115 20470 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/WebClient.pm000444001750001750 6317511413636115 22435 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/Setup# +=======================================================================+ # || XML-RPC client to register, deregister and list a CAT module. || # || || # || Copyright (C) 2008 - 2010 by Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # +=======================================================================+ # $Id$ # $Revision$ # $HeadURL$ # $Date$ # $Source$ package CipUX::CAT::Web::Setup::Client; use 5.008001; use strict; use warnings; use Carp; use Class::Std; use CipUX::CAT::Web::Plugin; use CipUX::RPC::Client; use Data::Dumper; use Date::Manip; use English qw( -no_match_vars ); use Getopt::Long; use Log::Log4perl qw(get_logger :levels); use Pod::Usage; use Readonly; use base qw(CipUX); { use version; our $VERSION = qv('3.4.0.3'); use re 'taint'; # Keep data captured by parens tainted delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # CONST Readonly::Scalar my $EMPTY_STRING => q{}; Readonly::Scalar my $SCRIPT => 'cipux_cat_web_module'; Readonly::Scalar my $L => "=" x 78 . "\n"; Readonly::Scalar my $CACHE_DIR => '/var/cache/cipux-cat-web'; # GLOBAL my $cfg_hr = {}; # configuration my $rpc = undef; # rpc obj my %opt = (); my $verbose = 0; # COMMAND LINE API my %option = ( 'cipux_cat_web_module' => { 'must' => [], 'may' => [ qw(a add-member all c cfg d D debug deregister e enable h ? help host list-deregistered list-installed list-registered l login m maxtest no-ssl o object password port ssl V verbose version w) ], 'not' => [], }, ); # MAIN sub run { my ( $self, $arg_r ) = @_; my $cd = ( exists $arg_r->{cache_dir} ) ? $self->l( $arg_r->{cache_dir} ) : $CACHE_DIR; $cfg_hr = $self->cfg( { 'pkg' => 'cipux', 'sub' => 'cat-web', cache_dir => $cd } ); # ENVIRONMENT Getopt::Long::Configure("bundling"); my $msg = $L . 'Problems parsing command line!' . "\n$L"; GetOptions( \%opt, 'add-member|m=s', 'all|a', 'debug|D', 'deregister|d', 'enable|e', 'help|h', 'list-deregistered', 'list-installed', 'list-registered', 'login|l=s', 'object|o=s', 'password|w=s', 'register|r', 'verbose', 'version|V', ) or pod2usage( -exitstatus => 2, -msg => $msg ); my $l4pcfg = ( exists $cfg_hr->{base}->{catweb_l4pconf} ) ? $self->l( $cfg_hr->{base}->{catweb_l4pconf} ) : '/usr/share/cipux/etc/cipux-cat-web.log4perl'; if ( exists $opt{debug} and defined $opt{debug} ) { Log::Log4perl::init_once($l4pcfg); } my $l = get_logger(__PACKAGE__); my $date = UnixDate( 'today', '%O' ); $l->debug(" CipUX : $VERSION "); $l->debug(" date : $date"); # display help page if ( exists $opt{help} and defined $opt{help} and $opt{help} ) { pod2usage( -exitstatus => 0, -verbose => 1 ); } # display version and exit if ( exists $opt{version} and defined $opt{version} and $opt{version} ) { print "$SCRIPT $VERSION\n"; exit(0); } print "$SCRIPT $VERSION\n"; # url = 'https://localhost:8000/RPC2'; # url = 'http://localhost:8001/RPC2'; my $proto = 'http'; my $host = 'localhost'; my $port = 8001; my $url = ( exists $cfg_hr->{base}->{catweb_rpc_server} and defined $cfg_hr->{base}->{catweb_rpc_server} ) ? $cfg_hr->{base}->{catweb_rpc_server} : $proto . q{://} . $host . q{:} . $port . q{/RPC2}; if ( exists $cfg_hr->{base}->{catweb_rpc_server} and defined $cfg_hr->{base}->{catweb_rpc_server} ) { $l->debug( "catweb_rpc_server: [$cfg_hr->{base}->{catweb_rpc_server}]"); } $l->debug("host: [$host]"); $l->debug("port: [$port]"); $l->debug("url: [$url]"); $rpc = CipUX::RPC::Client->new( { url => $url, client => $SCRIPT, version => "$VERSION", } ); # laundering 2/5 my $object = ( exists $opt{object} and defined $opt{object} and $opt{object} ) ? $self->l( $opt{object} ) : $EMPTY_STRING; # option register my $register = ( exists $opt{register} and defined $opt{register} and $opt{register} ) ? 1 : 0; # option deregister my $deregister = ( exists $opt{deregister} and defined $opt{deregister} and $opt{deregister} ) ? 1 : 0; # option register my $list_registered = ( exists $opt{'list-registered'} and defined $opt{'list-registered'} and $opt{'list-registered'} ) ? 1 : 0; # option register my $list_deregistered = ( exists $opt{'list-deregistered'} and defined $opt{'list-deregistered'} and $opt{'list-deregistered'} ) ? 1 : 0; # option list-installed my $list_installed = ( exists $opt{'list-installed'} and defined $opt{'list-installed'} and $opt{'list-installed'} ) ? 1 : 0; # option verbose $verbose = ( exists $opt{verbose} and defined $opt{verbose} and $opt{verbose} ) ? 1 : 0; $l->debug( 'register : ', $register ); $l->debug( 'deregister : ', $deregister ); $l->debug( 'list_deregistered: ', $list_deregistered ); $l->debug( 'list_installed : ', $list_installed ); $l->debug( 'list_registered : ', $list_registered ); $l->debug( 'verbose : ', $verbose ); my $mandatory = $register + $deregister + $list_registered + $list_deregistered + $list_installed; my $reg = $register + $deregister; $l->debug( 'mandatory : ', $mandatory ); $l->debug( 'reg : ', $reg ); if ( $mandatory > 1 ) { #my $msg = $L . $self->loc('Please'); my $msg .= ' PLEASE provide only one --register, --deregister, '; $msg .= '--list-registered or --list-deregistered '; $msg .= '--list-installed command line option!' . "\n" . $L; pod2usage( -exitstatus => 4, -verbose => 0, -message => $msg ); } elsif ( $mandatory < 1 ) { my $msg = $L . 'Please'; $msg .= ' provide only one --register, --deregister, '; $msg .= '--list-registered or --list-deregistered '; $msg .= '--list-installed command line option!' . "\n" . $L; pod2usage( -exitstatus => 3, -verbose => 0, -message => $msg ); } elsif ( $object eq $EMPTY_STRING and $reg > 0 and not exists $opt{all} and not defined $opt{all} ) { my $msg = $L . 'Please provide --object '; $msg .= 'command line option!' . "\n" . $L; pod2usage( -exitstatus => 4, -verbose => 0, -message => $msg ); } $l->debug( 'script: ', $SCRIPT ); $l->debug( 'object: ', $object ) if defined $object; if ($list_installed) { $self->list_installed(); exit 1; } # ping $l->debug('going to ping the XML-RPC server'); if ( $rpc->rpc_ping() ) { $l->debug('rpc_ping SUCCESS'); # SUCCESS print "Sever [$url] is reachable.\n" if $verbose; } else { $l->debug('rpc_ping FAILURE'); # FAILURE croak "XML RPC server $url not reachable!\n"; } # login $l->debug('going to login into the XML-RPC server'); # laundering 4/5 my $login = ( defined( $opt{login} ) and $opt{login} ) ? $self->l( $opt{login} ) : $self->l( $self->login_prompt( { prompt => 'CAT Login: ' } ) ); $l->debug("CAT Login: $login"); # laundering 5/5 my $password = ( defined( $opt{password} ) and $opt{password} ) ? $self->l( $opt{password} ) : $self->lp( $self->password_prompt( { prompt => 'Password: ' } ) ); $l->debug('rpc_login'); my $login_ok = $rpc->rpc_login( { login => $login, password => $password } ); if ($login_ok) { # SUCCESS $l->debug('rpc_login SUCCESS'); } else { # FAILURE $l->debug('rpc_login FAILURE'); } # registered $l->debug('retrieve registerd CAT modules from the XML-RPC server'); my $cmd = 'cipux_task_list_cat_modules'; my $a_hr = $rpc->xmlrpc( { cmd => $cmd } ); $l->debug('got answer of registered modules from XML-RPC server'); my %registered = (); if ( defined( $a_hr->{status} ) and $a_hr->{status} eq 'TRUE' ) { foreach my $module ( sort keys %{ $a_hr->{cmdres_r} } ) { next if not $module =~ m{\.cgi$}mx; # we handle only CGIs if ($list_registered) { my $msg = $module . "\n"; print $msg; } $registered{$module} = 1; } } else { print "EXCEPTION: Can not get list about registered modules!\n"; print $a_hr->{msg} . "\n"; exit 1; } $l->debug('end if listing of registered modules'); # deregistered $l->debug('begin printing deregistered modules (if any)'); my %deregistered = (); my $plugin = CipUX::CAT::Web::Plugin->new(); $l->debug('plugin init'); $plugin->init(); $l->debug('plugin get_module_name_register'); my $p_hr = $plugin->get_module_name_register(); foreach my $m ( sort keys %{$p_hr} ) { if ( not defined( $registered{$m} ) ) { if ($list_deregistered) { print $m . "\n"; } $deregistered{$m} = $m; $l->debug( 'dergisterd module is: ', $m ); } } $l->debug('end printing deregistered modules (if any)'); # register $l->debug('begin register modules ...'); # if we can register it if ( defined($register) and $register ) { $l->debug( 'register (BOOLEAN): ', $register ); my @object = (); if ( defined $opt{all} ) { @object = sort keys %deregistered; } else { push @object, $object; } foreach my $object (@object) { # ok, option --register $l->debug('option --register'); if ( defined( $deregistered{$object} ) and $deregistered{$object} ) { # ok, it is deregistered we may proceed $l->debug('proceed register'); if ( defined( $registered{$object} ) and $registered{$object} ) { # we can not register, it is already registered $l->debug('EXCEPTION: already registerd'); my $msg = 'EXCEPTION: module already registered!'; die $msg; } else { # ok, it is deregistered and NOT registered, we may # register it! We want to have fun tonight ... $l->debug('OK deregistered and NOT registered'); my $rp_hr = {}; # paremeters to be registerd # we can register: my $o_hr = $plugin->get_module_cfg_register( { name => $object } ); $l->debug( 'o_hr ', { filter => \&Dumper, value => $o_hr } ); $rp_hr->{object} = $object; $l->debug("about to register: $object\n"); # process only cipuxTask an not NULL task if ( ref $o_hr->{cipuxTask} eq 'ARRAY' ) { $l->debug("cipuxTask is ARRAY\n"); foreach my $v ( @{ $o_hr->{cipuxTask} } ) { $l->debug("register task [$v]?\n"); next if $v eq 'NULL'; $l->debug("yes register task [$v]\n"); # if we have not 'NULL' task assigned # to that module $l->debug("add $object to task [$v]\n"); $self->add_module_to_task( { module => $object, task => $v } ); } } $rp_hr = $o_hr; # if -e | --enable, we enable the module if ( defined $opt{enable} ) { $rp_hr->{cipuxIsEnabled} = 'TRUE'; if ($verbose) { print "Object [$object] will be enabled\n"; } } my $member = ( exists $opt{'add-member'} and defined $opt{'add-member'} ) ? $opt{'add-member'} : undef; # TODO cipuxMemberRid get that from cipux-rbac-conf. # FIXME: Why should that come from that file(?) ? if ( defined $opt{enable} and defined $member ) { $rp_hr->{cipuxMemberRid} = $member; $l->debug("add $member to ACL of $object"); } $l->debug( 'rp_hr ', { filter => \&Dumper, value => $rp_hr } ); $self->register_module( { module => $object, param_hr => $rp_hr } ); } } else { # we cannot register $l->debug('EXCEPTION: unable to register'); my $msg = 'EXCEPTION: Can not register module!'; $msg .= ' Reason: It is not deregistered.'; $msg .= ' So it is probably already registered.'; $msg .= " The module in question is: [$object]'\n"; croak $msg; } } my $cmd = 'rpc_intern'; $l->debug("cmd [$cmd]"); my $p_hr = { subcmd => 'flush', }; my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $p_hr } ); if ( $rpc->rpc_logout ) { print "Logout OK\n" if $verbose; } else { print "Logout not OK\n" if $verbose; exit 1; } } # deregister # if we can deregister it if ( defined($deregister) and $deregister ) { my @object = (); if ( exists $opt{all} and defined $opt{all} ) { @object = sort keys %registered; } else { push @object, $object; } foreach my $object (@object) { # ok CLI option --deregister $l->debug('option --deregister'); if ( defined( $deregistered{$object} ) and $deregistered{$object} ) { # problem: we cannot deregister a deregistered module $l->debug('EXCEPTION: already deregisterd'); my $msg = $L; $msg .= 'EXCEPTION: module already deregistered!'; $msg .= "\n" . $L; croak $msg; } else { # ok, proceed $l->debug('proceed deregister'); if ( defined( $registered{$object} ) and $registered{$object} ) { # ok, if registered, we could deregister the module $l->debug('try to recieve tasks from module'); my $task_ar = $self->retrieve_tasks_from_module( { module => $object } ); $l->debug('try to remove module from tasks'); foreach my $t ( @{$task_ar} ) { next if $t eq 'NULL'; $l->debug("processiong task [$t]"); $self->remove_module_from_task( { task => $t, module => $object } ); } $l->debug("try to deregister module [$object]"); $self->deregister_module( { module => $object } ); } else { # we cannot deregister, because it is not registered $l->debug('EXCEPTION: no such module'); my $msg = $L . 'EXCEPTION: deregistration'; $msg .= "impossible: wrong name.\n"; $msg .= 'Make sure the name of the module'; $msg .= "is correct.\nIf uncertain then"; $msg .= " use --list-registered\noption"; $msg .= " to get a list of valid names.\n" . $L; croak $msg; } } } } return; } sub list_installed { my ( $self, $arg_r ) = @_; my $plugin = CipUX::CAT::Web::Module->new(); $plugin->init(); my $p_hr = $plugin->get_module_name_register(); foreach my $m ( sort keys %{$p_hr} ) { print "plugin [$m]\n"; } return; } sub retrieve_tasks_from_module { my ( $self, $arg_r ) = @_; my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); my $cmd = 'cipux_task_optain_cat_module_task'; my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => { object => $module, }, } ); my $target = ( exists $a_hr->{ltarget} ) ? $a_hr->{ltarget} : 'cipuxTask'; if ( defined $module and exists $a_hr->{cmdres_r}->{$module}->{$target} ) { my $res_ar = $a_hr->{cmdres_r}->{$module}->{$target}; return $res_ar; } return []; } sub register_module { my ( $self, $arg_r ) = @_; my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $param_hr = ( exists $arg_r->{param_hr} ) ? $self->h( $arg_r->{param_hr} ) : $self->perr('param_hr'); my $l = get_logger(__PACKAGE__); my $cmd = 'cipux_task_register_cat_module'; $l->debug( 'command: ', $cmd ); $param_hr->{object} = $module; # add the module my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $param_hr, } ); if ( defined( $a_hr->{status} ) and $a_hr->{status} eq 'TRUE' ) { if ($verbose) { print "Successfully registered [$module].\n"; } } else { print "EXCEPTION: Can not register [$module]!\n"; if ( defined $a_hr->{status} ) { print 'Message from the server: ' . $a_hr->{msg} . "\n"; } exit 1; } if ($verbose) { print $L; } return; } sub deregister_module { my ( $self, $arg_r ) = @_; my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); my $param_hr = {}; $param_hr->{object} = $module; my $cmd = 'cipux_task_deregister_cat_module'; $l->debug( 'command: ', $cmd ); my $a_hr = $rpc->xmlrpc( { cmd => $cmd, param_hr => $param_hr, } ); if ( defined( $a_hr->{status} ) and $a_hr->{status} eq 'TRUE' ) { if ($verbose) { print "Successfully deregistered [$module].\n"; } } else { print "EXCEPTION: Can not deregister!\n"; print "The module that was tried to be deregisered: [$module].\n"; if ( defined $a_hr->{status} ) { print 'Message from the server: ' . $a_hr->{msg} . "\n"; } exit 1; } } sub add_module_to_task { my ( $self, $arg_r ) = @_; my $task = ( exists $arg_r->{task} ) ? $self->l( $arg_r->{task} ) : $self->perr('task'); my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); my $a_hr = $rpc->xmlrpc( { cmd => 'cipux_task_add_member_to_task', param_hr => { object => $task, value => $module }, } ); if ( defined( $a_hr->{status} ) and $a_hr->{status} eq 'TRUE' ) { if ($verbose) { print "Successfully added to task [$task]\n"; } } else { print "EXCEPTION: Could not add module to task!\n"; print "The module that was tried to be added: [$module].\n"; print "The task that was targeted: [$task].\n"; if ( defined $a_hr->{status} ) { print 'Message from the server: ' . $a_hr->{msg} . "\n"; } exit 1; } return; } sub remove_module_from_task { my ( $self, $arg_r ) = @_; my $task = ( exists $arg_r->{task} ) ? $self->l( $arg_r->{task} ) : $self->perr('task'); my $module = ( exists $arg_r->{module} ) ? $self->l( $arg_r->{module} ) : $self->perr('module'); my $l = get_logger(__PACKAGE__); my $a_hr = {}; eval { $a_hr = $rpc->xmlrpc( { cmd => 'cipux_task_remove_member_from_task', param_hr => { object => $task, value => $module }, } ); if ( defined( $a_hr->{status} ) and $a_hr->{status} eq 'TRUE' ) { if ($verbose) { print "Sucessfully removed from task [$task]\n"; } } else { print "EXCEPTION: Could not remove module from task!\n"; print "The module that was tried to be added: [$module].\n"; print "The task that was targeted: [$task].\n"; if ( defined $a_hr->{status} ) { print 'Message from the server: ' . $a_hr->{msg} . "\n"; } exit 1; } }; if ($EVAL_ERROR) { warn "WARNING: module could not be removed from task [$task]! Already removed?\n"; } return; } sub exc_no_config { my ( $self, $arg_r ) = @_; my $data = ( exists $arg_r->{data} ) ? $self->l( $arg_r->{data} ) : $self->perr('data'); return <<"END_EXC"; $L EXCEPTION: registration is impossible: there is no data for that object. $data The reason for this is, that there is no configuration data for that object. This could either mean the module is already registered or that the module you requested to register is not installed. Make sure the name of the module is correct. If uncertain then use --list-deregistered option to get a list of valid names. $L END_EXC } } 1; __END__ I18N000755001750001750 011413636115 20047 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Webda.po000444001750001750 7006011413636115 21153 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# Danish translations for cipux-cat-web package # Copyright (C) 2008,2010 Jonas Smedegaard # This file is distributed under the same license as the cipux-cat-web package. # Jonas Smedegaard , 2008. # msgid "" msgstr "" "Project-Id-Version: CipUX-CAT-Web 3.4.0.2\n" "Report-Msgid-Bugs-To: cipux-devel@cipux.org\n" "POT-Creation-Date: 2008-08-05 18:51+0200\n" "PO-Revision-Date: 2010-01-11 04:55+0100\n" "Last-Translator: Jonas Smedegaard \n" "Language-Team: None\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 #: tpl/Zeuthen/basic_object/list.html:16 #: tpl/Zeuthen/module_switch/index.html:15 #: tpl/default/basic_object/list.html:54 msgid "Action" msgstr "Handling" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 #: tpl/default/serverinfo/index.html:26 msgid "Attribute" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "Primær gruppeadministration" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "Primær objektadministration" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "Primær administratorklassetildeling" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "Primær administrator-administration" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "Primær administratorrolle-tildeling" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "Primær klassetildeling" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "Primær klasserolletildeling" #: tpl/default/translation/translation.html:79 msgid "Basic module access" msgstr "Primær moduladgang" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "Primær elevklassetildeling" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "Primær elevadministration" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "Primær elevrolletildeling" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "Primær lærerklassetildeling" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "Primær læreradministration" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "Primær lærerrolletildeling" #: tpl/default/translation/translation.html:51 msgid "Berlin" msgstr "Berlin" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "Gennemse CAT-moduldata" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 #: tpl/default/footer/index.html:3 msgid "CAT" msgstr "CAT" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 #: tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "CAT - CipUX Administrationsværktøj" #: tpl/Berlin/module_custody/index.html:16 #: tpl/default/module_custody/index.html:20 msgid "CAT-Web" msgstr "CAT-Web" #: tpl/Berlin/module_custody/index.html:19 #: tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "CAT-Web Adgang aktiveret" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "CAT-Web adgang aktiveret" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 #: tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "" #: tpl/default/translation/translation.html:77 msgid "Choose a language" msgstr "Vælg et sprog" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "Vælg et tema" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 #: tpl/default/basic_object/list.html:46 msgid "Count" msgstr "Antal" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "Dansk" #: tpl/Berlin/module_custody/index.html:18 #: tpl/Zeuthen/module_custody/index.html:11 #: tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "Database registreret" #: tpl/default/login/index.html:54 msgid "Demo restored" msgstr "Demo genskabt" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 #: tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "Engelsk" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 #: tpl/default/error/index.html:30 msgid "Error" msgstr "" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 #: tpl/default/exception/index.html:30 msgid "Exception" msgstr "Undtagelse" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 #: tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 #, fuzzy msgid "File system" msgstr "Filsystem installeret" #: tpl/Berlin/module_custody/index.html:17 #: tpl/Zeuthen/module_custody/index.html:10 #: tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "Filsystem installeret" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 #: tpl/default/basic_object/list.html:50 msgid "Firstname" msgstr "Fornavn" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 #: tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 #: tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 #: tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "Fransk" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "Tysk" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 #: tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 #: tpl/default/basic_object/list.html:47 #: tpl/default/translation/translation.html:10 #: tpl/default/translation/translation.html:16 #: tpl/default/translation/translation.html:17 msgid "ID" msgstr "ID" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 #: tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "Japansk" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 #: tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "Sprog" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 #: tpl/default/basic_object/list.html:49 msgid "Lastname" msgstr "Efternavn" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 #: tpl/default/login/index.html:28 msgid "Login" msgstr "Log på" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 #: tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "Pålogning til CAT" #: tpl/default/translation/translation.html:81 msgid "Manage CAT modules" msgstr "Administrér CAT-moduler" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 msgid "Module Browser" msgstr "modulvælger" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "Modulgenemsyn: Moduler installeret i filsystemet" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 #: tpl/default/module_custody/index.html:11 msgid "Module Custody" msgstr "Modulvedligehold" #: tpl/Berlin/module_custody/index.html:14 #: tpl/Zeuthen/module_custody/index.html:8 #: tpl/default/module_custody/index.html:18 msgid "Module ID" msgstr "Modul-ID" #: lib/CipUX/CAT/Web/Module/Index.pm:189 msgid "Module Index" msgstr "Moduloversigt" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 msgid "Module Switch" msgstr "Modulomskifter" #: tpl/Berlin/module_custody/index.html:15 #: tpl/Berlin/module_switch/index.html:44 #: tpl/Zeuthen/module_custody/index.html:9 #: tpl/Zeuthen/module_switch/index.html:13 #: tpl/default/module_custody/index.html:19 msgid "Module name" msgstr "Modulnavn" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 #: tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 #, fuzzy msgid "Node name" msgstr "Modulnavn" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 #: lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "OK" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 #: tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 msgid "Object %s has been removed from course %s." msgstr "Objektet %s er fjernet fra kurset %s." #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 #: tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 #: tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 #: tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "Adgangskode" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 #, fuzzy msgid "Perl module versions" msgstr "moduloversigt" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr " " #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "Vælg et sprog" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "Vælg et tema" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 #: tpl/default/basic_object/list.html:53 msgid "Repeat password" msgstr "Gentag adgangskode" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 #: tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 #: tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "" #: tpl/Berlin/module_switch/index.html:45 #: tpl/Zeuthen/module_switch/index.html:14 msgid "Short description" msgstr "Kort beskrivelse" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "Aktivér/deaktivér moduler" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 msgid "The object %s has been added to %s." msgstr "Objektet %s er blevet føjet til %s." #: lib/CipUX/CAT/Web/Controller.pm:819 msgid "The session got invalid. Please login again." msgstr "Kørslen udløb. Log på ingen." #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "Opgaverne for moduler som er installeret i filsystemet" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 #: tpl/default/login/index.html:40 msgid "Theme" msgstr "Tema" #: tpl/default/module_browser/index.html:20 msgid "" "This CAT module browser shows all CAT modules installed on the system, " "regardless if you can use them or not. More information about making a " "module usable to the system see the bottom of the page. If you miss some " "module, you have to install it as root on the filesystem from source or with " "your favorite package manager. This page can help you to find out if your " "installation was successful." msgstr "" "Dette CAT-modul gennemsyn viser alle CAT-moduler installeret på systemet, " "uanset om du kan bruge dem eller ej. Mere information om at gøre moduler " "brugbare for systemet står nederst på siden. Hvis du mangler nogle moduler, " "skal du installere dem som administrator (root) i filsystemet fra kildekode " "eller med dit foretrukne pakkehåndteringsværktøj. Denne side kan hjælpe til " "at finde frem til om din installation lykkedes." #: tpl/default/module_switch/index.html:41 msgid "" "This module switch shows all registered CAT modules. CAT modules with a " "green color are enabled for the index (home - start page). The red color " "indicates that they are disabled for the index." msgstr "" "Dette modulvalg viser alle registrerede CAT-moduler. CAT-moduler vist med " "grøn er aktiveret i oversigten (startsiden). Rød indikerer at de er " "deaktiveret for oversigten." #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 #: tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "For adgang til CAT skal du angive brugernavn og adgangskode..." #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "" "For at bruge et modul skal du registrere og aktivere det med kommandoen:\n" " cipux_cat_module --register --object NAME --enable" #. ('Module::List::Pluggable') #. ($m) #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 msgid "To use this module, please install [_1]!" msgstr "" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 #: tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 #: tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 #: tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 #: tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 #: tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 #: tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "" #: tpl/Berlin/basic_object/create.html:60 #: tpl/default/basic_object/create.html:62 msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "Brug: angiv ny unik ID og samme adgangskode angivet 2 gange." #: tpl/Berlin/basic_object/create.html:56 #: tpl/default/basic_object/create.html:52 msgid "" "Usage: please give new unique ID, firstname, lastname and 2 identical " "passwords." msgstr "" "Brug: angiv ny unik ID, fornavn, efternavn og samme adgangskode angivet 2 " "gange." #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 #: tpl/default/serverinfo/index.html:27 msgid "Value" msgstr "" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 #, fuzzy msgid "Version" msgstr "version" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "Zeuthen" #: tpl/Berlin/basic_assignment/group.html:52 #: tpl/Zeuthen/basic_assignment/group.html:9 #: tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "handling" #: tpl/Berlin/basic_assignment/index.html:42 #: tpl/Zeuthen/basic_assignment/index.html:9 #: tpl/default/basic_assignment/index.html:44 msgid "action on object member" msgstr "handling på objektmedlem" #: lib/CipUX/CAT/Web/Module/Index.pm:172 msgid "admin" msgstr "administrator" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "administratorklassetildeling" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "administratorrolletildeling" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: tpl/default/translation/translation.html:46 msgid "admit" msgstr "godtag" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 msgid "admit member" msgstr "godtag medlem" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 #: tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 msgid "avail" msgstr "" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 #: tpl/default/footer/index.html:7 msgid "back" msgstr "tilbage" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "tilbage til oversigt" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 #: tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 #: tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 #: tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 #: tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 #: tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 #, fuzzy msgid "bytes" msgstr "ja" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 msgid "cancel" msgstr "afbryd" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 #: lib/CipUX/CAT/Web/Module/Chooser.pm:130 msgid "change" msgstr "skift" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "klasse" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "klasserolletildeling" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "kursus" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:479 #: tpl/Berlin/basic_object/create.html:7 #: tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "opret" #: tpl/Berlin/basic_object/create.html:20 #: tpl/default/basic_object/create.html:12 msgid "create new object" msgstr "opret nyt objekt" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 #: tpl/default/status_line/index.html:30 msgid "date" msgstr "dato" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 msgid "default" msgstr "standard" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "delete" msgstr "slet" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 #: tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #: tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "afvis" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 msgid "dismiss member" msgstr "afvis medlem" #: tpl/Berlin/module_switch/index.html:43 #: tpl/Zeuthen/module_switch/index.html:12 msgid "enabled" msgstr "aktiveret" #: tpl/Berlin/basic_object/create.html:30 #: tpl/Zeuthen/basic_object/create.html:17 #: tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "fornavn" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "gruppe" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 #: tpl/Zeuthen/index/index.html:8 msgid "home" msgstr "hjem" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 #: tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 #: tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "oversigt" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 #: tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 #: tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "" #: tpl/default/translation/translation.html:38 msgid "language" msgstr "sprog" #: tpl/Berlin/basic_object/create.html:34 #: tpl/Zeuthen/basic_object/create.html:21 #: tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "efternavn" #: tpl/default/translation/translation.html:36 msgid "lecture" msgstr "lektion" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "underviser" #: tpl/default/translation/translation.html:45 msgid "list" msgstr "liste" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "vis medlem" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 #: tpl/default/status_line/index.html:40 msgid "locale" msgstr "Sprog" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 #: tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 #: tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "log på" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 #: tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 #: tpl/default/translation/translation.html:27 msgid "logout" msgstr "log af" #: tpl/default/translation/translation.html:41 msgid "module access" msgstr "moduladgang" #: tpl/default/translation/translation.html:39 msgid "module browser" msgstr "modulvælger" #: tpl/default/translation/translation.html:42 msgid "module custody" msgstr "modulvedligehold" #: tpl/default/translation/translation.html:72 msgid "module overview" msgstr "moduloversigt" #: tpl/default/translation/translation.html:40 msgid "module switch" msgstr "modulskift" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 #: tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 #, fuzzy msgid "mount" msgstr "Antal" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "" #: tpl/Berlin/module_custody/index.html:58 #: tpl/Berlin/module_custody/index.html:64 #: tpl/default/module_custody/index.html:36 #: tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "kan ignoreres" #: tpl/Berlin/basic_object/create.html:25 #: tpl/Zeuthen/basic_object/create.html:12 #: tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "ny ID (pålogning)" #: tpl/Berlin/basic_object/create.html:39 #: tpl/Zeuthen/basic_object/create.html:26 #: tpl/default/basic_object/create.html:32 msgid "new password" msgstr "ny adgangskode" #: tpl/Berlin/module_custody/index.html:31 #: tpl/Berlin/module_custody/index.html:39 #: tpl/Berlin/module_custody/index.html:49 #: tpl/Berlin/module_custody/index.html:62 #: tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:25 #: tpl/Zeuthen/module_custody/index.html:32 #: tpl/Zeuthen/module_custody/index.html:40 #: tpl/Zeuthen/module_switch/index.html:25 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:30 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:40 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "nej" #: tpl/Berlin/basic_assignment/group.html:51 #: tpl/Berlin/basic_assignment/index.html:39 #: tpl/Zeuthen/basic_assignment/group.html:8 #: tpl/Zeuthen/basic_assignment/index.html:6 #: tpl/default/basic_assignment/group.html:52 #: tpl/default/basic_assignment/index.html:41 msgid "object" msgstr "objekt" #: tpl/default/translation/translation.html:83 #, fuzzy msgid "perlversion" msgstr "version" #: tpl/default/translation/translation.html:23 msgid "professor" msgstr "professor" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "elev" #: tpl/default/translation/translation.html:37 msgid "reading" msgstr "forelæsning" #: tpl/Berlin/basic_object/create.html:43 #: tpl/Zeuthen/basic_object/create.html:30 #: tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "gentag ny adgangskode" #: tpl/default/translation/translation.html:35 msgid "seminar" msgstr "seminar" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 #: tpl/default/status_line/index.html:8 msgid "server" msgstr "server" #: tpl/default/translation/translation.html:84 #, fuzzy msgid "serverinfo" msgstr "server" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 #: tpl/default/status_line/index.html:51 msgid "session" msgstr "kørsel" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "angiv" #: tpl/Berlin/module_browser/index.html:29 #: tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "vis opgave" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 #: tpl/default/status_line/index.html:18 msgid "status" msgstr "status" #: tpl/default/translation/translation.html:21 msgid "student" msgstr "studerende" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "elevklassestildeling" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "elevrolletildeling" #: tpl/default/translation/translation.html:29 msgid "study-group" msgstr "strudiegruppe" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "lærer" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "lærerklassetildeling" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "lærerrolletildeling" #: tpl/default/translation/translation.html:32 msgid "team" msgstr "hold" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 #: tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 #: tpl/default/status_line/index.html:45 #: tpl/default/translation/translation.html:44 msgid "theme" msgstr "tema" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 #: tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 #, fuzzy msgid "total" msgstr "vejledning" #: tpl/default/translation/translation.html:26 msgid "tutor" msgstr "vejleder" #: tpl/default/translation/translation.html:34 msgid "tutorial" msgstr "vejledning" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 #: tpl/Berlin/module_custody/index.html:41 #: tpl/default/module_custody/index.html:30 #: tpl/default/translation/translation.html:48 msgid "unknown" msgstr "ukendt" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 #: tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 #, fuzzy msgid "used" msgstr "kursus" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "brugerliste" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 #: tpl/default/status_line/index.html:35 msgid "version" msgstr "version" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "workshop" #: tpl/Berlin/module_custody/index.html:29 #: tpl/Berlin/module_custody/index.html:36 #: tpl/Berlin/module_custody/index.html:47 #: tpl/Berlin/module_custody/index.html:56 #: tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:23 #: tpl/Zeuthen/module_custody/index.html:30 #: tpl/Zeuthen/module_custody/index.html:38 #: tpl/Zeuthen/module_switch/index.html:23 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:29 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:35 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "ja" #, fuzzy #~ msgid "Perl module version" #~ msgstr "moduloversigt" ja.po000444001750001750 7100711413636115 21163 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# LOCALE translation of templates for CipUX CAT-Web # Copyright (C) 2008 Christian Kuelker # This file is distributed under the same license as the cipux-cat-web package. # Christian Kuelker , 2008. msgid "" msgstr "" "Project-Id-Version: CipUX-CAT-Web 3.4.0.2\n" "PO-Revision-Date: 2010-01-03 20:58+0100\n" "Last-Translator: Christian Kuelker \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 #: tpl/Zeuthen/basic_object/list.html:16 #: tpl/Zeuthen/module_switch/index.html:15 #: tpl/default/basic_object/list.html:54 msgid "Action" msgstr "行動" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 #: tpl/default/serverinfo/index.html:26 msgid "Attribute" msgstr "属性" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "基本的な集団管理" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "基本的な物体管理" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "基本的な管理者クラス配属" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "基本的な管理者管理" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "基本的な管理者役割配属" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "基本的なクラス管理" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "基本的なクラス役割配属" #: tpl/default/translation/translation.html:79 msgid "Basic module access" msgstr "基本的なモジュールへのアクセス" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "基本的な学生クラス配属" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "基本的な学生管理" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "基本的な学生役割配属" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "基本的な教師クラス配属" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "基本的な教師管理" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "基本的な教師役割配属" #: tpl/default/translation/translation.html:51 msgid "Berlin" msgstr "ベルリン" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "CATモジュールデータ閲覧" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 #: tpl/default/footer/index.html:3 msgid "CAT" msgstr "CAT" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 #: tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "CAT - CipUX管理ツール" #: tpl/Berlin/module_custody/index.html:16 #: tpl/default/module_custody/index.html:20 msgid "CAT-Web" msgstr "CAT-ウェブ" #: tpl/Berlin/module_custody/index.html:19 #: tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "CAT-ウェブのアクセスを有効にした" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "CAT-ウェブのアクセスを有効にした" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 #: tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "CPU" #: tpl/default/translation/translation.html:77 msgid "Choose a language" msgstr "言語の選択" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "テーマの選択" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 #: tpl/default/basic_object/list.html:46 msgid "Count" msgstr "数" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "デンマーク語" #: tpl/Berlin/module_custody/index.html:18 #: tpl/Zeuthen/module_custody/index.html:11 #: tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "データベースに登録" #: tpl/default/login/index.html:54 msgid "Demo restored" msgstr "デモ復元" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 #: tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "ドメインネーム" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "英語" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 #: tpl/default/error/index.html:30 msgid "Error" msgstr "エラー" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 #: tpl/default/exception/index.html:30 msgid "Exception" msgstr "例外エラー" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 #: tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 msgid "File system" msgstr "ファイルシステム" #: tpl/Berlin/module_custody/index.html:17 #: tpl/Zeuthen/module_custody/index.html:10 #: tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "ファイルシステムにインストールされて" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 #: tpl/default/basic_object/list.html:50 msgid "Firstname" msgstr "名前" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 #: tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 #: tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 #: tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "空のメインメモリ" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "フランス語" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "ドイツ語" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 #: tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "ハードウェア" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 #: tpl/default/basic_object/list.html:47 #: tpl/default/translation/translation.html:10 #: tpl/default/translation/translation.html:16 #: tpl/default/translation/translation.html:17 msgid "ID" msgstr "身元" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 #: tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "IPアドレス" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "日本語" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 #: tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "言語" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 #: tpl/default/basic_object/list.html:49 msgid "Lastname" msgstr "名字" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 #: tpl/default/login/index.html:28 msgid "Login" msgstr "ログイン" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 #: tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "CATのログイン" #: tpl/default/translation/translation.html:81 msgid "Manage CAT modules" msgstr "CATモジュール管理" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 msgid "Module Browser" msgstr "モジュール・ブラウザ" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "モジュール・ブラウザ:モジュールは、ファイルシステム上にインストール" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 #: tpl/default/module_custody/index.html:11 msgid "Module Custody" msgstr "モジュールの親権" #: tpl/Berlin/module_custody/index.html:14 #: tpl/Zeuthen/module_custody/index.html:8 #: tpl/default/module_custody/index.html:18 msgid "Module ID" msgstr "モジュールの身元" #: lib/CipUX/CAT/Web/Module/Index.pm:189 msgid "Module Index" msgstr "モジュール索引" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 msgid "Module Switch" msgstr "モジュールのスイッチ" #: tpl/Berlin/module_custody/index.html:15 #: tpl/Berlin/module_switch/index.html:44 #: tpl/Zeuthen/module_custody/index.html:9 #: tpl/Zeuthen/module_switch/index.html:13 #: tpl/default/module_custody/index.html:19 msgid "Module name" msgstr "モジュールの名前" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "名前" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 #: tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 msgid "Node name" msgstr "ノード名" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 #: lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "了解" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 #: tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "OS名" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 msgid "Object %s has been removed from course %s." msgstr "" #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 #: tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "オペレーティングシステム" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 #: tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 #: tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "パスワード" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 msgid "Perl module versions" msgstr "Perlモジュールのバージョン" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr "お願い" #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "言語を選んで下さい" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "テーマをれあんで下さい" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 #: tpl/default/basic_object/list.html:53 msgid "Repeat password" msgstr "パスワードを繰り替えして下さい" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 #: tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "サーバー情報" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 #: tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "サービス" #: tpl/Berlin/module_switch/index.html:45 #: tpl/Zeuthen/module_switch/index.html:14 msgid "Short description" msgstr "短い説明" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "モジュールJをスイッチのオン/オフ" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 msgid "The object %s has been added to %s." msgstr "" #: lib/CipUX/CAT/Web/Controller.pm:819 msgid "The session got invalid. Please login again." msgstr "セッションを無効にりました。もう一度ログインして下さい。" #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "これはファイルシステム上にインストールされているモジュールのタスク" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 #: tpl/default/login/index.html:40 msgid "Theme" msgstr "テーマ" #: tpl/default/module_browser/index.html:20 msgid "" "This CAT module browser shows all CAT modules installed on the system, " "regardless if you can use them or not. More information about making a " "module usable to the system see the bottom of the page. If you miss some " "module, you have to install it as root on the filesystem from source or with " "your favorite package manager. This page can help you to find out if your " "installation was successful." msgstr "" #: tpl/default/module_switch/index.html:41 msgid "" "This module switch shows all registered CAT modules. CAT modules with a " "green color are enabled for the index (home - start page). The red color " "indicates that they are disabled for the index." msgstr "" #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 #: tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "CATにアクセスするには、ユーザ名とパスワードを入力する必要があります..." #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "" #. ('Module::List::Pluggable') #. ($m) #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 msgid "To use this module, please install [_1]!" msgstr "このモジュールを使用するには、[_1]をインストールするしてください!" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 #: tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "合計メインメモリ" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 #: tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "合計スワップメモリ" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 #: tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "システムの稼働時間" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 #: tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "システムの稼働時間(日間)" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 #: tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "システムの稼働時間(時間)" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 #: tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "システムの稼働時間(ヶ月長期)" #: tpl/Berlin/basic_object/create.html:60 #: tpl/default/basic_object/create.html:62 msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "使用方法:ご新しい一意のIDと2が同一のパスワードを与える。" #: tpl/Berlin/basic_object/create.html:56 #: tpl/default/basic_object/create.html:52 msgid "" "Usage: please give new unique ID, firstname, lastname and 2 identical " "passwords." msgstr "使用方法:ご新しい一意のID、名前、名字と2が同一のパスワードを与える。" #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 #: tpl/default/serverinfo/index.html:27 msgid "Value" msgstr "バリュー" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 msgid "Version" msgstr "バージョン" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "ツォイテン" #: tpl/Berlin/basic_assignment/group.html:52 #: tpl/Zeuthen/basic_assignment/group.html:9 #: tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "行動" #: tpl/Berlin/basic_assignment/index.html:42 #: tpl/Zeuthen/basic_assignment/index.html:9 #: tpl/default/basic_assignment/index.html:44 msgid "action on object member" msgstr "物体のメンバーに行動" #: lib/CipUX/CAT/Web/Module/Index.pm:172 msgid "admin" msgstr "管理者" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "管理者クラス配属" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "管理者役割配属" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: tpl/default/translation/translation.html:46 msgid "admit" msgstr "認める" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 msgid "admit member" msgstr "グループのメンバーを認める" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 #: tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 msgid "avail" msgstr "役に立つ" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 #: tpl/default/footer/index.html:7 msgid "back" msgstr "戻る" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "索引に戻る" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 #: tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 #: tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 #: tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 #: tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 #: tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 msgid "bytes" msgstr "バイト" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 msgid "cancel" msgstr "キャンセル" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 #: lib/CipUX/CAT/Web/Module/Chooser.pm:130 msgid "change" msgstr "変化" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "クラス" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "クラス役割配属" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "コース" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:479 #: tpl/Berlin/basic_object/create.html:7 #: tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "作成する" #: tpl/Berlin/basic_object/create.html:20 #: tpl/default/basic_object/create.html:12 msgid "create new object" msgstr "物体を作成する" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 #: tpl/default/status_line/index.html:30 msgid "date" msgstr "年月日" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 msgid "default" msgstr "既定" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "delete" msgstr "消す" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 #: tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "機器" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #: tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "却下" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 msgid "dismiss member" msgstr "グループのメンバーを却下" #: tpl/Berlin/module_switch/index.html:43 #: tpl/Zeuthen/module_switch/index.html:12 msgid "enabled" msgstr "有効" #: tpl/Berlin/basic_object/create.html:30 #: tpl/Zeuthen/basic_object/create.html:17 #: tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "名前" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "集団" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 #: tpl/Zeuthen/index/index.html:8 msgid "home" msgstr "索引" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 #: tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "ウェブサーバ" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 #: tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "索引" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 #: tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "BSDとは?" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 #: tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "Linuxとは?" #: tpl/default/translation/translation.html:38 msgid "language" msgstr "言語" #: tpl/Berlin/basic_object/create.html:34 #: tpl/Zeuthen/basic_object/create.html:21 #: tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "名字" #: tpl/default/translation/translation.html:36 msgid "lecture" msgstr "講義" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "講師" #: tpl/default/translation/translation.html:45 msgid "list" msgstr "リスト" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "メンバーを一覧する" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 #: tpl/default/status_line/index.html:40 msgid "locale" msgstr "言語" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 #: tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 #: tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "ログイン" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 #: tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 #: tpl/default/translation/translation.html:27 msgid "logout" msgstr "ログアウト" #: tpl/default/translation/translation.html:41 msgid "module access" msgstr "モジュールへのアクセス" #: tpl/default/translation/translation.html:39 msgid "module browser" msgstr "モジュールブラウザ" #: tpl/default/translation/translation.html:42 msgid "module custody" msgstr "モジュールの親権" #: tpl/default/translation/translation.html:72 msgid "module overview" msgstr "モジュール概要" #: tpl/default/translation/translation.html:40 msgid "module switch" msgstr "モジュールスイッチ" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 #: tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 msgid "mount" msgstr "マウントする" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "利用できません" #: tpl/Berlin/module_custody/index.html:58 #: tpl/Berlin/module_custody/index.html:64 #: tpl/default/module_custody/index.html:36 #: tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "無視" #: tpl/Berlin/basic_object/create.html:25 #: tpl/Zeuthen/basic_object/create.html:12 #: tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "新しい身元(ログイン)" #: tpl/Berlin/basic_object/create.html:39 #: tpl/Zeuthen/basic_object/create.html:26 #: tpl/default/basic_object/create.html:32 msgid "new password" msgstr "新しいパスワード" #: tpl/Berlin/module_custody/index.html:31 #: tpl/Berlin/module_custody/index.html:39 #: tpl/Berlin/module_custody/index.html:49 #: tpl/Berlin/module_custody/index.html:62 #: tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:25 #: tpl/Zeuthen/module_custody/index.html:32 #: tpl/Zeuthen/module_custody/index.html:40 #: tpl/Zeuthen/module_switch/index.html:25 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:30 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:40 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "いいえ" #: tpl/Berlin/basic_assignment/group.html:51 #: tpl/Berlin/basic_assignment/index.html:39 #: tpl/Zeuthen/basic_assignment/group.html:8 #: tpl/Zeuthen/basic_assignment/index.html:6 #: tpl/default/basic_assignment/group.html:52 #: tpl/default/basic_assignment/index.html:41 msgid "object" msgstr "物体" #: tpl/default/translation/translation.html:83 msgid "perlversion" msgstr "Perlのバージョン" #: tpl/default/translation/translation.html:23 msgid "professor" msgstr "教授" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "生徒" #: tpl/default/translation/translation.html:37 msgid "reading" msgstr "レディング" #: tpl/Berlin/basic_object/create.html:43 #: tpl/Zeuthen/basic_object/create.html:30 #: tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "新しいパスワードを繰り替えして下さい" #: tpl/default/translation/translation.html:35 msgid "seminar" msgstr "セミ" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 #: tpl/default/status_line/index.html:8 msgid "server" msgstr "サーバ" #: tpl/default/translation/translation.html:84 msgid "serverinfo" msgstr "サーバ情報" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 #: tpl/default/status_line/index.html:51 msgid "session" msgstr "セッション" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "セットする" #: tpl/Berlin/module_browser/index.html:29 #: tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "表示タスク" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 #: tpl/default/status_line/index.html:18 msgid "status" msgstr "ステータス" #: tpl/default/translation/translation.html:21 msgid "student" msgstr "学生" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "学生クラス配属" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "学生役割配属" #: tpl/default/translation/translation.html:29 msgid "study-group" msgstr "勉強会" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "教師" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "教師クラス配属" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "教師役割配属" #: tpl/default/translation/translation.html:32 msgid "team" msgstr "チーム" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 #: tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 #: tpl/default/status_line/index.html:45 #: tpl/default/translation/translation.html:44 msgid "theme" msgstr "テーマ" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 #: tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 msgid "total" msgstr "合計" #: tpl/default/translation/translation.html:26 msgid "tutor" msgstr "助手" #: tpl/default/translation/translation.html:34 msgid "tutorial" msgstr "学習用" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 #: tpl/Berlin/module_custody/index.html:41 #: tpl/default/module_custody/index.html:30 #: tpl/default/translation/translation.html:48 msgid "unknown" msgstr "不明" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 #: tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 msgid "used" msgstr "使用される" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "ユーザリスト" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 #: tpl/default/status_line/index.html:35 msgid "version" msgstr "バージョン" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "ワークショップ" #: tpl/Berlin/module_custody/index.html:29 #: tpl/Berlin/module_custody/index.html:36 #: tpl/Berlin/module_custody/index.html:47 #: tpl/Berlin/module_custody/index.html:56 #: tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:23 #: tpl/Zeuthen/module_custody/index.html:30 #: tpl/Zeuthen/module_custody/index.html:38 #: tpl/Zeuthen/module_switch/index.html:23 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:29 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:35 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "はい" messages.pot000444001750001750 6026511413636115 22570 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# LOCALE translation of templates for CipUX CAT-Web # Copyright (C) 2008 Christian Kuelker # This file is distributed under the same license as the cipux-cat-web package. # Christian Kuelker , 2008. #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 tpl/Zeuthen/basic_object/list.html:16 tpl/Zeuthen/module_switch/index.html:15 tpl/default/basic_object/list.html:54 msgid "Action" msgstr "" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 tpl/default/serverinfo/index.html:26 msgid "Attribute" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "" #: tpl/default/translation/translation.html:79 msgid "Basic module access" msgstr "" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "" #: tpl/default/translation/translation.html:51 msgid "Berlin" msgstr "" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 tpl/default/footer/index.html:3 msgid "CAT" msgstr "" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "" #: tpl/Berlin/module_custody/index.html:16 tpl/default/module_custody/index.html:20 msgid "CAT-Web" msgstr "" #: tpl/Berlin/module_custody/index.html:19 tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "" #: tpl/default/translation/translation.html:77 msgid "Choose a language" msgstr "" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 tpl/default/basic_object/list.html:46 msgid "Count" msgstr "" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "" #: tpl/Berlin/module_custody/index.html:18 tpl/Zeuthen/module_custody/index.html:11 tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "" #: tpl/default/login/index.html:54 msgid "Demo restored" msgstr "" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 tpl/default/error/index.html:30 msgid "Error" msgstr "" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 tpl/default/exception/index.html:30 msgid "Exception" msgstr "" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 msgid "File system" msgstr "" #: tpl/Berlin/module_custody/index.html:17 tpl/Zeuthen/module_custody/index.html:10 tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 tpl/default/basic_object/list.html:50 msgid "Firstname" msgstr "" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 tpl/default/basic_object/list.html:47 tpl/default/translation/translation.html:10 tpl/default/translation/translation.html:16 tpl/default/translation/translation.html:17 msgid "ID" msgstr "" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 tpl/default/basic_object/list.html:49 msgid "Lastname" msgstr "" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 tpl/default/login/index.html:28 msgid "Login" msgstr "" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "" #: tpl/default/translation/translation.html:81 msgid "Manage CAT modules" msgstr "" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 msgid "Module Browser" msgstr "" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 tpl/default/module_custody/index.html:11 msgid "Module Custody" msgstr "" #: tpl/Berlin/module_custody/index.html:14 tpl/Zeuthen/module_custody/index.html:8 tpl/default/module_custody/index.html:18 msgid "Module ID" msgstr "" #: lib/CipUX/CAT/Web/Module/Index.pm:189 msgid "Module Index" msgstr "" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 msgid "Module Switch" msgstr "" #: tpl/Berlin/module_custody/index.html:15 tpl/Berlin/module_switch/index.html:44 tpl/Zeuthen/module_custody/index.html:9 tpl/Zeuthen/module_switch/index.html:13 tpl/default/module_custody/index.html:19 msgid "Module name" msgstr "" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 msgid "Node name" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 msgid "Object %s has been removed from course %s." msgstr "" #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 msgid "Perl module versions" msgstr "" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 tpl/default/basic_object/list.html:53 msgid "Repeat password" msgstr "" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "" #: tpl/Berlin/module_switch/index.html:45 tpl/Zeuthen/module_switch/index.html:14 msgid "Short description" msgstr "" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 msgid "The object %s has been added to %s." msgstr "" #: lib/CipUX/CAT/Web/Controller.pm:819 msgid "The session got invalid. Please login again." msgstr "" #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 tpl/default/login/index.html:40 msgid "Theme" msgstr "" #: tpl/default/module_browser/index.html:20 msgid "This CAT module browser shows all CAT modules installed on the system, regardless if you can use them or not. More information about making a module usable to the system see the bottom of the page. If you miss some module, you have to install it as root on the filesystem from source or with your favorite package manager. This page can help you to find out if your installation was successful." msgstr "" #: tpl/default/module_switch/index.html:41 msgid "This module switch shows all registered CAT modules. CAT modules with a green color are enabled for the index (home - start page). The red color indicates that they are disabled for the index." msgstr "" #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "" #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 #. ('Module::List::Pluggable') #. ($m) msgid "To use this module, please install [_1]!" msgstr "" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "" #: tpl/Berlin/basic_object/create.html:60 tpl/default/basic_object/create.html:62 msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "" #: tpl/Berlin/basic_object/create.html:56 tpl/default/basic_object/create.html:52 msgid "Usage: please give new unique ID, firstname, lastname and 2 identical passwords." msgstr "" #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 tpl/default/serverinfo/index.html:27 msgid "Value" msgstr "" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 msgid "Version" msgstr "" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "" #: tpl/Berlin/basic_assignment/group.html:52 tpl/Zeuthen/basic_assignment/group.html:9 tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "" #: tpl/Berlin/basic_assignment/index.html:42 tpl/Zeuthen/basic_assignment/index.html:9 tpl/default/basic_assignment/index.html:44 msgid "action on object member" msgstr "" #: lib/CipUX/CAT/Web/Module/Index.pm:172 msgid "admin" msgstr "" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 tpl/default/translation/translation.html:46 msgid "admit" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 msgid "admit member" msgstr "" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 msgid "avail" msgstr "" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 tpl/default/footer/index.html:7 msgid "back" msgstr "" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 msgid "bytes" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 msgid "cancel" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 lib/CipUX/CAT/Web/Module/Chooser.pm:130 msgid "change" msgstr "" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 lib/CipUX/CAT/Web/Module/BasicObject.pm:479 tpl/Berlin/basic_object/create.html:7 tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "" #: tpl/Berlin/basic_object/create.html:20 tpl/default/basic_object/create.html:12 msgid "create new object" msgstr "" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 tpl/default/status_line/index.html:30 msgid "date" msgstr "" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 msgid "default" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "delete" msgstr "" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 msgid "dismiss member" msgstr "" #: tpl/Berlin/module_switch/index.html:43 tpl/Zeuthen/module_switch/index.html:12 msgid "enabled" msgstr "" #: tpl/Berlin/basic_object/create.html:30 tpl/Zeuthen/basic_object/create.html:17 tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 tpl/Zeuthen/index/index.html:8 msgid "home" msgstr "" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "" #: tpl/default/translation/translation.html:38 msgid "language" msgstr "" #: tpl/Berlin/basic_object/create.html:34 tpl/Zeuthen/basic_object/create.html:21 tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "" #: tpl/default/translation/translation.html:36 msgid "lecture" msgstr "" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "" #: tpl/default/translation/translation.html:45 msgid "list" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 tpl/default/status_line/index.html:40 msgid "locale" msgstr "" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 tpl/default/translation/translation.html:27 msgid "logout" msgstr "" #: tpl/default/translation/translation.html:41 msgid "module access" msgstr "" #: tpl/default/translation/translation.html:39 msgid "module browser" msgstr "" #: tpl/default/translation/translation.html:42 msgid "module custody" msgstr "" #: tpl/default/translation/translation.html:72 msgid "module overview" msgstr "" #: tpl/default/translation/translation.html:40 msgid "module switch" msgstr "" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 msgid "mount" msgstr "" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "" #: tpl/Berlin/module_custody/index.html:58 tpl/Berlin/module_custody/index.html:64 tpl/default/module_custody/index.html:36 tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "" #: tpl/Berlin/basic_object/create.html:25 tpl/Zeuthen/basic_object/create.html:12 tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "" #: tpl/Berlin/basic_object/create.html:39 tpl/Zeuthen/basic_object/create.html:26 tpl/default/basic_object/create.html:32 msgid "new password" msgstr "" #: tpl/Berlin/module_custody/index.html:31 tpl/Berlin/module_custody/index.html:39 tpl/Berlin/module_custody/index.html:49 tpl/Berlin/module_custody/index.html:62 tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 tpl/Berlin/serverinfo/index.html:32 tpl/Zeuthen/module_custody/index.html:25 tpl/Zeuthen/module_custody/index.html:32 tpl/Zeuthen/module_custody/index.html:40 tpl/Zeuthen/module_switch/index.html:25 tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 tpl/default/module_custody/index.html:28 tpl/default/module_custody/index.html:30 tpl/default/module_custody/index.html:32 tpl/default/module_custody/index.html:40 tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "" #: tpl/Berlin/basic_assignment/group.html:51 tpl/Berlin/basic_assignment/index.html:39 tpl/Zeuthen/basic_assignment/group.html:8 tpl/Zeuthen/basic_assignment/index.html:6 tpl/default/basic_assignment/group.html:52 tpl/default/basic_assignment/index.html:41 msgid "object" msgstr "" #: tpl/default/translation/translation.html:83 msgid "perlversion" msgstr "" #: tpl/default/translation/translation.html:23 msgid "professor" msgstr "" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "" #: tpl/default/translation/translation.html:37 msgid "reading" msgstr "" #: tpl/Berlin/basic_object/create.html:43 tpl/Zeuthen/basic_object/create.html:30 tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "" #: tpl/default/translation/translation.html:35 msgid "seminar" msgstr "" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 tpl/default/status_line/index.html:8 msgid "server" msgstr "" #: tpl/default/translation/translation.html:84 msgid "serverinfo" msgstr "" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 tpl/default/status_line/index.html:51 msgid "session" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "" #: tpl/Berlin/module_browser/index.html:29 tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 tpl/default/status_line/index.html:18 msgid "status" msgstr "" #: tpl/default/translation/translation.html:21 msgid "student" msgstr "" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "" #: tpl/default/translation/translation.html:29 msgid "study-group" msgstr "" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "" #: tpl/default/translation/translation.html:32 msgid "team" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 tpl/default/status_line/index.html:45 tpl/default/translation/translation.html:44 msgid "theme" msgstr "" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 msgid "total" msgstr "" #: tpl/default/translation/translation.html:26 msgid "tutor" msgstr "" #: tpl/default/translation/translation.html:34 msgid "tutorial" msgstr "" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 tpl/Berlin/module_custody/index.html:41 tpl/default/module_custody/index.html:30 tpl/default/translation/translation.html:48 msgid "unknown" msgstr "" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 msgid "used" msgstr "" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 tpl/default/status_line/index.html:35 msgid "version" msgstr "" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "" #: tpl/Berlin/module_custody/index.html:29 tpl/Berlin/module_custody/index.html:36 tpl/Berlin/module_custody/index.html:47 tpl/Berlin/module_custody/index.html:56 tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 tpl/Berlin/serverinfo/index.html:32 tpl/Zeuthen/module_custody/index.html:23 tpl/Zeuthen/module_custody/index.html:30 tpl/Zeuthen/module_custody/index.html:38 tpl/Zeuthen/module_switch/index.html:23 tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 tpl/default/module_custody/index.html:28 tpl/default/module_custody/index.html:29 tpl/default/module_custody/index.html:32 tpl/default/module_custody/index.html:35 tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "" en.po000444001750001750 14501711413636115 21216 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# English translations for cipux-cat-web package # Copyright (C) 2007 Christian Kuelker # This file is distributed under the same license as the cipux package. # Christian Kuelker , 2007. # msgid "" msgstr "" "Project-Id-Version: CipUX-CAT-Web 3.4.0.2\n" "Report-Msgid-Bugs-To: cipux-devel@cipux.org\n" "POT-Creation-Date: 2008-08-05 18:51+0200\n" "PO-Revision-Date: 2007-08-01 05:27+0200\n" "Last-Translator: Christian Kuelker \n" "Language-Team: English\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 #: tpl/Zeuthen/basic_object/list.html:16 #: tpl/Zeuthen/module_switch/index.html:15 #: tpl/default/basic_object/list.html:54 #, fuzzy msgid "Action" msgstr "action" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 #: tpl/default/serverinfo/index.html:26 #, fuzzy msgid "Attribute" msgstr "static attribute" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "" #: tpl/default/translation/translation.html:79 #, fuzzy msgid "Basic module access" msgstr "Exception: Module Access dienied" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "" #: tpl/default/translation/translation.html:51 #, fuzzy msgid "Berlin" msgstr "version" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 #: tpl/default/footer/index.html:3 msgid "CAT" msgstr "CAT" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 #: tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "CAT - CipUX Administration Tool" #: tpl/Berlin/module_custody/index.html:16 #: tpl/default/module_custody/index.html:20 #, fuzzy msgid "CAT-Web" msgstr "CAT" #: tpl/Berlin/module_custody/index.html:19 #: tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 #: tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "" #: tpl/default/translation/translation.html:77 #, fuzzy msgid "Choose a language" msgstr "Language" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 #: tpl/default/basic_object/list.html:46 msgid "Count" msgstr "" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "" #: tpl/Berlin/module_custody/index.html:18 #: tpl/Zeuthen/module_custody/index.html:11 #: tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "" #: tpl/default/login/index.html:54 #, fuzzy msgid "Demo restored" msgstr "restore" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 #: tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 #: tpl/default/error/index.html:30 #, fuzzy msgid "Error" msgstr "Error:" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 #: tpl/default/exception/index.html:30 #, fuzzy msgid "Exception" msgstr "Exception:" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 #: tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 msgid "File system" msgstr "" #: tpl/Berlin/module_custody/index.html:17 #: tpl/Zeuthen/module_custody/index.html:10 #: tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 #: tpl/default/basic_object/list.html:50 #, fuzzy msgid "Firstname" msgstr "firstname" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 #: tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 #: tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 #: tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 #: tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 #: tpl/default/basic_object/list.html:47 #: tpl/default/translation/translation.html:10 #: tpl/default/translation/translation.html:16 #: tpl/default/translation/translation.html:17 msgid "ID" msgstr "ID" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 #: tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 #: tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "Language" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 #: tpl/default/basic_object/list.html:49 #, fuzzy msgid "Lastname" msgstr "lastname" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 #: tpl/default/login/index.html:28 #, fuzzy msgid "Login" msgstr "Linux" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 #: tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "Login to CAT" #: tpl/default/translation/translation.html:81 #, fuzzy msgid "Manage CAT modules" msgstr "list all CGIs" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 #, fuzzy msgid "Module Browser" msgstr "new role" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 #: tpl/default/module_custody/index.html:11 msgid "Module Custody" msgstr "" #: tpl/Berlin/module_custody/index.html:14 #: tpl/Zeuthen/module_custody/index.html:8 #: tpl/default/module_custody/index.html:18 msgid "Module ID" msgstr "" #: lib/CipUX/CAT/Web/Module/Index.pm:189 #, fuzzy msgid "Module Index" msgstr "new role" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 msgid "Module Switch" msgstr "" #: tpl/Berlin/module_custody/index.html:15 #: tpl/Berlin/module_switch/index.html:44 #: tpl/Zeuthen/module_custody/index.html:9 #: tpl/Zeuthen/module_switch/index.html:13 #: tpl/default/module_custody/index.html:19 msgid "Module name" msgstr "" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 #: tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 msgid "Node name" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 #: lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "OK" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 #: tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 msgid "Object %s has been removed from course %s." msgstr "Object %s has been removed from course %s." #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 #: tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 #: tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 #: tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "Password" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 #, fuzzy msgid "Perl module versions" msgstr "new role" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 #: tpl/default/basic_object/list.html:53 #, fuzzy msgid "Repeat password" msgstr "repeat password" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 #: tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 #: tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "" #: tpl/Berlin/module_switch/index.html:45 #: tpl/Zeuthen/module_switch/index.html:14 #, fuzzy msgid "Short description" msgstr "Description:" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 #, fuzzy msgid "The object %s has been added to %s." msgstr "The object %s has been added to the course %s." #: lib/CipUX/CAT/Web/Controller.pm:819 #, fuzzy msgid "The session got invalid. Please login again." msgstr "Details: Please login again." #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 #: tpl/default/login/index.html:40 msgid "Theme" msgstr "Theme" #: tpl/default/module_browser/index.html:20 msgid "" "This CAT module browser shows all CAT modules installed on the system, " "regardless if you can use them or not. More information about making a " "module usable to the system see the bottom of the page. If you miss some " "module, you have to install it as root on the filesystem from source or with " "your favorite package manager. This page can help you to find out if your " "installation was successful." msgstr "" #: tpl/default/module_switch/index.html:41 msgid "" "This module switch shows all registered CAT modules. CAT modules with a " "green color are enabled for the index (home - start page). The red color " "indicates that they are disabled for the index." msgstr "" #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 #: tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "" #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "" #. ('Module::List::Pluggable') #. ($m) #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 msgid "To use this module, please install [_1]!" msgstr "" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 #: tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 #: tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 #: tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 #: tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 #: tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 #: tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "" #: tpl/Berlin/basic_object/create.html:60 #: tpl/default/basic_object/create.html:62 #, fuzzy msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "Usage: please give new unique ID (role name) and 2 identical passwords" #: tpl/Berlin/basic_object/create.html:56 #: tpl/default/basic_object/create.html:52 #, fuzzy msgid "" "Usage: please give new unique ID, firstname, lastname and 2 identical " "passwords." msgstr "Usage: please give new unique ID (role name) and 2 identical passwords" #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 #: tpl/default/serverinfo/index.html:27 #, fuzzy msgid "Value" msgstr "value" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 #, fuzzy msgid "Version" msgstr "version" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "" #: tpl/Berlin/basic_assignment/group.html:52 #: tpl/Zeuthen/basic_assignment/group.html:9 #: tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "action" #: tpl/Berlin/basic_assignment/index.html:42 #: tpl/Zeuthen/basic_assignment/index.html:9 #: tpl/default/basic_assignment/index.html:44 #, fuzzy msgid "action on object member" msgstr "action on group member" #: lib/CipUX/CAT/Web/Module/Index.pm:172 #, fuzzy msgid "admin" msgstr "useradmin" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: tpl/default/translation/translation.html:46 #, fuzzy msgid "admit" msgstr "useradmin" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 #, fuzzy msgid "admit member" msgstr "list member" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 #: tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 #, fuzzy msgid "avail" msgstr "value" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 #: tpl/default/footer/index.html:7 msgid "back" msgstr "back" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 #: tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 #: tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 #: tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 #: tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 #: tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 msgid "bytes" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #, fuzzy msgid "cancel" msgstr "cancel" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 #: lib/CipUX/CAT/Web/Module/Chooser.pm:130 #, fuzzy msgid "change" msgstr "cancel" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "class" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:479 #: tpl/Berlin/basic_object/create.html:7 #: tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "create" #: tpl/Berlin/basic_object/create.html:20 #: tpl/default/basic_object/create.html:12 msgid "create new object" msgstr "create new object" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 #: tpl/default/status_line/index.html:30 msgid "date" msgstr "date" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 #, fuzzy msgid "default" msgstr "delete" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 #, fuzzy msgid "delete" msgstr "delete" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 #: tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #: tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 #, fuzzy msgid "dismiss member" msgstr "list member" #: tpl/Berlin/module_switch/index.html:43 #: tpl/Zeuthen/module_switch/index.html:12 #, fuzzy msgid "enabled" msgstr "Enabled" #: tpl/Berlin/basic_object/create.html:30 #: tpl/Zeuthen/basic_object/create.html:17 #: tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "firstname" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "group" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 #: tpl/Zeuthen/index/index.html:8 #, fuzzy msgid "home" msgstr "Theme" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 #: tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 #: tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 #: tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 #: tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "" #: tpl/default/translation/translation.html:38 #, fuzzy msgid "language" msgstr "Language" #: tpl/Berlin/basic_object/create.html:34 #: tpl/Zeuthen/basic_object/create.html:21 #: tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "lastname" #: tpl/default/translation/translation.html:36 #, fuzzy msgid "lecture" msgstr "delete" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "" #: tpl/default/translation/translation.html:45 #, fuzzy msgid "list" msgstr "userlist" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "list member" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 #: tpl/default/status_line/index.html:40 msgid "locale" msgstr "locale" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 #: tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 #: tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 #: tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 #: tpl/default/translation/translation.html:27 msgid "logout" msgstr "logout" #: tpl/default/translation/translation.html:41 #, fuzzy msgid "module access" msgstr "Exception: Module Access dienied" #: tpl/default/translation/translation.html:39 #, fuzzy msgid "module browser" msgstr "new role" #: tpl/default/translation/translation.html:42 msgid "module custody" msgstr "" #: tpl/default/translation/translation.html:72 #, fuzzy msgid "module overview" msgstr "new role" #: tpl/default/translation/translation.html:40 msgid "module switch" msgstr "" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 #: tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 msgid "mount" msgstr "" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "" #: tpl/Berlin/module_custody/index.html:58 #: tpl/Berlin/module_custody/index.html:64 #: tpl/default/module_custody/index.html:36 #: tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "" #: tpl/Berlin/basic_object/create.html:25 #: tpl/Zeuthen/basic_object/create.html:12 #: tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "new ID (login)" #: tpl/Berlin/basic_object/create.html:39 #: tpl/Zeuthen/basic_object/create.html:26 #: tpl/default/basic_object/create.html:32 msgid "new password" msgstr "new password" #: tpl/Berlin/module_custody/index.html:31 #: tpl/Berlin/module_custody/index.html:39 #: tpl/Berlin/module_custody/index.html:49 #: tpl/Berlin/module_custody/index.html:62 #: tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:25 #: tpl/Zeuthen/module_custody/index.html:32 #: tpl/Zeuthen/module_custody/index.html:40 #: tpl/Zeuthen/module_switch/index.html:25 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:30 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:40 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "" #: tpl/Berlin/basic_assignment/group.html:51 #: tpl/Berlin/basic_assignment/index.html:39 #: tpl/Zeuthen/basic_assignment/group.html:8 #: tpl/Zeuthen/basic_assignment/index.html:6 #: tpl/default/basic_assignment/group.html:52 #: tpl/default/basic_assignment/index.html:41 #, fuzzy msgid "object" msgstr "New object" #: tpl/default/translation/translation.html:83 #, fuzzy msgid "perlversion" msgstr "version" #: tpl/default/translation/translation.html:23 #, fuzzy msgid "professor" msgstr "restore" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "" #: tpl/default/translation/translation.html:37 #, fuzzy msgid "reading" msgstr "roleadmin" #: tpl/Berlin/basic_object/create.html:43 #: tpl/Zeuthen/basic_object/create.html:30 #: tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "repeat new password" #: tpl/default/translation/translation.html:35 #, fuzzy msgid "seminar" msgstr "skeladmin" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 #: tpl/default/status_line/index.html:8 msgid "server" msgstr "server" #: tpl/default/translation/translation.html:84 #, fuzzy msgid "serverinfo" msgstr "server" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 #: tpl/default/status_line/index.html:51 #, fuzzy msgid "session" msgstr "version" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "set" #: tpl/Berlin/module_browser/index.html:29 #: tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 #: tpl/default/status_line/index.html:18 msgid "status" msgstr "status" #: tpl/default/translation/translation.html:21 #, fuzzy msgid "student" msgstr "set" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "" #: tpl/default/translation/translation.html:29 #, fuzzy msgid "study-group" msgstr "group" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "" #: tpl/default/translation/translation.html:32 #, fuzzy msgid "team" msgstr "Theme" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 #: tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 #: tpl/default/status_line/index.html:45 #: tpl/default/translation/translation.html:44 msgid "theme" msgstr "Theme" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 #: tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 #, fuzzy msgid "total" msgstr "tutoradmin" #: tpl/default/translation/translation.html:26 #, fuzzy msgid "tutor" msgstr "tutoradmin" #: tpl/default/translation/translation.html:34 #, fuzzy msgid "tutorial" msgstr "tutoradmin" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 #: tpl/Berlin/module_custody/index.html:41 #: tpl/default/module_custody/index.html:30 #: tpl/default/translation/translation.html:48 msgid "unknown" msgstr "" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 #: tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 msgid "used" msgstr "" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "userlist" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 #: tpl/default/status_line/index.html:35 msgid "version" msgstr "version" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "" #: tpl/Berlin/module_custody/index.html:29 #: tpl/Berlin/module_custody/index.html:36 #: tpl/Berlin/module_custody/index.html:47 #: tpl/Berlin/module_custody/index.html:56 #: tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:23 #: tpl/Zeuthen/module_custody/index.html:30 #: tpl/Zeuthen/module_custody/index.html:38 #: tpl/Zeuthen/module_switch/index.html:23 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:29 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:35 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "" #, fuzzy #~ msgid "Perl module version" #~ msgstr "new role" #, fuzzy #~ msgid "change status" #~ msgstr "status" #, fuzzy #~ msgid "The CAT module %s status has changed." #~ msgstr "The pasword for %s has been changed." #~ msgid "The password for %s has been changed." #~ msgstr "The password for %s was set." #~ msgid "The object %s has been deleted." #~ msgstr "The object %s has been deleted." #~ msgid "The object %s has been created." #~ msgstr "The account %s has been enabled." #~ msgid "take" #~ msgstr "take" #~ msgid "give" #~ msgstr "give" #~ msgid "take member" #~ msgstr "take member" #~ msgid "give member away" #~ msgstr "give member away" #, fuzzy #~ msgid "list all modules" #~ msgstr "list all CGIs" #, fuzzy #~ msgid "Add a member to a given CAT module." #~ msgstr "list all CGIs" #~ msgid "Additional Information:" #~ msgstr "Additional Information:" #, fuzzy #~ msgid "" #~ "Could not open a given file for execution or problem during execution!" #~ msgstr "Exception: Can not open file for execution!" #, fuzzy #~ msgid "Could not open a given file for execution!" #~ msgstr "Exception: Can not open file for execution!" #, fuzzy #~ msgid "Could not open a given file for reading!" #~ msgstr "Exception: Can not open file for reading!" #, fuzzy #~ msgid "Could not open a given file for writing!" #~ msgstr "Exception: Can not open file for writing!" #, fuzzy #~ msgid "Create a admin account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a assistant account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a lecturer account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a netgroup." #~ msgstr "create a new role" #, fuzzy #~ msgid "Create a professor account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a pupil account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a room." #~ msgstr "create a new role" #, fuzzy #~ msgid "Create a student account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a teacher account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a tutor account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create a user account." #~ msgstr "create a new role" #, fuzzy #~ msgid "Create class share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create client." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create course share account." #~ msgstr "Course share could been listed." #, fuzzy #~ msgid "Create lecture share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create team share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Create tutorial share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Desciption" #~ msgstr "Description:" #, fuzzy #~ msgid "Destroy a admin account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a assistant account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a lecturer account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a netgroup." #~ msgstr "Listed all users." #, fuzzy #~ msgid "Destroy a professor account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a pupil account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a student account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a teacher account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a tutor account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy a user account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy class share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy client." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy course share account." #~ msgstr "Course share could been listed." #, fuzzy #~ msgid "Destroy lecture share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy reading share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy role account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy seminar share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy team share account." #~ msgstr "Listed all students." #, fuzzy #~ msgid "Destroy tutorial share account." #~ msgstr "Listed all students." #~ msgid "Error Number:" #~ msgstr "Error Number: %s" #~ msgid "Error: Sorry, this module is not implemented yet!" #~ msgstr "Error: Sorry, this module is not implemented yet!" #~ msgid "Exception Number:" #~ msgstr "Exception Number:" #, fuzzy #~ msgid "Execution of XML-RPC command failed!" #~ msgstr "Exception: Execution of XML-RPC command failed!" #, fuzzy #~ msgid "Get home directory info from all user accounts." #~ msgstr "Listed all students." #~ msgid "ID (new skel login)" #~ msgstr "ID (new skel login)" #, fuzzy #~ msgid "Icon" #~ msgstr "action" #, fuzzy #~ msgid "" #~ "If you want to help, join #cipux at IRC or mail christian.kuelker@cipworx.org(DE,EN," #~ "JP) or mail x.oswald@free.fr (FR," #~ "EN)." #~ msgstr "" #~ "If you want to help, join #cipux at IRC, or mail christian.kuelker@cipworx.org or mail " #~ "x.oswald@free.fr" #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and execute it or " #~ "to execute it successfully. Possible reasons are: (1) The file was not " #~ "there. (2) We have too limited access to the file. (3) An exception " #~ "occured during execution. The filename was:" #~ msgstr "" #~ "Details: It was not possible to open a file on the file system and " #~ "execute it. This file should probably be a command. The file name was [% " #~ "form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and execute it. " #~ "Possible reasons are: (1) The file was not there. (2) We have too lomited " #~ "access to the file. The filename was:" #~ msgstr "" #~ "Details: It was not possible to open a file on the file system and " #~ "execute it. This file should probably be a command. The file name was [% " #~ "form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and read its " #~ "contents. Possible reasons are: (1) The file was not there. (2) We have " #~ "no read access to the file. The filename was:" #~ msgstr "" #~ "Details: It was not possible to open a file on the file system an read " #~ "its contents. The file name was [% form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and write new " #~ "content to it. Possible reasons are: (1) The file was not there. (2) We " #~ "have no write access to the file. The filename was:" #~ msgstr "" #~ "Details: It was not possible to open a file on the file system an read " #~ "its contents. The file name was [% form.field.info1.field %]." #, fuzzy #~ msgid "List all CAT modules." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all admin accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all assistant accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all class share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all clients." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all course share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all disabled CAT modules." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all disabled tasks stored in LDAP." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all enabled tasks stored in LDAP." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all lecture share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all lecturer accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all members of a given CAT module." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all members of a given netgroup." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "List all netgroups." #~ msgstr "Listed all users." #, fuzzy #~ msgid "List all professor accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all pupil accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all reading share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all role accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all rooms." #~ msgstr "Listed all users." #, fuzzy #~ msgid "List all seminar share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all skel accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all student accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all studygroup share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all teacher accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all team share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all tutor accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all tutorial share accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all user accounts." #~ msgstr "Listed all students." #, fuzzy #~ msgid "List all workshop share accounts." #~ msgstr "Listed all students." #~ msgid "Message from the Subsystem:" #~ msgstr "Message from the Subsystem:" #, fuzzy #~ msgid "New role" #~ msgstr "new role" #, fuzzy #~ msgid "No GID given!" #~ msgstr "Exception: No GID given!" #, fuzzy #~ msgid "No RID given!" #~ msgstr "Exception: No CID given!" #, fuzzy #~ msgid "No UID given!" #~ msgstr "Exception: No UID given!" #, fuzzy #~ msgid "No password given!" #~ msgstr "Exception: No password given!" #~ msgid "Not implemented jet" #~ msgstr "Not implemented jet" #, fuzzy #~ msgid "Old role" #~ msgstr "old role" #, fuzzy #~ msgid "Password was not set successfully!" #~ msgstr "Exception: Password are not equal!" #, fuzzy #~ msgid "Passwords were not equal!" #~ msgstr "Exception: Password are not equal!" #, fuzzy #~ msgid "Provide a first name." #~ msgstr "firstname" #, fuzzy #~ msgid "RID is not valid!" #~ msgstr "Exception: Uid not valid!" #, fuzzy #~ msgid "Register a CAT module." #~ msgstr "list all CGIs" #, fuzzy #~ msgid "Register a task." #~ msgstr "list all CGIs" #~ msgid "Related to Object:" #~ msgstr "Related to Object:" #~ msgid "Solution:" #~ msgstr "Solution:" #, fuzzy #~ msgid "Status" #~ msgstr "status" #, fuzzy #~ msgid "" #~ "The GID (group identification), also called \"course-, class-login\", is " #~ "missing." #~ msgstr "" #~ "Details: You must provide a GID. A GID is a group identification. Also " #~ "this is called a \"course- or class login." #, fuzzy #~ msgid "" #~ "The RID (role identification), also called \"system role\" was not " #~ "provided. To see all valid system roles execute cipux_task_client -t " #~ "cipux_task_list_roles as root on the command line." #~ msgstr "" #~ "Details: You must provide a RID. A RID is a role identification. Also " #~ "this is called a \"system role\". To see all system roles execute " #~ "\"cipux_task_list_roles\" as root." #, fuzzy #~ msgid "" #~ "The RID (role identification), also called \"system role\", was not one " #~ "of the system roles. To see all valid system roles execute " #~ "cipux_task_client -t cipux_task_list_roles as root on the command line." #~ msgstr "" #~ "Details: The provided role is not one of the valid system roles. To see " #~ "valid roles execute \"cipux_task_list_roles\" as root." #, fuzzy #~ msgid "" #~ "The UID (user identification), also called \"login\" or \"user name\", " #~ "did not exist. You can use cipux_task_client -t cipux_task_list_users to " #~ "see from which logins you may choose." #~ msgstr "" #~ "Details: You must provide a RID. A RID is a role identification. Also " #~ "this is called a \"system role\". To see all system roles execute " #~ "\"cipux_task_list_roles\" as root." #, fuzzy #~ msgid "" #~ "The UID (user identification), also called \"login\" or \"user name\", " #~ "was not possible to choose. It may contain strange characters, is too " #~ "long or has some other bad qualities." #~ msgstr "" #~ "Details: You must provide a RID. A RID is a role identification. Also " #~ "this is called a \"system role\". To see all system roles execute " #~ "\"cipux_task_list_roles\" as root." #, fuzzy #~ msgid "" #~ "The execution of a XML-RPC command was not successful. The XML-RPC server " #~ "tried to execute the command, but it failed." #~ msgstr "" #~ "Details: The execution of in XML-RPC command was not successful. The XML-" #~ "RPC server tried to execute [% form.field.info1.field %], but it faild. " #~ "The return value was: [% form.field.info2.field %]." #, fuzzy #~ msgid "" #~ "The module you requested to use was disabled. The reason is usually that " #~ "it makes no sense to use in this setup. The administrator can disable a " #~ "module for the hole site." #~ msgstr "" #~ "Details: The module [% module %] you just requested to use \n" #~ " is disabled.\n" #~ " Normally this means that this modules is disabled, becauses it\n" #~ " makes no sense to use it in this setup. If you feel that this is a\n" #~ " mistake, then you can re-enable it as user \"cipadmin\" with the\n" #~ " CAT module CipUXadmin." #, fuzzy #~ msgid "The object was not deleted!" #~ msgstr "The object %s has been deleted." #, fuzzy #~ msgid "The session expired!" #~ msgstr "Error: Session expired" #, fuzzy #~ msgid "" #~ "The usage to this module is prohibited by default or by the " #~ "administrator. You are not allowed to use it." #~ msgstr "" #~ "Details: The module [% module %] you just requested to use \n" #~ " is disabled.\n" #~ " Normally this means that this modules is disabled, becauses it\n" #~ " makes no sense to use it in this setup. If you feel that this is a\n" #~ " mistake, then you can re-enable it as user \"cipadmin\" with the\n" #~ " CAT module CipUXadmin." #~ msgid "This module will be migrated from webmin very soon." #~ msgstr "This module will be migrated from webmin very soon." #, fuzzy #~ msgid "UID is not valid!" #~ msgstr "Exception: Uid not valid!" #, fuzzy #~ msgid "" #~ "Usage: please give new unique ID. If available, fill out other fields." #~ msgstr "" #~ "Usage: please give new unique ID (role name) and 2 identical passwords" #~ msgid "Username (ID, Login)" #~ msgstr "Username (ID, Login)" #~ msgid "Warning Number:" #~ msgstr "Warning Number:" #~ msgid "Warning:" #~ msgstr "Warning:" #, fuzzy #~ msgid "" #~ "You have to enter a username and a password to log into CAT-Web \n" #~ " at the CipUX server on [% form.field.server_name.value %]." #~ msgstr "" #~ "You must enter a username and a password to login to CAT-Web \n" #~ " at the CipUX server on [% form.field.server_name.value %]." #, fuzzy #~ msgid "" #~ "You have to provide a password. A password is a secret word, which only " #~ "you should know." #~ msgstr "" #~ "Details: You must provide a password. A password is a secret word, which " #~ "only you should know." #, fuzzy #~ msgid "" #~ "You have to provide a valid password and login. Think again and give the " #~ "right login and password for this account." #~ msgstr "" #~ "Details: The login or the password you provided was wrong. Think again " #~ "and give the right login an password for this account." #, fuzzy #~ msgid "" #~ "You have to provide twice the same password. This is to help ensure that " #~ "you did not mistype your password. A password is a secret word, which " #~ "only you should know." #~ msgstr "" #~ "Details: You must provide twice the same password. This is because we " #~ "want to be sure that the spelling of the password is right." #, fuzzy #~ msgid "actions" #~ msgstr "action" #, fuzzy #~ msgid "allocation" #~ msgstr "action" #~ msgid "changeable attribute" #~ msgstr "changeable attribute" #, fuzzy #~ msgid "configuration" #~ msgstr "Confirmation" #~ msgid "create a new role" #~ msgstr "create a new role" #, fuzzy #~ msgid "create new [% form.field.modality.value %]" #~ msgstr "create new [% object %]" #, fuzzy #~ msgid "file problem" #~ msgstr "new role" #, fuzzy #~ msgid "netgroup" #~ msgstr "group" #~ msgid "new ID (role)" #~ msgstr "new ID (role)" #, fuzzy #~ msgid "new object ID" #~ msgstr "New object" #, fuzzy #~ msgid "no exception" #~ msgstr "Exception:" #, fuzzy #~ msgid "password problem" #~ msgstr "Password" #~ msgid "password" #~ msgstr "password" #~ msgid "repeat password" #~ msgstr "repeat password" #, fuzzy #~ msgid "role" #~ msgstr "new role" #, fuzzy #~ msgid "session problem" #~ msgstr "Password" #, fuzzy #~ msgid "skel" #~ msgstr "skeladmin" #, fuzzy #~ msgid "static" #~ msgstr "status" #, fuzzy #~ msgid "template problem" #~ msgstr "Template ERROR" #~ msgid "userselfadmin" #~ msgstr "userselfadmin" #~ msgid "submit" #~ msgstr "submit" #~ msgid "Choose file to import" #~ msgstr "Choose file to import" #~ msgid "Disabled" #~ msgstr "Disabled" #~ msgid "ID (new user login)" #~ msgstr "ID (new user login)" #~ msgid "Import user and course from file" #~ msgstr "Import user and course from file" #~ msgid "New objects" #~ msgstr "New objects" #~ msgid "" #~ "Please check this values: \n" #~ " (You can correct single values. But if the alignment is not OK, you have " #~ "to correct the file and load again!)" #~ msgstr "" #~ "Please check this values: \n" #~ " (You can correct single values. But if the alignment is not OK, you have " #~ "to correct the file and load again!)" #~ msgid "Samba" #~ msgstr "Samba" #~ msgid "address" #~ msgstr "address" #~ msgid "column" #~ msgstr "column" #~ msgid "create new [% object %]" #~ msgstr "create new [% object %]" #~ msgid "e-mail address" #~ msgstr "e-mail address" #~ msgid "import" #~ msgstr "import" #~ msgid "" #~ "please give new unique ID (login, user name) and 2 identical passwords" #~ msgstr "" #~ "please give new unique ID (login, user name) and 2 identical passwords" #~ msgid "template directory" #~ msgstr "template directory" #~ msgid "town" #~ msgstr "town" #~ msgid "edit" #~ msgstr "edit" #~ msgid "Homedir has been resetted for %s" #~ msgstr "Homedir has been resetted for %s" #~ msgid "The pasword for %s has been changed." #~ msgstr "The pasword for %s has been changed." #~ msgid "Homedir has bee restored for %s." #~ msgstr "Homedir has bee restored for %s." #~ msgid "reset" #~ msgstr "reset" #~ msgid "Posix account has been enabled for %s." #~ msgstr "The account %s has been enabled." #~ msgid "Posix account has been disabled for %s." #~ msgstr "The account %s has been disabled." #~ msgid "Samba account has been enabled for %s." #~ msgstr "The account %s has been enabled." #~ msgid "Samba account has been disabled for %s." #~ msgstr "The account %s has been disabled." #~ msgid "User student account %s has been created." #~ msgstr "User student account %s has been created." #~ msgid "User teacher account %s has been created." #~ msgstr "The account %s has been enabled." #~ msgid "Retrieved all posix stati." #~ msgstr "Retrieved all posix stati." #~ msgid "Retrieved all smaba stati." #~ msgstr "Retrieved all smaba stati." #~ msgid "Listed all users." #~ msgstr "Listed all users." #~ msgid "Skel could been listed" #~ msgstr "Skel could been listed" #~ msgid "Usage: please give new unique ID (login) and 2 identical passwords" #~ msgstr "" #~ "Usage: please give new unique ID (role name) and 2 identical passwords" #~ msgid "create new group/course/class" #~ msgstr "create new group/course/class" #~ msgid "groupadmin" #~ msgstr "group" #~ msgid "not changeable" #~ msgstr "not changeable" #~ msgid "number" #~ msgstr "number" #~ msgid "please give new unique ID (role name) and 2 identical passwords" #~ msgstr "please give new unique ID (role name) and 2 identical passwords" #~ msgid "simplestudentadmin" #~ msgstr "student (light)" #~ msgid "simpleteacheradmin" #~ msgstr "teacher (light)" #~ msgid "" #~ "(please give new unique ID (login, skel name) and 2 identical passwords)" #~ "
" #~ msgstr "" #~ "(please give new unique ID (login, skel name) and 2 identical passwords)" #~ "
" #~ msgid "" #~ "please give new unique ID (login, group name) and 2 identical passwords" #~ msgstr "" #~ "please give new unique ID (login, group name) and 2 identical passwords" #~ msgid "" #~ "Details: It was not possible to open a file on the file system and exeute " #~ "it. The file name was [% form.field.info1.field %]." #~ msgstr "" #~ "Details: It was not possible to open a file on the file system and exeute " #~ "it. The file name was [% form.field.info1.field %]." #~ msgid "" #~ "Details: It was possible to execute the command [[% form.field.info1." #~ "field %]], but it failed. The return value of this command was: [[% form." #~ "field.info2.field %]]." #~ msgstr "" #~ "Details: It was possible to execute the command [[% form.field.info1." #~ "field %]], but it failed. The return value of this command was: [[% form." #~ "field.info2.field %]]." #~ msgid "Details: Please use matching login and password." #~ msgstr "Details: Please use matching login and password." #~ msgid "" #~ "Details: The provided UID (login, username) is not one of the valid " #~ "system UID names. To see all valid UIDs execute \"cipux_task_list_users\" " #~ "as root." #~ msgstr "" #~ "Details: The provided UID (login, username) is not one of the valid " #~ "system UID names. To see all valid UIDs execute \"cipux_task_list_users\" " #~ "as root." #~ msgid "" #~ "Details: You have no right to access the module [% module %] as [% login " #~ "%]. If you feel that this is a mistake, then you have several " #~ "possibilities:\n" #~ "
  • If your are the admin you can give [% login %] the ACL rights\n" #~ " with the CAT module CipUXadmin.
  • \n" #~ "
  • If you are not the admin, you may ask the admin to give you the " #~ "rights
  • " #~ msgstr "" #~ "Details: You have no right to access the module [% module %] as [% login " #~ "%]. If you feel that this is a mistake, then you have several " #~ "possibilities:\n" #~ "
  • If your are the admin you can give [% login %] the ACL rights\n" #~ " with the CAT module CipUXadmin.
  • \n" #~ "
  • If you are not the admin, you may ask the admin to give you the " #~ "rights
  • " #~ msgid "" #~ "Details: You must provide a CID. A CID is a group identification. Also " #~ "this is called a \"course- or class login." #~ msgstr "" #~ "Details: You must provide a CID. A CID is a group identification. Also " #~ "this is called a \"course- or class login." #~ msgid "" #~ "Details: You must provide a UID. A UID is a user identification. Also " #~ "this is called a \"login." #~ msgstr "" #~ "Details: You must provide a UID. A UID is a user identification. Also " #~ "this is called a \"login." #~ msgid "Error: Wrong login or password!" #~ msgstr "Error: Wrong login or password!" #~ msgid "Exception Number: [% form.field.number.field %]" #~ msgstr "Exception Number: [% form.field.number.field %]" #~ msgid "Exception: Fault while command execution!" #~ msgstr "Exception: Fault while command execution!" #~ msgid "Exception: No role given!" #~ msgstr "Exception: No role given!" #~ msgid "Exception: Role not valid!" #~ msgstr "Exception: Role not valid!" #~ msgid "Exception: Wrong login or password!" #~ msgstr "Exception: Wrong login or password!" #~ msgid "The home directory of the object %s has been resetted." #~ msgstr "The home directory of the object %s has been resetted." #~ msgid "The home directory of the object %s has been restored." #~ msgstr "The home directory of the object %s has been restored." #~ msgid "The object %s was created." #~ msgstr "The object %s was created." #~ msgid "" #~ "The object %s, you requested for creation do allready exist and will not " #~ "be recreated." #~ msgstr "" #~ "The object %s, you requested for creation do allready exist and will not " #~ "be recreated." #~ msgid "The role for %s was set." #~ msgstr "The role for %s was set." #~ msgid "The sub-object [% subobject %] was added to object %s." #~ msgstr "The sub-object [% subobject %] was added to object %s." #~ msgid "" #~ "The sub-object [% subobject %] was removed from the object %s." #~ msgstr "" #~ "The sub-object [% subobject %] was removed from the object %s." fr.po000444001750001750 16725711413636115 21235 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# French translations for cipux-cat-web package # Traductions françaises du paquet cipux-cat-web. # Copyright (C) 2007 Christian Kuelker # This file is distributed under the same license as the cipux-cat-web package. # Xavier Oswald , 2007. # msgid "" msgstr "" "Project-Id-Version: CipUX-CAT-Web 3.4.0.2\n" "Report-Msgid-Bugs-To: cipux-devel@cipux.org\n" "POT-Creation-Date: 2008-08-05 18:51+0200\n" "PO-Revision-Date: 2007-08-01 05:26+0200\n" "Last-Translator: Xavier Oswald \n" "Language-Team: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 #: tpl/Zeuthen/basic_object/list.html:16 #: tpl/Zeuthen/module_switch/index.html:15 #: tpl/default/basic_object/list.html:54 #, fuzzy msgid "Action" msgstr "action" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 #: tpl/default/serverinfo/index.html:26 msgid "Attribute" msgstr "Attribut" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "Administration basique des groupes" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "Administration basique des objets" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "Administration basique de l'affectation des classes" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "Administration basique" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "Administration basique de l'affection des rôles" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "Administration basique des classes" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "Affectation basique des rôles" #: tpl/default/translation/translation.html:79 #, fuzzy msgid "Basic module access" msgstr "Exeption: Accés au module interdit" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "Affectation basique des élèves aux classes" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "Affection basique des élèves" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "Affectation basique des rôles des élèves" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "Affectation basique des enseignants aux classes" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "Administration des enseignants" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "Affectation basiques des rôles des enseignants" #: tpl/default/translation/translation.html:51 #, fuzzy msgid "Berlin" msgstr "version" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "Parcourir les données des modules CAT" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 #: tpl/default/footer/index.html:3 #, fuzzy msgid "CAT" msgstr "CAT" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 #: tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "CAT - Outil d'administration CipUX" #: tpl/Berlin/module_custody/index.html:16 #: tpl/default/module_custody/index.html:20 #, fuzzy msgid "CAT-Web" msgstr "CAT" #: tpl/Berlin/module_custody/index.html:19 #: tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "CAT-Web Accès activé" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "CAT-Web accès activé" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 #: tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "CPU" #: tpl/default/translation/translation.html:77 #, fuzzy msgid "Choose a language" msgstr "Langue" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "Thème" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 #: tpl/default/basic_object/list.html:46 msgid "Count" msgstr "Nombre" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "Dannois" #: tpl/Berlin/module_custody/index.html:18 #: tpl/Zeuthen/module_custody/index.html:11 #: tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "Base de données inscrite" #: tpl/default/login/index.html:54 #, fuzzy msgid "Demo restored" msgstr "Démo restauré" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 #: tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "Nom de domaine" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "Anglais" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 #: tpl/default/error/index.html:30 #, fuzzy msgid "Error" msgstr "Erreur numéro: [% number %]" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 #: tpl/default/exception/index.html:30 #, fuzzy msgid "Exception" msgstr "action" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 #: tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 msgid "File system" msgstr "Système de fichier" #: tpl/Berlin/module_custody/index.html:17 #: tpl/Zeuthen/module_custody/index.html:10 #: tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "Système de fichier installé" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 #: tpl/default/basic_object/list.html:50 #, fuzzy msgid "Firstname" msgstr "prénom" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 #: tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 #: tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 #: tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "Mémoire disponible" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "Français" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "Allemand" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 #: tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "Matériel" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 #: tpl/default/basic_object/list.html:47 #: tpl/default/translation/translation.html:10 #: tpl/default/translation/translation.html:16 #: tpl/default/translation/translation.html:17 msgid "ID" msgstr "ID" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 #: tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "IP" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "Japonais" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 #: tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "Langue" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 #: tpl/default/basic_object/list.html:49 #, fuzzy msgid "Lastname" msgstr "nom de famille" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 #: tpl/default/login/index.html:28 #, fuzzy msgid "Login" msgstr "identifiant" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 #: tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "Identification sur CAT" #: tpl/default/translation/translation.html:81 msgid "Manage CAT modules" msgstr "Administration des modules CAT" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 #, fuzzy msgid "Module Browser" msgstr "Parcours des modules" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "Parcours des modules: Modules installés sur le système de fichier" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 #: tpl/default/module_custody/index.html:11 #, fuzzy msgid "Module Custody" msgstr "Module garde" #: tpl/Berlin/module_custody/index.html:14 #: tpl/Zeuthen/module_custody/index.html:8 #: tpl/default/module_custody/index.html:18 #, fuzzy msgid "Module ID" msgstr "Module ID" #: lib/CipUX/CAT/Web/Module/Index.pm:189 #, fuzzy msgid "Module Index" msgstr "Module Index" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 #, fuzzy msgid "Module Switch" msgstr "Changement de modulet" #: tpl/Berlin/module_custody/index.html:15 #: tpl/Berlin/module_switch/index.html:44 #: tpl/Zeuthen/module_custody/index.html:9 #: tpl/Zeuthen/module_switch/index.html:13 #: tpl/default/module_custody/index.html:19 #, fuzzy msgid "Module name" msgstr "nouveau role" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "Nom" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 #: tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 #, fuzzy msgid "Node name" msgstr "Nom du noeud" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 #: lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "OK" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 #: tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "Nom de l'OS" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 #, fuzzy msgid "Object %s has been removed from course %s." msgstr "L'objet [% object %] a été supprimé." #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 #: tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "Système d'exploitation" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 #: tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 #: tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "Mot de passe" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 #, fuzzy msgid "Perl module versions" msgstr "Version des modules perl" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr "S'il vous plaît" #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "S'il vous plaît, choisissez une langue" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "S'il vous plaît, choisissez un thème" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 #: tpl/default/basic_object/list.html:53 #, fuzzy msgid "Repeat password" msgstr "répétez le mot de passe" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 #: tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "Information serveur" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 #: tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "Services" #: tpl/Berlin/module_switch/index.html:45 #: tpl/Zeuthen/module_switch/index.html:14 #, fuzzy msgid "Short description" msgstr "Description courte" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "Changer on/off modules" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 #, fuzzy msgid "The object %s has been added to %s." msgstr "L'objet [% object %] a été supprimé." #: lib/CipUX/CAT/Web/Controller.pm:819 #, fuzzy msgid "The session got invalid. Please login again." msgstr "Détails: S'il vous plait, reconnectez vous." #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "Le but des modules qui sont installés sur le système" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 #: tpl/default/login/index.html:40 msgid "Theme" msgstr "Thème" #: tpl/default/module_browser/index.html:20 msgid "" "This CAT module browser shows all CAT modules installed on the system, " "regardless if you can use them or not. More information about making a " "module usable to the system see the bottom of the page. If you miss some " "module, you have to install it as root on the filesystem from source or with " "your favorite package manager. This page can help you to find out if your " "installation was successful." msgstr "Ce module CAT montre tous les modules installés sur le système, " "sans tenir compte de si vous en utilisez ou non. Pour plus d'informations à " "propos de rendre un module utilisable en bas de cette page. Si vous avez oublié " "plusieurs modules, vous pouvez les installez en tant que root depuis les " "sources ou à partir de votre gestionnaire de paquet. Cette page peut vous " "aider à savoir si votre installation s'est correcte passé." #: tpl/default/module_switch/index.html:41 msgid "" "This module switch shows all registered CAT modules. CAT modules with a " "green color are enabled for the index (home - start page). The red color " "indicates that they are disabled for the index." msgstr "Ce module montre les modules CAT activé. En vert, les modules activés et en " "rouge ceux qui sont désactivés" #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 #: tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "Pour accéder à CAT, vous devez entrer un nom d'utilisateur et un mot de " "passe ..." #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "Pour utiliser un module vous devez vous identifier et l'activé avec la commande:\n" " cipux_cat_module --register --object NAME --enable" #. ('Module::List::Pluggable') #. ($m) #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 msgid "To use this module, please install [_1]!" msgstr "Pour utiliser ce module, installez [_1]!" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 #: tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "Mémoire principale totale" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 #: tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "Mémoire d'échange totale" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 #: tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "Activé depuis" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 #: tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "Activé depuis quelques jours" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 #: tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "Activé depuis quelques heures" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 #: tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "Activé depuis quelques mois" #: tpl/Berlin/basic_object/create.html:60 #: tpl/default/basic_object/create.html:62 #, fuzzy msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "Utilisation: fournissez un ID unique et deux mots de passe identiques." #: tpl/Berlin/basic_object/create.html:56 #: tpl/default/basic_object/create.html:52 #, fuzzy msgid "" "Usage: please give new unique ID, firstname, lastname and 2 identical " "passwords." msgstr "" "Utilisation: fournissez un ID unique, prénom, nom de famille et 2 mots de " "passe identique. " #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 #: tpl/default/serverinfo/index.html:27 msgid "Value" msgstr "Valeur" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 #, fuzzy msgid "Version" msgstr "Version" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "" #: tpl/Berlin/basic_assignment/group.html:52 #: tpl/Zeuthen/basic_assignment/group.html:9 #: tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "action" #: tpl/Berlin/basic_assignment/index.html:42 #: tpl/Zeuthen/basic_assignment/index.html:9 #: tpl/default/basic_assignment/index.html:44 #, fuzzy msgid "action on object member" msgstr "action sur les membres du groupe" #: lib/CipUX/CAT/Web/Module/Index.pm:172 #, fuzzy msgid "admin" msgstr "administration des utilisateurs" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "administration de l'affectation des classes" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "administration de l'affectation des rôles" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: tpl/default/translation/translation.html:46 #, fuzzy msgid "admit" msgstr "accepter" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 #, fuzzy msgid "admit member" msgstr "liste des membres" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 #: tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 msgid "avail" msgstr "disponibilité" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 #: tpl/default/footer/index.html:7 msgid "back" msgstr "retour" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "retour à l'index" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 #: tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 #: tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 #: tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 #: tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 #: tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 msgid "bytes" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #, fuzzy msgid "cancel" msgstr "annuler" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 #: lib/CipUX/CAT/Web/Module/Chooser.pm:130 #, fuzzy msgid "change" msgstr "changer" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "classe" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "Affectation du rôle des classes" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "cours" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:479 #: tpl/Berlin/basic_object/create.html:7 #: tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "créer" #: tpl/Berlin/basic_object/create.html:20 #: tpl/default/basic_object/create.html:12 #, fuzzy msgid "create new object" msgstr "création d'un(e) [% object %]" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 #: tpl/default/status_line/index.html:30 msgid "date" msgstr "date" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 #, fuzzy msgid "default" msgstr "supprimer" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 #, fuzzy msgid "delete" msgstr "supprimer" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 #: tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "périphérique" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #: tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "rejeter" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 #, fuzzy msgid "dismiss member" msgstr "Rejeter un membre" #: tpl/Berlin/module_switch/index.html:43 #: tpl/Zeuthen/module_switch/index.html:12 #, fuzzy msgid "enabled" msgstr "Activer" #: tpl/Berlin/basic_object/create.html:30 #: tpl/Zeuthen/basic_object/create.html:17 #: tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "prénom" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "groupe" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 #: tpl/Zeuthen/index/index.html:8 #, fuzzy msgid "home" msgstr "" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 #: tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 #: tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 #: tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "est BSD?" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 #: tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "est Linux?" #: tpl/default/translation/translation.html:38 #, fuzzy msgid "language" msgstr "Langue" #: tpl/Berlin/basic_object/create.html:34 #: tpl/Zeuthen/basic_object/create.html:21 #: tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "nom de famille" #: tpl/default/translation/translation.html:36 #, fuzzy msgid "lecture" msgstr "exposé" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "conférencier" #: tpl/default/translation/translation.html:45 #, fuzzy msgid "list" msgstr "liste" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "liste des membres" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 #: tpl/default/status_line/index.html:40 msgid "locale" msgstr "locale" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 #: tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 #: tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "indentifiant" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 #: tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 #: tpl/default/translation/translation.html:27 msgid "logout" msgstr "quitter" #: tpl/default/translation/translation.html:41 #, fuzzy msgid "module access" msgstr "Accés au module" #: tpl/default/translation/translation.html:39 #, fuzzy msgid "module browser" msgstr "Parcours des modules" #: tpl/default/translation/translation.html:42 #, fuzzy msgid "module custody" msgstr "module gardien" #: tpl/default/translation/translation.html:72 #, fuzzy msgid "module overview" msgstr "apperçu du module" #: tpl/default/translation/translation.html:40 #, fuzzy msgid "module switch" msgstr "changement de module" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 #: tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 msgid "mount" msgstr "monter" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "" #: tpl/Berlin/module_custody/index.html:58 #: tpl/Berlin/module_custody/index.html:64 #: tpl/default/module_custody/index.html:36 #: tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "" #: tpl/Berlin/basic_object/create.html:25 #: tpl/Zeuthen/basic_object/create.html:12 #: tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "nouvel ID(identifiant)" #: tpl/Berlin/basic_object/create.html:39 #: tpl/Zeuthen/basic_object/create.html:26 #: tpl/default/basic_object/create.html:32 msgid "new password" msgstr "nouveau mot de passe" #: tpl/Berlin/module_custody/index.html:31 #: tpl/Berlin/module_custody/index.html:39 #: tpl/Berlin/module_custody/index.html:49 #: tpl/Berlin/module_custody/index.html:62 #: tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:25 #: tpl/Zeuthen/module_custody/index.html:32 #: tpl/Zeuthen/module_custody/index.html:40 #: tpl/Zeuthen/module_switch/index.html:25 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:30 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:40 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "non" #: tpl/Berlin/basic_assignment/group.html:51 #: tpl/Berlin/basic_assignment/index.html:39 #: tpl/Zeuthen/basic_assignment/group.html:8 #: tpl/Zeuthen/basic_assignment/index.html:6 #: tpl/default/basic_assignment/group.html:52 #: tpl/default/basic_assignment/index.html:41 #, fuzzy msgid "object" msgstr "objet" #: tpl/default/translation/translation.html:83 #, fuzzy msgid "perlversion" msgstr "" #: tpl/default/translation/translation.html:23 #, fuzzy msgid "professor" msgstr "professeur" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "élève" #: tpl/default/translation/translation.html:37 #, fuzzy msgid "reading" msgstr "lecture" #: tpl/Berlin/basic_object/create.html:43 #: tpl/Zeuthen/basic_object/create.html:30 #: tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "répétez le nouveau mot de passe" #: tpl/default/translation/translation.html:35 #, fuzzy msgid "seminar" msgstr "séminaire" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 #: tpl/default/status_line/index.html:8 msgid "server" msgstr "serveur" #: tpl/default/translation/translation.html:84 #, fuzzy msgid "serverinfo" msgstr "" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 #: tpl/default/status_line/index.html:51 #, fuzzy msgid "session" msgstr "" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "configurer" #: tpl/Berlin/module_browser/index.html:29 #: tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "afficher les tâches" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 #: tpl/default/status_line/index.html:18 msgid "status" msgstr "statut" #: tpl/default/translation/translation.html:21 #, fuzzy msgid "student" msgstr "étudiant" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "Affectation des étudiants aux classes" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "Affectation du rôle des étudiants" #: tpl/default/translation/translation.html:29 #, fuzzy msgid "study-group" msgstr "groupe d'étude" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "enseignant" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "affectation des enseignants aux classes" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "affectation du rôles des enseignants" #: tpl/default/translation/translation.html:32 #, fuzzy msgid "team" msgstr "équipe" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 #: tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 #: tpl/default/status_line/index.html:45 #: tpl/default/translation/translation.html:44 msgid "theme" msgstr "thème" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 #: tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 #, fuzzy msgid "total" msgstr "" #: tpl/default/translation/translation.html:26 #, fuzzy msgid "tutor" msgstr "tuteur" #: tpl/default/translation/translation.html:34 #, fuzzy msgid "tutorial" msgstr "tutoriel" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 #: tpl/Berlin/module_custody/index.html:41 #: tpl/default/module_custody/index.html:30 #: tpl/default/translation/translation.html:48 msgid "unknown" msgstr "inconnue" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 #: tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 #, fuzzy msgid "used" msgstr "utilisé" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "liste des utilisateurs" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 #: tpl/default/status_line/index.html:35 msgid "version" msgstr "version" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "atelier" #: tpl/Berlin/module_custody/index.html:29 #: tpl/Berlin/module_custody/index.html:36 #: tpl/Berlin/module_custody/index.html:47 #: tpl/Berlin/module_custody/index.html:56 #: tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:23 #: tpl/Zeuthen/module_custody/index.html:30 #: tpl/Zeuthen/module_custody/index.html:38 #: tpl/Zeuthen/module_switch/index.html:23 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:29 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:35 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "oui" #, fuzzy #~ msgid "Perl module version" #~ msgstr "nouveau role" #, fuzzy #~ msgid "Module" #~ msgstr "nouveau role" #, fuzzy #~ msgid "change status" #~ msgstr "statut" #, fuzzy #~ msgid "The password for %s has been changed." #~ msgstr "Le mot de passe pour [% object %] à été mis en place." #, fuzzy #~ msgid "The object %s has been deleted." #~ msgstr "L'objet [% object %] a été supprimé." #, fuzzy #~ msgid "The object %s has been created." #~ msgstr "Le compte [% object %] a été activé." #~ msgid "take" #~ msgstr "prendre" #~ msgid "give" #~ msgstr "donner" #~ msgid "take member" #~ msgstr "prendre un membre" #~ msgid "give member away" #~ msgstr "enlever un membre" #, fuzzy #~ msgid "Add a member to a given class share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given lecture share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given team share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given tutor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Add a member to a given user account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Author" #~ msgstr "administration des groupes" #, fuzzy #~ msgid "CID is not given!" #~ msgstr "Exeption: Uid non valide!" #, fuzzy #~ msgid "CID problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "Change the admin account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the assistant account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the lecturer account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given lecture account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given tutor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the password of a given user account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the professor account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the student account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the teacher account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the tutor account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Change the user account role." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Client Allocation" #~ msgstr "action" #, fuzzy #~ msgid "" #~ "Could not open a given file for execution or problem during execution!" #~ msgstr "Exeption: Impossible d'ouvrir le fichier en éxecution!" #, fuzzy #~ msgid "Could not open a given file for execution!" #~ msgstr "Exeption: Impossible d'ouvrir le fichier en éxecution!" #, fuzzy #~ msgid "Could not open a given file for reading!" #~ msgstr "Exeption: Impossible d'ouvrir le fichier en lecture!" #, fuzzy #~ msgid "Could not open a given file for writing!" #~ msgstr "Exeption: Impossible d'ouvrir le fichier en écriture!" #, fuzzy #~ msgid "Create a admin account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a assistant account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a netgroup." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a pupil account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a room." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a student account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a tutor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create a user account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create class share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create client." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create course share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create lecture share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create reading share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create role account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create seminar share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create skel account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create studygroup share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create team share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create tutorial share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Create workshop share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Desciption" #~ msgstr "action" #, fuzzy #~ msgid "Destroy a admin account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a assistant account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a netgroup." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a pupil account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a room." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a student account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a tutor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy a user account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy class share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy client." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy course share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy lecture share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy reading share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy role account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy seminar share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy skel account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy studygroup share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy team share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy tutorial share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Destroy workshop share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Do not try to delete this account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Error Number:" #~ msgstr "Erreur numéro: [% number %]" #~ msgid "Error: Sorry, this module is not implemented yet!" #~ msgstr "Erreur: Désolé, ce module n'est pas encore implémenté!" #, fuzzy #~ msgid "Exception Number:" #~ msgstr "Exeption: Module désactivé" #, fuzzy #~ msgid "Execution of XML-RPC command failed!" #~ msgstr "Exeption: L'éxecution de la commande XML-RPC a échouée!" #, fuzzy #~ msgid "GID problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "Get firstname info from all lecturer accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get firstname info from all professor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get firstname info from all teacher accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get firstname info from all tutor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get lastname info from all lecturer accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get lastname info from all professor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get lastname info from all teacher accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get lastname info from all tutor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Get lastname info from all user accounts." #~ msgstr "création d'un nouveau role" #~ msgid "ID (new skel login)" #~ msgstr "ID(nouvel identifiant de squelette)" #, fuzzy #~ msgid "Icon" #~ msgstr "action" #, fuzzy #~ msgid "" #~ "If you want to help, join #cipux at IRC or mail christian.kuelker@cipworx.org(DE,EN," #~ "JP) or mail x.oswald@free.fr (FR," #~ "EN)." #~ msgstr "" #~ "Si vous voulez contribuer, rejoignez #cipux sur IRC, ou mailez à christian.kuelker@cipworx.org ou x.oswald@free.fr" #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and execute it or " #~ "to execute it successfully. Possible reasons are: (1) The file was not " #~ "there. (2) We have too limited access to the file. (3) An exception " #~ "occured during execution. The filename was:" #~ msgstr "" #~ "Détails: Il n'a pas été possible d'ouvrir un fichier sur le système et " #~ "de l'éxecuter. Le nom du fichier était [% form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and execute it. " #~ "Possible reasons are: (1) The file was not there. (2) We have too lomited " #~ "access to the file. The filename was:" #~ msgstr "" #~ "Détails: Il n'a pas été possible d'ouvrir un fichier sur le système et " #~ "de l'éxecuter. Le nom du fichier était [% form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and read its " #~ "contents. Possible reasons are: (1) The file was not there. (2) We have " #~ "no read access to the file. The filename was:" #~ msgstr "" #~ "Détails: Il n'a pas été possible d'ouvrir un fichier sur le système et de " #~ "lire son contenu. Le nom du fichier était [% form.field.info1.field %]." #, fuzzy #~ msgid "" #~ "It was not possible to open some file on the filesystem and write new " #~ "content to it. Possible reasons are: (1) The file was not there. (2) We " #~ "have no write access to the file. The filename was:" #~ msgstr "" #~ "Détails: Il n'a pas été possible d'ouvrir un fichier sur le système et de " #~ "lire son contenu. Le nom du fichier était [% form.field.info1.field %]." #, fuzzy #~ msgid "LDAP problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "List all class share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all clients." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all course share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all lecture share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all lecturer accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all members of a given lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all members of a given professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all members of a given teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all members of a given team share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all netgroups." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all professor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all pupil accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all reading share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all role accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all rooms." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all seminar share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all skel accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all student accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all teacher accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all team share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all tutor accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all tutorial share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all user accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "List all workshop share accounts." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "New object" #~ msgstr "Nouveaux objets" #, fuzzy #~ msgid "New role" #~ msgstr "nouveau role" #, fuzzy #~ msgid "No GID given!" #~ msgstr "Exeption: Aucun GID de donné!" #, fuzzy #~ msgid "No RID given!" #~ msgstr "Exeption: Aucun CID de donné!" #, fuzzy #~ msgid "No UID given!" #~ msgstr "Exeption: Aucun UID de donné!" #, fuzzy #~ msgid "No cipuxLastname given!" #~ msgstr "Exeption: Aucun mot de passe donné!" #, fuzzy #~ msgid "No password given!" #~ msgstr "Exeption: Aucun mot de passe donné!" #~ msgid "Not implemented jet" #~ msgstr "Pas encore implémenté" #, fuzzy #~ msgid "Old role" #~ msgstr "vieu role" #, fuzzy #~ msgid "Password was not set successfully!" #~ msgstr "Exeption: Les mot de passe ne sont pas les memes!" #, fuzzy #~ msgid "Passwords were not equal!" #~ msgstr "Exeption: Les mot de passe ne sont pas les memes!" #, fuzzy #~ msgid "Provide a first name." #~ msgstr "prénom" #, fuzzy #~ msgid "Provide a last name." #~ msgstr "prénom" #, fuzzy #~ msgid "Provide a valid system role." #~ msgstr "prénom" #, fuzzy #~ msgid "RID is not valid!" #~ msgstr "Exeption: Uid non valide!" #, fuzzy #~ msgid "RID problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "Related to Object:" #~ msgstr "création d'un(e) [% object %]" #, fuzzy #~ msgid "Remove a member from a given lecturer account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Remove a member from a given professor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Remove a member from a given teacher account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Remove a member from a given team share account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Remove a member from a given tutor account." #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "Status" #~ msgstr "statut" #, fuzzy #~ msgid "" #~ "The CID (course-, class identification), also called \"course-, class " #~ "login\", was not provided." #~ msgstr "" #~ "Détails: Vous devez fournir un GID. Un GID est un identifiant de groupe. " #~ "Aussi appelé un identifiant de \" cours ou classe." #, fuzzy #~ msgid "" #~ "The GID (group identification), also called \"course-, class-login\", is " #~ "missing." #~ msgstr "" #~ "Détails: Vous devez fournir un GID. Un GID est un identifiant de groupe. " #~ "Aussi appelé un identifiant de \" cours ou classe." #, fuzzy #~ msgid "" #~ "The RID (role identification), also called \"system role\" was not " #~ "provided. To see all valid system roles execute cipux_task_client -t " #~ "cipux_task_list_roles as root on the command line." #~ msgstr "" #~ "Détails: Vous devez fournir un RID. Un RID est un identifiant de role. " #~ "Aussi appelé un \"system role\". Pour voir tous les roles systèmes, " #~ "éxecutez \"cipux_task_list_roles\" en root." #, fuzzy #~ msgid "" #~ "The RID (role identification), also called \"system role\", was not one " #~ "of the system roles. To see all valid system roles execute " #~ "cipux_task_client -t cipux_task_list_roles as root on the command line." #~ msgstr "" #~ "Détails: Le role fournit n'est pas un role valide sur le système. Pour " #~ "voir tous les roles valide, éxecutez \"cipux_task_list_roles\" en root" #, fuzzy #~ msgid "" #~ "The UID (user identification), also called \"login name\", is missing." #~ msgstr "" #~ "Détails: Vous devez fournir un GID. Un GID est un identifiant de groupe. " #~ "Aussi appelé un identifiant de \" cours ou classe." #, fuzzy #~ msgid "" #~ "The UID (user identification), also called \"login\" or \"user name\", " #~ "did not exist. You can use cipux_task_client -t cipux_task_list_users to " #~ "see from which logins you may choose." #~ msgstr "" #~ "Détails: Vous devez fournir un RID. Un RID est un identifiant de role. " #~ "Aussi appelé un \"system role\". Pour voir tous les roles systèmes, " #~ "éxecutez \"cipux_task_list_roles\" en root." #, fuzzy #~ msgid "" #~ "The UID (user identification), also called \"login\" or \"user name\", " #~ "was not possible to choose. It may contain strange characters, is too " #~ "long or has some other bad qualities." #~ msgstr "" #~ "Détails: Vous devez fournir un RID. Un RID est un identifiant de role. " #~ "Aussi appelé un \"system role\". Pour voir tous les roles systèmes, " #~ "éxecutez \"cipux_task_list_roles\" en root." #, fuzzy #~ msgid "" #~ "The execution of a XML-RPC command was not successful. The XML-RPC server " #~ "tried to execute the command, but it failed." #~ msgstr "" #~ "Détails: L'éxecution d'une commande XML-RPC a échouée, le serveur XML-RPC " #~ "a éssayé d'éxecuter [% form.field.info1.field %], mais a échoué. La " #~ "valeur de retour était: [% form.field.info2.field %]." #, fuzzy #~ msgid "" #~ "The module you requested to use was disabled. The reason is usually that " #~ "it makes no sense to use in this setup. The administrator can disable a " #~ "module for the hole site." #~ msgstr "" #~ "Détails: Le module [% module %] que vous venez de demander est " #~ "désactivé.\n" #~ " Normallement cela veut dire que ce module est désactivé, car il\n" #~ " n'est pas utile pour cette configuration. Si vous pensez que c'est une\n" #~ " erreur, vous pouvez le réactiver avec l'utilisateur \"cipadmin\" avec " #~ "le\n" #~ " module CAT CipUXadmin." #, fuzzy #~ msgid "The object was not deleted!" #~ msgstr "L'objet [% object %] a été supprimé." #, fuzzy #~ msgid "The session expired!" #~ msgstr "Erreur: Session expiré" #, fuzzy #~ msgid "" #~ "The usage to this module is prohibited by default or by the " #~ "administrator. You are not allowed to use it." #~ msgstr "" #~ "Détails: Le module [% module %] que vous venez de demander est " #~ "désactivé.\n" #~ " Normallement cela veut dire que ce module est désactivé, car il\n" #~ " n'est pas utile pour cette configuration. Si vous pensez que c'est une\n" #~ " erreur, vous pouvez le réactiver avec l'utilisateur \"cipadmin\" avec " #~ "le\n" #~ " module CAT CipUXadmin." #~ msgid "This module will be migrated from webmin very soon." #~ msgstr "Ce module va etre importé de webmin très prochainement" #, fuzzy #~ msgid "UID do not exists!" #~ msgstr "Exeption: Uid non valide!" #, fuzzy #~ msgid "UID is not valid!" #~ msgstr "Exeption: Uid non valide!" #, fuzzy #~ msgid "UID problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "" #~ "Usage: please give new unique ID. If available, fill out other fields." #~ msgstr "" #~ "S'il vous plait, fournissez un ID unique(nom du role et deux mots de " #~ "passe identique" #~ msgid "Username (ID, Login)" #~ msgstr "Nom d'utilisateur(ID, Identifiant)" #, fuzzy #~ msgid "Warning Number:" #~ msgstr "Erreur numéro: [% number %]" #, fuzzy #~ msgid "" #~ "You have to enter a username and a password to log into CAT-Web \n" #~ " at the CipUX server on [% form.field.server_name.value %]." #~ msgstr "" #~ "Vous devez entrer un nom d'utilisateur et un mot de passe pour vous " #~ "connecter à CAT-Web \n" #~ " sur le serveur CipUX sur [% form.field.server_name.value %]." #, fuzzy #~ msgid "" #~ "You have to provide a password. A password is a secret word, which only " #~ "you should know." #~ msgstr "" #~ "Détails: Vous devez fournir un mot de passe. Un mot de passe est un mot " #~ "secret que seul vous devez connaitre." #, fuzzy #~ msgid "" #~ "You have to provide a valid password and login. Think again and give the " #~ "right login and password for this account." #~ msgstr "" #~ "Détails: Le compte ou le mot de passe que vous avez fourni est incorrect. " #~ "Donnez un nom d'utilisateur et un mot de passe correct pour ce compte." #, fuzzy #~ msgid "" #~ "You have to provide twice the same password. This is to help ensure that " #~ "you did not mistype your password. A password is a secret word, which " #~ "only you should know." #~ msgstr "" #~ "Détails: Vous devez fournir deux fois le meme mot de passe. C'est pour " #~ "que nous soyons sur que l'écriture du mot de passe soit correct." #, fuzzy #~ msgid "actions" #~ msgstr "action" #, fuzzy #~ msgid "allocation" #~ msgstr "action" #, fuzzy #~ msgid "changeable attribute" #~ msgstr "statut" #, fuzzy #~ msgid "cipadmin problem" #~ msgstr "Mot de passe" #, fuzzy #~ msgid "configuration" #~ msgstr "Confirmer" #~ msgid "create a new role" #~ msgstr "création d'un nouveau role" #, fuzzy #~ msgid "create new [% form.field.modality.value %]" #~ msgstr "création d'un(e) [% object %]" #, fuzzy #~ msgid "file problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "module problem" #~ msgstr "nouveau role" #, fuzzy #~ msgid "netgroup" #~ msgstr "groupe" #~ msgid "new ID (role)" #~ msgstr "nouvel ID (role)" #, fuzzy #~ msgid "new object ID" #~ msgstr "Nouvel objet" #, fuzzy #~ msgid "no exception" #~ msgstr "action" #, fuzzy #~ msgid "password problem" #~ msgstr "Mot de passe" #~ msgid "password" #~ msgstr "mot de passe" #~ msgid "repeat password" #~ msgstr "répétez le mot de passe" #, fuzzy #~ msgid "role" #~ msgstr "nouveau role" #, fuzzy #~ msgid "session problem" #~ msgstr "Mot de passe" #, fuzzy #~ msgid "skel" #~ msgstr "administration du squelette" #, fuzzy #~ msgid "static" #~ msgstr "statut" #, fuzzy #~ msgid "template problem" #~ msgstr "Erreur dans le modèle" #, fuzzy #~ msgid "userselfadmin" #~ msgstr "administration des utilisateurs" #~ msgid "submit" #~ msgstr "valider" #~ msgid "Choose file to import" #~ msgstr "Choisissez un fichier à importer" #~ msgid "Disabled" #~ msgstr "Désactiver" #~ msgid "ID (new user login)" #~ msgstr "ID (nouvel identifiant d'utilisateur)" #~ msgid "Import user and course from file" #~ msgstr "Importer un utilisateur et un cours d'un fichier" #~ msgid "New objects" #~ msgstr "Nouveaux objets" #~ msgid "" #~ "Please check this values: \n" #~ " (You can correct single values. But if the alignment is not OK, you have " #~ "to correct the file and load again!)" #~ msgstr "" #~ "S'il vous plait, vérifiez ses valeurs: \n" #~ " (Vous pouvez corriger les valeurs simples. Mais si l'alignement n'est " #~ "pas correct, vous pouvez le corriger et recharger le fichier!)" #~ msgid "Samba" #~ msgstr "Samba" #~ msgid "address" #~ msgstr "adresse" #~ msgid "column" #~ msgstr "colonne" #~ msgid "create new [% object %]" #~ msgstr "création d'un(e) [% object %]" #~ msgid "e-mail address" #~ msgstr "e-mail" #~ msgid "import" #~ msgstr "importer" #~ msgid "" #~ "please give new unique ID (login, user name) and 2 identical passwords" #~ msgstr "" #~ "S'il vous plait, fournissez un ID unique (identifiant, nom d'utilisateur) " #~ "et deux mots de passe identique" #~ msgid "template directory" #~ msgstr "répertoire du modèle" #~ msgid "town" #~ msgstr "ville" #~ msgid "edit" #~ msgstr "éditer" #~ msgid "reset" #~ msgstr "remise à zéro" #, fuzzy #~ msgid "Posix account has been enabled for %s." #~ msgstr "Le compte [% object %] a été activé." #, fuzzy #~ msgid "Posix account has been disabled for %s." #~ msgstr "Le compte [% object %] à été désactivé." #, fuzzy #~ msgid "Samba account has been enabled for %s." #~ msgstr "Le compte [% object %] a été activé." #, fuzzy #~ msgid "Samba account has been disabled for %s." #~ msgstr "Le compte [% object %] à été désactivé." #, fuzzy #~ msgid "User teacher account %s has been created." #~ msgstr "Le compte [% object %] a été activé." #, fuzzy #~ msgid "Usage: please give new unique ID (login) and 2 identical passwords" #~ msgstr "" #~ "S'il vous plait, fournissez un ID unique(nom du role et deux mots de " #~ "passe identique" #~ msgid "create new group/course/class" #~ msgstr "création d'un(e) groupe/cours/classe" #~ msgid "groupadmin" #~ msgstr "administation du groupe" #~ msgid "not changeable" #~ msgstr "non changeable" #~ msgid "please give new unique ID (role name) and 2 identical passwords" #~ msgstr "" #~ "S'il vous plait, fournissez un ID unique(nom du role et deux mots de " #~ "passe identique" #~ msgid "" #~ "(please give new unique ID (login, skel name) and 2 identical passwords)" #~ "
    " #~ msgstr "" #~ "(s'il vous plait, donnez un ID unique(compte, nom du squelette) et 2 mots " #~ "de passe identiques)" #~ msgid "" #~ "please give new unique ID (login, group name) and 2 identical passwords" #~ msgstr "" #~ "S'il vous plait, fournissez un ID unique (identifiant, nom du groupe) et " #~ "deux mots de passe identique" #~ msgid "" #~ "Details: It was not possible to open a file on the file system and exeute " #~ "it. The file name was [% form.field.info1.field %]." #~ msgstr "" #~ "Détails: Il n'a pas été possible d'ouvrir un fichier sur le système et " #~ "de l'éxecuter. Le nom du fichier était [% form.field.info1.field %]." #~ msgid "" #~ "Details: It was possible to execute the command [[% form.field.info1." #~ "field %]], but it failed. The return value of this command was: [[% form." #~ "field.info2.field %]]." #~ msgstr "" #~ "Détails: L'éxecution de la commande était possible [[%form.field.info1." #~ "field %]], mais elle a échouée. La valeur de retour de cette commande " #~ "était: [[% form.field.info2.field %]]." #~ msgid "Details: Please use matching login and password." #~ msgstr "" #~ "Détails: S'il vous plait, utilisez un compte et un mot de passe correct." #~ msgid "" #~ "Details: The provided UID (login, username) is not one of the valid " #~ "system UID names. To see all valid UIDs execute \"cipux_task_list_users\" " #~ "as root." #~ msgstr "" #~ "Détails: L'UID fourni (pseudonyme, nom d'utilisateur) n'est pas un de " #~ "ceux valide du système de noms UID. Pour vois tous les UIDs valide, " #~ "éxecutez \"cipux_task_list_users\" en root" #~ msgid "" #~ "Details: You have no right to access the module [% module %] as [% login " #~ "%]. If you feel that this is a mistake, then you have several " #~ "possibilities:\n" #~ "
  • If your are the admin you can give [% login %] the ACL rights\n" #~ " with the CAT module CipUXadmin.
  • \n" #~ "
  • If you are not the admin, you may ask the admin to give you the " #~ "rights
  • " #~ msgstr "" #~ "Détails: Vous n'avez pas les droits pour accéder au module [% module %] " #~ "en [% login %]. Si vous pensez que c'est une érreur, vous avez plusieurs " #~ "possibilités:\n" #~ "
  • Si vous etes administrareur vous pouvez donner [% login %] aux " #~ "droits ACL\n" #~ " avec le module CAT CipUXadmin.
  • \n" #~ "
  • Si vous n'etes pas administrateur, vous pouvez demander à " #~ "l'administrateur de vous donner des droits
  • " #~ msgid "" #~ "Details: You must provide a CID. A CID is a group identification. Also " #~ "this is called a \"course- or class login." #~ msgstr "" #~ "Détails: Vous devez fournir un CID. Un CID est un identifiant de groupe. " #~ "Aussi appelé un identifiant de \" cours ou classe." #~ msgid "" #~ "Details: You must provide a UID. A UID is a user identification. Also " #~ "this is called a \"login." #~ msgstr "" #~ "Détails Vous devez fournir un UID. Un UID est un identifiant " #~ "d'utilisateur. Aussi appelé un \"login." #~ msgid "Error: Wrong login or password!" #~ msgstr "Erreur: Mauvais indentifiant ou mot de passe!" #~ msgid "Exception Number: [% form.field.number.field %]" #~ msgstr "Exeption numéro: [% form.field.number.field %]" #~ msgid "Exception: Fault while command execution!" #~ msgstr "Exeption: Erreur durant l'éxecution de la commande!" #~ msgid "Exception: No role given!" #~ msgstr "Exeption: Aucun role de donné!" #~ msgid "Exception: Role not valid!" #~ msgstr "Exeption: Role non valide!" #~ msgid "Exception: Wrong login or password!" #~ msgstr "Exeption: Mauvais indentifiant ou mot de passe!" #~ msgid "" #~ "The home directory of the object [% object %] has been resetted." #~ msgstr "" #~ "Le répertoire personnel de l'objet [% object %] a été remis à zéro." #~ msgid "" #~ "The home directory of the object [% object %] has been restored." #~ msgstr "" #~ "Le répertoire personnel de l'objet [% object %] a été restoré." #~ msgid "The object [% object %] was created." #~ msgstr "L'objet [% object %] à été créé." #~ msgid "" #~ "The object [% object %], you requested for creation do allready " #~ "exist and will not be recreated." #~ msgstr "" #~ "L'objet [% object %] que vous avez demandez pour création existe " #~ "déja et ne va pas etre recréé." #~ msgid "The role for [% object %] was set." #~ msgstr "Le role pout [% object %] à été mis en place." #~ msgid "" #~ "The sub-object [% subobject %] was added to object [% object %]" #~ "." #~ msgstr "" #~ "Le sous-objet [% subobject %] a été rajouté à l'objet [% " #~ "object %]." #~ msgid "" #~ "The sub-object [% subobject %] was removed from the object [% " #~ "object %]." #~ msgstr "" #~ "Le sous-objet [% subobject %] a été supprimé de l'objet [% " #~ "object %]." de.po000444001750001750 16636411413636115 21214 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/lib/CipUX/CAT/Web/I18N# German translations for cipux-cat-web package # Copyright (C) 2007 Christian Kuelker # This file is distributed under the same license as the cipux package. # Christian Kuelker , 2010, # Christian Kuelker , 2008, # Christian Kuelker , 2007, # Roland F.Teichert , 2007. msgid "" msgstr "" "Project-Id-Version: CipUX-CAT-Web 3.4.0.2\n" "Report-Msgid-Bugs-To: cipux-devel@cipux.org\n" "POT-Creation-Date: 2008-08-05 18:51+0200\n" "PO-Revision-Date: 2008-04-03 23:35+0200\n" "Last-Translator: Christian Kuelker \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" #: tpl/Berlin/basic_object/list.html:27 tpl/Berlin/module_switch/index.html:46 #: tpl/Zeuthen/basic_object/list.html:16 #: tpl/Zeuthen/module_switch/index.html:15 #: tpl/default/basic_object/list.html:54 msgid "Action" msgstr "Aktion" #: tpl/Berlin/serverinfo/index.html:5 tpl/default/perlversion/index.html:26 #: tpl/default/serverinfo/index.html:26 msgid "Attribute" msgstr "Attribut" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:504 msgid "Basic Group Administration" msgstr "Haupt-Gruppen-Verwaltung" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:493 msgid "Basic Object Administration" msgstr "Haupt-Einheiten-Verwaltung" #: tpl/default/translation/translation.html:66 msgid "Basic admin class assignment" msgstr "Grundlegende Administrator Klassen Zuweisung" #: tpl/default/translation/translation.html:73 msgid "Basic admin management" msgstr "Grundlegendes Administrator Management" #: tpl/default/translation/translation.html:69 msgid "Basic admin role assignment" msgstr "Grundlegende Administrator Management" #: tpl/default/translation/translation.html:74 msgid "Basic class management" msgstr "Grundlegendes Klassen Rollen Zusweisung" #: tpl/default/translation/translation.html:65 msgid "Basic class role assignment" msgstr "Grundlegende Klassen Rollen Zusweisung" #: tpl/default/translation/translation.html:79 msgid "Basic module access" msgstr "Grundlegender Modul Zugriff" #: tpl/default/translation/translation.html:68 msgid "Basic student class assignment" msgstr "Grundlegende Student Klassen Zuweisung" #: tpl/default/translation/translation.html:75 msgid "Basic student management" msgstr "Grundlegendes Student Management" #: tpl/default/translation/translation.html:71 msgid "Basic student role assignment" msgstr "Grundlegende Student Rollen Zuweisung" #: tpl/default/translation/translation.html:67 msgid "Basic teacher class assignment" msgstr "Grundlegende Lehrer Klassen Zuweisung" #: tpl/default/translation/translation.html:76 msgid "Basic teacher management" msgstr "Grundlegendes Lehrer Management" #: tpl/default/translation/translation.html:70 msgid "Basic teacher role assignment" msgstr "Grundlegende Lehrer Rolen Zuweisung" #: tpl/default/translation/translation.html:51 msgid "Berlin" msgstr "Hauptstadt" #: tpl/default/translation/translation.html:80 msgid "Browse CAT module data" msgstr "In CVW Daten navigieren" #: tpl/Berlin/footer/index.html:3 tpl/Zeuthen/footer/index.html:3 #: tpl/default/footer/index.html:3 msgid "CAT" msgstr "CVW" #: tpl/Berlin/header/index.html:8 tpl/Zeuthen/header/index.html:8 #: tpl/default/header/index.html:4 msgid "CAT - CipUX Administration Tool" msgstr "CVW - CipUX Verwaltungswerkzeug" #: tpl/Berlin/module_custody/index.html:16 #: tpl/default/module_custody/index.html:20 msgid "CAT-Web" msgstr "CVW-Web" #: tpl/Berlin/module_custody/index.html:19 #: tpl/Zeuthen/module_custody/index.html:12 msgid "CAT-Web Access enabled" msgstr "CVW-Web Zugriff erlaubt" #: tpl/default/module_custody/index.html:23 msgid "CAT-Web access enabled" msgstr "CVW-Web Zugriff erlaubt" #: tpl/Berlin/serverinfo/index.html:11 tpl/Zeuthen/serverinfo/index.html:10 #: tpl/default/perlversion/index.html:30 tpl/default/serverinfo/index.html:30 msgid "CPU" msgstr "" #: tpl/default/translation/translation.html:77 msgid "Choose a language" msgstr "Eine Sprache auswählen" #: tpl/default/translation/translation.html:78 msgid "Choose a theme" msgstr "Ein Leitmotiv auswählen" #: tpl/Berlin/basic_object/list.html:19 tpl/Berlin/perlversion/index.html:5 #: tpl/default/basic_object/list.html:46 msgid "Count" msgstr "Anzahl" #: tpl/default/translation/translation.html:50 msgid "Danish" msgstr "dänisch" #: tpl/Berlin/module_custody/index.html:18 #: tpl/Zeuthen/module_custody/index.html:11 #: tpl/default/module_custody/index.html:22 msgid "Database registered" msgstr "Datebank registriert" #: tpl/default/login/index.html:54 msgid "Demo restored" msgstr "Demo wiederhergestellt" #: tpl/Berlin/serverinfo/index.html:26 tpl/Zeuthen/serverinfo/index.html:30 #: tpl/default/perlversion/index.html:43 tpl/default/serverinfo/index.html:43 msgid "Domain name" msgstr "Domain Name" #: tpl/default/translation/translation.html:55 msgid "English" msgstr "englisch" #: tpl/Berlin/error/index.html:30 tpl/Zeuthen/error/index.html:30 #: tpl/default/error/index.html:30 msgid "Error" msgstr "Fehler" #: tpl/Berlin/exception/index.html:30 tpl/Zeuthen/exception/index.html:30 #: tpl/default/exception/index.html:30 msgid "Exception" msgstr "Ausnahme" #: tpl/Berlin/serverinfo/index.html:47 tpl/Zeuthen/serverinfo/index.html:56 #: tpl/default/perlversion/index.html:61 tpl/default/serverinfo/index.html:61 msgid "File system" msgstr "Dateisystem" #: tpl/Berlin/module_custody/index.html:17 #: tpl/Zeuthen/module_custody/index.html:10 #: tpl/default/module_custody/index.html:21 msgid "File system installed" msgstr "Dateisystem installiert" #: tpl/Berlin/basic_object/list.html:23 tpl/Zeuthen/basic_object/list.html:12 #: tpl/default/basic_object/list.html:50 msgid "Firstname" msgstr "Vorname" #: tpl/Berlin/serverinfo/index.html:15 tpl/Berlin/serverinfo/index.html:19 #: tpl/Zeuthen/serverinfo/index.html:14 tpl/Zeuthen/serverinfo/index.html:18 #: tpl/default/perlversion/index.html:33 tpl/default/perlversion/index.html:37 #: tpl/default/serverinfo/index.html:33 tpl/default/serverinfo/index.html:37 msgid "Free main memory" msgstr "Freier Hauptspeicher" #: tpl/default/translation/translation.html:56 msgid "French" msgstr "französisch" #: tpl/default/translation/translation.html:54 msgid "German" msgstr "deutsch" #: tpl/Berlin/serverinfo/index.html:8 tpl/Zeuthen/serverinfo/index.html:6 #: tpl/default/perlversion/index.html:29 tpl/default/serverinfo/index.html:29 msgid "Hardware" msgstr "Hardware" #: tpl/Berlin/basic_object/list.html:20 tpl/Zeuthen/basic_object/list.html:9 #: tpl/default/basic_object/list.html:47 #: tpl/default/translation/translation.html:10 #: tpl/default/translation/translation.html:16 #: tpl/default/translation/translation.html:17 msgid "ID" msgstr "Kennung" #: tpl/Berlin/serverinfo/index.html:27 tpl/Zeuthen/serverinfo/index.html:31 #: tpl/default/perlversion/index.html:44 tpl/default/serverinfo/index.html:44 msgid "IP" msgstr "IP" #: tpl/default/translation/translation.html:57 msgid "Japanese" msgstr "japanisch" #: lib/CipUX/CAT/Web/Module/Chooser.pm:134 tpl/Berlin/login/index.html:31 #: tpl/Zeuthen/login/index.html:31 tpl/default/login/index.html:36 msgid "Language" msgstr "Sprache" #: tpl/Berlin/basic_object/list.html:22 tpl/Zeuthen/basic_object/list.html:11 #: tpl/default/basic_object/list.html:49 msgid "Lastname" msgstr "Nachname" #: tpl/Berlin/login/index.html:23 tpl/Zeuthen/login/index.html:23 #: tpl/default/login/index.html:28 msgid "Login" msgstr "Login" #: tpl/Berlin/login/index.html:15 tpl/Zeuthen/login/index.html:15 #: tpl/default/login/index.html:18 msgid "Login to CAT" msgstr "Einwahl in CVW" #: tpl/default/translation/translation.html:81 msgid "Manage CAT modules" msgstr "CVW Module verwalten" #: lib/CipUX/CAT/Web/Module/ModuleBrowser.pm:126 msgid "Module Browser" msgstr "Modul Navigator" #: tpl/default/module_browser/index.html:11 msgid "Module Browser: Modules installed on the file system" msgstr "Modul Navigator: Module, die auf dem Dateisystem installiert sind" #: lib/CipUX/CAT/Web/Module/ModuleCustody.pm:180 #: tpl/default/module_custody/index.html:11 msgid "Module Custody" msgstr "Modul Aufsicht" #: tpl/Berlin/module_custody/index.html:14 #: tpl/Zeuthen/module_custody/index.html:8 #: tpl/default/module_custody/index.html:18 msgid "Module ID" msgstr "Modul Kennung" #: lib/CipUX/CAT/Web/Module/Index.pm:189 msgid "Module Index" msgstr "Modul Index" #: lib/CipUX/CAT/Web/Module/ModuleSwitch.pm:124 msgid "Module Switch" msgstr "Modul Schalter" #: tpl/Berlin/module_custody/index.html:15 #: tpl/Berlin/module_switch/index.html:44 #: tpl/Zeuthen/module_custody/index.html:9 #: tpl/Zeuthen/module_switch/index.html:13 #: tpl/default/module_custody/index.html:19 msgid "Module name" msgstr "Modul Name" #: tpl/Berlin/perlversion/index.html:6 tpl/Zeuthen/perlversion/index.html:5 msgid "Name" msgstr "Name" #: tpl/Berlin/serverinfo/index.html:25 tpl/Zeuthen/serverinfo/index.html:29 #: tpl/default/perlversion/index.html:42 tpl/default/serverinfo/index.html:42 msgid "Node name" msgstr "Name des Knoten" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:643 #: lib/CipUX/CAT/Web/View.pm:88 msgid "OK" msgstr "OK" #: tpl/Berlin/serverinfo/index.html:24 tpl/Zeuthen/serverinfo/index.html:28 #: tpl/default/perlversion/index.html:41 tpl/default/serverinfo/index.html:41 msgid "OS name" msgstr "Name des Betriebssystems" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:377 msgid "Object %s has been removed from course %s." msgstr "Das Objekt %s wurde aus dem Kurs %s entfernt." #: tpl/Berlin/serverinfo/index.html:22 tpl/Zeuthen/serverinfo/index.html:24 #: tpl/default/perlversion/index.html:40 tpl/default/serverinfo/index.html:40 msgid "Operating system" msgstr "Betriebssystem" #: tpl/Berlin/basic_object/list.html:25 tpl/Berlin/login/index.html:27 #: tpl/Zeuthen/basic_object/list.html:14 tpl/Zeuthen/login/index.html:27 #: tpl/default/basic_object/list.html:52 tpl/default/login/index.html:32 msgid "Password" msgstr "Passwort" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:113 msgid "Perl module versions" msgstr "Perl Modul Versionen" #: lib/CipUX/CAT/Web/Setup/Client.pm:224 msgid "Please" msgstr "Bitte" #: lib/CipUX/CAT/Web/Module/Chooser.pm:135 msgid "Please choose a language" msgstr "Bitte eine Sprache auswählen" #: lib/CipUX/CAT/Web/Module/Chooser.pm:122 msgid "Please choose a theme" msgstr "Bitte ein Leitmotiv auswählen" #: tpl/Berlin/basic_object/list.html:26 tpl/Zeuthen/basic_object/list.html:15 #: tpl/default/basic_object/list.html:53 msgid "Repeat password" msgstr "wiederholen Sie das Passwort" #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:151 #: tpl/default/perlversion/index.html:20 tpl/default/serverinfo/index.html:20 msgid "Server information" msgstr "Server Information" #: tpl/Berlin/serverinfo/index.html:42 tpl/Zeuthen/serverinfo/index.html:48 #: tpl/default/perlversion/index.html:58 tpl/default/serverinfo/index.html:58 msgid "Services" msgstr "Dienste" #: tpl/Berlin/module_switch/index.html:45 #: tpl/Zeuthen/module_switch/index.html:14 msgid "Short description" msgstr "Kurzbeschreibung:" #: tpl/default/translation/translation.html:82 msgid "Switch on/off modules" msgstr "Module an- und ausschalten" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:344 msgid "The object %s has been added to %s." msgstr "Das Objekt %s wurde %s hinzugefügt." #: lib/CipUX/CAT/Web/Controller.pm:819 msgid "The session got invalid. Please login again." msgstr "Das Sitzungsticket wurde ungülting. Bitte neu einwählen." #: tpl/Berlin/module_browser/index.html:9 msgid "The tasks of modules which are installed on the filesystem" msgstr "Modul Navigator: Module, die auf dem Dateisystem installiert sind" #: tpl/Berlin/login/index.html:35 tpl/Zeuthen/login/index.html:35 #: tpl/default/login/index.html:40 msgid "Theme" msgstr "Leitmotiv" #: tpl/default/module_browser/index.html:20 msgid "" "This CAT module browser shows all CAT modules installed on the system, " "regardless if you can use them or not. More information about making a " "module usable to the system see the bottom of the page. If you miss some " "module, you have to install it as root on the filesystem from source or with " "your favorite package manager. This page can help you to find out if your " "installation was successful." msgstr "" "Dieser CVW Modul Navigator zeigt alle CVW Modue, die auf dem Dateisystem " "installiert sind. Gleichgültig ob ob sie nutzar sind oder nicht. Mehr " "Informationen darüber wie man eine Module nutzbar für das System macht, " "siehe unten auf dieser Seite. Wenn eines oder einige Module vermisst werden, " "müssen sie zuerst als root auf dem Dateisystem installiert werden. Entwerder " "aus dem Quellen oder durch das Paket System. Diese Seite kann dabei helfen " "zu erkennen ob eine solche Installation erfolgreich war." #: tpl/default/module_switch/index.html:41 msgid "" "This module switch shows all registered CAT modules. CAT modules with a " "green color are enabled for the index (home - start page). The red color " "indicates that they are disabled for the index." msgstr "" "Dieser Modul Schalter zeigt alle registrierten CVW Module. CVW Module mit " "einer grünen Farbe sind aktiv für den Index. Die rote Farbe zeigt an, dass " "sie für den Index gesperrt sind." #: tpl/Berlin/login/index.html:19 tpl/Zeuthen/login/index.html:19 #: tpl/default/login/index.html:24 msgid "To gain access to CAT, you have to enter a username and a password ..." msgstr "Für den Zugriff auf CVW bitte Benutzernamen und Passwort eingeben ..." #: tpl/default/module_browser/index.html:48 msgid "" "To use a module you have to register and enable them with the command:\n" " cipux_cat_module --register --object NAME --enable" msgstr "" "Um ein Module zu nutzen muss es mit dem folgenden Kommando registiert und " "frei geschaltet werden:\n" " cipux_cat_module --register --object NAME --enable" #. ('Module::List::Pluggable') #. ($m) #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:135 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:175 msgid "To use this module, please install [_1]!" msgstr "Um dieses Modul zu nuten, bitte [_1] installieren!" #: tpl/Berlin/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:12 #: tpl/default/perlversion/index.html:31 tpl/default/serverinfo/index.html:31 msgid "Total main memory" msgstr "Gesamter Hauptspeicher" #: tpl/Berlin/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:16 #: tpl/default/perlversion/index.html:35 tpl/default/serverinfo/index.html:35 msgid "Total swap memory" msgstr "Gesamter Auslagerungsspeicher" #: tpl/Berlin/serverinfo/index.html:35 tpl/Zeuthen/serverinfo/index.html:39 #: tpl/default/perlversion/index.html:52 tpl/default/serverinfo/index.html:52 msgid "Up since" msgstr "Im Betrieb seit" #: tpl/Berlin/serverinfo/index.html:37 tpl/Zeuthen/serverinfo/index.html:41 #: tpl/default/perlversion/index.html:54 tpl/default/serverinfo/index.html:54 msgid "Up since days" msgstr "Im Betrieb seit (Tage)" #: tpl/Berlin/serverinfo/index.html:36 tpl/Zeuthen/serverinfo/index.html:40 #: tpl/default/perlversion/index.html:53 tpl/default/serverinfo/index.html:53 msgid "Up since hours" msgstr "Im Betrieb seit (Stunden)" #: tpl/Berlin/serverinfo/index.html:38 tpl/Zeuthen/serverinfo/index.html:42 #: tpl/default/perlversion/index.html:55 tpl/default/serverinfo/index.html:55 msgid "Up since months" msgstr "Im Betrieb seit (Monaten)" #: tpl/Berlin/basic_object/create.html:60 #: tpl/default/basic_object/create.html:62 msgid "Usage: please give new unique ID and 2 identical passwords." msgstr "" "Hinweis: Bitte geben sie eine eindeutige Kennung und zweimal identisch das " "Passwort ein." #: tpl/Berlin/basic_object/create.html:56 #: tpl/default/basic_object/create.html:52 msgid "" "Usage: please give new unique ID, firstname, lastname and 2 identical " "passwords." msgstr "" "Hinweis: Bitte geben sie eine eindeutige Kennung und zweimal identisch das " "Passwort ein." #: tpl/Berlin/serverinfo/index.html:6 tpl/default/perlversion/index.html:27 #: tpl/default/serverinfo/index.html:27 msgid "Value" msgstr "Wert" #: tpl/Berlin/perlversion/index.html:7 tpl/Zeuthen/perlversion/index.html:6 msgid "Version" msgstr "Version" #: tpl/default/translation/translation.html:52 msgid "Zeuthen" msgstr "Zeuthen" #: tpl/Berlin/basic_assignment/group.html:52 #: tpl/Zeuthen/basic_assignment/group.html:9 #: tpl/default/basic_assignment/group.html:53 msgid "action" msgstr "Aktion" #: tpl/Berlin/basic_assignment/index.html:42 #: tpl/Zeuthen/basic_assignment/index.html:9 #: tpl/default/basic_assignment/index.html:44 msgid "action on object member" msgstr "Aktion auf Gruppenmitgliedern" #: lib/CipUX/CAT/Web/Module/Index.pm:172 msgid "admin" msgstr "Admin" #: tpl/default/translation/translation.html:59 msgid "admin class assignment" msgstr "Admin => Klasse" #: tpl/default/translation/translation.html:62 msgid "admin role assignment" msgstr "Admin => Rolle" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:324 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: tpl/default/translation/translation.html:46 msgid "admit" msgstr "jmd. zulassen" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:411 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:621 msgid "admit member" msgstr "Mitglieder zulassen" #: tpl/Berlin/serverinfo/index.html:52 tpl/Zeuthen/serverinfo/index.html:61 #: tpl/default/perlversion/index.html:64 tpl/default/serverinfo/index.html:64 msgid "avail" msgstr "benutzbar" #: tpl/Berlin/footer/index.html:7 tpl/Zeuthen/footer/index.html:7 #: tpl/default/footer/index.html:7 msgid "back" msgstr "zurück" #: tpl/default/header/index.html:3 msgid "back to index" msgstr "zurück zum Index" #: tpl/Zeuthen/serverinfo/index.html:13 tpl/Zeuthen/serverinfo/index.html:15 #: tpl/Zeuthen/serverinfo/index.html:17 tpl/Zeuthen/serverinfo/index.html:19 #: tpl/default/perlversion/index.html:32 tpl/default/perlversion/index.html:34 #: tpl/default/perlversion/index.html:36 tpl/default/perlversion/index.html:38 #: tpl/default/serverinfo/index.html:32 tpl/default/serverinfo/index.html:34 #: tpl/default/serverinfo/index.html:36 tpl/default/serverinfo/index.html:38 msgid "bytes" msgstr "Bytes" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:719 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 msgid "cancel" msgstr "abbrechen" #: lib/CipUX/CAT/Web/Module/Chooser.pm:116 #: lib/CipUX/CAT/Web/Module/Chooser.pm:130 msgid "change" msgstr "ändern" #: tpl/default/translation/translation.html:30 msgid "class" msgstr "Klasse" #: tpl/default/translation/translation.html:58 msgid "class role assignment" msgstr "Klasse => Rolle" #: tpl/default/translation/translation.html:31 msgid "course" msgstr "Kurs" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:309 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:479 #: tpl/Berlin/basic_object/create.html:7 #: tpl/Zeuthen/basic_object/create.html:5 msgid "create" msgstr "erzeugen" #: tpl/Berlin/basic_object/create.html:20 #: tpl/default/basic_object/create.html:12 msgid "create new object" msgstr "erzeuge neues Objekt" #: tpl/Berlin/status_line/index.html:30 tpl/Zeuthen/status_line/index.html:30 #: tpl/default/status_line/index.html:30 msgid "date" msgstr "Datum" #: lib/CipUX/CAT/Web/L10N.pm:90 tpl/default/translation/translation.html:53 msgid "default" msgstr "vorausgewählt" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:285 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "delete" msgstr "löschen" #: tpl/Berlin/serverinfo/index.html:55 tpl/Zeuthen/serverinfo/index.html:64 #: tpl/default/perlversion/index.html:67 tpl/default/serverinfo/index.html:67 msgid "device" msgstr "Gerät" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:358 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:800 #: tpl/default/translation/translation.html:47 msgid "dismiss" msgstr "jmd. entlassen" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:435 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:622 msgid "dismiss member" msgstr "Mitglieder entlassen" #: tpl/Berlin/module_switch/index.html:43 #: tpl/Zeuthen/module_switch/index.html:12 msgid "enabled" msgstr "aktiv" #: tpl/Berlin/basic_object/create.html:30 #: tpl/Zeuthen/basic_object/create.html:17 #: tpl/default/basic_object/create.html:23 msgid "firstname" msgstr "Vorname" #: tpl/default/translation/translation.html:28 msgid "group" msgstr "Gruppe" #: tpl/Berlin/header/index.html:5 tpl/Zeuthen/header/index.html:5 #: tpl/Zeuthen/index/index.html:8 msgid "home" msgstr "Index" #: tpl/Berlin/serverinfo/index.html:44 tpl/Zeuthen/serverinfo/index.html:51 #: tpl/default/perlversion/index.html:59 tpl/default/serverinfo/index.html:59 msgid "httpd" msgstr "Webserver" #: tpl/Berlin/error/index.html:33 tpl/Zeuthen/error/index.html:33 #: tpl/default/error/index.html:34 tpl/default/translation/translation.html:49 msgid "index" msgstr "Index" #: tpl/Berlin/serverinfo/index.html:31 tpl/Zeuthen/serverinfo/index.html:35 #: tpl/default/perlversion/index.html:48 tpl/default/serverinfo/index.html:48 msgid "is BSD?" msgstr "ist es BSD?" #: tpl/Berlin/serverinfo/index.html:28 tpl/Zeuthen/serverinfo/index.html:32 #: tpl/default/perlversion/index.html:45 tpl/default/serverinfo/index.html:45 msgid "is Linux?" msgstr "ist es Linux?" #: tpl/default/translation/translation.html:38 msgid "language" msgstr "Sprache" #: tpl/Berlin/basic_object/create.html:34 #: tpl/Zeuthen/basic_object/create.html:21 #: tpl/default/basic_object/create.html:27 msgid "lastname" msgstr "Nachname" #: tpl/default/translation/translation.html:36 msgid "lecture" msgstr "Lehrvortrag" #: tpl/default/translation/translation.html:25 msgid "lecturer" msgstr "Dozent" #: tpl/default/translation/translation.html:45 msgid "list" msgstr "Liste" #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:388 #: lib/CipUX/CAT/Web/Module/BasicAssignment.pm:620 msgid "list member" msgstr "Mitglieder auflisten" #: tpl/Berlin/status_line/index.html:40 tpl/Zeuthen/status_line/index.html:40 #: tpl/default/status_line/index.html:40 msgid "locale" msgstr "Sprache" #: tpl/Berlin/exception/index.html:33 tpl/Berlin/status_line/index.html:13 #: tpl/Zeuthen/exception/index.html:33 tpl/Zeuthen/status_line/index.html:13 #: tpl/default/exception/index.html:34 tpl/default/status_line/index.html:13 msgid "login" msgstr "Login" #: lib/CipUX/CAT/Web/View.pm:178 tpl/Berlin/header/index.html:12 #: tpl/Zeuthen/header/index.html:12 tpl/Zeuthen/index/index.html:9 #: tpl/default/translation/translation.html:27 msgid "logout" msgstr "Sitzung beenden " #: tpl/default/translation/translation.html:41 msgid "module access" msgstr "Modul Zugriff" #: tpl/default/translation/translation.html:39 msgid "module browser" msgstr "Modul Navigator" #: tpl/default/translation/translation.html:42 msgid "module custody" msgstr "Modul Aufsicht" #: tpl/default/translation/translation.html:72 msgid "module overview" msgstr "Modul Übersicht" #: tpl/default/translation/translation.html:40 msgid "module switch" msgstr "Modul Schalter" #: tpl/Berlin/serverinfo/index.html:51 tpl/Zeuthen/serverinfo/index.html:60 #: tpl/default/perlversion/index.html:63 tpl/default/serverinfo/index.html:63 msgid "mount" msgstr "befestigt" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:98 msgid "n.a." msgstr "nicht verfügbar" #: tpl/Berlin/module_custody/index.html:58 #: tpl/Berlin/module_custody/index.html:64 #: tpl/default/module_custody/index.html:36 #: tpl/default/module_custody/index.html:41 msgid "negligible" msgstr "irrelevant" #: tpl/Berlin/basic_object/create.html:25 #: tpl/Zeuthen/basic_object/create.html:12 #: tpl/default/basic_object/create.html:18 msgid "new ID (login)" msgstr "neue ID (Login)" #: tpl/Berlin/basic_object/create.html:39 #: tpl/Zeuthen/basic_object/create.html:26 #: tpl/default/basic_object/create.html:32 msgid "new password" msgstr "neues Passwort" #: tpl/Berlin/module_custody/index.html:31 #: tpl/Berlin/module_custody/index.html:39 #: tpl/Berlin/module_custody/index.html:49 #: tpl/Berlin/module_custody/index.html:62 #: tpl/Berlin/module_switch/index.html:56 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:25 #: tpl/Zeuthen/module_custody/index.html:32 #: tpl/Zeuthen/module_custody/index.html:40 #: tpl/Zeuthen/module_switch/index.html:25 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:30 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:40 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "no" msgstr "nein" #: tpl/Berlin/basic_assignment/group.html:51 #: tpl/Berlin/basic_assignment/index.html:39 #: tpl/Zeuthen/basic_assignment/group.html:8 #: tpl/Zeuthen/basic_assignment/index.html:6 #: tpl/default/basic_assignment/group.html:52 #: tpl/default/basic_assignment/index.html:41 msgid "object" msgstr "Objekt" #: tpl/default/translation/translation.html:83 msgid "perlversion" msgstr "Perl Version" #: tpl/default/translation/translation.html:23 msgid "professor" msgstr "Professor" #: tpl/default/translation/translation.html:22 msgid "pupil" msgstr "Schüler" #: tpl/default/translation/translation.html:37 msgid "reading" msgstr "Vorlesung" #: tpl/Berlin/basic_object/create.html:43 #: tpl/Zeuthen/basic_object/create.html:30 #: tpl/default/basic_object/create.html:36 msgid "repeat new password" msgstr "wiederholen Sie das neue Passwort" #: tpl/default/translation/translation.html:35 msgid "seminar" msgstr "Seminar" #: tpl/Berlin/status_line/index.html:8 tpl/Zeuthen/status_line/index.html:8 #: tpl/default/status_line/index.html:8 msgid "server" msgstr "Server" #: tpl/default/translation/translation.html:84 msgid "serverinfo" msgstr "Server Info" #: tpl/Berlin/status_line/index.html:51 tpl/Zeuthen/status_line/index.html:51 #: tpl/default/status_line/index.html:51 msgid "session" msgstr "Sitzung" #: lib/CipUX/CAT/Web/Module/BasicObject.pm:267 #: lib/CipUX/CAT/Web/Module/BasicObject.pm:554 msgid "set" msgstr "setzen" #: tpl/Berlin/module_browser/index.html:29 #: tpl/Zeuthen/module_browser/index.html:20 msgid "show task" msgstr "Zeige Kommando" #: tpl/Berlin/status_line/index.html:18 tpl/Zeuthen/status_line/index.html:18 #: tpl/default/status_line/index.html:18 msgid "status" msgstr "Status" #: tpl/default/translation/translation.html:21 msgid "student" msgstr "Student" #: tpl/default/translation/translation.html:61 msgid "student class assignment" msgstr "Student => Klasse" #: tpl/default/translation/translation.html:64 msgid "student role assignment" msgstr "Student => Rolle" #: tpl/default/translation/translation.html:29 msgid "study-group" msgstr "Arbeitsgemeinschaft" #: tpl/default/translation/translation.html:24 msgid "teacher" msgstr "Lehrer" #: tpl/default/translation/translation.html:60 msgid "teacher class assignment" msgstr "Lehrer => Klasse" #: tpl/default/translation/translation.html:63 msgid "teacher role assignment" msgstr "Lehrer => Role" #: tpl/default/translation/translation.html:32 msgid "team" msgstr "Team" #: lib/CipUX/CAT/Web/Module/Chooser.pm:121 #: tpl/Berlin/status_line/index.html:45 tpl/Zeuthen/status_line/index.html:45 #: tpl/default/status_line/index.html:45 #: tpl/default/translation/translation.html:44 msgid "theme" msgstr "Leitmotiv" #: tpl/Berlin/serverinfo/index.html:53 tpl/Zeuthen/serverinfo/index.html:62 #: tpl/default/perlversion/index.html:65 tpl/default/serverinfo/index.html:65 msgid "total" msgstr "gesamt" #: tpl/default/translation/translation.html:26 msgid "tutor" msgstr "Tutor" #: tpl/default/translation/translation.html:34 msgid "tutorial" msgstr "Übung" #: lib/CipUX/CAT/Web/Module/PerlVersion.pm:101 #: lib/CipUX/CAT/Web/Module/ServerInfo.pm:110 #: tpl/Berlin/module_custody/index.html:41 #: tpl/default/module_custody/index.html:30 #: tpl/default/translation/translation.html:48 msgid "unknown" msgstr "unbekannt" #: tpl/Berlin/serverinfo/index.html:54 tpl/Zeuthen/serverinfo/index.html:63 #: tpl/default/perlversion/index.html:66 tpl/default/serverinfo/index.html:66 msgid "used" msgstr "benutzt" #: tpl/default/translation/translation.html:43 msgid "userlist" msgstr "Benutzerliste" #: tpl/Berlin/status_line/index.html:35 tpl/Zeuthen/status_line/index.html:35 #: tpl/default/status_line/index.html:35 msgid "version" msgstr "Version" #: tpl/default/translation/translation.html:33 msgid "workshop" msgstr "Workshop" #: tpl/Berlin/module_custody/index.html:29 #: tpl/Berlin/module_custody/index.html:36 #: tpl/Berlin/module_custody/index.html:47 #: tpl/Berlin/module_custody/index.html:56 #: tpl/Berlin/module_switch/index.html:54 tpl/Berlin/serverinfo/index.html:29 #: tpl/Berlin/serverinfo/index.html:32 #: tpl/Zeuthen/module_custody/index.html:23 #: tpl/Zeuthen/module_custody/index.html:30 #: tpl/Zeuthen/module_custody/index.html:38 #: tpl/Zeuthen/module_switch/index.html:23 #: tpl/Zeuthen/serverinfo/index.html:33 tpl/Zeuthen/serverinfo/index.html:36 #: tpl/default/module_custody/index.html:28 #: tpl/default/module_custody/index.html:29 #: tpl/default/module_custody/index.html:32 #: tpl/default/module_custody/index.html:35 #: tpl/default/perlversion/index.html:46 tpl/default/perlversion/index.html:49 #: tpl/default/serverinfo/index.html:46 tpl/default/serverinfo/index.html:49 msgid "yes" msgstr "ja" #~ msgid "Perl module version" #~ msgstr "Perl Modul Version" #, fuzzy #~ msgid "Module" #~ msgstr "Modul Kennung" #~ msgid "object_class_assignment" #~ msgstr "Object => Klasse" #~ msgid "Username (ID, Login)" #~ msgstr "Benutzerkennung (ID, Login)" #~ msgid "change status" #~ msgstr "ändere Status" #~ msgid "The CAT module %s status has changed." #~ msgstr "Der Status des CAT Moduls %s wurde geändert." #~ msgid "The password for %s has been changed." #~ msgstr "Das Passwort für %s wurde geändert." #~ msgid "The object %s has been deleted." #~ msgstr "Das Objekt %s wurde gelöscht." #~ msgid "The object %s has been created." #~ msgstr "Das Konto %s wurde erzeugt." #~ msgid "take" #~ msgstr "übernehmen" #~ msgid "give" #~ msgstr "geben" #~ msgid "take member" #~ msgstr "Mitglieder hinzunehmen" #~ msgid "give member away" #~ msgstr "Mitglieder weggeben" #~ msgid "list all modules" #~ msgstr "alle Module auflisten" #, fuzzy #~ msgid "Add a member to a given CAT module." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given admin account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given assistant account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given class share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given course share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given lecture share account." #~ msgstr "Erzeuge ein Lehrvortrags-Freigabe-Konto." #, fuzzy #~ msgid "Add a member to a given lecturer account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given professor account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given pupil account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given reading share account." #~ msgstr "Erzeuge ein Vorlesungs-Freigabe-Konto." #, fuzzy #~ msgid "Add a member to a given role account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given seminar share account." #~ msgstr "Erzeuge ein Seminar-Freigabe-Konto." #, fuzzy #~ msgid "Add a member to a given skel account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given student account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given studygroup share account." #~ msgstr "Auflistung aller Arbeitsgemeinshafts-Freigabe-Konten." #, fuzzy #~ msgid "Add a member to a given task." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given teacher account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given team share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given tutor account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given tutorial share account." #~ msgstr "Erzeuge ein Uebungs-Freigabe-Konto." #, fuzzy #~ msgid "Add a member to a given user account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Add a member to a given workshop share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #~ msgid "Additional Information:" #~ msgstr "Zusätzliche Information:" #~ msgid "Author" #~ msgstr "Autor" #, fuzzy #~ msgid "CID problem" #~ msgstr "LDAP Problem" #, fuzzy #~ msgid "Change the admin account role." #~ msgstr "Erzeuge ein Admin-Konto." #, fuzzy #~ msgid "Change the assistant account role." #~ msgstr "Erzeuge ein Assistent-Konto." #, fuzzy #~ msgid "Change the client or clients of a given netgroup." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Change the lecturer account role." #~ msgstr "Erzeuge ein Dozenten-Konto." #, fuzzy #~ msgid "Change the password of a given admin account." #~ msgstr "Erzeuge ein Admin-Konto." #, fuzzy #~ msgid "Change the password of a given assistant account." #~ msgstr "Erzeuge ein Assistent-Konto." #, fuzzy #~ msgid "Change the password of a given lecture account." #~ msgstr "Erzeuge ein Dozenten-Konto." #, fuzzy #~ msgid "Change the password of a given lecturer account." #~ msgstr "Erzeuge ein Dozenten-Konto." #, fuzzy #~ msgid "Change the password of a given professor account." #~ msgstr "Erzeuge ein Professor-Konto." #, fuzzy #~ msgid "Change the password of a given pupil account." #~ msgstr "Erzeuge ein Schüler-Konto." #, fuzzy #~ msgid "Change the password of a given student account." #~ msgstr "Erzeuge ein Studenten-Konto." #, fuzzy #~ msgid "Change the password of a given teacher account." #~ msgstr "Erzeuge ein Lehrer-Konto." #, fuzzy #~ msgid "Change the password of a given tutor account." #~ msgstr "Erzeuge ein Tutor-Konto." #, fuzzy #~ msgid "Change the password of a given user account." #~ msgstr "Erzeuge ein Benutzer-Konto." #, fuzzy #~ msgid "Change the professor account role." #~ msgstr "Erzeuge ein Professor-Konto." #, fuzzy #~ msgid "Change the pupil account role." #~ msgstr "Erzeuge ein Schueler-Konto." #, fuzzy #~ msgid "Change the student account role." #~ msgstr "Erzeuge ein Studenten-Konto." #, fuzzy #~ msgid "Change the teacher account role." #~ msgstr "Erzeuge ein Lehrer-Konto." #, fuzzy #~ msgid "Change the tutor account role." #~ msgstr "Erzeuge ein Tutor-Konto." #, fuzzy #~ msgid "Change the user account role." #~ msgstr "Erzeuge ein Benutzer-Konto." #, fuzzy #~ msgid "Client Allocation" #~ msgstr "Aktion" #~ msgid "Create a admin account." #~ msgstr "Erzeuge ein Admin-Konto." #~ msgid "Create a assistant account." #~ msgstr "Erzeuge ein Assistent-Konto." #~ msgid "Create a lecturer account." #~ msgstr "Erzeuge ein Dozenten-Konto." #, fuzzy #~ msgid "Create a netgroup." #~ msgstr "Erzeuge einen neuen Raum." #~ msgid "Create a professor account." #~ msgstr "Erzeuge ein Professor-Konto." #~ msgid "Create a pupil account." #~ msgstr "Erzeuge ein Schüler-Konto." #~ msgid "Create a room." #~ msgstr "Erzeuge einen neuen Raum." #~ msgid "Create a student account." #~ msgstr "Erzeuge ein Studenten-Konto." #~ msgid "Create a teacher account." #~ msgstr "Erzeuge ein Lehrer-Konto." #~ msgid "Create a tutor account." #~ msgstr "Erzeuge ein Tutor-Konto." #~ msgid "Create a user account." #~ msgstr "Erzeuge ein Benutzer-Konto." #~ msgid "Create class share account." #~ msgstr "Erzeuge ein Klassen-Freigabe-Konto." #, fuzzy #~ msgid "Create client." #~ msgstr "Erzeuge ein Klassen-Freigabe-Konto." #~ msgid "Create course share account." #~ msgstr "Erzeuge ein Kurs-Freigabe-Konto." #~ msgid "Create lecture share account." #~ msgstr "Erzeuge ein Lehrvortrags-Freigabe-Konto." #~ msgid "Create reading share account." #~ msgstr "Erzeuge ein Vorlesungs-Freigabe-Konto." #, fuzzy #~ msgid "Create role account." #~ msgstr "Erzeuge ein Benutzer-Konto." #~ msgid "Create seminar share account." #~ msgstr "Erzeuge ein Seminar-Freigabe-Konto." #, fuzzy #~ msgid "Create skel account." #~ msgstr "Erzeuge ein Benutzer-Konto." #, fuzzy #~ msgid "Create studygroup share account." #~ msgstr "Erzeuge ein Lehrvortrags-Freigabe-Konto." #~ msgid "Create team share account." #~ msgstr "Erzeuge ein Team-Freigabe-Konto." #~ msgid "Create tutorial share account." #~ msgstr "Erzeuge ein Uebungs-Freigabe-Konto." #, fuzzy #~ msgid "Create workshop share account." #~ msgstr "Erzeuge ein Kurs-Freigabe-Konto." #, fuzzy #~ msgid "De-register a CAT module." #~ msgstr "Ein CAT Modul registrieren." #, fuzzy #~ msgid "De-register a task." #~ msgstr "Ein CAT Modul registrieren." #, fuzzy #~ msgid "Delete all client attributes of a given netgroup." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #~ msgid "Desciption" #~ msgstr "Beschreibung" #, fuzzy #~ msgid "Destroy a admin account." #~ msgstr "Auflistung aller Studenten-Konten." #, fuzzy #~ msgid "Destroy a assistant account." #~ msgstr "Auflistung aller Studenten-Konten." #, fuzzy #~ msgid "Destroy a lecturer account." #~ msgstr "Auflistung aller Dozenten-Konten." #, fuzzy #~ msgid "Destroy a netgroup." #~ msgstr "Auflistung aller Netzgruppen." #, fuzzy #~ msgid "Destroy a professor account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "Destroy a pupil account." #~ msgstr "Auflistung aller Schüler-Konten." #, fuzzy #~ msgid "Destroy a room." #~ msgstr "Auflistung aller Netzgruppen." #, fuzzy #~ msgid "Destroy a student account." #~ msgstr "Auflistung aller Studenten-Konten." #, fuzzy #~ msgid "Destroy a teacher account." #~ msgstr "Auflistung aller Lehrer-Konten." #, fuzzy #~ msgid "Destroy a tutor account." #~ msgstr "Auflistung aller Tutor-Konten." #, fuzzy #~ msgid "Destroy a user account." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Destroy class share account." #~ msgstr "Auflistung Benutzer-Konten." #, fuzzy #~ msgid "Destroy client." #~ msgstr "Auflistung Benutzer-Konten." #, fuzzy #~ msgid "Destroy course share account." #~ msgstr "Alle Kurse wurden gelistet." #, fuzzy #~ msgid "Destroy lecture share account." #~ msgstr "Auflistung aller Dozenten-Konten." #, fuzzy #~ msgid "Destroy reading share account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "Destroy role account." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Destroy seminar share account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "Destroy skel account." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Destroy studygroup share account." #~ msgstr "Auflistung aller Dozenten-Konten." #, fuzzy #~ msgid "Destroy team share account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "Destroy tutorial share account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "Destroy workshop share account." #~ msgstr "Alle Kurse wurden gelistet." #, fuzzy #~ msgid "Disable a given CAT module." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Disable a given task stored in LDAP." #~ msgstr "Alle aktivierten Aufgaben auflisten, die im LDAP gespeichert sind." #, fuzzy #~ msgid "Do not try to delete this account." #~ msgstr "Auflistung aller Dozenten-Konten." #, fuzzy #~ msgid "Enable a given task stored in LDAP." #~ msgstr "Alle aktivierten Aufgaben auflisten, die im LDAP gespeichert sind." #~ msgid "Error Number:" #~ msgstr "Fehlernummer:" #~ msgid "Error: Sorry, this module is not implemented yet!" #~ msgstr "Fehler: Entschuldigung, diese Modul ist noch nicht implementiert!" #~ msgid "Exception Number:" #~ msgstr "Ausnahmebedingung:" #, fuzzy #~ msgid "GID problem" #~ msgstr "LDAP Problem" #, fuzzy #~ msgid "Get \"cipuxIsEnabled\" from a given CAT module." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Get \"cipuxIsEnabled\" from a given task stored in LDAP." #~ msgstr "Alle inaktiven Aufgaben auflisten, die im LDAP gespeichert sind." #, fuzzy #~ msgid "Get first-, lastname and role info from all admin accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all assistant accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all lecturer accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all professor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all pupil accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all student accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all teacher accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all tutor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get first-, lastname and role info from all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all admin accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all assistant accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all lecturer accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all professor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all pupil accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all skel accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all student accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all teacher accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all tutor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname and lastname info from all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all admin accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all assistant accounts." #~ msgstr "Auflistung aller Assistenten-Konten." #, fuzzy #~ msgid "Get firstname info from all lecturer accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all professor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all pupil accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all student accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all teacher accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all tutor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get firstname info from all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get home directory info from all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all admin accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all assistant accounts." #~ msgstr "Auflistung aller Studenten-Konten." #, fuzzy #~ msgid "Get lastname info from all lecturer accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all professor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all pupil accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all student accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all teacher accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all tutor accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "Get lastname info from all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #~ msgid "ID (new skel login)" #~ msgstr "Kennung (Neues Vorlagen Login)" #~ msgid "Icon" #~ msgstr "Piktogramm" #, fuzzy #~ msgid "" #~ "If you want to help, join #cipux at IRC or mail christian.kuelker@cipworx.org(DE,EN," #~ "JP) or mail x.oswald@free.fr (FR," #~ "EN)." #~ msgstr "" #~ "Wenn Sie mithelfen wollen CipUX zu verbessen, können Sie uns im IRC Kanal " #~ "#cipux erreichen oder eine E-Mail christian.kuelker@cipworx.org (DE,EN,JP), x.oswald@free.fr(FR,EN) senden." #~ msgid "LDAP attribute problem" #~ msgstr "LDAP Attribut Problem" #~ msgid "LDAP problem" #~ msgstr "LDAP Problem" #~ msgid "License" #~ msgstr "Lizenz" #~ msgid "List all CAT modules." #~ msgstr "Alle Module auflisten." #~ msgid "List all admin accounts." #~ msgstr "Auflistung aller Admin-Konten." #~ msgid "List all assistant accounts." #~ msgstr "Auflistung aller Assistenten-Konten." #~ msgid "List all class share accounts." #~ msgstr "Auflistung aller Klassen-Freigabe-Konten." #, fuzzy #~ msgid "List all clients." #~ msgstr "Auflistung aller Rollen-Konten." #~ msgid "List all course share accounts." #~ msgstr "Auflistung aller Kurs-Freigabe-Konten." #~ msgid "List all disabled CAT modules." #~ msgstr "Alle inaktiven CAT Module auflisten." #~ msgid "List all disabled tasks stored in LDAP." #~ msgstr "Alle inaktiven Aufgaben auflisten, die im LDAP gespeichert sind." #~ msgid "List all enabled CAT modules." #~ msgstr "Alle aktivierten CAT Module auflisten." #~ msgid "List all enabled tasks stored in LDAP." #~ msgstr "Alle aktivierten Aufgaben auflisten, die im LDAP gespeichert sind." #~ msgid "List all lecture share accounts." #~ msgstr "Auflistung aller Lehrvortrags-Freigabe-Konten." #~ msgid "List all lecturer accounts." #~ msgstr "Auflistung aller Dozenten-Konten." #~ msgid "List all members of a given CAT module." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given admin account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given assistant account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given class share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given course share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given lecture share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given lecturer account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given netgroup." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given professor account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given pupil account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given reading share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given role account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given seminar share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given skel account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given student account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given studygroup share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given task stored in LDAP." #~ msgstr "Alle aktivierten Aufgaben auflisten, die im LDAP gespeichert sind." #, fuzzy #~ msgid "List all members of a given teacher account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given team share account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given tutor account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given tutorial share account." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "List all members of a given user account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "List all members of a given workshop share account." #~ msgstr "Auflistung aller Rollen-Konten." #~ msgid "List all netgroups." #~ msgstr "Auflistung aller Netzgruppen." #~ msgid "List all professor accounts." #~ msgstr "Auflistung aller Professor-Konten." #~ msgid "List all pupil accounts." #~ msgstr "Auflistung aller Schüler-Konten." #~ msgid "List all reading share accounts." #~ msgstr "Auflistung aller Vorlesungs-Freigabe-Konten." #~ msgid "List all role accounts." #~ msgstr "Auflistung aller Rollen-Konten." #~ msgid "List all rooms." #~ msgstr "Auflistung aller Räume." #~ msgid "List all seminar share accounts." #~ msgstr "Auflistung Seminar-Freigabe-Konten." #~ msgid "List all skel accounts." #~ msgstr "Auflistung aller Vorlage-Verzeichnis-Konten." #~ msgid "List all student accounts." #~ msgstr "Auflistung aller Studenten-Konten." #~ msgid "List all studygroup share accounts." #~ msgstr "Auflistung aller Arbeitsgemeinshafts-Freigabe-Konten." #, fuzzy #~ msgid "List all tasks stored in LDAP" #~ msgstr "Alle aktivierten Aufgaben auflisten, die im LDAP gespeichert sind." #~ msgid "List all teacher accounts." #~ msgstr "Auflistung aller Lehrer-Konten." #~ msgid "List all team share accounts." #~ msgstr "Auflistung aller Team-Freigabe-Konten." #~ msgid "List all tutor accounts." #~ msgstr "Auflistung aller Tutor-Konten." #, fuzzy #~ msgid "List all tutorial share accounts." #~ msgstr "Auflistung aller Rollen-Konten." #, fuzzy #~ msgid "List all user accounts." #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "List all workshop share accounts." #~ msgstr "Auflistung aller Rollen-Konten." #~ msgid "Message from the Subsystem:" #~ msgstr "Nachricht, des darunter liegenden Systems:" #, fuzzy #~ msgid "Module disabled!" #~ msgstr "Modul Name" #, fuzzy #~ msgid "New object" #~ msgstr "Neue Objekte" #~ msgid "New role" #~ msgstr "Neue Rolle" #, fuzzy #~ msgid "No GID given!" #~ msgstr "Passwort wurde nicht angegeben!" #, fuzzy #~ msgid "No RID given!" #~ msgstr "Passwort wurde nicht angegeben!" #, fuzzy #~ msgid "No UID given!" #~ msgstr "Passwort wurde nicht angegeben!" #, fuzzy #~ msgid "No cipuxLastname given!" #~ msgstr "Passwort wurde nicht angegeben!" #~ msgid "No password given!" #~ msgstr "Passwort wurde nicht angegeben!" #~ msgid "Not implemented jet" #~ msgstr "Noch nicht implementiert" #~ msgid "Old role" #~ msgstr "Alte Rolle" #~ msgid "Provide a first name." #~ msgstr "Bitte Vornamen angeben." #, fuzzy #~ msgid "Provide a last name." #~ msgstr "Bitte Vornamen angeben." #, fuzzy #~ msgid "Provide a valid system role." #~ msgstr "Bitte Vornamen angeben." #, fuzzy #~ msgid "RID problem" #~ msgstr "LDAP Problem" #~ msgid "Register a CAT module." #~ msgstr "Ein CAT Modul registrieren." #, fuzzy #~ msgid "Register a task." #~ msgstr "Ein CAT Modul registrieren." #~ msgid "Related to Object:" #~ msgstr "Bezogen auf Objekt:" #, fuzzy #~ msgid "Remove a member from a given admin account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Remove a member from a given assistant account." #~ msgstr "Erzeuge ein Assistent-Konto." #, fuzzy #~ msgid "Remove a member from a given class share account." #~ msgstr "Erzeuge ein Klassen-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given course share account." #~ msgstr "Erzeuge ein Kurs-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given lecture share account." #~ msgstr "Erzeuge ein Lehrvortrags-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given lecturer account." #~ msgstr "Erzeuge ein Dozenten-Konto." #, fuzzy #~ msgid "Remove a member from a given professor account." #~ msgstr "Erzeuge ein Professor-Konto." #, fuzzy #~ msgid "Remove a member from a given pupil account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Remove a member from a given reading share account." #~ msgstr "Erzeuge ein Vorlesungs-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given seminar share account." #~ msgstr "Erzeuge ein Seminar-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given student account." #~ msgstr "Erzeuge ein Studenten-Konto." #, fuzzy #~ msgid "Remove a member from a given studygroup share account." #~ msgstr "Auflistung aller Arbeitsgemeinshafts-Freigabe-Konten." #, fuzzy #~ msgid "Remove a member from a given task." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Remove a member from a given teacher account." #~ msgstr "Erzeuge ein Lehrer-Konto." #, fuzzy #~ msgid "Remove a member from a given team share account." #~ msgstr "Erzeuge ein Team-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given tutor account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Remove a member from a given tutorial share account." #~ msgstr "Erzeuge ein Uebungs-Freigabe-Konto." #, fuzzy #~ msgid "Remove a member from a given user account." #~ msgstr "Alle Angehörige eines bestimmten CAT Module auflisten." #, fuzzy #~ msgid "Remove a member from a given workshop share account." #~ msgstr "Auflistung aller Rollen-Konten." #~ msgid "Solution:" #~ msgstr "Lösung:" #~ msgid "Status" #~ msgstr "Status" #~ msgid "The object was not deleted!" #~ msgstr "Das Objekt wurde gelöscht!" #~ msgid "" #~ "The role you create will not show up in the user list above, but in \n" #~ "in the role chooser." #~ msgstr "" #~ "Die Rolle, die Sie erzeugen, erscheint nicht in der obigen \n" #~ "Liste, sondern im Auswahlmenü." #, fuzzy #~ msgid "The session expired!" #~ msgstr "Sitzungsproblem" #~ msgid "This module will be migrated from webmin very soon." #~ msgstr "Diese Modul wird bald vom Webmin eingefügt." #, fuzzy #~ msgid "UID problem" #~ msgstr "LDAP Problem" #, fuzzy #~ msgid "" #~ "Usage: please give new unique ID. If available, fill out other fields." #~ msgstr "" #~ "Hinweis: Bitte geben sie eine eindeutige Kennung und zweimal identisch " #~ "das Passwort ein." #~ msgid "Warning Number:" #~ msgstr "Warnungsnummer:" #~ msgid "Warning:" #~ msgstr "Warnung:" #, fuzzy #~ msgid "XML-RPC problem" #~ msgstr "LDAP Problem" #, fuzzy #~ msgid "" #~ "You have to enter a username and a password to log into CAT-Web \n" #~ " at the CipUX server on [% form.field.server_name.value %]." #~ msgstr "" #~ "Sie sollten eine Kennung und ein Passwort eingeben um sich in CAT-Web " #~ "auf \n" #~ " dem CipUX Server auf [% form.field.server_name.value %] " #~ "einzuloggen." #, fuzzy #~ msgid "access all CipUX user account user nodes" #~ msgstr "Auflistung aller Vorlagen Verzeichnis-Konten." #, fuzzy #~ msgid "actions" #~ msgstr "Aktion" #, fuzzy #~ msgid "allocation" #~ msgstr "Aktion" #, fuzzy #~ msgid "assignment" #~ msgstr "Zuordnung" #~ msgid "changeable attribute" #~ msgstr "veränderliche Attribute" #, fuzzy #~ msgid "cipadmin problem" #~ msgstr "Passwort Problem" #, fuzzy #~ msgid "configuration" #~ msgstr "Bestätigung" #~ msgid "create a new role" #~ msgstr "erzeuge neue Rolle" #~ msgid "create new [% form.field.modality.value %]" #~ msgstr "erzeuge neues Objekt [% form.field.modality.value %]" #~ msgid "file problem" #~ msgstr "Datei Problem" #, fuzzy #~ msgid "module problem" #~ msgstr "Datei Problem" #, fuzzy #~ msgid "netgroup" #~ msgstr "Gruppe" #~ msgid "new ID (role)" #~ msgstr "neue Kennung/ ID (Rolle)" #, fuzzy #~ msgid "new object ID" #~ msgstr "Neues Objekt" #~ msgid "no exception" #~ msgstr "Kein Ausnahmefehler" #~ msgid "password problem" #~ msgstr "Passwort Problem" #~ msgid "password" #~ msgstr "Passwort" #~ msgid "repeat password" #~ msgstr "wiederholen Sie das Passwort" #~ msgid "role" #~ msgstr "Rolle" #~ msgid "session problem" #~ msgstr "Sitzungsproblem" #~ msgid "skel" #~ msgstr "Vorlagen" #~ msgid "static" #~ msgstr "statisch" #, fuzzy #~ msgid "template problem" #~ msgstr "Datei Problem" #~ msgid "userselfadmin" #~ msgstr "Benutzerselbstverwaltung" #~ msgid "submit" #~ msgstr "abschicken" #~ msgid "Choose file to import" #~ msgstr "Datei zum Importieren auswählen" #~ msgid "Disabled" #~ msgstr "inaktiv" #~ msgid "ID (new user login)" #~ msgstr "Kennung (Neues Benutzer Login)" #~ msgid "Import user and course from file" #~ msgstr "Importiere Benutzer und Kurse von einer Datei" #~ msgid "New objects" #~ msgstr "Neue Objekte" #~ msgid "" #~ "Please check this values: \n" #~ " (You can correct single values. But if the alignment is not OK, you have " #~ "to correct the file and load again!)" #~ msgstr "" #~ "Bitte überprüfen Sie diese Werte: \n" #~ " (Sie können einzelne Werte korrigieren. Aber wenn die Ausrichtung nicht " #~ "stimmt, müssen Sie die Datei korrigieren und erneut laden!)" #~ msgid "Samba" #~ msgstr "Samba" #~ msgid "address" #~ msgstr "Adresse" #~ msgid "column" #~ msgstr "Spalte" #~ msgid "create new [% object %]" #~ msgstr "erzeuge neues Objekt [% object %]" #~ msgid "e-mail address" #~ msgstr "E-Mail Adresse" #~ msgid "import" #~ msgstr "Import" #~ msgid "" #~ "please give new unique ID (login, user name) and 2 identical passwords" #~ msgstr "" #~ "Bitte geben sie eine eindeutige Kennung (Login, Benutzername) und das " #~ "Passwort zweimal identisch ein" #~ msgid "template directory" #~ msgstr "Vorlagen Verzeichnis" #~ msgid "town" #~ msgstr "Stadt" bin000755001750001750 011413636115 15256 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3cipux_cat_web_configuration000444001750001750 242411413636115 23103 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/bin#!/usr/bin/perl -w -T # +=========================================================================+ # || cipux_cat_web_configuration || # || || # || Copyright (C) 2010 by Christian Kuelker || # +=========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ use strict; use warnings; use Carp qw(confess); use CipUX::CAT::Web; #use Data::Dumper; #use English qw( -no_match_vars ); use Log::Log4perl qw(get_logger :levels); use YAML::Any; # debug my $debug = 0; if ($debug) { Log::Log4perl::init_once('/usr/share/cipux/etc/cipux-cat-web.log4perl'); } # extensions my $cipux = CipUX->new(); my @ext = sort $cipux->cfg_ext(); my $ext_hr = {}; $ext_hr->{extension} = \@ext; $cipux->out("# === CipUX (supported configuration extensions) ===\n"); print YAML::Any::Dump($ext_hr) or confess "Can not print to STDOUT!\n"; # cipux-cat-web my $ccw = CipUX::CAT::Web->new; my $cfg_hr = $ccw->get_cat_web_cfg(); $cipux->out("# === CipUX (scope cipux-cat-web) ===\n"); print YAML::Any::Dump($cfg_hr) or confess "Can not print to STDOUT!\n"; cipux_cat_web_module000444001750001750 1101311413636115 21533 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/bin#!/usr/bin/perl -w -T # +==========================================================================+ # || cipux_cat_web_module || # || || # || XML-RPC client to register, deregister and list a CAT module. || # || || # || Copyright (C) 2008 - 2009 by Christian Kuelker || # || || # || License: GNU General Public license - GNU GPL - version 2 || # || or (at your opinion) any later version. || # || || # +==========================================================================+ # $Id$ # $Revision$ # $HeadURL$ # $Date$ # $Source$ package cipux_cat_web_module; use 5.008001; use strict; use warnings; use CipUX::CAT::Web::Setup::Client; use version; our $VERSION = qv('3.4.0.3'); delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer # +==========================================================================+ # || MAIN || # +==========================================================================+ my $client = CipUX::CAT::Web::Setup::Client->new( { name => 'cipux_cat_web_module' } ); $client->run(); exit 0; __END__ =pod =head1 NAME Program to register, deregister and list a CAT modules. =head1 SYNOPSIS (1) cipux_cat_web_module [OPTIONS] --register --object | --all (2) cipux_cat_web_module [OPTIONS] --deregister --object | --all (3) cipux_cat_web_module [OPTIONS] --list-registered (4) cipux_cat_web_module [OPTIONS] --list-deregistered =head1 OPTIONS Options for all commands: -D | --debug : print debug messages for developers -h | --help : print help (this message + options) -l | --login ID : uses ID as UID to authenticate -V | --version : print only version --verbose : print more messages -w | --password CRED : uses CRED as credential to authenticate Additional options for registering and deregistering: -a | --all : (de)register all pending objects Additional options for registering: -e | --enable : enable module(s) -m | --add-member : add object (user or group) to ACL =head1 USAGE SPECIFIC OPTIONS (1) register --add-member : do add object to the ACL, so that this object can access the modules. An object could be a group or a user. -e | --enable : do enable the module during registration; module is disabled by default -a | --all : register all modules or -o | --object : or register only one module (2) deregister -a | --all : deregister all modules or -o | --object : or deregister only one module The URL of the CipUX XML-RPC server is taken from cipux-cat-web.ini file. The default location for CipUX-CAT-Web. If you would like to use a different URL change catweb_rpc_server in the base section. =head1 DESCRIPTION OF OPTIONS =over 4 =item I<-a> Same as option --all =item I<-add-member NAME> Adds NAME to the ACL of that module(s). =item I<-all> Register all CAT modules. =item I<-D> Same as option --debug. =item I<--debug> To see more output, what the internals is doing, you can enable the --debug option and see more message printed to STDOUT. =item I<-e> Same as option --enable. =item I<--enable> Enable the object during registration. =item I<-h> Same as option --help =item I<--help> Prints brief help message. =item I<-l UID> Same as option --login UID. =item I<--login UID> Use UID as identity to authenticate against RPC server. =item I<-o> Same as option --object =item I<--object> This option is used to specify the object on which the command is operating. Make sure you choose the right object. Of course this will also fail when the object is not fetchable with (in the objects list of) --task. =item I<--password SECRET> Use SECRET as credential to authenticate against RPC server. =item I<-V> Same as option --version. =item I<--version> Prints the version and exits. =item I<--verbose> Not implemented yet. =item I<-v> Same as option --verbose. =item I<-w SECRET> Same as option --password SECRET. =back =cut cipux_cat_web_list_plugin000444001750001750 312611413636115 22565 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/bin#!/usr/bin/perl -w use warnings; use strict; use CipUX::CAT::Web::Plugin; # USAGE: $0 # USAGE: $0 hash # USAGE: $0 single index.cgi # USAGE: $0 all my $arg = shift; $arg = q{} if not defined $arg; chomp $arg; my $module = shift; $module = q{} if not defined $module; chomp $module; my $plugin = CipUX::CAT::Web::Plugin->new(); $plugin->init(); # simple interface if ( $arg eq q{} ) { print "All available CipUX CAT Web modules:\n"; my @module = $plugin->get_module_name_register(); foreach my $m (@module) { print "Found CAT module [$m]\n"; } } # hash interface if ( $arg eq 'hash' ) { my $p_hr = $plugin->get_module_name_register(); foreach my $o ( sort keys %{$p_hr} ) { print "MODULE [$o] povided by [$p_hr->{$o}]\n"; } } # single interface if ( $arg and $module ) { print "Single module $module:\n"; my $m_hr = $plugin->get_module_cfg_register( { name => $module } ); foreach my $attr ( sort keys %{$m_hr} ) { if ( ref $m_hr->{$attr} eq 'ARRAY' ) { print "$module [$attr]:\n"; foreach my $v ( @{ $m_hr->{$attr} } ) { print " [$v]\n"; } } else { print "$module [$attr]=[$m_hr->{$attr}]\n"; } } } # all interface if ( $arg eq 'all' ) { my $c_hr = $plugin->get_module_cfg_register(); foreach my $o ( sort keys %{$c_hr} ) { my $cfg_hr = $c_hr->{$o}; print "CFG of [$o] is: [$cfg_hr]\n"; foreach my $attr ( sort keys %{$cfg_hr} ) { print " ATTR [$attr] VALUE [$cfg_hr->{$attr}]\n"; } } } exit 0; doc000755001750001750 011413636115 15253 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3cipux-cat-web.txt000444001750001750 1070511413636115 20644 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc CipUX-CAT-Web ============= Copyright (C) 2010 by Christian Kuelker version 0.1 reference to version 3.4.0.2 Installation ============ The installation instructions can be found in the README file. Configuration ============= The configuration take place in tree steps. Step one is to check, adopt and eventually change the existing configuration of cipux-cat-web.ini. The default boot strap configuration can be found under /usr/share/cipux/etc/. Have a look at at. If the CipUX XML-RPC server and CipUX-CAT-Web is installed on the same machine the configuration should match and there is no need to change that. However if this is not the case or if the configuration has to be changed the cipux-cat-web.ini file should be copied to a different location and changed there. If the configuration at /usr/share/cipux/etc/cipux-cat-web.ini is changed it will be overwritten by the next update. System integrators should provide a copy of cipux-cat-web.ini at the location of /usr/share/cipux/etc/cipux-cat-web.d/cipux-cat-web.ini. Local system administrators can copy cipux-cat-web.ini to /etc/cipux/cipux-cat-web.ini and change it there. The step two gives you access to the XML-RPC server for CAT. You have to perform this steps as root on the host of the XML-RPC server directly. This can not be done remotely. The XML-RPC do not have to up and running. export TC='cipux_task_client -t' export CM='cipux_cat_web_module' $TC cipux_task_register_cat_module -o $CM $TC cipux_task_add_member_to_task -o cipux_task_list_cat_modules -x value=$CM $TC cipux_task_add_member_to_task -o cipux_task_register_cat_module -x value=$CM The steps up till now was made on the host of the XML-RPC server. Now start or restart the XML-RPC server to apply those changes. Step tree: The script cipux_cat_web_module should be executed on the host where CipUX-CAT-Web is installed. That could be but do not have to be the same host as the XML-RPC server. It is important that the URL of the server in cipux-cat-web.ini is valid (step 1) and that the server is up and running (step 2).[1] cipux_cat_web_module --list-deregistered cipux_cat_web_module 3.4.0.0 CAT Login: cipadmin Password: student.cgi teacher_class_assignment.cgi class.cgi ... (we skip the rest) It is possible to register only one CAT module: cipux_cat_web_module --register --object index.cgi --enable --verbose cipux_cat_web_module 3.4.0.0 Sever [http://localhost:8001/RPC2] is reachable. CAT Login: cipadmin Password: Successfully added to task [cipux_task_retrieve_all_cat_module_name_shortde\ scription_templatedir_author_version_license_isenabled_icon] The object [index.cgi] will be enabled Successfully registered [index.cgi]. To verify that: cipux_cat_web_module --list-registered cipux_cat_web_module 3.4.0.0 CAT Login: cipadmin Password: index.cgi In the case of installation of non recommended 3rd party CAT module, or self written modules, it is wisely to test them at least in regards of Perl validity. cipux_cat_web_list_plugin All available CipUX CAT Web modules: Found CAT module [student.cgi] Found CAT module [admin.cgi] ... (we skip the rest) This will list all CAT module, which are installed on file system, which could be installed by cipux_cat_web_module. If you see an error in this list, you should uninstall such module or fix it. It is also possible to register all modules at once: cipux_cat_web_module --register --all --enable --verbose <22:36 cipux_cat_web_module 3.4.0.0 Sever [http://localhost:8001/RPC2] is reachable. CAT Login: cipadmin Password: Successfully added to task [cipux_task_add_member_to_class_share] Successfully added to task [cipux_task_remove_member_from_class_share] Successfully added to task [cipux_task_list_class_shares] Successfully added to task [cipux_task_list_members_of_class_share] Successfully added to task [cipux_task_list_admin_accounts] Object [admin_class_assignment.cgi] will be enabled Successfully registered [admin_class_assignment.cgi]. ============================================================================== ---------- (footnotes) [1] If there is a mistake the following output can be seen: cipux_cat_web_module 3.4.0.0 CAT Login: cipadmin Password: EXCEPTION: Can not get list about registered modules! No access for [cipadmin] to [cipux_task_list_cat_modules] maketext.files000444001750001750 1003211413636115 20272 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doclib/CipUX/CAT/Web/Action.pm lib/CipUX/CAT/Web/Controller.pm lib/CipUX/CAT/Web/Exception.pm lib/CipUX/CAT/Web/L10N.pm lib/CipUX/CAT/Web/Module/BasicAssignment.pm lib/CipUX/CAT/Web/Module/BasicObject.pm lib/CipUX/CAT/Web/Module/Chooser.pm lib/CipUX/CAT/Web/Module/Index.pm lib/CipUX/CAT/Web/Module/ModuleBrowser.pm lib/CipUX/CAT/Web/Module/ModuleCustody.pm lib/CipUX/CAT/Web/Module/ModuleSwitch.pm lib/CipUX/CAT/Web/Module/PerlVersion.pm lib/CipUX/CAT/Web/Module.pm lib/CipUX/CAT/Web/Module/ServerInfo.pm lib/CipUX/CAT/Web/Plugin.pm lib/CipUX/CAT/Web.pm lib/CipUX/CAT/Web/Setup/Client.pm lib/CipUX/CAT/Web/View.pm tpl/Berlin/basic_assignment/group.html tpl/Berlin/basic_assignment/index.html tpl/Berlin/basic_assignment/layout.html tpl/Berlin/basic_object/create.html tpl/Berlin/basic_object/layout.html tpl/Berlin/basic_object/list.html tpl/Berlin/chooser/index.html tpl/Berlin/chooser/layout.html tpl/Berlin/error/index.html tpl/Berlin/error/layout.html tpl/Berlin/exception/index.html tpl/Berlin/exception/layout.html tpl/Berlin/footer/index.html tpl/Berlin/footer/layout.html tpl/Berlin/header/index.html tpl/Berlin/index/index.html tpl/Berlin/index/layout.html tpl/Berlin/login/index.html tpl/Berlin/login/layout.html tpl/Berlin/logout/layout.html tpl/Berlin/logout/logout.html tpl/Berlin/module_browser/index.html tpl/Berlin/module_browser/layout.html tpl/Berlin/module_custody/index.html tpl/Berlin/module_custody/layout.html tpl/Berlin/module_switch/index.html tpl/Berlin/module_switch/layout.html tpl/Berlin/nav/abcnav.html tpl/Berlin/perlversion/index.html tpl/Berlin/perlversion/layout.html tpl/Berlin/serverinfo/index.html tpl/Berlin/serverinfo/layout.html tpl/Berlin/status_line/index.html tpl/Berlin/status_line/layout.html tpl/default/basic_assignment/group.html tpl/default/basic_assignment/index.html tpl/default/basic_assignment/layout.html tpl/default/basic_object/create.html tpl/default/basic_object/layout.html tpl/default/basic_object/list.html tpl/default/chooser/index.html tpl/default/chooser/layout.html tpl/default/error/index.html tpl/default/error/layout.html tpl/default/exception/index.html tpl/default/exception/layout.html tpl/default/footer/index.html tpl/default/footer/layout.html tpl/default/header/index.html tpl/default/index/index.html tpl/default/index/layout.html tpl/default/login/index.html tpl/default/login/layout.html tpl/default/logout/layout.html tpl/default/logout/logout.html tpl/default/module_browser/index.html tpl/default/module_browser/layout.html tpl/default/module_custody/index.html tpl/default/module_custody/layout.html tpl/default/module_switch/index.html tpl/default/module_switch/layout.html tpl/default/nav/abcnav.html tpl/default/perlversion/index.html tpl/default/perlversion/layout.html tpl/default/serverinfo/index.html tpl/default/serverinfo/layout.html tpl/default/status_line/index.html tpl/default/status_line/layout.html tpl/default/translation/translation.html tpl/Zeuthen/basic_assignment/group.html tpl/Zeuthen/basic_assignment/index.html tpl/Zeuthen/basic_assignment/layout.html tpl/Zeuthen/basic_object/create.html tpl/Zeuthen/basic_object/layout.html tpl/Zeuthen/basic_object/list.html tpl/Zeuthen/chooser/index.html tpl/Zeuthen/chooser/layout.html tpl/Zeuthen/error/index.html tpl/Zeuthen/error/layout.html tpl/Zeuthen/exception/index.html tpl/Zeuthen/exception/layout.html tpl/Zeuthen/footer/index.html tpl/Zeuthen/footer/layout.html tpl/Zeuthen/header/index.html tpl/Zeuthen/index/empty.html tpl/Zeuthen/index/index.html tpl/Zeuthen/index/layout.html tpl/Zeuthen/login/index.html tpl/Zeuthen/login/layout.html tpl/Zeuthen/logout/layout.html tpl/Zeuthen/logout/logout.html tpl/Zeuthen/module_browser/index.html tpl/Zeuthen/module_browser/layout.html tpl/Zeuthen/module_custody/index.html tpl/Zeuthen/module_custody/layout.html tpl/Zeuthen/module_switch/index.html tpl/Zeuthen/module_switch/layout.html tpl/Zeuthen/nav/abcnav.html tpl/Zeuthen/perlversion/index.html tpl/Zeuthen/perlversion/layout.html tpl/Zeuthen/serverinfo/index.html tpl/Zeuthen/serverinfo/layout.html tpl/Zeuthen/status_line/index.html tpl/Zeuthen/status_line/layout.html l10n.txt000444001750001750 1465611413636115 16757 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc Localization (l10n) for CAT =========================== Copyright (C) 2009 by Christian Kuelker - 2009-12-31 version 0.1 Abstract: This document describes the process of making CAT core or CAT custom modules language-translation aware. This called localization (l10n). Or to put in simple words: what you have to do to get your piece of code translated. If you just want to translate or add a new language to a module which is already localized, you should skip this document and read i18n.txt instead. Contents ======== 1 Preface 2 Localization of CAT and custom CAT-Modules - Perl code 2.1 For CAT core modules 2.2 For CAT custom modules 3 Localization of CAT HTML templates via Template Toolkit 2 3.1 For CAT core modules 3.2 For CAT custom modules 4 Create or update the po template: messages.pot 1 Preface =========== 2 Localization of CAT and custom CAT-Modules - Perl code ========================================================== 2.1 For CAT core modules ======================== For CAT core modules, which are released with CAT directly this is needed: # include the base class use base qw(CipUX::CAT::Web::L10N); # and later $lh->maketext('Hello World!'); 2.2 For CAT custom modules ========================== For a custom module it is important to load own translation under a custiom domain in addition to the code which is ordinary CAT module uses. # include the base class use base qw(CipUX::CAT::Web::L10N); # and then $self->import_lexicon({domain=>'userlist'}); # and later $lh->maketext('Hello World!'); All parts from the former section are needed and then the module needs to find all *.po files. # new BUILD and INSTALL target (lib/*/*.po) # (will install all po files under lib) $builder->add_build_element('po'); Add this at the end of the custom Build.PL. Secondly, it is important to provide a po template file, for example messages.pot. Create a special directory for this: cd /lib/CipUX/CAT/Web mkdir I18N mkdir I18N/ Replace with the module name and with a new canonical domain name. Example for CipUX-CAT-Web-Userlist-3.4.0.2 cd cat-web-userlist/lib/CipUX/CAT/Web mkdir I18N mkdir I18N/userlist 3 Localization of CAT HTML templates via Template Toolkit 2 ============================================================= 3.1 For CAT core modules ======================== If you found a non-translated string or sentence inside an HTML page, which will be processed by template toolkit (the default) you have to add a template toolkit macro. Example: You find this sentence:

    Hello World!

    Then you change it the following

    [% lh.maketext('Hello World!') %]

    If the interpolation of variables is necessary in the template

    [% lh.maktext(m.NAME) %]

    then this will first evaluate m.NAME to 'class' for example and then ask Locale::Maketext for the internationalization for 'class' which will be 'Klasse" in the case of the 'de' tag. One problem might rise for this behavior, how will the message id for 'class' get into the messages.pot file, since automated grabbing for maketext strings in the source code and HTML will never find that id? To solve that we have to make a dummy page for that in CAT. This page called translation.html and will contain such automatic message ids. If a new module generates such messages id, or if a still untranslated message id is found, it should be added to the translation.hml file as a table line. class[% lh.maketext('class') %] 3.2 For CAT custom modules ========================== The principle is the same as 3.1 describes. additionally you have to ensure that the Locale::Maketext object $lh is exported to your template. lh => $lh If you use the CAT standard way you can do that in the param_hr section of your return hash. Example: sub module { my ( $self, $arg_r ) = @_; my $lh = $arg_r->{lh_obj}; # get obj from Controller # you need to do this if you want your own object: # use CipUX::CAT::Web::L10N; # my $lh = CipUX::CAT::Web::L10N->get_handle; return { layout => "$path/layout.html", layout_ar => [ { begin_html => 1, }, { tt2_hr => { tpl => "$path/index.html", param_hr => { DATA => \@tpl_data, lh => $lh, }, } }, { end_html => 1, }, ], }; } 4 Create or update the po template: messages.pot ================================================== This template already exist for CAT core modules. However sometimes it needed to be updated. The command for creating the template and for updating the template is the same. The difference between CAT core and custom module templates are just the location. CAT core module - lib/CipUX/CAT/Web/I18N/messages.pot CAT custom module - lib/CipUX/CAT/Web/I18N//messages.pot The location of that file have to match the chosen custom domain of CAT custom modules. If the domain would be 'userlist' the location is: lib/CipUX/CAT/Web/I18N/userlist Create this structure if necessary. If correct Locate::Maketext calls are present - like lh.maketext('Something') in templates or $lh->maketet('Somthing'); in Perl code - the po template can be created by Example (Perl modules only) cd export XGT=/usr/share/doc/liblocale-maketext-lexicon-perl/examples/xgettext.pl export DOM= export OUT=lib/CipUX/CAT/Web/I18N/$DOM/messages.pot perl $XGT --output=$OUT --directory=lib/ Because xgettext.pl tends to evaluate also *.png files we have to make sure that they are not scanned. A simple --directory=tpl would not do it. Example for 'userlist': cd cat-web-userlist find lib -name "*.pm" > doc/maketext.files find tpl -name "*.html" >> doc/maketext.files export XGT=/usr/share/doc/liblocale-maketext-lexicon-perl/examples/xgettext.pl perl $XGT -g -u -o lib/CipUX/CAT/Web/I18N/userlist/messages.pot -f doc/maketext.files The next step is to deal with internationalization (i18n). Adding the first translated language ans so on. Please proceed with i18n.txt. i18n.txt000444001750001750 606411413636115 16736 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc CAT Internationalization (I18n) =============================== Copyright (C) 2009 by Christian Kuelker - 2009-12-31 version 0.1 Abstract: This document describes the process of a) translation b) adding a new language c) updating new translations for CAT. Contents ======== 1 Preface 2 Adding a new language to CAT 3 The process of translating 4 Updating the translation 1 Prefeace ============ CipUX uses the Perl localization (l10n) framework Locale::Maketext which is standard since Perl 5.8. See man Locale::Maketext for more details. Locale::Maketext comes with its own dictionary format. Even if this is advanced compared to gettext, CipUX uses gettext dictionaries in conjunction with Locale::maketext because there are a lot of - even graphical tools - to produce, update and maintain such dictionaries. Providing, updating and maintaining a gettext dictionary is also easier for contributers (translators) since gettext dictionaries are widely used. 2 Adding a new language to CAT ================================ To add a new language a new name is needed. Consider for example this situation: de.po exists which stands for the German language. To add the Austrian language choosing de-at.po as the new language file is a good decision. It should be mentioned that here language "tags" from Locale::Maketext should be used. The difference between locale names and languages tags is that the underscore is replaced with a dash. As a second example, the language fr-ch would XXX Example for German with custom CAT module CipUX-CAT-Web-Userlist-3.4.0.2 cd cat-web-userlist/lib/CipUX/CAT/Web/I18N/userlist msginit --input=messages.pot --output=de.po --locale=de Example for Swiss-German with CipUX-CAT-Web-3.4.0.0 cd cat-web/lib/CipUX/CAT/Web/I18 msginit --input=messages.pot --output=de-ch.po --locale=de_CH Remark on adding only custom module languages: Adding a language means adding that language in CAT core first. Adding a language only to a custom module cause that it will be overwritten by en.po from the core, because the new language do not exist in core and there has to be a fall back. So in the case a language x.po should be added only to a custom CAT module you also have to provide x.po in CipUX/CAT/Web/I18. Please send x.po on cipux-devel for inclusion in the main release of CAT or if you just want to do a fast hack, provide an new x.po in that directory locally in your system, by creating that from the message.pot via msginit. 3 The process of translating ============================== In principle thi "Content-Type: text/plain; charset=UTF-8\n" msgid "Language" msgstr "Sprache" 4 Updating the translation ============================ Change into the I18N directory and use msgmerge. Example for CAT core and German language: cd cat-web/lib/CipUX/CAT/Web/I18N msgmerge --update de.po messages.pot Example for CAT custom module userlist and French language: cd cat-web-userlist/lib/CipUX/CAT/Web/I18N/userlist msgmerge --update fr.po messages.pot example000755001750001750 011413636115 16706 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doccipux_apache.conf000444001750001750 276211413636115 22352 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/example# Redirect Example (TODO) AddHandler cgi-script .cgi # #Alias /cipux-cat-web/CAT/ /usr/share/cipux-cat-web/ Alias /cipux-cat-web /usr/share/cipux-cat-web ScriptAliasMatch CAT /usr/share/cipux-cat-web/cat.cgi RewriteLog /var/log/apache2/rewrite.log RewriteLogLevel 5 # Order Deny,Allow Allow from All Options ExecCGI SymLinksIfOwnerMatch DirectoryIndex cat.cgi RewriteEngine on # RewriteBase /cipux-cat-web/ # RewriteRule ^CAT/(.*)/tpl/(.*)$ tpl/$2 [L] # RewriteRule ^CAT/(.*)/cat.cgi$ CAT/$1/ [R] # RewriteRule ^CAT/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ cat.cgi?module=$2 [L,T=application/x-httpd-cgi] # RewriteRule ^CAT/([a-zA-Z0-9_]+)/$ cat.cgi?module=$1 [T=application/x-httpd-cgi] # RewriteRule ^cat.cgi$ cat.cgi [L] # RewriteRule ^cat.cgi(.*)$ cat.cgi$1 [L] # RewriteRule ^(.*).cgi$ cat.cgi?module=$1 [T=application/x-httpd-cgi] # RewriteRule ^(.*).cgi(.*)$ cat.cgi?module=$1$2 [L] # RewriteRule ^$ CAT/ [R] # RewriteRule ^CAT$ CAT/ [R] # RewriteRule ^CAT/cat.cgi$ CAT/ [R] # RewriteRule ^CAT/cat.cgi/$ CAT/ [R] # RewriteRule ^CAT/tpl/(.*)$ tpl/$1 [L] # RewriteRule ^CAT/(.*)$ cat.cgi?module=$1 [T=application/x-httpd-cgi] #AddHandler cgi-script .cgi # #Alias /cipux-cat-web /usr/share/cipux-cat-web # # # Order Deny,Allow # Allow from All # Options ExecCGI # js-help.txt000444001750001750 106611413636115 21151 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/example Some pages using this javascript help function. help help dep000755001750001750 011413636115 16023 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/docdepgraph.svg000444001750001750 3661211413636115 20523 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/dep ]> test node1 CipUX::CAT::Web node2 CipUX::CAT::Web::Controller node1->node2 node7 CipUX::CAT::Web::Module node1->node7 node4 CipUX::RPC::Client node2->node4 node5 CipUX::CAT::Web::View node2->node5 node2->node7 CipUX CipUX CipUX->node1 CipUX->node2 node3 CipUX::CAT::Web::Action CipUX->node3 CipUX->node5 node6 CipUX::CAT::Web::L10N CipUX->node6 CipUX->node7 node9 CipUX::CAT::Web::Plugin CipUX->node9 node17 CipUX::CAT::Web::Setup::Client CipUX->node17 node3->node7 node6->node2 node6->node5 node8 CipUX::CAT::Web::Exception node6->node8 node12 CipUX::CAT::Web::Module::Chooser node6->node12 node7->node5 node7->node8 node10 CipUX::CAT::Web::Module::BasicAssignment node7->node10 node11 CipUX::CAT::Web::Module::BasicObject node7->node11 node7->node12 node13 CipUX::CAT::Web::Module::Index node7->node13 node14 CipUX::CAT::Web::Module::ModuleBrowser node7->node14 node15 CipUX::CAT::Web::Module::ModuleCustody node7->node15 node16 CipUX::CAT::Web::Module::ModuleSwitch node7->node16 node9->node7 node14->node9 node15->node9 node17->node4 node17->node9 depgraph.dot000444001750001750 464011413636115 20466 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/depdigraph test { graph [ratio=fill]; node [label="\N"]; node1 [label="CipUX::CAT::Web", shape=box]; node2 [label="CipUX::CAT::Web::Controller", shape=box]; CipUX [label=CipUX]; node3 [label="CipUX::CAT::Web::Action", shape=box]; node4 [label="CipUX::RPC::Client"]; node5 [label="CipUX::CAT::Web::View", shape=box]; node6 [label="CipUX::CAT::Web::L10N", shape=box]; node7 [label="CipUX::CAT::Web::Module", shape=box]; node8 [label="CipUX::CAT::Web::Exception", shape=box]; node9 [label="CipUX::CAT::Web::Plugin", shape=box]; node10 [label="CipUX::CAT::Web::Module::BasicAssignment", shape=box]; node11 [label="CipUX::CAT::Web::Module::BasicObject", shape=box]; node12 [label="CipUX::CAT::Web::Module::Chooser", shape=box]; node13 [label="CipUX::CAT::Web::Module::Index", shape=box]; node14 [label="CipUX::CAT::Web::Module::ModuleBrowser", shape=box]; node15 [label="CipUX::CAT::Web::Module::ModuleCustody", shape=box]; node16 [label="CipUX::CAT::Web::Module::ModuleSwitch", shape=box]; node17 [label="CipUX::CAT::Web::Setup::Client", shape=box]; CipUX -> node1 [color=red, dir=backward]; CipUX -> node3 [color=red, dir=backward]; CipUX -> node2 [color=red, dir=backward]; CipUX -> node6 [color=red, dir=backward]; CipUX -> node7 [color=red, dir=backward]; CipUX -> node9 [color=red, dir=backward]; CipUX -> node17 [color=red, dir=backward]; CipUX -> node5 [color=red, dir=backward]; node1 -> node2 [color=black, dir=forward]; node1 -> node7 [color=red, dir=backward]; node3 -> node7 [color=red, dir=backward]; node2 -> node7 [color=black, dir=forward]; node2 -> node5 [color=black, dir=forward]; node2 -> node4 [color=black, dir=forward]; node6 -> node2 [color=red, dir=backward]; node6 -> node8 [color=red, dir=backward]; node6 -> node12 [color=red, dir=backward]; node6 -> node5 [color=red, dir=backward]; node7 -> node8 [color=black, dir=forward]; node7 -> node10 [color=red, dir=backward]; node7 -> node11 [color=red, dir=backward]; node7 -> node12 [color=red, dir=backward]; node7 -> node13 [color=red, dir=backward]; node7 -> node14 [color=red, dir=backward]; node7 -> node15 [color=red, dir=backward]; node7 -> node16 [color=red, dir=backward]; node7 -> node5 [color=black, dir=forward]; node14 -> node9 [color=black, dir=forward]; node15 -> node9 [color=black, dir=forward]; node9 -> node7 [color=red, dir=backward]; node17 -> node9 [color=black, dir=forward]; node17 -> node4 [color=black, dir=forward]; } depgraph.png000444001750001750 41647711413636115 20543 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/depPNG  IHDR 7ObKGDtIME z;n IDATxw|wI$d@Y(Á(K Q"ږگQZkȒ: *+`d8p2aHrNHws8Iɹ3^~s羯L\A^+XvX hdȄ]@](;;[yyy*.. aaa߬Y3%$$Yf L}iжm۔ رCWffNj޼ZhSO=Uz$uU-ZznPʔ+Wjڵڰa֭[}I"##աC%&&*11QzԼy [ӦM!I UPPPa?33vm߾p`a۶mSNQnԵkWu]}QN«hdV& ¡Ckٲe/b y<)99YݺuSnԥKuUr+uݻWׯƍ~!>}O>߿PW4h @k.-ZHiiiZt<t޽{o߾իt`KRYY6nܨ+VhʕZb;i2dmۺ]*a Lkz뭷'(&&p!CԾ}{K;vPZZDNN.]kv0ʴxbM4IiiiԕW^믿^ P&M.Vhz뭷4w\jȐ!;4h ]"~!Lꮜ͘1C/6oެhܸq6l""".JMMԩScǎ0a~*::aPjҤIz'URR_׺;ԩS'KS;M4Iu};TTTۥ68t&M{Lu*>>L=Szgx@&LPHHۥ&nXjƍ 6>%$$]V~=zg)SgϞn{V]hJJJt}wފ׷~ hѢx }7V^?A%%%ncL\_ڸq}Y׿VPPe5^W/%''kj׮e&wXB{rss_j̘1 jPPP~hժUQ=_] L?5`}:.ԩ O'|vI:0>LC5\3g*22H曺+5d\. z^Ν;ճgOhԩ rF귿ҴzjiXMDii.bjҥ sFX]v+88 1cnݪٳgz詧RղeK5iDjӦ.;}U߾}<ڶm m۶zg?#M6G=ww+&&FAAA Urr; .Pxx"""tW GXXfϞ~A/r]P1Ժ\uQ=~֬Y#FСC_+Bm۶UQQ6mڤ%K'%I}QPP>VPP$۱c:uf͚iӦMd."M>]sqrOzH6mRTTT_P&Lj?_~Y7nTHHH]k׮Ӛ5k?H@C=_ѺOcQZZN:[oĉrM@: @n $M2E;w=Si@R N{yz'k.\R˗/ןnA3g 5uaP6nܨ7jԨQ~TIë=6==];vTPP {wj׮ԵkW[5Vgxx+//O{Ə?8ҨQ~z&jڵ SnjZ}$cǎ۩S'%Iyyy7nmۦ+""B_jaÆiذaz75j(uY5vc&Mh͚56] @ڹsڶm{xx$I'}Ν;I&:묳OJ~>oy]v$>`mV;vp&(666 rByyy5z?_jժ;3 /G}9sعG\\uP<(mATX(yzƍo:t9 XٳG[5#L@]WE~@bk˳,=2:RӦRl.H߬-n-EEIaaR|FE׾Vaa"""j9rV\9sT&ꪫk@ff$xeee)33S ۻwZl|"""4zhIg}wuݻW&nz^^QxVwBS k/fMqqؑ!p DGcvlXIrH͟?_3gԍ7XSLŋVxV~|rr),бcGjGjKjjFY͚5 5ujX㾳j\x*ʿ}qq5Tר/P?,gEGKMx mV3f̨k_^)))գ>nZի5uTɑTyj֬{]uUڶmV\ݻڵku*&&F/﯂͝;W'NTZZZ%k 7ܠQFUxw߭kɵw-h޽Zpa@3ꀬ,kϷ*_=,W菉 Cխyi̘1ԲeZ^nnO9shÆ VXXڵk]/W֭?AD׍7ި`kNwVXXz{L]tQZny-_\E]~Xs-[[oU?N=T=ú[$I6mrg7P=j5ڻw')IPKI:ح߾Զ}Nc4Y~qq|Țˇ+:qqm[x=4T0K.9眣{R`]J0ar֮7 m.aҮ]RI֭}!P_&㱦܊Zssm|k11ְa Wyay4WV>}pB 4r*$Ij-iii1bV\s=ʤ Qy];)1~XXI@U@@*5ּc99c=_GF~|FFVa״iӴzj%%%]_ =LeSwu~?QYgOŐΝݻڷN=}( ఒssmAkwVϷJYYFlUl%[?<ܞ+Z?6l~'-[Lm۶uòէOKڷoGyDr˕՜;vhZsK]q4`}o NȐa; U+DCm[)$vƃ0z~G6PZZ&xm6GDX3\GEYDbbl?&GD@#*;;[˖- [/Wfʹd /_.}5+ " ,a8Ȑv -:d7ib $ 8Ag?""p@D@-z^|3ABSի+~t36dggkСھ}fϞ޽{]R'i *ΙD)-Y"ٶg")_7,PmO0pn|Ƿn]1dpd@hԪZi毪ۤiklJ@ WpRrss5zh-\P?NA| (׫_8q_]QQQ,]+-X ͟/}}PF˖jy6qKm,7O#!TpuUWI-ZP-` -ڱp0(`;䝐{ݜ u0 N~^ؖo9+تξSq:@U65GE~l5GFVo2@TD-XO=}QuiJ_[nQLɡC4sL=#ڳgPF;T | ;<  nAAU_(/~, H]&ttsڽA;Evd?paqYYjή¿8xA9+GEYLLņg @dXk؊Uט 0V)'>gzqǎzuVla%%%z뭷裏j˖-3f|A%&&V(X;vjN`W<{7ߴMH#GJt嶂c0pFpInN-);4 @!LRj~u 99\n9*hcMZcf_]\xۏ),zKz/_BvmGVZiܸq;vڴivuݻ5uTM6MӍ7ި|PgqƉp ,X ^mo.TJIFdfפ+mnƌOB[X`V۶m۪UaSO8NYi/(<ۯ?+ko͚cM111_Yd=߶mLf̰+FI.]|qvءɓ'kƌԈ#t7jСhd!-ZH3gTjj7ocjܸqj߾}]h^ ,\(ONÇKzU=uW_fδϗƎpAttNؠ~n"o_1`P>tж-ST0@k2/srlϷ<_0 +flo% cQQۏAV8ʤ%KIQMi8k4oݺ7-**;C^{MK.UddJ]wu߿"##NVnn-[wyGsUaa ѣGkԨQ ?RSm۲EjR2ĂWzO>^|QzmkFۤΫݺ}8 m$K:Xӥ3Ψ LP#JJW;|Hˇ"#-<m -YYK/$~)#GPl={f͚O?T۷ *99Y!U_jݺuZd駟L_|:]{JHHp-*}l$ RR]VҺuҹZ䦛w2i._ٶlvm0({Նz4 @#TZj994;<ǖoɑG6GGko5WU\5P׭]kS_[~h;.]jGK.UZZ&ܩFGsݻ]v5v͚sN]V+VЊ+j*(11Q Ґ!C4`U234 ?,  *]rzۭXaY[oS:Ea ~Nm3*2萁s$$ BN#+{܂waA\㑆 SizRWm7Lڵt.]OWbb_{uITFFvnެkڰa6lؠlk׮ݻ}ce+U٤  t}hipmѢdg[`$ii{~y2iNa-[`S+E԰bkw_ӿuV%&ƚg|Tc#":m.M"͘a#GZKڽvf5!-[&u|}7lؠ7j݇QbbԼy [hhM4Qtt$)77W%%%l:¡CYa;p~'Jޒ><\]|:w颮][nJNNVLm-6 5UZܦCmån|ǖJsH<#}ԣt]ҍ7J0oo$5o.yoѷdeeF~c+;WwlNH[pk؏ulwyH/ ͛'l)+'k@eָ| ֬Q ǣ 8p@:(..VNNMQ%I 111 ;*pxAbbUX~kY|c#-^l }$i0)%&8ί}Vz-)!A^wA=%%Ҷm.ؼٶ~ۭ[-l,Yx| "L@k4uR˶~pJK Y IDAT _Ƞ|`jp)@EZkx}ǜgkwͭ:&hk䏉~t5GFwGZnS nBZ22=$DZ&!l,u,J'8 udݿkE۷[`BgO  f矷i%%6{6mܮ'>?d/h 8@M LQOtO Fguh_3g3󱱶9&DD5KI4g4i|tY f] [Dh ju|o'H73= ի bU6a"5UZHڱCjB_.m*=2Ǝb 9 X~tYg:˾7 a@PXhٶneUߪ~T/s|tP%Mf޽RJ `[[/V62EojxR߾dX׳zk-X`WRXԯԼM1ɑKwo4|^o3mۺU:tȎk߾bS'MJi&\4sr|F~eEUm>^xA;4nԡەI[mf͎.iԤIx֬?_1C3ƽ:={cpHrs6m !!ĉ="}cVRbSK{& K?lDŽ'\L58leKw08deIپt籬#ϪQQ'XXy>ϷiAAz ?Ac8*x|aM|;&>bcG_iSwjahJKqߙog pwBiԷrwVw;M1111\1ZZ#K=z]YE+WJW\a+ϝ+EFyy˖ζүڦAl KҎ,HNnYJI< QWy)oۦMR)-ϧD t$ub:I['09%%ָ4;UOpVW'*gM}g @WwBRHH^"kP P#9)Raa׉)N(p}籠>6oM=+ K/.\(]w5Ϝ)g?mZu+k\w?͊6ec:Rk_͚I[+ݮў=` vw|Ӧ]ZS'np2C@#gMNVݖ xc*Fcb|Scc5 TJM)KHIcJԦU7onI>&beeI:H?X5fjW/פotLzevEO>>}l b`Flu}Jnk:Yjvh\F 5;#"|[ss 8=pÞ=ҌԩΝ6`k)S;吏:7;OFF=}X9:j\ᇥgu^|,͢EҾ}RR}HInWȾwI6}gD tj,%$[;*Ě7o. PTl鿲c4 Ԥ>FwߵmoE7N:L+;vt'bk&'O|e>鬳w-b?ccMZ/ ,X74H:T6Lj'`x֭-ӭM4HNiu50cW|ӿر ?8dUM#Gz5idkHKvlV}J wY3}Uk G}9gmyY֭:vt땦Mϵ-l*!-\hS >)g z8i@uv6l֯u{|^}%%Y|Рsg&jX&4]Xeekw7Wp 4kH/ ݿ n]'T0Az%~9+s&R3MY:X#;jϮ]wHI7,=z~t}<.kB))t ʤm|ot $A3ϔBBܮu aN*.5ge=ϕ< T?i/_񿺀@XX`_6k, |ԥ5mGVܹ_2DC[)?5Q}W.k~%|k!Ti髯,H0`}.nGIiS ~+mjapyL0HNIInW&j\v쪟+(,ng@lԬ5 9o񾐀?7KSZWKK^ve''?_5J3 3dTTd uIkZSpx4|(9Sn""]|esgOi _;P _ l mnZ 9ٶmKlu Tf&Ti?r`Ǐ|q)-Fɓ%Kvq[omggJRZ5aפmޓs׶ sgݮx h]KKZ 5UڳV}OI_?&x,`l6H|#efJAA۽o;C@"Ld'?dd&co*ݻ_Ovå?lSD51cիQ6(_Κ۶IWғOJwq?ee7 60x j|ddt5k-[$&V>`l-B2a,?ߚZrtL kqz>)sڿKnE63ݮf$^ $%5v>4vl͟?Ysٳݮq)- ǣJI/,ly' ,X }o_ !}vԸu,d ֯ &M.]| ~ Gys@$5os8+stN '^yE2VǦ\wvu5/=݂ RZԺu\lÖ-RӦs@HKBz}kjG`X!t5ϙ#{ɟAx.X -Z$8 uhå.ba}ҦM.p~kSg$L/^?4\ RJp玊_~k9fE ߚ5 /HoaF tve端!CΒRS-^rsNGkUWYofʲ@JӦIGܹKK?`ۊCX` P_ ]kMs=6&t.Գԩvaz_s[UA\獈8?>eǰzWP ͚%M,}ԥFn ˗K))Rһ4矗G)#CjѢ(R6maDiqv*HM>ԂFNJd&?_Z.k/,=zX y4 \{b :p,Xjۊ/l&*ixKݮ,0.V6L9S kyRn҅kPo?!m %&]M;7[YR˖wL)-ii7n,T0btDZ^Zʦ֬ZeKJ'uv aVP࿹ߙp`R>檎SR"͙#M"}5B+zԪoHciӤڽއJ]f+_Q ")9Yݚ +ɼy<+) X`VSm4 +,FZڶUt[)gmڸ]1@}G4BT)GN DCn*--4uk@0vtnW玿]~ᇥ5wW^F誫lkpiJKq^^}U/ݩc^)5նŋ|b۹w+4,W䓤OPAR^6ŀ!L\PUȉ5(o:]G6MڱC0@?x4q:wxĉғOJ>k ca+7D۶IҽJ=v5z-,ҿ-uJ~h RSRv6`H^n@mؿb`J ڄYO +%&]-@]AG<sV8 @fJKJSZn\tͶBg]JK;f̰сvIԡMx] O?-_K]] $N> ԅI^f`m_-EFJY`pSܮ=[H+VH_|!}M\з z6uZ7&Q:2 // waAn~-DytE6kps_q4f4w曶 z t֭ Rk /ݮү~%p4}.ٹӦ,X -[f_zI#FF0 ]AM-p+WJw$=-\p%6ŠeKK䟕Uu yLUa?>؃ ٧JSXpD?~ԵەuYcܹeal%Em7|5>4aҕWJKo!]yyžp}Rǎ9Қj@MȐ>̶O?֭%:Yh /N?Jja\ 8MGn=^TtBC+6W82@y_tt!@c'z5ď/mҠA6Aq2ܩL: k't7-[& (tKKz-KZ7K&F{ ,Xt}eSRR.]ܮ2i:飏?Ё6 0(-=@z@U&Ma^{M*,F&L.~hHЦ{,Ybモ:ur7|7ߵ֬VNM s+n]zi99.X&th#>}pAr@))J!L#JJN|By=FQ;ҧJg)g-Z]]wK͛[M7I?d[!~ )4Tzk>tHzqiD+lΕ~KsQZ*X!͟oS 6mÇ4H|`R͵7 .O} 5X.{BB/p͛iӤ^<)%E?ޚܮ[kQZVwSNԺY(͕nU3mH5Ϝ^m03gJG4nsny/kJ ZrBYf |=~pA߾<?rs}LߖeU@@&'>! 66;h8JJ S}{iXkn꟯ [<:튤W_OHpáCҋ/J<` v:t1;K76GMz=[ڻ׾ΛgEER^ȑ. x<ƒ%?X0o@i0i ahʛ_\|bc?d7Fus//EE}ҌҞ=҄ СR;ʕWXCJnWd Pû]I}t%פϪuk k3ݮK[`i>l2rm}}۶mҢE6磏gO  nnW .P(?RHHg#ʤߗ&O-F6))O>Ւ~[ w"k(4jގҩ۱gn=866 3SZV$o,JK+lbҦMR˖e ~oPiB;߿]wBN*(>ЦZРeK X(@"L?P] /s5mz졀~c)8HӦI?$]z4~tU";Nβe;dRX_ңplX!: i,k[*wtyYgY.䒞nAy/izUq-/۴ߖ~Z/t |}4HJIHpBP&RVvSJJ>_\\cдiw>H:Uz])&F3F7kRZtȑkսsϕz IcVT$-HĉC4Ta:Ok9q޽҂,X>{?#FH;6^OAAOKn@Cr}̙#-^lK.n @D@#UXxL[H>%!!LW)Sᅲz&Lj^M~kڼV"_Trq+{5R)8V~ׅM9S;mbCj5Og_#G֧}OkP^pt+j;f?~}TjmCB/m O?YȟWXؽMŽQLh56 &L={\9 <:]8Ka$^nI;dxkP@DDDDDDDDf;vX/Ar9]]1bA>NWso* ӦhYfo=n,թST4sL~钒ҥKtk׶6A4_ٿ?k׮>MpuGOlKAAA]GR0a̛)SZȬcG(Z4 w0G|@ ܭ[ [ܯk`\;fΕfm.0fCxMS}2k4lx0p-IUpp0͚5G@"Ъ uӧӼy- DNt۽t#/DzFOѬY3ЉQ v*U[7QCNNW """"]h7n ܮ[_T rw [$k&>ڵabV .鉈7ހ>- ~9Vx0wbu*OKİaNW*̒% > l Ŋ_an*Fsn>3/JeI|}!Ce??ҧQ`W3b!S&o]jՂA͈H0H\ 1 yۉvʕmo K߹S; E`X sghgw+4Z3믡I+~};]g Gd';>u=L.]¯H\:|&NNCժ0{6ԩuQ/sʕp!<6[HbePA6NW$"IEѢoѰa vKI FDDDDKln Dv񶰰ϑ: 1# PI*a ;, U+:oΝum+L+={,"(]oCTD$@г'|| /nx}V]SDDD DDDD3F pc@@@d@IqF)RDEܾ[@m)S:""""""""" :ƍ+´iа!8]D:v jքG᧟l_YҤ8ap~<* y'OZFɓG )Nvm7יu[__Jr2fM(P.??+6X۪UD$J{C^6HS@"XG?}-ZoC޼NW("""10HRtP@dG'ND]|9SD3[0 K(RĮ) cF[ΓP$U.6 p0hҧw:+~}Xf˗Cl6#HRҡu%>ԩkWx  S@г',t"""r $i@PmLNN"""""""""rge`r4Q|y+35 aTv|9Tt" /eJJ0h&ڶ֭al`U *UrB DDDDUd8@mǎYh 20pD&Kvk gN92e`@,63("""""""""U~X o^Z9&O;u=K_mHRԦ ʶmwMZuR |8O?42e"E%Kx ڷo}rQ\X=ȑ#ɚ5+. E֬Y9rH,Yn^#mڴ\.'ONѢEپ};W\'LJ)SҰax]5oEǎo/ru3gΐ/_fΜ-[hj׮M@@.s.yfrz*>J܊Umo@@ջc1biӦiӦ>}z6mʑ#GoڦJ~&MϬ*YXpa6 BCNDD$sEDDD8]$R!!v8rĮ?:5dj2g";Dcl m`yа!8]ĵ#GZ58wU ~ Epp0͚5c6nHݺu wߥf͚d͚Wk./_ΰa8y$e˖rf͚N7\.-(̞=7^L ?~ny\I<9a0^z|̟?K,l;5jpk+1o]QV&Yfh"JoW_}ۙ2e AAAу]2}tZjm{Ν;ӷo_F߫yL>}`h^//+ITԙ@DDDlgS瀣GB7~|HvXEI:$Nԩ0~<YIuqM6oȳg%KߟBiߧ ?tPzɻKuc~f;H"9r]v~zO?DXܧO@6m4h}2Jr(SL*T'NʩSH.^Hԩ'O2ePl;^:ŋQ5kr]qZ˔)C`` ֭o3p9֬YsǏst#""xw  uԴlْ+WD#<'m۶] &K]B|0mj慺umrիLDDģ"gqǏ!8zѣppKQI 5glAȒŮ@Lέڵ0nuM ^x:vGu2Ih|c'5d n#=Epp0͚5)R 44~(}u+WRJUm햽6cĈtޝz1F~9҄ 2dcL:-[1Z{Yx1jբnݺ|w-[yA֬Y)Y$߾>yٲeؽ{7~~~SH볆߮_~+RbE~_UAAHO>͛=mUj\oY;-,Y2ã^^^E{N:E`Ν=u;͛7pN*i:&T|Yx=(^DDD,`3Ǘ*U&MVX˗9udΜ@/ƍ9q/_f۶m)Sm@`` ~~~ٳ箯YdI6oOkKj$<Ѷ0RL @hhۮ]1cF}N>[oE&O<+Ve6qcRin+(ɝ.@DD#]rkǀcǬtdwcӦl,8-mFg28n""""""""""p6n.M˜1(kpxMxj~=$O=/]@~7vO<gϛ*U*Ο?#""t}nԱcG̣>Jy뭷Uޱ~ڵkX7Zl!!!H"VĄ5j`٬XSZ׬YM6ߓ>}zWx j`6˗\yiܱc,t5жmvVٻw/.\8s Ydc۵kĉ:u*m۶ZgUo_?(Tڵ3ȍ\{_u'-J~ʗF` 7fɔ jք^ajoxΝa*;04b/h] R@DDDDDDDDD$x&Mҥm՟mS$Hc#F$ oAzRz9sx bO?P7:~8ЁzڴiL-ZPP!:uݻ5jT_~UԠAΝ;իc]KLկ_djԨqK.ᆪaÆ:ujBBB}7'Ol[(\`+q;Ӷj֭clѢE8x;q\|\.:w|&a.4n […'0ܞ""4AkOmg|VP:- ȝ*VfeФ bp\j]lK@k R*ؗTvv/:׾w^ m٥5La>ɓ7Y?K1zho~vXb#>=T> [ kVhn;X΂W`o3u usel=)""""""""""Iȕ+6LѢlMvs LO>tBCᥗ`9&CJBCatұh"2eDJ;v,",,˗Ӹqc8p:}4l߾>}C޽-3`RJEnXt)W^̙3L:;򼯼 C ! m=ٳ/K6΋/5O>$GXb$O}ɓ'J*8q2eʐ,Yhm۶-=zȑ#cǎ[^K6-?GUU8F۪HVcZ"""r v{(ҋ/H裏8p۷ogĈ)Rf͚9 rNCЭ j]r熱cs\0[_XGW_ \9ȑBYXhN270Cxn;ps8',YSX-$0a'H ݻ[mm_v{-WE0wM԰9ofcg|*R[lwL>bŊM֬Yܹ3!!! 23g3g˙3'_5^^^(Q{12g̊+(QD*Q+Ve˖IcR@6n7_:,Y\rSB3x`~iog@jȜ9e3gLjZjT~}Y& oMuؑ!C#GԩS߽{wJ.M˅ϟ`pԩ< 5k¾}6Ku묓t t إJyXGv8I۪H'̙o =ZA66EDD$ R@DDbѨNF Dv8>j)AA LLHDDDDDDDDDD&6 O0wu#H/T )R?Kiص xJ˙3g([9r`n$Q+Z*[kbLI2OD$v-Q ;|d9sT T)SǂٳG|}['KX%K S&hڷ\N<$Ȝ.+r?ADdž ؾ}eHRR(/BNW1uн;l C.'0|8Ԩtu"""NaOj: 8`AlV[>E0@P.%j$'['re1ճ}"6 `AXҧw"nc% <n[O?7ހނ5Z5(YDDD""*<܂GuYQ ,9sZ ,0a (rvDDDDDDDDDDDYx8,_n],??h :tyN<ժUB)_fφT}m>t"#GHvR@D$.s^6QH"0S oaˑ]BBlY˂9rXPǡQ#-d.""""""""""r_Bw/<$|q:d BӦP|%x{;]{xU.<t%""SO5֙gO9<'""Fć+WsQ~ \|@ghu@l""""""""""""""lq`\H^z :vN-4vu;;qŽ*t%"Ear /@GпG=""""";cǢMrS޼Pu YNH8}NaN(S.7m NW'رХ^;l F۸KpO;7_t""u%hҺԭ 5jPՉ< DDnvn<]l˺\hA9qPe׃ cF'FDDDDDDDDDDD"fͲ͛7@NW&СЫ }:]ذ;]gɓfp /(O[7 @}s:0$=OG5(p䈵5 -(d>>ٳ0m[BR0jItuDD@&5:HmhۨNP;W1n_O=nA~/_Vtu"""0$>NY7Oc   . =u=(2gvdDDDDDDDDDDD[g3l@ԩcNW&Ux8 LhZp"ϳq#Ux,YQODD⟗td3}:vO?SrNW'""c "/?oyyA֬ᇡdI2ș|}Z s.@p6nb`0hҧw:IBBeK3fφz;w1=IS@D$ȑ&x PC$70\.amHݺvy oo'@DDDDDDDDDDDҦM PhD3J¹|6U`b\<ӦM>t%"'0vP!X ΅޲={BnTDDܚ"ΞsPHYDj׎ș||xq ."X ᥗࡇNs ŠPy  :Hx{Cƌ֙@DDՠ<,||Lb jr2R@D޵kokA{Nk"x٨@Μv9eJGVADDDDDDDDDDD֭ 6 \ aPxIj,PN5!JPydI\pU}@еMZAANW'"""rN 8xl GTZ HL\ fY_ OӪdtu>>u;tVgq/w8|nXZ> .k~ U8];= pch!2fx9rfr̛g]~&5jڴ,YN͛F {_.^lmbA[P!I| ?oP֥Khذ!k׮eҥ.]x5?{>XsDDIkHbO{X`E[rp@BPv@ή$~{„ 6)xYXj//5k8ZɒxI-[:Kx=0mRb޼y4jԈիh"ʗ/tY%}z8z*$&\ACBPUݹs?vW/t ڵT .Td`3=P4e>܏9`BxuȟO&tG迏 o tzՖ==tr/˖+Xc6=o߹s.]ΠAphPNBCOw <_[yl""""""""""""4ɺO? ;B3S$Q#F@6p@IΞc BZNWxct5%,,VZ1k,̙ó8;!m3Yt%ixe{ToR5¬+?c:.ȑI pS.\Ϟ|bqIDD"ع3kW[&S& (0 """""""""""MD 7χtlPV6 ákWI~*Vׂ&qرo.NW@h߾=̜9z9]3B$g8]Vte""(L r/ǎE Dv a!"EQ@Μj{&"""""""""""6o!eJx% v2 f` (ii:>~&Kt5qr1f'O /իWi޼e)HӂRYgʕsg\z 997, I.C XХZ5hB.NW'"""`mѶo50sҦ bTǁ| ujgIhgi0nl?n>r6+a"lQ ;=z@vP)ѣe˖\x:8] sx=> _%J8]U;wκ8%mZ{x) #dYf϶N[Po_Ylr; ,h-r:p Hrmӎ6s^i$yrK/g_ ڴC֬NW/"""""""""""u,@0c͔ Pӕܟn]ؼV2e(iٲf|ׯ{9]Ip\ 6ԩSөS'.]otY%1̈́ f͂]m,gYٳοҧe,PPuaɔ)~_&M^=;p LbW_o}}իg:֭-=f te""&@dp`v_ Zkr}.\`Dq#+ÆY7g ;]۴33:]M߿?S[n\x>}8] cn~rh>;]U ;|˔)*P3jUt @b]IBJFbAЧƽ}qEDDD8]}nv S#G  +ܤ t9]ȃ;|"^d rvg*xi8v sED@6_̠1c+o;]O_3g$r>Y?*Tpwꔅ%~fDw>[6 $ta~ºs f ÇÀYvXL ""sk4x'mQ?mZ )UZp`Aȕ+/̙6 ~,ժ<Չč={츢 Ζ銒!C ԤI~HsΤN6mpF+ -Ý q[̺= 'I,ϝswL)gNGXօŋ!U{ <^{ z`\Z6fI$$OomΝR% {m""֒ȧZ/ZP?a/)?CNk[Cܿ; _1 lդ<8S-[Z5Ȟ.(ڱC.ԩSг't%J8]M{饗_ҥK?dɒ9]3Ο!f͂ƍGRr n`nNW&""@aqFXqsh,-6rBt""""""""""""ի0w 4'жf lPU60mZ+Jv'rz0JӤIRJEƍtӦM#EN.\4i" ѣw sfX(uU[ÉPM31xfv) ys{?uxE9RDD\N!Q֭"7yrK +f#O?nDDDDDDDDDDDD޽0~}| * -[:]({۳fφ޽fMK'fn;ҖiZ}X>}XW@DDDDDDDDDDD$ᄇÒ%Pcڀݻ$G> ~J<ѣЯt0m*UUV{nVӧ.)a\Pt ͛Î Y j׆}:]ɓ*krsHB\& nڴ1;] u&(aahF;m`9cm> RۣZ}qǎ̺&}S L"IEDt#G¨Q6+; o^G>eP…駟Z*O?4˖-#sN._Ts?c֯%=yJgHMXukѧ2eয়`\]uMOJHں4ib] {Eվq鄐R(M&HW }T *ĆƂ Ai/J )EH @HBzfws+ג ysQp+"Rȩ_00k3 Р|.""""""""""""Ųa\ST{/ 5kڝN%$W4 `w"IfB;ɞᅦ>Vx&WΦMر#m۶eڵTXX'*JY gݩ5}=:z`h]֧ /S&c"v E S+8e97M""R(9,˲!,*,veoA|ؿ0а]۬D """"""""""""M!(d3Ӥ 2׋Cv'ԫ{B6ɚxUa2Ӹ;r%֯_O*U쎔?Z6GΞmwu)._Z?m0b`KN}ӧOaNŋ+f%`$5Hٽ48'ci(g*Mbiؾm3f_wi~,V.@EDDDDDDDDDDD\gV!K6fy3~=4mjw"HRiU$etOX$.\rlܸoVZn:jw_P.]2Ӧ7m-N:\qedcƘ#j.!!v'J- p=<3f/۝N  `3>>i#R "RȨ;_}O> mBPߡ[7XYXjP#+YL-[ɤf̀'v5Ha_Ц = 7;qqf}ɚG`pיQɒ%Y~=*UM6ٳHy/";Y\'MnΡ]H]Lf{%KNrwaPt]ͬ"\_yy74͟""R(heWi~hYq`vb^^?6!CI&5 ;*íڝLy> :l*ٝH2sQGMرv'qYY={Ҿ}{V\I&M쎕wN6b8aΛE?7ހN""䦮W 7ߘb}gT6,[6e76`'F_ݺKk7ڝLDD͝U|~>SL'O-[LՏU#kx7 zĉEHati5C 8J;kX̦kwi֬:ubӦMvGNb8P\ _~Fp 9BB_?ظDֶ-l|b jՂ!>v'w&=ڵ3 pݩDD$vOc>,QU4o 40Ι ɓ{w57-^=S3f"֒%pе+| \P)\K/ O;[a…ۗ^zrJ#T){sY~h ʔ_~1j$2A2OOsݦ t{؝(s>>0f > CF:ůCXY) J{ٝJDD BRIflzP=t*f ?;vnfMQ*""""""""""""A;*T0ouf&ݱcN(7c:BC53+:rW;;x.u`-G̢:h)̼)dz50,%)4TfwpMv'q[ 2;3ŋ)gN??*LX)5Lع?ow*in͑`RQ:w6JL3Νf֭o_s??S y<^=SH;[x4l6 + )Sm B?wYX vߎDʲL͌f;ԉfk5\[hpVRiG~r8̝;ooo.BCCjEgϚ. 1 emo;Jn&pFX:v4nlj\EwfUcMqf۲eN'ys'xi24ϝ e؝LDDrAqDBlf];!вYNU+\""""""""""""bDS4g^m z믷;k/O?;ơCV 7<MڝPp8xyyBBB!!!vJX 9Lc }iUanݱ̊ +WBcf;t1+|i$Xƍѣ! t᭷̊u>}N&""9fڿ4[g/\0K]uhfhժtyHN4̟oݱ#|%a D$2 8m6l0+zt\$> L` _~$୷LJ{x qO4jȆpݦR%(WάLӧ mŊQLck8Ks ,ijZ2+|J<<ԩ0kLbf 7ڴ={`Xpヲ 7,˲;S:u ֯@pό./oU)EDDDDDDDDDDDnIIoJsbM!ňPD߈f6cR7?oq7+}hv䓦PsN8ۡys3w۝zyW;w.Æ KٞH^X|9xQ{(pCm̵ /|yY\3)9ճ;U7л7Ƃi8+YԊrٳF xTξ "EZٝHDDn Ft4Ze ӹ=l8Fi6 W.]9S8q)Q#HΜ1n-[B>0nmflQ#;9|،Vb"eANSL0Ç3g4 :˗'.y5+%%A\Hn$p8`ϗ'!yOLM7F H`HsF0 kךnL-*YҬLoԬ ݻCvfw2qWݻ?˶ma83IDD\Bm&,ؽ, ؾ=(a.7l]sf <4h`:EDDDDDDDDDDD}[mW,M1ԩf{/oͯ"7IPy3hafV-{3JO\i,swL!jL2|zC4xxx0e ZW"Hilt3gLCW_eM cV4H]"" 0Z5S+v 11v'ʝj`bغռ[oX$. _mf6coٝJDDpUGG%uF4۰jU|YJqT󋗟݉EDDDDDDDDDDD$lu뚂̜?o kY={Ȟ;.ٓKCi=Y0$rDߏGU&M GyMHLL>ooSSXfDS/9sLq'wA:"# gC-Uq# JGp㍦i1ܪZ՜?=ANpݩDD$˖jd %MCA.s)%%š_5) sa_̠;hs扸bESPoo(_ެNPbf{74lAjvqVA׮ѭkWȿ:th ҳl2w^uuj>>p()S22jʂ@X~\o 'U yhF wi_L;u* ^Qî])IHbw"ImL{YvmТ|=:~j~@DDDDDDDDDDDz=7DHefܽF4c ^v5yLCAF z?T$#&_HDի ,f#''N,`Wj<=So6+'9S#ԩAݣaPTg Qa] Y6f2O?6'@xױin6l; aNs ~3Ƶ '̒K CϞ}鲞1,5ewRo&+ ߛ6m2E5'NG6/_N[Xzspagf 8_ӧ7N"W駟X|9kҝHXXׯ/hivD;d$4ƏO;!Ͽ:8 ;t15isOڝ&U`4"kg;"E୷`a:Sȿ\`~Y͚и1,_C.CLGj%3M6E3GCO08>LSOUIw\xU<shԨqqq|TRÁG%6^^^L<Z]n*A~PZgIpמ0c8¾2A>}`Ӝu|~_v'wұ#3l n&;H,XQ dO? 7]wPDDDDDDDDDDDDYY4cwd&LgSA@ĝ|<0ԨaVYD""N] 6\V[MS#d,133o$3'.OR78D x%8~{N?ins樑yxxп~W.]JkUR͔)S :4cuC.:,F0?zڵ ;6̬N;v?pݰYa,F=;("1dm52:""b k& 3gàAfŋi(p8N)"""""""""""",.?Z! b6';PlYxM'b(KFxzph4E=zsN֮]KTիٵkWjΌ 0~|vzΜ1+n\~H ]wDFB`)0e F$OOSGbb_wS^rѝwޙ/{Qmۖ/-ʕ4Jb_~_$]1dOJh*OC2жi5jTSLtgh"@`` pf $d{xw`,,]M6RJv0M|HI3ԩgONxYshOfN%b?6ml#"R촷͒OQQ0`0{[DDDDDDDDDDDroРA|v)A2տNǁW|N{-_&O4hP<. s!$$Pcd͎Ф(̫lnj">;ϞV{7 ޳1' \EsI8C~TBnvqN>jj߾ w;Mپz 6n>}`4VTΝ3P/YĉWӞ)֯7ހ+R%\aP-qDDDDDDDDDDDܝKFD$&BTC.+bgX ]ȡCoЫ{.״sYB'1F4+3O{۷oGF1,{xk^Gժxz2ؾ$.pHshog;MEv'*M.:uL$7JE`|Ӭn|)Tjw2VpI$%K& IDAT.&McG1>lt!!""""""""""""H "NzuKt8. >>v'̙w/̚sMtMH`g#uAio[AApf̙}BϞe݉ VϞgxY%6 !4 N$"8ӁؿY`5ֻ~qwǏ۝>'NرPiĝ)bwqWZ k<=Ms.н;lnwÇc0u*Ԭ o&ɩ5`^8ЬD(""y. /#GBfEq|{Yq2ǏCŊvcAR3v'ɚ]5d> n v;Q 0MsBnAXd||Waظn~T""n' .5Со=:ァz¨07\ _~ 3giDD&ye {s 3nб#gw"{+{7Νan+4ԫ[ôi`YvqyLfV 4 ̟*ˈ )11p睦RDUDFBѢf}ɚ"E`2Q:uÇNdڵa{p7{GN&dI3if.]iSi&GM m3]Z@DDDDDDDDDDDDDDp,8qp69oaw쉈@SXʗ7;fw"{m [Bh('|I;"{ l#G[`zS7|9t|lޚDDDDDDDDDDDDDDD> qq`~x54 *T;HDF `*ڷ'Nd/ ~_>M]\5n vfΝg !T"".+0p ݻÁ0d/"""""""""""""""ge.L=k۝FD$"#MQLft//ɬRSYCaSLblYvWhsMcJpݩDD\RΚ n*WüyHDDDDDDDDDDDDDDDJǏL 69iwW]kfNa4OpТ)]Æp<4l|cw"f3MW쁎!ǡti;I1c`ph4""9fP"[gB.fQ,X;wBbЮ {ڝL\M:m}kw*f˂cMg7ߘI?^V%xip8N""sdw p p(v'r. 5r%'r ew2q%0w.||Y!S50{6,\h |&""""""""""""""".05llwyZ5X7kt]LAPL/ڝL\]wAh݉DD^Cfɥ} L#GB۶bw܉P3A^Sc?f_I*8os!!t*nna;ʼ`xXthQDDDDDDDDDDDDDDDmf3a>=ӈV&êUi d$"E`8tL~#p-tUx{-$""i\/WϠi$"""""""""""""""n048=O> 5kڝFD$"" (iSSbw$%ٝy, o 7{CvmUtv4nljbED$ ah6 z,H""""""""""" """>}:ڵTRx{{KrhҤ <@c[hAlp[oQ|y[o?ydʕ+GybŊp8^z۷4i/~~~7_ `ĈiK~}\Kxx85jHyl2e2dHW)]45kr…tgV$;Jj w?lOEDİ22be5ibY >DDDDDDDDDDDD_HHٵkUbElٲ;cV\\u+,,̚:uuuץc ̙[7tS^#IV͚5[ӧO[ ,s-17I^ ͓o^?;y}\frs:'?mfY`Y۝$,[fնE^hܽ,/WgtɏQzyk4ڊv'qKZemwײxeըa[֙3v'Wde[VƖvq;_`^?y<=sADDDDDDDDDDD^DD=zŋ9nooohذ!O=5J~[XƊ+2aN8}ĉݛ[n%[ϗ|FѩS'N8ݻS_fMJ.O^^^)RҥKSf,eի`fʕ+XjU뗥+/2ϧf͚xyyQT)홍;F@@@~̒#?%hѸ2Gّ޹VǠ:~Vhoef8:w;MiոW)7ZDD۠ {s=z'o6~ x%v2nЬ""RȥL0s&icK)T̙É'=z4+WqW.PxǩV*'OdӦMLS؝uxy‘#CPi.HJ;8*U` }!>T""ILcC۷~ @3}^:@Æ q8裏RB|||S_|E7$**1c0rH}}:e;hР:u"222O4h˲x)]4EeȐ!Ĥʑ7LѢEnݺf+kӦMѣ}|FΞ=K&MXd @ʱvM7:~Vc1?ΓkX֭TR,\SH*UĊ+2/JNiI+egڵ={Rxq<==)Y$7\KS,۲eK-?vk֬ҹ햎wU ~̈KPiEniM܎]#/_'N0bYѾ=w\2LPyĻXa7uN&f͂?w߅֭QS"m3Cp4dsiYqz>VZ:t(ն].ň#?_cZ*ϲv֍nݺӯ_?jԨ㒒Hbf«?{ډ'\r-[ cǎT_ّYVA=HJJbٲe)W\I.]ҥ zo6e[0N<1c`M*Gbb"_|o)Rロŋg9ٳ)[,7!!!)SCy4;L%Kd), ˲Rgɚ7oΑ#GRmαHzɵ޳/+gϞJ*X9sp1} Ҹ=w2Κ,;hϞ=lْqFbccټy3k7n; 88Gr<<<ڵ+6mҹܵ`HhF;Miy_bӼ4lؐo9KU%J\]JD 7Ga3|i$;4H+? e@NеiȠAc\hr˲bee].q=!!!VHHHeVBBB՟[e_Ν;_k{k>}Xm۶rޫ='7o5~ϟy > &˗[ճgϔm͚5o믿հaÔzemݺ5cٳg-[5m޼VZe+s)SXժUKy^ѣLYٖcZ{/3:5dƝeg:3g^3ۺvjVXXXʶM6YuwduYݟi޲F;Eޛ;ײ,knX뽬и?nNk^YF.;+444G_.4cIIv')^|Ѳ￷ ,òcN$,*ʲל{O=eYv')(;ҮLY.q ***O[o`ǎyǎ㭷ncÆ ,Y$Gϓ|rvwaK`ݺu\tʔ)Cٲe[ؽ{7gΜҥKݻf͚|޽{([,ifZ 3wv/^gyCsN~˖-'UɱEv߳7@:;٣q'sGɳQl2zm۶fdrK6efv'OOPirDnhXN]eN_jyjH $0a _|awն-'uP<9E|3g-T"""m3dIrqypB[65 XF /y'$...rXnZpp8hѢk֬!>>>Yח.]ͺuXz5;wNk׮XիYn~{xEyyypҥk_w-5b̞=/(IXLO~ƝӸ)7"H")ےl+ΜeNƌEaDݬӸ{m9ٯvy.@3e <  |cwpp٧fAժ0{6g ۶и1lbw"|@DDDDDDDDDDD ^zd:k>}Νdɒ'o&ӧOSTto1x`j׮ȑ#9|03fV.{޸q#;vIJT}!22͛7g;KVKrJtr_WZ7|C߾}S}mѢEOZΞ= XCn2dzۜdʩkɏ ߳Ӹ1;w (xNQz3W:p,.mwwjfi͘썻9ٯvy."B`t~V;k5̀CcA:d +W. MBv'Wj&qq/^=zݻwYv-G=TT3go߾ wl=MhժUɟN8bɒ%vmi:u^z9sl4i%J^H)ʪ˗*JֱcGlȎnݺŷ~˶mh޼y}-Z ((5kְm6Znkg=|p_o˿o>_{nl?r`V*Mw;#pFy4hION>jڴ)@ ޽{S޽f͚]֙3L{sX5 z ]]ɸjxW[("# af8 N^3+z+-Z?؝LM` ,Z/O<w6jf\\\u99boΝ;͛7[k׮kk…{g͝;zWSZƍz)kְaì;ӧձcGM6VFuZ7xU|yx▯d#$$$[_~*Wl,YzwǏ[ ֹs5kXR:W?X޽{5kZݻSݻ-L2ʕ+|`)S&-˲g-Z(3fX5rTۛ4ib5k,s-˲Wnir8pիwfM֡C 澾}Z5lذ4͙3nݺY'O}wܹT߿bŊYrVjժzj… ֥K7Zճ|||M6e9S-ڹsnYeUR/ŠO99(KvWz[z%3y!ϯqGN^;}i&Ӫ\[111VLL/<&s}aڵuYɓmfyzzZ7oN^tOFBBBi;Iޘ8Ѳ,$ixиq7׼/2>u.+444G_߲n,!7?n;{ٹӲڶ5+}Xv'gae-kYjY㽈ء DDDDDDDDDDĭEDDpy~w9BXX۷ogݺuZ/P̙͛36m'Ndܸq<Ì1AѿtBNhҤ 7jժTR%JLJ%JPlYVJ:uhܸ1ZSNݛ#0n8f̘yXj֭p7Rvm:vH޽>|8cǎeԩ̛7 l2֮]֭[ٹs'ȑ#9ssVn]~Əϧ~7ߌ˗gԨQ/pBnᆔ~Ҹqcʔ)úu_~ת_>?#ZbȐ!PZ5kV^ׯr|W?۷_t{tܙ۷@:uv,1ryp8R=_y{nݺ)U۶mK79KtttUiѸq'UV^믿=z@ݺuY`A_y{ iӆ˗s9*VHjXb-[ֹ6W&([yA:&NJN'4j͋=~tr|;]vcn.\5ܹs.%"->:t]a.Far8pj׆l~#nM R̊:daYj˧ ApfåKp񄇇GTTQQQN||<.\ҥKI||<r_tt4\x1ˋbŊM@@SHח)V^^^Aq8I```sPh4Y4 IDAT @hhhÃ{MXLO?eРA\gBWy{-?߳$:v4;wi{p8!>/GDDOdddz|VMPPPJ!~r1 lٲ)QHER'xxx^- X,Lq2NArvȽP3k甍vҸ+"#A+;X:uMD$ᮻ୷̊Df / nм9 jL?*T;H\qY3+YU4h?y& T2Lz|pppNj;u J;E?of%>5;H@SHza2:t0 U؝ʽ `1tbw:qwiV7>mN%"cj&.\ 66H!"""U~|||fόȴPdɒe:뿷7)M $4o<믿ɓ's}٘J #"Ni_ဗ_;и+RDF+VAб#l+ڝ-kV&xa?vv`thtbZ`v6̬K0vnq1j&Bŋ)WGGGCxxxJSÉ!::bbbJ)xbYKҬgEk f߾}vѱX{-n9u+.| ۝ih)"#!(r-AA W((STV-Xl'03` +U;) >z;v"".D"""""""""T?66 .dR_hQ lٲ+V ???+F@@@J!ѢE#((N_DDDD9u n9F"́N#"Rp, .\T)XZ63,iw*ղi4\ȬTP&<< ѣjCfd Tnw*,S3d[^_9 )Ђ/ӧM+z 8x$""+"ܪ5-kZ.]`z*N ΅ɓLs .[CXMCv5Ʀ;A_""""".*!ΜrN}0i) V4""+2ܪuThV(hv5k T4  > f/€@ `Fsl=g>tޡLJ>}8 EkH33޶2Ay9svΪq2S|IiST&SRRRٿ/Z8~~~e Ǻ݊%N}M%ظχW_PӈTS :C/K7T;gJ?o<,,\=Zixy=x]d""""""""""ᠸ2(//;7_\\򾒒GN@@s???ٳG""""""޽fvih;χ_ӈKe ˡ{wxE н;L;Ol|.f̀+4;c!.F?,2;""""""""ʼn,?}w4G@@KddG""""""X~>DFi^yŘLqY@@)XݺYf'BB`\0| cb盝NZg?ß oi|}Het"pG퍯s2/9ߟ@{+~tDDDDDDͅhS߾}Ƃ)S 64MRXXHZZvl† ͎&"Ai͕W0f ?avέ_?cBСp5Ƥ~N'G`4Ti1BL """""""r 7߿Gӽ{wbC,߹'xxxGFDDDDDD ଳNq|S@p0.;xoi]}W\q1r8CNG}ԡG:6Jj͎&}G\s5f8" 5;űl`⿳rlقnw222صk~~~ 0x#66={:q7Gu hvi'*++ jM%%*tTp=F{N$`LRX؝~"cb'ƍ`hӟOSH'ZHиtCKO 8^D^\'00r}hijkkk͎!"ȩlf5ƑgV8&WCVUUe]N8w4pEbwM:^H(-30; &O?D w7=3f+رnvBiICO?K;}N%"9w 7'"""""""Mt>߿%Ʃ G7ofΜ9{swswbv4irrrł+VPTTD޽Z$$$0rH̎ٲbb`x!HK~5 ]ڞ t)XSpf 0euGDZ"""""""Yee)5H%C Ǻo+4DDDD ѣG?/ev$xM:a9Tr4g,04B(/ ׳}vv;[lnAff&555xxxзo_)ߟ.]“˗/g̙\X&O̘1cڵgÆ l2~:t(VʠA:DHxS*[I;r4ѬY?0n<v٩%^ ^k|?z2;t\*biG+Z;ⱏUhRQ@DDDDJJJ2d|Z8)"-g^n3fc7ݠ Sɡ֬1@xi\1bz<*Avv6Nzz:[l 777Cllsʀbatͤ'UWW;0g5jSN%11-6+V8'ARR $&&jvS/l,Xowށ/QN$GpS$|x5iLf' W\6'~HG2r8NTVVvT ۈt;(mnq'pUP[ f]a! 7os28uN; 6b'yꫯK/QTT 7ɓ9묳̎&`ӦMl6VXO]]j̐!Ch6W^ivi-Fydٴ`^wwxPc[o5>_x\4/ DDDDDDs+))9BJJJxL $((yXoruױxbƌcv6<DDJ.,''4222HeҶo'[7JJKtNh8`X09yo1g-ZDnݸ۸{2;Qj*Ԃl袋HJJjmv+,XF4;z:s|9 bv"9bxI5ptQ.jԞ0>? +̛׶ "ީL """"""[YYIMh, k1@Op˄H0e^{5~,"c cb5 nYjYXX.8m --BB/)DW`X#882ʱ}̜9Kһwo&Mĭުi.eff:YJZXV Fз/liӞ~V>> <o@{N%:O?c@cEyL """"""r8߿I#M ?]v=@k׮&|$DDDDD::Fɞ={ 4;tC0!S·~bgQ ==t ((9a?{×_6{&9yuuufO :/4vZl6)))dffINNjү_?c6oA_ӈK!5֬DT7SV6v=ĘJpХ |>"T&ѸпTTTtr@QQG<^PPaL  ۻ,77sYgk1nm'{A߃Z߭¾}r҇(++#339eݻbπ#66={~3 - 9L|JKKy77owfL4CMegg|r/_ʕ+)))_~XV1by0|=<"œ bJHJ2&UYm"Mc_osGgLIK3&$%HD7 DDDDDDw%%%] |Ē'i~G.Nʌ3̎#"IM \pqo 4 fjYϞ2p@bcc[>\I X,B_o*/^ٳٺu+V)S0j(kŬZ ͆fc݄HRR DDDڃ<,lb00>NH…ry'L?-[Grt"yyyK˔1fLb1;Hd۝ł jj2tP<==O;ƍ-Zگ;a0! Dr*֭)S`zzx)coEEpOS@DDDDD:W 8Tc)!!!*H?3|pnyHgkL'#7fMM_tRSSIOO'--۷Ѐ7 >>9qbA !$V#y"?kNN$##9s;]w]wExxD:J֬YCJJ 6,5j $%%ѻ) a͚,QV\p ˖AkLp v4^?&Owp=`̘ӧHD> DDDDDB w^>V9_-4RȉYh7|3_ IDATqDScd}=\sىZ`v222ŁLjkk>q`@틻oп??p٭V_c_[g$VZŜ9sꫯ߿?&M⦛n[KELfcٲeYrbbbHNNj2|puvnj2-CFg_|Gw$KM ,\> uuCƄ]N&a$xe2;]*HP^^,>x*cӣGX倃oRH>8bbbҥ=pcvZ>;؁ufZ;Z>f͚ŦM>|8w\r&"b;l66 ݎ7\p $''cKi=Zڶ͛ aP8 ҶsSBCgUlRR`c*NȑL """""ͯI. rcxzzBBBѣG|IDDDDDDڶzؾ};6l 44H""EE"©HKKs8PXX@xx8qqqSāfhfdcAZko{7X,.?޺k /W_ԩS<h&LߎD5ŦvfCDDVJBBfǔdJ7믷N+Vq' 2Tr**`X+x-Hۡ2H{U__OAA󔛛 PPP@~~>.9н{c/|IXDDDDDD:?ѣG3yd㈈(<4 bL)Zv2e == 3pNh<OOtҞ~xeecVT@l, jyRWWǒ%K3g֭cL:m[3g86mڄff?p88sZ$''3d<|% w盝FZBC,^ <EE0y1@7n_`t?aU DDDDDڎj<|owPb@XX7o, x{{LEDDDDDD~tRVqDD\mlL)زXp3y2¢ꂂRSSIOOwNHOO^zLbЭ[zF-o4kcCk~X23!<(..f…ڵ.ɓ'3|pHkss?k9쪒V^Ͳe˰ldggLBBVDL-mu}ϚFZJƯg|w7ǟc1…p]…еىD\*#N8t@AA999Y  %<<ܥ(~Xy@H{tM7石n: `vWuuƂ'΂74v?2222OуbX\&3jY۷Êx0x0yg .0 CJj1^C%f'sL """"WII 9992ŀjjj\Khh(aaaǜ FXX&=S///ӿRRR)۷y3 0| yy1_"&&X}+1N?^`gcjUuu5cӦM 6{w+RoEĐj|/ݲbbNPl6l6V~aZINNfĈx{{7Spisχ{5Nhvi ?Sof̀>}N%MW\{)DD: DDDD㨯wNqN %77yݾ}ϧAAA.ŀÝ BMz"""""""͛:t(ƍ_6;tRyyyvHKK#55 qssO>$ô[9}^ Ə'p,||̎6 b,Bz}gO>i~3ct k"""""^@4 ,\wN G&=C93fG/ 998"ֲuV甁tv;۷opba@||X*444ܹsYr%111L4cmv<iyA-_~FJJ 6l͍C2j(V+ݽ2I3`C=4ҚJK gy^ ۺƟ]gFP@DDDDN]MMae N$"-Ce{2MHzuFxx8QQQѳgOÉ$""߱KDDDDDDDvɹ9×_~ّDՑ2e 55m۶@ݱX,#**GoƴgS,Xe 4HHBck'ۉ%K0g֭[9äI"<_X$Mf#%%5kPYYb!)) ֭1`pj,_CHE"$:u*LUSc|xxNHS@DDD#//倽{RQQ἟aaaExx8DFF: M|""""""""M~z."ƍ/|TVVDdڵe@ZZTWWA~\ 8}2{B`$%] \`)""Nq#X7Θzpy(..f…ڵ.I&qMD:믇ZcvZV\fn͈#HNN&))3<+u`j8,`l9xcƴNVmx}&OwwHQ@DDDG^^T9n9 ""0<˵t09G'd2}tvG}dbB9Tqq1)Łb] aX:.yy0q"|!rhow/}q޽0z44? 쳍EbMp%?}6oL:*8Jb޼y۸q뭷r=зo_HG f'9ewfaXr%%%%ՊjeȑjtTUBj*YىlFס_?c%J2ɰx1HD""""͡ELDDDDDDD:W^yロŋs7sN*~gؑk׮&|p'ڵ @)drr,YWtp[d;M6}:0^^۫2v;IWWW{1w\6o̰aØ4iW\qDDZZl,\{-˗/'%%˗ODDsjABBfJJ 1rroN$mŏ?ɰ~Z駍6tz3N$"Fe] {!''ݻw;7 "**={IϞ= ::e@M|f""""""""ׁ'++ wwwof&'2enAee%e@||<Ǘ_e:xEj/7vط""Z?ddO3a֦b1&ӘJ0~q)//Ӛ2//W_}W^yB&O̹ځWDг'oF᭓hhh`l6l6?!C̨Q2d]-i~4YQaL(DV8Ƅi`N8zOj7 Kb_mDR@DDD:2B޽{ TWW;Mtt4Yp)$ """""""b;wrUWqF I"'e@zz:2e >>ł;>xM=^z á cq&.(i6Xuu 7q֮IJ"39Kr7RUUE1~ 6555dffLHKK#;;???甁ƉG,/7[og?zc?an#yyߍ" + mڱ~bbv] :9[PNN^x!ݻH444ܹsYr%111L4cǪ#"櫫3 `lLRRRl]j Dbb" 6.Z<#Rlv"ikaL=ۘ5c\zSS_&ᮻN$"'Ne1_mm-.æ ߿y] Oh.] DDDDDDDDڽ 6pyv]ta„ ̚5RM۷LHKKc֭ELL,G\\{M qUV<gaL+8o`AB9fnn0x0Sӏõ}'Oxю;1b{졶OOOOO<@EE-b޼yo$$$0yd5'"mGa!UpEfi*++Yf )))\L|}}9rsjA޽͎پiL 7v:0;E;wS -2^k>QDs=Q~>(zuH{2bvͮ]ؽ{pt\~IR&22(gq <<8YDDDDDDDDZ3f iͮ]Z1y\ Ayy9nnnYh6h\hhpX@oCT9==a,瞦g᪫`b#7L.B ]ax ,X3f {/&&96qeggcٰlZrbbbHHHj2bM9YY޽Mlhq-.3[,f/ro&*k, ܹ={|EE.:l@6Gi[8#<¬Ypww?j`ƍ lXw IDAT4Ӊr222SҰ2e >>XLN.'h)//aZhK L쁈窫O/RLl.7ndԨQ 777ù; 1)H?FߌR;-[Ɗ+شi]veXV1;fe \pҥнى-ٌRAZG 2Tʕk!CD"r|*ȑLQW^DGG}%ADDDDDDDDu3f ;wĎӧdg~80kQ&h#~i,dggk%iV.< 5;MZb 8ӝS FE@@1۶TBcђ%\(>Ӧ}}N9m _ !!ȡT&Tz9ssdddNv, 4233ӓ; 4ӧfGPVvbvW_僶"!XZ_oL%x ߿JnyE"˗sS[[{"l6IIILD|)\yXU}}=6l`,[ 6СCZXV [ӦbHö5Iڦ*={||Ǎףf'|vd(/7~o5;"""""""""""ҙ|w;ݻwL)301NZZmZZ%%%~.SbccX,tBecgƍpww7ЫW=ŋZ eL+8/lgmn/`ĈH{R,Yµ^KCC dĈX҉E஻࠿#K(**bŊ999Hrr2j:ˍ*HS‚п?>>~R""""""""8 ),,bٿ?SII %%%.ۿ? ՙtK.鉟]tח@???u G___NcӇ+g.SxxxЯ_?)o߾xxxXwo4;F .\ ,5-N_c< sɉ9 "Aw|=I [ne夤f*++jȰa;?DqbDE4DDPB97jD'˲NulI3+Ocfy2+d X#82 2(}G\ ڟ7k l\Aᄈjc"W=p<0̚L w,?oy%DBaVGr)붮tԉN:MΝ~fԌRHMM?ɓZ.YYYdffV9-ZUVlٲҺ֭[ckkk p JKK0`4k GGGi֬umڴv[[[ZjUm%%%Vy[QQQٔKII*#ZO$rss+)舫kc۶mi߾=xyyUPL60uT>kgvvv.w&115,УG[*h0ʂD2J2@O=5_U9憽:"}`6]\ٳgYnf(Gf:t(L&|}}.}%}eK/]GEEᇖ,3FW8,_z+,Y)%Rw)L ""R8qE#Gmmmi׮>>>ր@EHLJN:ѼysHDDDDDDDD['HII?ĉq N<ɓ')++ٙv]0ܥb+ZEeSVVFNNNA󗌌 222HKKȺMҮ];ڵk۷m۶tf3H/tQq;4iBii)}a۶mGaa!{ٵkǎUV.pqqÒh0s?HO82CeFW"tqf3fXrrrd2-p;}%k]W`4 ll[Ǝ@X.2Ƀ\7 %_8ѣG9~-֥kKpPbYDDDDDDDD깢"9xuRRRHOOnꊗW===:`܎r}sIOJ"*ǎNbggGvh׮]رuٳ̙329::O&M*ݧCU2Hrr2%%%888`2D=ԩu;.3GH#;C t|믤8f3l߾;;;dd2dt5G-}j>;z^xo y`PjQ,!U@Iairrr.Uѣm3pUtCvQYDDDDDDDDǏd]GRR)))a}yΝQ'ɓQ >|h޼9~~~y˖-k~GyǏ[ϷfJKK]ٳgҹsJ]sBEO !C`|+Ntt4QQQDGGN'<}5ԫ0g|{XZ͖޽pbvFWpy3|S\o Hp>̡Cs?`kk%; 4tlڴv;HIIwwwuFnpss3l8rIII߿]v}vv͙3gppp 00`ӧ7tA<^}Uϟ ŗ|\n6-ZBEO }a+ZCll,fqwwg9Ʉe^37᫯` /^xi1a**S-w]HcM;EDN()):tÇ_ZuwwstܙQFC.]SNx$"""""""""Wqq1;wdƍlܸ͛7s!4iA"}ۑ#GZחΝ;ٹs';vl6`ooOϞ= ۷ٳg_qa DDDDEv6jetrjՊ// 11իWÃ>Haa!L&L&WagZ&Pnƌ1"lm{ނ^ Wo~N7F۶p] M4:"'H= NNr%vՈ Xv-QQQfiٲ%Æ |||.jp0bIC/}~~N&U5L's0gՈ4&SRR‘#G8t:trA:D^^x{{ӹsJHݲ{n_^z1h kK.F)rՊ1ͬ[m۶qipppb4iŔ@PP 5DEO:y<=aZ2jINN&&&իWf'""ĠAprr2*-)SolAH$xiXt-ŋaTKwM R۶ߊ\Js??ru6mp 7ХKFmK.tA3D\Bqq1k֬ol6s ڷoOXX~!aaam2Ej=}o߾k.bbbf닿?dggȾ}W@DDDjX>jelR˃>HQQ6ll6c6yiڴ)d27i~ g/Dj|lO=7&ymtu =ʲtqt4*M DDKs 7X~bQ/Ʋ|rV\Ivv6 `ܸqӣGK1ٳg#**o8q"&L˔EOںBBa1'N8ALL fd2a2:t( o/lLҰ7‰0}:<nmte pmpТ4T&i?΁HNN}`2 $$&MN99A'N ЩSHKKc߾}$%%]P`@DDDDDDDD+++/`֬Ydee3}t:t`ti" Һux뭷Xr%#Gd޼y貤4Y8:Dނwޱ eyyyY.HIIŅ0Fda0˃_~.Sf  FWU> ;w?Bh4쌮@DD, HJJ.hѢ]vח1c(0 """"""""Ro<#$&&2yd̙Cv.KAJ-Ύ ٳg ёM2~bqppÃ#G__>k׎dzqk~N:ꫯZj^lСlܸ?zIlleI-h,ׯ=EFFbcc|8vm{$''_CL ᐙYs!r)&$$Š sBAѕOM׿]H`S~~K!2ԶNDedd~o.~),,Ãnݺg]ҥ \3gpw[oU`ͺfvm/$%%wŏU1S{?~ZnMRR͚5ӫWk#??Dx xט9sESPPmۘ6mIII㏘L&WVǕc׭d,Z蒤 K.%22ׇ4׵\_JKK#33ggg?^7кuk\\\Lqq1L0u]NϮ]ѣG>sn> ~N߿qƱgϞ>^+Q~*2dk1+gM;\'" =@z:ѕTl&&&5k֐/&jڎA,Xi*(߆^-W,`[ ~,o]H}MaTVVFJJ c޽>f'ܼysvZ),Py+A""""""""" 2~x6o?7ltIC=gTȑ#Yz5? 7o>,//">,<5VGRRݺu} >qqq 0}i&vӫgM4ʱc޽;yyy5i޼y̚5%Kit9r+_z̿.|7g IDATzԩS+T>󷹘3goꫯ3T-22K2vXVXQ7x\̙sǨ0A޽پ};[nn?p_'N0cƌJjd /?`ӦM[תK.Wk>}cxN4c c^gy pVksyq~]1ZFOD]@u;v,Wi}YY񸸸?SRRR+W2~j=P]+|''0u{sh%'Z6 Kc|xzz2|zIǎ:u*~-999ߙ/p뭖EmaBHL??av+{ >ҝ`T(-5"zIa8uqqq|'`̘1Ҽys/ĢEزe 999?~,XC=رч$"""""""""Ç;w.K.u?1c.}ڵ+666ց7x#6668;;cѾ}{ѣ˖-:yw'`ڴi|'4imG/$%%TR*:::Z]szjY ,Y⋴mۖ͛3ydΞ=Kaa!_-܂ެZ BBB3졇;dڴiF"ר1^Z0d"""jׯlٲ4[һwo8}4qqqHKK^/v:WYY={y888_|qEVYf,YRȡo;ի8p ͛7Yf 0 __+04:Y 2l0<==qqqa<ϴiӆ)Sl2C~~>c޼yL"$$OOO"##Yx1; qq0i)I<}i%d0s%%3z4ºu`2FW$Rؔҥ >޽{ٵk{adffN=[nH}ĸq={ѥ\{{{JJJ())rŤ\>|8VԠz'xC/TKFoM``ES^^Ι3gذa?]}W^NmNgӦM$''Ӻuk $11틋qpp֖*OuwͬY.EcҥDFFV1^ܹsxyWXx1'O>zZѣGsmrJr)//ˋ޽{رc9s5u) ĠA* 俜o Q">>oQFO?0n8{VXQ)4Qk_Ε"@9FW"R+1İ~z d2G[o?M…꫖gͲ\ص&pw(4"`"Reff^صkD $ @ \DDDDDDDDD:Oc]iӦ Tku=ҲeKڴiCVVE[վ/v۱c8p ;v~cܸqժrУG߰}2f֬Yz߿?6+_r};v,O>$`ƍ2a/_^}/,,͍2222(((d2uVzΝ;9y$Ջ[jS8;;ӲeKrrr]빯_INN%,Px1]]]"??f͚piZj^5&su9 4Rd FW"R Xv-QQQfqvv^xaV~;˖E"Mv6̝k oo|D}oVǑ#ee>>FW$Rm`UE۪˴y޲X~=|<Ç777 ƬYHLLߟ_|5kpI222_xy衇:t"""""""""R+nΎH^^^,X-[K/]rrJKK9y$˗/$yNkcyyy8;;[gΜe>|___Kk_W{EEE2h lll!44hpttd2QPP@ll,W&< BCa+:uiD&NȊ+(,,4+rbŊKnw3hW}/mڴtpwwrK,iӦ}0m4+R.ƍkƆk'}m<͛P\\Lyyui ֬YCVVǏ7u믿2bĈJzyy9ƍӬ_kcDEEa2U|n6Yr\*xzz^u͓'OޞO>/۷@sW oݺu]|Mm04R>>>L6/I=׌3WWWFILL4\i/`6pr ?nswt%2o7":aZV1ʕ+;w.wqݻwEӇӧ믿̙3deea>C}QFqMoԔM2k,K"=,X{^t_~׭[A*zgŊ 0'OW_>{qqqW^ |mڴ46Y1yrrr0c f̘Av.GAc~]1OW1b?q%F?#7oBCCiժl޼W\*`rUٳg@@U*iϞ=u3h_~u={ >>p%#5]DA @cܕcѢE2|zIǎ:u*|MRZӻep|T=zP48Z qqFW$Rg]&h€2DfݺuL6PZnM.]?~<~)%%%q|$%%֭[׿c=FXX۷7PDDDDDDDDDD.iӦ|ᇼ,Xre˖O3x`>N8Aii)N"&& &pر+++2s=#>lm^~e5kwf3dggxb^z%^x ;}tΝ[# /999<۷o})m۶eѢECU>绚r5Tx'?)))a߾}Wt3_uz:s Ǐ_|r5UjtG&M*ݷשSNUzZhQ w%xꩧ^ 33?{&M0sLvӧO'o^?R)))!5]D.iT&M?w?Yt)lٲ￟ݻw3i$ڶmKhh(sa֭]4&$$Šй3̝ tǒs4k?ÆAx8]Hta?}"Rk.KyFMNhӦ C '))nl޼ӧO̷~K/Ą ڵ+j""""""""""Yp!3f`֬Yf@A`` <,]={> ̝;N:YשS'Klmm ёn bcc XlڴA1ydgՕ_f >>>|<|ے? X [gѹ¹_x{{[䮻 4iK.sΌ1}<<<紪JydccSi<ܹsIHHcǎxb n͛^WRPP?Of͸[.xT ݻYjF$51] 8yY+0l08@xúᗬZ+;@CtvT'x}닽=Glܸ??jպ`:t@QXX֎ͫ4Yxw2d?YYYt___8p>&MbѢE?yyy.)=z 77zmr=Ζ-[hٲs;%\."rQL R)Swo'..L-[F=裏 ÃI&xbRSS>iȚ4{$xix5O>zu˗0f \itE"uMyyyy56Ap󆨈HHH`ǎر۷k.Ξ=D^ Tgi4.]ʽKhh(};v4Zecc-F"RUV1e\\\駟ҥ%I.]Jdd$6%bQqM6֭[ӺukڴiS[EZ}u]H[䓖YNfb6YnNxx8:.ʟ+GARYy9|8&0n| Ҡk 0kDD@X:mtuuyjr.Zm0V^RD.(++#99Rh`ǎ[;w&88H YDDDDDDDDDD+88m۶`͛ٳgs=`gwiDddd0|,X@駟5jeyk֬`]NN5XpRպ#GT:"O.<\ !3ES&^3g{ &N͚5cԨQֿ=RRR0͘fz)d2СCi֬8i`Zx&K9s@k{޿Mٷo:t`L2ʤڳg .7NNN<3<8::]TҥKrHeu^}:={44z+WpB֮]K׮]>}:{fgg@D*ٳg< tAM6\. kt%"u_yY~F]m]С#G$,,0\\\jxi`l66N<})S,] }4>U !.7.%%%ٳgǎ={-ZлwoM7D>}ڵ+F-"""""""""Ҩ{gw Сyl޼˗l2RSS3f ӧOgĈh@TW34 ͽhuYYY:ugΜ`͛7lu...4Pw7FW"R?Z-0hPxf3lڴrBBB <U E X "" KD{o:sN pvv&88Rp[n 1k׮eҥXLĉ,9ϹoGĉFN.QQC,RЙ3g* ϣM:Tɠg@#>JDRK'6!$V&''Xf3fǏBXX& Ʉg<4`GOW_A߾ЯU/:ƍQ/ԹA*v<5ȥ$''yflb8Ofͬ*ݺuSUDDDDDDDDD)))_~a`7ȑ#1b2E,bcc!::R`ĉ] f1οMVVV_/''jZBB`?JDꗢ"?`Zٳr޽`u(,,$((#Gb28p -O> &Uk= tiD ᡇ ID*dggyfkx`dddдi ݻwWp@DDDDDDDDD)))aڵDEECbb" :pFAݍ.SGLL A [oU!ٱ`V8p#Gx174Y享}Ѱ:">}}988T Z飛;99prڶ_ӍD~*(p8r~ŰSRR0ͬ^_~|}}1LL& !I=PR}dyPRb <4NwCXoo[DjE7 ÆoPHp16md<ϙ3gpqq۷/...F+""""""""""uHyy9wfݺulܸM6AAAߟ~ѫW/w j!!!x6oL\\Gޞoʐ!Ch۶Jul іI˻hX&M,R6''pt28u 3.s D0A0T>̡C*-ĉb 6!@IIe;dffV|NNN T;vWWWu0|)DF]Hcx6@SRRB\\f̎;gpAPP5Jo0i]w ͛CL kgtE""a0ْ6kVXXH||<6lիW@׮]i?EDDDDDDDDD䚤qF [n%??zAϞ=ի={wޚFjUyy9bǎ$$$sN8|0^^^ۗпnFukJK_a&HH ;ΞXyeE>lY3̭Хw3~ J&\Jaa!)))paرcN j]0*tQi]~~jժUBZliQ7 ?F]HiXN BB,!C;~2bcDjE'-,[f@M"_FFqqqűamFaa!ODDDDDDDDDDjEii) !!۷[t8qt ???5T[aa!III{grssߟ իztgزv HODYXh T-U+h(/!>Zo`nBU>ĕ fU_FFFpaǏSRR@˖-+ p͵Hsj'T|T*nnnWZWmۖVZtuЉ BCFKOA,/3]ʈ'&&իWGyy9!!!9pBBB-F,o5k`8xu誮40 #r^]HmH1XڀD꟤$X~=7nd߾}ȠA ex{{]4rر;ww^طoiii899g]|}}ԩ:ucǎ|rrRRRHII߿$9BYYvvvG  88uaFض 8yM2bYYm2,zyYAnmwre9rҙťr`kڶCP@8+..ѣ :u [[[ڷoѰG)uӧ/AFF9s>* * &4wC`c@Ո4 ǏСP/X·uXNNfbccIIIŅ0L&xyy]l'y˖lK1KDjEO> $Rm66nȆ HOOٙ~YEF+""""""""""R-$%%~@$,SN퍏۷WWWDDII iii;vGra9b]۷mۖ]Z;YTt٣kKQl`r.HITʂ}U{vlY;I!@ 0!v/4tP( M)JIFZ6 I<BeyxCےeY-ǝGHl'ul\׹s4(R'ſ*I }  47@K\00ojj 66#`60tvvC8f=#<<|T!55uԱ9s渏ψz{PŒMcǀe˨GU0> zڵ v .NNCII ^wA]fX+P'LcOS Jf9Պ={`׮]سg>S 33_|1JJJpEFXXe1c1c1&dBss3ǎs3FFFB"33YYYӴ4|TryсVQJtC"|DϖB@8xڀ. bb($ QE%Pa"@t_*;I]䁁Nbfft:27Lfdd AFFT*Mg&iTA~\Fq &^pBkNn.‰11ٌZz=۶ȿ1͆={@ףF\\.RwHa@Z6o.uo!!JlYѧ 8Gd&x(A4Zػw/>ܹ| FFF``ҥXlrrr*c1c1c16-f F0E@pX%''ϋ]x!..jjqqqTO>XVyoiiiI"##ZU&OHU( `6N @TP3..}= JNNh( 3` }}}cǎ 7lGvV.|GG; `rr:y"P16V=x]`jllDee%QSSٌ"t:bժU9 <>aaaCxx8H ,, PTHLLtGHHjY\oZ14440CCCZqwobD?l6;,1GDD !!#|}^ 9sp@ဃHG5᠀[ ##XZQ.gEEK_\Nyh@lw&"͕Rh /oF0b_=?Wr!\&*qqqHL#!f3΅kV3kF r7l澮F U`rF :;;a2`2:;;ݗ{w?3pJ~#glٿ+Va۷zUUUt:^ ..@Cwz=v-u-8 G5v`4mpJ'LD&}dIc1c1c16"{ ޷Zuaxx]o100.w:X,v8:&fyԊ_HHH0j =DGG;0$%%!..ν0+1L!iFi*3~ZwxRQp ՀFCs\@䉏 ) P_ZzQQ((2PTDfxB֝H?S'Vz Agq|{ @'[ljF}>n-X0 `_nn߰"c8DX;`N LHinFw %%@\16 >(+.:뾘L&TUUUUU0Ljtt(++Cɼ7b3OUq#^ غRG&^ c3n޽{}vܹ~)=\r RRR*c1c1c1 tvRcǨcغpAcCB<;$&@v6>q;@s tj⤀@a!mb?+ 44PǶmΝr-\g_f7v|OƾvJ Z[[!dp"''AGGGࠣGWG23TZ8jh4~ö1O5 8Jz۷. w˱f,YSjBCL~}uwxL˅ UUUž={000,[ ^z)c1c1c1Ʀ> L@[u 0(IuwS8``-T "" dfR83hʢUpc]jk@S]PX@AM0 G[By9tYClrp 0^~[T=@Bԏoıc<}}"<<yyy(,,EEE)HجRJdrowXwWA~>55aaaJ(/n/o 7^BP_O)dp8ǫVIႜ=Fu5 ** >?88]HH;T ȀFAZZ_ײO~B?ңvo>TWWGXXJJJP^^r,Z;4.M7RǬ`7+&Ao;;C>۶m֭[sN K.un:̟?_!2c1c1cV<p 0xo/. hi__TT.* BQB !!RFCa+$0Wom: {,Nd$ b@N* زV`.[+=B&a˗sx 6m^}~6o9}޽RRࢋ)X 444`0@ EEE(((pj4R))7*=E{{;:;;|`4B<aF BBպ6! =Gh5Ʉ*TTT`hooVNNㅉg lDG<@aaJlr{/_ˬ{e3a> ܾX2bć~|WHII5kn:t:jc1c1clxX z{)E[w7]OdEHBBh%X*܏HbBρǏDK(2gdhi 44H㏉8n>mx:˃k`aePf DGF#Hw p0n`N Pp!&()`Ai)hϱ3nDZcPWWz]v4F(wBCi7ɴ;FL&w< uw3y@jHOOGw}aO_MG3#\.8pzz/^ N5k`ɒ%<5tuQg}O:ңp}zңal,c @qFj%$AUUlق tww㬳ºu~z\pDc1c1c34Dy @\f2y,jg\+ aaT@[l,Pf. IDAT0@njM 34D@m-ϐ@a!mEE@f۶YX:,^E3 I_}r ?z^>2<<:0<]dƚhaJѹB +WJႂI}X,pN'ZZZF @^^ިAQQŝ+7PXZnw@t6Nttt;"DEE!-- h4ʂFAff&Ґ!p=U.*8~ +͌cXHNNʕ+zjt:dee)=L6:g?~mIkxqz\ pJ1 SKϿ5cbh4ƛoݻw#,, +WvZ*=Dc1c1cMWCC;zzqڷXh*w:}FFR@m ) ¨RYRѱ@V0: i4t^SU`tA {8ux(.B> 3>u+"dс}f&LP_V`&෿=V]|.ص `ʕfNpA]]PWWNJBVV PTT44Qt`ijc(=YG4hooG[[Akk+:;;a0MHHҐ wA/:DGG+)q4y'xVfWÇQ]];wfa…t(--Ųe86]CE |;I+'GQ'+?Wz42N;8&,7Ŀoj\~׿Rqc1c1c16q.(Xh3nzzNT)B"N_z{) %u.zRSc"8;Ӆ&=--RV(qab-[Ak+֯mJ 0=OA?6nt>P | I႒Ajz px3dPPPL2_|A)=G?Z[[h4}*zyrGv;v^J:t111X|9t:0|\.W.v?) jGvg qMO ~-XM#GFW\ 6`ŊWz1c1c1 yqeǏS@aD<9j @t} Qqi)3g&%Q@;ȏxfetg:mmTT,.8ezmmy`V**/ׯ9G‚ fZ1{lRpœs s'55uY4/Nc=7Faa-77N&Pr{;ub3А;\ :;Bgg'iQQQcDFPR۶*=c0}v"//:Xr%3h=8G3nabl'L?py_aaf /+6l@II d1c1c1ex fZU_^/V^Df3*I?w @Bm_jWGF~E@t-k@by@hF_LO= Jih((,:DE)X}9uغS ZEu뀌 GȦ fF曁JছM(7F)XPSC$*jႹs'girh4j  CNN߰Al0w~l\qu:n$lDggZ[[/ddd 33ʂVEvv6Z-RSS|dAx;v瞫􈂖 z|gPT袋zjaᅸCO> k+TzTlz'L00@o z Mwī7|GA^^㪫…^ c1c1cj~rTZ) E(?~V)4`JSqJEEXߟ( J+'&wG *h@lGrm)$ ȷ^ND+@^]f/x}wiՖ _O۪U@LңdaKws/?u?!)Xs'`Uj:CwwϐA]]F#DVEaa!PPP>-,,"go/@BlVwF#ڊv #ttdff<8s ,XfnTWWCף F(//GYYV^ V0g:^.xQ @~ Zr׿Иte4ꫯ8B\}ذa/^c1c1c%_f~s5@@o/IlxЊ11T/՞@\g(1^O}w(_Hȩx!Sr6`( PPe:p(utP灭[j9 ֯/ي:`vᇁ^La㏥pGQp)\lfaݎz[cc#NTFu2(**BQQfߢ=c-FF6vt(@R1x,|=h0-)q Q*P[+r; ЀVC`3 s'm{Jၲ2agM{reA.hnX˗S`*3Q[[QbDFFAAAfo#amhhhii3x`6ݷ GZZ#;Mf3=Yswhlltw-xa6QTTZj*q7p2R DED D0iǼ/>nп/'_櫃S@]L:t=((@qgh`eL&>u+PUEEr`b)Ř/&^mpMʿ8zjYjj(K] V23#:;;QWW6hhh@]]Ps^^;d M:= #al6 <m㑝,dffzAff&|T0+=]@j#b2طoz=g!,, %%%- .J~k> |3# && +z(cbd6/⩧W_}38wp5 ''G1c1c1# _LQ(d PQnE~!$D*_/6:VE?< EadD]'4 EѿZM׋bq_wq_\&'ibKJOHj)\ .b3L) : m&ɦlh]!;&~op0>@F#"N'Ե`>zIK/Sn.AWW ,, p"??Jqޗ`l ?~mmmhnnFkk+Z[[ ш}w ++ ٣Χ(Fz.ʍd2 F{{;Z-ʰzj#!SظxU BG5>0eM0Lp-CIn>cs,Z7x#+=<c1c1XX{{grlTd?0 mR!݇oY:/].0餂sgh.F  GFR(x\FEaa x_At;QJE~:}}To. q3`6KIL8IJ"q(pq-ko.b~rs@qF8&PQAၪ*k:],YB.}}SOQMt! u߲e,(-yQelYQAT* b&+pz9ڵTfCSSGwǏw_?22@Bu9uuI,?9>XVl߾UUUB]]j5VXիWC!//Oawn~c*Wx8P10A{;N)e0.6>spwO#blv@KK Z[[ݝ Z[[)GFF999HKKCkϦ@UWWZ}vXV̛7eeeXf /_>yAjxxs{nu.x GxLl28KxꩧcqB,_Z1c1X0Pcb;w!DT\:U Sa"6Nvw>e*<oywV٤}9/_^nwsCs(؟¤E= /DGKaa4 b|Vi4tJtQ.$&J+=1"Y*Uk!_YT*_WEA_?M!3,P[K RP*!<22rGF>$PUbx `^<>J% <""Cd$]?$N],Y"`,8L0{}%pErsѩ>P\';h.()ӌ)pرcCmm-pQAVs碸E(}q|3x4p8`4a0>mnnFSSZZZ#^Ki4BΉAnn.rrr0^ajooGee%QUUɄ Cӡ 3-9Pw矧̛6Q,pN"Lp0>>{N`{<3n ?Oc1c&/VE m6iLy!]|хs[q>4 |P9K;*7_+UPkwՐ}od_a*×0w*b>Sdea)LeR)ͷ##]"x<=~<( թo爘b}}F}9}"s(0wң$=}ңa$۰x);Oby{דN5t#¿(+}¿طXX+Jbc]wgWt ;: xw((v` lF(jT[^ίafR]ɧ[K*=g4J] jjh?1V WzЀBԽj#"] DgJ,w@lCAA"@0ƔU]M#3݁---hnnFww F^^;l Ab]Lqf;v@UUz=UVAA!++Ka z=pѣ 7P}tJң<$pm+=N2Lo Mᅬ'x/1-[nƼjG@t9Z[[8Yhh(Z;l3A/Çz;wfft:,[͌^x^z}]Op6o1OM7)=|N2LgS6NQ+C=>˗/]w݅kB2c%8E(G*ţrۉE@SMy(+<}3t"Eq(s|z.(Qx/[+hb^ȋ&Z^l6b6VDB;j5 ?1QڏFmz.`0H A (. @n5`rQa֭OW.:df*=Ja&ʩ ^cx2g+g! /0XA&Iȃh?-,44999Ay桨yyy9cSׁoρ>A"l n҂.ܝ D //yyyGzz:7nǞ={] <(,[ݵk_ÜV'HNy߈Jڴ / .'&s)A_Lј/ո.ýދ%K(=,c1(bgQi6K[tlǻ԰Xщ+1MQ)=E!(E4)I*0_/VUc3Z+-:rY c1Y̫bW_ǻ_zbU nb|o/yy(@tLJ}wLw0@˼'$H$1< 45 44^?]23M% Ml.F#E)H µ&`y/i5oWz4gwK/8/u-XF`[ $t<Guwvvb:E;}/|{&O6| 22|`@MM z=ݍ,w`ʕ][[u)xଳJ xz}?JS_Lј|{{5kWzX1c̗^**ctA*|O¿wxB}Q䙘HTpIV4)iޝc,1l4gN?[|(j41ucL0MJyGlEj5mE@c3 HZ)(PWGLJzɞ]Dxj|)`AwuXX?a3 / p-~vңQVW۷S>_L }6?b__~l9r}^n|{lEEEAhhh،S7+hDcc#;FC'>;4CZZ"!9N|駨BEE>c%Kf^/9W8tN@֬g~sW+;,N!LPWG >Xx:{JKKCaҥJ1c,xTjyQOSJ6VmEqXUq,IIJ t>>^Z*6cN{I󳘫żnyeb+%'2?,.vc'kh0|ƺ1l6w`dP8xtdecJ}|9W(+:p0*f_oTz4DZcRׂ; HM4"\(Yټ=--Jѣn@DD 1o<ܹs#`lڼ.駁Wz48NށN7l𣙹zzzczz $'' :eeeTzʫ~@Ɏ?)? |ʍSe|1nmmmxbشit:b1SXW(Kb_TTK[\/EiL ]6n16JfZiN_" :ҿ讒HmL 8xiZcSn}V7V`@cBogWyxhT@V|uW106XThmm@N. X>Kb,q'{32|.ص>#+(PUTHL_oM\WWG@ = K0w\Op3~xkUz4'exx#` yX ̙3GG3s:tصkv;.\Nr j7nlllr <,[Xc/LmpF!<$<«2clZQH兤TH*TuO8(Jb?)ɳxTjii~}X1ψ97.fq>>D)_@XX}c @xOVӪII9t,0cTLRWZ.]]t0 7wX O]{ص-YBu뀳Vz x~xAmG39JO>"Β˖giC8p^`FGfpq3mJJʨ؏l?N+_uң4CCChii444Cmmm`ARRfzݻQQQÇ#&&˗/ǚ5kPZZ+=>Jϯ<\w];\ 7uC,/gv; ӲLcz8vnlܸJ1cX_SY,RA8& O{{Y$/_+}yR߇1Ʀ#^!io/m/q'KHB]xb" ܿ cep8~cf ]?XJe4B4 t#[92d/I&AV8,`N` ? prM饗|OөkRH-$tӉ&n|ss{%lC"pPPPp~oĂmO=sS?)288&|kkks_WV{ QXXޕ zzl6#//ݵ`ʕPϦEp:;)$3g=tol X1:A&) 嫯uttnk/7oFaab1L% Dx;%@TOEaZ-/SiK1Zb>\ "B*bǽ/cl&r8`@Wvv>EswuQ7oqq]/cSM_az*(/ xw匝6 @e%8 *Yf ll4ca3]wO> Ņ ^ ^|.8\lokndr!!ka*D;D}};` ⰰ0Avv6B= /HǫVI y 7O?n ;v J w@2(,,D, ;N|Ǩ^g}J.WFYY/^<;C{y>N'u۲>().줝FV7 줼⋸?OXvCb1ƘVUEi; Xnccc]f6.fh1yRgyyX@whxX*z89HI83VNI<&cLiH်:ǎw23}Za(DpE+[G%cʺ>7K`?+=1 ˩g* '#ƢRv;-P3K8r;tt ۼy󐖖#`lN'o- tDk'XVףaiSS y 77a$pݍjzTUUh4"55M*=̩s'pu<2~732Ng;7^dF'cڊo曱i&A0cl  )oRahb"mTDX]cb}o1{ 9c,8&nYj5H 8cӕU@eN3(.2c`,uwմ_U>ˣSAfLңdl8t8̱S\ =Q,G\`v |j`ʕ-xUGʣRSWW;` Ёf@y~tW_M/r `4CCTp](a fRa9x z=z=ۇA,Zݵ`s9wF;輿F/w8 ݻ){M&4pYwE8[oGJJ {9ۉ0cLY== x^REFz x_&ccc3Y?}ЩV}ϒFc }I+`@G?>>65ut8@~\~TLcP8@tFsLϮ.A2cUtO֭޽t_L֬,8X0[B>'/?.63ʹbjL ؚ*N'Ե`^fנ"Xr%'d=OTP(}J||`$ZZZG 5;h ̝;QQQ ?60߮]4O=@5 }NYWW2hhh`(MMMu O322 Q͆;w8rj*BӡhR~nH/ u8Թ8\>z5uo6q&o}(ܾ}|l6nv<я~'xwQ?4NBIA)*go^ceRD[F SH 't|7iSqQt`yurPXsRqryNJqA@7,[oI !{VmL@II N8a %%HIIAZZ`0c),HHH@BBڵkXF7jtx:#þΞOl@aaQAAA 88mڴAj<'uVl۶ vBVV, 4zw7p-[yxMz/*<Kwpi}Fhhz~=DD乢"m+LQQWgODT]d_`zDmT>:@\и0ߤ {&H( "QZ"oQz}]yIڏW>T遳]nެE䙓'*t Eˁ̟w4ON{w?|w/woiܩ=.vRA|EAAS526  Sڵkgh߾=ڵk(teD ˭EF*yp37U ##R\`]dpq?`0мys#m 4yK+))uV|8tЧO˨]vU5Ν;qß˗jGO#G*L}Kz~s^(&;Tw{!O?w܁.]`Æ h޼!U\uo"u4BT~C]Ǒe ?sznrBB4hPID]n}EEׯo_`.X0,@DTU22P'Mgee@Zb ˋ*2sJR0~÷{+**>ؼ8zT9x`0DDѳR4PVVZ@p!Eڵ'o {nJ;?wNy9S^@(\aa@FY@t0INV~ZRy**.N~H1o)h+qq X4ob+"=(7$Ϛ<70s3g-[/Pzkfxo_|eRGyHF#,!m`믁]Ҕ vT巿G. IDATҥc\ظKm^}UqCQ97/.R 'ODJJesAZZD& ZhѢn ,,LUC)Oj4lqWmɓ8~ͨ'ǎÉ',7Fv,֏?{,l>|2jW_}t2jA^gqcLL Ҭƍ˟Ǐ+*o0kh|o/w+⪫bs=ذa^ujy"i6ePLfЋ]$m]m Fr3 rs+ޑ,O#./O}1,ԭ[^ ` b@9!U>Q~L?w8}8p9!fDZ*Ȝ>Hk)9Y),عؽ[ݨ0`УL&w9sv9W:|_˟G~1ٌ``=A֟ یb`=Aݺu}/W^y|j}R;wNWk2nf6"iӪ6>b8vj)4HKKCYY ZhaW`Ю];i磞⋘1c/^{aaav`Νؾ};oߎTDFFbݻ7f̘a7d`Μ99s&L?شw[M&yߔjիo"7G}AZ>DDR7}3VEEo.ptim -94*J!IM:Q :K JA/WIIy>,:ϟ;g[0o Q}1 m  _A`P~DoHM\`k V6a6g{V*XVXmS>(P&MB֜۶ 8QՏ:(=#tRHK"}  ڥJgwݥwTT>J0x0zGC)7G.R A}w+#Q(+S·;;tȶjgG5QYf6Q Zje2ƍ><Ν&^SF˳`Pa8#kGFFXccc'y,^& xGغu+v؁s!))ɒ*2ի֯_z?FihTޭjj7ib׿u#G-k, <iiiqWUPZ 4=\Lʅ._ c{BbDF Zaa:MFD'*7TN'F#p{yw}֏gm?|X3K^ 4hm "KUKK Μey#"l 7-0͋DD%%Jaس*a{:qU֣ Ǐ+yP-[*m؏2"Oۺ=H@2W]|Dؚ5J@YrKfrEہaÔkޫw4EϞʈdnG Ty5bW5Fs#"{*7XjpY@PPڴic).0hm۶ s=xF'G*ego @oZMy 'G[vDNN 4ڵ q|p] ,Y"pmٳq^Xv9 XOgxz⸣zr*?o_(`)53~Ԁ`Bs^<%Mϝ22 ;g{CZH6u_$'"I°矷/ scG%_ mQmu~;Hǎ+7H_uB`H`&#'ŋ;u;RE%kw0mrނJGvz}!eS\`JJ 5**fGsDDDk4ѱcG,[ z#QS^Z)p:uTk Q|cHSpȏ111'*-U .\joiձ}jnt_T۹-Z+-Z *2kpCIp0>ZZp\p8}4BBB,ENBYYF#bcc-#L&KRL8 ,@ӦMTWSKJg:|Ο|HF#$++ gΜAFF򐛛Tu,[ < DII '|}޽K.UULPѢEBG,D!2- iio, 2K5kPZV&W|r??JD0aرvB֭äI :""(ѿ XZ~ruc0Rg4hu?I4~""r`Ax8p@WM&ۑ5r8r_ĺ͛}DDeKe(&MlG ø^DDLoR&3=Tx , J3p+ 8q"zPƤIn:,j;@Xȿ]'Nt?aZ<ғk-R۷(Bw+Y?_G c #G ??."00s?7VWӘ`-:Nx~n3yd000ѣ{n_Xtq pkeMuk)YLU_|>mۦ/j8ȉ#G6y2Z&%+Wjd^y\OgH'7"bڛRKKe$W/DDFe/}^O flUK}`ڻKa9hTFj.?_y\ )rsaG+@N^Np p /A#*T:q Q:WH`PM寿FޑP5)88_;ׯwb'e0n8,T"hi:uG-Z@-0p@kوPLsayHt7Ftt4BBBP^="$$ CHH"""ԭ[uEƑQuSZǏ7]*V'!>1Cyxҫg m6̚5 ,A\?vHJ³'v)?PHn6 ӫ.V""̨QX[I i ػW 0PqݐO/& ""`f_f_{LIA"JAFQ? QQQzGBDSj^}3XDhȕ;rg":QU68v{9S=Z(;Ʉbo߾8qbccg!(( "ՑkeMV|:|I{} 8q&L 裏pY3kOy.Me"A!ۚpLGKDD!%:tldgII /7ݤx(7:]7U)ωj0gO=oJ/"w(yMXPM<|9pUo!!zG@HNN~wL&ԩSFViDtXF M7݄^xIIIƶmн{wDGGB*1:BBwz|~*.`ٲezCDDCysJ/{;vG*Xl"duS<ܜt䈒͹y2ޘJD7ωj"@ݠwo`,e$~;4""""gwݥ>{6a `0P#..;vD\\ڴi8!** ֭äIO>U3Vo4QVVhp ׯ:X k 0:xW~ٳgk׮zCDD HIMU{JD0|L6 [;"""""""""""""""`w`F 3Sh-&8w^WΝ;qq : 4@@@Ñ[nœmx_%%%M65:3_3_WFmUqm p},{7$ag }h۶-BBBvaԩHNNNq\s-sme0׺?ƵQjǍ23$#̹̹kKͱUVV#:||Q۶mi4m< Xرc_)$2sޑ֭[`0˗ܵk׊~!iѢ4iD.]*'N"ΖNyiРe={u]Q|\轴4 ͛KnnBkÚкJJJM6)͛7{o߾rY),,l)..<9{WU @~g֬Y#7ް{ѣҡCUp7¼>}8_~^]guzˬz29uꔌ3FԩS5-&$VGM_ DD&N('Nr+|zzzQS믿.[oGJqq;wNV^-ZCSb׾&*\1333{իWK``Gv-ْ-ҫW/ >f_r?^aee7\]{ l^۷0cnZ-rx~WYQQdeey?0_0_x/_tE0[yq`}W`yU#KV\˗/Kͥ^z;nȐ!^γ%"2o< O?Yfɳ>9n}d2n8 y{yh+N̿/ ͳ{oĉ@Fme٪_W G{?%%EuVOj>p4OZZ(M˪Id9w1kWe}P9ԩSeb?^`ty}ȑ#ga4W ?i֬Jǎev4y|g@nvꪫ$99t=zW|eڵdddӧ`0H=\NjZVV&M4(gϞ7.vݻw[;{,?DGGKhhL<٦Gb2K.*ҩS'yBX˺|J&MljII˕+W[J޽%44TBBBW^411Q+aaa(Z]p0: IDATAڷooK6m[}}xd iӦ.DFF֢"ܹe]7vxoҼys ^{(_ǏhzI׮]n]YxO0;~n^VMo>?Zpϟ?/\seyc(=mݴiSdҬY3  rfx1^;z˪y|X&MȺu뤨.6O6]ozh Hnl+$$D֭['iٲ|vq8osk혯?7/&*ݵ kݺu1L'[l笽h.YS{,5ly衇Yfb2$::ZZh!K.IN4lP6l `|{eСԩJVdܹҥK 0y7m߹}%VoJHJJ],uu8p>Vs=Y̕ɵv}V;Zb-_rc111"?nZUW]e/\Lp [`99Wɱnvߨ_(csݶN]\ն96?:;wv[/S O0_8~nv ٳgMLgײԞ{i/ӝWLPV&2eHhȮ]# .r6v4h`i믿JQQ$''W_-l.:Ѳ]1b9s8k9x+>dꫯ<KE]""w˗[^{ꩧߖUV y'-X¦Peٲe@ya=<߯DRRR{@>Ms@6mdyO>{>ILL(#FLȐ>}hI|J-1?퉜*>w)++'OСC%**J;iM&Np\|A"))_|!]tQ"y1^ڝD~giҤewms̓m8|Hv~b_m۶vgֆv*Lw&*;;[l"$66 ͛7Ggպ2G*!$77.\K['Zv}VZZ-knj]ve,͙3Gf̘!Z^.&iHWL}˜˜|:V꺩}v:`ӆO{{v>-T+5K5TB+ ױeĆS/`w_1HImW嫏%Kx}Z;@$j;w2d:Z+ .6 S]VRR"`0X^^U̴gxx􈔟/$44NSOjZmk]cU^Gm7.+WH\\ʑ#Gd2n8)++Ӽ^/&[ᇽL}s.s͹<9nvߨ_(asͼԴԜymM5RmnQӾTOE/bp/++KBBBaÆF)_|tZ*N,&).3F$2R*]uPPO^E{c^z@Tϣ&yYٴwԩS#{ٚ'l6j(ٻw7kTc͚5KȚ5kO>zf^0fW~^΂ ̟?_ϟﶧs=džz㍓=wrED=*nkZZnݺIIImV~1ңG)))(te'Nȑ#-ҴiSٳgm3o'"Z0ǻW^sbeظYjq\spy*G.quzv߮0ת\smDۥ6Ƨ~Z[|PL"V7lߺǜ˜yes~ӺoM/1u[]ԜUf܍iRtOE/`PO?2i$;ﴛFk[œ߂qUL` >Z`Pয়d 4Kd]5 G[nѴ܋/6lhzm޷v9DGG;\ի;;vԩSW^yES\ۼ{np -܂+W`޽cQkO>[la,uVlڴ cƌ7,, P\\l+&Mx)S+WwrH@~~嵜@z,'//؜d_RA۶m'Ot;mmѢ??Ƶ^;w8x >M6ɓpiw}^99xxx}૜./;5a|?ƍӴ9zzz}0h M2ky͓}:.]2noM_\aw&uϞ=C"ulj}Z[̵12VeLv1++ [lAnݰdl߾7AkU>PXwbu99WkIQ;P09W玻v>OٱR1_8|y6li&_+oNIu+2`HF"յo^~i/WkdVVHXXb;t`?TTҼ@Əoȑ#p ҥK[n{̙3 gϞvHdEDҥK{<hhu% &MH||%)ҹsg)))]O8~SLg+&Ov#FZ^KLLrM7Y^ӧD4 Bݱ wj>pvLggӪVOH֭/W_}UH۶me6[Wx3UƋ0333k|~./WIOO ]t;/tǞ y)"O? ݻZjy?}ct6Ϣϙ]0e{V&h?š5?\>6ߺ:Ǔτ ot[ta͕ 8ѺO=m{oGkkk}kռvXRR"Ç͛7ˉ'$""B6m*#6Զ9S k=Pu^5mjd}BNH>""U!\1O?IVaÆtRIOOxl߾]Ǝ+% .Hii믒 uԑ+^BCCqƲe)((K.ɪUqvӋ;V}_y SNyk={:}6nGrrZsj6h  cǎ{o̘1@^x  #F )..I.^h[$''kvnݺUȾ}즫8mbbF%33S222wb2d޽{=URSS%''G^|EenZȆ wrn_qΓ/"C,_@Բ""֭kӖxvm3}Ν%99Y -G6֔Y3xxxu@&wy~@>_f|bs=s=s}}L߷o_ٶmdggK~~޽[t"AAA6? hoWQ߳gL&iժڵK @~'Wk;}6Ѽys }˖opx+ Z2u-snE̹Us+yr}v:QϛⶖȥKSNԴԜ6wǦGOs6;x~*|||ao2j(kmh-؝SL  $%rV3m48pחic*;;[-Z$}(1,m۶#GŋeÆ c9bbb,h-[J@@J~n6eܸqҨQ#  ȨQ6رCbcclRV\iy/99&9t萈CUmټy%͛˼y,˘;w4kG_KF,5jHlXE+~z-z- 7ov8>+-[$OX{ǥG}%cƌYu|f,TnF<ͳ_/-[H=$88XBCCw޲m6YtI@@hB~i;v+WG}$58pYF""",뎌;ھa>n*[lZC6߰a6֌  O= 0DD*7(2j(9y4QM̮ɬs\\\\ۼysY`궛r-?m<5xw:c9\\kj-M5 [qqq"]\ն=618ʍrkjE3j*\]rwH}*&0ƍ 3ObʕxGq%F-wݺu4ir FV:`'%33M4O?:hҤIkz;*Y3DT95i}v;s#6k)P&T~M]U)$#`@`0`.ꫯƕ+We롬LG㉨:o=*$뉈k"Rk<`z||< ''GCD%@Vtfc%"ӁfF`%ڊMÿ 4ճoFnt邆 "11ѫ%""""r'NDQQvڅX`!\ݺuWF^^q!L0O4|pL2E߀j+a[7#!"""""vo1 v0jim20j(^[fU|M-[ĪUt9jDoCDD5yb͘0a̙HcԨQW6obj /3gb֬YzT0j))@zGRm1QmGǦ߄j4 XƏV+;v,FK.~^YfUW9wDDDTS?^s=Q|MDǺu*̙3zP1j{;IŜKD+ɪfd c)/{e Bdd$6n>0z%iR3  ٳJ-2((SNŋ!\yQf&m QTs X?:(-OTl߾KQ\ 4l\ޑUK5 `ہBմiS}xy.?xeG@!"""""jf1 ldg{ؿ? /HDDDDDDDDDDDDDDDDY\\rt#!"""""jn1 0hpGi޼9f̘^T;wGڪе+w/pл7o-fƌp,YHSH_LqqW_@^@REa…5kRSS}$y3v-k@pUk4 lѼo7x#LRHDDDDn ~ IDATDDDDDDDDDDDD< L }70dU{ÁO?ƎFVҼK7o$"""""""""""""""";EE-Zw4DDDDDD5BT@eK{tV={Æ b 5 ݺu},Q-'o@r2p wDDDDDDD5B`,y:(-U=#0{lL8> {q`Fڵ;"""""L`mTiS` #X^uSO=$=Cz4zƍDLDD^9HKKCV7b>_ѣ}"ڀs"ډx}j/V ;*-lS`iӀb1˗ѣ6mU51d <k׮T#)++O?Dܹ{˗ѰaC ѱcG %""""""""""""=ޭ@ T4 c۶mJKKSZZ֬YLEEEiS=\Γ<ӧ%fo|tR6Ғ%R՞~ 6LGQrrvfiصkҜPXX lիYfʒ22׮]M1͛K:sΑu3ZmoL_FxC>SrssuW믿… u7@@h222iiiڷoBCCտg\@@cRRbd!~h0χC94`6hgu]wI#FH'KӦIv{k7nF)Shʔ)Wq_~q6^Z{QHHc*>>^{V@@K@meeI I{1+FEIgi\;t0}@&W^GڰAz-S*=% @矯[7o… ـ~M恌 O>[AAA.5~򆁼s]v-ܢxkץxJJj 0ܯѬкpi7X|V&iiҭKΝ+]}u[nQaa{9V) p8?*55UZfԲeKbcc}]*@ê!{u¤ͥSN1^+ li mgamJUWIsP=zt%hܹСC TfڵKiii<( 4H JHHP.]d|]*?vuoݯh48qLP>L3F*(zJ`utw*##CSL@{*--M)))JKK޽{:WٳX󥬬_ܯey{zq} ͳL rrɓsi|鬳Ѹqo>M0A_ٰDA3-wlKgKլ8P\\^3fPpp~a;V T4: ДhÆ JIIQJJ6lؠbuYJHHu)TP\~kl`n2mGz~@jpk0m5>,{t4qJ4dffj֬Y;wڶmӧknoTL\y?W^^ڷoD%$$(11Qmڴu2fߜo}vs|׶=7ўۃ@3 Xǥ֭'٣iӦ_WncK/mTLn׮]JMMUJJҔ;bcc}]&WqgW~+ol3 yyv+Pq[x Rhh= N({H=$Ի3R>՞m6M4IK.ՠA㏫5E3(%%@giJLLTbbu/TggF [mG>򤒒*ѮaaF?,̽A\5Sh&8!m$M Y#]sbA՞~z=CZvFiӦ{ P0 pի۶mS``zlݻ|]*~ʿߜo1ϗ^!!F p `N7[m k4LpB[Dzi^ۥ֭=-99Y?[ 6L&MR~`4v4dSXX/¹Mp8ԭ[7gR8V^TXhsrfؿ~^P ͆U@ 7H㻹?2h0 5E3 XzeiLa鮻Z4á+V_|Aiɺp4F4DWVVoF)))JIIuQ*!!AWLLK4&G!,W?;۽ 7g6 sF*H񊎖53>+4kfÍ3j| X)q ҬY?0s4aԼyYFfʕ+uhҤI1bv{Ƅf~Gg5k6m(11@о}{_ 8HEE4"4%Ua~3߬kH=:e 1ǘC3I@3Gz cՂxEFV{M4sL-]T;wC=kF P8 p"_;=\_ R#o 2'=j}{QQתEEF?/^ݤvSQQsAA'<礧2/{ضmqj׮ƍE\4Nv4:4gݻ;Wի .BVɑʪw@0#o~P0>߃`ױ!!g頙ग-= O;?gyF$馛n=ܣ;s8YL5k(55U)))?_JLLT߾}Rcss#_\lYYƾCEEPچÍ{fƱv{MғOJsH6P0nԶm_֜9s?kС{uf5@8YLP\\ʹ TVV.]8 )N~1eg׼zbƄڅ*[!ɀfF'+KzL=S˵l2=JIIQNtnP(˺69n:C{ц tW;?ճgO=䓾*'á~AVҪUvZCJHHPbbԪU+_ 0'A#GCf#hCCQQF?<nl|@#o6XQOK۷K_.M [n?E)00Pcƌwܡ: ljە)z!͚5l޽恔j޼tE颋.p~A97W*-5BeeF ~Nq̑#ƻ9??s#7""~dkBu!ƾL蕗K˖IO>)}ԷT0jdW{ hܹڷo4f]q brM#'Pq5Ӓ{okp2RZZ`Ν ր={݋@:ome\?7׻z07'$??40W?,]#4.44)_~)=gK/%%X^2}'Z`/_Hx㍺Թs(m6uҥcbccs'"_ k׮ڶm p8w9>s謳r6SNu@6؟m,%9F0B99P9 x˛@7U' ÇW^ϗ22鮻#T\zG)88X_nwy^1n8[III4'g֤ITZZz>ͦty> _~QJJVZ:tH111JHHp6te~3Пkk7'6o@~dd!~W7fC7 4L? Si)9YjV;V6uk.qAz嗵co_$z꩕WVV&z͛7OaaauX:tp6Mz7|PիWkŊ]k>|XiiiլY3 0<н{w:7Cf( KFx_r͐7fp W?:GE<_1oN'8qL ~XW܌mVCׯ—^{~l%$$())IW]u1֭%I:Ӵxbud8}7|r6=S7n+CEJ1M U9z 7o$K袋ԯ_?K'}s"7'2#)o^b߼ 3o7fp W W7`?TQ{ܹW_I]H*%%I-[VK/۴Ɔ JNNnѣ!CO'NSO=IrR0k,?^6>^7o9v߿_\XO?ORS{ir}Ε֭[B:WWtttC> @cNί80HN7M^ { i1_rM75kFE+D3eZS 3+tҪU/;V.\׫UVk+==voUVNffZnl&S\\RSS}\$O>wܡ}5|l6-YD#GtnЪUTeffe˖JHHp6~x US+%W8b߼fy͚0'WoNٯ8 lF(_rkM B^RSc[nvu?.*dSOݻh"}*]@@[oK.gC.bLv]/nf_դH IAAA{t:WPfl֭g=M7FxT~3_T~Oުj*ү8bߜ_1o^S߼&@àgkno_曥i:׀P!IDAT܏7~ iI?ǫv9?^3gT```=>pB|*//W@@233벚B͜9SgϖPIIl6bbbta]pJLLE]~M7f_rоΗ\a|s6s5o3j FT~3_q*xM3o^i֬^zX@2V!Xֵ2n7.'8|V^r/k׮ZxbccAP\hBEEE1b.]뒚_ƍӡCl1EFF_U9E4 3)o=7|sdۏuWf8_r9]_rM7C 7fy7 Pwޑ&M8euZޭ/%%%iȑQ(jkʔ)ڱc~4)ӄ T^^.ͦսo>zX'3/;U {oL)3To=η9en7+oN0B!!~44m,Ua2 PQQQ4=6MK,P<=M7|3)ͤΗo=M7Y' k#En-[f斕*I-Ѿ۵KW&%)..N Qhh"##f͚)**J!!! ig1Cgu)MRff222tڵK۶mSFF ml6DCCׯk {f {fN췞kp7kT}3i~F {ίjҿhXusgiǎZԩxڴu.??_>0rrrMz嗕L >\˖-upr2༧md}O۬|ỎY0֐ί8U7UDfԝ~N=cŒD?d վSQ|z)6a$IҢET\\@W((0֯l[atmkzmG+f6 XՔ5`oN۷=m3CYfP6kmn+@#bIK颢sHD;MƌY4uFnJK\snݺ-/Ϙi[Y1_2&{V^nLl$`V4 $|O""6mܷY'S=m6 xf6 Ipi#*81S|3D/!r0u"~N[ʶMFfF8f314 86]:Lmmxf6 xfmc ݛ!yK|s29_Xh\O>_{Նu"~X1ߘzogLǗmj\n7&Wl$hth&Ǫ.toN//7R{Yay{3/&GDI@䚔o [{{/BVT$򤒒 [{T# /KՇ۷yz$ 58_P`|\}\|kԷS7_[&nm|##T}If@լ!zk@ߜr/!r#ƻ52Rjl Wl*5_T~k8egg륗^Ҳe˴uVeeenyj׮w H'I/s=:p$M6zuJOyw7n8˓:w{O:tP\\;l6 6L|A=sEIIIz뭷4vX nlj8 YYY k.IR˖-5tP^._Ccǎڸq}FjN_IWLL۷y=ڻwqӓC W6l27So,Ho/Uos֩MƯl*d|)9: ԂfӢEtuy}Ζ-[4bjԩKնm[iΝ4{leffJ+V?v̾}SNΝ;@dqq  {5lUVV;?TXX?..N|撒(77WW]u֮][m:uO?[K.n|Mp ?nv}? m۶{T{Rkhƍ;sN-[LC{Zϟ$%%I-ZTg5(o Kwzkq5l_d|T&[[˛ u2~eA&[Ml2@?18)egg/W~~l٢38ù/ @w;<:_Ak<4ydM4IgԩS%IӦMӨQjHPgꫯԫW/9ڲez9e˖ǜ/s֑#G'G}tL3+$I|1K.ՕW^=Kf^zI״iӜl$f W {a{k:}_ro=:)_rk@%P5H߶ }eS+/O;"58)͟?_ԩSB\+ٳgnӞ={vZY:gNNN֥^*Iz|rf T[7HҨQ'Ntn///צMԼysT.]^C2(K^$I~m_TokCŠ|}S f:]y=o_q2gN+A~YC`u ?8n4ऴl2Ie]V;v_tIy睧-[(44Tcƌŋu!jʔ):3((H>.2?^۷o{'?ө#R_{Mٓd%''ffiٲezkujӧZnZtx7ߨgϞr8zw_*..NtA@7o yzgyQK?bbb4g͟?_ׯW-4| 6ߧ:SzkP@}mkf3Λ Էk9P_1(m6D3NR۷o$V{lNk.,A͛7f)??_~fϞY^{EFFjСuR5|p;>}:vr+~3W~viFԳgO}7nAVͦ/\ ,[oUb :LrJg3e4j(5,XӧWv픔3l0͘1C˖-x%&&*,,LVRaa TZZVZIw-[СC ӶmԧO۶m$nZM߽{wٳ$ᆱU6Mv]111?ݻZkJ& !kt ТEjt jSN;vu5I=77~OS30߮3f_x׸>sqqVZff_~O?T%%%5AAA:t j*\RC qKp8rJZJ\rۯc^^$iUl:8?ŋ@27$_Tqq^~eIȑ#@mL^dItÇKbbbܶGGG:xZhzo񆂃u 7swܡt=5K3YF]t+PNN>QFI>#XBCu3?'ZtFvnhh$ĭdffJ2V38Q̛7O=zԩSYf鮻Ҽy|]0 pR뮻Ծ}{?+=~u׮]+I8pvʕ+9gɒ%߿1=c?sۣ>͛kƌ໷j˗/w ."IҲejTGM >\Zl6lؠ}:OOaŹkĐ֭['IJHHgPׯ֭[u3gF pRբE iڿt}gꪫwjuak)++KM)Ssݻ[3gT˖-ۚ7oiӦ);;[<{v W^gNNNfj5EEEiРAխ[7;+11QR>}v*I0a8Rر{9r/<C\q?ЫܷsN=䓒SNڲe$ה{S5yfIZb8 ڵK ЬYי1c%IvisJ VZ9mժ Remj55J<64\z饒ѣGo̙3߫]v:k9?^{g 0@]tձcGj}Gվ}{g5kO?-[o֐!C_+""BԥKegg_WԽ{wl6+88Ժuk:u҆ 4HƟcjjp8.lZhnWYYYMϧ~+R׿t}9[NTvgϞ:oRR$iѢEu~m62r_FoT^^nv<_&fGᒤ7xC*))͛uJ|A_&f49YYYܹ{vꫯ"4fɺk5}tEFF*,,L#GTTTi&OEEEi.MDllz-_ae hbh&&f hbh&&f hbh&&ŋ+ eŋuW h& ?ԇ~2ѣ'ɰаh&&_w.4@BIENDB`future000755001750001750 011413636115 16565 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doccipux-cat-web.ini000444001750001750 235311413636115 22076 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/doc/future # Default value = /var/www/cipux-cat-web/tpl catweb_path = /var/www/cipux-cat-web/tpl # You can change the length of the UID (so called # login) for newly generated accounts. But consider, that # not every system can handle any length. If you want # to be safe choose 8. The practice has shown that most # modern systems can handle at least 12. # Default value => 12 catweb_login_length = 12 # * You can determine the creation algorithm of logins. # FN: first name # LN: last name # * The first x characters of the length defined in # CATWEB_LOGIN_LENGTH, will be chosen # * The number in brackets are the amount of characters # counted from the left # Example 1: # FN = Bilbo # LN = Baggins # Rule: FN2+LN10 # => Login: "bibaggins" # Example 2: # FN = Frodo # LN = Baggins # Rule = T+LN2+FN4 # => Login tbafrod # WARNING: Please consider that most systems do not accept # numbers at the beginning! # Default value = FN2+LN10 catweb_login_algorithm = FN2+LN10 # If you set up several CipUX servers or several CATs for # different institutions or LDAP trees, you can specify a # name here, which will be displayed in the status line. # # Possible values: a string # Default value: CipUX catweb_server_name = CipUX usr000755001750001750 011413636115 15317 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3share000755001750001750 011413636115 16421 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/usrcipux000755001750001750 011413636115 17551 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/usr/shareetc000755001750001750 011413636115 20324 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/usr/share/cipuxcipux-cat-web.log4perl000444001750001750 352311413636115 24606 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/usr/share/cipux/etc# +=========================================================================+ # || /etc/cipux-cat-web/log4perl.conf || # || || # || Log::Log4perl configuration for CipUX (CipUX::CAT::Web) || # || || # || (C) Copyright 2008 by Christian Kuelker. || # || || # || License: GPL version 2 or any later version. || # +=========================================================================+ log4perl.logger = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Web = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Web.Controller = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Web.View = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Web.View.Index = DEBUG,CatFileApp log4perl.logger.CipUX.CAT.Web.Setup.Client = DEBUG,CatScrApp log4perl.appender.CatFileApp = Log::Log4perl::Appender::File log4perl.appender.CatFileApp.filename = /var/log/cipux-cat-web/cipux-cat-web.log log4perl.appender.CatFileApp.stderr = 0 log4perl.appender.CatFileApp.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.CatFileApp.layout.ConversionPattern = %d{yyyy-MM-dd+HH:mm:ss} %M <%L>: %m%n #log4perl.appender.CatFileApp.layout.ConversionPattern = %M <%L>: %m%n log4perl.appender.CatScrApp = Log::Log4perl::Appender::Screen log4perl.appender.CatScrApp.stderr = 0 log4perl.appender.CatScrApp.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.CatScrApp.layout.ConversionPattern = %d{yyyy-MM-dd+HH:mm:ss} %M <%L>: %m%n #log4perl.appender.CatScrApp.layout.ConversionPattern = %M <%L>: %m%n cipux-cat-web.ini000444001750001750 456611413636115 23645 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/usr/share/cipux/etc# +=========================================================================+ # || /usr/share/cipux-cat-web/cipux-cat-web.ini || # || || # || Configuration file for CipUX-CAT-Web. || # || || # || Copyright (C) 2006 - 2010 by Christian Kuelker || # || || # || License: GNU General Public license - GNU GPL version 2 || # || or (at your opinion) any later version || # +=========================================================================+ # IMPORTANT: This is the CipUX-CAT-Web boostrap configuration. Do _NOT_ modify # this file: /usr/share/cipux/etc/cipux-cat-web.ini # # If you want to modify this file as an administrator, you should copy this # file to /etc/cipux/cipux-cat-web.init and modify it there. If you are a # system integrator, you should distribute a modified version to # /usr/share/cipux/etc/cat-web.d/cipux-cat-web.ini # Remove this notice, if you copied this file. [base] # Default value = /var/log/cipux-cat-web catweb_debug_dir = /var/log/cipux-cat-web # Turn on (1) and off (0) debug output in catweb_debug_dir # Default value = 0 catweb_debug = 0 # Default value = /usr/share/cipux/etc/cipux-cat-web.log4perl catweb_l4pconf = /usr/share/cipux/etc/cipux-cat-web.log4perl # Login dialog language: (Locale::Maketext tag) # Possible values: (See [language] section) # Default value = en catweb_login_language = en # Login dialog theme: # Possible values: (See [theme] section) # Default value = default catweb_login_theme = default # Default value = http://localhost:8001/RPC2 catweb_rpc_server = http://localhost:8001/RPC2 # demo mode (if you run a demo server, set this to 1) catweb_demo = 0 [language] # Which language can the user choose: #i Possible values: en, de, da, fr # Default values: en # Format: Locale::Maketext langauage tag = English Name (that will be translated) en = English da = Danish fr = French de = German ja = Japanese # [theme] # Which theme can the user choose: # Possible values: default # Default values: default # Format: Theme Name = 0|1 (0 = off, 1 = on) default = 1 Berlin = 1 Zeuthen = 1 cgi000755001750001750 011413636115 15250 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3cat.pl000555001750001750 216211413636115 16515 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/cgi#!/usr/bin/perl -w -T # +========================================================================+ # || CAT CipUX Administration Tool || # || || # || cat.cgi || # || || # || Copyright (C) 2009 Christian Kuelker || # || || # || License: GNU General Public License - GNU GPL - version 2 || # || or (at your opinion) any later version. || # || || # +========================================================================+ # ID: $Id$ # Revision: $Revision$ # Head URL: $HeadURL$ # Date: $Date$ # Source: $Source$ use warnings; use strict; use CGI::Carp qw(carpout fatalsToBrowser warningsToBrowser); use CipUX::CAT::Web; my $cat = CipUX::CAT::Web->new; $cat->run; exit 0; tst000755001750001750 011413636115 15320 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3i10ntest.pl000555001750001750 62411413636115 17446 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tst#!/usr/bin/perl -w -T # test i10n of CAT # (c) 2007 by Christian Kuelker # License GPLv2 or later use CipUX::CAT::I10n; my @locale = qw(C en_US de_DE fr_FR da); my @word = qw(delete firstname); foreach my $locale (@locale){ my $obj = CipUX::CAT::I10n->new({locale=>$locale}); foreach my $word (@word){ printf("%10s -> %5s (%5s) -> %s\n",$word,$locale,$$obj,$obj->get($word)); } } tpl000755001750001750 011413636115 15305 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3Zeuthen000755001750001750 011413636115 16727 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpljs-head.javascript000444001750001750 436611413636115 22500 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen form.css000444001750001750 1511413636115 20475 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/* no CSS */ default.css000444001750001750 1611413636115 21157 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/* no CSS */ nav000755001750001750 011413636115 17513 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenabcnav.html000444001750001750 11511413636115 21745 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/nav [% FOREACH letter = abc %] [[% letter %]] [% END %] exception000755001750001750 011413636115 20725 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 266511413636115 23070 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/exception [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Exception') %]

    [% MSG %]
    [% lh.maketext('login') %]

    layout.html000444001750001750 14011413636115 23240 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/exception[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] img000755001750001750 011413636115 17503 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenlayer.png000444001750001750 30433411413636115 21531 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/imgPNG  IHDRtKsRGBbKGD pHYs B(xtIME 88 IDATxwx?.w\0T6BĐ wk 7lZh=ƶlْ\$Yޥ{{wɒ8s9ݾݾݾݾݾݾݾݢZn2r!)eگkH 3ϣ]H!_1jN'evͲlB jG:UHH߽ގrl<@qE4=2ʴ˅lkD uyxg2B<mil86V#!(H !bG +(HbCŁMh >>c/|9 ww@érW2diڻ\uB F3猀EU;=0 nLHk+7ߐHeF1Ph2RQ*!`a:V-!3c,_tNJ [[IBu5_:8\.?FX);? id5_.ԽyVlma @.waY9_kMMo\l /TLz&99]"f9* pHblE*BwMEQ|*>C>6n45ehQy8SlP PP_> )]^^ ^_/uAC(||\ۑ(v{/g*Xz͆n#%>!lxB7J2{M*N (xMW pl e? 4Ǎ_kj61&4f1mq043RBSʊ||*-+i]ǘܰ`Ҫn#wllĶr%I'Rg99L1YYa?6=b}\m-|8Pq5"~FBW{O0wSqeeuʢE Iϟ[1 9a*U}=] {@í2穧qq\>Bԙ.Y[y9&}/\nA#gF?a~,)/-DP=ISԳ͠: :hXgobbx ʹ3N7ufAuk<!)pЀ}J2.}HU ]99L9YY^h^k|ѶGc[55׭#c\a.g$$HUr"J/~}.=nuo_<qq}8W4r |i\Z{|kslڗTnW< wXNI]w4(BFAbp465a_goJ RʠA .:F]~^w$d%1q"RR"uh84|GV| P%Y'Y@2z+W3qiEQP,4Ҙ?a#RVϩ±~=&q(!vT,Wnh*`AzxJAM?@B\0c=* A(`SgyxiPz|۷?܇&>_'>%hHV~36uD2ȃTmpp:7O'^j@0 76 ~:ddMM7ϒЛ]p&9>He\\з n\s 9inB&88dvOdp NkZw Q5 5 ffr̙aޮ&Ǝ!Ҧ~&/)61Tu0dpJm@QJg67|5/o (۷;;/?\g z{!zxH#Wzr 7 a(O4-zwIF~yLG˷{7"11[4d0Gx$ se܎wC" 㠃+4W hI&Pj`0S D& 7Ki&/9mb;|NWiLÉN.Ka>pn /f`3 :ϬY+ ) $'NLnH qt{n&4 KpHz}-=V\B΃RbeDАM<ƋPOLc.x$ 8~4|+QmQ_}rL@aJJVQhYT 4MM~zzV1pd]QUl68Xo# @ITUذASrBbӎkyDMCO':C~^#T) R߿齩Wa#p )XQA8_=((Kd?SR,Adr#%zU=8^/PDbCv5vlAm>qgw! db&4'MbOr2>c=Qm}-=g nC=|vgEK`MB6{Q&r̙ cpGT!pb}ƍMB>6+Ef HHEP7n{_ѤXʶm)½^GawWCP$H:|eVK>0SS;[Xtn~^&W]<B2 3 N#ymҖMDA )Epe  %'jƚ_~;DNQWc*tРΩ6૯rfep~ BLRXP[YsFLJI\R WR"+{_?j45uC b6=VJJ4 hQŋ{h蕙{ rIKȸ8{|_xfŢxs/`{.ytBjtd=9wUIr$DPO| 3C2j!&Q_=aZAR?Ȝ.8hj(&ñr%C'Of_RR s*'0ux8h^YYsOJY\ߪl (5"aUYWȟ\DkkXWRR". LV*^x$RcWcǦس /dIIQ LY8eʟ< P酕 hp>Y–AW i&awÈLhk NfP}OkkqXS) !j CtS>д4vlzTmζ!(?|ƍr<*~%TV5]DᰫXf]guю@P@U؉Լ+3 ϒƁe/("1ʟM s{!\lJԩ&'3ңK ˖1ljEJ@X #m#q& >s!C 3uP2eTW Bzp;%~ QUde\Sv;T Zӱ,J,ݲաE{ݬXXf,χ(#6ѣ$]r %.ɥ}JU_[?2ߝ?O.[Ƭn<x,~BRSCœʒ%w>o !#?6-zjd Q-!%^WGiGh.@nРA~#d(Rٝt #ql:9s{dI/ni>T-?AjA{c/xP ˰jqh@MHIȃᄖ1m(aTt>0ރ@b0 m7HP$c(jU <|i(՜ V@ݵJx<($*J0pПAsvJc̭ Lk UrH(jT^,|@=pȑҙ}kn|2:ڷx @kojvxUSFj{8VFΩfa6F\sMǒK~ྐྵC'$> JUD􇴖҇_گ~N߽cRz"em*_ fMt؞zYyRUBwZkV.G1ȎmqPZ=!p=ÊCa-@~A}v3}Z:5\9?9/[0 Ac=IOBv>ֆBۍ"ӣ=A׈m>Q*'NU99.,h@7Ҍzjjv*k43鮦g4af@!ӆm.Zn'NAVATP8~E>!TB7rtە(@ |yVtnEpՅ<8q^ŨuFX]ApԾ 8=Иr^'Pax1 x+EJA `BWt|1z#u}'@ff^'M :ie([X";F^-!,[/89 ؆R P !}B~5p_F]IY^mMYJi"T4hB Li^pd eQ(QPE1$rGy `+'}בC41/Bqt{-Ɨ2Rl,#/<*MWULĄA,L!4S gV:X=":Zza괻1֛4>xMiuXp&m.PYz2<1ֱQfP)X5JkO¥DWB "TU I)TU )`{n&%%1rEddӧOmm`y /LȤZ>ϝaPO`|<ٶ6(sT(Ȇ $2hM؜NӉ+HJ@f,?6ǜjs6oM ?b>bQ,j08(! ]IӥrI8EgLTz minH͵̧{Q:սqٞdPAm%hL%7;V$I Pد_ E(B %R][W? oir.+EDӇIB!58Op hG;(.8fniF bubয়sEGojb쫯˄”(v*d&&⤕dB8F]2s"a'`A uPFt%MeNL7D qk@8t\%LAOcƙ#a3[?Ø c=wjRRN^J{@K$`" 0? HòqEH_((BUCa`VVxcMM4B9|=x,0)TgU.!v) ^@ =Ąįb3ЯKh! f!TZ~ L8Z'a0,i4B)RcފQزB2b4ͦlX[qPLxw")v#ZUIDCUc#1鮴Z:+oB&@DW/G ѡ"RhaC?yՐ'cƑXWЬ>Zj8r5Ҁk3W!A(tÖ g̍ub u\!j}%P]^-58ߏQ$!:%уG 7MdRF ((T=p6锂6lou%%\(xƍcԩlLH}}9?ش3}>WX|9751`>2JOPQ96;)\\S9|1t(YZ)Ռ5RSGC6<7a+/Yw8hD#FPq(o]ÆQbYX3\- ,h-#H*UDw)b'U#Q填*"؛`x;"D Vz_)!TRU]8tķoƍ0a\_/Y@H)GMA|އ:gB|?ݛaI,ikdB Aideuu8n>ȺN׋r,Լ!4;fV1}11Ȑb?U`B.b@f&;'O&=W_{drdd@ҸO1,ǴTWfUDԬ֭߱3ne߫\W1R">rϔ)>u*{%KS[ĴdAe0B &t:>rRSiJLip͆ZS;'Ff'?ӉC|!P<.~ڰyv=r ˅w YY4QJJHΦ!)68kp9Lnf碢!Psrh' '$ֿ?m<; X:dU xN;nׯٷ/&']]M܈T Ȥ$<Cǃq#776r^M h3FBj1Ag|gY~W_ `!TWǬq9s%4H\ &èDhN9ƨX0٨ݨQ4yӧs,10Qղ;\A8#Zy[yA:x-]fw8逃jlYPzcYk%̆ 7an2/vtPS`p8ÆQ?o|!8TO.$Ѫ:da˹j(^ܾ<pk!Cx·i>?ɻ}WdVUsMSU)ۼ{v1w.?5`Ϡw??--8GCʢb0++I$!5rҲ׏B<C9RTDHվ}dJLK,j(oom-IÇSKcq1i%%dQ7neMM86lಣGN I:tԌ &%=}ۼ!FqPSy 9#Fpp w/(x}XJ׬!mj%;51c6}ii~ x_|1 Ǜ(DcMYÈի9lkb/^]E_Z ʿcȑ||)/Y}yy|ާV x۹_?HN,`ڞ=ܘʖ2RR_R46{ķ~=ܻ|9mmyy||\uώQjk+.fA_pWܹcpxּ6O  $ ܾ>gI:חsE~,\+3" ;(4lgx̭Qljhb ;XlqVX i'D @JUyd'*/|ˎyVUXi}6̯e=dt"-ѱ Hش~f1@QR+H,.N\~~_ <Ήq$TU(Jۼ^S9D9rF3PSyNHwގb!$m4uKrmF+Gb~%v-CZZ2s&_TT<ٛn+@ٻ; Gg{/uZ흶l,3}JFӺ†\O>ݫWsQs3qom$_-%% ./'}&&r%͟#O>a\~m ޽ X52Wpϛ/q|1TeR{⮩TCee3-[ uvZ~[+^Ǐeܹ~=/wa^Q畖rEas3+x/$}XukͮZ mm۸gi"B-aSioǶ|9fdP8c˯yyT:4'&Rp:$%[YvS}٧v}̘W쭪blFe ꁵ.O7\¼p; bĉnG6732!AhHH`G1aHKcAu}=ݨBλe!hio's)SU?d٫PEU(B*/2xa~v~|uN[8R!Hm9f43Ӡ\kðX֕-VB1Rjwb,yQVO]pw0A+c짱7J#2.pe; "5ʼnb9t;* +&ڰ^-˅wJG\~>}?r8u)y+xxeop:9CUNfYI\q2j:V*؊I[ۇ u2zHOgnh<W]o!%dF@&3Y2iv|Rb׏=С|$[JD|\))ΦyUU\;v0?u tO>jΙ0w.m^MM8SR(=pRޯ ^/YYl 6f'%1cXN)ϘJ!P7ndPYĒ#ٮ1zNgO~\EO4|$'&geAikcdr2,ખΏTJ͜iM $$'!17.8 HMD@CRS)+(Gyy8ijGUk+ 4YQG#8NKEw쯪bڊ[UqP$Z`ZCinfhz:EUUbSt~?Lz*G䩖[_ZZp1<>r  C󡤧P^NÀ jogpj*C))l޾,U%53=k0HJrs]Q[3XQSCqq_V7\@;s.Vtھ *PҗFYai,7fOp 7pWXUAd :?2E>O?ejTm-qE 1~r1 Z[jx2ĢE\*%J/fs)*b%Iss٧Ă_\-ܺoqNgdt̏>bFV_JۍnXOq#o VJ.yOu N#ee cݼS7ndhs3ڷFz}=9o,.3Ek2׮e?8 V4];VW3fR5;nq\?r ƌq(v:,+c\u+Tmm$ΛlvH9'+IJbW|<994*n! ́gдs'O?*=\խߟBHfY9.}>5kRV̀Ç2hH(28軷cSZ 3,bڴG~L8={ƠpP7TlLu bHX>v-iFk]6пדO2:l:bjjqq1kCxQ**beNNuqq~E]UaU;v7?Q]Ě ' eCM6Hj$YXmο8>mƕH+P~ZUqUTpO9Tzy>3lA{{?|ȠPv;>!6?p)ۗf@lN6։'8d˸F[e%PG+9IXklq0Nj{>,NK墱KrZZH;<ܙ:xK|kgf-njaSi)SOnk#KfDpH2F-]J5@Yyjq1( 1vj,`Kz[)7wso1C]˦&.]J[[Iq:QR.WU\B))!7? Ȋ:k.io'sy69Bs$PXHBSRh0 o?x5fiXڊ}p*n}Pii4*_a=7))4gg󸔐EAP?cʢYcʳf~`<,* qESO<{.%sӞ=:CP};g͊dq~:ki:aørFdv$cIJ˧4J]z:KMK2;+% WxZ|l/h={'–-r5Ys#W\"]Yza֗ 3d^Qpo!- PUXy MH<7U9/ Jrn_Y[PIWPdY=`_G6f njiSߟz!HG}ɀFN'--p:) GO>pGdEqˉ͛髪~ctwb.ԟҬ, NjNP4P`ĉw}7/_ fY~˅?)/JKxSU:|˾#GɡAQwsRSi^џu"Uo'/{! z^#rGi)I4ǽry9(%3k@MKM4v/KKI>ZP{1~*9PA aU`u@J3xnnrt^xtfx-K.Yr#f!!bp%Cp1[h K; o.uZJ0 fBt-z˕^/b*ᄮŪWNH&G#o "Iav߉:?8i[nb&55g"&]}5+m6ԃI[1co77X1MMNVhL* (/'9+FYUEU =JBz:6[@X.SAU{;BAJn*,i+V0Z]k 6l}t0MZ=/|ylnKyfܸ* ,T0og<-i /=6bi G1ԙNFeuCȑAa<*%,P&'v]ٳO(g7ݝ;f"At,OIe\{(/+N߼˅ՀEW^y'i3PԀF(Q>Ff))MW88Κų#eƍmJWw[=w.55q1ζm#]ڒpt>|8u&f\)2_[81\ ..vPΜɗ`tF"RNy'/X1As! SOcs@47#i*v = R$|<ϵ`A\vH#}oa\Qsn*ƼzڥmkIfKf.e_p=gpُmcC͌$#MN[(`9oo8^8oa ,*D_Y_Qsw^}ÆѴeNv!X07Q;D 4WlY6XfdSUi{4B]ZeeAỸRRm!`$ x_E#~||dU,Z'ߊ 32hNH8/JاxvYnX%Kih`cĪbYDSB"D ]`i !MS.h/E,i{6wq~eMMkwKs hϋ/C8Bny?99[_CXOh3}+x$dBc( {L_ CrLVƛ F?IK'ii4RϒcGam,t<`1_]|^|A?Vu.cg92 '0P~}Š{ M Ӊ:p`mn.vСy-n1 T8=zC #(赐f(X m2΅1٭!&Ͱh{g2yiU7t讲[ʶ!BpW!gmls2-nf6gټ_GjArr ݨs?eT>|0)+]PxPC0*'>Q^9OSU {bU#í#UǪ |9=Ĩc:l*/?1^=.V[BQ`I-䰑y '?TOvsdl'D fB 3K IDAT͈ٴ<@ .r^EBȤ'*;]'ZUU(ntzs3….,d!l&ì MMiezDV;HsmiTQ44 -ŀWSD7x!@ʽUaA؆CJX<?5"? P ؎=>_|q4P&D"zi~;J>3!żg :p$hy"b441,o (ڭ.n?gʔ1 RY9p9m-'Ir}fAbtƏRqP!W{AW^뫮4mCU1QN8QtFs⮓.ȕ1A>GepSl`6"]<ڊ,,] Р/+ 1Fzhqע-_cr3,Ns U45a{= 4C8KmE+e0vJk{61Jc#4 -)b=w/ӧ?رw2~yWg\!vA8[{dXU~HYLLķv-if49d< H-v;b4&zĥ輫'p0 '̓>s53 1<)QZ[GEq1 DVEwH CJs38? f!,>\Rh$G1S46"ϧALh>j͛b5|N٘)`Ρ4 v 8<n{=G1zFo9q:ȕf!ׯ'}t̘e,F#߃ x.Fk򘂛F,#zv/oC&XIk`6Ԋʐڊ2>c/Z0iUD4j'Hn<̓Н;.0/h |GOUyf@!1؈2>C?'4l"(IOo°/FQ=/ Cu1*f| 6Yn|hzedg܌Fc6Q8Rۜ*2sЏ6)~%;abdCBNTD7G46ဂqCt)4C\b$,r[R;֍ΛY4cӳ^VQ4Zݝ&bws1yY5S[<ǪLƦ2L]cOHl_4sCgJche}=RZR;WD3m.tF_xJo>aZ d] » {o(dfdd5a8?_<˜Ço|,shcU(bQPǿ@#xacp(/UF}jd,<F5(6BjQ3/*_3bx9}55ձ5 @M o8?SyT+jQ/XI@f00v,T6;NklkUeyоg $n>k\6j=to^P[ˮ؈1/©% eE0J3n.*qWG'S|9++%_Owk <wgVrmg_eʈs-TKJx$xfM[eEE d<` ϣ- $%DPQXg6 ЬUlP b,g(PzNaJ@u.|);v叔@,S(G2 d,l63U 4ޢ͚[kGʼmfnnn=LH <>fּy})1+""Z/"5U0HPB"(BfwpMie}cX518N<`6VMM뾭<6ag3vl9 'هcZgEGz1/0 ,$C{D,ݻ,t}N-c^gë(7s7 !B"R* 6(kîWTDTv/(EA:Jc~Ry왝;wn;WrB&Pi׍w٠ɹ#W*ʷRQZ#bD*e:HX,Sb0|Q0m6m^ćJv@WN P¥!3Ch+KñUΩSD|95, ]ĎC j&7]z t[4eJg /Lp)SۿHdF e14* S1>HCeAÅŒmNP!Եgύ<(^{m3rgBn0`1Svc`i= {0׾"Liz}\>{6u5xVmݚNg':v?<3XAMn Sh=F < 8s2O*Jc8<zIEY~2Vy咚A.`o5Ѷ'*ctBH?Ofƌ>f0t0=N(͇n FHΰ3*N ?icv?b&n|MB:uQk,Y_aɃx𕆲<'B_9Eo 4(7WRQK1ZF*gppp|cհ 굛!CFЭ[ӦU z秊^-+&{*TPA6H`\۾ W@ i޻t!I#rfE kE`= D\S<|gGN gB3@H''(uTw/RhЬ^K1:11Qc3w1M }1X[UQV $(,qhֳn)HO2~aΦ!O-[.aid!͛/!.lB]Чe c.] =`@]`3&iΊ>E:h'L~YL BXW#\ ϠS@@/r/h͚q;4[2v&)B0PWlj!~`!s/_ s5O&:}i09%,L`4  _F@acہb|Iq׿VfM:ѯa$ H&3V91MAYqAb4As&M*RQz~ ݀xqhTPyN$'î] YQQVzjU Q(SWPi`C'y_hp7/S!j(ڿ*U(޽أGQ5-hW(#p4vЀrڇ7 4p0R@ { E@{4e)`>To@=qj*,z qN[&jMABV 4!8'z  M-`(,~mXa !!n>ffk Cb1<Ar' Sʑ@l0hTT3F c\X ^qctJ&.|?cšlܘɓUX17=w=m@C{C!4Aj2 r @xn2lJ.W"{wXlЀ'~},[T @N[!%ɍ 1/`%<0-T`#i"xK*(3|AnTA5 Egfctk Bxc3rLA^^gj VqٝaA h暏ZRr  Se@tGmҩu뒷r%GۙqM^l_ B\{ݝ8Zd7F riHz, 崑*@!p7ZJ( \+ q&a\o 8&rYq/NDL"_"` (j+HC|J oɶMLamg&!rCByx|d- #U(2MV*tah`h NЬ]JNt܅WCa} oP3HD]Kc'&Rɉt~8p,h\`-8 f77de?p0?9{&|lX} QPPhO%a[a~ .,-ɓ$' 6p> إ)@${l48z5Q|9˖nɻwm(/&=RP;J<_%}f bêHD,˵@[4% т'풊T8OiT2.."QRQnr'%R*0`'( BX,]>7t?_oBlva]ݗ] /As;/jُ?׮ ͞FI͚GE!9{gaѬ*Y2E[2\0r#Y !1iG>q!/TOq0 K0>Dn `cjL!JEK^Dc%,DϿ -aXn6 1L۶Y|j>E| >cUю:r'3ʥFZ=tT*Uap_P(xxV*gP|K&(wI)֠!.nwNS*& Ucgb)5p]p][͛0sQڐdWI@jd/(~HMg +WuP9C>3m Vs#PXIu#sh0F@tZ qU*e_kWBn...-ćA X1TX, !xaoK6bѢ9eڴ+:8R V΃#xnn =X!t]`;rz`Ġ*bڅ tV'8%ѴI½U)8TH2#UDzd_KE){Ú7ʸ+Kƈg +Kv@vE',#1|,'t Oϑ9NPSa*PQ`VPW"xVGJdTOB8. m5 7hͯ4g+cdS`t@y5Y*s211<`k2W IDAT @!>0$'Gȸ^0Aʻ02!X?И-Jj#w@yk!?\" !4x s? }֮(LQB9\F.AƲXWHi|#,~Hj]';ٳ" Ng eE"`QTOZ9c''(.a4_aLI!?btՋڎ"!r47:)"<3qrsfgR6o8Q"éjqs/o,"|bm~t΢gШΩ2..!zD1\ˤdz^9s:%hk?Tׇ4ƣE,0!O=x.Jeśo.aß*e˖5:&@ZUaV* fm`7PXmt"Q{NQSw8nF/s%ꫬ" L!:MrUp켶՘|1 (ῤӘa |V`O'&up1mS>nM+hߟ} F*BPstTRmtK|_PJ{whjiSMmiBm+ 2zzs vu8E+fluDα6Y nt~!N*D}|zR*,5eTk+sH\K=[9>k=9uRNЩS0ӝ#_*$˪t9o?"q;Y^է{?ZYM*ף: >}Pu|s' s\{T'[Nڀ4oM4#3f !11*UA(Jܳl׀$l\rI&B՝;=_JFG٬a6 0SмTay(`V[cC!gp:q«rdf~uC%48m9K A^o qPF *c0%U]H3_: p{ IRKc}"fn"j.rZP)b{#r_fΙAɣӎڙ_Ō5Z q&_-ePy :I/y&{ >r2sGtZ*toLYh'Վ۶f xy)5?33_æM)lZ];x]A 8nyRJժ%BLBH5/3B-UQX~L }7? uN fa3tl7T{:թCrӿEYO.G1nLa&+Hgײ}etN@C0$CZRwT+2`i8/bMv"@3E oy{V9_C68_k]ztvۈQQ/ܴnjΕU֯Q[ǖ}9jy?OU;Ո)V诿©=`IK1̚ʐ!IJ*"1q+R\,mK QX8W*njn;sƒq .Sp&91P", Ͽ#(p8 }>uHK| +WR+*V'ox(VT3'x$H iOQ _Uxy>般V8HLh"wH97lk՟z2{$~|ab"s?)B:[6T}.gD^òڂkO+u|xel:mɇ҈W 0P^B2 Wk&X5jA#DF29s r- /OĞ9SP%22!EL1 ]XX `p:s$8oaj^lK\%;s"*@ǟ2Ex l'Q "wneU90 焍0|x* MAyUɐ2.83 bz&b{`%-Xfx8&v ?(k,Q'=D".Rm$LH'6^E">c!-a_{y#S +Υ o҉R"JQLCE J BĨw?HdԨh؄0n\ , 1nJa =&8ău6TR 0 >_u=lj>yd׋/ ϢyP~gCOiDޠ&e|F}Lp0Re0 I{0LNiGy ;QK #Rbӻ;!x*ViŠ ,Tv4?QvU_I>x睍k0݂"XǯJp W`[p D'3y^@𷮞0l!յeFG:u:BwұRS_agxƎ5dQƏ_Ib"t/$P^p1hZ N -5gZ`"F`e>H?fop~$)=wt&8AH6Qї*gK8wOPUП+=sX/^B xkb5b$@" kXڑRH+sp-O<ի`ڴ+(.7K%{;R 9D SV*-7È&~m%%QҕJzIԿ>l5W.nj1t)ƍ[B:9 zWGd_%K[_CD9r$mKK1EEamԈ+dߤIAEr =`/l%f.A G;Vx2ES0&^wC|! q{rbip CBIBҡFmLDDDXztycb<Ə_MBpblnrd+<2űv%*gO\Ed".%?I-CMAn)6.84<2 ye8\LC: ;ō8ǫru!9렿F?GDǫNt>,pPـw޷-ƌ1lƏ_CB:hp8RUrdy)ٜ&/x-[k׎n/ĺs~ehۖ*U(;%KCA=k0_+4e4w0[T&8H`8R 4O@-J3۠X8rS|`Zn҄7d"AO})ի7|8;S_ʠ@"BRO1k= pKOM%&]ݣbG7Grt_}nJRu kT(nyk9/_Bu헔^ݛ}x[HQ%UHGi & Rm[BI`GI  upCQ)HZjlzWKõ(pΑ2;"{j=_}XL∢J[u%S@XV=ʦo m t%…Ѥ:3#qpeʕejJNox& ƁL*U(ڸ.9fP*|yG Zn44 }KOԹBz ?}13rd/I'Rgy ց.$>rd%Oqʺ -7׾0݁{?v[8nM;Xq3luNL+R}#ßNCФUg8T`xA!K4WI,ƻGVF?nSD3Sڴ`=lL([V9"dpt,(c*de9Փ`ؓB竬U3+[է?";ᖆǽ0~q7EVj2YྚqB nJg6>kNzYMp}'pHwCS?)lVҙ_yQ&7/i|,˫NQcΏcQNˉRU` *&*UMz4a[Uov}?|{}]J"Ka3 sd9RFy?4 TP.G)SMcą}AjHI0.* <4&WsXZֆBi6R V qQ*Xm`AT!JX):#0 _+sj()ͺr 42;e;!c3_i:wEvJ8^cU :SD$*'Hb,0Ce c[FྦྷW1enُ+yL\Mv\ŋ f_4 1Jo` 7WT|jɓcBJ~TC8`×rq^ +WhTҳ^˒J upx= mbFyRbx+Z p8..l¬G1{QTEw^+m>4;;<&~277w+nUabfDSA4"#aPa>)T wO! Lj0dIm~  +*t[/p*;:'RۂPmBǪ@?V΃ݻÅ?mr--q7-q0CPl $?8{$`A܇p~=H[I ~$+s"cq0RC!<:h+Pt@AWbIS&.LsTPߠ)G T@݅וt"lcwYWMYS܉1OCpzN c8x3tB;1)h*I:9&WH/_HU)}B۪YSPV! ^z m{jDzb kҡ  > c'S<@}PQA[px S;Y ijL^mmC}DoUZT)PuKKPw4Ĵ"wwiH)c^??_oİukڝjb|8|8xnpR' 8*0b|_/\^pEɣI|49IwSFKtf6m qq9%u s={]S9Rf]L2%u 0>8ҾMQk?bAeRTgZ2PbŔ1ŘDCސ +^áZX| (]_ ԖM3 hl#6:ozm'ׯ|(L>IakZϗ@ p }?|  (ua`(` (,|``h24]`{wa" _R^Z< 3dm6?)ؿ)W.ȍ"6۶ށ|rj=}KMm,\X j("=͛gѴQbˋe̘_YC? ]ogWq™3 c8q1RO,1sP t9Ɂ҄Œ@qq4{…P>d~ x?Df߾t谒#Gpw櫯SXXfX,f}1 ;̊SnV3g'7w b|i?qvlUreq8[  ? }z(Wa(qETP?CZAKOC['GD:'Bꇟ >? ?#d  +j8N]J M-H)Rx.Di4nU`(2i<6JpUwA(\7ѧ-צBv=ǹۡK0}m?Hj0qx}l͟Bv?cgJ%vQBEp|${/)bؼ=5,;cdfY<{oCwKHO/a|ʞ= -8qq"2RzuUjTysCu*kdef'54i=ȑ^ȝwނŒ7ۧ_*ժma˖h ̛7ȳԫC8*9sd8,CBϟs/zӛ)V f'\?(Dg cH. @[ gCR2Vh' S`[ h wj:;|p-&%alhr֡백MyDU۝JpXK>7d/߻Ò@qޅ&8eŮv+8i>Qqxµt)dj 8N7ӲxoEv`uR M RAC59 u#2A++쥠g#\qE.K=XU%V%ѣG.?װ{~`ݺT22,vرHKЅiK=h5khK/ng؎ƓψMٺ5E)bʔJ!T.rrHK+rY4Ο.|rիfҤo<ðawЧ rsa۶z"<E9K/7=[?S//H(]H;6*.v2 :P`KW V ¶u c"T;R% vCדP#-P+Ŝş3.|ORa8K϶ׅs)N6Ïb2̾ q68m$tz&)5֡T)Ц{j4QR HO<&k:b:tȵ}&=­j[ %%9mжI~[,fN{cժTk嗭˽zmF|g23 HN.]dfw=R=@PRneٴI*:t⸽_9|'E3pƌ j%)C@ׅ3DDXuv:SG_{\+{$zq :e>X`&?_ V ;)_!3ln:#_7th7 fnAn6zf 0[|> 'Aۋgʑf*,̴X&(d , JY=?"BѴju?ÇzHlZM148xݢ`%3!zV >+|$reg9DQl7ԲfUW4Q~Q? Br0ݪN{9/Ѱn!$;P)ω0sE xW!c$Oip٣cI1f Q5hx5t`·|ëonA]8Xq0z^JK9(=&'ףcG ,8ÚPl4ՎDM̙V&))wc[YbݺDuœ9ym.c.cΜ:L& z̟j/bEP}:y%11ҧOYiÀ "ڴq]j:"sW9|X2KxMѵB7V|ݯj^ ߱j{Mu=ضj 88޲8v,|H%r WBJ_A sP4/pb}t_}]sp9a^ ?uQq> ӛ:ڈ)^Aq0sA*~Lh="{Z5iJOfK` x|j[5ɝo7L(Ti ɰo@q<ٓ0_'~WW8vqx[G0qt@N7+)7µ7 ]ބQ;up6?Z F7m\7/-3IN6꫗kh*<9îLYJ YY1`Fp=&T[qt4V>hZRСWLVkWGЪY@bE~ >ۃ_nj%+YHcJrrrp1: _GQQ4[ҷX">=u96qEZ5ؾ=oɁFRT6zC" H͚BKliM^8mġ(PPvɓQΟ:s ÇʕUi0kWޤE|LC7pp=v  'jiWm`AW¤ߓ)>pg#U60o>  ydtM3NNI83m~X.uyLH:10x7k{] 0\}i^0'2Fyn@u'd[vkobs5q& nX Z~~2YR78fA}lx|w lZܭNO< nuUЕ#1_ ;1 q<\ ᄏs]&q6P¬Yu9z4W^Dbb!Mp3kɓqԩs)S3xK>Fb]Qyyq|Q v]fݺLz^K暞LLJ8z4^Z,Ig{[&YH);rfIvk@[e?؎hyYU]ϝa0ב"`QA!{PIloQ_oy-QZQ4DI4Ql( aܳr9[<})>{}Zk5sy$)_w_3`ao:mwcpOmrPtY4$.|.-[](W^9G7iif[9묽a*)PoܵK+׳x_V2@B OԽ-v[YHU!LX<ο N24yLwկ³ʲKׁ&PmlHma ]\xtAe\9n`He2D3 p;Yt=k_l\hmO㣏ZzҴk+~Ү7b$Ԙr^_2^ u<Ebq/C{Ȼ$ފ]zo+ MzrTH捿e_;TINV?6g-)?aWyݏdSk5?H'T>bcw~7*  G>Q$I8ҹrTsB1V7UTU6,$b^D uo;]L?i2!PKxXGJu[l3$q*e#O.E&lG*eǙ+B:^?u Qz.C;)]܏kj~4Лe}<ba"Nۆ]|@o,J̣!J'\Z):h E֧dmwU$l Lxh4{8PE@H#H%mѠ+mصnȽu#fUQZnڨ"FtaC-tRt Mv:>+IY;tS([]Z;Ȋ<4\FJNi1;k/gao]XR l#]jпs^nJ/.qNk_ s+m6BC: ͲS`K[Q~@I/RfLaiǝ0Kt뙘:UcmH22`+z -MڢUR"ԍ6.Ww^jG.4RQ@ύg>] ]G.PYYG}Ϟtc.ܻW\uޞ_, Nv%F`CnȦ?y^㾯+yF`м_JȪŠK[BUkБUAdy%Re74kDq6ⲻ1# 8Mb#ZrjtHL<ڳ&J>vZir8]RԩYtvRa@Qi ?xj1O)2dx3M&3-PV  -6!ylRTDy4 'P5@OyU: aeF,Gϙ 2r?ֳѫ&4zf3q3|gZWv&(wOWکy5]H@;N]4Yujf-*v9>od )%{wcřpFH{Zfz?F@Fc(UH?鐔ΑtH@#]R>"lStJD"cF*eM#t$AxWz)J`">}E" G':U,p*;hhJ i4V(Ș3d4ΝRB4yQeUV}!jq@CmExgY*W$R:-RHxÕW`e`D I^BIכz9IsWd*"RRa1=)TbZ<ҜuP)'>BǦXyIPUBZmW67=m1nymgF^KZ}D[&i+{LqGN~Rt.cX9,NҾe`A`.kTÊ<ֈ$#ͳRm>fmM;GWXtN{ 5f%L&b R(d O^(|;1tN.܀#4TȰ21pl1 EIdfZ at&&tԥG{^Ҩl K ~$^Er,ei4#<jT'zbY"#s%LtX:aI8Cu z a#\LKC}+Pa-a@J)Ekr@?׊Yx8JV5]2 i.)_ D<9Mny$I&2Q V챮4j#MB!q+cs}*-!Q5ε բo̡=; M8(R%xK\H ʹTSѣ\!1–+In/Ո /:mtI Z@ Ph!n-:%:ITgV[uխt!0`X,1nXsIzuB> ߯PUN/ !.p0iNJjYc[j8u_\MpKRt ,r,itL UC(}4|㕕G G$"<(: b.ȫZ+5*sI^όPHbJ/\EF\c*,G1/#11>R[ nLO~[™d8I('ya2 Wy4:"N l48G?ץRnj>#m_ ?0mos 69;Ab_]`C+E.C?E698O`c^~1s⩺YV͗܄4 Ll;6pHT=)BD̫줱'@;k.NDX7j.!}<7A)Gb !:li–Ko6p3pH0qV$ B =v|H & pbC4FIQ 1 !^fݔL@h'9b(C t) $V #e\eQ7̩#5hġQlLֱ<44!VG|2 oaK[huϱi `M;47NTKEhCs:)6 { Kl}' -S5,eF-Z_4|Д!}jY؆#h'4-Z B"=W @'Fp3 BmHc3 m[u8&,P_pGj>du=2/N^iPK~O9 r;=΅2x>2E݌t3j0vO=F# HsҰqHlldr h3fq-WR]렒־VϿ|xq<ƴHaO͔ec."ɋt]=!{{*= mS\yjXzSZfp#+찐u]ώBˡjYf]:P`3' fwۦɲ'AH}: H-djEd4,bkSj"\p_=Eji S*Bѱ½\ڧ҃.NDvH-(Eodw,#OUtsOZϘ>am2^տ^HE8G~n[Ǥ]wOexi5yC5-d`{#+Ӆח$AD $T:C*;dM8XC^弾ivWreNGG2MW5WJRAP@*4â_/Gz.O< LC'<P_),H6ECvw ХB!rDx,hGJ]KOݸA}%kMٗ ў~S󆪻>y\uM``TH8"y4l4}@X2ԍaTsY7T*:L@3iP$dyd3Q%O`YoaN4lu;fEr@lQյJh1H*h8渚oL@cC4%ڔ(њIJ翦[esd+D_֎1'HB8vTF i%"id<"qhΫƐ 4:NkI2ԅ%a!ıJ.y$hp(%¥ Q8AĮ[G+6y5ߘRFP p$ TI0rɲ~V^JBuQԀ8Lz2PP]4J4?ko)j+_OBaUfK~>/A/ eGrh sXP]4oL8x RUhJ*Rl Qa$"M{@zl:Wy1w '<3w^˵>'rn[@bV"ֲ6;J"xk؇|x|wSMv*VJ'#o'Mi&L2l+zҳ$Mv_ĢI?crd歽}6W=! E}4#P]:A@3]N{}§c񣊥XץSB`X?~qʘ '"i^Cބނa[ik@t, [AgF,A^( 吤|eAe(/_ht\'/<+]d|'3@QOw 7V61J~&487f*)qHR~Dh^]5xBmmńA=6Ѥ0%"1"e_d0NCrVg:WdNSJi flu |OuYo.sKzs_py||FZJ/rȩ'HFyW =f3L! Y&o~TB{;\go5 D3#CAe %S .5MKuρӫ!0-E) a 8t!ʬG-f2l`0hbYY[F֭Z)p r6T? _{i 5w9{9%?;am>˟wmgb||șp~Ib[b=HCәc:TX`<ܿJq37}r%RfQy9tȊP|:h"<蕴AžAKȼTC j%NꑰVB>gzdZuP t)q8ֽXY^h\=`_@O]Fa۰h_`2p 3$v#H5^΁z@ٰQ,1֙!@!φ}ma |YRCa*o5`J$ux|+t \[ =1m0 vAY ] qV[6B*aBQ]]6.UEAﴷTw7+Y І6ed㾟:ӹؘPڗe#ԧx )/ЍPXӝ(YMkR"rmJiYgxf >⣶s;u&Z閳0dKC~;LcE{RzH5SU!B6IeǠ)vIf;TUEsghR=AHzX 3^e gk+ "co1w}# ^I ZXSI*=?CА4> ("w: 2 ?XuAUi8ի݋m BQ'TaH*A?᣷aհ+t7Ԁ\\â`; xNhжRz BȺ73C\08o!S)kp7`82QHَ@T(ꊺD"ү{SUU0rr-oGW@aM&@[w# n6m,]ư\ڜ< eti8r݃`I5S11@0c}{L2Цƺ_HakCߜ Ϳ 2^&~Oo&\ɕ ngO Pip(w]Lc/hdhN7| zk2v\P UFdR!- pQڍq ZKEz ژFvA0W+\)z) k BQ $iMPb>>вTOu 8tXn9X!2#Gaq~*j934a` (%M3&"Rrȩ/vz0vP OdbYVKTRk*?8ed^E>vB.' YF6.9&1p+plfs;;&l Н[㪩NЂpII{Ғjf3\[MeO-I]lג*RʵlbFU]Cu#*V^rďTO5W:BCF5Uj2t2^f=(8HӡZVCҝ0Tm+x'HК ի`~h1 [8 P~+!%  +}_cwuo;tz.ڗ]]@'+J=ΖCG#ZuabA Ƒʮ jPǪh36`@YDx$uBnЫݝYdșy6_eҶddilc[:@;ֳJ(4wn+2/jxgjOFvd,XFYztM5 #@g:Ǝ}уp<אKڀ"e0QBsX_AYצamgC+@{m2 L ;AӾ'O1'eкP1`{!Z`ī7@خڱZLWϬm m r4XBЖͰ>R #G*H: X'e~xYG2T3P'h0^&miJ"3WWIABuQKՅ0PA4iXeWRlߝ NPŔNHv7*9MP@{_?ǾTvcܸCJ6e)mE6ٝbBY;PPJVfRӉN6XkFMds  ",CkG+]r1\~1&LɈ Jᑱn^' @!]L`&P) p:*!q(6 MsR̮%sYO3R+<Oɥ&_ŦA"ȱTNU1Iq*xEh(m #?fRVI  8 bAS:9̕}u\7: 0O}K{cU4Ox=sg=#jq#7^ pVDQ[C;`o 5b:Gdz gpe#?ǟ C巛MTR3Vc{I\6 0cJmOV_ķ[=@C<Q7Y M*}糠S*Dc8!$+L5VhU :H'5*iPdyk[0;} L^}| al_:s3aUH.7 }zM\.ȃGOM Næv% 8c+XٳଯLP>"d0r NVꞿØ!Ec"J&m0%ZDPѾ;;D/alD\bG 8D1e寫oAgra ۗO~z?zRJnV-l2&rȹtE^\nr1~6置Β2R.Urf19KLr ̟YeefECՀ)O!DN,~?2H0:v"'|qyz|>v0;~E^ܲ=3| ]֚ҕ%nPUVl˦PBx*/ctwƵWz> :BV*`ɍP0F,QvawajPtCJH zw@{`er+L*S R' 5x:֝ } lo N!e0\,ґ٪*}r\v@W(p(<_jH1sk8t59 6ʧk`0-0(5.Ur$6ͨ'1[ Y I-l׍B4Heg4?&vt%b!4J5%pcOg p|]Aư (1W,` 1ʖDp˺vf/{}YdY-@@_6kXNzd&A(G+]^NrCܷ$%O4Ҷeދx1 5OWB gr~ޢгȪOTRw+,/˽”PiP-ΜÜ-|WO–a趁#CJ")f&fo`OÚG`GS-ӡ/0J3|_Hws8v3Ad`$ƛav;i @؟_qR._a;Π$ ?~+0i|^)yA{5hÞ {>9 T\;6KT*#Cݐ 8vV_ ?02@xi҄ @r4o~d7vE uEC|x};ulQ+q{dkZ\* (VGg';BG^){A?3 }njв4G%\0V\rrɭP{L)L=)x_3 ~i~ UÔ"U\ T o#M} 6!i)e̲E;v,= aV݌ ('hi ;"eCtN* I#W$ IDAT}}$enCUG)'TIdtݐ^OCvv6T>>}>4ҭRP^:|ROg\xS q ˗(e|5ecCB{9XȝWo!= {;e!eպ;is#~U0Hre7A$A@7^k)^PJRiQQy 4 q#&S$V1W>c5Pr4E;HMS$7*3Y!+rIq}rnOxोYFR&5oVN+WҔaeJ-N-Cwk ,!yю-!lT'\4F8TKuq2 ܃6/&c~ģ_m2Ez+ϑvTZ,_J0p&/>Umg޿4߁[߆z%2Zt}\r{;)lтk|<ڛL^?z_Y@yK!{Od۶tKJ"CJQq{LiAz 9 HYS8,N8zb6l|Se5TbBb,n/w.KΠgh/={Kϕt"9鎼!J.Qt*_* p _eg@ڗQc{|O#3؟KeJp4\3'`^ kpE$D5<CyehDDx|} ]ÐJ0VvO~z:A))詩  =X_˖Ԥlԟ-Cz!"=x{W >>! >H{[\\?]"vhbhp6_Fo$ڨ Mc ĆчVJp4QdSaPK4¹ bP:z0In*)$i؃@5Hi Fk{Ox0<F kh2>O#)HqݫD-2دEk"Z22C\"_"YW^9a|{h_y_:bS2bF d ':- t t?bx2<)2g*O)جLMl4PDzn ˇ&SU,g̥@ 4O=Gx{si{.ihG Yֹ*NmrͰBXԖ|LڊCN.V>86\8?P52P_z7=+J >/dR|?` g'%Zh}Q@ycROh7Įgb˖ai2f\Wfk~j*apy73m"w?|44Ļ,k2ZϝˍO?MK=!mF6MG=7ġ鱾|7̞g I h>sBOe= ϧovv@ PĨc YZϝ O?MZfEqO f8G̻ 7h[n-iÀ aPZ#wDs c4L铝ՠ5|o|BgeK=6)K#XU8\2AKkhkVsk\m׎ a0i!4 @y,!q4 hڕ97q}t$LH֖CMJtp$'KI׍Nu+,%W9V}vZpG[X7n"m )IpxCڵ #-=?l;GO~bFTWt}OgBWhi9v)]NPquT'_/Bŋ&}ߓP0gj=qz2ק]+CmRJذ܅ I]$*~3ǿGe~iYKkݔ0i6N ͼgJt4/^'a87`]} #sd}Tq8֪e|BM^e҈ [yES#YC[@UUh=Of(+CTTGa0҃zʄ2oK8˞uma&=&q_&%D\ ّF~tyy$!" hKgI(B:އgV[\(}R+}Ω|ۗݻٰgO>Yt)v[{aM L~=Mc48cƿί&݂K)2{Xe^еnOG|=Áovl!>/4P,O~Ҥ_q231%mp _ *Dyc#)e}'DO%ՉS}%  H =|i<'FK}׶$SGӘ(1XkBFM0Մ} WZ*o@+4h`:< b =ѬEcХHQjךZqz]9W^Ʉo{X=v,ϧgp2J?s&'^TDͤNVDXu]GtFɛo77\(h]r791;}9ԪU˗s|ΟO>W߾F9 -Iߴуi\E_M3*D;3k1wV;RJO?g ~Sz")~yy\u>JxSh3ZCBMUQ@|!Q~ZC!qEZJ[IRRуZҥJ6Ƒ-p#ITU}t1S KYb ȡ_;Rf=6s4nAǴ9dغ5Ot !UH+a8б#>Ȓy6Kދ=ՁHC6Z?*c:Tz^ -NiBJ 6j2mRUTDS8Oig:1u (ٓ]tߟqJ1 p<|;(I7|[ȯfa^-^LodT~>9–eX[ ۱V!RKJH9|C|aJ0k5״ߟ}j 7=0`"z*=zpMdQlaXͣOr;;Z\L:@>l?l 2 hm|8dfR:v,ܿx16[@^F|1JJHx5^vgٌyi||9gҮz/yyy'K^:p wN&~;2 B Z6Ԑ0ֻi1އ}1pÐ?Dr 709qhnT^aזIZXw-m RR'S_j 'P~%''o۶1?#J)g3l~ZXi֮u~Iz~С6p6*`@QR7R"~+S>|Ls<$?![G}dZiRR i_mFVWǻEE>$6YC'0栅 Ykj&NzQ)-%&M`9q#ixOδ{i7t(k~yV-ٓ)~ *l-[xf ۨ! "PvnP] _4E]Q_hJcnQ$~Xw<`#P,.R{@/>b #6S2b W^}>{oҽW/&x#>K/eL)ӳS'}cpѝw eFwS/ MncC1}L*|Zq1Iwd{q̙\>d7M ƌaڕ9m8ӟczi~RU>m'?/ic92$)X:o33[&+ːbTWK-6m 7ήۮWJʹ3&LAr2\|qHzcl1V~~:y2kg554ZSUT'@ݻ i @߾Y8d0y2G :v4 ՆH߱#Zff1$(YY̘fJCZSC?c0v睜]Sc!XjtS9 `2:)o1T냖f NoZ#HS]a2&O:/b<(A##yqkx]) {7Х4Kst۸V{?Tjl~6q"g)@V|vuL&)K)LJ2cưOxS' D㕷bV0K? | O<BÇSm]nuud.bSLc 4|5MMR<ԿT|a<ƤSNa9@_ΝS1aB,/M4ڒ%!pb p1;  8ORh&\Rw o6LE IDAT0x]@_`80S&BGy4::Kmcň=;r$63WjlWn"^y^1EE^.6m 7pUTHܹ+w*3 0dzoC$>>+}ZT;$ \vVQֻո^{SY h!`) оNQ{4Ț5 tFMI| ֭[ۗrO̜IaSrsi9Ròe!"]\l^alWލ9Y$cܜ2CZ߾4Xt74@ru@m0.;;8bfp8tvDT%&RhЖ- C)mq$v׋/p饬6qԄ6v=$=8n6fplgoDAs3+yRXH?`c땀}v ~ೲ22O9JKjs\q1/|5/y۷K]G;tx=qs9 ɭ"Y# ۍ~R3zqچm/|͜K&OLBt&#Aۺud77KG. =z4^{-H+Cz&$=mC}}w6%ZbJ)*aH&`0Or~P:⊝;8Ah|N8A81v,NWX#ع(]qrr3Y\TD30?FON=۴z<=ĬJ/ yUM-ipݛB46 pޗ^O︃w͸:|7n1+ m-SOes17~D[n۷Sس'˸ᆪOA+WңI'!C$:F## M "'o믗ʎ~?͛%ޝs̡ܹlF~\7o .bSOeW3p 5 _[g!H^4屯u5jAn}_Dzc#(Kzwq's#0O#/aZL}+de KB\Se 99 ֤ ֮%^~?ӇB^VF,kjSq#Q{!uRu+D 'dtIXANcc[?` oB0<sPjӦUYhn|]da >7iл7'p ,/~[쯿kN4sۊB|%E'/?_| sgϦp,\Ss Z4oV2{UU13Әbv2ydC͔)lzDv?ٺ}6&OfWP QVv B@;ώZfc12.8ۈ5Ut_:hZ&gGXzVwʍ0R@IeU3P{Ua;,OQ|ڀ4-55xlSv駳vP?\KC %ư:tM$O-GAGF Qwd vqOe\~9[zpIv"8(,6}'W/N6=zDM!wͤ![ԏC etn*B-GhI@'}F"`еkbOر޴gиq?6_=^۲iک[Eo#2Μ_5j}TiRK"Gq2`kn!iటn[eK }C*!V qJ {}5rrY7%ւt1;]'E jL Ǥcpm5WXR鉑W4vHϦMciD0/]ؘX},}="ʷ"bݎd零bcE }'N)_aXz6]’֮}N!Z߆= ~äy3Lʒ9s}.h(ߘ yR⃗ 8{ݸxTEiU N<䉊gSE<eG5φhJe6]}B ЅzB2Nt;Ǯeru cL٬U,VUcOxTKC$-HZ.Pe -1 e(3uƈzij^D`EA{Boa,P>a px+꧙[WHi*l7IsMx<`z s\xnwB#jZy -s',MmzԻɫmpYL'[?+)~ECNt[~|\T4Oxo,6j6+p4cnߏ{.z4ز緳r' 4mô *rsKm-h¹S%xf(M45LX-i Т)|%/K&t4&u| ggVNb|',em%Ra+l0Gi{8.OsP偓~L:hq4H ',ul]vs k=,skX5jH AoKKbO#eJ'\!y7%M)Ӫ"fYJ3 :vfNDo h]Nu op -:Vl [4> 6}f]bd [*{ +aʃ^h\4-ͣ c,s<4G |0"^.Q?pKH`Wd#"\G(ޅ!J"5!i~\[ԛY 8c 9o?] ZElo;:ơvLY se6Ag#tR ZH4_ 4TiV" sh~V<j:EEN{*V^L봿e*,~ʌvJg6ibKӧ2Һm L߁[ mq(.*WpC0%T14Fdo)nǙZKK1=J\D~ƭwx|C6wߩLSSC^Pb>n99!`Xխ=@딐v?]M?EBz\~jС5|dzd. T   ^׺bϑf2¸ ƕVl`0Jp0(ԁD5mme1CtHtH4I'ncf<96@ "m+8 x7RuYÊbN۷LHE hx3iHrHZLOEl{i_f-+NYlj;;FB_;H@v<1Ļ8 !!ڞ% 4| 䄉'sQE,9H; p=h(U/?va.."Sr&ff)Y)W*S|3W(!pGn WӱgOPD)ISNS7~EV7'3`ǥ> 7,9vhTof=ڞH=ccFk3 HoiPRoa2i}?ĭW I .hQ3[3iaa5q{TK/3%l\F6ĞM)v+ux NunT.@@Pi./HfF P`w݃t@[8a#PVJ#}3 E-C8$D8$Z:-jZբ]^"’eqN- dP}nv{n[DlԢmqƍ "\6E?V`ga㵨 =!Xop(ٿdH#pqҴN\ͼ Yʣ5T[Ӽu`$x.Rr)e@iqw@D%a]b5Vx`DD)]]l۵Z3b5'qbϟ|''E-:%KWD<wh Dٗ#lH1@y(+l3 ƹ':@ ;d9hM}GSgs(D㴵!p8[]H?3U]B3DڕhFڝh6}.46%B,G (Xhy7^ǭü <-Ky kۢ}}x ~++0_EnC!  UB"F]~{7o;[BOs2!'YkbTx#E2:pp R!޾Mw8{eӵo}ر>9݇[҇D 8lVyVWW{y£1 FobE_MB,m(&(8/bu# 0; D9^^7D3nJ<6SjpҝXamy,&E@j."5o`te5Y,49)aqe"E.ӛ*PF0XeKcO!d3HCWV"(}1h:?P ptz"IK!8} D"q Z`GO?VࣉL)++3m4Rn,a 88?p,9rz/l">b?e2ބvu'M. ]_ O*S :"8%5L:ȥ+ V^E+0ale:фFt(?$Շ0\@_DA#>Z!=*gvl+.1'q/&>ǯYG7}J1O!IJn+x Ҏ݊ÂU\E|.6Ƒtni , s s@..c,n"(2YKb IDATJ)5}0 ~&%f<70egIg-Gǘn" ܹA?/bK=nK_Iy'h~7oePzmݶ&"OJ\4?n<~lP<TYk!Jkt}E/{]_3xdG(.|GS Bk8a?jK+Dg*J)x3tgR ޤ/ Lc03Yp#e&c@ `h9bm(t k˽,96\܍GRrx zh1ާ/` XLLD-q~4_s<]Xc:/ѓ{8 CM3YtaW:asY8#|Fz 4x ߙ^BCPOT2oy7Td/ilpɦ 9/IFk>=pq!I2ag*ܖ!i>aĸ :ڄ/HBR#Oq ,"鄋C󷺾2Okh|p/Qߑ":MX=`#0|(yKzSN> иoȧ҈XXʑ\F]t`I,">L28>nr)ǰ.ie6p$p?r&̠3'7o93&|\NcЙ{9a )dsq^>W\}8" n0l`/K?>L2il^K}9&ǭTsvjw4019ɠ G%s\ī@ȇ\@c5Wp+޼︋!]!i8m e(6kLEʁ$piO/bd&! L]L0\4r"4u3 }w$5S(*KZOLb0nCL\P]Vd2,X=",ͬb&M=/3(|Hwv-'X:&fPJȣVݜ_W eIʯ\~ҕȠ'A1f8Ћ}goA1w䥖z\RcVF~jp3ɦҗMڰi1BziI`X?IaNӎ*(@WS\X1D*Jppئ G!(0YN*ф [b=I()rDMGm"Ae"o*} ΥF~kn2{6Cڈ[p/չ?VK۾L^;Oq$_q|46V:5UF֛t|0 r;]܎,3/6SҏM+fԡkRZ^AOї&\<"ut/x 4 i>]D8wpEjN78s0Ҙ``ːa[$~3Z5?Q p%U2((i\v=)4Mw6A&A& eq?ߴk&ND1f+b8Os_X|#p ć|T h­ iN9(F5 iBэr(A8|ILz,a8dRWy h5*,qSq+b#E+'n)gs'RC'r+糐lM/b$ e3( ;rs$k|Ɍ?OYdSJXFgc+;>$jfЗ*dPϗ`F>p`(!/e?P'JSu<>bDz2 QLd+3t)xO)eWbjZ0aw938 Y1\M)5C]+)CI~` ! wqSḩn4$3MƼD3ɦdG!h@zPr(j2$TRI&ѓj*Ȥ 7%c/Yht]dB3 LtK4< i f6KgɡMSB-H>F Cn(?`yf4C)54lJG=.IoQ*|}xCCnJh/4:H9^4r|x)$@>v#?A;O&eE3tjMtG#.tO|T2Hn stfy8x\ZZ#ULѦTʟˑGQoi­澨HonxXpFvvУٹNx;ND@&3PCӗRQps Q2KqnG6;>)Ҁla ul&NTQ'jJ'~YL|%g?E]>?l.&Z^mz(B?|"xt%|FW?UPGv~mxe|@W)KX3|FoPƒ]d7gNiÙ,&}'5&ЌA|M\jxO~d҅ʹ{O&Yn~gWHTq+a6S׈51D,Ca=Ə 25`d%iOk#c(/;39 /WS7|&tm\0H @yX!yb` mwS+hD>U 7kՠ: }vƶ۠q*2E&DR)Р=: >ZB(hWd_q%2$,m#.ȥT)"[NPvIyMhrIFFmӼt:;:\#è}x(V@xA\^?ܰSOuVJŇJQx2S 2<xyZT@ۺ)Ӆfy,Rt "k"QQ4AEAV$pp#)UmЖn}0pP2t26\ss} g[zXğAA:E{?Z{b8-tDiQ},g KsTx |"vqH xfV1|EF)f%Soo9n?bL'n^Vљiv}2~9CWJ)c}xXG>C0X@:ū1B&?Е3 cP/$Hs1 r9Uu8@ AN]91X"nA#,)q ̋8(B" c=(nCmoQ1n` NSE.%av;J N2D2YJjB8w41BUsa5M hHYpHW߃Ha vڗ]<S@h>HjDYxXpFcRpMi{9@{gFm#wN r+L(U};\3yL3/N2Q"d"d9!H4kN k) eYg_3*Ձ;Z<,q2q5/ROL7*:q<,3m4D UM䰒"Ƴ#,yGΑ{; mK=b&a/FD9`>R\1rqXgHřr,ݷXu9Xw>0Ԉ(nH!ע@2D  -I895l4f59 hU`96f4?E9–`n*JNC'ݤ$#D)G VTl>H #urE1b" |hH/$9&}1"xH 48!&Hb30qArzv&= QB-ʻrn;_0`8h?R9 4&\T3KI-1L+))EȴTƙcf194~ycG+(=1v{~)]TݓxI"tr- -Aq@OJgJ@oi5<+:m0MgvN6+.x>8 9,A 킘Xd{#QE*`-Ō0[?]_ە]Et(vSM9[C)4t]h)dp!X \R‰"g3rAK 5v-&1ND >2!45#"yj ;wRa;e3 l8Mf*,S#l0t<PH=pL&UҙvӠH<2G#xG:^I%Ƞ A"F&}4K6PM 즑: / 4G죘L ख़, NȢV(>." jD.F;줎Bxv*N{2G z4I_V3bc~j_^d.#AF-.RJo62G=$"O=^}p ׊EUFZĚ}/8],$8 umqFBJÑ6! yT+C>زp1 L%#2u" ;j?ar/m%š 1>,JEL[_"샎$f|rH,9Zw"lQC u%-帙ƩKNb̛&a.7KiԎ[+<5'e#?NO&V= ,Lл"dp,l`7)Uta=0)uE:+^5ʁb`jy\i SmJޗ6T^M~i⿛ʷV*9Hǃ|U>HzUk}TvtC,u_TT QI'D*ȈpБ _UiAWX:e,0|V<4?[ Z~ҤcIdR{"ȸZGvc<OW0ǕkD܋LR<4x_M:u(PvQxi4wڰOl>~NC,mqxt:TРJ_HGOhI?Cn$:d eߙc&X*Vz'y`N˫r ͱ͕MӡW8,LQC43PjBf߅CveYv MHm2TKeLQ-xT"[ |Dُ#_Z@$R`s~m)ZDE `[,}:j3m'O ~R_CʎV!NkX\Վ~D|?. n$]RD:6'I; I" ݆L:n"Of%e6,HQ~-x0JDxR]E!E@q-Aƺ/R Li)>Ubntl|V8, `8KfOɱ;SAʛв8B_"$ FDE^%dɅfRt!B~D;#y^~CˌSSHn:%xkq8+}58&,'&2dhh !dv"3(/+A;U\J9Tn&\d6ws{-Kxg\2lBPE7Nc XqLKSA\;|TKjC#1 ⯼I6jIƭ,eE+򩧄1&Ml&}pzқM3`FhIacǑ Bpv utl=ft[nJLGUB*f|jī%*m YKCivDOg6tE:;LH*N~'Ug'2̢] e`r7GR.~FfRJ|C(٬"&^a !s fopS^9`-=q`&EEg-hth>9T63Syٌ `)E}./>7rĥ"q( B9Q̃LqSϡT1kb;O2p1.t8 e! {|Y3ͻx'+⌶Z7v jN/B`U 6=DZ+RQhv(3YբT|\^q Z6)&Rs$1[-../0 rt0eNfхCL'xS8oiޥ'&zӝb /qe<؍/)gCs1=,{Q =9Gʠ$Ѥ3wپ 0a' I szvgWՆYԟ}kz:mMUu=z7f)or?OSFjsdO1+yCb6lZiXNrhCF78L>Xd fn6&^' f{(eYO52b'ORNOdsD8TP+c# !獀{;(?vst'uk }k 4YL mWUqW>x_? NeOܿ܆2W vLtLVKXB*/CLlJꑥþKi$(uM$ )sm=8Y#ۗҲ blKS j&^pDoU 輇iD@i=LάQ&7H% P%Y( &&׀:%D&+⨟%) ;.!ma7Rw2aiR0;$d,)}Q-e~^916WR,@4eGJN4Qפz&RzNoc?4K1܀g2f_P2S2g|rT vMUl A!4:˵_,А?QktRKyk={Lj &O}Wn'E|35rcZr< I wrg%黴-ݝ.umm+ʟ%cgrX. ,sIh:e=;JP&uQK ʭ(nݽ?J-g0+(mhUʱu<I܉TFʱ\mNwarvu5=,j/[gIsJȭb wwvZ?J+]ΐ{m3j%Z[dsPfn|{rhe&rr{}7|nHјsCK#7a}nz#$$Z9ePoua*ga, |hmqre'f|aZ~/ex8 GQ&j&20K a6tK#u i)v4[y1$I$pmG?<1Tļ .w66Z'}ބ]DeLO=Ӣ`81wRwbF'ܿGtO]yLIݯ@3O FEm%04A_?Xnn '''ǐrx.@9D I{G@%c7L{'9ItCMh5.yH3W rt20MS!q-##qR8 ii@H)@!t74M@ϾiM!XLF"B =xqpǡv`iJ(L',g !~jiHfAHN'~@0~|0 a۶Rj~?Yz%*9MH @вŽ&M+|ӁP1nQwH)#@TJim,j K(˲B8H4Ip8.-˒DBj&[[[eJ~mT'!qt{6!qx<|w8eKJJv5WRmX<RZK'I$2 9B8SPP.iN<ONUm@N3MS|>0  2}>!YR?a4`)Yiae躉u[Ɍ4`JIY@e(vێ8hh8P$r|f4Z?SJ;Ռia;,50-˲x1MӑRn;HI$۾@x!Gz"*G)pR{٥ MӴ@ !B,F-XU*e jKZe3 !R,&;;P("U8_JqaR,rt]w~m۶ ]]ם qDz,S 3h҃/#Jq!*)1,&;{99 ȨN! =6_}~`frą&'9N$r7hmݡu]- D"%eYaV"CH$,;8@x0cINB?Za#{K r?)exgIwff!g3Y)Ăl2Ӥ4)5M;;ga|i=P$L#%640-3c;ʻ BPr<Yn#jQv1u)Nwƺ-uݶm,!-]םD"a1[MG- 1 .B\ g&'g- ;{`ræO|x̏ϓtwm;hmI[,3yAD"KpBXeYB+H؀DQ#<C7MSd#Gdeeyyymw$ A$Cz 0:TnT$ =&,-3337 Zq)j'rrXn<ؖ9?)>MçijHUe @ ji(хXg'_{-kʆEMwummhk㵶6>6kOK)mEqB˶m[H$N$ҶmiooS:&i`P+--=_Ӵ ()KY ʛ?&m|GWzpIuuORW$HONY۶,k2!'ieY$D"G ?w.(y[Wcg|hm"p/^WFkRﵴܕ]i?Rʧ<li<]TAÀBBkY9+eeq~QsrXMiwn7Sdʑ1,$8hj4 |byyy2RrmmӵbR Ӷm,͝&\2ڱXN$$}%B|JFAv=d!3sDJdDrۍ5V5jkv{'6;`"$ !mOqeYV?x!Bo-b00}6? ً^EGE ;b| ͯ411M75Ra^Mݺ:xNaڍӜiV|㜇k_{-_I)}MdccP{>PBǝiڧQ4]b.))2Ub1?%ZCOLZqj:;)0x=Ōlkme]m-8٣R>l/l>& !e%\2aYeVww3I¦Y"???} !|_̙Bf 묷:]Ǜ+L2K}SXyȶGRF1)e\-!DmS{ -Q]BmoVߙhM\ʭ|GJILytSbGlf,w| cOc2ds'ۿ;Ȝ}}gѼG?R;)d"ϓJ:aiӮB|.2?**~<mHc_k+A !au Dq*ɺZ~}0G,):q~nYn 8NLJe%&{ e>}u].0026̘~Lt;;u/|GV|'6-^8pG>m:?emw'""fv\JbiN}t_B,lo4+gqJ&–'jkw~&Km߲B2$mDZ@ipffBi_̜y+7eNZg}Y>w/QuuZHX7|)GJ[˲~8N*DĶH@D"DggvAB\@a ek ?)-F:Rliу̥>Sk|uQ IDATͩ+&BC*+++M]\]ʹQ"+'v462Iwvb!]''oSH{:@βZ,+$lێ777ۨc-lzoڴi>7⼼e,Zt;ՓYu;Η;ޱ/#-_ly::l,)eKJ8N8D"s'bS{zd )b+=+k~^N޲#65( 0;_s-R~N{J:McA4@1cՆa< ,>#[iݻ 6`IIMW~?8j'MkY[PV9_Q@Bh q't9oڴi}>:sg.@ ?=XSѴH*,z"::^/4m pRhF2F  zd[0+..`fC882/,N/BidTg, .F:U9+¬4j7deei>H$r%o9CO'}cb,X;3~s |vBh..X0&!8ܹgߏ.qmeöN!DeYIUw3d"SQVVg f.XL{!#)1x-1~˲.lRJ);mwb2ښH<80UICII? 7WhŹ:i U@~മxK|_7_i<[ZZ=Nt՟BQ_^?KndG45]] p^u. !273g6BRvhdB4)a/)k 'p0s-iIMAp-h=mm;)a R>RJ=S)e BR|A{/.>/wi/U>F8+I7u4CCh"-s? W ;@9A^iO*C!TÓW_G qb8<<&0+3%zf03|W; l*Y,cM׶tn,4%!D"-S!kGau#^F@c4|bb>`AZwP`Brq^wz'%g~q> kYs.P{ϡq-(0mhܬDa !~D#Ҟ4|>}ח71óEyaYhuk/5Q۶B! HKѶlj6e3iH/۲z)XqffV__fJt*+9!MEB|Mru]B :Q[ M]c-1FiBCH)B| WӴ,Mº~/-a-Jpb*B,4ͳAI$t!DBj%n !@#݃4L>3),3YUftv뙆a"(;PP0~߾Ed@ҥ+p8;(?LcD ێ"2r9B, CJ4 PH3SxHcg}K˿6ퟦNecggȈ/ڶ,YYYq~0jSײ #КHeb=_@G|8*?uSNK)(DB_r$3U ISa>Ž_FJTaQlD!&>u]RjJ Ĕ A!kvFh^/+Tʀb]`X>&сTp;{p+f dGy!5IW3V0!D}j)aH^DAZ ۷w8%?JSKTV@ Po]adrP66Fbim|~ߔ^͌35M+u@JcFH4;vL y?R 326nL'`:/oNOfor0w5 ~'I)u!ޏ4#8nr?"?%G^x?X #DWa6m]ŢE_ιm !4@Bh.;A#C:i 0 1;S^qBÆ"#JR)ea9a5M $'S8)Hs9ɍ=ǡ.F>ZÛ7chX1IT{6)Aˆ5}}_KS_ 55y 3<ơCdƷ޾Y>ҥw"!ix> t7 #qkW,}jfq 2!(r|!Da>/q1dA ֙39ŵ7xM#%%~u>ƏW`in@3UM!ܔۧ<;B?<,]m-:+|^^C Lhhsi~VbL}2oN]c:q'&=rujz5402 4˷V !rYBP0L*&e1j͜W@{>+E^/8 ^mi}9Cgڂ~Z O?i{ /Z[uŗEdPR=5y>!D@&d7>fh: ў ˾ D3|&iZ-xhLwvt@wIq1:\cVSÆ9m12zF ^ii}x eLuB>X'8R4jdp4G`pH liiʁR[ȘɌZt=xz܉v->@$R6TWBFFp6d2hLn`PF=!} Ͳ,=Α?z~OB+iIYFdXpn/ A)eP4mۓT<[DTBܿr%=~;\YV-՜)';)혪q% qnqufhw>NgguƆjxYnR+UWK)SN FJDrjIUee\QZʺZ;p?;ƟcuA7TVrAQY#.7s C_CH0}4ə+ MĶvBi,X̝)5Ǐ?FM<:yy(.n)::ޠ)Ꞥu*߄N^rJKFEƈ3oTim{& i^Hi6@^oPyٙVŢo,*lt$G WYO̦j|9J&l w iRJlƶmq `08kBpyi)8<؈!+ K)} 2$'XW[ TW󁑛nz }U4Mb`pa49C̜45@SKu;~ Y@vBbiZ]]GhkA[Z[wֶ').K).T*H<$N=&)]|aq y~v-G~{4ll:]TJAu}]X5csί$Gh|R:>2 퉃;|o2E"<^SÓuuȦs'gfgsQq1srXCRfw7[[yzC3 ʸ GITySN\1KN럥a=ilDCÆҙOv bj K!Dl5tvuD[/de#;{!k)*:]7ǧP}5<5Bב_8kY_c]t \f/W, uw Fq r x}-q[JRZ)b&J(7MnjZq空:6׳w/3M ;,!'ML#mmlk#%WQ 51avB02(+nv3a=Ϟp%f)@n[ߧiQl;n~b8AflJK/w# ̜k?{0Z'q ˞9xA^hB&$H8B!V%C*9afos?;DJpR'Ip7%p6~Lzد\+*m;]aDMMOL2{~ pJi%*FC,HHVp<&˧idaNmNFche ]Ymw}H?★‡i,뷕 ya(|>4MszAR3xF=a qC-Aɨ {a6Gp#=BxFqr,4-Q K)%u]w~%lNK␊*?U)1  E"\2q;R4'(!:LL]'iH bDl܏- AQ0ȼLgd ;E99¯MتTnz̹dfa$vljh&!yL=+H~7=x0B `>]]eTF=,79sy' 4A.^2ggRR*oZ FAlu3Ғ]Pͬ[gQvu᪑9R~h5,!XM3hnnRq& >k X[Pзlڤ6D"&}H@4= S0 >MFRQ N٤YSj[vYS8h`PB!4CKvD΢rLܤaC{کJ"|r EQO&C&B ?aд-B!F9|`% %wvה3ĈI@ݓu[BaI)m!-tt]O5SLJ)ufdd0##{=xaBHS%Ѷ}ns2(kHt$ W &BKMT\_A>7"tAl2.hЀwQ䁓p#6F"!ZŎۄC]kqD_\L<"mIŬgH): k~˾lLzgEi6#%ڑS&I: &<~#gq:Fx閗Dh~f32}?`Gm Q|Q1 eWv>܉Ґi#&}:e^LR'TR>ҟ< &{ɄY}k~U?_EǞ!ALvO(VzP,51 X%CtJ/W1f|bE, 1Si0r'xppaqH: o98D/IE>YB}!b6;́yմ 錢"8O=)5O5H$ Hjjvxq()~ 3^ J o ]fNw8{#/Sxn!+_Ui!yyjVҠ$@w7<飪 .^xaR]H{߹Bxzo0^?٩䓃]npR7'CAvy dCI]tЁu|# ADiiXyaoeH,&瞫f ǎO@K:?c\t"(MMJB\x",Z[ٳ!7Wب]Y ]Oڹs[NO3{6p(ofTY{NMafزZރճ9u3OddWY\Ugٗ4$B5P,EH W M7)EWr!|n>!^⥾:|`?gQj먤o)j&˹yGʎ v7s*>ͧ{Q7Otm {=Wjm۔p_phM7Ej*Y_g׾V5~4%=oWR3aF% /W[|CL[P\ ")ʘ*3Ƒ#Yw@4gyIZ)6 ە>!#ȰRO6mR<*PB a={6\{NJHoXqr?)0o|B(:A$IeY8C,#CB3Ě_\r$8sO Y݇4*|tgTPt@wnt5XC<[ϸiv8(\tQ/*p2)~>5M k *Rs--j ipᅊl[ R+I;v(MFkka\u:_̜AW<ʕlJǍ/XIqJ0}Ȥ}bɄFiE,K HD5k)N7:jRݰw5&,nJv8kL\I* R+pJ*tA~i/pC<3tAYQ" XTFO$SB r)d``CuظTo#OD;#gvH={ 5|s}lڤfܢC)O ٻWS& !嗕T66*BpI_{y$K9}$"?Ғ?#R )G{+ͽ,[kb8tH5WCv2s̟BUIG<2"@-I$EyK'Ȩ#c\!XD6}Χbf^ IDAT%+Yvsw3<^RJiGy=~O?syi.5a;<>|\}R͛ӲGCNmZ[{ڪ>;:?5u$tO<+"p845pڎtϕCeGX. zWM~e/m~$i_H$2p4GU%䤚)nU͵uC*梬ooZtOpj>l.[sp!^~g*{Sk@+x&A;:Qq&12/,a ty@ut,fxB Mlv3{q硣 ҝట88}HL>|c^y4$D0=e9]0j=ΊQ[e%\rZgƍJ#J+ezսʜ`h$#COrON_BY}.X{nV$Y\$ԁ)=8~4 4qAgg&À%KlȚ eSMmr9iRZV2IL^&N\W}0wkOR_vW8 \ w_r|8w<X|xXjn^"^ !8jX3oIz[ie;Yְ"y7Bl8g=sU=a)Kh xg(e,U]e?M}_;VxK>ex1S"/66#T݇׾6jn~DߑR} TPRב.~;j?yνdFfWDB%2O$G}B3F<:<& Z]Gvߙ=kr$!chGs<.QѤ2)xzȄۉH~3T3s=d*PvOGUhbv.LRu e~ m60$/7%,!/1.vD39O(4o0Xyg(Nq=׳4@hn18㣰=c$qqǑHD$E܄@: jkkIYL7 ]WYV)n%Nsp8p,`WWInRJ%N2"T 1qp#BKx,ZIPW/oW_͙ *eU`Iu<nj'^]`rm)-p[k2_` !;+lTLr(H0%@C|cu˭g]MGP2 HD!MĊ[l&l|bΈ唻@')dkV&zK9\uѩhIg(9i'޻&CNk.FKB&fϷ&j[k+srҳ;57S>ֳ'$ .y]<&Ý"hP(#WRrEEoS_׮U+fyammNo\KT!y}48r44l@JRF )eK)S7>]wՄRw}V;:b]-B-ݔt7Q G`z2aL?>lcH%qBƥV':6.Tf^E $}I_CM2#zsND9AfǬf5OTBRnvw$TC"JFCz4!8Ou][wWBKGUkҹr 1㒃nw&@BJH ,KB됴;H$ۺU?';S:qǶ?A$(e /(xe_:06l|;l64]"q?c)mjٶ$F7%@HTiJ2uFڣEh,~ڪ$#y+BU/°IA9d{KcDq4TwBxY4,`5G.F:;}fg% 2IQ6 2B "#Pò`O ;yp^ X?Dy;!h[-¦&M#Kު:y語Ւή .{vOu|;.* Oi|_B _ƗM|qGq? oW}'Ǖu7*k7ƕ/d{.U-B4M~~{ɓ߿ާK/~YBD>;%"Zk㙇w ˲IhkZTJ},{s~' VW?^x'7p8)-:u~tmmBd2k`2ә P66nϟx߂H@."9\b`nd-\3Zk[Pz17Œcfm|gDdr?s3`꺭D?'4()`(6ߟ'o[Y,@_ůɞO)ҟOxʧVB.13v4Sڢ(RToӈ"wm1'Ry@V"R(43f~7@Q6I[T eqEo>?w#?e]R9~2wzm^zo7ӧAwD4>+a"RjMQ pv `3c̳U3E6d^wpe ^A ṁ$NI kzCi*QLD.9t#w'W^|']cOoQLEd:ڮ[8YYE],^œtBH&"R_ٳOQ&  _u>PA_GDб11f<Jcb1ZV$3sKDZ\}OP˟-dφC*>ϣ&'2\5D: s[/1p&#x ~ };u-S_;F| 9rv1p8r1[VJ`aV ➯9CEPUjћcnm_ vIn1&;"-"["ЮvLxY눝R] =vJDa}0x}̓|@ ӯ"/N5>Q#zo#@Dvh`acٵ1#ueƂiX^WMTg'o hSTw+)nY2Gp w {pVx៿OENvE#"Ƙk/p@YDDm"^vO9<:ǡNw.F :~]CD[uHZ;ZYyL113("u?3kHKOә3OBj3Woܹo(:WwehvYkY-؆T#*$T)U%El|refUS,>; Y1ml|s8wx"sچ2g:nNYpV0>GqZM8+DLDDO33kk{?\_?72ic!OUo蘆1_-:<e9 ~{ @5(I4I*374+Vh8BDчՍG8'|gDNE\pҷӶ|+">]F33F[>kcL aQ`0qXAd$IFc)M#Qw8ß=|뻏q {@Tu'9'z׺ZD|w{"rZk}s!˲~8]z DV+I$AD-f^f"ZLjDtO GmܩvG67 כQ0`ҦŴ=WlcEkZgEQvwwKxk<,--%iVJD T -9а"f:X]}cy4Q|[K>vv^zZ`knu0!KL=MZkBzZ뮁<w4,*vZV8n5U"::NDwDt? :O}x1[X)#OY=#kmvDdE9#";3[%RDVJR iFQ؇C"̇0r }YI|fm 3kkXG#/76F{ h,ԡdDätXk;ڮ |4<:_zGQTJD5TZDDDP'nXsڕAb4E Z탷!" d }  d$BkDED]KJ/9aׁ]Ƙ6֎*"h?~<]}t5/_[..pFmˁck7Nh48TfTTT5㺵m ,Huj?O,-V ۸@|@[;skvwq.N`sOkcyQeda^@X1&Z{^Qƍi&J*C5&&7!"u"9_6h́f45iz1a:*5aT*HE!C(c8<,; Fs0& &=q~`Ac,1vlQ2==c̀2kZ;FEx<^fi $I֣(:f=0)Yarh @f_vo.'ڸAz$|uqNm^_b" 8\(rZm< n+P+++%y:.m|j v13>hLD[-MS)Qt$Flp! 8exCi,Pl_Yl #0:KD=cLeC8(pU𠔊80s5"9 `榈4<B @RIYu"j&O/#`'`m@BLh)r "^0 ! 'wDdITf\0EQXknLn# sjJ-+֘cֈh1MH]{sYb?8g67/ڲWZy_M71梵vCDݢ(n[*F .1sEQ@Q)p0L3W€QձM]{EHM)); ^`-MQS 13f̈2cd ZcPkȴ% 87!޲8LJ LӃW#Œ90 dƘ!:en!xfEQqGQTQJ.Ww k.j"RuLHHTXH-0gXxMog.q_~߁,z:{F~1Z9Sv:3aa -//'iV(j8̫);&G/9f:Q6~p*{%w^`U~jnD!Fp7N7/LXw?,u^:DtZT k+UwA>bnp wvZ932Zb0yo.BrՊ9vW*T`+·-āC5s1&""2A(],{(*/D<$2`3LoT0)Q"c ){q а۔uj턙NkD."kD*"$'(Do>x;2 &p`uƿ[n#=tؑglۄ{tNHmȦvu`bk˷ b5fifQJSWOq@/6))7g >Gh3 2'Swlux6à3Ck`33MdC?t"EQcxl*7qmӱ(fRS̩gD0 އla.H_ED-KWa|4qYp*z :%B(giUQ@xYksNZZ[ښaa#iFV+ak3!"ZU׾!dj}%=rcmn=xZF~ʾR'~Qt <}}W.>}g~$3`35 N綯eNH@D%(O!u'qA8A\Gwg^,p NHmB%YZQaɭ>`,p8<ABnZ\T3G%( OUƁ/C^QWlvFӰ5qY){؃Z[2sa6hc&"=ڌF#|XI!Mȵp\u& 8,h׷MK3b_.QMU(]ODH1cO #lY=TFflB`v DEW|D{γ^ ?`i-?a6xjkc8c_fTE$ ͼ,u6[µk,/9Y 6< h*JuithXZZb8VJD3G"qc"8P;߅ȕ }S_U`8Xk-"ک/RӌO)3kkvAEa8.0DVDtyЂeX ժj6R*87e@T:W ˗t}f 3鎪gý$U_T]!lψO C#c̨,Z[a?`3qsRaEeYFq"DDad %"3+_pPv eNW;8uq"2.y* VDǺ,2c]:  W@V("fVq+5+gDZֆ> SRXf6"bEA_4Dds`1zҍo4Z#",KEF,K 24,law2xzjQ$$]^U_w68 D<[lW#yd1 li af: Cfk }>L;1cɵe׮{,0VYEQDD)YgF> a Ӆ\ fk f@sVfw`FD1ƺ,U rl@xRb6p$(X)Z֪J%"blc })7tt8 lXc%"̖mQ/J)[UJYc53[ei֖m6"ɲLR!Paa?&R("(Ctʝ6@1k|8dik]f5PAIڟa3""/zXD4 ڴskm)"1FgYfoզЮlZFZkJ1((ZN(`(|틭SA)E3 a:3%"ZO3OOdzzEEt:

    [% CHOOSER_LABEL %]

    [% form.field.${CHOOSER_NAME}.field %] [% form.field.module.field %] [% form.submit %] [% form.end %]
    layout.html000444001750001750 7411413636115 22672 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/chooser[% part0 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] index000755001750001750 011413636115 20036 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenempty.html000444001750001750 4411413636115 22155 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/index index.html000444001750001750 76311413636115 22156 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/index
    layout.html000444001750001750 57511413636115 22365 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/index CAT

    CAT

    [% part4 %] login000755001750001750 011413636115 20037 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 223411413636115 22172 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/login [% IF form.field.debug.value %] [% USE Dumper %]

    cat_locale

    [% Dumper.dump_html(form.field.cat_locale.field) %] [% Dumper.dump_html(form.field.cat_locale.value) %] [% Dumper.dump_html(form.field.cat_locale.values) %] [% Dumper.dump_html(form.field.cat_locale.label) %] [% Dumper.dump_html(form.field.cat_locale.options) %] [% END %]

    [% form.start %]

    [% lh.maketext('Login to CAT') %]

    [% lh.maketext('To gain access to CAT, you have to enter a username and a password ...') %]
    [% lh.maketext('Login') %] [% form.field.cat_login.field %]
    [% lh.maketext('Password') %] [% form.field.cat_password.field %]
    [% lh.maketext('Language') %] [% form.field.cat_locale.field %]
    [% lh.maketext('Theme') %] [% form.field.cat_theme.field %]
    [% form.submit %]
    [% form.end %]

    layout.html000444001750001750 6011413636115 22333 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/login[% part0 %] [% part1 %] [% part2 %] [% part3 %] perlversion000755001750001750 011413636115 21277 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 70411413636115 23412 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/perlversion [% FOREACH module = DATA %] [% END %]
    [% lh.maketext('Name') %] [% lh.maketext('Version') %]
    [% module.name %] [% module.version %]
    layout.html000444001750001750 27711413636115 23625 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/perlversion[% part0 %] [% part2 %] [% part3 %] [% part4 %] module_custody000755001750001750 011413636115 21766 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 314611413636115 24124 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_custody [% FOREACH m = DATA %] [% IF m.catweb %] [% END %] [% END %]
    [% lh.maketext('Module ID') %] [% lh.maketext('Module name') %] [% lh.maketext('File system installed') %] [% lh.maketext('Database registered') %] [% lh.maketext('CAT-Web Access enabled') %]
    [% m.name %] [% lh.maketext(m.real_name) %] [% IF m.installed %]
    [% lh.maketext('yes') %] [% ELSE %]
    [% lh.maketext('no') %] [% END %]
    [% IF m.registered %]
    [% lh.maketext('yes') %] [% ELSE %]
    [[% lh.maketext('no') %] [% END %]
    [% IF m.enabled %]
    layout.html000444001750001750 6011413636115 24262 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_custody[% part0 %] [% part2 %] [% part3 %] [% part4 %] serverinfo000755001750001750 011413636115 21111 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 774411413636115 23257 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/serverinfo

    [% lh.maketext('Hardware') %]

    [% lh.maketext('Operating system') %]

    [% lh.maketext('Services') %]

    [% IF DATA.disks_ar %]

    [% lh.maketext('File system') %]

    layout.html000444001750001750 6011413636115 23405 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/serverinfo[% part0 %] [% part2 %] [% part3 %] [% part4 %] status_line000755001750001750 011413636115 21261 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 337011413636115 23416 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/status_line
    [% IF SHOW_DEBUG %] [% END %]
    [% lh.maketext('server') %] [% SERVER %] [% lh.maketext('login') %] [% LOGIN %] [% lh.maketext('date') %] [% DATE %] [% lh.maketext('version') %] [% VERSION %] [% lh.maketext('locale') %] [% LOCALE %] [% lh.maketext('theme') %] [% THEME %] [% lh.maketext('session') %] [% SESSION %]
    layout.html000444001750001750 3011413636115 23552 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/status_line[% part0 %] [% part1 %] header000755001750001750 011413636115 20157 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 127511413636115 22316 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/header
    [% lh.maketext('home') %]

    [% lh.maketext('CAT - CipUX Administration Tool') %]

    [% part1 %]

    [% lh.maketext('logout') %]
    error000755001750001750 011413636115 20060 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 265111413636115 22216 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/error [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Error') %]

    [% MSG %]
    [% lh.maketext('index') %]

    layout.html000444001750001750 14011413636115 22373 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/error[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] module_switch000755001750001750 011413636115 21575 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 310111413636115 23722 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_switch [% FOREACH m = DATA %] [% END %]
    [% lh.maketext('enabled') %] [% lh.maketext('Module name') %] [% lh.maketext('Short description') %] [% lh.maketext('Action') %]
    [% IF m.cipuxIsEnabled == "TRUE" %]
    [% lh.maketext('yes') %]
    [% ELSE %]
    [% lh.maketext('no') %]
    [% END %]
    [% m.cipuxName %] [% m.cipuxShortDescription %] [more...] [ change ]
    layout.html000444001750001750 14011413636115 24110 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_switch[% part0 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] [% part8 %] basic_object000755001750001750 011413636115 21336 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthencreate.html000444001750001750 256411413636115 23633 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_object
    [% lh.maketext('create') %]
    list.html000444001750001750 351411413636115 23337 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_object

    [% lh.maketext(CIPUX_MODALITY_TR) %] ([% form.field.letter.value %])

    [% form.field.abcnav.value %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% FOREACH object = form.field.data.values %] [% IF object.SHOW_OBJECT == 'TRUE' %] [% form.start %] [% IF object.uid %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% END %] [% IF object.cn %] [% END %] [% form.field.mode.field %] [% form.field.module.field %] [% form.field.letter.field %] [% form.end %] [% END %] [% END %]
    [% lh.maketext('ID') %][% lh.maketext('Lastname') %] [% lh.maketext('Firstname') %][% lh.maketext('Password') %] [% lh.maketext('Repeat password') %] [% lh.maketext('Action') %]
    [% object.uid %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.field.password.field %] [% form.field.password_repeat.field %] [% object.cn %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.submit %]
    layout.html000444001750001750 7411413636115 23637 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_object[% part0 %] [% part3 %] [% part2 %] [% part4 %] [% part5 %] module_browser000755001750001750 011413636115 21757 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 156411413636115 24117 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_browser [% FOREACH m = DATA %] [% END %]
    CAT Module ID Name of Perl library Action
    [% m.name %] [% m.provided_by %] [ [% lh.maketext('show task') %] ]
    layout.html000444001750001750 6011413636115 24253 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/module_browser[% part0 %] [% part2 %] [% part3 %] [% part4 %] externallink000755001750001750 011413636115 21427 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 31311413636115 23536 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/externallink layout.html000444001750001750 13411413636115 23745 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/externallink[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] logout000755001750001750 011413636115 20240 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenlogout.html000444001750001750 30411413636115 22551 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/logout
    [% form.start %] [% form.submit %] [% form.field.cat_login.field %] [% form.field.cat_session.field %] [% form.end %]
    layout.html000444001750001750 4411413636115 22536 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/logout[% part0 %] [% part1 %] [% part2 %] footer000755001750001750 011413636115 20225 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 236711413636115 22367 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/footer [% IF SHOW_INDEX_BACK %] [% lh.maketext('CAT') %] [% END %] [% IF SHOW_SCRIPT_BACK %]
    [% lh.maketext('back') %] [% END %] [% IF SHOW_DEBUG %] [% USE CGI %]
    'VERSION' [% VERSION %]
    'SESSION' [% SESSION %]
    'old session cookie' [% CGI.cookie('cat_session') %]
    'THEME' [% THEME %]
    'old theme cookie' [% CGI.cookie('cat_theme') %]
    'LOGIN' [% LOGIN %]
    'old login cookie' [% CGI.cookie('cat_login') %]
    'LOCALE' [% LOCALE %]
    'old locale cookie' [% CGI.cookie('cat_locale') %]
    'PATH' [% PATH %]
    'SHOW_INDEX_BACK' [% SHOW_INDEX_BACK %]
    'SHOW_SCRIPT_BACK' [% SHOW_SCRIPT_BACK %]
    'SCRIPT_BACK' [% SCRIPT_BACK %]
    [% END %] layout.html000444001750001750 1411413636115 22520 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/footer[% part0 %] basic_assignment000755001750001750 011413636115 22240 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthenindex.html000444001750001750 150511413636115 24373 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_assignment [% FOREACH column = form.field.group.options %] [% form.start %] [% form.field.letter.field %] [% form.field.module.field %] [% form.end %] [% END %]
    [% lh.maketext('object') %] [% lh.maketext('action on object member') %]
    [% column %] [% form.submit %]
    layout.html000444001750001750 7411413636115 24541 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_assignment[% part0 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] group.html000444001750001750 200611413636115 24415 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Zeuthen/basic_assignment [% form.start %] [% FOREACH uid = form.field.object.options %] [% END %]
    [% lh.maketext('object') %]: [% form.field.oid.field %] [% lh.maketext('action') %]: [% lh.maketext(MODE) %]
    [% IF form.field.showlist.value %] [% uid %] [% ELSE %] [% END %]
    [% form.field.letter.field %] [% form.field.module.field %] [% form.submit %] [% form.end %] default000755001750001750 011413636115 16731 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpljs-head.javascript000444001750001750 436611413636115 22502 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default form.css000444001750001750 103111413636115 20536 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/* FormBuilder */ .fb { background: #ffc; font-family: verdana,arial,sans-serif; font-size: 10pt; } .fb_label { text-align: right; padding-right: 1em; } .fb_comment { font-size: 8pt; font-style: italic; } .fb_submit { text-align: center; } .fb_required { font-weight: bold; } .fb_invalid { color: #c00; font-weight: bold; } .fb_error { color: #c00; font-style: italic; } default.css000444001750001750 237711413636115 21235 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/* */ H1 { font-family: helvetica, arial; font-size: 22pt; color: #1c5493; background: #cccccc; text-align: center; marin-top: 12px; marin-bottom: 12px; } H2 { font-family: helvetica, arial; font-size: 18pt; color: #ffcc00; background: #1c5493; text-align: center; marin-top: 10px; marin-bottom: 10px; } body { background: #7fa0cf; font-size: 12pt; } table { border: 1px solid black; } tr { border: 1px dotted black; } /* FormBuilder */ .fb { background: #ffc; font-family: verdana,arial,sans-serif; font-size: 10pt; } .fb_label { text-align: right; padding-right: 1em; } .fb_comment { font-size: 8pt; font-style: italic; } .fb_submit { text-align: center; } .fb_required { font-weight: bold; } .fb_invalid { color: #c00; font-weight: bold; } .fb_error { color: #c00; font-style: italic; } nav000755001750001750 011413636115 17515 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultabcnav.html000444001750001750 11511413636115 21747 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/nav [% FOREACH letter = abc %] [[% letter %]] [% END %] exception000755001750001750 011413636115 20727 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 250411413636115 23062 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/exception [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Exception') %]
    [% MSG %]

    [% lh.maketext('login') %] layout.html000444001750001750 14011413636115 23242 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/exception[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] img000755001750001750 011413636115 17505 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultexternallink.png000444001750001750 60411413636115 23030 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME  CIDATX ! atqa7DZL%w1"bcT&* /[Z-`KCbnF3b+JR.F~9 Vm*'q[LF%9q&4Li_!4-uj"haA쿫ڗsWwtYʶ}9P0a{QڱiT[ l?Wmwۻn{>@ ![~fZ̐=R;HPJ IENDB`chooser.png000444001750001750 46111413636115 21773 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`n pHYs  tIME  OIDATXA0EBd2KOҫx9RghZ4)6TّP~ɜf'hOx(҄ ¶4G&6LPDe_r4RI̒_Ux8 vAZtYpe͙)~T[겚@15ϲ,C @ H|)қ]2Ţcl$W :$@oW:NZIENDB`assignment.png000444001750001750 123011413636115 22514 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00WbKGD pHYs  ~tIME (lb%IDATxZQ L:MzxjއJqvdD+qkQO7ED[(K>dɇs%&I -Z}gFנKMU8\>=w!>V@'Z]9>3`Bcr$fO}-6ZN0I;LRw[Q4:J\ZE:Jft=:ƶ|gTFɻT0>*W0>&_Bg"\r I ^n""`y"jpnf;c:dveIENDB`serverinfo.png000444001750001750 50411413636115 22511 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR11KsRGB pHYs  tIME6B9IDATXQ0`hЎx5戌}{TY)r=ӵ醚y=c=l(qzL` &`3SWid3o^j3M"P_8ŲEM TbΌs]$JGh9/- j`jV@$: xo-=sĄ܃3{< ӝf!1&-\8"#&DY',_x黣xbbBe4^q5ܐy2u-xʀwi0d˄E<`,! xahMxfⲇi8:QZIT[Jypo\3q)/hLSB{Лȣ =&^}5 /E;j[m#VZf F,YYL|7M^6MDӟ=Fh#m~IENDB`group.png000444001750001750 115311413636115 21504 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00WbKGD pHYs  ~tIME  h]%IDATx0 E}*6:L:P~м|ڎiUNl Fź."Ng]@<+ac!+kArpZ$2pR ĩnx  cR6ʕ3O=A@X]1Px٬XZ^Z/p$h1) xkWcVm>: ȿၑ5+I`$0F,(>zm9.6@D|PmO+DVk!uI KVwC(4BDݘR*-n{P N&TuZHqZBثc=$=Au9O![3K?Jm ! .Se8Zs4KbBgsJ:EM"|b Q:vA`,)WN̯(5Dˈ =4N}QW݉1r\>A f:01|aBcGe7{+Yw voVpe2tnVXZ޴8 D6bGw/UX._:'nd{@/_ xȑٖ,k;Dc>]|-b^6\9V[|/U-Fn[^[ ˕4o9Az5iRP>kV7Z]}q`T N:w 1%Gk8yŃ>5,- ʴ!ʑֳΛ¦x ."y>;&Xi~=rU6gK3XPqJA}֋ᥬBT5t¡7Л{'Eo;xf,e̷ ˆ$xI n^w݌֌Cfsՙ)1v)?,ﵸ/~0'f ǓqQ"S,qo~[ӑ0KV^ټ?yRrt:ccc@hž!&pS2@zm}C`ϟ ׯ9Bn8"""Mya%ěG ok`xἏ.ü|x=3Io1*2z"|'}KxGp= ~ݺut4LO +[.b Aoo ;]^"~|fd{mܸOa_UCWO Y9ܒg>r>W!ƇYL٩ߛKvaG$eуEUSbkjO(؝gݝS9:RTxV==/5ܐtP^EО9ofkZ:R%Pfɇ- n SH!>S=cNy/3S`;D(q.VchJ0 iJ[C=V a»bKx YM"͑eLT#RKݨ2$֮];[EVjq3rU8̻%kb48U`{JS KP3]Ip0xZ+AB ]օ!-H1aH,мLm& }&PR^2HOycVQ$X0 df>X]]7kJ7ÍXӨM!!2L奷jy~Æ 6mjnnz'ϗ(<(f@჏+|B[͗|炫KAKVKG{? F} BKu \W'XT"*DP< m0F$O{0+\4nRQ`/UK?F'YTZ<+pE,1*^V!F/`kvl łx7`|Qv2M@੒.2tSˮHøcZ M7R^TpR0_z^֗+/@m_ə@BM Cn6xA!: Wz⍈/O^J[0!NG?z“?KsuB~IBD'm gd BwXWUM+^3nx5΍.Oϔ^sɲbKDŽS} ~ W׍$Sls"iymmP8^x;ߋտHNQ/Dy9)dNP,@S8Z!} jN@IK!| 3|9_g?O;5&zTXtcommentxs.JM,IMQ(,PHUp R# ߅zTXtjpeg:colorspacex3338#5&zTXtjpeg:sampling-factorx3010a=/OIENDB`setup.png000444001750001750 74211413636115 21473 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`nbKGD pHYs  tIME .N(oIDATxݙQ E+q,-;EhӉ^@6䜟Z$3Q$Ȥ0qS LQF|”sVo8 8{]Tkrыœ-AD2M^ hZ6|}+ѲD`BK H]yHqt_i R T"Gcw!IB#@%8t׳䬦1)$GXPmä:BxTL]\ Uc j:k[%y2p2ia>.wdLfc2 hs 7 K?N/O1?n:GwK`k7%kIENDB`perlversion.png000444001750001750 102311413636115 22714 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR11IR_sRGBPLTEU~ pHYs  tIME ._IDATw @@@@@@@3@ C C @ @f @l @<@0@0@@@@@@@@AA@@@AA@@@@AA@ Ύ4atIENDB`skel.png000444001750001750 50111413636115 21262 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`nbKGD pHYs  tIME %\IIDATx mӅ ϑhHQi5Ǜ /wGB!ꛈEԦlKO(- LlNs6dюHn~cYw%(,bHN@Yܪ*V]]+'8 ;dٟäBOe z@De245bYW2Fȩs0)[^1~OœMT^IENDB`module.png000444001750001750 46111413636115 21616 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`n pHYs  tIME  OIDATXA0EBd2KOҫx9RghZ4)6TّP~ɜf'hOx(҄ ¶4G&6LPDe_r4RI̒_Ux8 vAZtYpe͙)~T[겚@15ϲ,C @ H|)қ]2Ţcl$W :$@oW:NZIENDB`basicobject.png000444001750001750 72411413636115 22603 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00WbKGD pHYs  ~tIME 1Ʌ'aIDATxQ0 D7/8F_aTh>M TbΌs]$JGh9/- j`jV@$: xo-=sĄ܃3{< ӝf!1&-\8"#&DY',_x黣xbbBe4^q5ܐy2u-xʀwi0d˄E<`,! xahMxfⲇi8:QZIT[Jypo\3q)/hLSB{Лȣ =&^}5 /E;j[m#VZf F,YYL|7M^6MDӟ=Fh#m~IENDB`admin.png000444001750001750 57011413636115 21422 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR00`n pHYs  tIME 1*8{IDATX[ Da?2X~`AvrHLiә Sf4ˊXPj)xEu4.W0Y0\2Ų(Ov֤cAIumԔFe-@]\Wśڶ+ !B:&#fx@{HΤQf+35_ ?W bۗ0vޙ#l= Ĵe_#ֱ<3O͵kx>eSg'CFl dJҾ”-1뫴f=umůX,|IENDB`role.png000444001750001750 72311413636115 21273 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/imgPNG  IHDR11K pHYs  tIME  [5 rIDATXA EI y4Y0m1I0UBl3?"r x/>.N ~@w,\(xwY`SQtz-51Pi#J;}Q.j[ްHAcq"6ƃ"yTټ#"}2fٱ5(…S [% IF form.field.debug.value %] [% USE Dumper %]

    Chooser title

    [% CHOOSER_TITLE %] [% CHOOSER_LABEL %]

    Chooser data

    [% Dumper.dump_html(CHOOSER_NAME) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.field) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.value) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.values) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.label) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.options) %] [% END %]

    [% CHOOSER_TITLE %]

    [% CHOOSER_LABEL %]
    [% form.start %] [% form.field.${CHOOSER_NAME}.field %] [% form.field.module.field %] [% form.submit %] [% form.end %]
    layout.html000444001750001750 20411413636115 22707 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/chooser[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] index000755001750001750 011413636115 20040 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 344311413636115 22176 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/index [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    MAXCOL: [[% MAXCOL %]]
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    PATH: [[% PATH %]]
    LOGIN [[% LOGIN %]]
    LOCALE [[% LOCALE %]]
    THEME [[% THEME %]]
    cat_login: [[% CGI.cookie('cat_login') %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    lh [[% lh %]]
    [% Dumper.dump_html(data) %]

    Icons

    [% FOREACH m = DATA %] [[% m.cn %]]
    [% m.cipuxName %]
    [% END %]

    main simple template variable DATA

    [% Dumper.dump_html(DATA) %]
    [% END %]

    [% FOREACH m = DATA %] [%- "" IF (loop.count mod MAXCOL) == 0 %] [% END %]

    [% lh.maketext(m.NAME) %]
    layout.html000444001750001750 25511413636115 22362 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/index[% part0 %] [% INCLUDE tpl/default/header/index.html %]

    [% part1 %]

    [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] [% part8 %] [% part9 %] login000755001750001750 011413636115 20041 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 263411413636115 22200 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/login [% IF form.field.debug.value %] [% USE Dumper %]

    cat_locale

    [% Dumper.dump_html(form.field.cat_locale.field) %] [% Dumper.dump_html(form.field.cat_locale.value) %] [% Dumper.dump_html(form.field.cat_locale.values) %] [% Dumper.dump_html(form.field.cat_locale.label) %] [% Dumper.dump_html(form.field.cat_locale.options) %] [% END %]

    [% form.start %]
    [% lh.maketext('Login to CAT') %]
    [% lh.maketext('To gain access to CAT, you have to enter a username and a password ...') %]
    [% lh.maketext('Login') %] [% form.field.cat_login.field %]
    [% lh.maketext('Password') %] [% form.field.cat_password.field %]
    [% lh.maketext('Language') %] [% form.field.cat_locale.field %]
    [% lh.maketext('Theme') %] [% form.field.cat_theme.field %]
    [% form.submit %]


    [% form.end %]

    [% IF DEMO %] [% lh.maketext('Demo restored') %]: [% DEMO_RESTORE_TIME %]
    [% END %] layout.html000444001750001750 13411413636115 22357 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/login[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part1 %] [% part2 %] [% part3 %] perlversion000755001750001750 011413636115 21301 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 124111413636115 23431 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/perlversion

    [% lh.maketext('Perl Version') %]

    [% FOREACH module = DATA %] [% END %]
    [% lh.maketext('Count') %] [% lh.maketext('Name') %] [% lh.maketext('Version') %]
    [% loop.count %]/[% loop.size %]: [% module.name %] [% module.version %]
    layout.html000444001750001750 13411413636115 23617 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/perlversion[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] module_custody000755001750001750 011413636115 21770 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 412411413636115 24123 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_custody [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %] [% Dumper.dump_html(DATA) %] [% END %]

    [% lh.maketext('Module Custody') %]

    [% FOREACH m = DATA %] [% IF m.catweb %] [% IF m.installed %] [% IF m.registered %] [% IF m.enabled %] [% IF m.catweb %] [% END %]
    [% lh.maketext('Module ID') %] [% lh.maketext('Module name') %] [% lh.maketext('CAT-Web') %] [% lh.maketext('File system installed') %] [% lh.maketext('Database registered') %] [% lh.maketext('CAT-Web access enabled') %]
    [% m.name %] [% lh.maketext(m.real_name) %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %][% lh.maketext('yes') %][% ELSE %] [% IF m.catweb %][% lh.maketext('no') %][% ELSE %][% lh.maketext('unknown') %][% END %] [% END %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %][% lh.maketext('yes') %] [% ELSE %][% lh.maketext('negligible') %] [% END %] [% ELSE %] [% IF m.catweb %] [% lh.maketext('no') %] [% ELSE %][% lh.maketext('negligible') %] [% END %] [% END %]
    layout.html000444001750001750 17011413636115 24306 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_custody[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] serverinfo000755001750001750 011413636115 21113 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 646211413636115 23255 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/serverinfo [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    main simple template variable DATA

    [% Dumper.dump_html(DATA) %]
    [% END %]

    [% lh.maketext('Server information') %]

    [% IF DATA.up %] [% END %] [% IF DATA.disks_ar %] [% FOREACH d = DATA.diskfree %] [% END %] [% END %]
    [% lh.maketext('Attribute') %] [% lh.maketext('Value') %]

    [% lh.maketext('Hardware') %]

    [% lh.maketext('CPU') %][% DATA.cpu %]
    [% lh.maketext('Total main memory') %] [% DATA.mem_main_total %] [% lh.maketext('bytes') %]
    [% lh.maketext('Free main memory') %] [% DATA.mem_main_free%] [% lh.maketext('bytes') %]
    [% lh.maketext('Total swap memory') %] [% DATA.mem_swap_total %] [% lh.maketext('bytes') %]
    [% lh.maketext('Free main memory') %] [% DATA.mem_swap_free %] [% lh.maketext('bytes') %]

    [% lh.maketext('Operating system') %]

    [% lh.maketext('OS name') %][% DATA.os_name %]
    [% lh.maketext('Node name') %][% DATA.node_name %]
    [% lh.maketext('Domain name') %][% DATA.domain_name %]
    [% lh.maketext('IP') %][% DATA.ip %]
    [% lh.maketext('is Linux?') %] [% IF DATA.is_linux %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %]
    [% lh.maketext('is BSD?') %] [% IF DATA.is_bsd %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %]
    [% lh.maketext('Up since') %] [% DATA.up.up_since %]
    [% lh.maketext('Up since hours') %] [% DATA.up.up_hours %]
    [% lh.maketext('Up since days') %] [% DATA.up.up_days %]
    [% lh.maketext('Up since months') %] [% DATA.up.up_months %]

    [% lh.maketext('Services') %]

    [% lh.maketext('httpd') %][% DATA.httpd %]

    [% lh.maketext('File system') %]

    [% lh.maketext('mount') %] [% lh.maketext('avail') %] [% lh.maketext('total') %] [% lh.maketext('used') %] [% lh.maketext('device') %]
    [% d.device_mount %] [% d.device_avail %] [% d.device_total %] [% d.device_used %] [% d.device_id %]


    layout.html000444001750001750 41311413636115 23431 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/serverinfo[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] status_line000755001750001750 011413636115 21263 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 337011413636115 23420 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/status_line
    [% IF SHOW_DEBUG %] [% END %]
    [% lh.maketext('server') %] [% SERVER %] [% lh.maketext('login') %] [% LOGIN %] [% lh.maketext('date') %] [% DATE %] [% lh.maketext('version') %] [% VERSION %] [% lh.maketext('locale') %] [% LOCALE %] [% lh.maketext('theme') %] [% THEME %] [% lh.maketext('session') %] [% SESSION %]
    layout.html000444001750001750 3011413636115 23554 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/status_line[% part0 %] [% part1 %] header000755001750001750 011413636115 20161 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 51111413636115 22270 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/header [% USE CGI %]

    [% lh.maketext('CAT - CipUX Administration Tool') %]

    error000755001750001750 011413636115 20062 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 247011413636115 22217 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/error [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Error') %]
    [% MSG %]

    [% lh.maketext('index') %] layout.html000444001750001750 14011413636115 22375 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/error[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] module_switch000755001750001750 011413636115 21577 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 567611413636115 23747 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_switch [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    PATH: [[% PATH %]]
    LOGIN [[% LOGIN %]]
    LOCALE [[% LOCALE %]]
    THEME [[% THEME %]]
    cat_login: [[% CGI.cookie('cat_login') %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %]

    Icons

    [% FOREACH m = DATA %] [[% m.cn %]]
    [% m.cipuxName %]
    [% END %]

    main simple template variable DATA

    [% Dumper.dump_html(DATA) %]
    [% END %] [help] [% FOREACH m = DATA %] [% IF m.cipuxIsEnabled == "TRUE" %] [% ELSE %] [% END %] [% IF CGI.param('more') == m.cn %] [% END %] [% END %]
        [% m.cipuxName %] [% lh.maketext(m.cipuxShortDescription) %] [more...] [ change ]
    [% m.cipuxAuthor %]
    [% m.cipuxLicense %]
    [less...]
    layout.html000444001750001750 24111413636115 24114 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_switch[% part0 %] [% INCLUDE tpl/default/header/index.html %]

    [% part1 %]

    [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] [% part8 %] basic_object000755001750001750 011413636115 21340 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultcreate.html000444001750001750 400311413636115 23623 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_object [% IF SHOW_DEBUG %] [% USE Dumper %]

    DEBUG: CIPUX_ENTITY_TYPE

    MODULE: [% Dumper.dump_html(MODULE) %] MODALITY: [% Dumper.dump_html(MODALITY) %] CIPUX_ENTITY: [% Dumper.dump_html(CIPUX_ENTITY) %] CIPUX_ENTITY_TYPE: [% Dumper.dump_html(CIPUX_ENTITY_TYPE) %] [% END %]

    [% lh.maketext('create new object') %]

    [% form.start %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %]
    [% lh.maketext('new ID (login)') %] [% form.field.id.field %]
    [% lh.maketext('firstname') %] [% form.field.cipuxFirstname.field %]
    [% lh.maketext('lastname') %] [% form.field.cipuxLastname.field %]
    [% lh.maketext('new password') %] [% form.field.password.field %]
    [% lh.maketext('repeat new password') %] [% form.field.password_repeat.field %]
    [% form.submit %]
    [% form.field.mode.field %] [% form.field.module.field %] [% form.field.letter.field %] [% form.end %] [% IF CIPUX_ENTITY_TYPE == 'account' %]
    [% lh.maketext('Usage: please give new unique ID, firstname, lastname and 2 identical passwords.') %]


    [% ELSE %]
    [% lh.maketext('Usage: please give new unique ID and 2 identical passwords.') %]
    [% END %] list.html000444001750001750 646711413636115 23353 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_object [% IF SHOW_DEBUG %] [% USE Dumper %]

    vars

    MODULE: [% Dumper.dump_html(MODULE) %] TEMPLATE: [% Dumper.dump_html(TEMPLATE) %] LOCALE: [% Dumper.dump_html(LOCALE) %] THEME: [% Dumper.dump_html(THEME) %] ICON: [% Dumper.dump_html(ICON) %] CIPUX_MODALITY [% Dumper.dump_html(CIPUX_MODALITY) %] CIPUX_MODALITY_TR [% Dumper.dump_html(CIPUX_MODALITY_TR) %] CIPUX_ENTITY_TYPE: [% Dumper.dump_html(CIPUX_ENTITY_TYPE) %] CIPUX_ENTITY: [% Dumper.dump_html(CIPUX_ENTITY) %]

    abcnav

    [% form.field.abcnav.value %]

    data

    data: [% Dumper.dump_html(data) %] form.field.data.field [% Dumper.dump_html(form.field.data.field) %] form.field.data.value [% Dumper.dump_html(form.field.data.value) %] form.field.data.value.uid [% Dumper.dump_html(form.field.data.value.uid) %] form.field.data.value.cn [% Dumper.dump_html(form.field.data.value.cn) %] form.field.data.values [% Dumper.dump_html(form.field.data.values) %] form.field.data.label [% Dumper.dump_html(form.field.data.label) %] form.field.data.options [% Dumper.dump_html(form.field.data.options) %] [% END %]

    [% FOREACH column = form.field.navi.values %] [[% column %]] [% END %]

    [% lh.maketext(CIPUX_MODALITY_TR) %] [% IF form.field.abcnav.value %] ([% form.field.letter.value %]) [% END %]

    [% form.field.abcnav.value %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% FOREACH object = form.field.data.values %] [% IF object.SHOW_OBJECT == 'TRUE' %] [% form.start %] [% IF object.uid %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% END %] [% IF object.cn %] [% END %] [% form.field.mode.field %] [% form.field.module.field %] [% form.field.letter.field %] [% form.end %] [% END %] [% END %]
    [% lh.maketext('Count') %] [% lh.maketext('ID') %][% lh.maketext('Lastname') %] [% lh.maketext('Firstname') %][% lh.maketext('Password') %] [% lh.maketext('Repeat password') %] [% lh.maketext('Action') %]
    [% loop.count %]/[% loop.size %]: [% object.uid %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.field.password.field %] [% form.field.password_repeat.field %] [% object.cn %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.submit %]
    layout.html000444001750001750 21111413636115 23652 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_object[% part0 %] [% INCLUDE tpl/default/header/index.html %]

    [% part1 %]

    [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] module_browser000755001750001750 011413636115 21761 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 374511413636115 24124 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_browser [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %] [% Dumper.dump_html(DATA) %] [% END %]

    [% lh.maketext('Module Browser: Modules installed on the file system') %]

    [% lh.maketext('help') %] [% FOREACH m = DATA %] [% IF CGI.param('more') == m.name %] [% END %] [% END %]
    Module [% m.name %] is provided by [% m.provided_by %]
    task [% FOREACH t = m.task %] [% t %]
    [% END %]
    [less...]
    help
    layout.html000444001750001750 16111413636115 24277 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/module_browser[% part0 %] [% INCLUDE tpl/default/header/index.html %]

    [% part1 %]

    [% part2 %] [% part3 %] [% part4 %] translation000755001750001750 011413636115 21267 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaulttranslation.html000444001750001750 1520111413636115 24667 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/translation

    Manual Translations

    This file cat-web/src/tpl/default/translation.html contains some (English) IDs for which the translation is calculated later (!) with *.po files. They are listed here to make those stings available to the PO system. They are not (!) translated here but specified like this: ID [% lh.maketext('ID') %] So do add words here manualy, but do not translate them. Use the po files for that. Add as less as possible. Add only IDs which might not be extracted out of: * Source Code: maketext('ID') * HTML templates: [% lh.maketext('ID') %]
    ID (English) CAT Specification
    student [% lh.maketext('student') %]
    pupil [% lh.maketext('pupil') %]
    professor [% lh.maketext('professor') %]
    teacher [% lh.maketext('teacher') %]
    lecturer [% lh.maketext('lecturer') %]
    tutor [% lh.maketext('tutor') %]
    logout [% lh.maketext('logout') %]
    group [% lh.maketext('group') %]
    study-group [% lh.maketext('study-group') %]
    class [% lh.maketext('class') %]
    course [% lh.maketext('course') %]
    team [% lh.maketext('team') %]
    workshop [% lh.maketext('workshop') %]
    tutorial [% lh.maketext('tutorial') %]
    seminar [% lh.maketext('seminar') %]
    lecture [% lh.maketext('lecture') %]
    reading [% lh.maketext('reading') %]
    language [% lh.maketext('language') %]
    module browser [% lh.maketext('module browser') %]
    module switch [% lh.maketext('module switch') %]
    module access [% lh.maketext('module access') %]
    module custody [% lh.maketext('module custody') %]
    userlist [% lh.maketext('userlist') %]
    theme [% lh.maketext('theme') %]
    list [% lh.maketext('list') %]
    admit [% lh.maketext('admit') %]
    dismiss [% lh.maketext('dismiss') %]
    unknown [% lh.maketext('unknown') %]
    index [% lh.maketext('index') %]
    Danish [% lh.maketext('Danish') %]
    Berlin [% lh.maketext('Berlin') %]
    Zeuthen [% lh.maketext('Zeuthen') %]
    default [% lh.maketext('default') %]
    German [% lh.maketext('German') %]
    English [% lh.maketext('English') %]
    French [% lh.maketext('French') %]
    Japanese [% lh.maketext('Japanese') %]
    class role assignment [% lh.maketext('class role assignment') %]
    admin class assignment [% lh.maketext('admin class assignment') %]
    teacher class assignment [% lh.maketext('teacher class assignment') %]
    student class assignment [% lh.maketext('student class assignment') %]
    admin role assignment [% lh.maketext('admin role assignment') %]
    teacher role assignment [% lh.maketext('teacher role assignment') %]
    student role assignment [% lh.maketext('student role assignment') %]
    Basic class role assignment[% lh.maketext('Basic class role assignment') %]
    Basic admin class assignment[% lh.maketext('Basic admin class assignment') %]
    Basic teacher class assignment[% lh.maketext('Basic teacher class assignment') %]
    Basic student class assignment[% lh.maketext('Basic student class assignment') %]
    Basic admin role assignment[% lh.maketext('Basic admin role assignment') %]
    Basic teacher role assignment[% lh.maketext('Basic teacher role assignment') %]
    Basic student role assignment[% lh.maketext('Basic student role assignment') %]
    module overview [% lh.maketext('module overview') %]
    Basic admin management[% lh.maketext('Basic admin management') %]
    Basic class management[% lh.maketext('Basic class management') %]
    Basic student management[% lh.maketext('Basic student management') %]
    Basic teacher management[% lh.maketext('Basic teacher management') %]
    Choose a language[% lh.maketext('Choose a language') %]
    Choose a theme[% lh.maketext('Choose a theme') %]
    Basic module access[% lh.maketext('Basic module access') %]
    Browse CAT module data[% lh.maketext('Browse CAT module data') %]
    Manage CAT modules[% lh.maketext('Manage CAT modules') %]
    Switch on/off modules[% lh.maketext('Switch on/off modules') %]
    perlversion[% lh.maketext('perlversion') %]
    serverinfo[% lh.maketext('serverinfo') %]
    externallink000755001750001750 011413636115 21431 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 50311413636115 23541 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/externallink

    [% lh.maketext('External Link') %]

    layout.html000444001750001750 13411413636115 23747 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/externallink[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] logout000755001750001750 011413636115 20242 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultlogout.html000444001750001750 30411413636115 22553 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/logout
    [% form.start %] [% form.submit %] [% form.field.cat_login.field %] [% form.field.cat_session.field %] [% form.end %]
    layout.html000444001750001750 4411413636115 22540 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/logout[% part0 %] [% part1 %] [% part2 %] footer000755001750001750 011413636115 20227 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 236711413636115 22371 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/footer [% IF SHOW_INDEX_BACK %] [% lh.maketext('CAT') %] [% END %] [% IF SHOW_SCRIPT_BACK %]
    [% lh.maketext('back') %] [% END %] [% IF SHOW_DEBUG %] [% USE CGI %]
    'VERSION' [% VERSION %]
    'SESSION' [% SESSION %]
    'old session cookie' [% CGI.cookie('cat_session') %]
    'THEME' [% THEME %]
    'old theme cookie' [% CGI.cookie('cat_theme') %]
    'LOGIN' [% LOGIN %]
    'old login cookie' [% CGI.cookie('cat_login') %]
    'LOCALE' [% LOCALE %]
    'old locale cookie' [% CGI.cookie('cat_locale') %]
    'PATH' [% PATH %]
    'SHOW_INDEX_BACK' [% SHOW_INDEX_BACK %]
    'SHOW_SCRIPT_BACK' [% SHOW_SCRIPT_BACK %]
    'SCRIPT_BACK' [% SCRIPT_BACK %]
    [% END %] layout.html000444001750001750 1411413636115 22522 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/footer[% part0 %] basic_assignment000755001750001750 011413636115 22242 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/defaultindex.html000444001750001750 403011413636115 24371 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_assignment [% IF debug %] [% USE Dumper %]

    group

    [% Dumper.dump_html(form.field.group.field) %] [% Dumper.dump_html(form.field.group.value) %] [% Dumper.dump_html(form.field.group.values) %] [% Dumper.dump_html(form.field.group.label) %] [% Dumper.dump_html(form.field.group.options) %]

    mode

    [% Dumper.dump_html(form.field.mode.field) %] [% Dumper.dump_html(form.field.mode.value) %] [% Dumper.dump_html(form.field.mode.valuess) %] [% Dumper.dump_html(form.field.mode.label) %] [% Dumper.dump_html(form.field.mode.options) %]

    obj

    [% Dumper.dump_html(form.field.obj.field) %] [% Dumper.dump_html(form.field.obj.value) %] [% Dumper.dump_html(form.field.obj.values) %] [% Dumper.dump_html(form.field.obj.label) %] [% Dumper.dump_html(form.field.obj.options) %]

    oid

    [% Dumper.dump_html(form.field.oid.field) %] [% Dumper.dump_html(form.field.oid.value) %] [% Dumper.dump_html(form.field.oid.values) %] [% Dumper.dump_html(form.field.oid.label) %] [% Dumper.dump_html(form.field.oid.options) %] [% END%]

    [% lh.maketext(CIPUX_MODALITY_TR) %]

    [% FOREACH column = form.field.group.options %] [% form.start %] [% form.field.letter.field %] [% form.field.module.field %] [% form.end %] [% END %]
    [% lh.maketext('object') %] [% lh.maketext('action on object member') %]
    [% loop.count %] [% column %] [% form.submit %]
    layout.html000444001750001750 17511413636115 24565 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_assignment[% part0 %] [% INCLUDE tpl/default/header/index.html %]

    [% part1 %]

    [% part2 %] [% part3 %] [% part4 %] [% part5 %] group.html000444001750001750 545711413636115 24434 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/default/basic_assignment [% IF SHOW_DEBUG %] [% USE Dumper %]

    mode

    [% Dumper.dump_html(form.field.mode.field) %] [% Dumper.dump_html(form.field.mode.fields) %] [% Dumper.dump_html(form.field.mode.value) %] [% Dumper.dump_html(form.field.mode.valuess) %] [% Dumper.dump_html(form.field.mode.label) %] [% Dumper.dump_html(form.field.mode.options) %]

    obj

    [% Dumper.dump_html(form.field.obj.field) %] [% Dumper.dump_html(form.field.obj.fields) %] [% Dumper.dump_html(form.field.obj.value) %] [% Dumper.dump_html(form.field.obj.values) %] [% Dumper.dump_html(form.field.obj.label) %] [% Dumper.dump_html(form.field.obj.options) %]

    object

    [% Dumper.dump_html(form.field.object.field) %] [% Dumper.dump_html(form.field.object.fields) %] [% Dumper.dump_html(form.field.object.value) %] [% Dumper.dump_html(form.field.object.valuess) %] [% Dumper.dump_html(form.field.object.label) %] [% Dumper.dump_html(form.field.object.options) %]

    oid

    [% Dumper.dump_html(form.field.oid.field) %] [% Dumper.dump_html(form.field.oid.fields) %] [% Dumper.dump_html(form.field.oid.value) %] [% Dumper.dump_html(form.field.oid.values) %] [% Dumper.dump_html(form.field.oid.label) %] [% Dumper.dump_html(form.field.oid.options) %]

    showlist

    [% Dumper.dump_html(form.field.showlist.field) %] [% Dumper.dump_html(form.field.showlist.fields) %] [% Dumper.dump_html(form.field.showlist.value) %] [% Dumper.dump_html(form.field.showlist.values) %] [% Dumper.dump_html(form.field.showlist.label) %] [% Dumper.dump_html(form.field.showlist.options) %] [% END %]

    [% lh.maketext(CIPUX_MODALITY) %] ([% lh.maketext(MODE) %])

    [% form.start %] [% FOREACH uid = form.field.object.options %] [% END %]
    [% lh.maketext('object') %]: [% form.field.oid.field %] [% lh.maketext('action') %]: [% lh.maketext(MODE) %]
    [% IF form.field.showlist.value %] [% uid.count %] [% uid %] [% ELSE %] [% END %]
    [% form.field.letter.field %] [% form.field.module.field %] [% form.submit %] [% form.end %]

    Berlin000755001750001750 011413636115 16520 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpljs-head.javascript000444001750001750 436611413636115 22271 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin form.css000444001750001750 103111413636115 20325 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/* FormBuilder */ .fb { background: #ffc; font-family: verdana,arial,sans-serif; font-size: 10pt; } .fb_label { text-align: right; padding-right: 1em; } .fb_comment { font-size: 8pt; font-style: italic; } .fb_submit { text-align: center; } .fb_required { font-weight: bold; } .fb_invalid { color: #c00; font-weight: bold; } .fb_error { color: #c00; font-style: italic; } default.css000444001750001750 1316511413636115 21041 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/* */ H1 { font-family: helvetica, arial; font-size: 18pt; color: #1c5493; text-align: left; marin-top: 12px; marin-bottom: 12px; } H2 { font-family: helvetica, arial; font-size: 14pt; color: #ffcc00; text-align: left; marin-top: 10px; marin-bottom: 10px; } body { background: #333333; font-size: 8pt; color: #fffff; } table { background: #eeeeee; border: 1px solid black; } tr { border: 1px dotted black; } th { text-align: left; } /*a.img { border:none; }*/ /*a { link: text-decoration: none; visited: text-decoration: none; active: text-decoration: none; hover: text-decoration: none; }*/ a.abcnav { font: bold 13px Times; text-decoration: none; color: white; } a.special { font:italic bold 13px Times; text-decoration: none; color: white; } #radius { display:inline-block; padding:1em; -moz-border-radius:32px; -webkit-border-radius:32px; -opera-border-radius:32px; -khtml-border-radius:32px; border-radius:32px; } .yes { background: #22cc22; } .no { background: #cc2222; } .unknown { background: #cccc22; } .berlin-button { text-align:center; font-size:1.2em; color:#ffffff; font-weight:bold; text-shadow:1px 1px 3px rgba(0,0,0,0.5); position:relative; display:inline-block; padding:0.25em 0.5em 0.3em 0.5em; cursor:pointer; border:2px solid #999999; background-color:#666666; background-color:rgba(128,128,128,0.75); -moz-border-radius:16px; -webkit-border-radius:16px; -khtml-border-radius:16px; -opera-border-radius:16px; border-radius:16px; background-image:-webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(64,64,64,0.75)), to(rgba(192,192,192,0.9))); background-image:-moz-linear-gradient(top,bottom,from(rgba(64,64,64,0.75)), to(rgba(192,192,192,0.9))); -moz-box-shadow:rgba(192,192,192,0.75) 0px 8px 24px; -khtml-box-shadow:rgba(192,192,192,0.75) 0px 8px 24px; box-shadow:rgba(192,192,192,0.75) 0px 8px 24px; } .berlin-button span { position:absolute; display:block; left:3.4%; width:95%; height:48%; top:0px; -webkit-border-radius:8px; -moz-border-radius:8px; background-color:rgba(255,255,255,0.25); background-image:-moz-linear-gradient(top,bottom,from(rgba(255,255,255,0.75)), to(rgba(255,255,255,0))); background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.75)), to(rgba(255,255,255,0))); } #glossy-berlin-blue { border-color:#aaaaaa; background-color:rgba(128,128,128,0.75); background-image:-moz-linear-gradient(top,bottom,from(rgba(64,64,64,0.75)), to(rgba(192,192,192,0.9))); background-image:-webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(64,64,64,0.75)), to(rgba(192,192,192,0.9))); -khtml-box-shadow:rgba(192,192,192,0.75) 0px 8px 24px; box-shadow:rgba(192,192,192,0.75) 0px 8px 24px; } #glossy-berlin-blue:hover { border-color:#1c5493; background-color:rgba(64,128,192,0.75); background-image:-webkit-gradient(linear, 0% 0%, 0% 91%, from(rgba(16,96,192,0.74)), to(rgba(96,192,255,0.9))); background-image:-moz-linear-gradient(top,bottom,from(rgba(16,96,192,0.74)), to(rgba(96,192,255,0.9))); -khtml-box-shadow:rgba(128,192,255,0.74) 0px 8px 24px; -moz-box-shadow:rgba(128,192,255,0.74) 0px 8px 24px; box-shadow:rgba(128,192,255,0.74) 0px 8px 24px; margin-right:1.2em; } #glossy-berlin-blue, #glossy-berlin-red { margin-right:1.2em; margin-right:1.2em; } #glossy-berlin-red:hover { border-color:#cc2222; background-color:rgba(255,0,0,0.74); background-image:-webkit-gradient(linear, 0% 0%, 0% 91%, from(rgba(128,64,64,0.74)), to(rgba(256,128,128,0.9))); background-image:-moz-linear-gradient(top,bottom,from(rgba(128,64,64,0.74)), to(rgba(192,128,128,0.9))); -khtml-box-shadow:rgba(256,128,128,0.5) 0px 8px 24px; -moz-box-shadow:rgba(256,128,128,0.5) 0px 8px 24px; box-shadow:rgba(256,128,128,0.5) 0px 8px 24px; } #glossy-berlin-green:hover { border-color:#22cc22; background-color:rgba(0,128,0,0.74); background-image:-webkit-gradient(linear, 0% 0%, 0% 91%, from(rgba(64,128,64,0.74)), to(rgba(128,255,128,0.9))); background-image:-moz-linear-gradient(top,bottom,from(rgba(64,128,64,0.74)), to(rgba(128,192,128,0.9))); -khtml-box-shadow:rgba(128,256,128,0.6) 0px 8px 24px; -moz-box-shadow:rgba(128,256,128,0.6) 0px 8px 24px; box-shadow:rgba(128,256,128,0.6) 0px 8px 24px; } thead.list tr th { background:#4d4d4d; border-bottom:2px solid #000; border-top:2px solid #808080; border-right:1px solid #808080; color:#FFF; margin:3px 2px; padding:5px 5px 5px 10px; text-align:center; } tbody.list tr:hover { background-color:khaki; } /* background-color:#f2f2f2;*/ tbody.list tr.row0 td { background-color:#ffffff; } tbody.list tr.row0:hover td { background-color:khaki; } /* FormBuilder */ .fb { background: #ffc; font-family: verdana,arial,sans-serif; font-size: 10pt; } .fb_label { text-align: right; padding-right: 1em; } .fb_comment { font-size: 8pt; font-style: italic; } .fb_submit { text-align: center; } .fb_required { font-weight: bold; } .fb_invalid { color: #c00; font-weight: bold; } .fb_error { color: #c00; font-style: italic; } nav000755001750001750 011413636115 17304 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinabcnav.html000444001750001750 11511413636115 21536 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/nav [% FOREACH letter = abc %] [[% letter %]] [% END %] exception000755001750001750 011413636115 20516 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 273611413636115 22660 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/exception [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Exception') %]

    [% MSG %]
    [% lh.maketext('login') %]

    layout.html000444001750001750 14011413636115 23031 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/exception[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] img000755001750001750 011413636115 17274 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinexternallink.png000444001750001750 432311413636115 22641 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME %/ @SIDATXõYS{wIGF y;VV:( K BGG!@L_q].0|L{s99.ca!0$IJ&tZ4aЩFģbYry<Fdt]4|>˲ N̂Ӌox#Bcv֭/?Ku@ggg=Yn,Z%= `麾J&hbX{{{cc( I`|X,LXo߾]r… ĝ }$I|ܢi,NϚ577d2ѣF: ]766VVVϟ?ST( Blc‚mc7mda 8{%߿3===33355|YYٗ/_4$IcU]tNETQ߫ZRRRQQqXUUUU1˲c`,kkkjAH< ` 4 PH4miiihhӧO]]]n0 ˲eYe,|!`0(>r} r>/X PUuuuÇo߾ wy>H9`W:Aݸqciiny8Nua60Ϗp8M0~4m"?FA? u]zboo9s:>trOb,TUUŋ>ؘ!v:yaRBD"H$ }>f|>LLD"yk![؆y~T+++khh`Y~aa.3i 0-`Yb5\+L&B^oM{e!զxOLOOG"D L\.W43 cـ$,+")3 9=I!DVVVjjjt: hq rL&CwaX4oђ0 _JeQEEz ߃gbb455xhk2hǑ[@VVVbi 7o Pb$x75EѢTvu8\.JEm]ׯ]p8@ c qs VQ1޽Sv" I!꺞H$?|}U=h/a(pb`PzZĐ(@(UU][[~M(s$lhBPhuul@Ng6d2IFGG{zz|>_&6yao``eYQSSc -x&''*++\r,\1.J{(p8www|>p L@ oivB6 @LY-))950gJlL{?OZ i{ X'Qch_<:P˲ Fړ>L~rr=ܹs.+=m(Dֈڇaq2F~yy|@SӞ$$_~珦iׯ_gap|mmY=cDUUu\eeeV>E|-b.6 '9z?4eѠUUzz{(iLfnnntt4BA߿EK޾ˎ7,B!u'Oh$lhh8V@)[z9zͱ'I@ ~?{C16 ,B0#A *m(r}&TUfajiiIR|n P___/8WIvvvZ[[].h{{{SSxNa$IXlvv ? Àدx<_|I}Zr8x4~=N`iass Jv666::: _ NO,]yomm}6<MG8z30I͓IENDB`chooser.png000444001750001750 333311413636115 21603 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME2Ǵz[IDATXYkOٙdwɚ_iJ zzED,X %""B*AT7ѣ^=yCCHR%4$YM;2M?yg}yfv#Bmnyqhۆ1 6\cEQ{Tշo.--K)ezypK8B9/sc p鱱1A~`.lsRI$DBahေ(&8AC :Vn3(ĉ24>}OR,|߷m{eeZ" ԶJrё1att!8N&VݻwNJRgm$IH$ؗ~eYU}4MY01thy\._xR@ǎ;{s\6t::L6rSSSgΜ9rȭ[{ ݻ7B aǏO.Ju]0ؚ hn-..꺮( \:΋/޿oF8F9c˲,b(PhM^.% 8JsΉ<{e0ڄWNMMɲ< 8{Jdt3 3A=BUHB,*"Xx<.IҪ'IR<ec,I}`l>rM@l5{vfs]Wfzf|gji1M<;{8Φ(.B(jV,:i뺵ZX,bUU4߾}c ^7<`ImJEQxl,8[񠖉,wdX~txmfꗔiw z)5yީ) L$sw4!$ .qP(DE4Ͷcw@xl4mbbBQlf\T*.m۵Zmyyyll,P>L)eo<(dliV={SVV1!f^SQQAYYY2IEشi,#I}}}̙3uv4jBdOGGƄL&9}4~J1 Ƕm믑eE!}v yZw9h&2ZZZHRTVV"6n)--`0\$I;[szlȲӧپ};><(D"Ѩf^`ZZpPQ`4)))a`` 6j*tHݻwt:1x)VZE__ӦMzL62}]ZZZFGeΝ;?;w.~;7t^)SpQRԘ4L8NdY& bVxR)yfNJq\vv;ٳd˖-Hut:Mkk+|oVgyիWs1o*zD"qIX/f+Vˏ?HGGiD"tttϚ5kX|TȒ /TS]*\.-[Foo/k׮O*ڵkbҥX, 2ͤidY֘%աU.K{^OOOP:|tvv}v$IsԵ6˗Fb\wA@eb$cp82hw con3i$DQȑ#444p8km6 ?>GE<A,˄aZZZr-\Z(±ٳ-ZC^^yyyϹ(,,ڣ+5kP[[ˍ7Hee%q~?裏R\\<*ttA3`2k$mݺVNb̙HD8& Δ)Sغu+_|+W50:t]v2gB۷z"|K"TPX^ z!Evt:qݔ""dQ1L?ͦMXxq4'NgҤIb1N<Ɏ;(++#//o={zj^|E|>[2Ec2O>FΝnD"ձpB#'Oh42< 8v͔OPYY 8x (z0 ZFz=n[CTw}~+3gRZZJyy9X&N<֭[9tEEEaΜ9CwwV+ `>#$Ib``ٳggiɓ>} SOQRRd"LH$pa (QE 4ذa 'N qX,8vuuu|̘1ӧUTgϞ%ļy(,,dժU6TjkkӧS[[jB=zV>UW]E0vb^H?EQ6m`дOII `_~9sd9k*B$OlΝ;7nz^kȲL{{;;wVjkEm :t;vt:$oJ&߿~3fP^^!77ł`@$I$Z/Fш륧?&BfN$IlذGjTeLmǨd4q\l6vEmm-,!"'|B,c8Nl6#D" c쿖~0dLɶm39r_~nIk6S/§~`˥ɀTDܜNUzW1J42JF YxD"qAWn$qm#IֶW(L&, 999l,N rJϟA7rʢJIq$6-8dY&  4t4ٽ{7*{EJCCTWWzi?ѣG_;w.\fΜI(?1)ўo/M8p/'L >}I(..ӣ1OȤT*Eww7zϳ鴢N_:;;tr.nLIQhC;'UVVFIIb&0a$W_Q__U%]L2sXc͵=/gB;{ϗ݄HĹsD"Z_yXd3{yIENDB`layer.png000444001750001750 30433411413636115 21322 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDRtKsRGBbKGD pHYs B(xtIME 88 IDATxwx?.w\0T6BĐ wk 7lZh=ƶlْ\$Yޥ{{wɒ8s9ݾݾݾݾݾݾݾݢZn2r!)eگkH 3ϣ]H!_1jN'evͲlB jG:UHH߽ގrl<@qE4=2ʴ˅lkD uyxg2B<mil86V#!(H !bG +(HbCŁMh >>c/|9 ww@érW2diڻ\uB F3猀EU;=0 nLHk+7ߐHeF1Ph2RQ*!`a:V-!3c,_tNJ [[IBu5_:8\.?FX);? id5_.ԽyVlma @.waY9_kMMo\l /TLz&99]"f9* pHblE*BwMEQ|*>C>6n45ehQy8SlP PP_> )]^^ ^_/uAC(||\ۑ(v{/g*Xz͆n#%>!lxB7J2{M*N (xMW pl e? 4Ǎ_kj61&4f1mq043RBSʊ||*-+i]ǘܰ`Ҫn#wllĶr%I'Rg99L1YYa?6=b}\m-|8Pq5"~FBW{O0wSqeeuʢE Iϟ[1 9a*U}=] {@í2穧qq\>Bԙ.Y[y9&}/\nA#gF?a~,)/-DP=ISԳ͠: :hXgobbx ʹ3N7ufAuk<!)pЀ}J2.}HU ]99L9YY^h^k|ѶGc[55׭#c\a.g$$HUr"J/~}.=nuo_<qq}8W4r |i\Z{|kslڗTnW< wXNI]w4(BFAbp465a_goJ RʠA .:F]~^w$d%1q"RR"uh84|GV| P%Y'Y@2z+W3qiEQP,4Ҙ?a#RVϩ±~=&q(!vT,Wnh*`AzxJAM?@B\0c=* A(`SgyxiPz|۷?܇&>_'>%hHV~36uD2ȃTmpp:7O'^j@0 76 ~:ddMM7ϒЛ]p&9>He\\з n\s 9inB&88dvOdp NkZw Q5 5 ffr̙aޮ&Ǝ!Ҧ~&/)61Tu0dpJm@QJg67|5/o (۷;;/?\g z{!zxH#Wzr 7 a(O4-zwIF~yLG˷{7"11[4d0Gx$ se܎wC" 㠃+4W hI&Pj`0S D& 7Ki&/9mb;|NWiLÉN.Ka>pn /f`3 :ϬY+ ) $'NLnH qt{n&4 KpHz}-=V\B΃RbeDАM<ƋPOLc.x$ 8~4|+QmQ_}rL@aJJVQhYT 4MM~zzV1pd]QUl68Xo# @ITUذASrBbӎkyDMCO':C~^#T) R߿齩Wa#p )XQA8_=((Kd?SR,Adr#%zU=8^/PDbCv5vlAm>qgw! db&4'MbOr2>c=Qm}-=g nC=|vgEK`MB6{Q&r̙ cpGT!pb}ƍMB>6+Ef HHEP7n{_ѤXʶm)½^GawWCP$H:|eVK>0SS;[Xtn~^&W]<B2 3 N#ymҖMDA )Epe  %'jƚ_~;DNQWc*tРΩ6૯rfep~ BLRXP[YsFLJI\R WR"+{_?j45uC b6=VJJ4 hQŋ{h蕙{ rIKȸ8{|_xfŢxs/`{.ytBjtd=9wUIr$DPO| 3C2j!&Q_=aZAR?Ȝ.8hj(&ñr%C'Of_RR s*'0ux8h^YYsOJY\ߪl (5"aUYWȟ\DkkXWRR". LV*^x$RcWcǦس /dIIQ LY8eʟ< P酕 hp>Y–AW i&awÈLhk NfP}OkkqXS) !j CtS>д4vlzTmζ!(?|ƍr<*~%TV5]DᰫXf]guю@P@U؉Լ+3 ϒƁe/("1ʟM s{!\lJԩ&'3ңK ˖1ljEJ@X #m#q& >s!C 3uP2eTW Bzp;%~ QUde\Sv;T Zӱ,J,ݲաE{ݬXXf,χ(#6ѣ$]r %.ɥ}JU_[?2ߝ?O.[Ƭn<x,~BRSCœʒ%w>o !#?6-zjd Q-!%^WGiGh.@nРA~#d(Rٝt #ql:9s{dI/ni>T-?AjA{c/xP ˰jqh@MHIȃᄖ1m(aTt>0ރ@b0 m7HP$c(jU <|i(՜ V@ݵJx<($*J0pПAsvJc̭ Lk UrH(jT^,|@=pȑҙ}kn|2:ڷx @kojvxUSFj{8VFΩfa6F\sMǒK~ྐྵC'$> JUD􇴖҇_گ~N߽cRz"em*_ fMt؞zYyRUBwZkV.G1ȎmqPZ=!p=ÊCa-@~A}v3}Z:5\9?9/[0 Ac=IOBv>ֆBۍ"ӣ=A׈m>Q*'NU99.,h@7Ҍzjjv*k43鮦g4af@!ӆm.Zn'NAVATP8~E>!TB7rtە(@ |yVtnEpՅ<8q^ŨuFX]ApԾ 8=Иr^'Pax1 x+EJA `BWt|1z#u}'@ff^'M :ie([X";F^-!,[/89 ؆R P !}B~5p_F]IY^mMYJi"T4hB Li^pd eQ(QPE1$rGy `+'}בC41/Bqt{-Ɨ2Rl,#/<*MWULĄA,L!4S gV:X=":Zza괻1֛4>xMiuXp&m.PYz2<1ֱQfP)X5JkO¥DWB "TU I)TU )`{n&%%1rEddӧOmm`y /LȤZ>ϝaPO`|<ٶ6(sT(Ȇ $2hM؜NӉ+HJ@f,?6ǜjs6oM ?b>bQ,j08(! ]IӥrI8EgLTz minH͵̧{Q:սqٞdPAm%hL%7;V$I Pد_ E(B %R][W? oir.+EDӇIB!58Op hG;(.8fniF bubয়sEGojb쫯˄”(v*d&&⤕dB8F]2s"a'`A uPFt%MeNL7D qk@8t\%LAOcƙ#a3[?Ø c=wjRRN^J{@K$`" 0? HòqEH_((BUCa`VVxcMM4B9|=x,0)TgU.!v) ^@ =Ąįb3ЯKh! f!TZ~ L8Z'a0,i4B)RcފQزB2b4ͦlX[qPLxw")v#ZUIDCUc#1鮴Z:+oB&@DW/G ѡ"RhaC?yՐ'cƑXWЬ>Zj8r5Ҁk3W!A(tÖ g̍ub u\!j}%P]^-58ߏQ$!:%уG 7MdRF ((T=p6锂6lou%%\(xƍcԩlLH}}9?ش3}>WX|9751`>2JOPQ96;)\\S9|1t(YZ)Ռ5RSGC6<7a+/Yw8hD#FPq(o]ÆQbYX3\- ,h-#H*UDw)b'U#Q填*"؛`x;"D Vz_)!TRU]8tķoƍ0a\_/Y@H)GMA|އ:gB|?ݛaI,ikdB Aideuu8n>ȺN׋r,Լ!4;fV1}11Ȑb?U`B.b@f&;'O&=W_{drdd@ҸO1,ǴTWfUDԬ֭߱3ne߫\W1R">rϔ)>u*{%KS[ĴdAe0B &t:>rRSiJLip͆ZS;'Ff'?ӉC|!P<.~ڰyv=r ˅w YY4QJJHΦ!)68kp9Lnf碢!Psrh' '$ֿ?m<; X:dU xN;nׯٷ/&']]M܈T Ȥ$<Cǃq#776r^M h3FBj1Ag|gY~W_ `!TWǬq9s%4H\ &èDhN9ƨX0٨ݨQ4yӧs,10Qղ;\A8#Zy[yA:x-]fw8逃jlYPzcYk%̆ 7an2/vtPS`p8ÆQ?o|!8TO.$Ѫ:da˹j(^ܾ<pk!Cx·i>?ɻ}WdVUsMSU)ۼ{v1w.?5`Ϡw??--8GCʢb0++I$!5rҲ׏B<C9RTDHվ}dJLK,j(oom-IÇSKcq1i%%dQ7neMM86lಣGN I:tԌ &%=}ۼ!FqPSy 9#Fpp w/(x}XJ׬!mj%;51c6}ii~ x_|1 Ǜ(DcMYÈի9lkb/^]E_Z ʿcȑ||)/Y}yy|ާV x۹_?HN,`ڞ=ܘʖ2RR_R46{ķ~=ܻ|9mmyy||\uώQjk+.fA_pWܹcpxּ6O  $ ܾ>gI:חsE~,\+3" ;(4lgx̭Qljhb ;XlqVX i'D @JUyd'*/|ˎyVUXi}6̯e=dt"-ѱ Hش~f1@QR+H,.N\~~_ <Ήq$TU(Jۼ^S9D9rF3PSyNHwގb!$m4uKrmF+Gb~%v-CZZ2s&_TT<ٛn+@ٻ; Gg{/uZ흶l,3}JFӺ†\O>ݫWsQs3qom$_-%% ./'}&&r%͟#O>a\~m ޽ X52Wpϛ/q|1TeR{⮩TCee3-[ uvZ~[+^Ǐeܹ~=/wa^Q畖rEas3+x/$}XukͮZ mm۸gi"B-aSioǶ|9fdP8c˯yyT:4'&Rp:$%[YvS}٧v}̘W쭪blFe ꁵ.O7\¼p; bĉnG6732!AhHH`G1aHKcAu}=ݨBλe!hio's)SU?d٫PEU(B*/2xa~v~|uN[8R!Hm9f43Ӡ\kðX֕-VB1Rjwb,yQVO]pw0A+c짱7J#2.pe; "5ʼnb9t;* +&ڰ^-˅wJG\~>}?r8u)y+xxeop:9CUNfYI\q2j:V*؊I[ۇ u2zHOgnh<W]o!%dF@&3Y2iv|Rb׏=С|$[JD|\))ΦyUU\;v0?u tO>jΙ0w.m^MM8SR(=pRޯ ^/YYl 6f'%1cXN)ϘJ!P7ndPYĒ#ٮ1zNgO~\EO4|$'&geAikcdr2,ખΏTJ͜iM $$'!17.8 HMD@CRS)+(Gyy8ijGUk+ 4YQG#8NKEw쯪bڊ[UqP$Z`ZCinfhz:EUUbSt~?Lz*G䩖[_ZZp1<>r  C󡤧P^NÀ jogpj*C))l޾,U%53=k0HJrs]Q[3XQSCqq_V7\@;s.Vtھ *PҗFYai,7fOp 7pWXUAd :?2E>O?ejTm-qE 1~r1 Z[jx2ĢE\*%J/fs)*b%Iss٧Ă_\-ܺoqNgdt̏>bFV_JۍnXOq#o VJ.yOu N#ee cݼS7ndhs3ڷFz}=9o,.3Ek2׮e?8 V4];VW3fR5;nq\?r ƌq(v:,+c\u+Tmm$ΛlvH9'+IJbW|<994*n! ́gдs'O?*=\խߟBHfY9.}>5kRV̀Ç2hH(28軷cSZ 3,bڴG~L8={ƠpP7TlLu bHX>v-iFk]6пדO2:l:bjjqq1kCxQ**beNNuqq~E]UaU;v7?Q]Ě ' eCM6Hj$YXmο8>mƕH+P~ZUqUTpO9Tzy>3lA{{?|ȠPv;>!6?p)ۗf@lN6։'8d˸F[e%PG+9IXklq0Nj{>,NK墱KrZZH;<ܙ:xK|kgf-njaSi)SOnk#KfDpH2F-]J5@Yyjq1( 1vj,`Kz[)7wso1C]˦&.]J[[Iq:QR.WU\B))!7? Ȋ:k.io'sy69Bs$PXHBSRh0 o?x5fiXڊ}p*n}Pii4*_a=7))4gg󸔐EAP?cʢYcʳf~`<,* qESO<{.%sӞ=:CP};g͊dq~:ki:aørFdv$cIJ˧4J]z:KMK2;+% WxZ|l/h={'–-r5Ys#W\"]Yza֗ 3d^Qpo!- PUXy MH<7U9/ Jrn_Y[PIWPdY=`_G6f njiSߟz!HG}ɀFN'--p:) GO>pGdEqˉ͛髪~ctwb.ԟҬ, NjNP4P`ĉw}7/_ fY~˅?)/JKxSU:|˾#GɡAQwsRSi^џu"Uo'/{! z^#rGi)I4ǽry9(%3k@MKM4v/KKI>ZP{1~*9PA aU`u@J3xnnrt^xtfx-K.Yr#f!!bp%Cp1[h K; o.uZJ0 fBt-z˕^/b*ᄮŪWNH&G#o "Iav߉:?8i[nb&55g"&]}5+m6ԃI[1co77X1MMNVhL* (/'9+FYUEU =JBz:6[@X.SAU{;BAJn*,i+V0Z]k 6l}t0MZ=/|ylnKyfܸ* ,T0og<-i /=6bi G1ԙNFeuCȑAa<*%,P&'v]ٳO(g7ݝ;f"At,OIe\{(/+N߼˅ՀEW^y'i3PԀF(Q>Ff))MW88Κų#eƍmJWw[=w.55q1ζm#]ڒpt>|8u&f\)2_[81\ ..vPΜɗ`tF"RNy'/X1As! SOcs@47#i*v = R$|<ϵ`A\vH#}oa\Qsn*ƼzڥmkIfKf.e_p=gpُmcC͌$#MN[(`9oo8^8oa ,*D_Y_Qsw^}ÆѴeNv!X07Q;D 4WlY6XfdSUi{4B]ZeeAỸRRm!`$ x_E#~||dU,Z'ߊ 32hNH8/JاxvYnX%Kih`cĪbYDSB"D ]`i !MS.h/E,i{6wq~eMMkwKs hϋ/C8Bny?99[_CXOh3}+x$dBc( {L_ CrLVƛ F?IK'ii4RϒcGam,t<`1_]|^|A?Vu.cg92 '0P~}Š{ M Ӊ:p`mn.vСy-n1 T8=zC #(赐f(X m2΅1٭!&Ͱh{g2yiU7t讲[ʶ!BpW!gmls2-nf6gټ_GjArr ݨs?eT>|0)+]PxPC0*'>Q^9OSU {bU#í#UǪ |9=Ĩc:l*/?1^=.V[BQ`I-䰑y '?TOvsdl'D fB 3K IDAT͈ٴ<@ .r^EBȤ'*;]'ZUU(ntzs3….,d!l&ì MMiezDV;HsmiTQ44 -ŀWSD7x!@ʽUaA؆CJX<?5"? P ؎=>_|q4P&D"zi~;J>3!żg :p$hy"b441,o (ڭ.n?gʔ1 RY9p9m-'Ir}fAbtƏRqP!W{AW^뫮4mCU1QN8QtFs⮓.ȕ1A>GepSl`6"]<ڊ,,] Р/+ 1Fzhqע-_cr3,Ns U45a{= 4C8KmE+e0vJk{61Jc#4 -)b=w/ӧ?رw2~yWg\!vA8[{dXU~HYLLķv-if49d< H-v;b4&zĥ輫'p0 '̓>s53 1<)QZ[GEq1 DVEwH CJs38? f!,>\Rh$G1S46"ϧALh>j͛b5|N٘)`Ρ4 v 8<n{=G1zFo9q:ȕf!ׯ'}t̘e,F#߃ x.Fk򘂛F,#zv/oC&XIk`6Ԋʐڊ2>c/Z0iUD4j'Hn<̓Н;.0/h |GOUyf@!1؈2>C?'4l"(IOo°/FQ=/ Cu1*f| 6Yn|hzedg܌Fc6Q8Rۜ*2sЏ6)~%;abdCBNTD7G46ဂqCt)4C\b$,r[R;֍ΛY4cӳ^VQ4Zݝ&bws1yY5S[<ǪLƦ2L]cOHl_4sCgJche}=RZR;WD3m.tF_xJo>aZ d] » {o(dfdd5a8?_<˜Ço|,shcU(bQPǿ@#xacp(/UF}jd,<F5(6BjQ3/*_3bx9}55ձ5 @M o8?SyT+jQ/XI@f00v,T6;NklkUeyоg $n>k\6j=to^P[ˮ؈1/©% eE0J3n.*qWG'S|9++%_Owk <wgVrmg_eʈs-TKJx$xfM[eEE d<` ϣ- $%DPQXg6 ЬUlP b,g(PzNaJ@u.|);v叔@,S(G2 d,l63U 4ޢ͚[kGʼmfnnn=LH <>fּy})1+""Z/"5U0HPB"(BfwpMie}cX518N<`6VMM뾭<6ag3vl9 'هcZgEGz1/0 ,$C{D,ݻ,t}N-c^gë(7s7 !B"R* 6(kîWTDTv/(EA:Jc~Ry왝;wn;WrB&Pi׍w٠ɹ#W*ʷRQZ#bD*e:HX,Sb0|Q0m6m^ćJv@WN P¥!3Ch+KñUΩSD|95, ]ĎC j&7]z t[4eJg /Lp)SۿHdF e14* S1>HCeAÅŒmNP!Եgύ<(^{m3rgBn0`1Svc`i= {0׾"Liz}\>{6u5xVmݚNg':v?<3XAMn Sh=F < 8s2O*Jc8<zIEY~2Vy咚A.`o5Ѷ'*ctBH?Ofƌ>f0t0=N(͇n FHΰ3*N ?icv?b&n|MB:uQk,Y_aɃx𕆲<'B_9Eo 4(7WRQK1ZF*gppp|cհ 굛!CFЭ[ӦU z秊^-+&{*TPA6H`\۾ W@ i޻t!I#rfE kE`= D\S<|gGN gB3@H''(uTw/RhЬ^K1:11Qc3w1M }1X[UQV $(,qhֳn)HO2~aΦ!O-[.aid!͛/!.lB]Чe c.] =`@]`3&iΊ>E:h'L~YL BXW#\ ϠS@@/r/h͚q;4[2v&)B0PWlj!~`!s/_ s5O&:}i09%,L`4  _F@acہb|Iq׿VfM:ѯa$ H&3V91MAYqAb4As&M*RQz~ ݀xqhTPyN$'î] YQQVzjU Q(SWPi`C'y_hp7/S!j(ڿ*U(޽أGQ5-hW(#p4vЀrڇ7 4p0R@ { E@{4e)`>To@=qj*,z qN[&jMABV 4!8'z  M-`(,~mXa !!n>ffk Cb1<Ar' Sʑ@l0hTT3F c\X ^qctJ&.|?cšlܘɓUX17=w=m@C{C!4Aj2 r @xn2lJ.W"{wXlЀ'~},[T @N[!%ɍ 1/`%<0-T`#i"xK*(3|AnTA5 Egfctk Bxc3rLA^^gj VqٝaA h暏ZRr  Se@tGmҩu뒷r%GۙqM^l_ B\{ݝ8Zd7F riHz, 崑*@!p7ZJ( \+ q&a\o 8&rYq/NDL"_"` (j+HC|J oɶMLamg&!rCByx|d- #U(2MV*tah`h NЬ]JNt܅WCa} oP3HD]Kc'&Rɉt~8p,h\`-8 f77de?p0?9{&|lX} QPPhO%a[a~ .,-ɓ$' 6p> إ)@${l48z5Q|9˖nɻwm(/&=RP;J<_%}f bêHD,˵@[4% т'풊T8OiT2.."QRQnr'%R*0`'( BX,]>7t?_oBlva]ݗ] /As;/jُ?׮ ͞FI͚GE!9{gaѬ*Y2E[2\0r#Y !1iG>q!/TOq0 K0>Dn `cjL!JEK^Dc%,DϿ -aXn6 1L۶Y|j>E| >cUю:r'3ʥFZ=tT*Uap_P(xxV*gP|K&(wI)֠!.nwNS*& Ucgb)5p]p][͛0sQڐdWI@jd/(~HMg +WuP9C>3m Vs#PXIu#sh0F@tZ qU*e_kWBn...-ćA X1TX, !xaoK6bѢ9eڴ+:8R V΃#xnn =X!t]`;rz`Ġ*bڅ tV'8%ѴI½U)8TH2#UDzd_KE){Ú7ʸ+Kƈg +Kv@vE',#1|,'t Oϑ9NPSa*PQ`VPW"xVGJdTOB8. m5 7hͯ4g+cdS`t@y5Y*s211<`k2W IDAT @!>0$'Gȸ^0Aʻ02!X?И-Jj#w@yk!?\" !4x s? }֮(LQB9\F.AƲXWHi|#,~Hj]';ٳ" Ng eE"`QTOZ9c''(.a4_aLI!?btՋڎ"!r47:)"<3qrsfgR6o8Q"éjqs/o,"|bm~t΢gШΩ2..!zD1\ˤdz^9s:%hk?Tׇ4ƣE,0!O=x.Jeśo.aß*e˖5:&@ZUaV* fm`7PXmt"Q{NQSw8nF/s%ꫬ" L!:MrUp켶՘|1 (ῤӘa |V`O'&up1mS>nM+hߟ} F*BPstTRmtK|_PJ{whjiSMmiBm+ 2zzs vu8E+fluDα6Y nt~!N*D}|zR*,5eTk+sH\K=[9>k=9uRNЩS0ӝ#_*$˪t9o?"q;Y^է{?ZYM*ף: >}Pu|s' s\{T'[Nڀ4oM4#3f !11*UA(Jܳl׀$l\rI&B՝;=_JFG٬a6 0SмTay(`V[cC!gp:q«rdf~uC%48m9K A^o qPF *c0%U]H3_: p{ IRKc}"fn"j.rZP)b{#r_fΙAɣӎڙ_Ō5Z q&_-ePy :I/y&{ >r2sGtZ*toLYh'Վ۶f xy)5?33_æM)lZ];x]A 8nyRJժ%BLBH5/3B-UQX~L }7? uN fa3tl7T{:թCrӿEYO.G1nLa&+Hgײ}etN@C0$CZRwT+2`i8/bMv"@3E oy{V9_C68_k]ztvۈQQ/ܴnjΕU֯Q[ǖ}9jy?OU;Ո)V诿©=`IK1̚ʐ!IJ*"1q+R\,mK QX8W*njn;sƒq .Sp&91P", Ͽ#(p8 }>uHK| +WR+*V'ox(VT3'x$H iOQ _Uxy>般V8HLh"wH97lk՟z2{$~|ab"s?)B:[6T}.gD^òڂkO+u|xel:mɇ҈W 0P^B2 Wk&X5jA#DF29s r- /OĞ9SP%22!EL1 ]XX `p:s$8oaj^lK\%;s"*@ǟ2Ex l'Q "wneU90 焍0|x* MAyUɐ2.83 bz&b{`%-Xfx8&v ?(k,Q'=D".Rm$LH'6^E">c!-a_{y#S +Υ o҉R"JQLCE J BĨw?HdԨh؄0n\ , 1nJa =&8ău6TR 0 >_u=lj>yd׋/ ϢyP~gCOiDޠ&e|F}Lp0Re0 I{0LNiGy ;QK #Rbӻ;!x*ViŠ ,Tv4?QvU_I>x睍k0݂"XǯJp W`[p D'3y^@𷮞0l!յeFG:u:BwұRS_agxƎ5dQƏ_Ib"t/$P^p1hZ N -5gZ`"F`e>H?fop~$)=wt&8AH6Qї*gK8wOPUП+=sX/^B xkb5b$@" kXڑRH+sp-O<ի`ڴ+(.7K%{;R 9D SV*-7È&~m%%QҕJzIԿ>l5W.nj1t)ƍ[B:9 zWGd_%K[_CD9r$mKK1EEamԈ+dߤIAEr =`/l%f.A G;Vx2ES0&^wC|! q{rbip CBIBҡFmLDDDXztycb<Ə_MBpblnrd+<2űv%*gO\Ed".%?I-CMAn)6.84<2 ye8\LC: ;ō8ǫru!9렿F?GDǫNt>,pPـw޷-ƌ1lƏ_CB:hp8RUrdy)ٜ&/x-[k׎n/ĺs~ehۖ*U(;%KCA=k0_+4e4w0[T&8H`8R 4O@-J3۠X8rS|`Zn҄7d"AO})ի7|8;S_ʠ@"BRO1k= pKOM%&]ݣbG7Grt_}nJRu kT(nyk9/_Bu헔^ݛ}x[HQ%UHGi & Rm[BI`GI  upCQ)HZjlzWKõ(pΑ2;"{j=_}XL∢J[u%S@XV=ʦo m t%…Ѥ:3#qpeʕejJNox& ƁL*U(ڸ.9fP*|yG Zn44 }KOԹBz ?}13rd/I'Rgy ց.$>rd%Oqʺ -7׾0݁{?v[8nM;Xq3luNL+R}#ßNCФUg8T`xA!K4WI,ƻGVF?nSD3Sڴ`=lL([V9"dpt,(c*de9Փ`ؓB竬U3+[է?";ᖆǽ0~q7EVj2YྚqB nJg6>kNzYMp}'pHwCS?)lVҙ_yQ&7/i|,˫NQcΏcQNˉRU` *&*UMz4a[Uov}?|{}]J"Ka3 sd9RFy?4 TP.G)SMcą}AjHI0.* <4&WsXZֆBi6R V qQ*Xm`AT!JX):#0 _+sj()ͺr 42;e;!c3_i:wEvJ8^cU :SD$*'Hb,0Ce c[FྦྷW1enُ+yL\Mv\ŋ f_4 1Jo` 7WT|jɓcBJ~TC8`×rq^ +WhTҳ^˒J upx= mbFyRbx+Z p8..l¬G1{QTEw^+m>4;;<&~277w+nUabfDSA4"#aPa>)T wO! Lj0dIm~  +*t[/p*;:'RۂPmBǪ@?V΃ݻÅ?mr--q7-q0CPl $?8{$`A܇p~=H[I ~$+s"cq0RC!<:h+Pt@AWbIS&.LsTPߠ)G T@݅וt"lcwYWMYS܉1OCpzN c8x3tB;1)h*I:9&WH/_HU)}B۪YSPV! ^z m{jDzb kҡ  > c'S<@}PQA[px S;Y ijL^mmC}DoUZT)PuKKPw4Ĵ"wwiH)c^??_oİukڝjb|8|8xnpR' 8*0b|_/\^pEɣI|49IwSFKtf6m qq9%u s={]S9Rf]L2%u 0>8ҾMQk?bAeRTgZ2PbŔ1ŘDCސ +^áZX| (]_ ԖM3 hl#6:ozm'ׯ|(L>IakZϗ@ p }?|  (ua`(` (,|``h24]`{wa" _R^Z< 3dm6?)ؿ)W.ȍ"6۶ށ|rj=}KMm,\X j("=͛gѴQbˋe̘_YC? ]ogWq™3 c8q1RO,1sP t9Ɂ҄Œ@qq4{…P>d~ x?Df߾t谒#Gpw櫯SXXfX,f}1 ;̊SnV3g'7w b|i?qvlUreq8[  ? }z(Wa(qETP?CZAKOC['GD:'Bꇟ >? ?#d  +j8N]J M-H)Rx.Di4nU`(2i<6JpUwA(\7ѧ-צBv=ǹۡK0}m?Hj0qx}l͟Bv?cgJ%vQBEp|${/)bؼ=5,;cdfY<{oCwKHO/a|ʞ= -8qq"2RzuUjTysCu*kdef'54i=ȑ^ȝwނŒ7ۧ_*ժma˖h ̛7ȳԫC8*9sd8,CBϟs/zӛ)V f'\?(Dg cH. @[ gCR2Vh' S`[ h wj:;|p-&%alhr֡백MyDU۝JpXK>7d/߻Ò@qޅ&8eŮv+8i>Qqxµt)dj 8N7ӲxoEv`uR M RAC59 u#2A++쥠g#\qE.K=XU%V%ѣG.?װ{~`ݺT22,vرHKЅiK=h5khK/ng؎ƓψMٺ5E)bʔJ!T.rrHK+rY4Ο.|rիfҤo<ðawЧ rsa۶z"<E9K/7=[?S//H(]H;6*.v2 :P`KW V ¶u c"T;R% vCדP#-P+Ŝş3.|ORa8K϶ׅs)N6Ïb2̾ q68m$tz&)5֡T)Ц{j4QR HO<&k:b:tȵ}&=­j[ %%9mжI~[,fN{cժTk嗭˽zmF|g23 HN.]dfw=R=@PRneٴI*:t⸽_9|'E3pƌ j%)C@ׅ3DDXuv:SG_{\+{$zq :e>X`&?_ V ;)_!3ln:#_7th7 fnAn6zf 0[|> 'Aۋgʑf*,̴X&(d , JY=?"BѴju?ÇzHlZM148xݢ`%3!zV >+|$reg9DQl7ԲfUW4Q~Q? Br0ݪN{9/Ѱn!$;P)ω0sE xW!c$Oip٣cI1f Q5hx5t`·|ëonA]8Xq0z^JK9(=&'ףcG ,8ÚPl4ՎDM̙V&))wc[YbݺDuœ9ym.c.cΜ:L& z̟j/bEP}:y%11ҧOYiÀ "ڴq]j:"sW9|X2KxMѵB7V|ݯj^ ߱j{Mu=ضj 88޲8v,|H%r WBJ_A sP4/pb}t_}]sp9a^ ?uQq> ӛ:ڈ)^Aq0sA*~Lh="{Z5iJOfK` x|j[5ɝo7L(Ti ɰo@q<ٓ0_'~WW8vqx[G0qt@N7+)7µ7 ]ބQ;up6?Z F7m\7/-3IN6꫗kh*<9îLYJ YY1`Fp=&T[qt4V>hZRСWLVkWGЪY@bE~ >ۃ_nj%+YHcJrrrp1: _GQQ4[ҷX">=u96qEZ5ؾ=oɁFRT6zC" H͚BKliM^8mġ(PPvɓQΟ:s ÇʕUi0kWޤE|LC7pp=v  'jiWm`AW¤ߓ)>pg#U60o>  ydtM3NNI83m~X.uyLH:10x7k{] 0\}i^0'2Fyn@u'd[vkobs5q& nX Z~~2YR78fA}lx|w lZܭNO< nuUЕ#1_ ;1 q<\ ᄏs]&q6P¬Yu9z4W^Dbb!Mp3kɓqԩs)S3xK>Fb]Qyyq|Q v]fݺLz^K暞LLJ8z4^Z,Ig{[&YH);rfIvk@[e?؎hyYU]ϝa0ב"`QA!{PIloQ_oy-QZQ4DI4Ql( aܳr9[<})>{}Zk5sy$)_w_3`ao:mwcpOmrPtY4$.|.-[](W^9G7iif[9묽a*)PoܵK+׳x_V2@B OԽ-v[YHU!LX<ο N24yLwկ³ʲKׁ&PmlHma ]\xtAe\9n`He2D3 p;Yt=k_l\hmO㣏ZzҴk+~Ү7b$Ԙr^_2^ u<Ebq/C{Ȼ$ފ]zo+ MzrTH捿e_;TINV?6g-)?aWyݏdSk5?H'T>bcw~7*  G>Q$I8ҹrTsB1V7UTU6,$b^D uo;]L?i2!PKxXGJu[l3$q*e#O.E&lG*eǙ+B:^?u Qz.C;)]܏kj~4Лe}<ba"Nۆ]|@o,J̣!J'\Z):h E֧dmwU$l Lxh4{8PE@H#H%mѠ+mصnȽu#fUQZnڨ"FtaC-tRt Mv:>+IY;tS([]Z;Ȋ<4\FJNi1;k/gao]XR l#]jпs^nJ/.qNk_ s+m6BC: ͲS`K[Q~@I/RfLaiǝ0Kt뙘:UcmH22`+z -MڢUR"ԍ6.Ww^jG.4RQ@ύg>] ]G.PYYG}Ϟtc.ܻW\uޞ_, Nv%F`CnȦ?y^㾯+yF`м_JȪŠK[BUkБUAdy%Re74kDq6ⲻ1# 8Mb#ZrjtHL<ڳ&J>vZir8]RԩYtvRa@Qi ?xj1O)2dx3M&3-PV  -6!ylRTDy4 'P5@OyU: aeF,Gϙ 2r?ֳѫ&4zf3q3|gZWv&(wOWکy5]H@;N]4Yujf-*v9>od )%{wcřpFH{Zfz?F@Fc(UH?鐔ΑtH@#]R>"lStJD"cF*eM#t$AxWz)J`">}E" G':U,p*;hhJ i4V(Ș3d4ΝRB4yQeUV}!jq@CmExgY*W$R:-RHxÕW`e`D I^BIכz9IsWd*"RRa1=)TbZ<ҜuP)'>BǦXyIPUBZmW67=m1nymgF^KZ}D[&i+{LqGN~Rt.cX9,NҾe`A`.kTÊ<ֈ$#ͳRm>fmM;GWXtN{ 5f%L&b R(d O^(|;1tN.܀#4TȰ21pl1 EIdfZ at&&tԥG{^Ҩl K ~$^Er,ei4#<jT'zbY"#s%LtX:aI8Cu z a#\LKC}+Pa-a@J)Ekr@?׊Yx8JV5]2 i.)_ D<9Mny$I&2Q V챮4j#MB!q+cs}*-!Q5ε բo̡=; M8(R%xK\H ʹTSѣ\!1–+In/Ո /:mtI Z@ Ph!n-:%:ITgV[uխt!0`X,1nXsIzuB> ߯PUN/ !.p0iNJjYc[j8u_\MpKRt ,r,itL UC(}4|㕕G G$"<(: b.ȫZ+5*sI^όPHbJ/\EF\c*,G1/#11>R[ nLO~[™d8I('ya2 Wy4:"N l48G?ץRnj>#m_ ?0mos 69;Ab_]`C+E.C?E698O`c^~1s⩺YV͗܄4 Ll;6pHT=)BD̫줱'@;k.NDX7j.!}<7A)Gb !:li–Ko6p3pH0qV$ B =v|H & pbC4FIQ 1 !^fݔL@h'9b(C t) $V #e\eQ7̩#5hġQlLֱ<44!VG|2 oaK[huϱi `M;47NTKEhCs:)6 { Kl}' -S5,eF-Z_4|Д!}jY؆#h'4-Z B"=W @'Fp3 BmHc3 m[u8&,P_pGj>du=2/N^iPK~O9 r;=΅2x>2E݌t3j0vO=F# HsҰqHlldr h3fq-WR]렒־VϿ|xq<ƴHaO͔ec."ɋt]=!{{*= mS\yjXzSZfp#+찐u]ώBˡjYf]:P`3' fwۦɲ'AH}: H-djEd4,bkSj"\p_=Eji S*Bѱ½\ڧ҃.NDvH-(Eodw,#OUtsOZϘ>am2^տ^HE8G~n[Ǥ]wOexi5yC5-d`{#+Ӆח$AD $T:C*;dM8XC^弾ivWreNGG2MW5WJRAP@*4â_/Gz.O< LC'<P_),H6ECvw ХB!rDx,hGJ]KOݸA}%kMٗ ў~S󆪻>y\uM``TH8"y4l4}@X2ԍaTsY7T*:L@3iP$dyd3Q%O`YoaN4lu;fEr@lQյJh1H*h8渚oL@cC4%ڔ(њIJ翦[esd+D_֎1'HB8vTF i%"id<"qhΫƐ 4:NkI2ԅ%a!ıJ.y$hp(%¥ Q8AĮ[G+6y5ߘRFP p$ TI0rɲ~V^JBuQԀ8Lz2PP]4J4?ko)j+_OBaUfK~>/A/ eGrh sXP]4oL8x RUhJ*Rl Qa$"M{@zl:Wy1w '<3w^˵>'rn[@bV"ֲ6;J"xk؇|x|wSMv*VJ'#o'Mi&L2l+zҳ$Mv_ĢI?crd歽}6W=! E}4#P]:A@3]N{}§c񣊥XץSB`X?~qʘ '"i^Cބނa[ik@t, [AgF,A^( 吤|eAe(/_ht\'/<+]d|'3@QOw 7V61J~&487f*)qHR~Dh^]5xBmmńA=6Ѥ0%"1"e_d0NCrVg:WdNSJi flu |OuYo.sKzs_py||FZJ/rȩ'HFyW =f3L! Y&o~TB{;\go5 D3#CAe %S .5MKuρӫ!0-E) a 8t!ʬG-f2l`0hbYY[F֭Z)p r6T? _{i 5w9{9%?;am>˟wmgb||șp~Ib[b=HCәc:TX`<ܿJq37}r%RfQy9tȊP|:h"<蕴AžAKȼTC j%NꑰVB>gzdZuP t)q8ֽXY^h\=`_@O]Fa۰h_`2p 3$v#H5^΁z@ٰQ,1֙!@!φ}ma |YRCa*o5`J$ux|+t \[ =1m0 vAY ] qV[6B*aBQ]]6.UEAﴷTw7+Y І6ed㾟:ӹؘPڗe#ԧx )/ЍPXӝ(YMkR"rmJiYgxf >⣶s;u&Z閳0dKC~;LcE{RzH5SU!B6IeǠ)vIf;TUEsghR=AHzX 3^e gk+ "co1w}# ^I ZXSI*=?CА4> ("w: 2 ?XuAUi8ի݋m BQ'TaH*A?᣷aհ+t7Ԁ\\â`; xNhжRz BȺ73C\08o!S)kp7`82QHَ@T(ꊺD"ү{SUU0rr-oGW@aM&@[w# n6m,]ư\ڜ< eti8r݃`I5S11@0c}{L2Цƺ_HakCߜ Ϳ 2^&~Oo&\ɕ ngO Pip(w]Lc/hdhN7| zk2v\P UFdR!- pQڍq ZKEz ژFvA0W+\)z) k BQ $iMPb>>вTOu 8tXn9X!2#Gaq~*j934a` (%M3&"Rrȩ/vz0vP OdbYVKTRk*?8ed^E>vB.' YF6.9&1p+plfs;;&l Н[㪩NЂpII{Ғjf3\[MeO-I]lג*RʵlbFU]Cu#*V^rďTO5W:BCF5Uj2t2^f=(8HӡZVCҝ0Tm+x'HК ի`~h1 [8 P~+!%  +}_cwuo;tz.ڗ]]@'+J=ΖCG#ZuabA Ƒʮ jPǪh36`@YDx$uBnЫݝYdșy6_eҶddilc[:@;ֳJ(4wn+2/jxgjOFvd,XFYztM5 #@g:Ǝ}уp<אKڀ"e0QBsX_AYצamgC+@{m2 L ;AӾ'O1'eкP1`{!Z`ī7@خڱZLWϬm m r4XBЖͰ>R #G*H: X'e~xYG2T3P'h0^&miJ"3WWIABuQKՅ0PA4iXeWRlߝ NPŔNHv7*9MP@{_?ǾTvcܸCJ6e)mE6ٝbBY;PPJVfRӉN6XkFMds  ",CkG+]r1\~1&LɈ Jᑱn^' @!]L`&P) p:*!q(6 MsR̮%sYO3R+<Oɥ&_ŦA"ȱTNU1Iq*xEh(m #?fRVI  8 bAS:9̕}u\7: 0O}K{cU4Ox=sg=#jq#7^ pVDQ[C;`o 5b:Gdz gpe#?ǟ C巛MTR3Vc{I\6 0cJmOV_ķ[=@C<Q7Y M*}糠S*Dc8!$+L5VhU :H'5*iPdyk[0;} L^}| al_:s3aUH.7 }zM\.ȃGOM Næv% 8c+XٳଯLP>"d0r NVꞿØ!Ec"J&m0%ZDPѾ;;D/alD\bG 8D1e寫oAgra ۗO~z?zRJnV-l2&rȹtE^\nr1~6置Β2R.Urf19KLr ̟YeefECՀ)O!DN,~?2H0:v"'|qyz|>v0;~E^ܲ=3| ]֚ҕ%nPUVl˦PBx*/ctwƵWz> :BV*`ɍP0F,QvawajPtCJH zw@{`er+L*S R' 5x:֝ } lo N!e0\,ґ٪*}r\v@W(p(<_jH1sk8t59 6ʧk`0-0(5.Ur$6ͨ'1[ Y I-l׍B4Heg4?&vt%b!4J5%pcOg p|]Aư (1W,` 1ʖDp˺vf/{}YdY-@@_6kXNzd&A(G+]^NrCܷ$%O4Ҷeދx1 5OWB gr~ޢгȪOTRw+,/˽”PiP-ΜÜ-|WO–a趁#CJ")f&fo`OÚG`GS-ӡ/0J3|_Hws8v3Ad`$ƛav;i @؟_qR._a;Π$ ?~+0i|^)yA{5hÞ {>9 T\;6KT*#Cݐ 8vV_ ?02@xi҄ @r4o~d7vE uEC|x};ulQ+q{dkZ\* (VGg';BG^){A?3 }njв4G%\0V\rrɭP{L)L=)x_3 ~i~ UÔ"U\ T o#M} 6!i)e̲E;v,= aV݌ ('hi ;"eCtN* I#W$ IDAT}}$enCUG)'TIdtݐ^OCvv6T>>}>4ҭRP^:|ROg\xS q ˗(e|5ecCB{9XȝWo!= {;e!eպ;is#~U0Hre7A$A@7^k)^PJRiQQy 4 q#&S$V1W>c5Pr4E;HMS$7*3Y!+rIq}rnOxोYFR&5oVN+WҔaeJ-N-Cwk ,!yю-!lT'\4F8TKuq2 ܃6/&c~ģ_m2Ez+ϑvTZ,_J0p&/>Umg޿4߁[߆z%2Zt}\r{;)lтk|<ڛL^?z_Y@yK!{Od۶tKJ"CJQq{LiAz 9 HYS8,N8zb6l|Se5TbBb,n/w.KΠgh/={Kϕt"9鎼!J.Qt*_* p _eg@ڗQc{|O#3؟KeJp4\3'`^ kpE$D5<CyehDDx|} ]ÐJ0VvO~z:A))詩  =X_˖Ԥlԟ-Cz!"=x{W >>! >H{[\\?]"vhbhp6_Fo$ڨ Mc ĆчVJp4QdSaPK4¹ bP:z0In*)$i؃@5Hi Fk{Ox0<F kh2>O#)HqݫD-2دEk"Z22C\"_"YW^9a|{h_y_:bS2bF d ':- t t?bx2<)2g*O)جLMl4PDzn ˇ&SU,g̥@ 4O=Gx{si{.ihG Yֹ*NmrͰBXԖ|LڊCN.V>86\8?P52P_z7=+J >/dR|?` g'%Zh}Q@ycROh7Įgb˖ai2f\Wfk~j*apy73m"w?|44Ļ,k2ZϝˍO?MK=!mF6MG=7ġ鱾|7̞g I h>sBOe= ϧovv@ PĨc YZϝ O?MZfEqO f8G̻ 7h[n-iÀ aPZ#wDs c4L铝ՠ5|o|BgeK=6)K#XU8\2AKkhkVsk\m׎ a0i!4 @y,!q4 hڕ97q}t$LH֖CMJtp$'KI׍Nu+,%W9V}vZpG[X7n"m )IpxCڵ #-=?l;GO~bFTWt}OgBWhi9v)]NPquT'_/Bŋ&}ߓP0gj=qz2ק]+CmRJذ܅ I]$*~3ǿGe~iYKkݔ0i6N ͼgJt4/^'a87`]} #sd}Tq8֪e|BM^e҈ [yES#YC[@UUh=Of(+CTTGa0҃zʄ2oK8˞uma&=&q_&%D\ ّF~tyy$!" hKgI(B:އgV[\(}R+}Ω|ۗݻٰgO>Yt)v[{aM L~=Mc48cƿί&݂K)2{Xe^еnOG|=Áovl!>/4P,O~Ҥ_q231%mp _ *Dyc#)e}'DO%ՉS}%  H =|i<'FK}׶$SGӘ(1XkBFM0Մ} WZ*o@+4h`:< b =ѬEcХHQjךZqz]9W^Ʉo{X=v,ϧgp2J?s&'^TDͤNVDXu]GtFɛo77\(h]r791;}9ԪU˗s|ΟO>W߾F9 -Iߴуi\E_M3*D;3k1wV;RJO?g ~Sz")~yy\u>JxSh3ZCBMUQ@|!Q~ZC!qEZJ[IRRуZҥJ6Ƒ-p#ITU}t1S KYb ȡ_;Rf=6s4nAǴ9dغ5Ot !UH+a8б#>Ȓy6Kދ=ՁHC6Z?*c:Tz^ -NiBJ 6j2mRUTDS8Oig:1u (ٓ]tߟqJ1 p<|;(I7|[ȯfa^-^LodT~>9–eX[ ۱V!RKJH9|C|aJ0k5״ߟ}j 7=0`"z*=zpMdQlaXͣOr;;Z\L:@>l?l 2 hm|8dfR:v,ܿx16[@^F|1JJHx5^vgٌyi||9gҮz/yyy'K^:p wN&~;2 B Z6Ԑ0ֻi1އ}1pÐ?Dr 709qhnT^aזIZXw-m RR'S_j 'P~%''o۶1?#J)g3l~ZXi֮u~Iz~С6p6*`@QR7R"~+S>|Ls<$?![G}dZiRR i_mFVWǻEE>$6YC'0栅 Ykj&NzQ)-%&M`9q#ixOδ{i7t(k~yV-ٓ)~ *l-[xf ۨ! "PvnP] _4E]Q_hJcnQ$~Xw<`#P,.R{@/>b #6S2b W^}>{oҽW/&x#>K/eL)ӳS'}cpѝw eFwS/ MncC1}L*|Zq1Iwd{q̙\>d7M ƌaڕ9m8ӟczi~RU>m'?/ic92$)X:o33[&+ːbTWK-6m 7ήۮWJʹ3&LAr2\|qHzcl1V~~:y2kg554ZSUT'@ݻ i @߾Y8d0y2G :v4 ՆH߱#Zff1$(YY̘fJCZSC?c0v睜]Sc!XjtS9 `2:)o1T냖f NoZ#HS]a2&O:/b<(A##yqkx]) {7Х4Kst۸V{?Tjl~6q"g)@V|vuL&)K)LJ2cưOxS' D㕷bV0K? | O<BÇSm]nuud.bSLc 4|5MMR<ԿT|a<ƤSNa9@_ΝS1aB,/M4ڒ%!pb p1;  8ORh&\Rw o6LE IDAT0x]@_`80S&BGy4::Kmcň=;r$63WjlWn"^y^1EE^.6m 7pUTHܹ+w*3 0dzoC$>>+}ZT;$ \vVQֻո^{SY h!`) оNQ{4Ț5 tFMI| ֭[ۗrO̜IaSrsi9Ròe!"]\l^alWލ9Y$cܜ2CZ߾4Xt74@ru@m0.;;8bfp8tvDT%&RhЖ- C)mq$v׋/p饬6qԄ6v=$=8n6fplgoDAs3+yRXH?`c땀}v ~ೲ22O9JKjs\q1/|5/y۷K]G;tx=qs9 ɭ"Y# ۍ~R3zqچm/|͜K&OLBt&#Aۺud77KG. =z4^{-H+Cz&$=mC}}w6%ZbJ)*aH&`0Or~P:⊝;8Ah|N8A81v,NWX#ع(]qrr3Y\TD30?FON=۴z<=ĬJ/ yUM-ipݛB46 pޗ^O︃w͸:|7n1+ m-SOes17~D[n۷Sس'˸ᆪOA+WңI'!C$:F## M "'o믗ʎ~?͛%ޝs̡ܹlF~\7o .bSOeW3p 5 _[g!H^4屯u5jAn}_Dzc#(Kzwq's#0O#/aZL}+de KB\Se 99 ֤ ֮%^~?ӇB^VF,kjSq#Q{!uRu+D 'dtIXANcc[?` oB0<sPjӦUYhn|]da >7iл7'p ,/~[쯿kN4sۊB|%E'/?_| sgϦp,\Ss Z4oV2{UU13Әbv2ydC͔)lzDv?ٺ}6&OfWP QVv B@;ώZfc12.8ۈ5Ut_:hZ&gGXzVwʍ0R@IeU3P{Ua;,OQ|ڀ4-55xlSv駳vP?\KC %ư:tM$O-GAGF Qwd vqOe\~9[zpIv"8(,6}'W/N6=zDM!wͤ![ԏC etn*B-GhI@'}F"`еkbOر޴gиq?6_=^۲iک[Eo#2Μ_5j}TiRK"Gq2`kn!iటn[eK }C*!V qJ {}5rrY7%ւt1;]'E jL Ǥcpm5WXR鉑W4vHϦMciD0/]ؘX},}="ʷ"bݎd零bcE }'N)_aXz6]’֮}N!Z߆= ~äy3Lʒ9s}.h(ߘ yR⃗ 8{ݸxTEiU N<䉊gSE<eG5φhJe6]}B ЅzB2Nt;Ǯeru cL٬U,VUcOxTKC$-HZ.Pe -1 e(3uƈzij^D`EA{Boa,P>a px+꧙[WHi*l7IsMx<`z s\xnwB#jZy -s',MmzԻɫmpYL'[?+)~ECNt[~|\T4Oxo,6j6+p4cnߏ{.z4ز緳r' 4mô *rsKm-h¹S%xf(M45LX-i Т)|%/K&t4&u| ggVNb|',em%Ra+l0Gi{8.OsP偓~L:hq4H ',ul]vs k=,skX5jH AoKKbO#eJ'\!y7%M)Ӫ"fYJ3 :vfNDo h]Nu op -:Vl [4> 6}f]bd [*{ +aʃ^h\4-ͣ c,s<4G |0"^.Q?pKH`Wd#"\G(ޅ!J"5!i~\[ԛY 8c 9o?] ZElo;:ơvLY se6Ag#tR ZH4_ 4TiV" sh~V<j:EEN{*V^L봿e*,~ʌvJg6ibKӧ2Һm L߁[ mq(.*WpC0%T14Fdo)nǙZKK1=J\D~ƭwx|C6wߩLSSC^Pb>n99!`Xխ=@딐v?]M?EBz\~jС5|dzd. T   ^׺bϑf2¸ ƕVl`0Jp0(ԁD5mme1CtHtH4I'ncf<96@ "m+8 x7RuYÊbN۷LHE hx3iHrHZLOEl{i_f-+NYlj;;FB_;H@v<1Ļ8 !!ڞ% 4| 䄉'sQE,9H; p=h(U/?va.."Sr&ff)Y)W*S|3W(!pGn WӱgOPD)ISNS7~EV7'3`ǥ> 7,9vhTof=ڞH=ccFk3 HoiPRoa2i}?ĭW I .hQ3[3iaa5q{TK/3%l\F6ĞM)v+ux NunT.@@Pi./HfF P`w݃t@[8a#PVJ#}3 E-C8$D8$Z:-jZբ]^"’eqN- dP}nv{n[DlԢmqƍ "\6E?V`ga㵨 =!Xop(ٿdH#pqҴN\ͼ Yʣ5T[Ӽu`$x.Rr)e@iqw@D%a]b5Vx`DD)]]l۵Z3b5'qbϟ|''E-:%KWD<wh Dٗ#lH1@y(+l3 ƹ':@ ;d9hM}GSgs(D㴵!p8[]H?3U]B3DڕhFڝh6}.46%B,G (Xhy7^ǭü <-Ky kۢ}}x ~++0_EnC!  UB"F]~{7o;[BOs2!'YkbTx#E2:pp R!޾Mw8{eӵo}ر>9݇[҇D 8lVyVWW{y£1 FobE_MB,m(&(8/bu# 0; D9^^7D3nJ<6SjpҝXamy,&E@j."5o`te5Y,49)aqe"E.ӛ*PF0XeKcO!d3HCWV"(}1h:?P ptz"IK!8} D"q Z`GO?VࣉL)++3m4Rn,a 88?p,9rz/l">b?e2ބvu'M. ]_ O*S :"8%5L:ȥ+ V^E+0ale:фFt(?$Շ0\@_DA#>Z!=*gvl+.1'q/&>ǯYG7}J1O!IJn+x Ҏ݊ÂU\E|.6Ƒtni , s s@..c,n"(2YKb IDATJ)5}0 ~&%f<70egIg-Gǘn" ܹA?/bK=nK_Iy'h~7oePzmݶ&"OJ\4?n<~lP<TYk!Jkt}E/{]_3xdG(.|GS Bk8a?jK+Dg*J)x3tgR ޤ/ Lc03Yp#e&c@ `h9bm(t k˽,96\܍GRrx zh1ާ/` XLLD-q~4_s<]Xc:/ѓ{8 CM3YtaW:asY8#|Fz 4x ߙ^BCPOT2oy7Td/ilpɦ 9/IFk>=pq!I2ag*ܖ!i>aĸ :ڄ/HBR#Oq ,"鄋C󷺾2Okh|p/Qߑ":MX=`#0|(yKzSN> иoȧ҈XXʑ\F]t`I,">L28>nr)ǰ.ie6p$p?r&̠3'7o93&|\NcЙ{9a )dsq^>W\}8" n0l`/K?>L2il^K}9&ǭTsvjw4019ɠ G%s\ī@ȇ\@c5Wp+޼︋!]!i8m e(6kLEʁ$piO/bd&! L]L0\4r"4u3 }w$5S(*KZOLb0nCL\P]Vd2,X=",ͬb&M=/3(|Hwv-'X:&fPJȣVݜ_W eIʯ\~ҕȠ'A1f8Ћ}goA1w䥖z\RcVF~jp3ɦҗMڰi1BziI`X?IaNӎ*(@WS\X1D*Jppئ G!(0YN*ф [b=I()rDMGm"Ae"o*} ΥF~kn2{6Cڈ[p/չ?VK۾L^;Oq$_q|46V:5UF֛t|0 r;]܎,3/6SҏM+fԡkRZ^AOї&\<"ut/x 4 i>]D8wpEjN78s0Ҙ``ːa[$~3Z5?Q p%U2((i\v=)4Mw6A&A& eq?ߴk&ND1f+b8Os_X|#p ć|T h­ iN9(F5 iBэr(A8|ILz,a8dRWy h5*,qSq+b#E+'n)gs'RC'r+糐lM/b$ e3( ;rs$k|Ɍ?OYdSJXFgc+;>$jfЗ*dPϗ`F>p`(!/e?P'JSu<>bDz2 QLd+3t)xO)eWbjZ0aw938 Y1\M)5C]+)CI~` ! wqSḩn4$3MƼD3ɦdG!h@zPr(j2$TRI&ѓj*Ȥ 7%c/Yht]dB3 LtK4< i f6KgɡMSB-H>F Cn(?`yf4C)54lJG=.IoQ*|}xCCnJh/4:H9^4r|x)$@>v#?A;O&eE3tjMtG#.tO|T2Hn stfy8x\ZZ#ULѦTʟˑGQoi­澨HonxXpFvvУٹNx;ND@&3PCӗRQps Q2KqnG6;>)Ҁla ul&NTQ'jJ'~YL|%g?E]>?l.&Z^mz(B?|"xt%|FW?UPGv~mxe|@W)KX3|FoPƒ]d7gNiÙ,&}'5&ЌA|M\jxO~d҅ʹ{O&Yn~gWHTq+a6S׈51D,Ca=Ə 25`d%iOk#c(/;39 /WS7|&tm\0H @yX!yb` mwS+hD>U 7kՠ: }vƶ۠q*2E&DR)Р=: >ZB(hWd_q%2$,m#.ȥT)"[NPvIyMhrIFFmӼt:;:\#è}x(V@xA\^?ܰSOuVJŇJQx2S 2<xyZT@ۺ)Ӆfy,Rt "k"QQ4AEAV$pp#)UmЖn}0pP2t26\ss} g[zXğAA:E{?Z{b8-tDiQ},g KsTx |"vqH xfV1|EF)f%Soo9n?bL'n^Vљiv}2~9CWJ)c}xXG>C0X@:ū1B&?Е3 cP/$Hs1 r9Uu8@ AN]91X"nA#,)q ̋8(B" c=(nCmoQ1n` NSE.%av;J N2D2YJjB8w41BUsa5M hHYpHW߃Ha vڗ]<S@h>HjDYxXpFcRpMi{9@{gFm#wN r+L(U};\3yL3/N2Q"d"d9!H4kN k) eYg_3*Ձ;Z<,q2q5/ROL7*:q<,3m4D UM䰒"Ƴ#,yGΑ{; mK=b&a/FD9`>R\1rqXgHřr,ݷXu9Xw>0Ԉ(nH!ע@2D  -I895l4f59 hU`96f4?E9–`n*JNC'ݤ$#D)G VTl>H #urE1b" |hH/$9&}1"xH 48!&Hb30qArzv&= QB-ʻrn;_0`8h?R9 4&\T3KI-1L+))EȴTƙcf194~ycG+(=1v{~)]TݓxI"tr- -Aq@OJgJ@oi5<+:m0MgvN6+.x>8 9,A 킘Xd{#QE*`-Ō0[?]_ە]Et(vSM9[C)4t]h)dp!X \R‰"g3rAK 5v-&1ND >2!45#"yj ;wRa;e3 l8Mf*,S#l0t<PH=pL&UҙvӠH<2G#xG:^I%Ƞ A"F&}4K6PM 즑: / 4G죘L ख़, NȢV(>." jD.F;줎Bxv*N{2G z4I_V3bc~j_^d.#AF-.RJo62G=$"O=^}p ׊EUFZĚ}/8],$8 umqFBJÑ6! yT+C>زp1 L%#2u" ;j?ar/m%š 1>,JEL[_"샎$f|rH,9Zw"lQC u%-帙ƩKNb̛&a.7KiԎ[+<5'e#?NO&V= ,Lл"dp,l`7)Uta=0)uE:+^5ʁb`jy\i SmJޗ6T^M~i⿛ʷV*9Hǃ|U>HzUk}TvtC,u_TT QI'D*ȈpБ _UiAWX:e,0|V<4?[ Z~ҤcIdR{"ȸZGvc<OW0ǕkD܋LR<4x_M:u(PvQxi4wڰOl>~NC,mqxt:TРJ_HGOhI?Cn$:d eߙc&X*Vz'y`N˫r ͱ͕MӡW8,LQC43PjBf߅CveYv MHm2TKeLQ-xT"[ |Dُ#_Z@$R`s~m)ZDE `[,}:j3m'O ~R_CʎV!NkX\Վ~D|?. n$]RD:6'I; I" ݆L:n"Of%e6,HQ~-x0JDxR]E!E@q-Aƺ/R Li)>Ubntl|V8, `8KfOɱ;SAʛв8B_"$ FDE^%dɅfRt!B~D;#y^~CˌSSHn:%xkq8+}58&,'&2dhh !dv"3(/+A;U\J9Tn&\d6ws{-Kxg\2lBPE7Nc XqLKSA\;|TKjC#1 ⯼I6jIƭ,eE+򩧄1&Ml&}pzқM3`FhIacǑ Bpv utl=ft[nJLGUB*f|jī%*m YKCivDOg6tE:;LH*N~'Ug'2̢] e`r7GR.~FfRJ|C(٬"&^a !s fopS^9`-=q`&EEg-hth>9T63Syٌ `)E}./>7rĥ"q( B9Q̃LqSϡT1kb;O2p1.t8 e! {|Y3ͻx'+⌶Z7v jN/B`U 6=DZ+RQhv(3YբT|\^q Z6)&Rs$1[-../0 rt0eNfхCL'xS8oiޥ'&zӝb /qe<؍/)gCs1=,{Q =9Gʠ$Ѥ3wپ 0a' I szvgWՆYԟ}kz:mMUu=z7f)or?OSFjsdO1+yCb6lZiXNrhCF78L>Xd fn6&^' f{(eYO52b'ORNOdsD8TP+c# !獀{;(?vst'uk }k 4YL mWUqW>x_? NeOܿ܆2W vLtLVKXB*/CLlJꑥþKi$(uM$ )sm=8Y#ۗҲ blKS j&^pDoU 輇iD@i=LάQ&7H% P%Y( &&׀:%D&+⨟%) ;.!ma7Rw2aiR0;$d,)}Q-e~^916WR,@4eGJN4Qפz&RzNoc?4K1܀g2f_P2S2g|rT vMUl A!4:˵_,А?QktRKyk={Lj &O}Wn'E|35rcZr< I wrg%黴-ݝ.umm+ʟ%cgrX. ,sIh:e=;JP&uQK ʭ(nݽ?J-g0+(mhUʱu<I܉TFʱ\mNwarvu5=,j/[gIsJȭb wwvZ?J+]ΐ{m3j%Z[dsPfn|{rhe&rr{}7|nHјsCK#7a}nz#$$Z9ePoua*ga, |hmqre'f|aZ~/ex8 GQ&j&20K a6tK#u i)v4[y1$I$pmG?<1Tļ .w66Z'}ބ]DeLO=Ӣ`81wRwbF'ܿGtO]yLIݯ@3O FEm%04A_?Xnn '''ǐrx.@9D I{G@%c7L{'9ItCMh5.yH3W rt20MS!q-##qR8 ii@H)@!t74M@ϾiM!XLF"B =xqpǡv`iJ(L',g !~jiHfAHN'~@0~|0 a۶Rj~?Yz%*9MH @вŽ&M+|ӁP1nQwH)#@TJim,j K(˲B8H4Ip8.-˒DBj&[[[eJ~mT'!qt{6!qx<|w8eKJJv5WRmX<RZK'I$2 9B8SPP.iN<ONUm@N3MS|>0  2}>!YR?a4`)Yiae躉u[Ɍ4`JIY@e(vێ8hh8P$r|f4Z?SJ;Ռia;,50-˲x1MӑRn;HI$۾@x!Gz"*G)pR{٥ MӴ@ !B,F-XU*e jKZe3 !R,&;;P("U8_JqaR,rt]w~m۶ ]]ם qDz,S 3h҃/#Jq!*)1,&;{99 ȨN! =6_}~`frą&'9N$r7hmݡu]- D"%eYaV"CH$,;8@x0cINB?Za#{K r?)exgIwff!g3Y)Ăl2Ӥ4)5M;;ga|i=P$L#%640-3c;ʻ BPr<Yn#jQv1u)Nwƺ-uݶm,!-]םD"a1[MG- 1 .B\ g&'g- ;{`ræO|x̏ϓtwm;hmI[,3yAD"KpBXeYB+H؀DQ#<C7MSd#Gdeeyyymw$ A$Cz 0:TnT$ =&,-3337 Zq)j'rrXn<ؖ9?)>MçijHUe @ ji(хXg'_{-kʆEMwummhk㵶6>6kOK)mEqB˶m[H$N$ҶmiooS:&i`P+--=_Ӵ ()KY ʛ?&m|GWzpIuuORW$HONY۶,k2!'ieY$D"G ?w.(y[Wcg|hm"p/^WFkRﵴܕ]i?Rʧ<li<]TAÀBBkY9+eeq~QsrXMiwn7Sdʑ1,$8hj4 |byyy2RrmmӵbR Ӷm,͝&\2ڱXN$$}%B|JFAv=d!3sDJdDrۍ5V5jkv{'6;`"$ !mOqeYV?x!Bo-b00}6? ً^EGE ;b| ͯ411M75Ra^Mݺ:xNaڍӜiV|㜇k_{-_I)}MdccP{>PBǝiڧQ4]b.))2Ub1?%ZCOLZqj:;)0x=Ōlkme]m-8٣R>l/l>& !e%\2aYeVww3I¦Y"???} !|_̙Bf 묷:]Ǜ+L2K}SXyȶGRF1)e\-!DmS{ -Q]BmoVߙhM\ʭ|GJILytSbGlf,w| cOc2ds'ۿ;Ȝ}}gѼG?R;)d"ϓJ:aiӮB|.2?**~<mHc_k+A !au Dq*ɺZ~}0G,):q~nYn 8NLJe%&{ e>}u].0026̘~Lt;;u/|GV|'6-^8pG>m:?emw'""fv\JbiN}t_B,lo4+gqJ&–'jkw~&Km߲B2$mDZ@ipffBi_̜y+7eNZg}Y>w/QuuZHX7|)GJ[˲~8N*DĶH@D"DggvAB\@a ek ?)-F:Rliу̥>Sk|uQ IDATͩ+&BC*+++M]\]ʹQ"+'v462Iwvb!]''oSH{:@βZ,+$lێ777ۨc-lzoڴi>7⼼e,Zt;ՓYu;Η;ޱ/#-_ly::l,)eKJ8N8D"s'bS{zd )b+=+k~^N޲#65( 0;_s-R~N{J:McA4@1cՆa< ,>#[iݻ 6`IIMW~?8j'MkY[PV9_Q@Bh q't9oڴi}>:sg.@ ?=XSѴH*,z"::^/4m pRhF2F  zd[0+..`fC882/,N/BidTg, .F:U9+¬4j7deei>H$r%o9CO'}cb,X;3~s |vBh..X0&!8ܹgߏ.qmeöN!DeYIUw3d"SQVVg f.XL{!#)1x-1~˲.lRJ);mwb2ښH<80UICII? 7WhŹ:i U@~മxK|_7_i<[ZZ=Nt՟BQ_^?KndG45]] p^u. !273g6BRvhdB4)a/)k 'p0s-iIMAp-h=mm;)a R>RJ=S)e BR|A{/.>/wi/U>F8+I7u4CCh"-s? W ;@9A^iO*C!TÓW_G qb8<<&0+3%zf03|W; l*Y,cM׶tn,4%!D"-S!kGau#^F@c4|bb>`AZwP`Brq^wz'%g~q> kYs.P{ϡq-(0mhܬDa !~D#Ҟ4|>}ח71óEyaYhuk/5Q۶B! HKѶlj6e3iH/۲z)XqffV__fJt*+9!MEB|Mru]B :Q[ M]c-1FiBCH)B| WӴ,Mº~/-a-Jpb*B,4ͳAI$t!DBj%n !@#݃4L>3),3YUftv뙆a"(;PP0~߾Ed@ҥ+p8;(?LcD ێ"2r9B, CJ4 PH3SxHcg}K˿6ퟦNecggȈ/ڶ,YYYq~0jSײ #КHeb=_@G|8*?uSNK)(DB_r$3U ISa>Ž_FJTaQlD!&>u]RjJ Ĕ A!kvFh^/+Tʀb]`X>&сTp;{p+f dGy!5IW3V0!D}j)aH^DAZ ۷w8%?JSKTV@ Po]adrP66Fbim|~ߔ^͌35M+u@JcFH4;vL y?R 326nL'`:/oNOfor0w5 ~'I)u!ޏ4#8nr?"?%G^x?X #DWa6m]ŢE_ιm !4@Bh.;A#C:i 0 1;S^qBÆ"#JR)ea9a5M $'S8)Hs9ɍ=ǡ.F>ZÛ7chX1IT{6)Aˆ5}}_KS_ 55y 3<ơCdƷ޾Y>ҥw"!ix> t7 #qkW,}jfq 2!(r|!Da>/q1dA ֙39ŵ7xM#%%~u>ƏW`in@3UM!ܔۧ<;B?<,]m-:+|^^C Lhhsi~VbL}2oN]c:q'&=rujz5402 4˷V !rYBP0L*&e1j͜W@{>+E^/8 ^mi}9Cgڂ~Z O?i{ /Z[uŗEdPR=5y>!D@&d7>fh: ў ˾ D3|&iZ-xhLwvt@wIq1:\cVSÆ9m12zF ^ii}x eLuB>X'8R4jdp4G`pH liiʁR[ȘɌZt=xz܉v->@$R6TWBFFp6d2hLn`PF=!} Ͳ,=Α?z~OB+iIYFdXpn/ A)eP4mۓT<[DTBܿr%=~;\YV-՜)';)혪q% qnqufhw>NgguƆjxYnR+UWK)SN FJDrjIUee\QZʺZ;p?;ƟcuA7TVrAQY#.7s C_CH0}4ə+ MĶvBi,X̝)5Ǐ?FM<:yy(.n)::ޠ)Ꞥu*߄N^rJKFEƈ3oTim{& i^Hi6@^oPyٙVŢo,*lt$G WYO̦j|9J&l w iRJlƶmq `08kBpyi)8<؈!+ K)} 2$'XW[ TW󁑛nz }U4Mb`pa49C̜45@SKu;~ Y@vBbiZ]]GhkA[Z[wֶ').K).T*H<$N=&)]|aq y~v-G~{4ll:]TJAu}]X5csί$Gh|R:>2 퉃;|o2E"<^SÓuuȦs'gfgsQq1srXCRfw7[[yzC3 ʸ GITySN\1KN럥a=ilDCÆҙOv bj K!Dl5tvuD[/de#;{!k)*:]7ǧP}5<5Bב_8kY_c]t \f/W, uw Fq r x}-q[JRZ)b&J(7MnjZq空:6׳w/3M ;,!'ML#mmlk#%WQ 51avB02(+nv3a=Ϟp%f)@n[ߧiQl;n~b8AflJK/w# ̜k?{0Z'q ˞9xA^hB&$H8B!V%C*9afos?;DJpR'Ip7%p6~Lzد\+*m;]aDMMOL2{~ pJi%*FC,HHVp<&˧idaNmNFche ]Ymw}H?★‡i,뷕 ya(|>4MszAR3xF=a qC-Aɨ {a6Gp#=BxFqr,4-Q K)%u]w~%lNK␊*?U)1  E"\2q;R4'(!:LL]'iH bDl܏- AQ0ȼLgd ;E99¯MتTnz̹dfa$vljh&!yL=+H~7=x0B `>]]eTF=,79sy' 4A.^2ggRR*oZ FAlu3Ғ]Pͬ[gQvu᪑9R~h5,!XM3hnnRq& >k X[Pзlڤ6D"&}H@4= S0 >MFRQ N٤YSj[vYS8h`PB!4CKvD΢rLܤaC{کJ"|r EQO&C&B ?aд-B!F9|`% %wvה3ĈI@ݓu[BaI)m!-tt]O5SLJ)ufdd0##{=xaBHS%Ѷ}ns2(kHt$ W &BKMT\_A>7"tAl2.hЀwQ䁓p#6F"!ZŎۄC]kqD_\L<"mIŬgH): k~˾lLzgEi6#%ڑS&I: &<~#gq:Fx閗Dh~f32}?`Gm Q|Q1 eWv>܉Ґi#&}:e^LR'TR>ҟ< &{ɄY}k~U?_EǞ!ALvO(VzP,51 X%CtJ/W1f|bE, 1Si0r'xppaqH: o98D/IE>YB}!b6;́yմ 錢"8O=)5O5H$ Hjjvxq()~ 3^ J o ]fNw8{#/Sxn!+_Ui!yyjVҠ$@w7<飪 .^xaR]H{߹Bxzo0^?٩䓃]npR7'CAvy dCI]tЁu|# ADiiXyaoeH,&瞫f ǎO@K:?c\t"(MMJB\x",Z[ٳ!7Wب]Y ]Oڹs[NO3{6p(ofTY{NMafزZރճ9u3OddWY\Ugٗ4$B5P,EH W M7)EWr!|n>!^⥾:|`?gQj먤o)j&˹yGʎ v7s*>ͧ{Q7Otm {=Wjm۔p_phM7Ej*Y_g׾V5~4%=oWR3aF% /W[|CL[P\ ")ʘ*3Ƒ#Yw@4gyIZ)6 ە>!#ȰRO6mR<*PB a={6\{NJHoXqr?)0o|B(:A$IeY8C,#CB3Ě_\r$8sO Y݇4*|tgTPt@wnt5XC<[ϸiv8(\tQ/*p2)~>5M k *Rs--j ipᅊl[ R+I;v(MFkka\u:_̜AW<ʕlJǍ/XIqJ0}Ȥ}bɄFiE,K HD5k)N7:jRݰw5&,nJv8kL\I* R+pJ*tA~i/pC<3tAYQ" XTFO$SB r)d``CuظTo#OD;#gvH={ 5|s}lڤfܢC)O ٻWS& !嗕T66*BpI_{y$K9}$"?Ғ?#R )G{+ͽ,[kb8tH5WCv2s̟BUIG<2"@-I$EyK'Ȩ#c\!XD6}Χbf^ IDAT%+Yvsw3<^RJiGy=~O?syi.5a;<>|\}R͛ӲGCNmZ[{ڪ>;:?5u$tO<+"p845pڎtϕCeGX. zWM~e/m~$i_H$2p4GU%䤚)nU͵uC*梬ooZtOpj>l.[sp!^~g*{Sk@+x&A;:Qq&12/,a ty@ut,fxB Mlv3{q硣 ҝట88}HL>|c^y4$D0=e9]0j=ΊQ[e%\rZgƍJ#J+ezսʜ`h$#COrON_BY}.X{nV$Y\$ԁ)=8~4 4qAgg&À%KlȚ eSMmr9iRZV2IL^&N\W}0wkOR_vW8 \ w_r|8w<X|xXjn^"^ !8jX3oIz[ie;Yְ"y7Bl8g=sU=a)Kh xg(e,U]e?M}_;VxK>ex1S"/66#T݇׾6jn~DߑR} TPRב.~;j?yνdFfWDB%2O$G}B3F<:<& Z]Gvߙ=kr$!chGs<.QѤ2)xzȄۉH~3T3s=d*PvOGUhbv.LRu e~ m60$/7%,!/1.vD39O(4o0Xyg(Nq=׳4@hn18㣰=c$qqǑHD$E܄@: jkkIYL7 ]WYV)n%Nsp8p,`WWInRJ%N2"T 1qp#BKx,ZIPW/oW_͙ *eU`Iu<nj'^]`rm)-p[k2_` !;+lTLr(H0%@C|cu˭g]MGP2 HD!MĊ[l&l|bΈ唻@')dkV&zK9\uѩhIg(9i'޻&CNk.FKB&fϷ&j[k+srҳ;57S>ֳ'$ .y]<&Ý"hP(#WRrEEoS_׮U+fyammNo\KT!y}48r44l@JRF )eK)S7>]wՄRw}V;:b]-B-ݔt7Q G`z2aL?>lcH%qBƥV':6.Tf^E $}I_CM2#zsND9AfǬf5OTBRnvw$TC"JFCz4!8Ou][wWBKGUkҹr 1㒃nw&@BJH ,KB됴;H$ۺU?';S:qǶ?A$(e /(xe_:06l|;l64]"q?c)mjٶ$F7%@HTiJ2uFڣEh,~ڪ$#y+BU/°IA9d{KcDq4TwBxY4,`5G.F:;}fg% 2IQ6 2B "#Pò`O ;yp^ X?Dy;!h[-¦&M#Kު:y語Ւή .{vOu|;.* Oi|_B _ƗM|qGq? oW}'Ǖu7*k7ƕ/d{.U-B4M~~{ɓ߿ާK/~YBD>;%"Zk㙇w ˲IhkZTJ},{s~' VW?^x'7p8)-:u~tmmBd2k`2ә P66nϟx߂H@."9\b`nd-\3Zk[Pz17Œcfm|gDdr?s3`꺭D?'4()`(6ߟ'o[Y,@_ůɞO)ҟOxʧVB.13v4Sڢ(RToӈ"wm1'Ry@V"R(43f~7@Q6I[T eqEo>?w#?e]R9~2wzm^zo7ӧAwD4>+a"RjMQ pv `3c̳U3E6d^wpe ^A ṁ$NI kzCi*QLD.9t#w'W^|']cOoQLEd:ڮ[8YYE],^œtBH&"R_ٳOQ&  _u>PA_GDб11f<Jcb1ZV$3sKDZ\}OP˟-dφC*>ϣ&'2\5D: s[/1p&#x ~ };u-S_;F| 9rv1p8r1[VJ`aV ➯9CEPUjћcnm_ vIn1&;"-"["ЮvLxY눝R] =vJDa}0x}̓|@ ӯ"/N5>Q#zo#@Dvh`acٵ1#ueƂiX^WMTg'o hSTw+)nY2Gp w {pVx៿OENvE#"Ƙk/p@YDDm"^vO9<:ǡNw.F :~]CD[uHZ;ZYyL113("u?3kHKOә3OBj3Woܹo(:WwehvYkY-؆T#*$T)U%El|refUS,>; Y1ml|s8wx"sچ2g:nNYpV0>GqZM8+DLDDO33kk{?\_?72ic!OUo蘆1_-:<e9 ~{ @5(I4I*374+Vh8BDчՍG8'|gDNE\pҷӶ|+">]F33F[>kcL aQ`0qXAd$IFc)M#Qw8ß=|뻏q {@Tu'9'z׺ZD|w{"rZk}s!˲~8]z DV+I$AD-f^f"ZLjDtO GmܩvG67 כQ0`ҦŴ=WlcEkZgEQvwwKxk<,--%iVJD T -9а"f:X]}cy4Q|[K>vv^zZ`knu0!KL=MZkBzZ뮁<w4,*vZV8n5U"::NDwDt? :O}x1[X)#OY=#kmvDdE9#";3[%RDVJR iFQ؇C"̇0r }YI|fm 3kkXG#/76F{ h,ԡdDätXk;ڮ |4<:_zGQTJD5TZDDDP'nXsڕAb4E Z탷!" d }  d$BkDED]KJ/9aׁ]Ƙ6֎*"h?~<]}t5/_[..pFmˁck7Nh48TfTTT5㺵m ,Huj?O,-V ۸@|@[;skvwq.N`sOkcyQeda^@X1&Z{^Qƍi&J*C5&&7!"u"9_6h́f45iz1a:*5aT*HE!C(c8<,; Fs0& &=q~`Ac,1vlQ2==c̀2kZ;FEx<^fi $I֣(:f=0)Yarh @f_vo.'ڸAz$|uqNm^_b" 8\(rZm< n+P+++%y:.m|j v13>hLD[-MS)Qt$Flp! 8exCi,Pl_Yl #0:KD=cLeC8(pU𠔊80s5"9 `榈4<B @RIYu"j&O/#`'`m@BLh)r "^0 ! 'wDdITf\0EQXknLn# sjJ-+֘cֈh1MH]{sYb?8g67/ڲWZy_M71梵vCDݢ(n[*F .1sEQ@Q)p0L3W€QձM]{EHM)); ^`-MQS 13f̈2cd ZcPkȴ% 87!޲8LJ LӃW#Œ90 dƘ!:en!xfEQqGQTQJ.Ww k.j"RuLHHTXH-0gXxMog.q_~߁,z:{F~1Z9Sv:3aa -//'iV(j8̫);&G/9f:Q6~p*{%w^`U~jnD!Fp7N7/LXw?,u^:DtZT k+UwA>bnp wvZ932Zb0yo.BrՊ9vW*T`+·-āC5s1&""2A(],{(*/D<$2`3LoT0)Q"c ){q а۔uj턙NkD."kD*"$'(Do>x;2 &p`uƿ[n#=tؑglۄ{tNHmȦvu`bk˷ b5fifQJSWOq@/6))7g >Gh3 2'Swlux6à3Ck`33MdC?t"EQcxl*7qmӱ(fRS̩gD0 އla.H_ED-KWa|4qYp*z :%B(giUQ@xYksNZZ[ښaa#iFV+ak3!"ZU׾!dj}%=rcmn=xZF~ʾR'~Qt <}}W.>}g~$3`35 N綯eNH@D%(O!u'qA8A\Gwg^,p NHmB%YZQaɭ>`,p8<ABnZ\T3G%( OUƁ/C^QWlvFӰ5qY){؃Z[2sa6hc&"=ڌF#|XI!Mȵp\u& 8,h׷MK3b_.QMU(]ODH1cO #lY=TFflB`v DEW|D{γ^ ?`i-?a6xjkc8c_fTE$ ͼ,u6[µk,/9Y 6< h*JuithXZZb8VJD3G"qc"8P;߅ȕ }S_U`8Xk-"ک/RӌO)3kkvAEa8.0DVDtyЂeX ժj6R*87e@T:W ˗t}f 3鎪gý$U_T]!lψO C#c̨,Z[a?`3qsRaEeYFq"DDad %"3+_pPv eNW;8uq"2.y* VDǺ,2c]:  W@V("fVq+5+gDZֆ> SRXf6"bEA_4Dds`1zҍo4Z#",KEF,K 24,law2xzjQ$$]^U_w68 D<[lW#yd1 li af: Cfk }>L;1cɵe׮{,0VYEQDD)YgF> a Ӆ\ fk f@sVfw`FD1ƺ,U rl@xRb6p$(X)Z֪J%"blc })7tt8 lXc%"̖mQ/J)[UJYc53[ei֖m6"ɲLR!Paa?&R("(Ctʝ6@1k|8dik]f5PAIڟa3""/zXD4 ڴskm)"1FgYfoզЮlZFZkJ1((ZN(`(|틭SA)E3 a:3%"ZO3OOdzzEEt: nB?&D),Ǐ{{{ÙL&BG WLi6bt>|;UUeY{{{###SSSn=" r">D@ @9<<5MsrrZ|>2 ;MsėJQUc,=U*L&|nRD"X,iƑD4n?=IӴX,D*J%i\60Q\TUH4`aI0i7$E9ބ0^;Cc HcL&߾}u9rP0 ޭ!tvvd2 B2M[=dBpwwǿ2 B6 o_ðvaae0q>]Z͆8Sn "Xe)r8F#FhEIӁ@>,R)ɏDCgH[[[sss`P gggGr]bh|eyyYy" }??WFBR ~fYB}qt:ί_ àVadD1 t:WU6=ZeYy\~L!^@<W͛7߾}K$Y /(X̱yr q䶰~S6>  䅟Ye֫͟<}sHN>? MLLQq8NR%nbߢ"'vl6' |&!mn~lۉDBuFBPX{(D ٳX?gI4b sɘ$y@Y~t~-H&?ǘ{mQS 4-/_#{O-EoIENDB`user.png000444001750001750 516411413636115 21123 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00WsRGBbKGD pHYs  ~tIMEn o IDATh͚k?Xo\N3" `JiЅdѸda%Mt CڮJΪ vG8lq,IX"ɲ%%iif{%/ Aj\.$I;~(J͵#ȶaf͵S$^/pUU5%IBu3_Td2|T*癦iituutttK g{Os /^X,R*(T*ժ3>ImF,?fipYeFb( i,;SUs$aYJ41M˲,Fs?Q(0 * aL4#4y#pYFQ¯VU4DQ"HJǏ'L`ssR۷|--IDX\\R;} ;H[[[ ˲V\.۩T>z ؓ}-{nnΞoݺeړ6`=zNRv\nn^D"a8q^]]E;@,CтdYfggI&|A,#d"i Tt:/B<gddHJxwY\\D5Ms[ļ[B kkk?~X,F0YCp807n033Ù3gQFNMDՊ]ZZ"H022PǃeYIZu2nYP(###$ ՜VPL dgbbՅ,Nt'Ki211<@\@nuW,x"態6,¶mdYv,ŋ)-[A̓iz7* LMM  B!zg LMMQ(z6 ¼200޽{QUy&4:g*{e``]ht_nXE\ӧj窪~N>͕+W7jvT*qe ~߁ H!P' reJR[qЖ_'5SxGȴZ6tvrNHՍ~ߘ>q)NSҨi&p=4)3>>k) ~ƸtLZbnVd2.]~ bIÇ<~JRS]wj'O&$QTx1>){V'ϳA4lFQ%_[[#3>>޶r!ܹsx^R\4QYQUtݚir9R^s9mY*aJ*B4z{{B}4ޠ\.Go߾ݧ vC^]9rϞ=#Lxm&ˑL&yGAP#ٳh4癞vډӜ?h4ʞ={ڮ%čꫯ/phD?~{x TiB~/^?fbb .81[om?&S'dxxg"zmAuNr?3ׯ_?܁N}6_~%@M4L{"Ƿ~Pېm,//s];aN>]fLS08vweyyi3Z`N0 e(VΨT*5L'cY333oےiKp$ɐH$uP(TUF=WQBH$d2n4⯭mL&C2ԩSb1<O=q=(E8ud`0l ) \v ۶9t萣Fzb^M'xVeYՠGUUOt:6tT%۲,@Цi^z%;:L$3::Eڲ1 mo[dYlD0 UUU8i,--zۇ=zh]_n2j#4Pp87n(Nvr|0u"躎i|7|wT*?@1::ʙ3gj&ϳeYI &ɹ34mDR0yIENDB`group.png000444001750001750 713711413636115 21303 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00WsRGBbKGD pHYs  ~tIME&5 IDATh޵yl?3{m–ЖҒQE\Z xQc G<1Qh@(M$? WR˶҃1ov{Pߓ;3<|:&P0>dYFө_^ `h4"zQEAt(ߐeIÄB!: D"$I}nt:1Q766gQYYI @DQTH\\񤦦r6mϟ믿d21{lA  Bx<K.eIGG7n```@ii)[laƌ,#jzx^6n/^GӍy` ..*côb20z$I"EqFv;`P2D"twwzEtUQ|ss3YYYQĒ֥bnSSS^'$$0{lf3iii2yd^/'NBRRf,AzȲLFFF] hjj"'' ØL'+8~+V`̜9An7 nݺ1ߕep8LSS׮]#33,^z>y摗7"Hbh488?YVә:u*Ǚ3gp~HRR(r:::W-VqzFoo/{GGEE#KZjjj零2j^ XO||}:QF1LL4~8<ɬZ 6`٨Lٹs'^w\ߏ$IAb۱eo ;8}4׮]?FR3o/"">IIIA$>c~?}Ix<>}F~~>NA$P(D0dxx@ !aYt)fhllA [ݻw #11$IHD$Q}e(VQD"Qk>Әf~7RRR᧟~Ip:L%eJDCC?3$&&b43P BQe̙^>}W^y:KG +rطoeeedgguR"kKє+}YAŋtuuEPeee۷@ 9rDZ˲X)h Q@$߼y3&iBʙp~q;D鉚۾};[n@a6UOh@:qqqw.@,6789*/U~+plPG]?u]X+zǏ@(2kSL/moenAΦMooy,AP;Ç-'TJ$$$f; QZUV -(/_AUR[[ *dYVdZ[[>}:& #Ǻ?Rcc#ofb455qIV^=yitO`Xp|}2; [ns1z{{6m , o߾-%ʲ^'##~?´v( xp͜;wx\.vb޽ (L2,>C˩S_-]7hkk?rXj'OoRRRؿ|jN6p8Luu5՘L&V^ͲeHMMU$ NGWWnV@ z=ǎի̘1b~G< /@||-0&V^_> ;;8:;;9q'OdhhHMv5kCQPP@8QQQAww7999v"KF#ߑdYʣ>Jaa!&A x 6QINN&++KM;vl6SUUE||555XV\zJII VfкNoo/GQaPp8юpCnn.+VF(..V])))"٣c-+be.x8w. áYF b-&k]K.(**СCtttKzz:GDQ$>>:}т&._̺uξ%K iiilڴnՕ̙C0ŋ1&.4V 477s6l̙3BkhevN+ iiilٲEJ:iӦٹs'~)QZZJ[[~f@X s :qƚע}^^+WۭnCCC\~]}˗/٩biQ@,hmm˗dR4L+{2 k׮}]mۆfCen$7<̚5 :hog($6mڤ^0yd222xᇱl@IEQ$11Q^(QTiZAqXgeecfϞMYY٘ABf~zHJJٳ|x"Z FL&(B(bժUc^~e˖1i$Ąz˗/gݺudffFgM$1888BC&voRJtF)@fzGIENDB`cat.png000444001750001750 537211413636115 20715 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR*.0sRGBbKGD pHYstIME]d zIDATXåXIl汃cc;1!qi –DZT."UER{K*!Z!Ar"D!eQ 6N3ofz0Yw3o}ۣ1ƆaA3I0 ˲ EQD65 ileLxӜNeb˗/ONNʲq0dcS(p[*JMM;}>cf#iW4M3 c:`ww?q~_$ER4==EaYr@ | (]GFFɤa ;|>M"bN D"ċ/믑r80 MW^EA#VXϱ +FcX<~u:ciljƪ뚦i0$ID!FGGK߽{wgg~zpppll,Hܺukƍmmml6N1˗/8eY80jlRpDaDd1M\.gYIVZe˖&A Ðe\.ξ~:JEцD</ -[jsUUL.(eYWV!< QCC'|t:nziyO?}R@.JxeYeu]/ xQi!Ial.iMKC?{l:^[a|ÇEITWWv%IElNeٺQ#}Xri:YBQ5w8^wzzZӴQlٲRTTt]F[>\.wttZ8HBsN(谆ɽ{W\t:9y\.F#HRٰaCww79D۹z$B;wY: 8s8Vc&&& L`͛7mڴbŊVdP;;;m_YM&dtzg&Hd%3Ybqtt_=}kPfXիǫW(x|,r?D"K-#w$ihooycKRTйn:˩:;;=ߴo%]ۤXVٳ e2bKdD꫓'O·\MpHQTX4 c El[<$Ip!~:66vԩ̄ak cϝ;7<<|~aŊV 8,YVs(,]񴴴pi˲}}}6lunz9iۋ/߿RdBn}޽:Q8CtsssooM(裏҃mSSScc#Cܹ3 555y'~1 ۷OP(S$CMLL$7$)=51MSŮ.]a0v uCCC `Yyk_8qb~Bt 8rHoo-혦 I$CUKLHl(O?OMMp B}_|azky[2A8|nܸqڵT*ٳg۶m.k~֛3]@ p.q|j<fB`ALVl\JLQx<^,A[DtX1MKXi `0a%U.`( yp8<11=\]ZH-UBp Ƹ\.744\8P($T*E=m[캌3+2lXQjjj,ŀ]~IENDB`setup.png000444001750001750 655311413636115 21310 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME:R[ IDATXíY}LS?RB-R27tL!(UbdsY\\B2㖹1?923EF:#Tʴ-ThUj_?vio9ssÉx xr8Mp8t:fDQT LLLE^aI7o޴lXӅa$I1 c6NQIh$x( NNN8^RR@ IDh4< |~8V(鉉 P(\IH0h;_P%$I| cx<^fff<w8EiZtwwT% @x<@|;ÇO8 6TVV>|X yT*ݻwWT޻wn&$$0TghȐr_@W\'ᖪ7L6mb񒒒l6[0DcAT@/,9D(%&&.w4]XXX,k֬a0ab ˷h9b|Ah5 ˅[b\.q\$ng|>ABdl@ׯ_pa*@ H֬Y#D"QFF֭[{zz U> +\.*_B!h0p\333ݣiA!˳V^{fxlQx]› zs(IJv/\ E"ѭ[,̌^72l~~l6lH$F Ş={n߾}ҥ'N M AUMM /rNNj]bdR*5TT*nw僃?ĄF0L }{$83z|ϟ˫JJJ),,jl|>__4M|:!q\Q=N ܹ3==}aa֭[z>==}Ix?z۷}>\.߱cD"immZ 0=2 豢(nzzz˖-6m0ljj RU(7PraVPPP\\<;;GE"A 7ob @ izʕ찳L&i!"֭[s:0<2 PMKK3L|>^Adz3J;:: *L w}WTvww$T*Bl Z AfY(*J z{{FQR!B#!/..nl6XnfS(n cǎmذoHtCڵ?hnn:N.9v'p^Z桡]vK$\ jH$`=zs΍$''?3^ɓv'O655yާ~:99yddٳE}IIIpp8Qvnİ1B/677wuu Btcc#eb8333+++%%evv=o߾}ڵ -7{hPOF{vɤjr9>O*2~qqqxxx``C13PÂ+S1 PH(֭3LNذaFq<--M&1 Aܸqz ]ĘS:11 B#r\,aQw?\P$cD"Phxxb=zVkUUx,<+**۶m|2ż^by7VZUQQx A.]Ĭ\v^Z22::ʠWZUYYi28077 ٸqRP( "HBnyW}Ym.ɽP6yXy8.))1 8CA6T{R[o544AO>waUvJd,DIIIpy7{F↭$rń2\+(}4o644L0Ljuye?GaEDjkk#HIIIAAH$;wv{0H$/XQvb ի/^x/RDQIy9ٌh<߼ysEEŞ={~3g0jCyFCL/pQQQAA\.FSN/ׯ^~}[[ۏ?Fj5l6/,,2'P$Yhzȑ#VZZ2 O㿆Zz*N'v͛.,,TNB+WV+"zJV{W^y%55U*bK:9֮]+9PpLOOk4Z4YٕAh4JDOh#vtNLLdddt:?`<##8K'lOOO+L9LJJJ^@xkI7?8|̿0-=U*U,l4Mc(0854z0 ޽h4 !Ь 0cǁӴE0ibQQH$8fss3]xrQhNh50666VWWB;<<\YYY__Gg!bruww#KpPBGj/"$ILP(0_|S?hL[T!>/ ,K7J%UU1ƭ5!EQ'_~~84u]X,RD"e6J[n-,, dYvvax$UUUUU]Sׯ?66&rShkkk[ᅅ{J>/ QaO}vhd@wI<Z^?My⅝:t]h}=S>utuu EQd2IOɲ盘HR'9jv]'''?~LRZ/IhD ˲( @d(bGGP&,P(PnG麾k災=1k5(ʏ?hbbkssszzae\4j:22d@t:m~N .Ij,ͮ ?NnvscB  8K0,+++0nCEih!y8Ʋ,M,⎕)uvvvvv6%˲`:`ҿBZ/?Z(,LӴ;שCK0!` hygYaEQ%&*PQ{|>FX,s Lɗ#Hoo/rb0v 1tlllb|߿P(eBb\.G;6MSӴ-燇5M3M0M?OBNm/?`?OuMDIENDB`module.png000444001750001750 333311413636115 21426 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME G[IDATXYkOٙdwɚ_iJ zzED,X %""B*AT7ѣ^=yCCHR%4$YM;2M?yg}yfv#Bmnyqhۆ1 6\cEQ{Tշo.--K)ezypK8B9/sc p鱱1A~`.lsRI$DBahေ(&8AC :Vn3(ĉ24>}OR,|߷m{eeZ" ԶJrё1att!8N&VݻwNJRgm$IH$ؗ~eYU}4MY01thy\._xR@ǎ;{s\6t::L6rSSSgΜ9rȭ[{ ݻ7B aǏO.Ju]0ؚ hn-..꺮( \:΋/޿oF8F9c˲,b(PhM^.% 8JsΉ<{e0ڄWNMMɲ< 8{Jdt3 3A=BUHB,*"Xx<.IҪ'IR<ec,I}`l>rM@l5{vfs]Wfzf|gji1M<;{8Φ(.B(jV,:i뺵ZX,bUU4߾}c ^7<`ImJEQxl,8[񠖉,wdX~txmfꗔiw z)5yީ) L$sw4!$ .qP(DE4Ͷcw@xl4mbbBQlf\T*.m۵Zmyyyll,P>L)eo<(dliV={ImF,?fipYeFb( i,;SUs$aYJ41M˲,Fs?Q(0 * aL4#4y#pYFQ¯VU4DQ"HJǏ'L`ssR۷|--IDX\\R;} ;H[[[ ˲V\.۩T>z ؓ}-{nnΞoݺeړ6`=zNRv\nn^D"a8q^]]E;@,CтdYfggI&|A,#d"i Tt:/B<gddHJxwY\\D5Ms[ļ[B kkk?~X,F0YCp807n033Ù3gQFNMDՊ]ZZ"H022PǃeYIZu2nYP(###$ ՜VPL dgbbՅ,Nt'Ki211<@\@nuW,x"態6,¶mdYv,ŋ)-[A̓iz7* LMM  B!zg LMMQ(z6 ¼200޽{QUy&4:g*{e``]ht_nXE\ӧj窪~N>͕+W7jvT*qe ~߁ H!P' reJR[qЖ_'5SxGȴZ6tvrNHՍ~ߘ>q)NSҨi&p=4)3>>k) ~ƸtLZbnVd2.]~ bIÇ<~JRS]wj'O&$QTx1>){V'ϳA4lFQ%_[[#3>>޶r!ܹsx^R\4QYQUtݚir9R^s9mY*aJ*B4z{{B}4ޠ\.Go߾ݧ vC^]9rϞ=#Lxm&ˑL&yGAP#ٳh4癞vډӜ?h4ʞ={ڮ%čꫯ/phD?~{x TiB~/^?fbb .81[om?&S'dxxg"zmAuNr?3ׯ_?܁N}6_~%@M4L{"Ƿ~Pېm,//s];aN>]fLS08vweyyi3Z`N0 e(VΨT*5L'cY333oےiKp$ɐH$uP(TUF=WQBH$d2n4⯭mL&C2ԩSb1<O=q=(E8ud`0l ) \v ۶9t萣Fzb^M'xVeYՠGUUOt:6tT%۲,@Цi^z%;:L$3::Eڲ1 mo[dYlD0 UUU8i,--zۇ=zh]_n2j#4Pp87n(Nvr|0u"躎i|7|wT*?@1::ʙ3gj&ϳeYI &ɹ34mDR0yIENDB`admin.png000444001750001750 476611413636115 21244 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/imgPNG  IHDR00`nsRGBbKGD pHYs  tIME! vIDATXõYk]&3ܚɭӦQhbԢحPDQA q)UBJR,,JAЅ. XIۘKP&=|qH/}!s29/?CJR b.SU >NtA$Ih% E)J^NgZN'MX*f?Da6d2x^LomAQ:`L&qDQJ$>OWFk׮=y2 SSS|~ii)L;v`0,ߪM>&&&dY0??966/Jk"JuttommmmmwttRx윟'b؎;޿e˖ o߾Ǐl޼i<ϋ^ze/\lE%޽Ǐ(a/gS*Т(wܹ~:0O 6 !;N799ѣW"$j)8NQ$IټƩ[ éS6ovm6ȲLQTMMMMMjX,n:~xssgOl&IR#MR>p8$l60<|0JheUdCCCvjiiaYn#*8xjhMMngYe׮]CCC(VAtBp hmmu  5 EQa 7n( U9p:l0'bZ=ěTԚAx߿)S9߿8naaaqqo^& im|||nn8TЌneYy㸹q/T,a4/]d2?~i&Ӊ2 :^/It:X,}T,OFtuuս~fֺ\.t*ڿ^,rD"H$.^v{VUBsQt:Y5Luǿ}vq˶+*"ONNvwwx"H sA 2D"ŋI-*UUgffxyׯ_n݊#THӧǑԟihh@-˻w>}kIXݳg(<ϏD"AΞ=[ A.K&4M766աl6hb*jllizpp^wrB:F|@TBFc}}}[[[>FtJAUUݻ5+byfݻgxxO5!%H$²l p8(Gʲ,IRXiP,%IB`08@ l$I$~F' mQ{0 S__hϟe޻w7o۶eY/,x iMm۶^t嵣rcHY`_^ŖIί Hqx|Qoiv߿F,B!c6- ֔v@bf dYF߿_nX4Z$ݻ}}}  W(0 ۷4}m|׊V?E)R(i3Vn)BQTss۷o{zz>:SɣG0B/z= nʚm}\.W(YZZ:z˗/ Xƒl6rV\.W6BXb(j'AMMM`oٰԭy_~ᯚj)J(V0 xP, faCeZCP&$ [>0ڧHwzŎ2d2Pj}ڵkyyyRX)EQ󳳳:NC"8a(!㸭-srr ,4???@pRZAgff把V+aY*O'$770==Mtaa!;;;z}NNNB@`p_ݍ1ڒ*` aVUwvv~ ۭ i,vG}}rNɵ%\.A˲$I(,ފ7oVTTA N ~uvwwcY4,OE1 <z0 x5ZZZ~6U0SAAիW G+/(1_^x<(c8Ld_XX zΏeٝ?~ܻwoss033S]]}eYH˲h4(q\B/D& ffFhlӼB){nLO>]]]q|ww$ɽ=STTf6yw:wq H$&i}}=fɲ,MӐP(L&S<ۤjuZZZsssaa7b10]]]G ŧN^֭[p.]1:}}} NRL*ѣG?~ljjR*G]\\ljjbYÇ "X,zbnlltnrL&T[fff]]`6 /^,--.j (sj 4YZ Irhhٳ,) A U yxP4VWLH=66vfsFFb)))X,fr1 0g@)0###w YYY;;;rEH$By}OOϛ7oNX,FQOH$FAx'4>(1 !<XS%\Y)V!vQSNoiiiOKKS  2qjg0vBIF>> cj1 `IWg R REQ!I:0?י"A(F)h&_^!Ǯ=$I$IM\.0aB4@?dy<ʬ쬬J+?&)^zm6?lo߾zLXl{qB(onn644Pr y A89wP(r?~\쌍E"]oRHQ}/i`kQbZVb( ES-ѧ0$IqQRRT*5 laT*"t: RRԟ㙛[XXX^^fOOlf۳;622²l4WVVh^YYY^^ `]PrJ._|x}}}ttD.Gz#ׯ_'''766{=yD $d4'NHtȑ۷o-5MGGǹsd2Yd2 Bb.PVEM&SxEiiJJV.--) R KKK?NS,+ pY_~qZp8, T*(˗/8q"e}7~#  "FǗ/_JJJb8e&80jL`tpHI8,B$X,J[x^IҪYDT*r9/7pHd8VT"T*ŨF9s 4MCȇjZ6a T*FMeeejZ sss BQd2²O7scZ1 qq[ @o1mR12|>ommD"ܤRT*e<@&1D5H>a"RB($+L&hKKK3&hvoߺnhFEIrܥK޽k6%(uJI---%UU(EPO<(lv``J/I极l6{c:Q憇766pA^jpsuׯB`0 vÁEǏDݻw}}}7n|jBA^\4Y1 g]cأG 8s1rsX^^eÇ*& dY4 ZATPJ&涶H$(r9nq_[[~:80WM;;;Ϟ=ڪ;{l[[[(x<^=,aHTUT*mmm={lddCI^G?1ϝ;wP(qYx Hr,$Iccc,>xǏZKt$izz!ИWA>fiIjzb}}=N#8 ni@cb\AӴ`t:^dP`Y\.ob Zr~?˲BarrRUS1.JSSS!zN',C`鄷BSSSR]xt]/ !` <1 FUr(J-( BaZvp"2 RIQ*L,˲\FQR|&AsZl  L&fy? >l&) NF't:N<(ʡdYVy x^\b=3*eyooogg`W\(X{!Zf *իuba \.[k z?~SSSS$/fY)σG$I޹sε5!p8CCC0luu5NNQEQ,˲, ׺U ݻ744dgq|{5eggggff~mѿiβ,{ڵsPCdx BUB0( ,H$8[uHR1#͏(0 gcooOQ0Rn& њ^GG0QR#irbk&p8Fq (d62)ErJٳgͿVWWn ,]gC6r---Nio޼cRLujLamAY̿2jI~OOz 'X,S!IENDB`chooser000755001750001750 011413636115 20162 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 166511413636115 22324 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/chooser [% IF form.field.debug.value %] [% USE Dumper %]

    Chooser title

    [% CHOOSER_TITLE %] [% CHOOSER_LABEL %]

    Chooser data

    [% Dumper.dump_html(CHOOSER_NAME) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.field) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.value) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.values) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.label) %] [% Dumper.dump_html(form.field.${CHOOSER_NAME}.options) %] [% END %]

    [% CHOOSER_TITLE %]

    [% CHOOSER_LABEL %]
    [% form.start %] [% form.field.${CHOOSER_NAME}.field %] [% form.field.module.field %] [% form.submit %] [% form.end %]
    layout.html000444001750001750 14711413636115 22504 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/chooser[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] index000755001750001750 011413636115 17627 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 344311413636115 21765 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/index [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    MAXCOL: [[% MAXCOL %]]
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    PATH: [[% PATH %]]
    LOGIN [[% LOGIN %]]
    LOCALE [[% LOCALE %]]
    THEME [[% THEME %]]
    cat_login: [[% CGI.cookie('cat_login') %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    lh [[% lh %]]
    [% Dumper.dump_html(data) %]

    Icons

    [% FOREACH m = DATA %] [[% m.cn %]]
    [% m.cipuxName %]
    [% END %]

    main simple template variable DATA

    [% Dumper.dump_html(DATA) %]
    [% END %]

    [% FOREACH m = DATA %] [%- "" IF (loop.count mod (MAXCOL+2)) == 0 %] [% END %]

    [% lh.maketext(m.NAME) %]
    layout.html000444001750001750 23611413636115 22150 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/index[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] [% part6 %] [% part7 %] [% part8 %] [% part9 %] login000755001750001750 011413636115 17630 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 223411413636115 21763 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/login [% IF form.field.debug.value %] [% USE Dumper %]

    cat_locale

    [% Dumper.dump_html(form.field.cat_locale.field) %] [% Dumper.dump_html(form.field.cat_locale.value) %] [% Dumper.dump_html(form.field.cat_locale.values) %] [% Dumper.dump_html(form.field.cat_locale.label) %] [% Dumper.dump_html(form.field.cat_locale.options) %] [% END %]

    [% form.start %]

    [% lh.maketext('Login to CAT') %]

    [% lh.maketext('To gain access to CAT, you have to enter a username and a password ...') %]
    [% lh.maketext('Login') %] [% form.field.cat_login.field %]
    [% lh.maketext('Password') %] [% form.field.cat_password.field %]
    [% lh.maketext('Language') %] [% form.field.cat_locale.field %]
    [% lh.maketext('Theme') %] [% form.field.cat_theme.field %]
    [% form.submit %]
    [% form.end %]

    layout.html000444001750001750 6011413636115 22124 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/login[% part0 %] [% part1 %] [% part2 %] [% part3 %] perlversion000755001750001750 011413636115 21070 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 105211413636115 23220 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/perlversion [% FOREACH module = DATA %] [% END %]
    [% lh.maketext('Count') %] [% lh.maketext('Name') %] [% lh.maketext('Version') %]
    [% loop.count %]/[% loop.size %]: [% module.name %] [% module.version %]
    layout.html000444001750001750 41211413636115 23405 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/perlversion[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] module_custody000755001750001750 011413636115 21557 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 453011413636115 23713 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_custody [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %] [% Dumper.dump_html(DATA) %] [% END %] [% FOREACH m = DATA %] [% END %]
    [% lh.maketext('Module ID') %] [% lh.maketext('Module name') %] [% lh.maketext('CAT-Web') %] [% lh.maketext('File system installed') %] [% lh.maketext('Database registered') %] [% lh.maketext('CAT-Web Access enabled') %]
    [% m.name %] [% lh.maketext(m.real_name) %] [% IF m.catweb %]
    [% lh.maketext('yes') %] [% ELSE %]
    [% lh.maketext('no') %] [% END %]
    [% IF m.installed %]
    [% lh.maketext('yes') %] [% ELSE %] [% IF m.catweb %]
    [% lh.maketext('no') %] [% ELSE %]
    [% lh.maketext('unknown') %] [% END %] [% END %]
    [% IF m.registered %]
    [% lh.maketext('yes') %] [% ELSE %]
    [[% lh.maketext('no') %] [% END %]
    [% IF m.enabled %] [% IF m.catweb %]
    [% lh.maketext('yes') %] [% ELSE %]
    [% lh.maketext('negligible') %] [% END %] [% ELSE %] [% IF m.catweb %]
    [% lh.maketext('no') %] [% ELSE %]
    [% lh.maketext('negligible') %] [% END %] [% END %]
    layout.html000444001750001750 13311413636115 24074 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_custody[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] serverinfo000755001750001750 011413636115 20702 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 634511413636115 23044 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/serverinfo [% IF DATA.up %] [% END %] [% IF DATA.disks_ar %] [% FOREACH d = DATA.diskfree %] [% END %] [% END %]
    [% lh.maketext('Attribute') %] [% lh.maketext('Value') %]

    [% lh.maketext('Hardware') %]

    [% lh.maketext('CPU') %] [% DATA.cpu %]
    [% lh.maketext('Total main memory') %] [% sizefmt(DATA.mem_main_total) %]
    [% lh.maketext('Free main memory') %] [% sizefmt(DATA.mem_main_free) %]
    [% lh.maketext('Total swap memory') %] [% sizefmt(DATA.mem_swap_total) %]
    [% sizefmt(lh.maketext('Free main memory')) %] [% sizefmt(DATA.mem_swap_free) %]

    [% lh.maketext('Operating system') %]

    [% lh.maketext('OS name') %][% DATA.os_name %]
    [% lh.maketext('Node name') %][% DATA.node_name %]
    [% lh.maketext('Domain name') %][% DATA.domain_name %]
    [% lh.maketext('IP') %][% DATA.ip %]
    [% lh.maketext('is Linux?') %] [% IF DATA.is_linux %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %]
    [% lh.maketext('is BSD?') %] [% IF DATA.is_bsd %][% lh.maketext('yes') %][% ELSE %][% lh.maketext('no') %][% END %]
    [% lh.maketext('Up since') %] [% DATA.up.up_since %]
    [% lh.maketext('Up since hours') %] [% DATA.up.up_hours %]
    [% lh.maketext('Up since days') %] [% DATA.up.up_days %]
    [% lh.maketext('Up since months') %] [% DATA.up.up_months %]

    [% lh.maketext('Services') %]

    [% lh.maketext('httpd') %][% DATA.httpd %]

    [% lh.maketext('File system') %]

    [% lh.maketext('mount') %] [% lh.maketext('avail') %] [% lh.maketext('total') %] [% lh.maketext('used') %] [% lh.maketext('device') %]
    [% d.device_mount %] [% sizefmt(d.device_avail) %] [% sizefmt(d.device_total) %] [% sizefmt(d.device_used) %] [% d.device_id %]
    layout.html000444001750001750 13311413636115 23217 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/serverinfo[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] status_line000755001750001750 011413636115 21052 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 337011413636115 23207 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/status_line
    [% IF SHOW_DEBUG %] [% END %]
    [% lh.maketext('server') %] [% SERVER %] [% lh.maketext('login') %] [% LOGIN %] [% lh.maketext('date') %] [% DATE %] [% lh.maketext('version') %] [% VERSION %] [% lh.maketext('locale') %] [% LOCALE %] [% lh.maketext('theme') %] [% THEME %] [% lh.maketext('session') %] [% SESSION %]
    layout.html000444001750001750 3011413636115 23343 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/status_line[% part0 %] [% part1 %] header000755001750001750 011413636115 17750 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 127511413636115 22107 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/header
    [% lh.maketext('home') %]

    [% lh.maketext('CAT - CipUX Administration Tool') %]

    [% part1 %]

    [% lh.maketext('logout') %]
    error000755001750001750 011413636115 17651 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 272211413636115 22006 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/error [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    LOGIN: [[% LOGIN %]]
    SESSION: [[% SESSION %]]
    THEME: [[% THEME %]]
    LOCALE: [[% LOCALE %]]
    PATH: [[% PATH %]]
    MODULE: [[% MODULE %]]
    MSG: [[% MSG %]]
    TAG: [[% TAG %]]
    lh: [[% lh %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %] [% END %]

    [% lh.maketext('Error') %]

    [% MSG %]
    [% lh.maketext('index') %]

    layout.html000444001750001750 14011413636115 22164 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/error[% part0 %] [% part1 %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] module_switch000755001750001750 011413636115 21366 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 531311413636115 23522 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_switch [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %]

    variables

    variable value
    SHOW_DEBUG: [[% SHOW_DEBUG %]]
    PATH: [[% PATH %]]
    LOGIN [[% LOGIN %]]
    LOCALE [[% LOCALE %]]
    THEME [[% THEME %]]
    cat_login: [[% CGI.cookie('cat_login') %]]
    cat_locale: [[% CGI.cookie('cat_locale') %]]
    cat_theme: [[% CGI.cookie('cat_theme') %]]
    [% Dumper.dump_html(data) %]

    Icons

    [% FOREACH m = DATA %] [[% m.cn %]]
    [% m.cipuxName %]
    [% END %]

    main simple template variable DATA

    [% Dumper.dump_html(DATA) %]
    [% END %]

    Switch registered CAT modules on/off

    [% FOREACH m = DATA %] [% END %]
    [% lh.maketext('enabled') %] [% lh.maketext('Module name') %] [% lh.maketext('Short description') %] [% lh.maketext('Action') %]
    [% IF m.cipuxIsEnabled == "TRUE" %]
    [% lh.maketext('yes') %]
    [% ELSE %]
    [% lh.maketext('no') %]
    [% END %]
    [% m.cipuxName %] [% m.cipuxShortDescription %] [more...] [ change ]
    layout.html000444001750001750 21311413636115 23702 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_switch[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] [% part6 %] [% part7 %] [% part8 %] basic_object000755001750001750 011413636115 21127 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlincreate.html000444001750001750 441711413636115 23423 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_object
    [% lh.maketext('create') %]
    list.html000444001750001750 407611413636115 23134 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_object

    [% FOREACH column = form.field.navi.values %] [[% column %]] [% END %]

    [% lh.maketext(CIPUX_MODALITY_TR) %] [% IF form.field.abcnav.value %] ([% form.field.letter.value %]) [% END %]

    [% form.field.abcnav.value %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% FOREACH object = form.field.data.values %] [% IF object.SHOW_OBJECT == 'TRUE' %] [% form.start %] [% IF object.uid %] [% IF CIPUX_ENTITY_TYPE == 'account' %] [% END %] [% END %] [% IF object.cn %] [% END %] [% form.field.mode.field %] [% form.field.module.field %] [% form.field.letter.field %] [% form.end %] [% END %] [% END %]
    [% lh.maketext('Count') %] [% lh.maketext('ID') %][% lh.maketext('Lastname') %] [% lh.maketext('Firstname') %][% lh.maketext('Password') %] [% lh.maketext('Repeat password') %] [% lh.maketext('Action') %]
    [% loop.count %]/[% loop.size %]: [% object.uid %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.field.password.field %] [% form.field.password_repeat.field %] [% object.cn %] [% object.cipuxLastname %] [% object.cipuxFirstname %] [% form.submit %]
    layout.html000444001750001750 14711413636115 23451 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_object[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part3 %] [% part2 %] [% part4 %] [% part5 %] module_browser000755001750001750 011413636115 21550 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 213511413636115 23703 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_browser [% USE CGI %] [% IF SHOW_DEBUG %] [% USE Dumper %] [% Dumper.dump_html(DATA) %] [% END %]

    [% lh.maketext('The tasks of modules which are installed on the filesystem') %]

    [% FOREACH m = DATA %] [% END %]
    CAT Module ID Name of Perl library Action
    [% m.name %] [% m.provided_by %] [ [% lh.maketext('show task') %] ]
    layout.html000444001750001750 13311413636115 24065 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/module_browser[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] externallink000755001750001750 011413636115 21220 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 31311413636115 23327 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/externallink layout.html000444001750001750 13411413636115 23536 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/externallink[% part0 %] [% INCLUDE tpl/default/header/index.html %] [% part2 %] [% part3 %] [% part4 %] logout000755001750001750 011413636115 20031 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinlogout.html000444001750001750 30411413636115 22342 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/logout
    [% form.start %] [% form.submit %] [% form.field.cat_login.field %] [% form.field.cat_session.field %] [% form.end %]
    layout.html000444001750001750 4411413636115 22327 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/logout[% part0 %] [% part1 %] [% part2 %] footer000755001750001750 011413636115 20016 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 236711413636115 22160 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/footer [% IF SHOW_INDEX_BACK %] [% lh.maketext('CAT') %] [% END %] [% IF SHOW_SCRIPT_BACK %]
    [% lh.maketext('back') %] [% END %] [% IF SHOW_DEBUG %] [% USE CGI %]
    'VERSION' [% VERSION %]
    'SESSION' [% SESSION %]
    'old session cookie' [% CGI.cookie('cat_session') %]
    'THEME' [% THEME %]
    'old theme cookie' [% CGI.cookie('cat_theme') %]
    'LOGIN' [% LOGIN %]
    'old login cookie' [% CGI.cookie('cat_login') %]
    'LOCALE' [% LOCALE %]
    'old locale cookie' [% CGI.cookie('cat_locale') %]
    'PATH' [% PATH %]
    'SHOW_INDEX_BACK' [% SHOW_INDEX_BACK %]
    'SHOW_SCRIPT_BACK' [% SHOW_SCRIPT_BACK %]
    'SCRIPT_BACK' [% SCRIPT_BACK %]
    [% END %] layout.html000444001750001750 1411413636115 22311 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/footer[% part0 %] basic_assignment000755001750001750 011413636115 22031 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlinindex.html000444001750001750 407611413636115 24172 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_assignment [% IF debug %] [% USE Dumper %]

    group

    [% Dumper.dump_html(form.field.group.field) %] [% Dumper.dump_html(form.field.group.value) %] [% Dumper.dump_html(form.field.group.values) %] [% Dumper.dump_html(form.field.group.label) %] [% Dumper.dump_html(form.field.group.options) %]

    mode

    [% Dumper.dump_html(form.field.mode.field) %] [% Dumper.dump_html(form.field.mode.value) %] [% Dumper.dump_html(form.field.mode.valuess) %] [% Dumper.dump_html(form.field.mode.label) %] [% Dumper.dump_html(form.field.mode.options) %]

    obj

    [% Dumper.dump_html(form.field.obj.field) %] [% Dumper.dump_html(form.field.obj.value) %] [% Dumper.dump_html(form.field.obj.values) %] [% Dumper.dump_html(form.field.obj.label) %] [% Dumper.dump_html(form.field.obj.options) %]

    oid

    [% Dumper.dump_html(form.field.oid.field) %] [% Dumper.dump_html(form.field.oid.value) %] [% Dumper.dump_html(form.field.oid.values) %] [% Dumper.dump_html(form.field.oid.label) %] [% Dumper.dump_html(form.field.oid.options) %] [% END%]

    [% lh.maketext(CIPUX_MODALITY_TR) %]

    [% FOREACH column = form.field.group.options %] [% form.start %] [% form.field.letter.field %] [% form.field.module.field %] [% form.end %] [% END %]
    [% lh.maketext('object') %] [% lh.maketext('action on object member') %]
    [% loop.count %] [% column %] [% form.submit %]
    layout.html000444001750001750 14711413636115 24353 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_assignment[% part0 %] [% INCLUDE tpl/Berlin/header/index.html %] [% part2 %] [% part3 %] [% part4 %] [% part5 %] group.html000444001750001750 546511413636115 24222 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tpl/Berlin/basic_assignment [% IF SHOW_DEBUG %] [% USE Dumper %]

    mode

    [% Dumper.dump_html(form.field.mode.field) %] [% Dumper.dump_html(form.field.mode.fields) %] [% Dumper.dump_html(form.field.mode.value) %] [% Dumper.dump_html(form.field.mode.valuess) %] [% Dumper.dump_html(form.field.mode.label) %] [% Dumper.dump_html(form.field.mode.options) %]

    obj

    [% Dumper.dump_html(form.field.obj.field) %] [% Dumper.dump_html(form.field.obj.fields) %] [% Dumper.dump_html(form.field.obj.value) %] [% Dumper.dump_html(form.field.obj.values) %] [% Dumper.dump_html(form.field.obj.label) %] [% Dumper.dump_html(form.field.obj.options) %]

    object

    [% Dumper.dump_html(form.field.object.field) %] [% Dumper.dump_html(form.field.object.fields) %] [% Dumper.dump_html(form.field.object.value) %] [% Dumper.dump_html(form.field.object.valuess) %] [% Dumper.dump_html(form.field.object.label) %] [% Dumper.dump_html(form.field.object.options) %]

    oid

    [% Dumper.dump_html(form.field.oid.field) %] [% Dumper.dump_html(form.field.oid.fields) %] [% Dumper.dump_html(form.field.oid.value) %] [% Dumper.dump_html(form.field.oid.values) %] [% Dumper.dump_html(form.field.oid.label) %] [% Dumper.dump_html(form.field.oid.options) %]

    showlist

    [% Dumper.dump_html(form.field.showlist.field) %] [% Dumper.dump_html(form.field.showlist.fields) %] [% Dumper.dump_html(form.field.showlist.value) %] [% Dumper.dump_html(form.field.showlist.values) %] [% Dumper.dump_html(form.field.showlist.label) %] [% Dumper.dump_html(form.field.showlist.options) %] [% END %]

    [% lh.maketext(CIPUX_MODALITY) %] ([% lh.maketext(MODE) %])

    [% form.start %] [% FOREACH uid = form.field.object.options %] [% END %]
    [% lh.maketext('object') %]: [% form.field.oid.field %] [% lh.maketext('action') %]: [% lh.maketext(MODE) %]
    [% IF form.field.showlist.value %] [% uid.count %] [% uid %] [% ELSE %] [% END %]
    [% form.field.letter.field %] [% form.field.module.field %] [% form.submit %] [% form.end %]

    etc000755001750001750 011413636115 15261 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3apache2000755001750001750 011413636115 16564 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/etcconf.d000755001750001750 011413636115 17733 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/etc/apache2cipux_apache.conf000444001750001750 40011413636115 23342 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/etc/apache2/conf.d AddHandler cgi-script .cgi Alias /cipux-cat-web /usr/share/cipux-cat-web ScriptAliasMatch CAT /usr/share/cipux-cat-web/cat.cgi Order Deny,Allow Allow from All Options ExecCGI DirectoryIndex cat.cgi cipux-cat-web000755001750001750 011413636115 17731 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/etclog4perl.conf000444001750001750 512111413636115 22464 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/etc/cipux-cat-web# +=========================================================================+ # || /etc/cipux-cat-web/log4perl.conf || # || || # || Log::Log4perl configuration for CipUX (CipUX::CAT::Web) || # || || # || (C) Copyright 2008 by Christian Kuelker. || # || || # || License: GPL version 2 or any later version. || # || || # +=========================================================================+ log4perl.logger = DEBUG,CatFileApp #log4perl.logger.CipUX = DEBUG,CatFileApp #log4perl.logger.CipUX.Storage = DEBUG,CatFileApp #log4perl.logger.CipUX.Storage.Client = DEBUG,CatFileApp #log4perl.logger.CipUX.Object = DEBUG,CatFileApp #log4perl.logger.CipUX.Object.Client = DEBUG,CatFileApp #log4perl.logger.CipUX.Task = DEBUG,CatFileApp #log4perl.logger.CipUX.Task.Client = DEBUG,CatFileApp #log4perl.logger.CipUX.RBAC = DEBUG,CatFileApp #log4perl.logger.CipUX.RBAC.Client = DEBUG,CatFileApp #log4perl.logger.CipUX.RPC = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Web = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.View = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.View.Assignment = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.View.BasicObject = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.View.CatModule = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.View.Role = DEBUG,CatFileApp #log4perl.logger.CipUX.CAT.Module.Client = DEBUG,CatScrApp log4perl.appender.CatFileApp = Log::Log4perl::Appender::File log4perl.appender.CatFileApp.filename = /var/log/cipux-cat-web/cipux-cat-web.log log4perl.appender.CatFileApp.stderr = 0 log4perl.appender.CatFileApp.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.CatFileApp.layout.ConversionPattern = %d{yyyy-MM-dd+HH:mm:ss} %M <%L>: %m%n #log4perl.appender.CatFileApp.layout.ConversionPattern = %M <%L>: %m%n log4perl.appender.CatScrApp = Log::Log4perl::Appender::Screen log4perl.appender.CatScrApp.stderr = 0 log4perl.appender.CatScrApp.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.CatScrApp.layout.ConversionPattern = %d{yyyy-MM-dd+HH:mm:ss} %M <%L>: %m%n #log4perl.appender.CatScrApp.layout.ConversionPattern = %M <%L>: %m%n t000755001750001750 011413636115 14751 5ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3L10N.t000444001750001750 74711413636115 15735 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/t# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl CipUX::CAT::I10n.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; BEGIN { use_ok('CipUX::CAT::Web::L10N') }; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. 00_load.t000444001750001750 122611413636115 16512 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tuse Test::More tests => 12; BEGIN { use_ok( 'CipUX::CAT::Web' ); use_ok( 'CipUX::CAT::Web::Controller' ); use_ok( 'CipUX::CAT::Web::Module' ); use_ok( 'CipUX::CAT::Web::Plugin' ); use_ok( 'CipUX::CAT::Web::View' ); use_ok( 'CipUX::CAT::Web::Action' ); use_ok( 'CipUX::CAT::Web::Module::Index' ); use_ok( 'CipUX::CAT::Web::Module::BasicObject' ); use_ok( 'CipUX::CAT::Web::Module::BasicAssignment' ); use_ok( 'CipUX::CAT::Web::Module::Chooser' ); use_ok( 'CipUX::CAT::Web::Module::ModuleBrowser' ); use_ok( 'CipUX::CAT::Web::Module::ModuleSwitch' ); } diag( "Testing CipUX::CAT::Web $CipUX::CAT::Web::VERSION" ); pod.t000444001750001750 21411413636115 16032 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/t#!perl -T use Test::More; eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok(); 10_i18n.t000444001750001750 154611413636115 16360 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/t#!/usr/bin/perl -w # Copyright (C( 2007, 2010 by Christian Kuelker use Test::More; use English qw(-no_match_vars); if ( not $ENV{TEST_AUTHOR} ) { my $msg = 'Author test. Set $ENV{TEST_AUTHOR} to a true value to run.'; plan( skip_all => $msg ); } eval { require CipUX::CAT::Web::L10N }; if ($EVAL_ERROR) { my $msg = 'CipUX::CAT::Web::L10N required'; plan( skip_all => $msg ); } plan( tests => 5 ); my @tag = qw(en de fr da ja); my @word = qw(firstname); my %answer = ( de => 'Vorname', en => 'firstname', fr => 'prénom', da => 'fornavn', ja => '名前', ); foreach my $t (@tag) { my $lh = CipUX::CAT::Web::L10N->get_handle($t) || die "What language?"; foreach my $w (@word) { #diag(sprintf( "msgid %10s -> tag %5s -> i18n %10s\n", $w, $t, $lh->maketext($w) )); ok( $lh->maketext($w) eq $answer{$t} ); } } leaktrace.t000444001750001750 56011413636115 17207 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tuse Test::More tests => 1; use Test::LeakTrace; #diag('test CipUX::CAT::Web'); no_leaks_ok { use CipUX::CAT::Web; my $rpc = CipUX::CAT::Web->new( { cache_dir => 'blib/cache' } ); } 'no memory leaks CipUX::CAT::Web'; #diag('test CipUX::RPC'); #leaks_cmp_ok { # use CipUX::RPC; # my $rpc = CipUX::RPC->new( { cache_dir => 'blib/cache' } ); #} #'<', 52; Web.t000444001750001750 74011413636115 15771 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/t# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl CipUX::CAT::Web.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 1; BEGIN { use_ok('CipUX::CAT::Web') }; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. refcount.t000444001750001750 47111413636115 17102 0ustar00ckuelkerckuelker000000000000CipUX-CAT-Web-3.4.0.3/tuse Test::More tests => 2; use Test::Refcount; use CipUX::CAT::Web; #diag('test CipUX::CAT::Web'); my $object0 = CipUX::CAT::Web->new( { cache_dir => 'blib/cache' } ); is_oneref( $object0, '$object0 has a refcount of 1' ); my $otherref0 = $object0; is_refcount( $object0, 2, '$object0 now has 2 references' );