Initial commit

This commit is contained in:
2023-04-15 10:14:26 +02:00
commit ca4cc6ec1b
21 changed files with 816 additions and 0 deletions

14
.dbdiff Normal file
View File

@@ -0,0 +1,14 @@
server1:
user: user
password: password
port: 3306
host: 127.0.0.1
server2:
user: user
password: password
port: 3306
host: 127.0.0.1
template: ./.migrate.tmpl
type: all
include: all
nocomments: true

18
.editorconfig Executable file
View File

@@ -0,0 +1,18 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

8
.migrate.tmpl Normal file
View File

@@ -0,0 +1,8 @@
SQL_UP = u"""
{{ $up }}
"""
SQL_DOWN = u"""
{{ $down }}
"""

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"nuxt.isNuxtApp": false
}

12
README.md Normal file
View File

@@ -0,0 +1,12 @@
# Redmine BauPM Core Plugin
Common modifications to run Redmine as project management tool on medium- and large-scale construction sites.
## Installation
```bash
cd {redmine_dir}/plugins
git clone http://laptop.local:4000/magdev/baupm-core.git baupm_core
```
Now restart redmine and you're done.

View File

@@ -0,0 +1,9 @@
class ManifestController < ApplicationController
unloadable
skip_before_action :check_if_login_required
def index
render :layout => false, :action => 'index'
end
end

View File

@@ -0,0 +1,2 @@
module ManifestHelper
end

View File

@@ -0,0 +1,21 @@
<%= javascript_include_tag "jquery-fab.min.js", :plugin => 'baupm_core' %>
<%= javascript_include_tag "baupm.js", :plugin => 'baupm_core' %>
<%= stylesheet_link_tag 'jquery-fab.css', :plugin => 'baupm_core', :media => "screen" %>
<%= stylesheet_link_tag 'baupm.css', :plugin => 'baupm_core', :media => "screen" %>
<link href="/themes/<%= Setting.ui_theme %>/images/icons/apple-touch-icon.png" rel="apple-touch-icon" type="image/png" sizes="180x180">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/favicon-32x32.png" sizes="32x32" rel="shortcut icon">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/favicon-16x16.png" rel="icon" type="image/png" sizes="16x16">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/favicon-32x32.png" rel="icon" type="image/png" sizes="32x32">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/safari-pinned-tab.svg" rel="mask-icon" size="any" color="<%= Setting.plugin_baupm_core['baupm_theme_color'] %>">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/android-chrome-192x192.png" rel="icon" sizes="192x192">
<link href="/themes/<%= Setting.ui_theme %>/images/icons/android-chrome-256x256.png" rel="icon" sizes="256x256">
<link href="/manifest.json" rel="manifest">
<% if Setting.plugin_baupm_core['baupm_theme_color'].present? %>
<meta name="theme-color" content="<%= Setting.plugin_baupm_core['baupm_theme_color'] %>">
<% end %>
<% if Setting.plugin_baupm_core['baupm_manifest_orientation'].present? %>
<meta name="screen-orientation" content="<%= Setting.plugin_baupm_core['baupm_manifest_orientation'] %>">
<% end %>
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

View File

@@ -0,0 +1,41 @@
{
"name": "<%= Setting.plugin_baupm_core['baupm_application_title'] %>",
<% if Setting.plugin_baupm_core['baupm_application_short_title'].present? %>
"short_name": "<%= Setting.plugin_baupm_core['baupm_application_short_title'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_application_description'].present? %>
"description": "<%= Setting.plugin_baupm_core['baupm_application_description'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_manifest_display'].present? %>
"display": "<%= Setting.plugin_baupm_core['baupm_manifest_display'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_manifest_orientation'].present? %>
"orientation": "<%= Setting.plugin_baupm_core['baupm_manifest_orientation'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_manifest_start_url'].present? %>
"start_url": "<%= Setting.plugin_baupm_core['baupm_manifest_start_url'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_theme_color'].present? %>
"theme_color": "<%= Setting.plugin_baupm_core['baupm_theme_color'] %>",
<% end %>
<% if Setting.plugin_baupm_core['baupm_background_color'].present? %>
"background_color": "<%= Setting.plugin_baupm_core['baupm_background_color'] %>",
<% end %>
"icons": [
{
"src": "/themes/<%= Setting.ui_theme %>/images/icons/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/themes/<%= Setting.ui_theme %>/images/icons/android-chrome-256x256.png",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "/themes/<%= Setting.ui_theme %>/images/icons/apple-touch-icon.png",
"sizes": "180x180",
"type": "image/png"
}
]
}

View File

@@ -0,0 +1,95 @@
<fieldset class="baupm-settings">
<legend><%= l(:baupm_manifest_settings) %></legend>
<table>
<tbody>
<tr>
<th><%= l(:baupm_application_title) %></th>
<td>
<input type="text" id="baupm_application_title" size="80"
value="<%= settings['baupm_application_title'] %>"
name="settings[baupm_application_title]" required>
</td>
</tr>
<tr>
<th><%= l(:baupm_application_short_title) %></th>
<td>
<input type="text" id="baupm_application_short_title" size="20"
value="<%= settings['baupm_application_short_title'] %>"
name="settings[baupm_application_short_title]" >
</td>
</tr>
<tr>
<th><%= l(:baupm_application_description) %></th>
<td>
<input type="text" id="baupm_application_description" size="80"
value="<%= settings['baupm_application_description'] %>"
name="settings[baupm_application_description]" >
</td>
</tr>
<tr>
<th><%= l(:baupm_manifest_orientation) %></th>
<td>
<select id="baupm_manifest_orientation"
name="settings[baupm_manifest_orientation]">
<option value="portrait"
<% if settings['baupm_manifest_orientation'] == 'portrait' %> selected<% end %>>
<%= l(:baupm_orientation_portrait) %>
</option>
<option value="landscape"
<% if settings['baupm_manifest_orientation'] == 'landscape' %> selected<% end %>>
<%= l(:baupm_orientation_landscape) %>
</option>
</select>
</td>
</tr>
<tr>
<th><%= l(:baupm_manifest_display) %></th>
<td>
<select id="baupm_manifest_display"
name="settings[baupm_manifest_display]">
<option value="standalone"
<% if settings['baupm_manifest_display'] == 'standalone' %> selected<% end %>>
<%= l(:baupm_display_standalone) %>
</option>
<option value="fullscreen"
<% if settings['baupm_manifest_display'] == 'fullscreen' %> selected<% end %>>
<%= l(:baupm_display_fullscreen) %>
</option>
<option value="minimal-ui"
<% if settings['baupm_manifest_display'] == 'minimal-ui' %> selected<% end %>>
<%= l(:baupm_display_minimal_ui) %>
</option>
<option value="browser"
<% if settings['baupm_manifest_display'] == 'browser' %> selected<% end %>>
<%= l(:baupm_display_browser) %>
</option>
</select>
</td>
</tr>
<tr>
<th><%= l(:baupm_manifest_start_url) %></th>
<td>
<input type="text" id="baupm_manifest_start_url" size="50"
value="<%= settings['baupm_manifest_start_url'] %>"
name="settings[baupm_manifest_start_url]" >
</td>
</tr>
<tr>
<th><%= l(:baupm_theme_color) %></th>
<td>
<input type="color" id="settings_theme_color"
value="<%= settings['baupm_theme_color'] %>"
name="settings[baupm_theme_color]" >
</td>
</tr>
<tr>
<th><%= l(:baupm_background_color) %></th>
<td>
<input type="color" id="settings_background_color"
value="<%= settings['baupm_background_color'] %>"
name="settings[baupm_background_color]" >
</td>
</tr>
</tbody>
</table>
</fieldset>

View File

@@ -0,0 +1,20 @@
$(document).ready(function() {
$('#wrapper').append('<div id="fb-wrapper"></div>');
var findLinks = function() {
var elements = [];
$('#new-object').closest('li').find('.menu-children a').each(function() {
elements.push({
url: $(this).prop('href'),
icon: '<i class="fb-icon icon-' + $(this).prop('class') + '" title="' + $(this).text() + '"></i>'
});
});
elements.push({
icon: '<i class="fb-icon icon-add"></i>'
});
return elements.reverse();
};
if ($('#new-object').get(0)) {
$('#fb-wrapper').jqueryFab(findLinks(), {});
}
});

9
assets/javascripts/jquery-fab.min.js vendored Normal file
View File

@@ -0,0 +1,9 @@
/*
* Copyright 2015
* Released under the MIT license
* https://github.com/jeffersonrpn/jquery-fab/blob/master/LICENSE.md
*
* @author: Jefferson Neves <jefferson.rpn@gmail.com>
* @version: 0.1.0
*/
!function(t){t.jfab||(t.jfab=new Object),t.jfab.fab=function(n,a,i){var l,o,e=this;e.$el=t(n),e.el=n,e.$el.data("kc.fab",e),e.$el.addClass("jfab_wrapper");var r=function(){t(this).attr("data-link-href").length>0&&(t(this).attr("data-link-target")?window.open(t(this).attr("data-link-href"),t(this).attr("data-link-target")):window.location.href=t(this).attr("data-link-href")),o.animate({opacity:"toggle",height:"toggle"},200),i.rotate&&l.toggleClass("rotate")},s=function(){o.animate({opacity:"hide",height:"hide"},100),i.rotate&&l.removeClass("rotate")};e.init=function(){if(("undefined"==typeof a||null===a)&&(a=[{url:null,bgcolor:"#e74c3c",icon:"+"}]),("undefined"==typeof i||null===i)&&(i={rotate:!1}),e.options=t.extend({},t.jfab.fab.defaultOptions,i),e.links=a,e.links.length>0){mainBtnLink=e.links[0],colorStyle=mainBtnLink.color?"color:"+mainBtnLink.color+";":"",bgColorStyle=mainBtnLink.bgcolor?"background-color:"+mainBtnLink.bgcolor+";":"",mainBtnLinkHtml="<button data-link-href='"+(mainBtnLink.url?mainBtnLink.url:"")+"' data-link-target='"+(mainBtnLink.target?mainBtnLink.target:"")+"'' class='jfab_main_btn' style='"+bgColorStyle+"'><span style='"+colorStyle+"'>"+mainBtnLink.icon+"</span></button>",subBtnsHtml="",e.links.shift();for(var n=0;n<e.links.length;n++)colorStyle=e.links[n].color?"color:"+e.links[n].color+";":"",bgColorStyle=e.links[n].bgcolor?"background-color:"+e.links[n].bgcolor+";":"",subBtnsHtml+="<div><button data-link-href='"+(e.links[n].url?e.links[n].url:"")+"' data-link-target='"+(e.links[n].target?e.links[n].target:"")+"' class='sub_fab_btn' style='"+bgColorStyle+"'><span style='"+colorStyle+"'>"+e.links[n].icon+"</span></button></div>";subBtnsHtml="<div class='jfab_btns_wrapper'>"+subBtnsHtml+"</div>",e.$el.append(subBtnsHtml).append(mainBtnLinkHtml)}else"undefined"==typeof console&&(window.console={log:function(t){alert(t)}}),console.log("Invalid links array param");l=e.$el.find(".jfab_main_btn"),o=e.$el.find(".jfab_btns_wrapper"),l.click(r),l.focusout(s),o.find(".sub_fab_btn").on("mousedown",function(){t(this).attr("data-link-href").length>0&&(t(this).attr("data-link-target")?window.open(t(this).attr("data-link-href"),t(this).attr("data-link-target")):window.location.href=t(this).attr("data-link-href"))})},e.init()},t.jfab.fab.defaultOptions={},t.fn.jqueryFab=function(n,a){return this.each(function(){new t.jfab.fab(this,n,a)})}}(jQuery);

View File

@@ -0,0 +1,4 @@
.baupm-settings th {
text-align: left!important;
min-width: 130px;
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright 2015
* Released under the MIT license
* https://github.com/jeffersonrpn/jquery-fab/blob/master/LICENSE.md
*
* @author: Jefferson Neves <jefferson.rpn@gmail.com>
* @version: 0.1.0
*/
.jfab_wrapper{
z-index: 9999;
width:100%;
height:240px;
position:fixed;
right:0px;
bottom:0px;
pointer-events:none;
}
.jfab_btns_wrapper{
right:0;
bottom:75px;
position:absolute;
display:none;
-webkit-transition: opacity 0.3s ease-in;
-moz-transition: opacity 0.3s ease-in;
-ms-transition: opacity 0.3s ease-in;
-o-transition: opacity 0.3s ease-in;
transition: opacity 0.3s ease-in;
pointer-events:all;
}
.jfab_btns_wrapper.show{
display:block;
opacity: 1;
}
.jfab_btns_wrapper button{
width:40px;
height:40px;
border-radius:100%;
background:#e74c3c;
margin-bottom:12px;
margin-right:26px;
padding:0;
border:none;
outline:none;
color:#ffffff;
font-size: 19px;
box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
transition:.3s;
pointer-events:all;
cursor: pointer;
}
.jfab_btns_wrapper button:hover{
box-shadow: 0 3px 6px rgba(0,0,0,0.32), 0 3px 6px rgba(0,0,0,0.46);
}
button.jfab_main_btn{
background-color:#e74c3c;
width:60px;
height:60px;
border-radius:100%;
background:#e74c3c;
right:16px;
bottom:16px;
position:absolute;
margin-right:0;
margin-bottom:0;
padding:0;
border:none;
outline:none;
color:#ffffff;
font-size:24px;
box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
transition:.3s;
-webkit-tap-highlight-color: rgba(0,0,0,0);
cursor: pointer;
pointer-events:all;
}
button:hover.jfab_main_btn{
box-shadow: 0 3px 6px rgba(0,0,0,0.32), 0 3px 6px rgba(0,0,0,0.46);
}
.jfab_main_btn span{
transition:.5s;
}
.jfab_main_btn.rotate {
transform:rotate(45deg);
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}

184
config/locales/de.yml Normal file
View File

@@ -0,0 +1,184 @@
de:
# BauPM related translations
baupm_theme_color: Theme-Farbe
baupm_background_color: Hintergrundfarbe
baupm_manifest_settings: Webapp-Manifest-Einstellungen
baupm_application_title: Name
baupm_application_short_title: Kurzname
baupm_application_description: Beschreibung
baupm_manifest_start_url: Start-URL
baupm_manifest_orientation: Ausrichtung
baupm_manifest_display: Ansicht
baupm_orientation_portrait: Hochformat
baupm_orientation_landscape: Querformat
baupm_display_standalone: Standalone
baupm_display_browser: Browser
baupm_display_fullscreen: Vollbild
baupm_display_minimal_ui: Minimal
# Redmine translation modifications
notice_unable_delete_version: Der Meilenstein konnte nicht gelöscht werden
error_can_not_reopen_issue_on_closed_version: Diese Aufgabe ist einem abgeschlossenen Meilenstein zugeordnet und kann daher nicht wieder geöffnet werden.
field_fixed_version: Meilenstein
field_version: Meilenstein
permission_manage_versions: Meilensteine verwalten
label_version: Meilenstein
label_version_new: Neuer Meilenstein
label_version_plural: Meilensteine
label_close_versions: Abgeschlossene Meilensteine schließen
label_roadmap_no_issues: Keine Aufgaben für diesen Meilenstein
label_current_version: Aktueller Meilenstein
label_show_completed_versions: Abgeschlossene Meilensteine anzeigen
setting_enabled_scm: Aktivierte Revisionskontrollsysteme
label_scm: Revisionskontrollsystem
text_scm_command_version: Revision
label_completed_versions: Abgeschlossene Revisionen
field_is_in_roadmap: In den Meilensteinen anzeigen
label_roadmap: Meilensteine
label_roadmap_due_in: "Fällig in %{value}"
label_roadmap_overdue: "%{value} verspätet"
field_login: Mitarbeitername
field_attr_login: Mitarbeitername-Attribut
permission_manage_members: Mitarbeiter verwalten
label_member: Mitarbeiter
label_member_new: Neuer Mitarbeiter
label_member_plural: Mitarbeiter
label_role_non_member: Kein Mitarbeiter
project_module_wiki: "Dokumentation (Wiki)"
label_wiki: Dokumentation
label_overall_spent_time: Zeitaufwand aller Projekte anzeigen
label_spent_time: Zeitaufwand
label_total_spent_time: Zeitaufwand aller Projekte anzeigen
label_gantt: Gantt-Plan
label_gantt_progress_line: Fortschritt
permission_view_gantt: Gantt-Plan anzeigen
activerecord:
errors:
messages:
cant_link_an_issue_with_a_descendant: "Eine Aufgabe kann nicht mit einer Ihrer Unteraufgaben verlinkt werden"
earlier_than_minimum_start_date: "kann wegen einer Vorgängeraufgabe nicht vor %{date} liegen"
open_issue_with_closed_parent: "Eine offene Aufgabe kann nicht an einen geschlossenen Vater gehängt werden"
button_copy_and_follow: Kopieren und Aufgabe anzeigen
button_move_and_follow: Verschieben und Aufgabe anzeigen
enumeration_issue_priorities: Aufgaben-Prioritäten
error_can_not_delete_tracker: Dieser Tracker enthält noch Aufgaben und kann nicht gelöscht werden.
error_issue_done_ratios_not_updated: Der Aufgaben-Fortschritt wurde nicht aktualisiert.
error_issue_not_found_in_project: 'Die Aufgabe wurde nicht gefunden oder gehört nicht zu diesem Projekt.'
error_no_default_issue_status: Es ist kein Status als Standard definiert. Bitte überprüfen Sie Ihre Konfiguration (unter "Administration -> Aufgaben-Status").
error_unable_delete_issue_status: "Der Aufgaben-Status konnte nicht gelöscht werden. (%{value})"
field_assignable: Aufgaben können dieser Rolle zugewiesen werden
field_is_closed: Aufgabe geschlossen
field_issue: Aufgabe
field_issue_to: Zugehörige Aufgabe
field_issues_visibility: Augaben-Sichtbarkeit
label_any_issues_in_project: irgendeine Aufgabe im Projekt
label_any_issues_not_in_project: irgendeine Aufgabe nicht im Projekt
label_assigned_to_me_issues: Mir zugewiesene Aufgaben
label_attribute_of_issue: "%{name} der Aufgabe"
label_bulk_edit_selected_issues: Alle ausgewählten Aufgaben bearbeiten
label_issue: Aufgaben
label_issue_added: Aufgabe hinzugefügt
label_issue_category: Aufgaben-Kategorie
label_issue_category_plural: Aufgaben-Kategorien
label_issue_new: Neue Aufgabe
label_issue_plural: Aufgaben
label_issue_status: Aufgaben-Status
label_issue_status_plural: Aufgaben-Status
label_issue_tracking: Aufgaben
label_issue_updated: Aufgabe aktualisiert
label_issue_view_all: Alle Aufgaben anzeigen
label_issue_watchers: Beobachter
label_issues_by: "Aufgaben pro %{value}"
label_issues_visibility_all: Alle Aufgaben
label_issues_visibility_own: Aufgaben die folgender Benutzer erstellt hat oder die ihm zugewiesen sind
label_issues_visibility_public: Alle öffentlichen Aufgaben
label_link_copied_issue: Kopierte Aufgaben verlinken
label_no_issues_in_project: Keine Aufgaben im Projekt vorhanden
label_related_issues: Zugehörige Aufgaben
label_reported_issues: Erstellte Aufgaben
label_update_issue_done_ratios: Aufgaben-Fortschritt aktualisieren
label_watched_issues: Beobachtete Aufgaben
label_x_issues:
zero: 0 Aufgaben
one: 1 Aufgabe
other: "%{count} Aufgaben"
mail_body_reminder: "%{count} Aufgaben, die Ihnen zugewiesen sind, müssen in den nächsten %{days} Tagen abgegeben werden:"
mail_subject_reminder: "%{count} Aufgaben müssen in den nächsten %{days} Tagen abgegeben werden"
notice_failed_to_save_issues: "%{count} von %{total} ausgewählten Aufgaben konnte(n) nicht gespeichert werden: %{ids}."
notice_issue_done_ratios_updated: Der Aufgaben-Fortschritt wurde aktualisiert.
notice_issue_successful_create: Aufgabe %{id} erstellt.
notice_issue_update_conflict: Die Aufgabe wurde während Ihrer Bearbeitung von einem anderen Nutzer überarbeitet.
notice_no_issue_selected: "Keine Aufgabe ausgewählt! Bitte wählen Sie die Aufgaben, die Sie bearbeiten möchten."
permission_add_issues: Aufgaben hinzufügen
permission_delete_issues: Aufgaben löschen
permission_edit_issues: Aufgaben bearbeiten
permission_manage_categories: Aufgaben-Kategorien verwalten
permission_manage_issue_relations: Aufgaben-Beziehungen verwalten
permission_manage_related_issues: Zugehörige Aufgaben verwalten
permission_set_issues_private: Aufgaben privat oder öffentlich markieren
permission_set_own_issues_private: Eigene Aufgaben privat oder öffentlich markieren
permission_view_issues: Aufgaben anzeigen
project_module_issue_tracking: Aufgaben
setting_commit_cross_project_ref: Erlaube Aufgaben aller anderen Projekte zu referenzieren
setting_cross_project_issue_relations: Aufgaben-Beziehungen zwischen Projekten erlauben
setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn für neue Aufgaben verwenden
setting_display_subprojects_issues: Aufgaben aus Unterprojekten im Hauptprojekt anzeigen
setting_issue_done_ratio: Berechne den Aufgaben-Fortschritt mittels
setting_issue_done_ratio_issue_field: Aufgaben-Feld % erledigt
setting_issue_done_ratio_issue_status: Aufgaben-Status
setting_issue_group_assignment: Aufgabenzuweisung an Gruppen erlauben
setting_issue_list_default_columns: Standard-Spalten in der Aufgabenliste
setting_issues_export_limit: Max. Anzahl Aufgaben bei CSV/PDF-Export
setting_link_copied_issue: Aufgaben beim Kopieren verlinken
text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf diese Aufgabe gebucht. Was soll mit den Aufwänden geschehen?
text_issue_added: "Aufgabe %{id} wurde erstellt von %{author}."
text_issue_category_destroy_question: "Einige Aufgaben (%{count}) sind dieser Kategorie zugeordnet. Was möchten Sie tun?"
text_issue_category_reassign_to: Aufgaben dieser Kategorie zuordnen
text_issue_updated: "Aufgabe %{id} wurde aktualisiert von %{author}."
text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewählten Aufgaben löschen möchten?'
text_issues_ref_in_commit_messages: Aufgaben-Beziehungen und -Status in Commit-Nachrichten
text_no_configuration_data: "Rollen, Tracker, Aufgaben-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, können Sie diese abändern."
text_reassign_time_entries: 'Gebuchte Aufwände dieser Aufgabe zuweisen:'
label_search_open_issues_only: Nur offene Aufgaben
permission_copy_issues: Aufgaben kopieren
permission_import_issues: Aufgaben importieren
label_import_issues: Aufgaben importieren
label_assigned_issues: Zugewiesene Aufgaben
label_any_open_issues: irgendeine offene Aufgabe
label_no_open_issues: keine offene Aufgabe
label_new_project_issue_tab_enabled: Tab "Neue Aufgabe" anzeigen
error_no_projects_with_tracker_allowed_for_new_issue: Es gibt keine Projekte mit Trackern, für welche sie Aufgaben anlegen können
error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Zeitbuchungen für Aufgaben, die gelöscht werden sind nicht möglich
setting_show_status_changes_in_mail_subject: Zeige Statusänderungen im Betreff der Mailbenachrichtigung für Aufgaben
permission_edit_own_issues: Eigene Aufgaben bearbeiten
label_updated_issues: Aktualisierte Aufgaben
field_history_default_tab: Standard-Tab für Aufgabenhistorie
my_issues_due: "Meine berfälligen Aufgaben"
my_issues_today : "Meine heutigen Aufgaben"
my_issues_next : "Meine nächsten Aufgaben"
issues_due: "Überfällige Aufgaben"
issues_today : "Heutige Aufgaben"
issues_next : "Nächste Aufgaben"
my_issues_opened_closed_today : "Meine heutige offenen und geschlossenen Aufgaben"
my_issues_summary : "Zusammenfassung meiner Aufgaben"
my_issues_by_priority : "Meine Aufgaben nach Priorität"
my_issues_by_status : "Meine Aufgaben nach Status"
my_issues_by_tracker : "Meine Aufgabe nach Tracker"
issue_template: Aufgabenvorlage
about_template_help_message: Dies ist die Onlinehilfe für Aufgabenvorlagen in diesem Projekt.
help_for_issue_title: "Der hier angegebene Text wird als Thema in die neue Aufgabe übernommen, falls die Vorlage ausgewählt wird."
project_module_issue_templates: Aufgabenvorlagen
text_no_tracker_enabled: Bisher wurde keine Konfiguration der Tracker und Aufgabenvorlagen für dieses Projekt vorgenommen.\nBitte konfigurieren Sie diese notwendige Einstellung, um die Funktion zu nutzen.
global_issue_templates: Globale Aufgabenvorlagen
no_issue_templates_for_this_redmine: Es sind keine globalen Aufgabenvorlagen definiert.
label_apply_global_template_to_all_projects: "Wende Globale Aufgabenvorlagen auf alle Projekte an."
note_apply_global_template_to_all_projects_setting_enabled: "Diese Globale Aufgabenvorlage wird auf alle Projekte angewendet weil das Vorlagen-Plugin entsprechend konfiguriert ist."
project_module_default_custom_query: Angepasste Standardabfrage
permission_manage_default_query: Standardabfrage verwalten
field_query: Angepasste Standardabfrage
default_custom_query:
label_setting: Angepasste Standardabfrage
label_view_default_issues: Standardanzeige für Aufgaben
label_queries_for_all_projects: Für alle Projekte
label_queries_for_current_project: Für das aktuelle Projekt
text_allowed_queries: Nur öffentliche Abfragen auswählbar

186
config/locales/en.yml Normal file
View File

@@ -0,0 +1,186 @@
en:
# BauPM related translations
baupm_theme_color: Theme-Color
baupm_background_color: Background-Color
baupm_manifest_settings: Webapp-Manifest-Settings
baupm_application_title: Name
baupm_application_short_title: Shortname
baupm_application_description: Description
baupm_manifest_start_url: Start-URL
baupm_manifest_orientation: Orientation
baupm_manifest_display: Display
baupm_orientation_portrait: Potrait
baupm_orientation_landscape: Landscape
baupm_display_standalone: Standalone
baupm_display_browser: Browser
baupm_display_fullscreen: Fullscreen
baupm_display_minimal_ui: Minimal UI
# Redmine translation modifications (@TODO Translate this)
notice_unable_delete_version: Unable to delete the Milestone
error_can_not_reopen_issue_on_closed_version: This Task is bound to a closed Milestone and cannot be opened again.
field_fixed_version: Milestone
field_version: Milestone
permission_manage_versions: Manage Milestones
label_version: Milestone
label_version_new: New Milestone
label_version_plural: Milestones
label_close_versions: Close finished Milestones
label_roadmap_no_issues: No Tasks for this Milestone
label_current_version: Current Milestone
label_show_completed_versions: Show closed Milestones
setting_enabled_scm: Active Revision-Control-Systems
label_scm: Revision-Control-System
text_scm_command_version: Revision
label_completed_versions: Closed Revisions
field_is_in_roadmap: Show in Milestones
label_roadmap: Milestones
label_roadmap_due_in: "Due to %{value}"
label_roadmap_overdue: "%{value} late"
field_login: Employeename
field_attr_login: Attribute for Employeename
permission_manage_members: Manage Employees
label_member: Employee
label_member_new: New Employee
label_member_plural: Employee
label_role_non_member: No Employee
project_module_wiki: "Documentation (Wiki)"
label_wiki: Documentation
label_overall_spent_time: Zeitaufwand aller Projekte anzeigen
label_spent_time: Zeitaufwand
label_total_spent_time: Zeitaufwand aller Projekte anzeigen
label_gantt: Gantt-Plan
label_gantt_progress_line: Fortschritt
permission_view_gantt: Gantt-Plan anzeigen
activerecord:
errors:
messages:
cant_link_an_issue_with_a_descendant: "Eine Aufgabe kann nicht mit einer Ihrer Unteraufgaben verlinkt werden"
earlier_than_minimum_start_date: "kann wegen einer Vorgängeraufgabe nicht vor %{date} liegen"
open_issue_with_closed_parent: "Eine offene Aufgabe kann nicht an einen geschlossenen Vater gehängt werden"
button_copy_and_follow: Kopieren und Aufgabe anzeigen
button_move_and_follow: Verschieben und Aufgabe anzeigen
enumeration_issue_priorities: Aufgaben-Prioritäten
error_can_not_delete_tracker: Dieser Tracker enthält noch Aufgaben und kann nicht gelöscht werden.
error_issue_done_ratios_not_updated: Der Aufgaben-Fortschritt wurde nicht aktualisiert.
error_issue_not_found_in_project: 'Die Aufgabe wurde nicht gefunden oder gehört nicht zu diesem Projekt.'
error_no_default_issue_status: Es ist kein Status als Standard definiert. Bitte überprüfen Sie Ihre Konfiguration (unter "Administration -> Aufgaben-Status").
error_unable_delete_issue_status: "Der Aufgaben-Status konnte nicht gelöscht werden. (%{value})"
field_assignable: Aufgaben können dieser Rolle zugewiesen werden
field_is_closed: Aufgabe geschlossen
field_issue: Aufgabe
field_issue_to: Zugehörige Aufgabe
field_issues_visibility: Augaben-Sichtbarkeit
label_any_issues_in_project: irgendeine Aufgabe im Projekt
label_any_issues_not_in_project: irgendeine Aufgabe nicht im Projekt
label_assigned_to_me_issues: Mir zugewiesene Aufgaben
label_attribute_of_issue: "%{name} der Aufgabe"
label_bulk_edit_selected_issues: Alle ausgewählten Aufgaben bearbeiten
label_issue: Aufgaben
label_issue_added: Aufgabe hinzugefügt
label_issue_category: Aufgaben-Kategorie
label_issue_category_plural: Aufgaben-Kategorien
label_issue_new: Neue Aufgabe
label_issue_plural: Aufgaben
label_issue_status: Aufgaben-Status
label_issue_status_plural: Aufgaben-Status
label_issue_tracking: Aufgaben
label_issue_updated: Aufgabe aktualisiert
label_issue_view_all: Alle Aufgaben anzeigen
label_issue_watchers: Beobachter
label_issues_by: "Aufgaben pro %{value}"
label_issues_visibility_all: Alle Aufgaben
label_issues_visibility_own: Aufgaben die folgender Benutzer erstellt hat oder die ihm zugewiesen sind
label_issues_visibility_public: Alle öffentlichen Aufgaben
label_link_copied_issue: Kopierte Aufgaben verlinken
label_no_issues_in_project: Keine Aufgaben im Projekt vorhanden
label_related_issues: Zugehörige Aufgaben
label_reported_issues: Erstellte Aufgaben
label_update_issue_done_ratios: Aufgaben-Fortschritt aktualisieren
label_watched_issues: Beobachtete Aufgaben
label_x_issues:
zero: 0 Aufgaben
one: 1 Aufgabe
other: "%{count} Aufgaben"
mail_body_reminder: "%{count} Aufgaben, die Ihnen zugewiesen sind, müssen in den nächsten %{days} Tagen abgegeben werden:"
mail_subject_reminder: "%{count} Aufgaben müssen in den nächsten %{days} Tagen abgegeben werden"
notice_failed_to_save_issues: "%{count} von %{total} ausgewählten Aufgaben konnte(n) nicht gespeichert werden: %{ids}."
notice_issue_done_ratios_updated: Der Aufgaben-Fortschritt wurde aktualisiert.
notice_issue_successful_create: Aufgabe %{id} erstellt.
notice_issue_update_conflict: Die Aufgabe wurde während Ihrer Bearbeitung von einem anderen Nutzer überarbeitet.
notice_no_issue_selected: "Keine Aufgabe ausgewählt! Bitte wählen Sie die Aufgaben, die Sie bearbeiten möchten."
permission_add_issues: Aufgaben hinzufügen
permission_delete_issues: Aufgaben löschen
permission_edit_issues: Aufgaben bearbeiten
permission_manage_categories: Aufgaben-Kategorien verwalten
permission_manage_issue_relations: Aufgaben-Beziehungen verwalten
permission_manage_related_issues: Zugehörige Aufgaben verwalten
permission_set_issues_private: Aufgaben privat oder öffentlich markieren
permission_set_own_issues_private: Eigene Aufgaben privat oder öffentlich markieren
permission_view_issues: Aufgaben anzeigen
project_module_issue_tracking: Aufgaben
setting_commit_cross_project_ref: Erlaube Aufgaben aller anderen Projekte zu referenzieren
setting_cross_project_issue_relations: Aufgaben-Beziehungen zwischen Projekten erlauben
setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn für neue Aufgaben verwenden
setting_display_subprojects_issues: Aufgaben aus Unterprojekten im Hauptprojekt anzeigen
setting_issue_done_ratio: Berechne den Aufgaben-Fortschritt mittels
setting_issue_done_ratio_issue_field: Aufgaben-Feld % erledigt
setting_issue_done_ratio_issue_status: Aufgaben-Status
setting_issue_group_assignment: Aufgabenzuweisung an Gruppen erlauben
setting_issue_list_default_columns: Standard-Spalten in der Aufgabenliste
setting_issues_export_limit: Max. Anzahl Aufgaben bei CSV/PDF-Export
setting_link_copied_issue: Aufgaben beim Kopieren verlinken
text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf diese Aufgabe gebucht. Was soll mit den Aufwänden geschehen?
text_issue_added: "Aufgabe %{id} wurde erstellt von %{author}."
text_issue_category_destroy_question: "Einige Aufgaben (%{count}) sind dieser Kategorie zugeordnet. Was möchten Sie tun?"
text_issue_category_reassign_to: Aufgaben dieser Kategorie zuordnen
text_issue_updated: "Aufgabe %{id} wurde aktualisiert von %{author}."
text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewählten Aufgaben löschen möchten?'
text_issues_ref_in_commit_messages: Aufgaben-Beziehungen und -Status in Commit-Nachrichten
text_no_configuration_data: "Rollen, Tracker, Aufgaben-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, können Sie diese abändern."
text_reassign_time_entries: 'Gebuchte Aufwände dieser Aufgabe zuweisen:'
label_search_open_issues_only: Nur offene Aufgaben
permission_copy_issues: Aufgaben kopieren
permission_import_issues: Aufgaben importieren
label_import_issues: Aufgaben importieren
label_assigned_issues: Zugewiesene Aufgaben
label_any_open_issues: irgendeine offene Aufgabe
label_no_open_issues: keine offene Aufgabe
label_new_project_issue_tab_enabled: Tab "Neue Aufgabe" anzeigen
error_no_projects_with_tracker_allowed_for_new_issue: Es gibt keine Projekte mit Trackern, für welche sie Aufgaben anlegen können
error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Zeitbuchungen für Aufgaben, die gelöscht werden sind nicht möglich
setting_show_status_changes_in_mail_subject: Zeige Statusänderungen im Betreff der Mailbenachrichtigung für Aufgaben
permission_edit_own_issues: Eigene Aufgaben bearbeiten
label_updated_issues: Aktualisierte Aufgaben
field_history_default_tab: Standard-Tab für Aufgabenhistorie
my_issues_due: "Meine berfälligen Aufgaben"
my_issues_today : "Meine heutigen Aufgaben"
my_issues_next : "Meine nächsten Aufgaben"
issues_due: "Überfällige Aufgaben"
issues_today : "Heutige Aufgaben"
issues_next : "Nächste Aufgaben"
my_issues_opened_closed_today : "Meine heutige offenen und geschlossenen Aufgaben"
my_issues_summary : "Zusammenfassung meiner Aufgaben"
my_issues_by_priority : "Meine Aufgaben nach Priorität"
my_issues_by_status : "Meine Aufgaben nach Status"
my_issues_by_tracker : "Meine Aufgabe nach Tracker"
issue_template: Aufgabenvorlage
about_template_help_message: Dies ist die Onlinehilfe für Aufgabenvorlagen in diesem Projekt.
help_for_issue_title: "Der hier angegebene Text wird als Thema in die neue Aufgabe übernommen, falls die Vorlage ausgewählt wird."
project_module_issue_templates: Aufgabenvorlagen
text_no_tracker_enabled: Bisher wurde keine Konfiguration der Tracker und Aufgabenvorlagen für dieses Projekt vorgenommen.\nBitte konfigurieren Sie diese notwendige Einstellung, um die Funktion zu nutzen.
global_issue_templates: Globale Aufgabenvorlagen
no_issue_templates_for_this_redmine: Es sind keine globalen Aufgabenvorlagen definiert.
label_apply_global_template_to_all_projects: "Wende Globale Aufgabenvorlagen auf alle Projekte an."
note_apply_global_template_to_all_projects_setting_enabled: "Diese Globale Aufgabenvorlage wird auf alle Projekte angewendet weil das Vorlagen-Plugin entsprechend konfiguriert ist."
project_module_default_custom_query: Angepasste Standardabfrage
permission_manage_default_query: Standardabfrage verwalten
field_query: Angepasste Standardabfrage
default_custom_query:
label_setting: Angepasste Standardabfrage
label_view_default_issues: Standardanzeige für Aufgaben
label_queries_for_all_projects: Für alle Projekte
label_queries_for_current_project: Für das aktuelle Projekt
text_allowed_queries: Nur öffentliche Abfragen auswählbar

5
config/routes.rb Normal file
View File

@@ -0,0 +1,5 @@
if Redmine::Plugin.installed? :baupm_core
RedmineApp::Application.routes.draw do
get '/manifest.json', :controller => 'manifest', :action => 'index', :as => 'manifest_json'
end
end

27
init.rb Normal file
View File

@@ -0,0 +1,27 @@
require 'redmine'
class Hooks < Redmine::Hook::ViewListener
render_on :view_layouts_base_html_head, :partial => 'header', :layout => false
end
Redmine::Plugin.register :baupm_core do
name 'BauPM Core Plugin'
url 'https://git.bundespruefstelle.ch/magdev/baupm_core'
author 'Marco Grätsch'
author_url 'https://github.com/magdev'
description "Common modifications for BauPM"
version '0.1.0'
requires_redmine :version_or_higher => '4.1.0'
settings :default => {
'baupm_background_color' => '#ffffff',
'baupm_theme_color' => '#575757',
'baupm_application_title' => 'BauPM',
'baupm_application_short_title' => 'BauPM',
'baupm_application_description' => 'Baustellen-Management-System auf Redmine-Basis',
'baupm_manifest_orientation' => 'portrait',
'baupm_manifest_display' => 'standalone',
'baupm_manifest_start_url' => '.'
}, :partial => 'settings/baupm_settings'
end

7
scripts/crontab Normal file
View File

@@ -0,0 +1,7 @@
# Fetch emails
*/5 * * * * /home/bitnami/apps/redmine/fetch-mails >/dev/null 2>&1
# Update Letsencrypt Certificate
#### Don't forget to set the --email and --domain arguments! ####
# 0 0 * * * sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt --email="" --http --http-timeout 30 --http.webroot /opt/bitnami/apps/letsencrypt --domains="" renew && sudo /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf -k graceful

43
scripts/fetch-mails.sh Normal file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
# Email-address of the system
mail_address=""
# Email-Account username and password
mail_username="$mail_address"
mail_password=""
# IMAP-Server address and port
mail_host=""
mail_port=993
mail_ssl=true
# IMAP-INBOX-Folder
mail_folder="INBOX"
# Default project and tracker
project="meta"
tracker="Support"
# Redmine Settings
unknown_user_action="ignore"
allow_override="all"
no_permission_check=true
app_root="/home/bitnami/apps/redmine/htdocs"
if [[ -n "$mail_address" ]] && [[ -n "$mail_username" ]] && [[ -n "$mail_password" ]] && [[ -n "$mail_host" ]]; then
sudo /opt/bitnami/ruby/bin/rake -f $app_root/Rakefile --silent redmine:email:receive_imap RAILS_ENV="production" \
host="$mail_host" \
port=$mail_port \
username="$mail_username" \
password="$mail_password" \
ssl=$mail_ssl \
move_on_success="$mail_folder.success" \
move_on_failure="$mail_folder.failed" \
unknown_user="$unknown_user_action" \
tracker="$tracker" \
allow_override="$allow_override" \
folder="$mail_folder" \
project="$project" \
no_permission_check=$no_permission_check
fi

View File

@@ -0,0 +1,22 @@
#!/bin/bash
TARGET="/home/bitnami/apps/redmine/htdocs/public/themes/Ossig"
GIT_DIR="/repo/ossig-theme.git"
BRANCH="master"
RESTART_APACHE=""
# shellcheck disable=SC2034
# shellcheck disable=SC2162
while read oldrev newrev ref; do
if [ "$ref" = "refs/heads/$BRANCH" ]; then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
if [[ -n $RESTART_APACHE ]]; then
echo "Restarting Apache Webserver"
sudo "$HOME/stack/ctlscript.sh" restart apache >>/dev/null 2>&1
fi
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
fi
done