Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / SL / X / Base.pm
diff --git a/SL/X/Base.pm b/SL/X/Base.pm
new file mode 100644 (file)
index 0000000..3e6d251
--- /dev/null
@@ -0,0 +1,26 @@
+package SL::X::Base;
+
+use strict;
+use warnings;
+
+use parent qw(Exception::Class::Base);
+
+sub _defaults { return () }
+
+sub message { goto &error }
+
+sub error {
+  my ($self, @params) = @_;
+
+  return $self->{message} if ($self->{message} // '') ne '';
+
+  return $self->SUPER::error(@params) if !$self->can('_defaults');
+
+  my %defaults = $self->_defaults;
+  return $self->SUPER::error(@params) if !$defaults{error_template};
+
+  my ($format, @fields) = @{ $defaults{error_template} };
+  return sprintf $format, map { $self->$_ } @fields;
+}
+
+1;