Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[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     icons16.css
38     frame_header/header.css
39     menu.css
40   ));
41   $_[0]->SUPER::stylesheets;
42 }
43
44 sub display {
45   my ($self) = @_;
46   my $form     = $main::form;
47
48   my $callback            = $form->unescape($form->{callback});
49   $callback               = URI->new($callback)->rel($callback) if $callback;
50   $callback               = "login.pl?action=company_logo"      if $callback =~ /^(\.\/)?$/;
51
52   $self->presenter->render("menu/menunew",
53     force_ul_width  => 1,
54     date            => $self->clock_line,
55     menu_items      => $self->acc_menu,
56     callback        => $callback,
57   );
58 }
59
60 sub clock_line {
61   my $form     = $main::form;
62
63   my ($Sekunden, $Minuten,   $Stunden,   $Monatstag, $Monat,
64       $Jahr,     $Wochentag, $Jahrestag, $Sommerzeit)
65     = localtime(time);
66   $Monat     += 1;
67   $Jahrestag += 1;
68   $Monat     = $Monat < 10     ? $Monat     = "0" . $Monat     : $Monat;
69   $Monatstag = $Monatstag < 10 ? $Monatstag = "0" . $Monatstag : $Monatstag;
70   $Jahr += 1900;
71   my @Wochentage = ("Sonntag",    "Montag",  "Dienstag", "Mittwoch",
72                     "Donnerstag", "Freitag", "Samstag");
73   my @Monatsnamen = ("",       "Januar",    "Februar", "M&auml;rz",
74                      "April",  "Mai",       "Juni",    "Juli",
75                      "August", "September", "Oktober", "November",
76                      "Dezember");
77   return
78       $Wochentage[$Wochentag] . ", der "
79     . $Monatstag . "."
80     . $Monat . "."
81     . $Jahr . " - ";
82 }
83
84 sub acc_menu {
85   my ($self) = @_;
86
87   my $menu      = $self->menu;
88
89   my $all_items = [];
90   $self->create_menu($menu, $all_items);
91
92   my $item = { 'subitems' => $all_items };
93   calculate_width($item);
94
95   return $all_items;
96 }
97
98 sub calculate_width {
99   my $item           = shift;
100
101   $item->{max_width} = max map { length $_->{title} } @{ $item->{subitems} };
102
103   foreach my $subitem (@{ $item->{subitems} }) {
104     calculate_width($subitem) if ($subitem->{subitems});
105   }
106 }
107
108 sub create_menu {
109   my ($self, $menu, $all_items, $parent, $depth) = @_;
110   my $html;
111
112   my $form     = $main::form;
113   my %myconfig = %main::myconfig;
114
115   $depth ||= 0;
116
117   die if ($depth * 1 > 5);
118
119   my @menuorder  = $menu->access_control(\%myconfig, $parent);
120   $parent       .= "--" if ($parent);
121   $parent      ||= '';
122
123   foreach my $name (@menuorder) {
124     substr($name, 0, length($parent), "");
125     next if (($name eq "") || ($name =~ /--/));
126
127     my $menu_item = $menu->{"${parent}${name}"};
128     my $item      = { 'title' => $::locale->text($name) };
129     push @{ $all_items }, $item;
130
131     if ($menu_item->{submenu} || (!defined($menu_item->{module}) && !defined($menu_item->{href}))) {
132       $item->{subitems} = [];
133       $item->{image} = _icon_path("$name.png");
134       $self->create_menu($menu, $item->{subitems}, "${parent}${name}", $depth * 1 + 1);
135
136     } else {
137       $item->{image} = _icon_path("${parent}${name}.png");
138       $menu->menuitem_new("${parent}${name}", $item);
139     }
140   }
141 }
142
143 sub _icon_path {
144   my ($label, $size) = @_;
145
146   $size ||= 16;
147
148   my $img = "image/icons/${size}x${size}/$label";
149
150   return unless -f $img;
151   return $img;
152 }
153
154 1;