def analytics_heatmaps_delete(idsitehsr): idsite = request.args['idSite'] form_class = HeatmapsDeleteForm matomo_user = get_matomo_user() heatmap = HeatmapSessionRecordingManager().getHeatmap( matomo_user.token_auth, idsite, idsitehsr) if request.method == 'POST': form = form_class(formdata=request.form) if form.validate_on_submit(): name = form.data['name'].strip() if heatmap['name'].strip() == name: try: HeatmapSessionRecordingManager().deleteHeatmap( matomo_user.token_auth, idsite, idsitehsr) except MatomoError as e: flash(str(e), 'negative') else: flash(f"Heatmap '{heatmap['name']}' was deleted") return redirect( url_for('analytics_heatmaps', idSite=idsite)) else: flash('Name does not match', 'negative') form = form_class() return render_template('analytics/heatmaps_delete.html', title='Behavee > Analytics > Delete Heatmap', heatmaps_delete_form=form, menuHeatmapsList="active", idsite=idsite, idsitehsr=idsitehsr, heatmap=heatmap)
def analytics_session_recordings(): matomo_user = get_matomo_user() try: idsite = request.args['idSite'] except KeyError: abort(404) # Fail safe to @site_required idsitehsr = request.args.get('idSiteHsr') if idsitehsr: recording = HeatmapSessionRecordingManager().getSessionRecording( matomo_user.token_auth, idsite, idsitehsr) else: recordings_list = HeatmapSessionRecordingManager( ).getSessionRecordings(matomo_user.token_auth, idsite) return render_template( 'analytics/session_recordings_list.html', title='Behavee > Analytics > Session Recordings', recordings_list=recordings_list, idsite=idsite, menuSessionRecordingsList="active") return render_template('analytics/session_recordings.html', title='Behavee > Analytics > Session Recordings', menuSessionRecordingsList="active", recording=recording, labels={ 'attribute': dict(constants.RULES), 'type': dict(constants.RULES_TYPE) })
def analytics_sites(): d = {} site = None user = User.query.filter_by(email=current_user.email).first() d['current_login_at'] = user.current_login_at.strftime("%Y-%m-%d %H:%M:%S") d['last_login_at'] = user.last_login_at.strftime("%Y-%m-%d %H:%M:%S") matomo_user = get_matomo_user() idsite = request.args.get('idSite') if idsite: site = SitesManager().getSiteFromId(matomo_user.token_auth, idsite) else: site_list = SitesManager().getMatomoSites(matomo_user.token_auth) if len(site_list) == 1: return redirect(url_for('analytics_sites', idSite=site_list[0]['idsite']), 303) else: return render_template('analytics/sites_list.html', title='Behavee > Analytics > Site List', user=user, site_list=site_list, d=d, app=app, menuWebsitesList="active") if not site: abort(404) return render_template('analytics/sites.html', title='Behavee > Analytics > Site', user=user, site=site, d=d, app=app, menuWebsitesList="active")
def analytics_sites_delete(idsite): form_class = SiteDeleteForm matomo_user = get_matomo_user() site = SitesManager().getSiteFromId(matomo_user.token_auth, idsite) if request.method == 'POST': form = form_class(formdata=request.form) if form.validate_on_submit(): name = form.data['name'].strip() if site['name'] == name: try: SitesManager().deleteSite(matomo_user.token_auth, idsite) flask.session['matomo_sites'] = SitesManager().getMatomoSites(app.config['MATOMO_ADMIN_TOKEN']) except MatomoError as e: flash(str(e), 'negative') else: flash(f"Site '{site['name']}' was deleted") return redirect(url_for('analytics_sites')) else: flash('Name does not match', 'negative') form = form_class() return render_template('analytics/site_delete.html', title='Behavee > Analytics > Delete Site', site_delete_form=form, menuWebsitesListList="active", idsite=idsite, site=site)
def wrapper(*args, **kwargs): if not request.args.get('idSite', '').strip(): user = get_matomo_user() if user: sites = SitesManager().getMatomoSites(user.token_auth) return render_template('sites_picker.html', next_url=SitePickerUrlBuilder(), site_list=sites) return func(*args, **kwargs)
def analytics_session_recordings_add(): form = None form_class = SessionRecordingForm idsite = request.args['idSite'] matomo_user = get_matomo_user() count_rules = 1 if request.method == 'POST': try: count_rules = int(request.form['count_rules']) except KeyError: logging.warning(f'No count_rules specified: {repr(request.form)}') else: form = form_class.with_rules(count_rules, formdata=request.form) if form.validate_on_submit(): data = dict(form.data) data['idsite'] = idsite _rules_update_formdata(data) try: r = HeatmapSessionRecordingManager().addSessionRecording( matomo_user.token_auth, **data) except MatomoError as e: flash(str(e), 'negative') print('ERRORS', str(e)) else: if 'value' in r: # return redirect(f"/analytics/heatmaps?idSiteHsr={r['value']}") return redirect( url_for('analytics_session_recordings', idSite=idsite, idSiteHsr=r['value'])) return redirect( url_for('analytics_session_recordings', idSite=idsite)) else: print('FORM ERRORS', form.errors) if form is None: form = form_class.with_rules(count_rules) return render_template('analytics/session_recordings_add.html', title='Behavee > Analytics > Add Session Recording', recording_add_form=form, menuSessionRecordingsAdd="active", count_rules=count_rules, idsite=idsite)
def analytics_heatmaps_show(idsitehsr): idsite = request.args['idSite'] matomo_user = get_matomo_user() # try: # heatmap = HeatmapSessionRecordingManager().getHeatmap(matomo_user.token_auth, idsite, idsitehsr) # except MatomoError: # # TODO log error # abort(404) return render_template('analytics/heatmaps_show.html', title='Behavee > Analytics > Show Heatmap', app=app, menuHeatmapsList="active", idsite=idsite, idsitehsr=idsitehsr)
def current_site_processor(): context = {'current_site': None} idsite = request.args.get('idSite') if idsite: user = get_matomo_user() if user: site = SitesManager().getSiteFromId(user.token_auth, idsite) args = dict(request.args) args.pop('idSite') args.update(request.view_args) site['picker_url'] = url_for(request.endpoint, **args) context['current_site'] = site return context
def analytics_session_recordings_show(idsitehsr): form = None form_class = SessionRecordingForm idsite = request.args['idSite'] matomo_user = get_matomo_user() if form is None: try: recording = HeatmapSessionRecordingManager().getSessionRecording( matomo_user.token_auth, idsite, idsitehsr) except MatomoError: # TODO log error abort(404) count_rules = len(recording['match_page_rules']) for i, rule in enumerate(recording.pop('match_page_rules')): type_ = rule['type'] if int(rule['inverted']): type_ = f'not_{type_}' recording[f'rules_type_{i}'] = type_ recording[f'rules_attribute_{i}'] = rule['attribute'] recording[f'rules_value_{i}'] = rule['value'] try: recording[f'rules_value2_{i}'] = rule['value2'] except KeyError: # We where not supplied with `value2` pass form = form_class.with_rules(count_rules, **recording) return render_template( 'analytics/session_recordings_show.html', title='Behavee > Analytics > Show Session Recording', app=app, recording_edit_form=form, menuSessionRecordingsList="active", idsite=idsite, idsitehsr=idsitehsr, count_rules=count_rules)
def reports_visits(): d = {} user = User.query.filter_by(email=current_user.email).first() d['current_login_at'] = user.current_login_at.strftime("%Y-%m-%d %H:%M:%S") d['last_login_at'] = user.last_login_at.strftime("%Y-%m-%d %H:%M:%S") matomo_user = get_matomo_user() site = SitesManager().getSiteFromId(matomo_user.token_auth, request.args.get('idSite')) if not site: abort(404) return render_template('reports/visits.html', title='Behavee > Reports > Visits', user=user, site=site, d=d, app=app, mReportsVisits="active")
def analytics_sites_add(): matomo_user = get_matomo_user() package_templates = PackageManager.list_templates(None) form = None form_class = partial(WebsiteForm.with_packages, [(p.id, p.name,) for p in package_templates]) if request.method == 'POST': form = form_class(**request.form) if form.validate(): data = form.data data['start_date'] = datetime.today().strftime('%Y-%m-%d %H:%M:%S') data['type_'] = 'website' data['user_login'] = matomo_user.login package_template_id = data.pop('package') try: r = SitesManager().addSite(app.config['MATOMO_ADMIN_TOKEN'], **data) flask.session['matomo_sites'] = SitesManager().getMatomoSites(app.config['MATOMO_ADMIN_TOKEN']) except MatomoError as e: flash(str(e), 'negative') return redirect('analytics/site') else: if 'value' in r: PackageManager.add(r['value'], package_templates[package_template_id]) return redirect(f"/analytics/sites?idSite={r['value']}") # TODO add logging.warning return redirect('/analytics/sites') if form is None: form = form_class( sitesearch='1', ecommerce='1', website_currency='CZK', website_timezone='Europe/Prague' ) return render_template('analytics/site_add.html', title='Behavee > Analytics > Add Site', site_add_form=form, menuWebsitesAdd="active")
def analytics_ecommerce(action): d = {} user = User.query.filter_by(email=current_user.email).first() d['current_login_at'] = user.current_login_at.strftime("%Y-%m-%d %H:%M:%S") d['last_login_at'] = user.last_login_at.strftime("%Y-%m-%d %H:%M:%S") matomo_user = get_matomo_user() request_period = request.args.get('period', 'month') request_date = request.args.get('date', str(date.today())) if request_period == 'week': request_date = request_date.split(',') request_date = request_date[0] return render_template('analytics/ecommerce.html', title='Behavee > Analytics > Ecommerce', user=user, pageAction=action, d=d, app=app, menuAnalyticsEcommerce="active", request_period=request_period, request_date=request_date)
def analytics_sites_edit(idsite): matomo_user = get_matomo_user() package_templates = PackageManager.list_templates(None) form = None form_class = partial(WebsiteForm.with_packages, [(p.id, p.name) for p in package_templates]) site = SitesManager().getSiteFromId(matomo_user.token_auth, idsite) if not site: abort(404) if request.method == 'POST': form = form_class(**request.form) if form.validate(): data = form.data package_template_id = data.pop('package') try: SitesManager().updateSite(matomo_user.token_auth, idsite, **data) flask.session['matomo_sites'] = SitesManager().getMatomoSites(app.config['MATOMO_ADMIN_TOKEN']) except MatomoError as e: # TODO log Matomo error flash(str(e), 'negative') pass else: PackageManager.update(idsite, package_templates[package_template_id]) return redirect(f"/analytics/sites?idSite={idsite}") flash('There was an error updating your site. Please try again later', 'error') if form is None: form = form_class(**site) return render_template( 'analytics/site_edit.html', title='Behavee > Analytics > Edit Site', site_edit_form=form, menuWebsitesList="active", idSite=site['idsite'] )
def analytics_session_recordings_edit(idsitehsr): form = None form_class = SessionRecordingForm idsite = request.args['idSite'] matomo_user = get_matomo_user() if request.method == 'POST': try: count_rules = int(request.form['count_rules']) except KeyError: # TODO handle exception logging.warning(f'No count_rules specified: {repr(request.form)}') else: form = form_class.with_rules(count_rules, formdata=request.form) if form.validate_on_submit(): data = dict(form.data) data['idsite'] = idsite data['idsitehsr'] = idsitehsr _rules_update_formdata(data) try: HeatmapSessionRecordingManager().updateSessionRecording( matomo_user.token_auth, **data) except MatomoError as e: flash(str(e), 'negative') print('ERROR', e.response) else: print('what') return redirect( url_for('analytics_session_recordings', idSite=idsite, idSiteHsr=idsitehsr), 303) else: print('FORM_ERRORS', form.errors) if form is None: try: recording = HeatmapSessionRecordingManager().getSessionRecording( matomo_user.token_auth, idsite, idsitehsr) except MatomoError: # TODO log error abort(404) count_rules = len(recording['match_page_rules']) for i, rule in enumerate(recording.pop('match_page_rules')): type_ = rule['type'] if int(rule['inverted']): type_ = f'not_{type_}' recording[f'rules_type_{i}'] = type_ recording[f'rules_attribute_{i}'] = rule['attribute'] recording[f'rules_value_{i}'] = rule['value'] try: recording[f'rules_value2_{i}'] = rule['value2'] except KeyError: # We where not supplied with `value2` pass form = form_class.with_rules(count_rules, **recording) return render_template( 'analytics/session_recordings_edit.html', title='Behavee > Analytics > Edit Session Recording', recording_edit_form=form, menuSessionRecordingsList="active", idsite=idsite, idsitehsr=idsitehsr, count_rules=count_rules)