Layouts eingeführt
[kivitendo-erp.git] / SL / Controller / Layout / Javascript.pm
1 package SL::Controller::Layout::Javascript;
2
3 use strict;
4 use parent qw(SL::Controller::Layout::Base);
5
6 use List::Util qw(max);
7 use URI;
8
9 sub pre_content {
10   &display
11 }
12
13 sub start_content {
14   "<div id='content'>\n";
15 }
16
17 sub end_content {
18   "</div>\n";
19 }
20
21 sub display {
22   my ($self) = @_;
23   my $form     = $main::form;
24
25   my $callback            = $form->unescape($form->{callback});
26   $callback               = URI->new($callback)->rel($callback) if $callback;
27   $callback               = "login.pl?action=company_logo"      if $callback =~ /^(\.\/)?$/;
28
29   $form->parse_html_template("menu/menunew", {
30 #  $self->render("menu/menunew", { no_menu => 1, no_output => 1 }, # buggy, no idea why
31     force_ul_width  => 1,
32     date            => $self->clock_line,
33     menu_items      => $self->acc_menu,
34     callback        => $callback,
35   });
36 }
37
38 sub clock_line {
39   my $form     = $main::form;
40
41   my ($Sekunden, $Minuten,   $Stunden,   $Monatstag, $Monat,
42       $Jahr,     $Wochentag, $Jahrestag, $Sommerzeit)
43     = localtime(time);
44   $Monat     += 1;
45   $Jahrestag += 1;
46   $Monat     = $Monat < 10     ? $Monat     = "0" . $Monat     : $Monat;
47   $Monatstag = $Monatstag < 10 ? $Monatstag = "0" . $Monatstag : $Monatstag;
48   $Jahr += 1900;
49   my @Wochentage = ("Sonntag",    "Montag",  "Dienstag", "Mittwoch",
50                     "Donnerstag", "Freitag", "Samstag");
51   my @Monatsnamen = ("",       "Januar",    "Februar", "M&auml;rz",
52                      "April",  "Mai",       "Juni",    "Juli",
53                      "August", "September", "Oktober", "November",
54                      "Dezember");
55   return
56       $Wochentage[$Wochentag] . ", der "
57     . $Monatstag . "."
58     . $Monat . "."
59     . $Jahr . " - ";
60 }
61
62 sub acc_menu {
63   my ($self) = @_;
64
65   my $menu      = $self->menu;
66
67   my $all_items = [];
68   $self->create_menu($menu, $all_items);
69
70   my $item = { 'subitems' => $all_items };
71   calculate_width($item);
72
73   return $all_items;
74 }
75
76 sub calculate_width {
77   my $item           = shift;
78
79   $item->{max_width} = max map { length $_->{title} } @{ $item->{subitems} };
80
81   foreach my $subitem (@{ $item->{subitems} }) {
82     calculate_width($subitem) if ($subitem->{subitems});
83   }
84 }
85
86 sub create_menu {
87   my ($self, $menu, $all_items, $parent, $depth) = @_;
88   my $html;
89
90   my $form     = $main::form;
91   my %myconfig = %main::myconfig;
92
93   die if ($depth * 1 > 5);
94
95   my @menuorder  = $menu->access_control(\%myconfig, $parent);
96   $parent       .= "--" if ($parent);
97
98   foreach my $name (@menuorder) {
99     substr($name, 0, length($parent), "");
100     next if (($name eq "") || ($name =~ /--/));
101
102     my $menu_item = $menu->{"${parent}${name}"};
103     my $item      = { 'title' => $::locale->text($name) };
104     push @{ $all_items }, $item;
105
106     if ($menu_item->{submenu} || !defined($menu_item->{module}) || ($menu_item->{module} eq "menu.pl")) {
107       $item->{subitems} = [];
108       $item->{image} = _icon_path("$name.png");
109       $self->create_menu($menu, $item->{subitems}, "${parent}${name}", $depth * 1 + 1);
110
111     } else {
112       $item->{image} = _icon_path("${parent}${name}.png");
113       $menu->menuitem_new("${parent}${name}", $item);
114     }
115   }
116 }
117
118 sub _icon_path {
119   my ($label, $size) = @_;
120
121   $size ||= 16;
122
123   my $img = "image/icons/${size}x${size}/$label";
124
125   return unless -f $img;
126   return $img;
127 }
128
129 1;