summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-15 13:19:49 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-15 13:19:49 +0200
commit45a774990b8d89ae2fb1139691ad70257cf93d02 (patch)
treefba888f7518b7581c80dc826abde5d2bb0d9b4d7 /ishtar_common/forms_common.py
parentdf43f19a2f61bffe4fc89baef578dd7ecb0005cc (diff)
downloadIshtar-45a774990b8d89ae2fb1139691ad70257cf93d02.tar.bz2
Ishtar-45a774990b8d89ae2fb1139691ad70257cf93d02.zip
QR Code for searches
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py41
1 files changed, 37 insertions, 4 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 67e29289a..48d0fdc7b 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -17,12 +17,13 @@
# See the file COPYING for details.
-"""
-Administrative forms definitions: manage accounts and persons
-"""
-
+import datetime
+import os
+import pyqrcode
import requests
+import shutil
import tempfile
+from urllib.parse import urlparse, quote
from django import forms
from django.conf import settings
@@ -34,6 +35,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.core.files import File
from django.forms.formsets import formset_factory
from django.forms.models import BaseModelFormSet, BaseFormSet
+from django.shortcuts import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _, pgettext
@@ -1601,3 +1603,34 @@ class SearchQueryForm(forms.Form):
sq.query = data['query']
sq.save()
return sq
+
+
+class QRSearchForm(forms.Form):
+ query = forms.CharField(max_length=None, label=_(u"Query"), initial='*')
+ current_url = forms.CharField(max_length=None, label="",
+ widget=forms.HiddenInput())
+
+ def save(self):
+ data = self.cleaned_data
+ url = data["current_url"]
+ parsed_url = urlparse(url)
+ base_url = "{}://{}".format(parsed_url.scheme, parsed_url.netloc)
+ url = base_url + parsed_url.path
+ url += "?stored_search=" + quote(data["query"])
+ tiny_url = models.TinyUrl.objects.create(link=url)
+
+ short_url = base_url + reverse('tiny-redirect',
+ args=[tiny_url.get_short_id()])
+ qr = pyqrcode.create(short_url, version=settings.ISHTAR_QRCODE_VERSION)
+ tmpdir = tempfile.mkdtemp("-qrcode")
+ date = datetime.datetime.today().isoformat().replace(
+ ":", "-").replace(".", "")
+ base_filename = '{}-qrcode.png'.format(date)
+ filename = os.path.join(tmpdir, base_filename)
+ qr.png(filename, scale=settings.ISHTAR_QRCODE_SCALE)
+
+ dest_dir = os.path.join(settings.MEDIA_ROOT, "tmp")
+ if not os.path.exists(dest_dir):
+ os.makedirs(dest_dir)
+ shutil.move(filename, dest_dir)
+ return os.path.join(settings.MEDIA_URL, "tmp", base_filename)