]> wagnertech.de Git - kivitendo-erp.git/blobdiff - SL/Controller/Layout/Base.pm
menu controller gibt es nicht mehr
[kivitendo-erp.git] / SL / Controller / Layout / Base.pm
index cbd5088d3961b5a93f012eea2529b0ca31c7ba07..ed25f1b7828a75533d581c71ea4f9e29b68a2447 100644 (file)
@@ -5,6 +5,13 @@ use parent qw(SL::Controller::Base);
 
 use Rose::Object::MakeMethods::Generic (
   'scalar --get_set_init' => qw(menu),
+  'scalar'                => qw(focus),
+  'array'                 => [
+    'add_stylesheets_inline' => { interface => 'add', hash_key => 'stylesheets_inline' },
+    'add_javascripts_inline' => { interface => 'add', hash_key => 'javascripts_inline' },
+    'sub_layouts',
+    'add_sub_layouts'         => { interface => 'add', hash_key => 'sub_layouts' },
+  ],
 );
 
 use SL::Menu;
@@ -21,25 +28,113 @@ sub init_menu {
   Menu->new('menu.ini');
 }
 
+##########################################
+#  inheritable/overridable
+##########################################
+
 sub pre_content {
+  join '', map { $_->pre_content } $_[0]->sub_layouts;
 }
 
 sub start_content {
+  join '', map { $_->start_content } $_[0]->sub_layouts;
 }
 
 sub end_content {
+  join '', map { $_->end_content } $_[0]->sub_layouts;
 }
 
 sub post_content {
+  join '', map { $_->post_content } $_[0]->sub_layouts;
+}
+
+sub stylesheets_inline {
+  ( map { $_->stylesheets_inline } $_[0]->sub_layouts ),
+  @{ $_[0]->{stylesheets_inline} || [] };
+}
+
+sub javascripts_inline {
+  ( map { $_->javascripts_inline } $_[0]->sub_layouts ),
+  @{ $_[0]->{javascripts_inline} || [] };
+}
+
+
+#########################################
+# Interface
+########################################
+
+sub use_stylesheet {
+  my $self = shift;
+  push @{ $self->{stylesheets} ||= [] }, @_ if @_;
+  @{ $self->{stylesheets} ||= [] };
 }
 
 sub stylesheets {
+  my ($self) = @_;
+  my $css_path = $self->get_stylesheet_for_user;
+
+  return grep { $_ } map { $self->_find_stylesheet($_, $css_path)  }
+    $self->use_stylesheet, map { $_->stylesheets } $self->sub_layouts;
 }
 
-sub stylesheets_inline {
+sub _find_stylesheet {
+  my ($self, $stylesheet, $css_path) = @_;
+
+  return "$css_path/$stylesheet" if -f "$css_path/$stylesheet";
+  return "css/$stylesheet"       if -f "css/$stylesheet";
+  return $stylesheet             if -f $stylesheet;
+}
+
+sub get_stylesheet_for_user {
+  my $css_path = 'css';
+  if (my $user_style = $::myconfig{stylesheet}) {
+    $user_style =~ s/\.css$//; # nuke trailing .css, this is a remnand of pre 2.7.0 stylesheet handling
+    if (-d "$css_path/$user_style" &&
+        -f "$css_path/$user_style/main.css") {
+      $css_path = "$css_path/$user_style";
+    } else {
+      $css_path = "$css_path/lx-office-erp";
+    }
+  } else {
+    $css_path = "$css_path/lx-office-erp";
+  }
+  $::myconfig{css_path} = $css_path; # needed for menunew, FIXME: don't do this here
+
+  return $css_path;
+}
+
+
+sub use_javascript {
+  my $self = shift;
+  push @{ $self->{javascripts} ||= [] }, @_ if @_;
+  @{ $self->{javascripts} ||= [] };
+}
+
+sub javascripts {
+  my ($self) = @_;
+
+  return map { $self->_find_javascript($_)  }
+    $self->use_javascript, map { $_->javascripts } $self->sub_layouts;
+}
+
+sub _find_javascript {
+  my ($self, $javascript) = @_;
+
+  return "js/$javascript"        if -f "js/$javascript";
+  return $javascript             if -f $javascript;
+}
+
+
+############################################
+# track state of form header
+############################################
+
+sub header_done {
+  $_[0]{_header_done} = 1;
 }
 
-sub javascript_inline {
+sub need_footer {
+  $_[0]{_header_done};
 }
 
 1;