diff options
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r-- | ishtar_common/forms_common.py | 41 |
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) |