예제 #1
0
    def init_app(self, app):
        Communication.app = app

        try:  # try telegram
            import telegram
            self.__dict__['telegram'] = TelegramBot(app=app, token=Settings.get('telegramsettings')['telegramkey'] or app.config.get('TELEGRAMKEY'))
        except TypeError:
            Settings.set('telegramsettings', {'telegramkey': ''})
            self.__dict__['telegram'] = None
        except ImportError:
            logger.error("error telegram")
            self.__dict__['telegram'] = None

        try:  # try mail
            # TODO: add Mail communicator
            pass
            self.__dict__['mail'] = Mailer
        except ImportError:
            self.__dict__['mail'] = None
            logger.error("error Mail")
            # Mail = None

        app.extensions['communication'] = self

        logger.info("{} Communicator(s) loaded: {}".format(len(self.__dict__.keys()), ", ".join(self.__dict__.keys())))
        events.addHandlerClass('*', 'emonitor.communication.Communication', Communication.handleEvent, ['in.sendertype', 'in.group', 'in.id', 'in.style'])
예제 #2
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module messages

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if 'saveparameters' in request.form.keys():  # save parameters for modules
        for k in [k for k in request.form if k != 'saveparameters']:
            Settings.set("messages.%s" % k, request.form.get(k))
        monitorserver.sendMessage('0', 'reset')  # refresh monitor layout

    if len(module) == 2:
        if module[1] == 'types':  # type submodule
            params.update({'implementations': MessageType.getMessageTypes()})
            return render_template('admin.messages.types.html', **params)
    else:
        messages = {
            '1': Messages.getMessages(state=1),
            '0': Messages.getMessages(state=0)
        }
        params.update({'messages': messages})
        return render_template('admin.messages.html', **params)
예제 #3
0
    def init_app(self, app):
        Communication.app = app

        try:  # try telegram
            import telegram
            self.__dict__['telegram'] = TelegramBot(
                app=app,
                token=Settings.get('telegramsettings')['telegramkey']
                or app.config.get('TELEGRAMKEY'))
        except TypeError:
            Settings.set('telegramsettings', {'telegramkey': ''})
            self.__dict__['telegram'] = None
        except ImportError:
            logger.error("error telegram")
            self.__dict__['telegram'] = None

        try:  # try mail
            # TODO: add Mail communicator
            pass
            self.__dict__['mail'] = Mailer
        except ImportError:
            self.__dict__['mail'] = None
            logger.error("error Mail")
            # Mail = None

        app.extensions['communication'] = self

        logger.info("{} Communicator(s) loaded: {}".format(
            len(self.__dict__.keys()), ", ".join(self.__dict__.keys())))
        events.addHandlerClass(
            '*', 'emonitor.communication.Communication',
            Communication.handleEvent,
            ['in.sendertype', 'in.group', 'in.id', 'in.style'])
예제 #4
0
    def getOCRParams():
        """
        Get dict with OCR parameters

        :return: *callstring*, *inputformat*, *inputtextformat*
        """
        ret = {'callstring': '', 'inputformat': '', 'inputtextformat': ''}
        for v in Settings.query.filter(Settings.name.like('ocr.%')).all():
            ret[v.name.split('.')[-1]] = v.value
        if Settings.query.filter(Settings.name.like('ocr.%')).count() == 0:  # use default values
            db.session.add(Settings.set('ocr.inputformat', DEFAULTINPUTFORMAT))
            db.session.add(Settings.set('ocr.inputtextformat', DEFAULTINPUTTEXTFORMAT))
            db.session.add(Settings.set('ocr.callstring', DEFAULTCALLSTRING))
            db.session.commit()
            return Ocr.getOCRParams()
        return ret
예제 #5
0
파일: ocr.py 프로젝트: sambandi/eMonitor
    def getOCRParams():
        """
        Get dict with OCR parameters

        :return: *callstring*, *inputformat*, *inputtextformat*
        """
        ret = {'callstring': '', 'inputformat': '', 'inputtextformat': ''}
        for v in Settings.query.filter(Settings.name.like('ocr.%')).all():
            ret[v.name.split('.')[-1]] = v.value
        if Settings.query.filter(Settings.name.like(
                'ocr.%')).count() == 0:  # use default values
            db.session.add(Settings.set('ocr.inputformat', DEFAULTINPUTFORMAT))
            db.session.add(
                Settings.set('ocr.inputtextformat', DEFAULTINPUTTEXTFORMAT))
            db.session.add(Settings.set('ocr.callstring', DEFAULTCALLSTRING))
            db.session.commit()
            return Ocr.getOCRParams()
        return ret
예제 #6
0
    def getConvertParams():
        """
        Get dict with configuration parameters for conversion

        :return: *callstring*, *format*
        """
        ret = {'callstring': '', 'format': ''}
        for v in Settings.query.filter(Settings.name.like('convert.%')):
            if v.name == 'convert.format':
                ret['format'] = v.value
            elif v.name == 'convert.callstring':
                ret['callstring'] = v.value
        if Settings.query.filter(Settings.name.like('convert.%')).count() == 0:  # use default values
            db.session.add(Settings.set('convert.format', DEFAULTIMAGECONVERTFORMAT))
            db.session.add(Settings.set('convert.callstring', DEFAULTIMAGECONVERTCALL))
            db.session.commit()
            return Ocr.getConvertParams()
        return ret
def getAdminContent(self, **params):
    """
    Deliver admin content of module messages

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if 'saveparameters' in request.form.keys():  # save parameters for modules
        for k in [k for k in request.form if k != 'saveparameters']:
            Settings.set("messages.%s" % k, request.form.get(k))
        monitorserver.sendMessage('0', 'reset')  # refresh monitor layout

    if len(module) == 2:
        if module[1] == 'types':  # type submodule
            params.update({'implementations': MessageType.getMessageTypes()})
            return render_template('admin.messages.types.html', **params)
    else:
        messages = {'1': Messages.getMessages(state=1), '0': Messages.getMessages(state=0)}
        params.update({'messages': messages})
        return render_template('admin.messages.html', **params)
예제 #8
0
파일: ocr.py 프로젝트: sambandi/eMonitor
    def getConvertParams():
        """
        Get dict with configuration parameters for conversion

        :return: *callstring*, *format*
        """
        ret = {'callstring': '', 'format': '', 'crop': 'True'}
        for v in Settings.query.filter(Settings.name.like('convert.%')):
            if v.name == 'convert.format':
                ret['format'] = v.value
            elif v.name == 'convert.callstring':
                ret['callstring'] = v.value
            elif v.name == 'convert.crop':
                ret['crop'] = v.value
        if Settings.query.filter(Settings.name.like(
                'convert.%')).count() == 0:  # use default values
            db.session.add(
                Settings.set('convert.format', DEFAULTIMAGECONVERTFORMAT))
            db.session.add(
                Settings.set('convert.callstring', DEFAULTIMAGECONVERTCALL))
            db.session.add(Settings.set('convert.crop', 'True'))
            db.session.commit()
            return Ocr.getConvertParams()
        return ret
예제 #9
0
    def __init__(self, app):
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append(
            "%s/emonitor/modules/settings/templates" %
            app.config.get('PROJECT_ROOT'))

        self.widgets = [CrestWidget('departmentcrest')]

        # subnavigation
        self.adminsubnavigation = [
            ('/admin/settings', 'settings.main'),
            ('/admin/settings/department', 'module.settings.department'),
            ('/admin/settings/cars', 'module.settings.cars'),
            ('/admin/settings/communication', 'module.settings.communication'),
            ('/admin/settings/start', 'module.settings.start')
        ]

        # static folders
        @app.route('/settings/inc/<path:filename>')
        def settings_static(filename):
            return send_from_directory(
                "%s/emonitor/modules/settings/inc/" %
                app.config.get('PROJECT_ROOT'), filename)

        # translations
        babel.gettext(u'module.settings')
        babel.gettext(u'settings.main')
        babel.gettext(u'module.settings.department')
        babel.gettext(u'module.settings.cars')
        babel.gettext(u'module.settings.communication')
        babel.gettext(u'module.settings.start')

        babel.gettext(u'settings.pathtype.pathdone')
        babel.gettext(u'settings.pathtype.pathtmp')
        babel.gettext(u'settings.pathtype.pathdata')
        babel.gettext(u'settings.pathtype.pathincome')

        babel.gettext(u'departmentcrest')
        babel.gettext(u'telegram.default.welcomemsg')

        # add default values
        if Settings.query.count() == 0:  # add default values
            db.session.add(Settings.set('defaultZoom', 15))
            db.session.add(Settings.set('startLat', ''))
            db.session.add(Settings.set('startLng', ''))
            db.session.add(Settings.set('homeLat', ''))
            db.session.add(Settings.set('homeLng', ''))
            db.session.add(
                Settings.set(
                    'alarms.evalfields',
                    '_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_'
                ))
            db.session.add(Settings('cartypes', "- [car, '#ffffff']\n"))
            db.session.commit()
예제 #10
0
    def __init__(self, app):
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append("%s/emonitor/modules/settings/templates" % app.config.get("PROJECT_ROOT"))

        # subnavigation
        self.adminsubnavigation = [
            ("/admin/settings", "settings.main"),
            ("/admin/settings/department", "module.settings.department"),
            ("/admin/settings/cars", "module.settings.cars"),
            ("/admin/settings/start", "module.settings.start"),
        ]

        # static folders
        @app.route("/settings/inc/<path:filename>")
        def settings_static(filename):
            return send_from_directory("%s/emonitor/modules/settings/inc/" % app.config.get("PROJECT_ROOT"), filename)

        # translations
        babel.gettext(u"module.settings")
        babel.gettext(u"settings.main")
        babel.gettext(u"module.settings.department")
        babel.gettext(u"module.settings.cars")
        babel.gettext(u"module.settings.start")

        babel.gettext(u"settings.pathtype.pathdone")
        babel.gettext(u"settings.pathtype.pathtmp")
        babel.gettext(u"settings.pathtype.pathdata")
        babel.gettext(u"settings.pathtype.pathincome")

        # add default values
        if Settings.query.count() == 0:  # add default values
            db.session.add(Settings.set("defaultZoom", 15))
            db.session.add(Settings.set("startLat", ""))
            db.session.add(Settings.set("startLng", ""))
            db.session.add(Settings.set("homeLat", ""))
            db.session.add(Settings.set("homeLng", ""))
            db.session.add(
                Settings.set(
                    "alarms.evalfields",
                    "_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_",
                )
            )
            db.session.add(Settings("cartypes", "- [car, '#ffffff']\n"))
            db.session.commit()
예제 #11
0
파일: __init__.py 프로젝트: GroSte/eMonitor
    def __init__(self, app):
        Module.__init__(self, app)
        # add template path
        app.jinja_loader.searchpath.append("%s/emonitor/modules/settings/templates" % app.config.get('PROJECT_ROOT'))

        self.widgets = [CrestWidget('departmentcrest')]

        # subnavigation
        self.adminsubnavigation = [('/admin/settings', 'settings.main'), ('/admin/settings/department', 'module.settings.department'), ('/admin/settings/cars', 'module.settings.cars'), ('/admin/settings/communication', 'module.settings.communication'), ('/admin/settings/start', 'module.settings.start')]

        # static folders
        @app.route('/settings/inc/<path:filename>')
        def settings_static(filename):
            return send_from_directory("%s/emonitor/modules/settings/inc/" % app.config.get('PROJECT_ROOT'), filename)
            
        # translations
        babel.gettext(u'module.settings')
        babel.gettext(u'settings.main')
        babel.gettext(u'module.settings.department')
        babel.gettext(u'module.settings.cars')
        babel.gettext(u'module.settings.communication')
        babel.gettext(u'module.settings.start')

        babel.gettext(u'settings.pathtype.pathdone')
        babel.gettext(u'settings.pathtype.pathtmp')
        babel.gettext(u'settings.pathtype.pathdata')
        babel.gettext(u'settings.pathtype.pathincome')

        babel.gettext(u'departmentcrest')
        babel.gettext(u'telegram.default.welcomemsg')

        # add default values
        if Settings.query.count() == 0:  # add default values
            db.session.add(Settings.set('defaultZoom', 15))
            db.session.add(Settings.set('startLat', ''))
            db.session.add(Settings.set('startLng', ''))
            db.session.add(Settings.set('homeLat', ''))
            db.session.add(Settings.set('homeLng', ''))
            db.session.add(Settings.set('alarms.evalfields', '_bab_\r\n_train_\r\n_street_\r\n_default_city_\r\n_interchange_\r\n_kilometer_\r\n_bma_\r\n_bma_main_\r\n_bma_key_\r\n_train_identifier_'))
            db.session.add(Settings('cartypes', "- [car, '#ffffff']\n"))
            db.session.commit()
예제 #12
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module mapitems

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')
    if len(module) < 2:
        module.append(
            current_app.blueprints['admin'].modules['mapitems'].
            adminsubnavigation[0][0].split('/')[-1])  # get first submenuitem

    if len(module) >= 2:
        if module[1] == 'definition':  # definition
            if request.method == 'POST':

                if request.form.get('action').startswith(
                        'edititemtype_'):  # edit/add definition TODO: fix
                    typename = request.form.get('action').split('_')
                    itemtype = [
                        d for d in Settings.get('mapitemdefinition')
                        if d['name'] == typename[1]
                    ]
                    if len(itemtype) > 0:
                        itemtype = itemtype[0]
                        if 'parameters' not in itemtype:
                            itemtype['parameters'] = {
                                'layout': '',
                                'tileserver': 0
                            }
                        if 'key' not in itemtype:
                            itemtype['key'] = []
                        if 'cities' not in itemtype:
                            itemtype['cities'] = []
                        if 'itemtype' not in itemtype:
                            itemtype['itemtype'] = 'node'
                    else:
                        itemtype = {
                            'name': '',
                            'filter': '',
                            'attributes': [],
                            'parameters': {'layout', 'tileserver'},
                            'key': [],
                            'cities': [],
                            'itemtype': 'node'
                        }
                    params.update({
                        'itemtype': itemtype,
                        'cities': City.getCities(),
                        'layouters': MapItem.getLayouters()
                    })
                    return render_template(
                        'admin.mapitems.definition_actions.html', **params)

                elif request.form.get('action').startswith(
                        'deleteitemtype_'):  # delete definition
                    itemtypes = Settings.get('mapitemdefinition')
                    for itemtype in itemtypes:
                        if itemtype['name'] == request.form.get(
                                'action').split('_')[1]:
                            del itemtypes[itemtypes.index(itemtype)]
                    Settings.set('mapitemdefinition', itemtypes)
                    db.session.commit()

                elif request.form.get(
                        'action') == 'updateitemtypes':  # save definition
                    itemtypes = Settings.get('mapitemdefinition')
                    position = -1
                    for itemtype in itemtypes:
                        if itemtype['name'] == request.form.get('edit_name'):
                            position = itemtypes.index(itemtype)
                            break
                    if position >= 0:  # update type
                        itemtypes[position]['filter'] = request.form.get(
                            'edit_filter')
                        itemtypes[position]['cities'] = [
                            int(i) for i in request.form.getlist('edit_cityid')
                        ]
                        itemtypes[position]['itemtype'] = request.form.get(
                            'edit_itemtype')
                        itemtypes[position]['attributes'] = request.form.get(
                            'edit_attributes').split('\r\n')
                        itemtypes[position]['parameters'] = {
                            'layout': request.form.get('edit_layout'),
                            'tileserver': request.form.get('edit_tileserver')
                        }
                        itemtypes[position]['key'] = request.form.get(
                            'edit_keys').split('\r\n')

                    else:  # add new type
                        it = dict()
                        it['name'] = request.form.get('edit_name')
                        it['filter'] = request.form.get('edit_filter')
                        it['cities'] = [
                            int(i) for i in request.form.getlist('edit_cityid')
                        ]
                        it['itemtype'] = request.form.get('edit_itemtype')
                        it['attributes'] = request.form.get(
                            'edit_attributes').split('\r\n')
                        it['parameters'] = {
                            'layout': request.form.get('edit_layout')
                        }
                        if itemtypes == "":
                            itemtypes = [it]
                        else:
                            itemtypes.append(it)
                        it['key'] = request.form.get('edit_keys').split('\r\n')
                    Settings.set('mapitemdefinition', itemtypes)
                    db.session.commit()
                    current_app.blueprints['admin'].modules[
                        'mapitems'].updateAdminSubNavigation()

            params.update({
                'itemtypes': Settings.get('mapitemdefinition', []),
                'layouters': MapItem.getLayouters()
            })
            return render_template('admin.mapitems.definition.html', **params)

    # deliver default list
    itemdefinition = [
        t for t in Settings.get('mapitemdefinition') if t['name'] == module[1]
    ][0]
    itemtypes = MapItem.getMapitems(itemtype=module[1])
    page = 0
    if len(module) == 3:  # pagination active
        page = int(module[2])
    pagination = Pagination(page, PER_PAGE, len(itemtypes))

    params.update({
        'itemtypes': itemtypes[page:page + PER_PAGE],
        'itemdefinition': itemdefinition,
        'pagination': pagination
    })
    return render_template('admin.mapitems.html', **params)
def getAdminContent(self, **params):
    """
    Deliver admin content of module maps

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) > 1:
        if module[1] == 'position':
            if request.method == 'POST':
                if request.form.get('action') == 'saveposition':  # safe default map position and home position
                    Settings.set('defaultLat', request.form.get('default_lat', ''))
                    Settings.set('defaultLng', request.form.get('default_lng', ''))
                    Settings.set('defaultZoom', request.form.get('default_zoom', ''))

                    Settings.set('homeLat', request.form.get('home_lat', ''))
                    Settings.set('homeLng', request.form.get('home_lng', ''))

                    db.session.commit()

            params.update({'settings': Settings})
            return render_template('admin.map.position.html', **params)

    else:
        if request.method == 'POST':
            if request.form.get('action') == 'savemap':  # save map
                if request.form.get('map_id') != 'None':  # update
                    _map = Map.getMaps(request.form.get('map_id'))
                    _map.name = request.form.get('map_name')
                    _map.path = request.form.get('map_path')
                    _map.maptype = int(request.form.get('map_type'))
                    _map.tileserver = request.form.get('map_tileserver')
                    _map.default = request.form.get('map_default')
                else:  # add map
                    _map = Map(request.form.get('map_name'), request.form.get('map_path'), int(request.form.get('map_type')), request.form.get('map_tileserver'), int(request.form.get('map_default')))
                    db.session.add(_map)
                db.session.commit()

            elif request.form.get('action') == 'createmap':  # add map
                params.update({'map': Map('', '', 0, '', 0), 'tilebase': current_app.config.get('PATH_TILES'), 'settings': Settings})
                return render_template('admin.map_actions.html', **params)

            elif request.form.get('action').startswith('detailmap_'):  # edit map
                params.update({'map': Map.getMaps(request.form.get('action').split('_')[-1]), 'settings': Settings, 'tilebase': current_app.config.get('PATH_TILES'), 'tiles': '\', \''.join(Settings.getMapTiles(int(request.form.get('action').split('_')[-1])))})
                return render_template('admin.map_actions.html', **params)

            elif request.form.get('action').startswith('deletemap_'):  # delete map
                db.session.delete(Map.getMaps(int(request.form.get('action').split('_')[-1])))
                db.session.commit()

            elif request.form.get('action') == 'ordersetting':  # change map order
                maps = []
                for _id in request.form.getlist('mapids'):
                    _map = Map.getMaps(int(_id))
                    maps.append(dict(name=_map.__dict__['name'], path=_map.__dict__['path'], maptype=_map.__dict__['maptype'], tileserver=_map.__dict__['tileserver'], default=_map.__dict__['default']))
                Map.query.delete()  # delete all maps
                for _map in maps:  # add maps in new order
                    db.session.add(Map(_map['name'], _map['path'], _map['maptype'], _map['tileserver'], _map['default']))
                db.session.commit()

    params.update({'maps': Map.getMaps()})
    return render_template('admin.map.html', **params)
def getAdminContent(self, **params):
    module = request.view_args['module'].split('/')

    if len(module) < 2:
        module.append(u'1')

    if len(module) > 2 and module[2] == 'upload':  # upload persons
        params.update({'': int(module[1]), 'depid': module[1]})
        return render_template('admin.persons.upload.html', **params)

    if request.method == 'POST':
        if request.form.get('action') == 'createperson':  # add person
            params.update({'person': Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1])), 'settings': Settings.get('persons.settings')})
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action').startswith('editperson_'):  # edit person
            params.update({'person': Person.getPersons(id=request.form.get('action').split('_')[-1]), 'settings': Settings.get('persons.settings')})
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action') == 'updateperson':  # save person
            if request.form.get('person_id') != 'None':
                person = Person.getPersons(id=request.form.get('person_id'))
            else:
                person = Person('', '', '', '', '', '', False, datetime.now(), '', int(module[1]))
                db.session.add(person)

            person.firstname = request.form.get('firstname')
            person.lastname = request.form.get('lastname')
            person.salutation = request.form.get('salutation')
            person.grade = request.form.get('grade')
            person._dept = int(request.form.get('dept'))
            person.position = request.form.get('position')
            person.active = 'active' in request.form.keys()
            try:
                person.birthdate = datetime.strptime('{} 00:00:00'.format(request.form.get('birthdate')), "%d.%m.%Y %H:%M:%S")
            except ValueError:
                pass
            person.identifier = request.form.get('identifier')
            person.remark = request.form.get('remark')
            db.session.commit()

        elif request.form.get('action').startswith('deleteperson_'):
            db.session.delete(Person.getPersons(id=request.form.get('action').split('_')[-1]))
            db.session.commit()

        elif request.form.get('action') == 'updategrades':
            grades = request.form.getlist('grade')
            while grades[-1] == grades[-2] == u"":  # remove last empty entries
                grades = grades[:-2]
            _settings = Settings.get('persons.settings')
            if 'positions' not in _settings.keys():
                _settings['positions'] = []
            _settings['grades'] = zip(*[grades[i::2] for i in range(2)])
            Settings.set('persons.settings', _settings)
            db.session.commit()

        elif request.form.get('action') == 'updatepositions':
            _settings = Settings.get('persons.settings')
            if 'grades' not in _settings.keys():
                _settings['grades'] = []
            _settings['positions'] = request.form.get('positions').replace('\r', '').split('\n')
            Settings.set('persons.settings', _settings)
            db.session.commit()

    if int(module[1]) == 0:
        params.update({'settings': Settings.get('persons.settings')})
        return render_template("admin.persons.settings.html", **params)
    persons = Person.getPersons(dept=int(module[1]))
    chars = {}
    for p in persons:
        chars[p.fullname[0].upper()] = 0
    params.update({'persons': persons, 'chars': sorted(chars), 'depid': module[1]})
    return render_template("admin.persons.html", **params)
def getAdminContent(self, **params):
    """
    Deliver admin content of module printers

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) == 2:
        if module[1] == 'settings':  # printer settings
            if request.method == 'POST':
                if request.form.get('action') == 'savereprintersparams':
                    Settings.set('printer.callstring', request.form.get('printers_callstring'))

            _p = dict()
            _p['callstring'] = Settings.get('printer.callstring')
            params.update({'params': _p})
            return render_template('admin.printers.settings.html', **params)
    else:

        def _printernames(callstring):
            printernames = ['<default>']
            if len(callstring.split()) > 0:
                callstring = '{} -printer "xxx"'.format(callstring.split()[0])
            try:
                subprocess.check_output(callstring, stderr=subprocess.STDOUT, shell=True)
            except subprocess.CalledProcessError as e:
                for l in e.output.split('\r\n'):
                    if l.startswith('  "'):
                        printernames.append(l[3:-1].strip())
            return printernames

        #def _callstring():  # get callstring and replace variables
        #    callstring = classes.get('settings').get('printer.callstring')
        #    callstring = callstring.replace('[basepath]', current_app.config.get('PROJECT_ROOT'))
        #    return callstring

        def _templates():  # get all printer templates
            templates = {}
            for root, dirs, files in os.walk("{}/emonitor/modules/".format(current_app.config.get('PROJECT_ROOT'))):
                mod = root.replace("{}/emonitor/modules/".format(current_app.config.get('PROJECT_ROOT')), '').replace('\\templates', '')
                for f in files:
                    if f.endswith('.html') and f.startswith('print.'):
                        if mod not in templates:
                            templates[mod] = []
                        templates[mod].append(PrintLayout('{}.{}'.format(mod, f)))
            return templates

        if request.method == 'POST':
            if request.form.get('action') == 'createprinter':  # add printer definition
                printer = Printers('', '', '', '', "['1']")
                params.update({'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString()))})
                return render_template('admin.printers_actions.html', **params)

            elif request.form.get('action').startswith('editprinters_'):
                printer = Printers.getPrinters(int(request.form.get('action').split('_')[-1]))
                params.update({'printer': printer, 'templates': _templates(), 'printernames': sorted(_printernames(printer.getCallString()))})
                return render_template('admin.printers_actions.html', **params)

            elif request.form.get('action') == 'updateprinter':
                if request.form.get('printer_id') == 'None':  # add new printerdefintion
                    p = Printers('', '', '', '', settings="", state=0)
                    db.session.add(p)
                else:
                    p = Printers.getPrinters(int(request.form.get('printer_id')))
                p.name = request.form.get('printername')
                p.printer = request.form.get('printerprinter')
                p.module = request.form.get('template').split('.')[0]
                p.layout = '.'.join(request.form.get('template').split('.')[1:])
                _s = [request.form.get('printersettings'), []]  # add settings from template
                for tparam in [_p for _p in request.form.get('templateparams').split(';') if _p != ""]:
                    _s[1].append('{}={}'.format(tparam[7:], request.form.get(tparam)))
                _s[1] = ';'.join(_s[1])
                p.settings = _s
                p.state = request.form.get('printerstate')
                db.session.commit()

            elif request.form.get('action').startswith('deleteprinters_'):  # delete printer definition
                db.session.delete(Printers.getPrinters(pid=request.form.get('action').split('_')[-1]))
                db.session.commit()

    params.update({'printers': Printers.getPrinters()})
    return render_template('admin.printers.html', **params)
예제 #16
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module textmod

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) == 2:
        if module[1] == 'ocr':  # ocr settings
            if request.method == 'POST':
                if request.form.get(
                        'action') == 'savereocrparams':  # save changes
                    Settings.set('ocr.inputformat',
                                 request.form.get('ocr_formats').split('\r\n'))
                    Settings.set(
                        'ocr.inputtextformat',
                        request.form.get('ocr_textformats').split('\r\n'))
                    Settings.set('ocr.callstring',
                                 request.form.get('ocr_callstring'))

            params.update({'params': Ocr.getOCRParams()})
            return render_template('admin.textmod.ocr.html', **params)

        elif module[1] == 'ocrcustom':
            if request.method == 'POST':
                if request.form.get(
                        'action') == 'savereocrcustom':  # save changes
                    if not os.path.exists(
                            '%s/bin/tesseract/tessdata' %
                            current_app.config.get('PROJECT_ROOT')):
                        os.makedirs('%s/bin/tesseract/tessdata/' %
                                    current_app.config.get('PROJECT_ROOT'))
                    with codecs.open(
                            '%s/bin/tesseract/tessdata/deu.user-words' %
                            current_app.config.get('PROJECT_ROOT'), 'w',
                            'utf-8') as f:
                        f.write(request.form.get('ocrcustom', ''))

            if os.path.exists('%s/bin/tesseract/tessdata/deu.user-words' %
                              current_app.config.get('PROJECT_ROOT')):
                content = codecs.open(
                    '%s/bin/tesseract/tessdata/deu.user-words' %
                    current_app.config.get('PROJECT_ROOT'), 'r',
                    'utf-8').read()
            else:
                current_app.logger.info('ocr custom wordlist not found')
                content = ""

            params.update({'content': content})
            return render_template('admin.textmod.ocrcustom.html', **params)

        elif module[1] == 'convert':  # convert image
            if request.method == 'POST':
                if request.form.get(
                        'action') == 'savereconvertparams':  # save changes
                    Settings.set('convert.format',
                                 request.form.get('convert_format'))
                    Settings.set('convert.callstring',
                                 request.form.get('convert_callstring'))
                    Settings.set(
                        'convert.crop', 'convert_crop'
                        in request.form.get('convert_crop', 'False'))

            params.update({
                'params': Ocr.getConvertParams(),
                'imageformats': ['jpg', 'png']
            })
            return render_template('admin.textmod.convert.html', **params)

    else:  # replacements
        if request.method == 'POST':
            if request.form.get('action') == 'addreplace':  # add replacement
                params.update({'replacement': Replace('', '')})
                return render_template('admin.textmod_actions.html', **params)

            elif request.form.get('action').startswith(
                    'editreplace_'):  # edit existing replacement
                params.update({
                    'replacement':
                    Replace.getReplacements(
                        id=request.form.get('action').split('_')[-1])
                })
                return render_template('admin.textmod_actions.html', **params)

            elif request.form.get('action').startswith(
                    'deletereplace_'):  # delete existing replacement
                db.session.delete(
                    Replace.getReplacements(
                        id=request.form.get('action').split('_')[-1]))
                db.session.commit()

            elif request.form.get(
                    'action') == 'savereplace':  # save replacement
                if request.form.get('replace_id') == 'None':  # add new
                    db.session.add(
                        Replace(request.form.get('replace_text'),
                                request.form.get('replace_repl')))

                else:  # update existing replacement
                    replacement = Replace.getReplacements(
                        id=request.form.get('replace_id'))
                    replacement.text = request.form.get('replace_text')
                    replacement.replace = request.form.get('replace_repl')
                db.session.commit()

        params.update({'replacements': Replace.getReplacements()})
        return render_template('admin.textmod.html', **params)
예제 #17
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module settings

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    def chunks(l, n):
        return [l[i:i + n] for i in range(0, len(l), n)]

    if len(module) == 2:
        if module[1] == 'department':  # department submodule
            if request.method == 'POST':
                if request.form.get('action') == 'savedept':  # save department
                    if request.form.get('dep_id') != 'None':  # update
                        department = Department.getDepartments(request.form.get('dep_id'))
                        l = request.form.get('dep_pos')
                    else:  # add
                        l = len(Department.getDepartments()) + 1
                        department = Department('', '', '', 0)
                        db.session.add(department)
                    department.name = request.form.get('dep_name')
                    department.shortname = request.form.get('dep_shortname')
                    department.color = request.form.get('dep_color')
                    department.set(u'address_name', unicode(request.form.get('dep_address_name')))
                    department.set(u'address_street', unicode(request.form.get('dep_address_street')))
                    department.set(u'address_city', unicode(request.form.get('dep_address_city')))
                    department.set(u'address_phone', unicode(request.form.get('dep_address_phone')))
                    department.set(u'address_fax', unicode(request.form.get('dep_address_fax')))
                    department.set(u'address_email', unicode(request.form.get('dep_address_email')))
                    if len(request.files) > 0:
                        uploadfile = request.files.get('dep_logo')
                        if uploadfile.filename != '':
                            _fname, _fext = os.path.splitext(uploadfile.filename)
                            db.session.flush()  # flush to get department id of new department
                            fname = os.path.join(current_app.config.get('PATH_DATA'), 'departmentlogo_{}{}'.format(department.id, _fext))
                            uploadfile.save(fname)
                            department.set(u'logo', u'departmentlogo_{}{}'.format(department.id, _fext))  # store relative path from data directory
                        elif request.form.get('logoaction') == 'deletelogo':
                            if os.path.exists('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])):
                                os.remove('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo']))
                                department.set(u'logo', u'')
                    department.orderpos = l
                    department.defaultcity = request.form.get('dep_city')
                    db.session.commit()
                    
                elif request.form.get('action') == 'createdepartment':  # add department
                    params.update({'department': Department('', '', '', 0), 'cities': City.getCities()})
                    return render_template('admin.settings.department_actions.html', **params)

                elif request.form.get('action').startswith('detaildept_'):  # edit department
                    params.update({'department': Department.getDepartments(id=request.form.get('action').split('_')[-1]), 'cities': City.getCities()})
                    return render_template('admin.settings.department_actions.html', **params)

                elif request.form.get('action').startswith('deletedept_'):  # delete department
                    _c = []
                    for city in City.getCities():
                        if city.department.id == int(request.form.get('action').split('_')[-1]):
                            _c.append(city.name)
                    if len(_c) == 0:
                        db.session.delete(Department.getDepartments(id=request.form.get('action').split('_')[-1]))
                        db.session.commit()
                    else:
                        params.update({'error': babel.gettext('admin.settings.department_deleteerror1', cities=', '.join(_c))})
                    
                elif request.form.get('action') == 'ordersetting':  # change department order
                    for _id in request.form.getlist('departmentids'):
                        Department.getDepartments(id=_id).orderpos = request.form.getlist('departmentids').index(_id) + 1
                    db.session.commit()
            
            params.update({'departments': Department.getDepartments(), 'cities': City.getCities()})
            return render_template('admin.settings.department.html', **params)

        elif module[1] == 'cars':
            if request.method == 'POST':
                if request.form.get('action') == 'updatetypes':
                    Settings.set('cartypes', [i for i in chunks(request.form.getlist('cartype'), 2) if i[0] != ''])
                    db.session.commit()
            params.update({'cartypes': Settings.getCarTypes()})
            return render_template('admin.settings.cars.html', **params)

        elif module[1] == 'communication':
            from emonitor.extensions import communication
            if request.method == 'POST':
                if request.form.get('action') == 'telegramsettings':
                    vals = Settings.get('telegramsettings')
                    vals['telegramkey'] = request.form.get('telegrambot').strip()
                    vals['welcomemsg'] = request.form.get('welcometext')
                    vals['helpmsg'] = request.form.get('helptext')
                    Settings.set('telegramsettings', vals)
                    db.session.commit()
                    tb = communication.telegram
                    if not tb:
                        communication.init_app(app=communication.app)
                        tb = communication.telegram
                    else:
                        tb.stop()
                    try:
                        tb.updateToken(vals['telegramkey'])
                    except AttributeError:
                        pass

                elif request.form.get('action') == 'telegramgroups':
                    vals = Settings.get('telegramsettings')
                    g = {}
                    for f in filter(lambda x: x.startswith('groupname_'), request.form):
                        _id = f.split('_')[-1]  # fieldname in form
                        if request.form.get('groupname_' + _id) in ['newgroup', '']:
                            continue
                        g[request.form.get('groupname_' + _id)] = request.form.get('members_selectable_' + _id).split(';')
                    vals['groups'] = g
                    Settings.set('telegramsettings', vals)
                    db.session.commit()

            params.update({'bot': communication.telegram, 'settings': Settings.getYaml('telegramsettings'), 'configtelegramkey': current_app.config.get('TELEGRAMKEY', '')})
            return render_template('admin.settings.communication.html', **params)

        elif module[1] == 'start':

            if request.method == 'POST':
                if request.form.get('action') == 'updatestart':  # update start page definition
                    areas = dict()
                    areas['center'] = {'module': request.form.get('center.module'), 'width': '0', 'visible': 1}
                    areas['west'] = {'module': request.form.get('west.module'), 'moduleadd': request.form.getlist('west.module.add'), 'width': '.%s' % request.form.get('west.width'), 'visible': request.form.get('west.visible')}
                    areas['east'] = {'module': request.form.get('east.module'), 'moduleadd': request.form.getlist('east.module.add'), 'width': '.%s' % request.form.get('east.width'), 'visible': request.form.get('east.visible')}

                    Settings.set('frontend.default', areas)
                    db.session.commit()

            def modname(obj):  # get translation for sorting of module
                _t = "module.%s" % obj.info['name']
                return babel.gettext(_t)

            params.update({'mods': sorted([m for m in current_app.blueprints['frontend'].modules.values() if m.frontendContent() == 1], key=modname), 'center': Settings.getFrontendSettings('center'), 'west': Settings.getFrontendSettings('west'), 'east': Settings.getFrontendSettings('east')})
            return render_template('admin.settings.start.html', **params)

    else:

        if request.method == 'POST':  # save settings
            if request.form.get('action') == 'observerstate':
                Settings.set('observer.interval', request.form.get('observerinterval'))
                _jobserver = scheduler.get_jobs('observerinterval')[0]
                if Settings.get('observer.interval', '0') == '0':
                    _jobserver.pause()
                else:
                    scheduler.reschedule_job(_jobserver.id, trigger=eMonitorIntervalTrigger(seconds=int(Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL', 2)))))
            elif request.form.get('action') == 'monitorping':
                Settings.set('monitorping', request.form.get('monitorping'))
                _jping = scheduler.get_jobs('monitorping')[0]
                if Settings.get('monitorping', '0') == '0':
                    _jping.pause()
                else:
                    scheduler.reschedule_job(_jping.id, trigger=eMonitorIntervalTrigger(minutes=int(Settings.get('monitorping', current_app.config.get('MONITORPING', 2)))))

        paths = dict(pathdata=current_app.config.get('PATH_DATA'), pathtmp=current_app.config.get('PATH_TMP'), pathincome=current_app.config.get('PATH_INCOME'), pathdone=current_app.config.get('PATH_DONE'))
        params.update({'paths': paths, 'observerinterval': Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL')), 'monitorping': Settings.get('monitorping', current_app.config.get('MONITORPING')), 'alarmsevalfields': Settings.get('alarms.evalfields'), 'alembic': alembic})
        return render_template('admin.settings.html', **params)
    return redirect("/admin/settings", code=302)
예제 #18
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module printers

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) == 2:
        if module[1] == 'settings':  # printer settings
            if request.method == 'POST':
                if request.form.get('action') == 'savereprintersparams':
                    Settings.set('printer.callstring',
                                 request.form.get('printers_callstring'))

            _p = dict()
            _p['callstring'] = Settings.get('printer.callstring')
            params.update({'params': _p})
            return render_template('admin.printers.settings.html', **params)
    else:

        def _printernames(callstring):
            printernames = ['<default>']
            if len(callstring.split()) > 0:
                callstring = '{} -printer "xxx"'.format(callstring.split()[0])
            try:
                subprocess.check_output(callstring,
                                        stderr=subprocess.STDOUT,
                                        shell=True)
            except subprocess.CalledProcessError as e:
                for l in e.output.split('\r\n'):
                    if l.startswith('  "'):
                        printernames.append(l[3:-1].strip())
            return printernames

        #def _callstring():  # get callstring and replace variables
        #    callstring = classes.get('settings').get('printer.callstring')
        #    callstring = callstring.replace('[basepath]', current_app.config.get('PROJECT_ROOT'))
        #    return callstring

        def _templates():  # get all printer templates
            templates = {}
            for root, dirs, files in os.walk("{}/emonitor/modules/".format(
                    current_app.config.get('PROJECT_ROOT'))):
                mod = root.replace(
                    "{}/emonitor/modules/".format(
                        current_app.config.get('PROJECT_ROOT')),
                    '').replace('\\templates', '')
                for f in files:
                    if f.endswith('.html') and f.startswith('print.'):
                        if mod not in templates:
                            templates[mod] = []
                        templates[mod].append(
                            PrintLayout('{}.{}'.format(mod, f)))
            return templates

        if request.method == 'POST':
            if request.form.get(
                    'action') == 'createprinter':  # add printer definition
                printer = Printers('', '', '', '', "['1']")
                params.update({
                    'printer':
                    printer,
                    'templates':
                    _templates(),
                    'printernames':
                    sorted(_printernames(printer.getCallString()))
                })
                return render_template('admin.printers_actions.html', **params)

            elif request.form.get('action').startswith('editprinters_'):
                printer = Printers.getPrinters(
                    int(request.form.get('action').split('_')[-1]))
                params.update({
                    'printer':
                    printer,
                    'templates':
                    _templates(),
                    'printernames':
                    sorted(_printernames(printer.getCallString()))
                })
                return render_template('admin.printers_actions.html', **params)

            elif request.form.get('action') == 'updateprinter':
                if request.form.get(
                        'printer_id') == 'None':  # add new printerdefintion
                    p = Printers('', '', '', '', settings="", state=0)
                    db.session.add(p)
                else:
                    p = Printers.getPrinters(
                        int(request.form.get('printer_id')))
                p.name = request.form.get('printername')
                p.printer = request.form.get('printerprinter')
                p.module = request.form.get('template').split('.')[0]
                p.layout = '.'.join(
                    request.form.get('template').split('.')[1:])
                _s = [request.form.get('printersettings'),
                      []]  # add settings from template
                for tparam in [
                        _p
                        for _p in request.form.get('templateparams').split(';')
                        if _p != ""
                ]:
                    _s[1].append('{}={}'.format(tparam[7:],
                                                request.form.get(tparam)))
                _s[1] = ';'.join(_s[1])
                p.settings = _s
                p.state = request.form.get('printerstate')
                db.session.commit()

            elif request.form.get('action').startswith(
                    'deleteprinters_'):  # delete printer definition
                db.session.delete(
                    Printers.getPrinters(
                        pid=request.form.get('action').split('_')[-1]))
                db.session.commit()

    params.update({'printers': Printers.getPrinters()})
    return render_template('admin.printers.html', **params)
예제 #19
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module settings

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    def chunks(l, n):
        return [l[i:i + n] for i in range(0, len(l), n)]

    if len(module) == 2:
        if module[1] == 'department':  # department submodule
            if request.method == 'POST':
                if request.form.get('action') == 'savedept':  # save department
                    if request.form.get('dep_id') != 'None':  # update
                        department = Department.getDepartments(request.form.get('dep_id'))
                        l = request.form.get('dep_pos')
                    else:  # add
                        l = len(Department.getDepartments()) + 1
                        department = Department('', '', '', 0)
                        db.session.add(department)
                    department.name = request.form.get('dep_name')
                    department.shortname = request.form.get('dep_shortname')
                    department.color = request.form.get('dep_color')
                    department.set(u'address_name', unicode(request.form.get('dep_address_name')))
                    department.set(u'address_street', unicode(request.form.get('dep_address_street')))
                    department.set(u'address_city', unicode(request.form.get('dep_address_city')))
                    department.set(u'address_phone', unicode(request.form.get('dep_address_phone')))
                    department.set(u'address_fax', unicode(request.form.get('dep_address_fax')))
                    department.set(u'address_email', unicode(request.form.get('dep_address_email')))
                    if len(request.files) > 0:
                        uploadfile = request.files.get('dep_logo')
                        if uploadfile.filename != '':
                            _fname, _fext = os.path.splitext(uploadfile.filename)
                            db.session.flush()  # flush to get department id of new department
                            fname = os.path.join(current_app.config.get('PATH_DATA'), 'departmentlogo_{}{}'.format(department.id, _fext))
                            uploadfile.save(fname)
                            department.set(u'logo', u'departmentlogo_{}{}'.format(department.id, _fext))  # store relative path from data directory
                        elif request.form.get('logoaction') == 'deletelogo':
                            if os.path.exists('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo'])):
                                os.remove('{}{}'.format(current_app.config.get('PATH_DATA'), department.attributes['logo']))
                                department.set(u'logo', u'')
                    department.orderpos = l
                    department.defaultcity = request.form.get('dep_city')
                    db.session.commit()
                    
                elif request.form.get('action') == 'createdepartment':  # add department
                    params.update({'department': Department('', '', '', 0), 'cities': City.getCities()})
                    return render_template('admin.settings.department_actions.html', **params)

                elif request.form.get('action').startswith('detaildept_'):  # edit department
                    params.update({'department': Department.getDepartments(id=request.form.get('action').split('_')[-1]), 'cities': City.getCities()})
                    return render_template('admin.settings.department_actions.html', **params)

                elif request.form.get('action').startswith('deletedept_'):  # delete department
                    _c = []
                    for city in City.getCities():
                        if city.department.id == int(request.form.get('action').split('_')[-1]):
                            _c.append(city.name)
                    if len(_c) == 0:
                        db.session.delete(Department.getDepartments(id=request.form.get('action').split('_')[-1]))
                        db.session.commit()
                    else:
                        params.update({'error': babel.gettext('admin.settings.department_deleteerror1', cities=', '.join(_c))})
                    
                elif request.form.get('action') == 'ordersetting':  # change department order
                    for _id in request.form.getlist('departmentids'):
                        Department.getDepartments(id=_id).orderpos = request.form.getlist('departmentids').index(_id) + 1
                    db.session.commit()
            
            params.update({'departments': Department.getDepartments(), 'cities': City.getCities()})
            return render_template('admin.settings.department.html', **params)

        elif module[1] == 'cars':
            if request.method == 'POST':
                if request.form.get('action') == 'updatetypes':
                    Settings.set('cartypes', [i for i in chunks(request.form.getlist('cartype'), 2) if i[0] != ''])
                    db.session.commit()
            params.update({'cartypes': Settings.getCarTypes()})
            return render_template('admin.settings.cars.html', **params)

        elif module[1] == 'communication':
            from emonitor.extensions import communication
            if request.method == 'POST':
                if request.form.get('action') == 'telegramsettings':
                    vals = Settings.get('telegramsettings')
                    vals['telegramkey'] = request.form.get('telegrambot').strip()
                    vals['welcomemsg'] = request.form.get('welcometext')
                    vals['helpmsg'] = request.form.get('helptext')
                    Settings.set('telegramsettings', vals)
                    db.session.commit()
                    tb = communication.telegram
                    if not tb:
                        communication.init_app(app=communication.app)
                        tb = communication.telegram
                    #else:
                     #   tb.stop()
                    try:
                        tb.updateToken(vals['telegramkey'])
                    except AttributeError:
                        pass

                elif request.form.get('action') == 'telegramgroups':
                    vals = Settings.get('telegramsettings')
                    g = {}
                    for f in filter(lambda x: x.startswith('groupname_'), request.form):
                        _id = f.split('_')[-1]  # fieldname in form
                        if request.form.get('groupname_' + _id) in ['newgroup', '']:
                            continue
                        g[request.form.get('groupname_' + _id)] = request.form.get('members_selectable_' + _id).split(';')
                    vals['groups'] = g
                    Settings.set('telegramsettings', vals)
                    db.session.commit()

            params.update({'bot': communication.telegram, 'settings': Settings.getYaml('telegramsettings'), 'configtelegramkey': current_app.config.get('TELEGRAMKEY', '')})
            return render_template('admin.settings.communication.html', **params)

        elif module[1] == 'start':

            if request.method == 'POST':
                if request.form.get('action') == 'updatestart':  # update start page definition
                    areas = dict()
                    areas['center'] = {'module': request.form.get('center.module'), 'width': '0', 'visible': 1}
                    areas['west'] = {'module': request.form.get('west.module'), 'moduleadd': request.form.getlist('west.module.add'), 'width': '.%s' % request.form.get('west.width'), 'visible': request.form.get('west.visible')}
                    areas['east'] = {'module': request.form.get('east.module'), 'moduleadd': request.form.getlist('east.module.add'), 'width': '.%s' % request.form.get('east.width'), 'visible': request.form.get('east.visible')}

                    Settings.set('frontend.default', areas)
                    db.session.commit()

            def modname(obj):  # get translation for sorting of module
                _t = "module.%s" % obj.info['name']
                return babel.gettext(_t)

            params.update({'mods': sorted([m for m in current_app.blueprints['frontend'].modules.values() if m.frontendContent() == 1], key=modname), 'center': Settings.getFrontendSettings('center'), 'west': Settings.getFrontendSettings('west'), 'east': Settings.getFrontendSettings('east')})
            return render_template('admin.settings.start.html', **params)

    else:

        if request.method == 'POST':  # save settings
            if request.form.get('action') == 'observerstate':
                Settings.set('observer.interval', request.form.get('observerinterval'))
                if 'observerinterval' in [j.name for j in scheduler.get_jobs()]:  # use file
                    _jobserver = scheduler.get_jobs('observerinterval')[0]
                    if Settings.get('observer.interval', '0') == '0':
                        _jobserver.pause()
                    else:
                        scheduler.reschedule_job(_jobserver.id, trigger=eMonitorIntervalTrigger(seconds=int(Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL', 2)))))

            elif request.form.get('action') == 'monitorping':
                Settings.set('monitorping', request.form.get('monitorping'))
                _jping = scheduler.get_jobs('monitorping')[0]
                if Settings.get('monitorping', '0') == '0':
                    _jping.pause()
                else:
                    scheduler.reschedule_job(_jping.id, trigger=eMonitorIntervalTrigger(minutes=int(Settings.get('monitorping', current_app.config.get('MONITORPING', 2)))))

        paths = dict(pathdata=current_app.config.get('PATH_DATA'), pathtmp=current_app.config.get('PATH_TMP'), pathincome=current_app.config.get('PATH_INCOME'), pathdone=current_app.config.get('PATH_DONE'))
        params.update({'paths': paths, 'observerinterval': Settings.get('observer.interval', current_app.config.get('OBSERVERINTERVAL')), 'watchdog': 'observerinterval' not in [j.name for j in scheduler.get_jobs()], 'monitorping': Settings.get('monitorping', current_app.config.get('MONITORPING')), 'alarmsevalfields': Settings.get('alarms.evalfields'), 'alembic': alembic})
        return render_template('admin.settings.html', **params)
    return redirect("/admin/settings", code=302)
예제 #20
0
def getAdminContent(self, **params):
    module = request.view_args['module'].split('/')

    if len(module) < 2:
        module.append(u'1')

    if len(module) > 2 and module[2] == 'upload':  # upload persons
        params.update({'': int(module[1]), 'depid': module[1]})
        return render_template('admin.persons.upload.html', **params)

    if request.method == 'POST':
        if request.form.get('action') == 'createperson':  # add person
            params.update({
                'person':
                Person('', '', '', '', '', '', False, datetime.now(), '',
                       int(module[1])),
                'settings':
                Settings.get('persons.settings')
            })
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action').startswith(
                'editperson_'):  # edit person
            params.update({
                'person':
                Person.getPersons(
                    id=request.form.get('action').split('_')[-1]),
                'settings':
                Settings.get('persons.settings')
            })
            return render_template('admin.persons_edit.html', **params)

        elif request.form.get('action') == 'updateperson':  # save person
            if request.form.get('person_id') != 'None':
                person = Person.getPersons(id=request.form.get('person_id'))
            else:
                person = Person('', '', '', '', '', '', False, datetime.now(),
                                '', int(module[1]))
                db.session.add(person)

            person.firstname = request.form.get('firstname')
            person.lastname = request.form.get('lastname')
            person.salutation = request.form.get('salutation')
            person.grade = request.form.get('grade')
            person._dept = int(request.form.get('dept'))
            person.position = request.form.get('position')
            person.active = 'active' in request.form.keys()
            try:
                person.birthdate = datetime.strptime(
                    '{} 00:00:00'.format(request.form.get('birthdate')),
                    "%d.%m.%Y %H:%M:%S")
            except ValueError:
                pass
            person.identifier = request.form.get('identifier')
            person.remark = request.form.get('remark')
            _additional = {}
            for field in Settings.get('persons.settings',
                                      {}).get('additional', []):
                if field.split('=')[0] in request.form.keys(
                ) and request.form.get(field.split('=')[0]).strip() != '':
                    _additional[field.split('=')[0]] = request.form.get(
                        field.split('=')[0])
            person._options = yaml.safe_dump(_additional, encoding='utf-8')
            db.session.commit()

        elif request.form.get('action').startswith('deleteperson_'):
            db.session.delete(
                Person.getPersons(
                    id=request.form.get('action').split('_')[-1]))
            db.session.commit()

        elif request.form.get('action') == 'updategrades':
            grades = request.form.getlist('grade')
            while grades[-1] == grades[-2] == u"":  # remove last empty entries
                grades = grades[:-2]
            _settings = Settings.get('persons.settings', {})
            if 'positions' not in _settings.keys():
                _settings['positions'] = []
            _settings['grades'] = zip(*[grades[i::2] for i in range(2)])
            Settings.set('persons.settings', _settings)
            db.session.commit()

        elif request.form.get('action') == 'updatepositions':
            _settings = Settings.get('persons.settings', {})
            if 'grades' not in _settings.keys():
                _settings['grades'] = []
            _settings['positions'] = request.form.get('positions').replace(
                '\r', '').split('\n')
            Settings.set('persons.settings', _settings)
            db.session.commit()

        elif request.form.get('action') == 'updateadditional':
            _settings = Settings.get('persons.settings', {})
            if 'additional' not in _settings.keys():
                _settings['additional'] = []
            _settings['additional'] = request.form.get('additional').replace(
                '\r', '').split('\n')
            Settings.set('persons.settings', _settings)
            db.session.commit()

    if int(module[1]) == 0:
        params.update({'settings': Settings.get('persons.settings')})
        return render_template("admin.persons.settings.html", **params)
    persons = Person.getPersons(dept=int(module[1]))
    chars = {}
    for p in persons:
        chars[p.fullname[0].upper()] = 0
    params.update({
        'persons': persons,
        'chars': sorted(chars),
        'depid': module[1]
    })
    return render_template("admin.persons.html", **params)
예제 #21
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module alarms

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) > 1:
        if module[1] == 'types':
            impl = []  # load implementations of faxchecker
            for f in [f for f in os.listdir('%s/emonitor/modules/alarms/inc/' % current_app.config.get('PROJECT_ROOT')) if f.endswith('.py')]:
                if not f.startswith('__'):
                    cls = imp.load_source('emonitor.modules.alarms.inc', 'emonitor/modules/alarms/inc/%s' % f)
                    if isinstance(getattr(cls, cls.__all__[0])(), AlarmFaxChecker):
                        impl.append((f, getattr(cls, cls.__all__[0])(), AlarmType.getAlarmTypeByClassname(f)))

            if request.method == 'POST':
                if request.form.get('action') == 'createtype':  # add type
                    params.update({'alarmtype': AlarmType('', ''), 'interpreter': impl})
                    return render_template('admin.alarms.type_actions.html', **params)

                elif request.form.get('action').startswith('deleteinterpreter_'):  # delete checker
                    for cls in impl:
                        if cls[0] == request.form.get('action')[18:]:
                            if os.path.exists('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0])):
                                os.remove('%s/emonitor/modules/alarms/inc/%s' % (current_app.config.get('PROJECT_ROOT'), cls[0]))
                            if os.path.exists('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0])):
                                os.remove('%s/emonitor/modules/alarms/inc/%sc' % (current_app.config.get('PROJECT_ROOT'), cls[0]))
                            impl.remove(cls)

                elif request.form.get('action').startswith('editalarmtype_'):  # edit type
                    params.update({'alarmtype': AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1])), 'interpreter': impl})
                    return render_template('admin.alarms.type_actions.html', **params)

                elif request.form.get('action').startswith('deletetype_'):  # delete type
                    atype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1]))
                    for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]:
                        # delete event handlers and monitor layout
                        for eh in Eventhandler.getEventhandlers(event=e.name):
                            for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all():
                                if ';' in ml.trigger:
                                    _tr = ml.trigger.split(';')
                                    del _tr[_tr.index(e.name)]
                                    ml.trigger = ";".join(_tr)
                                else:
                                    db.session.remove(ml)
                            db.session.delete(eh)
                        # delete event
                        del events.events[events.events.index(e)]
                    db.session.delete(atype)
                    db.session.commit()

                elif request.form.get('action') == 'updatetype':  # update type
                    if request.form.get('type_id') == 'None':  # add type
                        atype = AlarmType('', '')
                        db.session.add(atype)
                        events.addEvent('alarm_added.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[])
                        events.addEvent('alarm_changestate.{}'.format(request.form.get('edit_name')), handlers=[], parameters=[])
                    else:  # update type
                        atype = AlarmType.getAlarmTypes(id=int(request.form.get('type_id')))
                        for e in [e for e in events.events if e.name in ['alarm_added.{}'.format(atype.name), 'alarm_changestate.{}'.format(atype.name)]]:
                            # update event handler and monitor layout
                            newname = '{}.{}'.format(e.name.split('.')[0], request.form.get('edit_name'))
                            for eh in Eventhandler.getEventhandlers(event=e.name):
                                for ml in MonitorLayout.query.filter(MonitorLayout.trigger.like('%{}%'.format(eh.event))).all():
                                    ml.trigger = ml.trigger.replace(e.name, newname)
                                eh.event = newname
                            # update event
                            e.name = newname

                    atype.name = request.form.get('edit_name')
                    atype.keywords = request.form.get('edit_keywords')
                    atype.interpreter = request.form.get('edit_interpreter')
                    atype.attributes = dict(zip(request.form.getlist('attribute_name'), request.form.getlist('attribute_value')))
                    atype.translations = dict(zip(request.form.getlist('alarmtypevariables'), request.form.getlist('alarmtypetranslation')))
                    db.session.commit()

                    if request.form.get('type_id') == 'None':  # add predefined keywords and sections
                        # add pre-defined sections
                        for checker in [i for i in impl if i[0] == request.form.get('edit_interpreter')]:
                            if request.form.get('edit_keywords') == "":
                                atype.keywords = "\n".join(checker[1].getDefaultConfig()['keywords'])
                            sections = checker[1].getDefaultConfig()['sections']
                            i = 1
                            for key in sections:
                                db.session.add(AlarmSection(atype.id, key, sections[key][0], 1, sections[key][1], i))
                                i += 1
                        db.session.commit()

                elif request.form.get('action').startswith('createsection_'):  # add section
                    alarmtype = AlarmType.getAlarmTypes(id=int(request.form.get('action').split('_')[-1]))
                    params.update({'alarmtype': alarmtype, 'section': AlarmSection(alarmtype.id, '', '', 0, '', 0), 'functions': alarmtype.interpreterclass().getEvalMethods()})
                    return render_template('admin.alarms.sections_actions.html', **params)

                elif request.form.get('action') == 'updatesection':  # save section
                    db.session.rollback()
                    if request.form.get('section_id') == 'None':  # add
                        section = AlarmSection(request.form.get('edit_tid'), '', '', '', '', '')
                        section.orderpos = 1 + len(AlarmSection.getSections())
                        db.session.add(section)

                    else:  # update
                        section = AlarmSection.getSections(id=int(request.form.get('section_id')))
                        section.orderpos = request.form.get('edit_orderpos')

                    section.tid = request.form.get('edit_tid')
                    section.name = request.form.get('edit_name')
                    section.key = request.form.get('edit_key')
                    section.method = request.form.get('edit_method')
                    section.active = request.form.get('edit_active')
                    alarmtype = AlarmType.getAlarmTypes(request.form.get('edit_tid'))
                    if alarmtype.interpreterclass().configtype == 'generic':
                        attrs = {'start': request.form.get('edit_start'), 'end': request.form.get('edit_end')}
                        if 'edit_multiline' in request.form.keys():
                            attrs['multiline'] = 'True'
                        section.attributes = attrs
                    db.session.commit()

                elif request.form.get('action') == 'updateorder':
                    for item in [i for i in request.form if i.startswith('position_')]:
                        ids = request.form.getlist(item)
                        for _id in ids:
                            AlarmSection.getSections(id=_id).orderpos = ids.index(_id) + 1
                    db.session.commit()

                elif request.form.get('action').startswith('editalarmsection_'):  # edit section
                    section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1]))
                    params.update({'section': section, 'functions': section.alarmtype.interpreterclass().getEvalMethods(), 'alarmtype': AlarmType.getAlarmTypes(section.tid)})
                    return render_template('admin.alarms.sections_actions.html', **params)

                elif request.form.get('action').startswith('deletealarmsection_'):  # delete section
                    section = AlarmSection.getSections(id=int(request.form.get('action').split('_')[-1]))
                    db.session.delete(section)
                    db.session.commit()

            params.update({'alarmtypes': AlarmType.getAlarmTypes(), 'interpreters': impl})
            return render_template('admin.alarms.type.html', **params)

        elif module[1] == 'report':

            if request.method == 'POST':
                if request.form.get('action') == 'createreport':  # add report
                    params.update({'report': AlarmReport('', '', '', 1, []), 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes()})
                    return render_template('admin.alarms.report_action.html', **params)

                elif request.form.get('action') == 'updatereport':
                    if request.form.get('report_id') == 'None':  # add new report
                        report = AlarmReport('', '', '', '')
                        db.session.add(report)
                    else:
                        report = AlarmReport.getReports(request.form.get('report_id'))

                    report.name = request.form.get('edit_name')
                    if not request.form.get('template').startswith(current_app.config.get('PATH_DATA')):  # internal template
                        report._reporttype = 'internal'
                        report.filename = request.form.get('template').replace("{}/emonitor/modules/alarms/templates/".format(current_app.config.get('PROJECT_ROOT')).replace('\\', '/'), "")
                    else:
                        report._reporttype = 'external'
                        report.filename = request.form.get('template').replace("{}".format(current_app.config.get('PATH_DATA')), "")
                        report.fields = json.loads(request.form.get('fielddefinition'))
                    report.departments = request.form.getlist('edit_department')
                    db.session.commit()

                elif request.form.get('action').startswith('editreport_'):  # edit report
                    report = AlarmReport.getReports(request.form.get('action').split('_')[-1])
                    params.update({'report': report, 'departments': Department.getDepartments(), 'reporttypes': AlarmReport.getReportTypes(), 'alarmfields': AlarmField.getAlarmFields()})
                    return render_template('admin.alarms.report_action.html', **params)

                elif request.form.get('action').startswith('deletereport_'):  # delete report
                    report = AlarmReport.getReports(request.form.get('action').split('_')[-1])
                    if AlarmReport.query.filter(AlarmReport.filename == report.filename).count() == 1 and os.path.exists(report.filename):
                        os.remove(report.filename)
                    db.session.delete(report)
                    db.session.commit()

            params.update({'reports': AlarmReport.getReports(), 'departments': Department.getDepartments()})
            return render_template('admin.alarms.report.html', **params)

        elif module[1] == 'config':
            if request.method == 'POST':
                if request.form.get('action') == 'alarmcarsprio':
                    for k in Alarm.ALARMSTATES.keys():
                        if 'used_cars{}'.format(k) in request.form.keys():
                            Settings.set('alarms.spc_cars.{}'.format(k), request.form.get('used_cars{}'.format(k)))
                    db.session.commit()

                elif request.form.get('action') == 'alarmsettings':
                    Settings.set('alarms.autoclose', request.form.get('settings.autoclose'))
                    for aalarm in [a for a in Alarm.getAlarms() if a.state == 1]:  # only active alarms
                        aalarm.updateSchedules(reference=1)  # use alarmtime as refernce

                elif request.form.get('action') == 'archivesettings':
                    Settings.set('alarms.autoarchive', request.form.get('settings.autoarchive'))
                    for aalarm in [a for a in Alarm.getAlarms() if a.state == 2]:  # only closed alarms
                        aalarm.updateSchedules(reference=1)  # use alarmtime as refernce

                elif request.form.get('action').startswith('save_'):
                    if request.form.get('fieldid') == 'None':
                        field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[1], dept=request.form.get('action').split('_')[2])
                        db.session.add(field)
                    else:
                        field = AlarmField.getAlarmFields(id=request.form.get('fieldid'))
                    field.saveConfigForm(request)
                    db.session.commit()

                elif request.form.get('action').startswith('field_delete_'):  # delete definition of field
                    db.session.delete(AlarmField.getAlarmFields(id=request.form.get('action').split('_')[-1]))
                    db.session.commit()

                elif request.form.get('action').startswith('field_add_'):  # add field for department
                    field = AlarmField.getAlarmFieldForType(request.form.get('action').split('_')[-2], dept=request.form.get('action').split('_')[-1])
                    field.name = babel.gettext(field.name)
                    db.session.add(field)
                    db.session.commit()

            fields = {}
            for dept in Department.getDepartments():
                fields[dept.id] = AlarmField.getAlarmFieldsForDepartment(dept.id)
            params.update({'cars': Car.getCars(), 'alarmstates': Alarm.ALARMSTATES, 'settings': Settings, 'departments': Department.getDepartments(), 'fields': fields})
            return render_template('admin.alarms.config.html', **params)

        elif module[1] == 'test':
            params.update({'uploadfileformat': filter(None, sum([Settings.get('ocr.inputformat', []), Settings.get('ocr.inputtextformat', [])], []))})
            return render_template('admin.alarms.test.html', **params)

    else:
        params.update({'alarms': dict(Alarm.getAlarmCount()), 'alarmstates': Alarm.ALARMSTATES, 'help': self.hasHelp('admin')})
        return render_template('admin.alarms.html', **params)
def getAdminContent(self, **params):
    """
    Deliver admin content of module mapitems

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')
    if len(module) < 2:
        module.append(current_app.blueprints['admin'].modules['mapitems'].adminsubnavigation[0][0].split('/')[-1])  # get first submenuitem

    if len(module) >= 2:
        if module[1] == 'definition':  # definition
            if request.method == 'POST':

                if request.form.get('action').startswith('edititemtype_'):  # edit/add definition TODO: fix
                    typename = request.form.get('action').split('_')
                    itemtype = [d for d in Settings.get('mapitemdefinition') if d['name'] == typename[1]]
                    if len(itemtype) > 0:
                        itemtype = itemtype[0]
                        if 'parameters' not in itemtype:
                            itemtype['parameters'] = {'layout': '', 'tileserver': 0}
                        if 'key' not in itemtype:
                            itemtype['key'] = []
                        if 'cities' not in itemtype:
                            itemtype['cities'] = []
                        if 'itemtype' not in itemtype:
                            itemtype['itemtype'] = 'node'
                    else:
                        itemtype = {'name': '', 'filter': '', 'attributes': [], 'parameters': {'layout', 'tileserver'}, 'key': [], 'cities': [], 'itemtype': 'node'}
                    params.update({'itemtype': itemtype, 'cities': City.getCities(), 'layouters': MapItem.getLayouters()})
                    return render_template('admin.mapitems.definition_actions.html', **params)

                elif request.form.get('action').startswith('deleteitemtype_'):  # delete definition
                    itemtypes = Settings.get('mapitemdefinition')
                    for itemtype in itemtypes:
                        if itemtype['name'] == request.form.get('action').split('_')[1]:
                            del itemtypes[itemtypes.index(itemtype)]
                    Settings.set('mapitemdefinition', itemtypes)
                    db.session.commit()

                elif request.form.get('action') == 'updateitemtypes':  # save definition
                    itemtypes = Settings.get('mapitemdefinition')
                    position = -1
                    for itemtype in itemtypes:
                        if itemtype['name'] == request.form.get('edit_name'):
                            position = itemtypes.index(itemtype)
                            break
                    if position >= 0:  # update type
                        itemtypes[position]['filter'] = request.form.get('edit_filter')
                        itemtypes[position]['cities'] = [int(i) for i in request.form.getlist('edit_cityid')]
                        itemtypes[position]['itemtype'] = request.form.get('edit_itemtype')
                        itemtypes[position]['attributes'] = request.form.get('edit_attributes').split('\r\n')
                        itemtypes[position]['parameters'] = {'layout': request.form.get('edit_layout'), 'tileserver': request.form.get('edit_tileserver')}
                        itemtypes[position]['key'] = request.form.get('edit_keys').split('\r\n')

                    else:  # add new type
                        it = dict()
                        it['name'] = request.form.get('edit_name')
                        it['filter'] = request.form.get('edit_filter')
                        it['cities'] = [int(i) for i in request.form.getlist('edit_cityid')]
                        it['itemtype'] = request.form.get('edit_itemtype')
                        it['attributes'] = request.form.get('edit_attributes').split('\r\n')
                        it['parameters'] = {'layout': request.form.get('edit_layout')}
                        if itemtypes == "":
                            itemtypes = [it]
                        else:
                            itemtypes.append(it)
                        it['key'] = request.form.get('edit_keys').split('\r\n')
                    Settings.set('mapitemdefinition', itemtypes)
                    db.session.commit()
                    current_app.blueprints['admin'].modules['mapitems'].updateAdminSubNavigation()

            params.update({'itemtypes': Settings.get('mapitemdefinition', []), 'layouters': MapItem.getLayouters()})
            return render_template('admin.mapitems.definition.html', **params)

    # deliver default list
    itemdefinition = [t for t in Settings.get('mapitemdefinition') if t['name'] == module[1]][0]
    itemtypes = MapItem.getMapitems(itemtype=module[1])
    page = 0
    if len(module) == 3:  # pagination active
        page = int(module[2])
    pagination = Pagination(page, PER_PAGE, len(itemtypes))

    params.update({'itemtypes': itemtypes[page:page + PER_PAGE], 'itemdefinition': itemdefinition, 'pagination': pagination})
    return render_template('admin.mapitems.html', **params)
예제 #23
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module maps

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) > 1:
        if module[1] == 'position':
            if request.method == 'POST':
                if request.form.get(
                        'action'
                ) == 'saveposition':  # safe default map position and home position
                    Settings.set('defaultLat',
                                 request.form.get('default_lat', ''))
                    Settings.set('defaultLng',
                                 request.form.get('default_lng', ''))
                    Settings.set('defaultZoom',
                                 request.form.get('default_zoom', ''))

                    Settings.set('homeLat', request.form.get('home_lat', ''))
                    Settings.set('homeLng', request.form.get('home_lng', ''))

                    db.session.commit()

            params.update({'settings': Settings})
            return render_template('admin.map.position.html', **params)

    else:
        if request.method == 'POST':
            if request.form.get('action') == 'savemap':  # save map
                if request.form.get('map_id') != 'None':  # update
                    _map = Map.getMaps(request.form.get('map_id'))
                    _map.name = request.form.get('map_name')
                    _map.path = request.form.get('map_path')
                    _map.maptype = int(request.form.get('map_type'))
                    _map.tileserver = request.form.get('map_tileserver')
                    _map.default = request.form.get('map_default')
                else:  # add map
                    _map = Map(request.form.get('map_name'),
                               request.form.get('map_path'),
                               int(request.form.get('map_type')),
                               request.form.get('map_tileserver'),
                               int(request.form.get('map_default')))
                    db.session.add(_map)
                db.session.commit()

            elif request.form.get('action') == 'createmap':  # add map
                params.update({
                    'map': Map('', '', 0, '', 0),
                    'tilebase': current_app.config.get('PATH_TILES'),
                    'settings': Settings
                })
                return render_template('admin.map_actions.html', **params)

            elif request.form.get('action').startswith(
                    'detailmap_'):  # edit map
                params.update({
                    'map':
                    Map.getMaps(request.form.get('action').split('_')[-1]),
                    'settings':
                    Settings,
                    'tilebase':
                    current_app.config.get('PATH_TILES'),
                    'tiles':
                    '\', \''.join(
                        Settings.getMapTiles(
                            int(request.form.get('action').split('_')[-1])))
                })
                return render_template('admin.map_actions.html', **params)

            elif request.form.get('action').startswith(
                    'deletemap_'):  # delete map
                db.session.delete(
                    Map.getMaps(int(
                        request.form.get('action').split('_')[-1])))
                db.session.commit()

            elif request.form.get(
                    'action') == 'ordersetting':  # change map order
                maps = []
                for _id in request.form.getlist('mapids'):
                    _map = Map.getMaps(int(_id))
                    maps.append(
                        dict(name=_map.__dict__['name'],
                             path=_map.__dict__['path'],
                             maptype=_map.__dict__['maptype'],
                             tileserver=_map.__dict__['tileserver'],
                             default=_map.__dict__['default']))
                Map.query.delete()  # delete all maps
                for _map in maps:  # add maps in new order
                    db.session.add(
                        Map(_map['name'], _map['path'], _map['maptype'],
                            _map['tileserver'], _map['default']))
                db.session.commit()

    params.update({'maps': Map.getMaps()})
    return render_template('admin.map.html', **params)
예제 #24
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module textmod

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    if len(module) == 2:
        if module[1] == 'ocr':  # ocr settings
            if request.method == 'POST':
                if request.form.get('action') == 'savereocrparams':  # save changes
                    Settings.set('ocr.inputformat', request.form.get('ocr_formats').split('\r\n'))
                    Settings.set('ocr.inputtextformat', request.form.get('ocr_textformats').split('\r\n'))
                    Settings.set('ocr.callstring', request.form.get('ocr_callstring'))

            params.update({'params': Ocr.getOCRParams()})
            return render_template('admin.textmod.ocr.html', **params)
        
        elif module[1] == 'ocrcustom':
            if request.method == 'POST':
                if request.form.get('action') == 'savereocrcustom':  # save changes
                    if not os.path.exists('%s/bin/tesseract/tessdata' % current_app.config.get('PROJECT_ROOT')):
                        os.makedirs('%s/bin/tesseract/tessdata/' % current_app.config.get('PROJECT_ROOT'))
                    with codecs.open('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'w', 'utf-8') as f:
                        f.write(request.form.get('ocrcustom', ''))
                        
            if os.path.exists('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT')):
                content = codecs.open('%s/bin/tesseract/tessdata/deu.user-words' % current_app.config.get('PROJECT_ROOT'), 'r', 'utf-8').read()
            else:
                current_app.logger.info('ocr custom wordlist not found')
                content = ""
            
            params.update({'content': content})
            return render_template('admin.textmod.ocrcustom.html', **params)

        elif module[1] == 'convert':  # convert image
            if request.method == 'POST':
                if request.form.get('action') == 'savereconvertparams':  # save changes
                    Settings.set('convert.format', request.form.get('convert_format'))
                    Settings.set('convert.callstring', request.form.get('convert_callstring'))
                    Settings.set('convert.crop', 'convert_crop' in request.form.get('convert_crop', 'False'))

            params.update({'params': Ocr.getConvertParams(), 'imageformats': ['jpg', 'png']})
            return render_template('admin.textmod.convert.html', **params)

    else:  # replacements
        if request.method == 'POST':
            if request.form.get('action') == 'addreplace':  # add replacement
                params.update({'replacement': Replace('', '')})
                return render_template('admin.textmod_actions.html', **params)

            elif request.form.get('action').startswith('editreplace_'):  # edit existing replacement
                params.update({'replacement': Replace.getReplacements(id=request.form.get('action').split('_')[-1])})
                return render_template('admin.textmod_actions.html', **params)

            elif request.form.get('action').startswith('deletereplace_'):  # delete existing replacement
                db.session.delete(Replace.getReplacements(id=request.form.get('action').split('_')[-1]))
                db.session.commit()
                
            elif request.form.get('action') == 'savereplace':  # save replacement
                if request.form.get('replace_id') == 'None':  # add new
                    db.session.add(Replace(request.form.get('replace_text'), request.form.get('replace_repl')))
                    
                else:  # update existing replacement
                    replacement = Replace.getReplacements(id=request.form.get('replace_id'))
                    replacement.text = request.form.get('replace_text')
                    replacement.replace = request.form.get('replace_repl')
                db.session.commit()
               
        params.update({'replacements': Replace.getReplacements()})
        return render_template('admin.textmod.html', **params)
예제 #25
0
def getAdminContent(self, **params):
    """
    Deliver admin content of module alarmobjects

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    def chunks(l, n):
        return [l[i:i + n] for i in range(0, len(l), n)]

    if len(module) > 1:  # type definition
        if module[1] == 'types':
            if request.method == 'POST':
                if request.form.get(
                        'action') == 'createalarmobjecttype':  # add type
                    params.update({'alarmobjecttype': AlarmObjectType('', '')})
                    return render_template(
                        'admin.alarmobjects.types_action.html', **params)

                elif request.form.get(
                        'action') == 'savealarmobjecttype':  # save type
                    if request.form.get(
                            'alarmobjecttype_id') == 'None':  # add new type
                        alarmobjecttype = AlarmObjectType('', '')
                        db.session.add(alarmobjecttype)
                    else:  # update existing
                        alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(
                            id=int(request.form.get('alarmobjecttype_id')))
                    alarmobjecttype.name = request.form.get(
                        'alarmobjecttype_name')
                    alarmobjecttype.remark = request.form.get(
                        'alarmobjecttype_remark')
                    db.session.commit()

                elif request.form.get('action').startswith(
                        'detailobjecttype'):  # edit type
                    alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(
                        id=int(request.form.get('action').split('_')[-1]))
                    params.update({'alarmobjecttype': alarmobjecttype})
                    return render_template(
                        'admin.alarmobjects.types_action.html', **params)

                elif request.form.get('action').startswith(
                        'deleteobjecttype_'):  # delete type
                    db.session.delete(
                        AlarmObjectType.getAlarmObjectTypes(
                            id=int(request.form.get('action').split('_')[-1])))
                    db.session.commit()

            params.update(
                {'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()})
            return render_template('admin.alarmobjects.types.html', **params)

        elif module[1] == 'fields':
            if request.method == 'POST':
                if request.form.get(
                        'action') == 'updatefield':  # update fields
                    Settings.set('alarmobjectfields', [
                        i for i in chunks(request.form.getlist('fieldname'), 2)
                        if i[0] != ''
                    ])
                    db.session.commit()

            params.update({'fields': Settings.get('alarmobjectfields', [])})
            return render_template('admin.alarmobjects.fields.html', **params)

    else:  # base view
        if request.method == 'POST':
            streets = Street.getStreets()
            if request.form.get(
                    'action') == 'createalarmobject':  # add alarmobject
                params.update({
                    'alarmobject':
                    AlarmObject('', 0, '', Settings.get('defaultLat'),
                                Settings.get('defaultLng'),
                                Settings.get('defaultZoom'), '', '', '', 0, 0),
                    'streets':
                    streets,
                    'selectedstreet':
                    '',
                    'map':
                    Map.getDefaultMap(),
                    'alarmobjecttypes':
                    AlarmObjectType.getAlarmObjectTypes()
                })
                return render_template('admin.alarmobjects_actions.html',
                                       **params)

            elif request.form.get('action') == 'savealarmobject':  # save
                if request.form.get('alarmobject_id') == 'None':  # add new
                    alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '',
                                              0, 0)
                    db.session.add(alarmobject)
                else:  # update existing
                    alarmobject = AlarmObject.getAlarmObjects(
                        id=request.form.get('alarmobject_id'))
                alarmobject.name = request.form.get('edit_name')
                alarmobject._streetid = request.form.get('streetid')
                alarmobject._objecttype = int(
                    request.form.get('edit_objecttype'))
                alarmobject.remark = request.form.get('edit_remark')
                if request.form.get('edit_position') == '1':
                    alarmobject.lat = request.form.get('edit_lat')
                    alarmobject.lng = request.form.get('edit_lng')
                    alarmobject.zoom = request.form.get('edit_zoom')
                alarmobject.streetno = request.form.get('edit_streetno')
                alarmobject.alarmplan = request.form.get('edit_alarmplan')
                alarmobject.bma = request.form.get('edit_bma')
                alarmobject.active = int(request.form.get('edit_active', '0'))
                db.session.commit()

            elif request.form.get(
                    'action'
            ) == 'savealarmobjectattributes':  # save attributes
                alarmobject = AlarmObject.getAlarmObjects(
                    id=request.form.get('alarmobject_id'))
                for field in Settings.get('alarmobjectfields',
                                          []):  # store attributes
                    if 'edit_%s' % field[0] in request.form:
                        alarmobject.set(field[0],
                                        request.form.get('edit_%s' % field[0]))
                db.session.commit()

            elif request.form.get(
                    'action') == 'savealarmobjectaao':  # save aao
                alarmobject = AlarmObject.getAlarmObjects(
                    id=request.form.get('alarmobject_id'))
                if alarmobject:
                    alarmobject.set('cars1', [
                        c for c in request.form.get('cars1').split(';')
                        if c != ''
                    ])
                    alarmobject.set('cars2', [
                        c for c in request.form.get('cars2').split(';')
                        if c != ''
                    ])
                    alarmobject.set('material', [
                        c for c in request.form.get('material').split(';')
                        if c != ''
                    ])
                    db.session.commit()

            elif request.form.get('action').startswith(
                    'editalarmobject_'):  # edit alarmobject
                alarmobject = AlarmObject.getAlarmObjects(
                    id=int(request.form.get('action').split('_')[-1]))
                params.update({
                    'alarmobject':
                    alarmobject,
                    'streets':
                    streets,
                    'selectedstreet':
                    '%s (%s)' %
                    (alarmobject.street.name, alarmobject.street.city.name),
                    'map':
                    Map.getDefaultMap(),
                    'alarmobjecttypes':
                    AlarmObjectType.getAlarmObjectTypes(),
                    'fields':
                    Settings.get('alarmobjectfields', []),
                    'cars':
                    Car.getCars(deptid=Department.getDefaultDepartment().id)
                })
                return render_template('admin.alarmobjects_actions.html',
                                       **params)

            elif request.form.get('action').startswith(
                    'deletealarmobject_'):  # delete alarmobject
                db.session.delete(
                    AlarmObject.getAlarmObjects(
                        id=int(request.form.get('action').split('_')[-1])))
                db.session.commit()

        params.update({
            'alarmobjects': AlarmObject.getAlarmObjects(active=0),
            'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()
        })
        return render_template('admin.alarmobjects.html', **params)
def getAdminContent(self, **params):
    """
    Deliver admin content of module alarmobjects

    :param params: use given parameters of request
    :return: rendered template as string
    """
    module = request.view_args['module'].split('/')

    def chunks(l, n):
        return [l[i:i + n] for i in range(0, len(l), n)]

    if len(module) > 1:  # type definition
        if module[1] == 'types':
            if request.method == 'POST':
                if request.form.get('action') == 'createalarmobjecttype':  # add type
                    params.update({'alarmobjecttype': AlarmObjectType('', '')})
                    return render_template('admin.alarmobjects.types_action.html', **params)

                elif request.form.get('action') == 'savealarmobjecttype':  # save type
                    if request.form.get('alarmobjecttype_id') == 'None':  # add new type
                        alarmobjecttype = AlarmObjectType('', '')
                        db.session.add(alarmobjecttype)
                    else:  # update existing
                        alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('alarmobjecttype_id')))
                    alarmobjecttype.name = request.form.get('alarmobjecttype_name')
                    alarmobjecttype.remark = request.form.get('alarmobjecttype_remark')
                    db.session.commit()

                elif request.form.get('action').startswith('detailobjecttype'):  # edit type
                    alarmobjecttype = AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1]))
                    params.update({'alarmobjecttype': alarmobjecttype})
                    return render_template('admin.alarmobjects.types_action.html', **params)

                elif request.form.get('action').startswith('deleteobjecttype_'):  # delete type
                    db.session.delete(AlarmObjectType.getAlarmObjectTypes(id=int(request.form.get('action').split('_')[-1])))
                    db.session.commit()

            params.update({'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()})
            return render_template('admin.alarmobjects.types.html', **params)

        elif module[1] == 'fields':
            if request.method == 'POST':
                if request.form.get('action') == 'updatefield':  # update fields
                    Settings.set('alarmobjectfields', [i for i in chunks(request.form.getlist('fieldname'), 2) if i[0] != ''])
                    db.session.commit()

            params.update({'fields': Settings.get('alarmobjectfields', [])})
            return render_template('admin.alarmobjects.fields.html', **params)

    else:  # base view
        if request.method == 'POST':
            streets = Street.getStreets()
            if request.form.get('action') == 'createalarmobject':  # add alarmobject
                params.update({'alarmobject': AlarmObject('', 0, '', Settings.get('defaultLat'), Settings.get('defaultLng'), Settings.get('defaultZoom'), '', '', '', 0, 0), 'streets': streets, 'selectedstreet': '', 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()})
                return render_template('admin.alarmobjects_actions.html', **params)

            elif request.form.get('action') == 'savealarmobject':  # save
                if request.form.get('alarmobject_id') == 'None':  # add new
                    alarmobject = AlarmObject('', 0, '', 0, 0, 0, '', '', '', 0, 0)
                    db.session.add(alarmobject)
                else:  # update existing
                    alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id'))
                alarmobject.name = request.form.get('edit_name')
                alarmobject._streetid = request.form.get('streetid')
                alarmobject._objecttype = int(request.form.get('edit_objecttype'))
                alarmobject.remark = request.form.get('edit_remark')
                if request.form.get('edit_position') == '1':
                    alarmobject.lat = request.form.get('edit_lat')
                    alarmobject.lng = request.form.get('edit_lng')
                    alarmobject.zoom = request.form.get('edit_zoom')
                alarmobject.streetno = request.form.get('edit_streetno')
                alarmobject.alarmplan = request.form.get('edit_alarmplan')
                alarmobject.bma = request.form.get('edit_bma')
                alarmobject.active = int(request.form.get('edit_active', '0'))
                db.session.commit()

            elif request.form.get('action') == 'savealarmobjectattributes':  # save attributes
                alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id'))
                for field in Settings.get('alarmobjectfields', []):  # store attributes
                    if 'edit_%s' % field[0] in request.form:
                        alarmobject.set(field[0], request.form.get('edit_%s' % field[0]))
                db.session.commit()

            elif request.form.get('action') == 'savealarmobjectaao':  # save aao
                alarmobject = AlarmObject.getAlarmObjects(id=request.form.get('alarmobject_id'))
                if alarmobject:
                    alarmobject.set('cars1', [c for c in request.form.get('cars1').split(';') if c != ''])
                    alarmobject.set('cars2', [c for c in request.form.get('cars2').split(';') if c != ''])
                    alarmobject.set('material', [c for c in request.form.get('material').split(';') if c != ''])
                    db.session.commit()

            elif request.form.get('action').startswith('editalarmobject_'):  # edit alarmobject
                alarmobject = AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1]))
                params.update({'alarmobject': alarmobject, 'streets': streets, 'selectedstreet': '%s (%s)' % (alarmobject.street.name, alarmobject.street.city.name), 'map': Map.getDefaultMap(), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes(), 'fields': Settings.get('alarmobjectfields', []), 'cars': Car.getCars(deptid=Department.getDefaultDepartment().id)})
                return render_template('admin.alarmobjects_actions.html', **params)

            elif request.form.get('action').startswith('deletealarmobject_'):  # delete alarmobject
                db.session.delete(AlarmObject.getAlarmObjects(id=int(request.form.get('action').split('_')[-1])))
                db.session.commit()

        params.update({'alarmobjects': AlarmObject.getAlarmObjects(active=0), 'alarmobjecttypes': AlarmObjectType.getAlarmObjectTypes()})
        return render_template('admin.alarmobjects.html', **params)