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