Skip to content

Commit

Permalink
help system for admin area added:
Browse files Browse the repository at this point in the history
- help area in admin-template added
- existing modules extended with admin help texts in german
- new area /help/admin/* introduced
- new python module Markdown needed for markdown templates
 closes seiferta#4
  • Loading branch information
seiferta committed Oct 5, 2014
1 parent 9a526e7 commit 3d126f1
Show file tree
Hide file tree
Showing 64 changed files with 1,257 additions and 264 deletions.
11 changes: 11 additions & 0 deletions bin/translate_help.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import os
import sys
if sys.platform == 'win32':
pybabel = 'pybabel'
else:
pybabel = 'flask/bin/pybabel'
if len(sys.argv) != 2:
print "usage: tr_init <language-code>"
sys.exit(1)
os.system(pybabel + ' extract -F bin/babel.cfg -k gettext -o emonitor\\onlinehelp\\translations\\onlinehelp.pot emonitor\\onlinehelp')
os.system(pybabel + ' update -D onlinehelp -i emonitor\\onlinehelp\\translations\\onlinehelp.pot -d emonitor\\onlinehelp\\translations -l ' + sys.argv[1])
2 changes: 1 addition & 1 deletion emonitor/admin/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def adminContent(module=''):
current_mod = [admin.modules[m] for m in admin.modules if admin.modules[m].info['path'] == module.split('/')[0]][0]
except IndexError:
current_mod = admin.modules['startpages']
return current_mod.getAdminContent(modules=admin.modules, current_mod=current_mod, user=User.getUsers(login.current_user.get_id() or -1), app_name=current_app.config.get('PROJECT'), app_version=current_app.config.get('APP_VERSION'), path='/admin/' + module)
return current_mod.getAdminContent(modules=admin.modules, current_mod=current_mod, user=User.getUsers(login.current_user.get_id() or -1), app_name=current_app.config.get('PROJECT'), app_version=current_app.config.get('APP_VERSION'), path='/admin/' + module, help='')


@admin.route('/admin/data/', methods=['GET', 'POST'])
Expand Down
22 changes: 13 additions & 9 deletions emonitor/admin/translations/admin.pot
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-08 16:05+0200\n"
"POT-Creation-Date: 2014-10-01 10:46+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -41,32 +41,36 @@ msgstr ""
msgid "admin.db.revision.error"
msgstr ""

#: emonitor/admin/web/templates/admin.html:14
#: emonitor/admin/web/templates/admin.html:54
#: emonitor/admin/web/templates/admin.html:15
#: emonitor/admin/web/templates/admin.html:57
msgid "admin.titlemain"
msgstr ""

#: emonitor/admin/web/templates/admin.html:55
#: emonitor/admin/web/templates/admin.html:59
msgid "admin.frontendlink"
msgstr ""

#: emonitor/admin/web/templates/admin.html:63
#: emonitor/admin/web/templates/admin.html:60
msgid "admin.helptitle"
msgstr ""

#: emonitor/admin/web/templates/admin.html:69
msgid "admin.logout"
msgstr ""

#: emonitor/admin/web/templates/admin.html:82
#: emonitor/admin/web/templates/admin.html:88
msgid "admin.moduleinitneeded"
msgstr ""

#: emonitor/admin/web/templates/admin.html:113
#: emonitor/admin/web/templates/admin.html:122
msgid "layout.resize"
msgstr ""

#: emonitor/admin/web/templates/admin.html:114
#: emonitor/admin/web/templates/admin.html:123
msgid "layout.open"
msgstr ""

#: emonitor/admin/web/templates/admin.html:115
#: emonitor/admin/web/templates/admin.html:124
msgid "layout.closed"
msgstr ""

Binary file modified emonitor/admin/translations/de/LC_MESSAGES/admin.mo
Binary file not shown.
24 changes: 14 additions & 10 deletions emonitor/admin/translations/de/LC_MESSAGES/admin.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-09-08 16:05+0200\n"
"PO-Revision-Date: 2014-09-10 15:11+0100\n"
"POT-Creation-Date: 2014-10-01 10:46+0200\n"
"PO-Revision-Date: 2014-10-01 10:46+0100\n"
"Last-Translator: Arne Seifert <[email protected]>\n"
"Language-Team: de <[email protected]>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
Expand Down Expand Up @@ -44,32 +44,36 @@ msgstr ""
"Fehler bei der Erstellung der neuen Revision, Parameter 'revisionname' wurde "
"nicht über die URL mit angegeben."

#: emonitor/admin/web/templates/admin.html:14
#: emonitor/admin/web/templates/admin.html:54
#: emonitor/admin/web/templates/admin.html:15
#: emonitor/admin/web/templates/admin.html:57
msgid "admin.titlemain"
msgstr "eMonitor - Administrationsbereich"

#: emonitor/admin/web/templates/admin.html:55
#: emonitor/admin/web/templates/admin.html:59
msgid "admin.frontendlink"
msgstr "Eingabeoberfläche"

#: emonitor/admin/web/templates/admin.html:63
#: emonitor/admin/web/templates/admin.html:60
msgid "admin.helptitle"
msgstr "eMonitor-Onlinehilfe öffnen"

#: emonitor/admin/web/templates/admin.html:69
msgid "admin.logout"
msgstr "abmelden"

#: emonitor/admin/web/templates/admin.html:82
#: emonitor/admin/web/templates/admin.html:88
msgid "admin.moduleinitneeded"
msgstr "Definition unvollständig oder fehlerhaft"

#: emonitor/admin/web/templates/admin.html:113
#: emonitor/admin/web/templates/admin.html:122
msgid "layout.resize"
msgstr "Verschieben"

#: emonitor/admin/web/templates/admin.html:114
#: emonitor/admin/web/templates/admin.html:123
msgid "layout.open"
msgstr "Schließen"

#: emonitor/admin/web/templates/admin.html:115
#: emonitor/admin/web/templates/admin.html:124
msgid "layout.closed"
msgstr "Öffnen"

Expand Down
49 changes: 36 additions & 13 deletions emonitor/admin/web/templates/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,15 @@
span.initneed{position:absolute;top:2px;right:2px}
span.initneed i{color:#97070B!important;cursor:pointer}
.navigation li{position:relative}

.helpwindow{padding-top:0;margin-left:10px;}
.helpwindow i:hover{color:#97070B!important;cursor:pointer}
</style>
{% block style %}{% endblock %}
<script type="text/javascript" language="javascript" src="/js/jquery-1.11.0.min.js"> </script>
<script type="text/javascript" language="javascript" src="/js/jquery-ui-1.10.1.min.js"> </script>
<script type="text/javascript" language="javascript" src="/js/jquery.layout.min.js"> </script>
<script type="text/javascript" language="javascript" src="/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/js/jquery.layout.pseudoClose.min-1.1.js"></script>
<script>
var ws;
</script>
Expand All @@ -53,9 +55,12 @@
</div>
<div class="pane ui-layout-north" onmouseover="layout.allowOverflow('north')" onmouseout="layout.resetOverflow(this)">
<h1 style="padding-left:10px;">{{ _('admin.titlemain') }}</h1>
<div class="header_links"><a href="/">{{ _('admin.frontendlink') }}</a></div>

<div class="user usermenu" style="text-align:right;z-index:30;overflow:visible;">
<div class="header_links">
<a href="/">{{ _('admin.frontendlink') }}</a>
<a href="/help{{ request.path }}" class="helpwindow" title="{{ _('admin.helptitle') }}"><i class="fa fa-question fa-lg"></i></a>
</div>

<div class="user usermenu" style="text-align:right;z-index:30;overflow:visible;padding-top:1px">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<span class="fa fa-user fa-lg" style="color:#333" title="{{ user.username }}"></span>
</a>
Expand All @@ -76,16 +81,18 @@ <h1 style="padding-left:10px;">{{ _('admin.titlemain') }}</h1>
</div>
<div class="pane ui-layout-west">
<div class="navigation">
<ul>
{%- for module in modules %}
<li>
<a href="/admin/{{ modules[module].info.path }}" {% if module==current_mod.info.name %} class="active" {% endif %}><i class="fa {{ modules[module].info.icon }} fa-lg"></i> {{ _('module.'+module) }}</a>
{%- if modules[module].checkDefinition()==1 %} <span class="initneed" title="{{ _('admin.moduleinitneeded') }}"><i class="fa fa-exclamation-triangle"></i></span>{%- endif %}
</li>
{%- endfor %}
</ul>
<ul>
{%- for module in modules %}
<li>
<a href="/admin/{{ modules[module].info.path }}" {% if module==current_mod.info.name %} class="active" {% endif %}><i class="fa {{ modules[module].info.icon }} fa-lg"></i> {{ _('module.'+module) }}</a>
{%- if modules[module].checkDefinition()==1 %} <span class="initneed" title="{{ _('admin.moduleinitneeded') }}"><i class="fa fa-exclamation-triangle"></i></span>{%- endif %}
</li>
{%- endfor %}
</ul>
</div>
</div><div class="version"> </div>
</div>
<iframe class="pane ui-layout-east" style="padding:0 !important;margin:0 !important;" src="/help/admin/default" name="onlinehelp"> </iframe>
<div class="version"> </div>
</div>
<div class="overlay">
<div class="overlay_back"> </div>
Expand All @@ -97,12 +104,15 @@ <h1 style="padding-left:10px;">{{ _('admin.titlemain') }}</h1>
<script>
{% block script_end %}
var layout;
var helpWindowSizeArray = ["width=300,height=400,scrollbars=yes,resizable=1" ];

$(document).ready(function () {

layout = $('#maincontainer').layout({
north: {closable:false, resizable:false, spacing_open: 0, spacing_closed: 0, size:54},
south: {closable:false, resizable:false, spacing_open: 0, spacing_closed: 0, size:20},
west: {closable:true, resizable:true, spacing_open: 5, spacing_closed: 5, size:200},
east: {size:250, initClosed:1, resizable:false, spacing_open: 0, spacing_closed: 0, pseudoClose:{hideObject: "object"}, onclose_start:$.layout.callbacks.pseudoClose},
center:{paneSelector: ".ui-layout-center",
childOptions: {
spacing_open: 0,
Expand All @@ -115,6 +125,19 @@ <h1 style="padding-left:10px;">{{ _('admin.titlemain') }}</h1>
togglerTip_open: '{{ _('layout.open') }}',
togglerTip_closed: '{{ _('layout.closed') }}'
});


$('.helpwindow').click(function (event){
//var url = $(this).attr("href");
//window.open(url, "helpPopup", helpWindowSizeArray[0]);
event.preventDefault();
if (layout.state.east.isClosed) {
layout.east.pane.attr('src', $(this).attr("href"));
layout.open('east');
}else{
layout.close('east');
}
});
});

$('.usermenu').hover(function() {
Expand Down
27 changes: 27 additions & 0 deletions emonitor/modules/alarmkeys/help/admin.de.alarmkeys.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Ausrückeordnung

Für jedes Alarmstichwort kann eine gesonderte Ausrückeordnung definiert werden. Dabei kann in drei Gruppen
zusammengestellt werden, welche Fahrzeuge und Gerätschaften erforderlich sind. Unterschieden wird dabei zwischen:

* Primärfahrzeugen
* Folgefahrzeugen
* Sondermaterial

Falls für ein Alarmstichwort keine Ausrückeordnung gefunden wurde, kann eine Standardausrückereihenfolge hinterlegt
werden, die immer dann genutzt wird. In der Listenansicht werden die Stichworte gruppiert mit den dazugehörigen
Schlagworten dargestellt.

Für jede [Einheit](/admin/settings/department) kann eine eigene Ausrückeordnung definiert werden.

Das Material kann unter [Fahrzeug/Material](/admin/cars) definiert werden

## Bearbeiten Ausrückeordnung

* **Stichwort:** Stichwort/Kategorie für die Ausrückeordnung
* **Schlagwort:** Schlagwort unterbalb eines Stichwortes/Kategorie
* **Interne Bezeichnung:** eigener Name für dieses Schlagwort
* **Bemerkung:** zusätzliche Bemerkung
* **Fahrzeug/Materialauswahl:**
Aus einer Liste aller definierter Fahrzeuge/Material kann per Drag&Drop das Gewünschte als Primär-, Folgefahrzeug oder
Sondermittel definiert werden. Hier kann auch die Reihenfolge geändert werden.
Zum Abwählen abwählen des Fahrzeuges wieder in den Bereich _Sonstige Fahrzeuge/Material_ verschieben.
46 changes: 46 additions & 0 deletions emonitor/modules/alarmkeys/help/admin.de.alarmkeys.upload.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Upload

Die AAO kann aus einer Excel-Datei hochlgeladen werden. Innerhalb der Excel-Datei müssen folgende Spalten vorhanden
sein:

* Stichwort
* Schlagwort
* Interne Bezeichnung
* Primärfahrzeug\[1-5\] _(bis zu 5)_
* Folgefahrzeug\[1-4\] _(bis zu 4)_
* Sondermaterial\[1-4\] _(bis zu 4)_
* Bemerkung _(optional)_

Hierfür sind folgende Schritte notwendig:

## Karteireiter _Daten hochladen_:

### Schritt 1:

Excel-Datei auswählen und hochladen

### Schritt 2:

Tabellenblatt auswählen, es wird eine Liste der in der Datei gefundenen Tabellenblätter angezeigt.

### Schritt 3:

Spalten aus der Datei den Spalten der Definition in eMonitor zuordnen. Anschließend **Daten ermitteln** anklicken.

## Karteireiter _Ergebnis anzeigen_:

Eine Liste mit gefundenen Werte wird präsentiert. Hier wird auch farblich gekennzeichnet, ob das Fahrzeug
(Sinnvollerweise der Funkrufname, z.B. 40/1) bereits im System vorhanden ist oder fehlt. Fehlende Fahrzeuge können beim
Import der Daten automatisch angelegt werden.
Am Ende der Übersicht besteht die Auswahl, welche Datensätze importiert werden sollen. Der eigentlich Import erfolgt
mit **Update/Import starten**

## Karteireiter _Export_:

Die bereits eingegebene Definition der AAO kann exportiert werden. Dabei besteht die Auswahl zwischen:

* Alle Datensätze exportieren
* Nur Datensätze ohne eigene Ausrückedefinition

Die zweite Möglichkeit ist nur bei der Nutzung mehrerer Einheiten erforderlich, da sonst immer für alle Stichworte auch
eine AAO vorhanden sein wird.
14 changes: 14 additions & 0 deletions emonitor/modules/alarmobjects/help/admin.de.alarmobjects.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Einsatzobjekte

Als Einsatzobjekt können Gebäude oder Einrichtungen definiert werden, für die besondere Informationen vorliegen. Das
können sein:

* **Objektname:** Name, unter dem das Objekt bekannt ist
* **Straße und Hausnummer:** Genaue Adresse
* **Einsatzobjekttyp:** Auswahlliste mit Typen, die hinterlegt werden können [Typen-Definition](/admin/alarmobjects/types)
* **Einsatzplan:** Nummer des Einsatzplanes der hinterlegt wurde
* **aktiv:** Nur aktive Objekte werden im Frontend zur Auswahl angeboten
* **Brandmeldeanlagennummer:** Nummer der Brandmeldeanlage
* **Bemerkung:** Freitextfeld für die Bemerkung
* **Kartenposition:** Auf der Karte kann die Position des Einsatzobjektes bestimmt werden. Automatisch wird anhand der
Adresse die Position zu bestimmen. Manueller Engriff ist jederzeit möglich.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Einsatzobjekt-Typen

Bei den Objekttypen kann definiert werden, welche Objekttypen es für die Auswahl bei den Einsatzobjekten geben soll.
Im Frontend wird diese Definition als Filter angeboten.

Zu jeder Typdefinition kann eine Bemerkung hinterlegt werden.
6 changes: 3 additions & 3 deletions emonitor/modules/alarms/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def __init__(self, app):
app.jinja_loader.searchpath.append("%s/emonitor/modules/alarms/templates" % app.config.get('PROJECT_ROOT'))

# subnavigation
self.adminsubnavigation = [('/admin/alarms', 'alarms.base'), ('/admin/alarms/types', 'alarms.types'), ('/admin/alarms/test', 'alarms.test')]
self.adminsubnavigation = [('/admin/alarms', 'alarms.base'), ('/admin/alarms/types', 'module.alarms.types'), ('/admin/alarms/test', 'module.alarms.test')]

# create database tables
from .alarm import Alarm
Expand Down Expand Up @@ -89,8 +89,8 @@ def export_static(filename):
# translations
babel.gettext(u'module.alarms')
babel.gettext(u'alarms.base')
babel.gettext(u'alarms.types')
babel.gettext(u'alarms.test')
babel.gettext(u'module.alarms.types')
babel.gettext(u'module.alarms.test')
babel.gettext(u'alarms_income')
babel.gettext(u'alarms_timer')
babel.gettext(u'alarms_remark')
Expand Down
2 changes: 2 additions & 0 deletions emonitor/modules/alarms/alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ def getRouting(self):
def changeState(id, state):
global LASTALARM
alarm = classes.get('alarm').getAlarms(id)
if not alarm:
return []
alarm.state = state
try:
alarm.addHistory('autochangeState', Alarm.ALARMSTATES[str(state)])
Expand Down
2 changes: 1 addition & 1 deletion emonitor/modules/alarms/content_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def getAdminContent(self, **params):
stats = dict.fromkeys(classes.get('alarm').ALARMSTATES.keys() + ['3'], int(0))
for alarm in alarms:
stats[str(alarm.state)] += 1
params.update({'alarms': alarms, 'stats': stats, 'alarmstates': classes.get('alarm').ALARMSTATES})
params.update({'alarms': alarms, 'stats': stats, 'alarmstates': classes.get('alarm').ALARMSTATES, 'help': self.hasHelp('admin')})
return render_template('admin.alarms.html', **params)


Expand Down
11 changes: 11 additions & 0 deletions emonitor/modules/alarms/help/admin.de.alarms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Einsatzübersicht

In der Einsatzübersicht werden alle Einsätze nach Status dargestellt. Dabei sind folgende Status-Werte möglich:

* __Laufende Einsätze:__ Einsätze, die noch nicht abgeschlossen sind. Diese Einsätze werden auch auf den angeschlossenen Displays angezeigt.

* __Offene Einsätze:__ Einsätze, die noch nicht aktiviert wurden, also als Vorankündigung bestehen.

* __Abgeschlossene Einsätze:__ Einsätze, die bereits abgearbeteitet wurden.

* __Einsatz-Archiv:__ Einsätze, die archiviert wurden, so dass sie nicht mehr auf der Frontend-Oberfläche angezeigt werden.
18 changes: 18 additions & 0 deletions emonitor/modules/alarms/help/admin.de.alarms.test.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Testverarbeitung

Um die korrekte Auswerung der FAXe zu testen, kann über eine Testverarbeitung ein Test gestartet werden, der die Schritte,
die unter [Eventhandling](/admin/events) konfiguriert sind, nacheinander ausführt, aber am Ende keinen Einsatz in der Datenbank anlegt.

Es werden keine Meldungen an die Clients/Monitore geschickt.

### Datei hochladen

Lokale Beispieldatei auswählen und anschließend "Datei hochladen und verarbeiten" anklicken.

### Verarbeitung startet

Anschließend wird die automatische Verarbeitung der Datei gestartet und in Tabs werden die Ergebnisse der eizelnen
Verarbeitungsschritte angezeigt.

Falls in einem Schritt Fehler auftreten, werden diese im Schritt auf dem Tab angezeigt. Als letzter Schritt sollte eine
Liste aller Attribute, die für den Einsatz gefunden wurden, angezeigt werden.
Loading

0 comments on commit 3d126f1

Please sign in to comment.