diff --git a/Pipfile b/Pipfile index cca9ef8..2a9cf00 100644 --- a/Pipfile +++ b/Pipfile @@ -6,6 +6,8 @@ verify_ssl = true [dev-packages] pylint = "*" coverage = "*" +autopep8 = "*" +pipenv = "*" [packages] django = "*" @@ -13,7 +15,6 @@ easy-thumbnails = "*" image = "*" django-widget-tweaks = "*" django-taggit = "*" - # Commented out to not explicitly specify Python 3 subversion. # [requires] # python_version = "3.8" diff --git a/Readme.md b/Readme.md index 02c06cc..628f094 100644 --- a/Readme.md +++ b/Readme.md @@ -100,7 +100,7 @@ Run ``./manage.py migrate`` to create the lost places models. Start the development server and visit http://localhost:8000/admin/ -Visit http://localhost:8000/lostplaces/ to CRUD lost places. +Visit http://localhost:8000/ to CRUD lost places. Happy developing ;-) diff --git a/lostplaces/lostplaces/settings.py b/lostplaces/lostplaces/settings.py index 46ffa59..e08bb8d 100644 --- a/lostplaces/lostplaces/settings.py +++ b/lostplaces/lostplaces/settings.py @@ -29,7 +29,7 @@ SECRET_KEY = 'n$(bx8(^)*wz1ygn@-ekt7rl^1km*!_c+fwwjiua8m@-x_rpl0' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['localhost', '192.168.178.49'] +ALLOWED_HOSTS = [ 'localhost' ] # Application definition @@ -144,10 +144,10 @@ LOGIN_URL = reverse_lazy('login') THUMBNAIL_ALIASES = { '': { - 'thumbnail': {'size': (300, 300), 'crop': False}, - 'hero': {'size': (700, 700), 'crop': False}, + 'thumbnail': {'size': (300, 200), 'crop': True}, + 'hero': {'size': (700, 466), 'crop': True}, 'large': {'size': (1920, 1920), 'crop': False}, }, } -SVG_ICONS_SOURCE_FILE = os.path.join(BASE_DIR, 'lostplaces_app', 'static', 'icons', 'icons.icomoon.json') \ No newline at end of file +SVG_ICONS_SOURCE_FILE = os.path.join(BASE_DIR, 'lostplaces_app', 'static', 'icons', 'icons.icomoon.json') diff --git a/lostplaces/lostplaces_app/forms.py b/lostplaces/lostplaces_app/forms.py index 9b97388..8d78269 100644 --- a/lostplaces/lostplaces_app/forms.py +++ b/lostplaces/lostplaces_app/forms.py @@ -11,7 +11,10 @@ class ExplorerCreationForm(UserCreationForm): class Meta: model = Explorer fields = ('username', 'email') - voucher = forms.CharField(max_length=10, help_text='The Voucher you got from an administrator') + voucher = forms.CharField( + max_length=30, + help_text='The Voucher you got from an administrator' + ) def is_valid(self): super().is_valid() @@ -49,10 +52,9 @@ class PlaceImageCreateForm(forms.ModelForm): self.fields['filename'].required = False - class TagSubmitForm(forms.Form): tag_list = forms.CharField( max_length=500, required=False, widget=forms.TextInput(attrs={'autocomplete':'off'}) - ) \ No newline at end of file + ) diff --git a/lostplaces/lostplaces_app/models.py b/lostplaces/lostplaces_app/models.py index 81244ad..47133e0 100644 --- a/lostplaces/lostplaces_app/models.py +++ b/lostplaces/lostplaces_app/models.py @@ -1,7 +1,10 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -''' (Data)models which describe the structure of data to be saved into database. ''' +''' +(Data)models which describe the structure of data to be saved into +database. +''' import os import uuid @@ -27,8 +30,9 @@ class Explorer(AbstractUser): class Voucher(models.Model): """ Vouchers are authorization tokens to allow the registration of new users. - A voucher has a code, a creation and a deletion date, which are all positional. - Creation date is being set automatically during voucher creation. + A voucher has a code, a creation and a deletion date, which are all + positional. Creation date is being set automatically during voucher + creation. """ code = models.CharField(unique=True, max_length=30) @@ -68,8 +72,8 @@ class Place (models.Model): description = models.TextField() tags = TaggableManager(blank=True) - # Get center position of LP-geocoordinates. + # Get center position of LP-geocoordinates. def average_latlon(place_list): amount = len(place_list) # Init fill values to prevent None @@ -126,7 +130,6 @@ class PlaceImage (models.Model): return ' '.join([self.place.name, str(self.pk)]) # These two auto-delete files from filesystem when they are unneeded: - @receiver(models.signals.post_delete, sender=PlaceImage) def auto_delete_file_on_delete(sender, instance, **kwargs): """ @@ -157,7 +160,6 @@ def auto_delete_file_on_change(sender, instance, **kwargs): if os.path.isfile(old_file.path): os.remove(old_file.path) - class ExternalLink(models.Model): url = models.URLField(max_length=200) label = models.CharField(max_length=100) @@ -176,4 +178,4 @@ class PhotoAlbum(ExternalLink): on_delete=models.CASCADE, related_name='photo_albums', null=True - ) \ No newline at end of file + ) diff --git a/lostplaces/lostplaces_app/static/icons/cancel.svg b/lostplaces/lostplaces_app/static/icons/cancel.svg new file mode 100644 index 0000000..1c1499a --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/cancel.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lostplaces/lostplaces_app/static/icons/hamburger_menu.svg b/lostplaces/lostplaces_app/static/icons/hamburger_menu.svg index c9482fc..5755197 100644 --- a/lostplaces/lostplaces_app/static/icons/hamburger_menu.svg +++ b/lostplaces/lostplaces_app/static/icons/hamburger_menu.svg @@ -1,4 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/lostplaces/lostplaces_app/static/icons/plus.svg b/lostplaces/lostplaces_app/static/icons/plus.svg new file mode 100644 index 0000000..96fb731 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/plus.svg @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/lostplaces/lostplaces_app/static/icons/social/facebook.svg b/lostplaces/lostplaces_app/static/icons/social/facebook.svg new file mode 100644 index 0000000..21a86a2 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/facebook.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/instagram.svg b/lostplaces/lostplaces_app/static/icons/social/instagram.svg new file mode 100644 index 0000000..13e1d18 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/instagram.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/mastodon.svg b/lostplaces/lostplaces_app/static/icons/social/mastodon.svg new file mode 100644 index 0000000..4dcdf6e --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/mastodon.svg @@ -0,0 +1,62 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/twitter.svg b/lostplaces/lostplaces_app/static/icons/social/twitter.svg new file mode 100644 index 0000000..7d521e0 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/twitter.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/vimeo.svg b/lostplaces/lostplaces_app/static/icons/social/vimeo.svg new file mode 100644 index 0000000..dee9573 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/vimeo.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/vkontakte.svg b/lostplaces/lostplaces_app/static/icons/social/vkontakte.svg new file mode 100644 index 0000000..ce5f2fd --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/vkontakte.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/wordpress.svg b/lostplaces/lostplaces_app/static/icons/social/wordpress.svg new file mode 100644 index 0000000..29d92ca --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/wordpress.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/social/youtube.svg b/lostplaces/lostplaces_app/static/icons/social/youtube.svg new file mode 100644 index 0000000..1512767 --- /dev/null +++ b/lostplaces/lostplaces_app/static/icons/social/youtube.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + + + diff --git a/lostplaces/lostplaces_app/static/icons/success.svg b/lostplaces/lostplaces_app/static/icons/success.svg index f784427..85fac9a 100644 --- a/lostplaces/lostplaces_app/static/icons/success.svg +++ b/lostplaces/lostplaces_app/static/icons/success.svg @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/lostplaces/lostplaces_app/static/main.css b/lostplaces/lostplaces_app/static/main.css index fef1375..154a36f 100644 --- a/lostplaces/lostplaces_app/static/main.css +++ b/lostplaces/lostplaces_app/static/main.css @@ -424,12 +424,46 @@ object-position: center; } @font-face { - font-family: Crimson; - src: url("fonts/Crimson/CrimsonText-Regular.ttf"), url("fonts/Crimson/CrimsonText-Bold.ttf"), url("fonts/Crimson/CrimsonText-Italic.ttf"); } + font-family: 'Crimson Text'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local("Crimson Text Regular"), local("CrimsonText-Regular"), url(fonts/Crimson/CrimsonText-Regular.ttf) format("truetype"); } @font-face { - font-family: Montserrat; - src: url("fonts/Montserrat/Montserrat-Regular.ttf"), url("fonts/Montserrat/Montserrat-Bold.ttf"), url("fonts/Montserrat/Montserrat-Italic.ttf"); } + font-family: 'Crimson Text'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: local("Crimson Text Italic"), local("CrimsonText-Italic"), url(fonts/Crimson/CrimsonText-Italic.ttf) format("truetype"); } + +@font-face { + font-family: 'Crimson Text'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: local("Crimson Text Bold"), local("CrimsonText-Bold"), url(fonts/Crimson/CrimsonText-Bold.ttf) format("truetype"); } + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local("Montserrat Regular"), local("Montserrat-Regular"), url(fonts/Montserrat/Montserrat-Regular.ttf) format("truetype"); } + +@font-face { + font-family: 'Montserrat'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: local("Montserrat Italic"), local("Montserrat-Italic"), url(fonts/Montserrat/Montserrat-Italic.ttf) format("truetype"); } + +@font-face { + font-family: 'Montserrat'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: local("Montserrat Bold"), local("Montserrat-Bold"), url(fonts/Montserrat/Montserrat-Bold.ttf) format("truetype"); } html { height: 100%; @@ -521,11 +555,11 @@ body { .LP-Link { color: #565656; text-decoration: none; - font-family: Montserrat, Helvetica, sans-serif; } + font-family: "Montserrat", Helvetica, sans-serif; } .LP-Link:hover { color: #C09F80; } .LP-Link .LP-Paragraph { - font-family: Montserrat, Helvetica, sans-serif; } + font-family: "Montserrat", Helvetica, sans-serif; } .LP-Link .LP-Paragraph:hover { color: #C09F80; } @@ -533,7 +567,7 @@ body { display: inline; } .LP-Headline { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; color: #565656; font-size: 1.7rem; padding-top: 0px; @@ -549,10 +583,11 @@ body { .LP-Paragraph { color: black; - font-family: Crimson, Times, serif; - font-size: 1.2rem; + font-family: "Crimson Text", Times, serif; + font-size: 1.4rem; padding: 0; - margin: 0; } + margin: 0; + margin-bottom: 0.75em; } .LP-Icon { height: 20px; @@ -606,7 +641,7 @@ body { .LP-Input--tagging .LP-Input__Field, .LP-Input--tagging .tagify { min-height: 36px; height: max-content; - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-size: 1em; padding: 0; padding-left: 8px; } @@ -634,12 +669,12 @@ body { background-color: #76323F; color: #f9f9f9; } .LP-Input .LP-Input__Label { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-size: 16px; white-space: wrap; overflow: hidden; } .LP-Input .LP-Input__Message { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-style: italic; font-size: 13px; padding: 3px; @@ -692,13 +727,27 @@ body { padding: 8px 14px; background-color: #D7CEC7; border-radius: 2px; - width: max-content; } + width: max-content; + display: flex; + flex-direction: row; + height: 100%; + height: min-content; + gap: 3px; } + .LP-Tag--multiRow { + flex-wrap: wrap; } + .LP-Tag--column { + display: flex; + flex-direction: column; } + .LP-Tag__Remove .RV-Iconized__Icon { + fill: #76323F; } + .LP-Tag__Remove .RV-Iconized__Icon:hover { + fill: #565656; } .LP-Tag:hover, .tagify__tag:hover { background-color: #bdbdbd; } .LP-Tag .LP-Paragraph, .tagify__tag .LP-Paragraph { padding: 0; margin: 0; - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-size: 1em; display: inline; } @@ -708,7 +757,7 @@ body { justify-content: center; align-items: stretch; background-color: #f9f9f9; - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; border-radius: 3px; font-weight: bold; box-shadow: 0 0 2px #565656; @@ -747,7 +796,7 @@ body { padding: 8px; } .LP-Pagination { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-weight: bold; display: flex; flex-direction: row; @@ -806,8 +855,11 @@ body { .LP-Content { padding: 15px; } } -.LP-TextSection .LP-Text { - line-height: 1.4rem; } +.LP-TextSection__Text { + font-family: "Crimson Text", Times, serif; + font-size: 1.4rem; } + .LP-TextSection__Text .LP-Link { + margin: 0 3px; } .LP-PlaceTeaser { width: 280px; } @@ -827,19 +879,19 @@ body { padding-bottom: 10px; padding-top: 10px; } .LP-PlaceTeaser .LP-PlaceTeaser__Meta .LP-Paragraph { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; padding: 0; margin: 0; margin-top: 5px; font-size: 0.9rem; } .LP-PlaceTeaser .LP-PlaceTeaser__Meta .LP-Headline { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; color: #565656; font-size: 1rem; padding: 0px; margin: 0px; } .LP-PlaceTeaser .LP-PlaceTeaser__Description { - font-family: Roboto, Arial, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; color: #565656; display: none; } @@ -978,7 +1030,7 @@ body { .LP-Header__UserInformation { margin-right: 3%; } .LP-Header__UserInformation .LP-Paragraph { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; white-space: nowrap; } .LP-Header__UserInformation .LP-Link { margin: 0 3px; @@ -1189,25 +1241,170 @@ body { display: block; } .LP-Footer { - margin-top: 75px; + margin: auto; + background: #565656; width: 100%; - background-color: #565656; - padding: 25px; } - .LP-Footer .LP-LinkList__List { + font-family: "Montserrat", Helvetica, sans-serif; + font-size: 1rem; } + .LP-FooterColumns__Container { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-evenly; + flex-wrap: wrap; } + .LP-FooterColumns__Item { + flex-grow: 1; } + .LP-Footer * { + box-sizing: border-box; } + .LP-Footer ul { + list-style: none; } + .LP-Footer a { + text-decoration: none; } + .LP-Footer__GenericAnchor { + color: #D7CEC7; } + .LP-Footer__GenericAnchor:hover { + color: #f9f9f9; } + .LP-Footer__Flex { + display: flex; + flex-flow: row wrap; } + .LP-Footer__ListTop { + text-align: left; } + .LP-Footer__ListTop > li { + padding-bottom: 10px; } + .LP-Footer__ListHeader { + padding: 10px 0 5px 0; + color: #f9f9f9; + font-size: 2.3vw; } + .LP-Footer__ListText { + font-size: 1.2em; + color: #f9f9f9; } + .LP-Footer__SocialSection { + width: 100%; + align-items: center; + justify-content: space-around; + position: relative; + margin-top: 5px; } + .LP-Footer__SocialSection::after { + content: ""; + position: absolute; + z-index: 1; + top: 50%; + left: 10px; + border-top: 1px solid #f9f9f9; + width: calc(100% - 20px); } + .LP-Footer .LP-Footer__Social-Mastodon .LP-Footer__Icon { + background-image: url("icons/social/mastodon.svg"); } + .LP-Footer .LP-Footer__Social-Twitter .LP-Footer__Icon { + background-image: url("icons/social/twitter.svg"); } + .LP-Footer .LP-Footer__Social-Facebook .LP-Footer__Icon { + background-image: url("icons/social/facebook.svg"); } + .LP-Footer .LP-Footer__Social-Youtube .LP-Footer__Icon { + background-image: url("icons/social/youtube.svg"); } + .LP-Footer .LP-Footer__Social-Vimeo .LP-Footer__Icon { + background-image: url("icons/social/vimeo.svg"); } + .LP-Footer .LP-Footer__Social-Instagram .LP-Footer__Icon { + background-image: url("icons/social/instagram.svg"); } + .LP-Footer .LP-Footer__Social-Vkontakte .LP-Footer__Icon { + background-image: url("icons/social/vkontakte.svg"); } + .LP-Footer .LP-Footer__Social-Wordpress .LP-Footer__Icon { + background-image: url("icons/social/wordpress.svg"); } + .LP-Footer .LP-Footer__Icon { + background-size: 40px 40px; + background-repeat: no-repeat; + background-position: center; + background-clip: content-box; + position: absolute; + height: 50px; + width: 50px; } + .LP-Footer__SocialExplore { display: flex; align-items: center; + font-size: 2.5em; + color: #f9f9f9; } + .LP-Footer__SocialSmall { + font-size: 0.5em; + padding: 0px 20px; } + .LP-Footer__SocialOverlap { + position: relative; + z-index: 2; + background: #565656; + padding: 0 10px; } + .LP-Footer__SocialOverlap > a { + font-size: 3em; + padding-right: 50px; } + .LP-Footer__BottomSection { + width: 100%; + padding: 10px; + border-top: 1px solid #f9f9f9; + margin-top: 10px; } + .LP-Footer__BottomSection > div:first-child { + margin-right: auto; } + .LP-Footer__BottomWrapper { + font-size: 1.3em; + color: #f9f9f9; } + +@media (max-width: 1000px) { + .LP-Footer__ListHeader { + font-size: 2em; } + .LP-Footer__ListText { + font-size: 1.1em; } + .LP-Footer__SocialConnect { + font-size: 2.5em; } + .LP-Footer__SocialOverlap > a { + font-size: 2.24em; + height: 50px; } + .LP-Footer__BottomWrapper { + font-size: 1.3em; } } + +@media (max-width: 750px) { + .LP-Footer__ListTop { + width: 100%; } + .LP-Footer__ListHeader { + font-size: 3em; } + .LP-Footer__ListText { + font-size: 1.5em; } + .LP-Footer__SocialSection { justify-content: center; } - .LP-Footer .LP-LinkList__List .LP-LinkList__Item { - border: none; - padding: 5px; - width: auto; } - .LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Text { - color: #f9f9f9; - font-size: 17px; } - .LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Link { - display: inline; } - .LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Link:hover { - background-color: inherit; } + .LP-Footer__SocialSection::after { + top: 25%; } + .LP-Footer__SocialConnect { + margin-bottom: 10px; + padding: 0 10px; } + .LP-Footer__SocialOverlap { + display: flex; + justify-content: center; + height: 50px; } + .LP-Footer__SocialIconsWrapper { + width: 100%; + padding: 0; } + .LP-Footer__SocialOverlap { + margin-left: 0px; } + .LP-Footer__BottomSection { + padding: 0 5px 10px 5px; } + .LP-Footer__BottomWrapper { + text-align: center; + width: 100%; + margin-top: 10px; } } + +@media (max-width: 650px) { + .LP-Footer__SocialOverlap > a { + margin: auto; } + .LP-Footer__SocialOverlap > a:not(:first-child) { + margin-left: 0; } + .LP-Footer__BottomRights { + display: block; } } + +@media (max-width: 450px) { + .LP-Footer__ListHeader { + font-size: 2.2em; } + .LP-Footer__ListText { + font-size: 1.2em; } + .LP-Footer__SocialConnect { + font-size: 2.4em; } + .LP-Footer__SocialOverlap > a { + font-size: 2.24em; } + .LP-Footer__BottomWrapper { + font-size: 1.3em; } } .LP-Form--tagging { margin-top: 25px; } @@ -1263,7 +1460,7 @@ body { .LP-Form .LP-Form__Legend { margin: 0; padding: 0; - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; font-size: 21px; } .LP-Form .LP-Form__Composition { @@ -1337,7 +1534,7 @@ body { flex-basis: 100px; } .LP-Form .LP-Form__InfoText .LP-Paragraph { - font-family: Montserrat, Helvetica, sans-serif; + font-family: "Montserrat", Helvetica, sans-serif; color: #565656; } .LP-ImageGrid { @@ -1444,6 +1641,15 @@ body { padding: 0; margin-bottom: 25px; } } +.LP-TextSection .LP-UnorderedList { + font-family: "Crimson Text", Times, serif; + font-size: 1.4rem; } + .LP-TextSection .LP-UnorderedList li { + margin-bottom: 0.75em; + list-style-type: square; + margin-left: 2em; + padding-left: 1em; } + .tagify { display: flex; align-items: center; @@ -1478,7 +1684,7 @@ body { .tagify__tag__removeBtn { order: 5; cursor: pointer; - font: 1em/1 Arial; + font: 1.5em/1 Arial; transition: .2s ease-out; color: #76323F; } @@ -1548,7 +1754,7 @@ body { border-radius: 2px; position: relative; outline: 0; - font-family: Montserrat, Helvetica, sans-serif; } + font-family: "Montserrat", Helvetica, sans-serif; } .tagify__dropdown__item--active { color: #f9f9f9; diff --git a/lostplaces/lostplaces_app/templates/flat/codex.html b/lostplaces/lostplaces_app/templates/flat/codex.html new file mode 100644 index 0000000..6f8c83e --- /dev/null +++ b/lostplaces/lostplaces_app/templates/flat/codex.html @@ -0,0 +1,52 @@ +{% extends 'global.html'%} + +# {% block title %}UrBex codex{% endblock %} + +{% block maincontent %} + +
+

Take nothing but pictures. Leave nothing but footprints.

+
+ +
+ +

This should be pretty self-explanatory, right? But as you all know, every sign has a history. We have seen too much senseless destruction so we decided to write down a basic Urban Exploration codex.

+ +
+ +{% endblock maincontent %} \ No newline at end of file diff --git a/lostplaces/lostplaces_app/templates/flat/imprint-ger.html b/lostplaces/lostplaces_app/templates/flat/imprint-ger.html new file mode 100644 index 0000000..891a14f --- /dev/null +++ b/lostplaces/lostplaces_app/templates/flat/imprint-ger.html @@ -0,0 +1,28 @@ +{% extends 'global.html'%} + +# {% block title %}Impressum{% endblock %} + +{% block maincontent %} + +
+

Impressum

+
+ +
+

Angaben gemäß § 5 TMG

+

Urban Exploration Ltd.
+ John S. Smith
+ 2563 College Avenue
+ Dayton, OH 45402

+ +

Kontakt

+

Telefon: 937-387-6498
+ E-Mail: JohnSSmith@einrot.com

+ +

Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV

+

John S. Smith
+ 2563 College Avenue
+ Dayton, OH 45402

+
+ +{% endblock maincontent %} diff --git a/lostplaces/lostplaces_app/templates/flat/imprint.html b/lostplaces/lostplaces_app/templates/flat/imprint.html new file mode 100644 index 0000000..0635a51 --- /dev/null +++ b/lostplaces/lostplaces_app/templates/flat/imprint.html @@ -0,0 +1,28 @@ +{% extends 'global.html'%} + +# {% block title %}Imprint{% endblock %} + +{% block maincontent %} + +
+

Imprint

+
+ +
+

Information according to § 5 TMG

+

Urban Exploration Ltd.
+ John S. Smith
+ 2563 College Avenue
+ Dayton, OH 45402

+ +

Contact

+

Phone: 937-387-6498
+ e-mail: JohnSSmith@einrot.com

+ +

Responsible for the content according to § 55 Abs. 2 RStV

+

John S. Smith
+ 2563 College Avenue
+ Dayton, OH 45402

+
+ +{% endblock maincontent %} diff --git a/lostplaces/lostplaces_app/templates/flat/privacy-policy-ger.html b/lostplaces/lostplaces_app/templates/flat/privacy-policy-ger.html new file mode 100644 index 0000000..65b6572 --- /dev/null +++ b/lostplaces/lostplaces_app/templates/flat/privacy-policy-ger.html @@ -0,0 +1,259 @@ +{% extends 'global.html'%} + +# {% block title %}Datenschutzerklärung{% endblock %} + +{% block maincontent %} + +
+

Datenschutzerklärung

+
+ +
+

Datenschutzerklärung

+ +

Wir freuen uns sehr über Ihr Interesse an unserem Unternehmen. Datenschutz hat einen besonders hohen Stellenwert für die Geschäftsleitung der Urban Exploration Ltd. Eine Nutzung der Internetseiten der Urban Exploration Ltd ist grundsätzlich ohne jede Angabe personenbezogener Daten möglich. Sofern eine betroffene Person besondere Services unseres Unternehmens über unsere Internetseite in Anspruch nehmen möchte, könnte jedoch eine Verarbeitung personenbezogener Daten erforderlich werden. Ist die Verarbeitung personenbezogener Daten erforderlich und besteht für eine solche Verarbeitung keine gesetzliche Grundlage, holen wir generell eine Einwilligung der betroffenen Person ein.

+ +

Die Verarbeitung personenbezogener Daten, beispielsweise des Namens, der Anschrift, E-Mail-Adresse oder Telefonnummer einer betroffenen Person, erfolgt stets im Einklang mit der Datenschutz-Grundverordnung und in Übereinstimmung mit den für die Urban Exploration Ltd geltenden landesspezifischen Datenschutzbestimmungen. Mittels dieser Datenschutzerklärung möchte unser Unternehmen die Öffentlichkeit über Art, Umfang und Zweck der von uns erhobenen, genutzten und verarbeiteten personenbezogenen Daten informieren. Ferner werden betroffene Personen mittels dieser Datenschutzerklärung über die ihnen zustehenden Rechte aufgeklärt.

+ +

Die Urban Exploration Ltd hat als für die Verarbeitung Verantwortlicher zahlreiche technische und organisatorische Maßnahmen umgesetzt, um einen möglichst lückenlosen Schutz der über diese Internetseite verarbeiteten personenbezogenen Daten sicherzustellen. Dennoch können Internetbasierte Datenübertragungen grundsätzlich Sicherheitslücken aufweisen, sodass ein absoluter Schutz nicht gewährleistet werden kann. Aus diesem Grund steht es jeder betroffenen Person frei, personenbezogene Daten auch auf alternativen Wegen, beispielsweise telefonisch, an uns zu übermitteln.

+ +

1. Begriffsbestimmungen

+

Die Datenschutzerklärung der Urban Exploration Ltd beruht auf den Begrifflichkeiten, die durch den Europäischen Richtlinien- und Verordnungsgeber beim Erlass der Datenschutz-Grundverordnung (DS-GVO) verwendet wurden. Unsere Datenschutzerklärung soll sowohl für die Öffentlichkeit als auch für unsere Kunden und Geschäftspartner einfach lesbar und verständlich sein. Um dies zu gewährleisten, möchten wir vorab die verwendeten Begrifflichkeiten erläutern.

+ +

Wir verwenden in dieser Datenschutzerklärung unter anderem die folgenden Begriffe:

+ + + +

2. Name und Anschrift des für die Verarbeitung Verantwortlichen

+

Verantwortlicher im Sinne der Datenschutz-Grundverordnung, sonstiger in den Mitgliedstaaten der Europäischen Union geltenden Datenschutzgesetze und anderer Bestimmungen mit datenschutzrechtlichem Charakter ist die:

+ +

Urban Exploration Ltd

+

2563 College Avenue

+

45402 Dayton

+

OH

+

Tel.: 937-387-6498

+

E-Mail: JohnSSmith@einrot.com

+

Website: https://www.urban-exploration.com

+ +

3. Erfassung von allgemeinen Daten und Informationen

+

Die Internetseite der Urban Exploration Ltd erfasst mit jedem Aufruf der Internetseite durch eine betroffene Person oder ein automatisiertes System eine Reihe von allgemeinen Daten und Informationen. Diese allgemeinen Daten und Informationen werden in den Logfiles des Servers gespeichert. Erfasst werden können die (1) verwendeten Browsertypen und Versionen, (2) das vom zugreifenden System verwendete Betriebssystem, (3) die Internetseite, von welcher ein zugreifendes System auf unsere Internetseite gelangt (sogenannte Referrer), (4) die Unterwebseiten, welche über ein zugreifendes System auf unserer Internetseite angesteuert werden, (5) das Datum und die Uhrzeit eines Zugriffs auf die Internetseite, (6) eine Internet-Protokoll-Adresse (IP-Adresse), (7) der Internet-Service-Provider des zugreifenden Systems und (8) sonstige ähnliche Daten und Informationen, die der Gefahrenabwehr im Falle von Angriffen auf unsere informationstechnologischen Systeme dienen.

+ +

Bei der Nutzung dieser allgemeinen Daten und Informationen zieht die Urban Exploration Ltd keine Rückschlüsse auf die betroffene Person. Diese Informationen werden vielmehr benötigt, um (1) die Inhalte unserer Internetseite korrekt auszuliefern, (2) die Inhalte unserer Internetseite sowie die Werbung für diese zu optimieren, (3) die dauerhafte Funktionsfähigkeit unserer informationstechnologischen Systeme und der Technik unserer Internetseite zu gewährleisten sowie (4) um Strafverfolgungsbehörden im Falle eines Cyberangriffes die zur Strafverfolgung notwendigen Informationen bereitzustellen. Diese anonym erhobenen Daten und Informationen werden durch die Urban Exploration Ltd daher einerseits statistisch und ferner mit dem Ziel ausgewertet, den Datenschutz und die Datensicherheit in unserem Unternehmen zu erhöhen, um letztlich ein optimales Schutzniveau für die von uns verarbeiteten personenbezogenen Daten sicherzustellen. Die anonymen Daten der Server-Logfiles werden getrennt von allen durch eine betroffene Person angegebenen personenbezogenen Daten gespeichert.

+ +

4. Registrierung auf unserer Internetseite

+

Die betroffene Person hat die Möglichkeit, sich auf der Internetseite des für die Verarbeitung Verantwortlichen unter Angabe von personenbezogenen Daten zu registrieren. Welche personenbezogenen Daten dabei an den für die Verarbeitung Verantwortlichen übermittelt werden, ergibt sich aus der jeweiligen Eingabemaske, die für die Registrierung verwendet wird. Die von der betroffenen Person eingegebenen personenbezogenen Daten werden ausschließlich für die interne Verwendung bei dem für die Verarbeitung Verantwortlichen und für eigene Zwecke erhoben und gespeichert. Der für die Verarbeitung Verantwortliche kann die Weitergabe an einen oder mehrere Auftragsverarbeiter, beispielsweise einen Paketdienstleister, veranlassen, der die personenbezogenen Daten ebenfalls ausschließlich für eine interne Verwendung, die dem für die Verarbeitung Verantwortlichen zuzurechnen ist, nutzt.

+ +

Durch eine Registrierung auf der Internetseite des für die Verarbeitung Verantwortlichen wird ferner die vom Internet-Service-Provider (ISP) der betroffenen Person vergebene IP-Adresse, das Datum sowie die Uhrzeit der Registrierung gespeichert. Die Speicherung dieser Daten erfolgt vor dem Hintergrund, dass nur so der Missbrauch unserer Dienste verhindert werden kann, und diese Daten im Bedarfsfall ermöglichen, begangene Straftaten aufzuklären. Insofern ist die Speicherung dieser Daten zur Absicherung des für die Verarbeitung Verantwortlichen erforderlich. Eine Weitergabe dieser Daten an Dritte erfolgt grundsätzlich nicht, sofern keine gesetzliche Pflicht zur Weitergabe besteht oder die Weitergabe der Strafverfolgung dient.

+ +

Die Registrierung der betroffenen Person unter freiwilliger Angabe personenbezogener Daten dient dem für die Verarbeitung Verantwortlichen dazu, der betroffenen Person Inhalte oder Leistungen anzubieten, die aufgrund der Natur der Sache nur registrierten Benutzern angeboten werden können. Registrierten Personen steht die Möglichkeit frei, die bei der Registrierung angegebenen personenbezogenen Daten jederzeit abzuändern oder vollständig aus dem Datenbestand des für die Verarbeitung Verantwortlichen löschen zu lassen.

+ +

Der für die Verarbeitung Verantwortliche erteilt jeder betroffenen Person jederzeit auf Anfrage Auskunft darüber, welche personenbezogenen Daten über die betroffene Person gespeichert sind. Ferner berichtigt oder löscht der für die Verarbeitung Verantwortliche personenbezogene Daten auf Wunsch oder Hinweis der betroffenen Person, soweit dem keine gesetzlichen Aufbewahrungspflichten entgegenstehen. Die Gesamtheit der Mitarbeiter des für die Verarbeitung Verantwortlichen stehen der betroffenen Person in diesem Zusammenhang als Ansprechpartner zur Verfügung.

+ +

5. Routinemäßige Löschung und Sperrung von personenbezogenen Daten

+

Der für die Verarbeitung Verantwortliche verarbeitet und speichert personenbezogene Daten der betroffenen Person nur für den Zeitraum, der zur Erreichung des Speicherungszwecks erforderlich ist oder sofern dies durch den Europäischen Richtlinien- und Verordnungsgeber oder einen anderen Gesetzgeber in Gesetzen oder Vorschriften, welchen der für die Verarbeitung Verantwortliche unterliegt, vorgesehen wurde.

+ +

Entfällt der Speicherungszweck oder läuft eine vom Europäischen Richtlinien- und Verordnungsgeber oder einem anderen zuständigen Gesetzgeber vorgeschriebene Speicherfrist ab, werden die personenbezogenen Daten routinemäßig und entsprechend den gesetzlichen Vorschriften gesperrt oder gelöscht.

+ +

6. Rechte der betroffenen Person

+ +

7. Datenschutzbestimmungen zu Einsatz und Verwendung von Facebook

+

Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten des Unternehmens Facebook integriert. Facebook ist ein soziales Netzwerk.

+ +

Ein soziales Netzwerk ist ein im Internet betriebener sozialer Treffpunkt, eine Online-Gemeinschaft, die es den Nutzern in der Regel ermöglicht, untereinander zu kommunizieren und im virtuellen Raum zu interagieren. Ein soziales Netzwerk kann als Plattform zum Austausch von Meinungen und Erfahrungen dienen oder ermöglicht es der Internetgemeinschaft, persönliche oder unternehmensbezogene Informationen bereitzustellen. Facebook ermöglicht den Nutzern des sozialen Netzwerkes unter anderem die Erstellung von privaten Profilen, den Upload von Fotos und eine Vernetzung über Freundschaftsanfragen.

+ +

Betreibergesellschaft von Facebook ist die Facebook, Inc., 1 Hacker Way, Menlo Park, CA 94025, USA. Für die Verarbeitung personenbezogener Daten Verantwortlicher ist, wenn eine betroffene Person außerhalb der USA oder Kanada lebt, die Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland.

+ +

Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Facebook-Komponente (Facebook-Plug-In) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Facebook-Komponente veranlasst, eine Darstellung der entsprechenden Facebook-Komponente von Facebook herunterzuladen. Eine Gesamtübersicht über alle Facebook-Plug-Ins kann unter https://developers.facebook.com/docs/plugins/?locale=de_DE abgerufen werden. Im Rahmen dieses technischen Verfahrens erhält Facebook Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.

+ +

Sofern die betroffene Person gleichzeitig bei Facebook eingeloggt ist, erkennt Facebook mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch die Facebook-Komponente gesammelt und durch Facebook dem jeweiligen Facebook-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Facebook-Buttons, beispielsweise den „Gefällt mir“-Button, oder gibt die betroffene Person einen Kommentar ab, ordnet Facebook diese Information dem persönlichen Facebook-Benutzerkonto der betroffenen Person zu und speichert diese personenbezogenen Daten.

+ +

Facebook erhält über die Facebook-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Facebook eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Facebook-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Facebook von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Facebook-Account ausloggt.

+ +

Die von Facebook veröffentlichte Datenrichtlinie, die unter https://de-de.facebook.com/about/privacy/ abrufbar ist, gibt Aufschluss über die Erhebung, Verarbeitung und Nutzung personenbezogener Daten durch Facebook. Ferner wird dort erläutert, welche Einstellungsmöglichkeiten Facebook zum Schutz der Privatsphäre der betroffenen Person bietet. Zudem sind unterschiedliche Applikationen erhältlich, die es ermöglichen, eine Datenübermittlung an Facebook zu unterdrücken. Solche Applikationen können durch die betroffene Person genutzt werden, um eine Datenübermittlung an Facebook zu unterdrücken.

+ +

8. Datenschutzbestimmungen zu Einsatz und Verwendung von Instagram

+

Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten des Dienstes Instagram integriert. Instagram ist ein Dienst, der als audiovisuelle Plattform zu qualifizieren ist und den Nutzern das Teilen von Fotos und Videos und zudem eine Weiterverbreitung solcher Daten in anderen sozialen Netzwerken ermöglicht.

+ +

Betreibergesellschaft der Dienste von Instagram ist die Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2 Ireland.

+ +

Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Instagram-Komponente (Insta-Button) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Instagram-Komponente veranlasst, eine Darstellung der entsprechenden Komponente von Instagram herunterzuladen. Im Rahmen dieses technischen Verfahrens erhält Instagram Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.

+ +

Sofern die betroffene Person gleichzeitig bei Instagram eingeloggt ist, erkennt Instagram mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite die betroffene Person besucht. Diese Informationen werden durch die Instagram-Komponente gesammelt und durch Instagram dem jeweiligen Instagram-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Instagram-Buttons, werden die damit übertragenen Daten und Informationen dem persönlichen Instagram-Benutzerkonto der betroffenen Person zugeordnet und von Instagram gespeichert und verarbeitet.

+ +

Instagram erhält über die Instagram-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Instagram eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Instagram-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Instagram von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Instagram-Account ausloggt.

+ +

Weitere Informationen und die geltenden Datenschutzbestimmungen von Instagram können unter https://help.instagram.com/155833707900388 und https://www.instagram.com/about/legal/privacy/ abgerufen werden.

+ +

9. Datenschutzbestimmungen zu Einsatz und Verwendung von Twitter

+

Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten von Twitter integriert. Twitter ist ein multilingualer öffentlich zugänglicher Mikroblogging-Dienst, auf welchem die Nutzer sogenannte Tweets, also Kurznachrichten, die auf 280 Zeichen begrenzt sind, veröffentlichen und verbreiten können. Diese Kurznachrichten sind für jedermann, also auch für nicht bei Twitter angemeldete Personen abrufbar. Die Tweets werden aber auch den sogenannten Followern des jeweiligen Nutzers angezeigt. Follower sind andere Twitter-Nutzer, die den Tweets eines Nutzers folgen. Ferner ermöglicht Twitter über Hashtags, Verlinkungen oder Retweets die Ansprache eines breiten Publikums.

+ +

Betreibergesellschaft von Twitter International Company, One Cumberland Place, Fenian Street Dublin 2, D02 AX07, Ireland.

+ +

Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Twitter-Komponente (Twitter-Button) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Twitter-Komponente veranlasst, eine Darstellung der entsprechenden Twitter-Komponente von Twitter herunterzuladen. Weitere Informationen zu den Twitter-Buttons sind unter https://about.twitter.com/de/resources/buttons abrufbar. Im Rahmen dieses technischen Verfahrens erhält Twitter Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird. Zweck der Integration der Twitter-Komponente ist es, unseren Nutzern eine Weiterverbreitung der Inhalte diese Internetseite zu ermöglichen, diese Internetseite in der digitalen Welt bekannt zu machen und unsere Besucherzahlen zu erhöhen.

+ +

Sofern die betroffene Person gleichzeitig bei Twitter eingeloggt ist, erkennt Twitter mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch die Twitter-Komponente gesammelt und durch Twitter dem jeweiligen Twitter-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Twitter-Buttons, werden die damit übertragenen Daten und Informationen dem persönlichen Twitter-Benutzerkonto der betroffenen Person zugeordnet und von Twitter gespeichert und verarbeitet.

+ +

Twitter erhält über die Twitter-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Twitter eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Twitter-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Twitter von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Twitter-Account ausloggt.

+ +

Die geltenden Datenschutzbestimmungen von Twitter sind unter https://twitter.com/privacy?lang=de abrufbar.

+ +

10. Datenschutzbestimmungen zu Einsatz und Verwendung von YouTube

+

Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten von YouTube integriert. YouTube ist ein Internet-Videoportal, dass Video-Publishern das kostenlose Einstellen von Videoclips und anderen Nutzern die ebenfalls kostenfreie Betrachtung, Bewertung und Kommentierung dieser ermöglicht. YouTube gestattet die Publikation aller Arten von Videos, weshalb sowohl komplette Film- und Fernsehsendungen, aber auch Musikvideos, Trailer oder von Nutzern selbst angefertigte Videos über das Internetportal abrufbar sind.

+ +

Betreibergesellschaft von YouTube ist die Google Ireland Limited, Gordon House, Barrow Street, Dublin, D04 E5W5, Ireland.

+ +

Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine YouTube-Komponente (YouTube-Video) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige YouTube-Komponente veranlasst, eine Darstellung der entsprechenden YouTube-Komponente von YouTube herunterzuladen. Weitere Informationen zu YouTube können unter https://www.youtube.com/yt/about/de/ abgerufen werden. Im Rahmen dieses technischen Verfahrens erhalten YouTube und Google Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.

+ +

Sofern die betroffene Person gleichzeitig bei YouTube eingeloggt ist, erkennt YouTube mit dem Aufruf einer Unterseite, die ein YouTube-Video enthält, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch YouTube und Google gesammelt und dem jeweiligen YouTube-Account der betroffenen Person zugeordnet.

+ +

YouTube und Google erhalten über die YouTube-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei YouTube eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person ein YouTube-Video anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an YouTube und Google von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem YouTube-Account ausloggt.

+ +

Die von YouTube veröffentlichten Datenschutzbestimmungen, die unter https://www.google.de/intl/de/policies/privacy/ abrufbar sind, geben Aufschluss über die Erhebung, Verarbeitung und Nutzung personenbezogener Daten durch YouTube und Google.

+ +

11. Rechtsgrundlage der Verarbeitung

+

Art. 6 I lit. a DS-GVO dient unserem Unternehmen als Rechtsgrundlage für Verarbeitungsvorgänge, bei denen wir eine Einwilligung für einen bestimmten Verarbeitungszweck einholen. Ist die Verarbeitung personenbezogener Daten zur Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, erforderlich, wie dies beispielsweise bei Verarbeitungsvorgängen der Fall ist, die für eine Lieferung von Waren oder die Erbringung einer sonstigen Leistung oder Gegenleistung notwendig sind, so beruht die Verarbeitung auf Art. 6 I lit. b DS-GVO. Gleiches gilt für solche Verarbeitungsvorgänge die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind, etwa in Fällen von Anfragen zur unseren Produkten oder Leistungen. Unterliegt unser Unternehmen einer rechtlichen Verpflichtung durch welche eine Verarbeitung von personenbezogenen Daten erforderlich wird, wie beispielsweise zur Erfüllung steuerlicher Pflichten, so basiert die Verarbeitung auf Art. 6 I lit. c DS-GVO. In seltenen Fällen könnte die Verarbeitung von personenbezogenen Daten erforderlich werden, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen. Dies wäre beispielsweise der Fall, wenn ein Besucher in unserem Betrieb verletzt werden würde und daraufhin sein Name, sein Alter, seine Krankenkassendaten oder sonstige lebenswichtige Informationen an einen Arzt, ein Krankenhaus oder sonstige Dritte weitergegeben werden müssten. Dann würde die Verarbeitung auf Art. 6 I lit. d DS-GVO beruhen. + Letztlich könnten Verarbeitungsvorgänge auf Art. 6 I lit. f DS-GVO beruhen. Auf dieser Rechtsgrundlage basieren Verarbeitungsvorgänge, die von keiner der vorgenannten Rechtsgrundlagen erfasst werden, wenn die Verarbeitung zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich ist, sofern die Interessen, Grundrechte und Grundfreiheiten des Betroffenen nicht überwiegen. Solche Verarbeitungsvorgänge sind uns insbesondere deshalb gestattet, weil sie durch den Europäischen Gesetzgeber besonders erwähnt wurden. Er vertrat insoweit die Auffassung, dass ein berechtigtes Interesse anzunehmen sein könnte, wenn die betroffene Person ein Kunde des Verantwortlichen ist (Erwägungsgrund 47 Satz 2 DS-GVO). +

+ +

12. Berechtigte Interessen an der Verarbeitung, die von dem Verantwortlichen oder einem Dritten verfolgt werden

+

Basiert die Verarbeitung personenbezogener Daten auf Artikel 6 I lit. f DS-GVO ist unser berechtigtes Interesse die Durchführung unserer Geschäftstätigkeit zugunsten des Wohlergehens all unserer Mitarbeiter und unserer Anteilseigner.

+ +

13. Dauer, für die die personenbezogenen Daten gespeichert werden

+

Das Kriterium für die Dauer der Speicherung von personenbezogenen Daten ist die jeweilige gesetzliche Aufbewahrungsfrist. Nach Ablauf der Frist werden die entsprechenden Daten routinemäßig gelöscht, sofern sie nicht mehr zur Vertragserfüllung oder Vertragsanbahnung erforderlich sind.

+ +

14. Gesetzliche oder vertragliche Vorschriften zur Bereitstellung der personenbezogenen Daten; Erforderlichkeit für den Vertragsabschluss; Verpflichtung der betroffenen Person, die personenbezogenen Daten bereitzustellen; mögliche Folgen der Nichtbereitstellung

+

Wir klären Sie darüber auf, dass die Bereitstellung personenbezogener Daten zum Teil gesetzlich vorgeschrieben ist (z.B. Steuervorschriften) oder sich auch aus vertraglichen Regelungen (z.B. Angaben zum Vertragspartner) ergeben kann. + Mitunter kann es zu einem Vertragsschluss erforderlich sein, dass eine betroffene Person uns personenbezogene Daten zur Verfügung stellt, die in der Folge durch uns verarbeitet werden müssen. Die betroffene Person ist beispielsweise verpflichtet uns personenbezogene Daten bereitzustellen, wenn unser Unternehmen mit ihr einen Vertrag abschließt. Eine Nichtbereitstellung der personenbezogenen Daten hätte zur Folge, dass der Vertrag mit dem Betroffenen nicht geschlossen werden könnte. + Vor einer Bereitstellung personenbezogener Daten durch den Betroffenen muss sich der Betroffene an einen unserer Mitarbeiter wenden. Unser Mitarbeiter klärt den Betroffenen einzelfallbezogen darüber auf, ob die Bereitstellung der personenbezogenen Daten gesetzlich oder vertraglich vorgeschrieben oder für den Vertragsabschluss erforderlich ist, ob eine Verpflichtung besteht, die personenbezogenen Daten bereitzustellen, und welche Folgen die Nichtbereitstellung der personenbezogenen Daten hätte. +

+ +

15. Bestehen einer automatisierten Entscheidungsfindung

+

Als verantwortungsbewusstes Unternehmen verzichten wir auf eine automatische Entscheidungsfindung oder ein Profiling.

+ +

Diese Datenschutzerklärung wurde durch den Datenschutzerklärungs-Generator der Deutschen Gesellschaft für Datenschutz, in Kooperation mit den Medienrecht Anwälten WILDE BEUGER SOLMECKE | Rechtsanwälte erstellt. +

+ +{% endblock maincontent %} diff --git a/lostplaces/lostplaces_app/templates/flat/privacy-policy.html b/lostplaces/lostplaces_app/templates/flat/privacy-policy.html new file mode 100644 index 0000000..758dc3c --- /dev/null +++ b/lostplaces/lostplaces_app/templates/flat/privacy-policy.html @@ -0,0 +1,266 @@ +{% extends 'global.html'%} + +# {% block title %}Privacy policy{% endblock %} + +{% block maincontent %} + +
+

Privacy policy

+
+ +
+

We are very delighted that you have shown interest in our enterprise. Data protection is of a particularly high priority for the management of the Urban Exploration Ltd. The use of the Internet pages of the Urban Exploration Ltd is possible without any indication of personal data; however, if a data subject wants to use special enterprise services via our website, processing of personal data could become necessary. If the processing of personal data is necessary and there is no statutory basis for such processing, we generally obtain consent from the data subject.

+ +

The processing of personal data, such as the name, address, e-mail address, or telephone number of a data subject shall always be in line with the General Data Protection Regulation (GDPR), and in accordance with the country-specific data protection regulations applicable to the Urban Exploration Ltd. By means of this data protection declaration, our enterprise would like to inform the general public of the nature, scope, and purpose of the personal data we collect, use and process. Furthermore, data subjects are informed, by means of this data protection declaration, of the rights to which they are entitled.

+ +

As the controller, the Urban Exploration Ltd has implemented numerous technical and organizational measures to ensure the most complete protection of personal data processed through this website. However, Internet-based data transmissions may in principle have security gaps, so absolute protection may not be guaranteed. For this reason, every data subject is free to transfer personal data to us via alternative means, e.g. by telephone.

+ +

1. Definitions

+

The data protection declaration of the Urban Exploration Ltd is based on the terms used by the European legislator for the adoption of the General Data Protection Regulation (GDPR). Our data protection declaration should be legible and understandable for the general public, as well as our customers and business partners. To ensure this, we would like to first explain the terminology used.

+ +

In this data protection declaration, we use, inter alia, the following terms:

+ + + +

2. Name and Address of the controller

+

Controller for the purposes of the General Data Protection Regulation (GDPR), other data protection laws applicable in Member states of the European Union and other provisions related to data protection is: + +

+ +

Urban Exploration Ltd

+

2563 College Avenue

+

45402 Dayton

+

OH

+

Phone: 937-387-6498

+

Email: JohnSSmith@einrot.com

+

Website: https://www.urban-exploration.com

+ +

3. Collection of general data and information

+

The website of the Urban Exploration Ltd collects a series of general data and information when a data subject or automated system calls up the website. This general data and information are stored in the server log files. Collected may be (1) the browser types and versions used, (2) the operating system used by the accessing system, (3) the website from which an accessing system reaches our website (so-called referrers), (4) the sub-websites, (5) the date and time of access to the Internet site, (6) an Internet protocol address (IP address), (7) the Internet service provider of the accessing system, and (8) any other similar data and information that may be used in the event of attacks on our information technology systems.

+ +

When using these general data and information, the Urban Exploration Ltd does not draw any conclusions about the data subject. Rather, this information is needed to (1) deliver the content of our website correctly, (2) optimize the content of our website as well as its advertisement, (3) ensure the long-term viability of our information technology systems and website technology, and (4) provide law enforcement authorities with the information necessary for criminal prosecution in case of a cyber-attack. Therefore, the Urban Exploration Ltd analyzes anonymously collected data and information statistically, with the aim of increasing the data protection and data security of our enterprise, and to ensure an optimal level of protection for the personal data we process. The anonymous data of the server log files are stored separately from all personal data provided by a data subject.

+ +

4. Registration on our website

+

The data subject has the possibility to register on the website of the controller with the indication of personal data. Which personal data are transmitted to the controller is determined by the respective input mask used for the registration. The personal data entered by the data subject are collected and stored exclusively for internal use by the controller, and for his own purposes. The controller may request transfer to one or more processors (e.g. a parcel service) that also uses personal data for an internal purpose which is attributable to the controller.

+ +

By registering on the website of the controller, the IP address—assigned by the Internet service provider (ISP) and used by the data subject—date, and time of the registration are also stored. The storage of this data takes place against the background that this is the only way to prevent the misuse of our services, and, if necessary, to make it possible to investigate committed offenses. Insofar, the storage of this data is necessary to secure the controller. This data is not passed on to third parties unless there is a statutory obligation to pass on the data, or if the transfer serves the aim of criminal prosecution. + +

+ +

The registration of the data subject, with the voluntary indication of personal data, is intended to enable the controller to offer the data subject contents or services that may only be offered to registered users due to the nature of the matter in question. Registered persons are free to change the personal data specified during the registration at any time, or to have them completely deleted from the data stock of the controller.

+ +

The data controller shall, at any time, provide information upon request to each data subject as to what personal data are stored about the data subject. In addition, the data controller shall correct or erase personal data at the request or indication of the data subject, insofar as there are no statutory storage obligations. The entirety of the controller’s employees are available to the data subject in this respect as contact persons.

+ +

5. Routine erasure and blocking of personal data

+

The data controller shall process and store the personal data of the data subject only for the period necessary to achieve the purpose of storage, or as far as this is granted by the European legislator or other legislators in laws or regulations to which the controller is subject to.

+ +

If the storage purpose is not applicable, or if a storage period prescribed by the European legislator or another competent legislator expires, the personal data are routinely blocked or erased in accordance with legal requirements.

+ +

6. Rights of the data subject

+ +

7. Data protection provisions about the application and use of Facebook

+

On this website, the controller has integrated components of the enterprise Facebook. Facebook is a social network.

+ +

A social network is a place for social meetings on the Internet, an online community, which usually allows users to communicate with each other and interact in a virtual space. A social network may serve as a platform for the exchange of opinions and experiences, or enable the Internet community to provide personal or business-related information. Facebook allows social network users to include the creation of private profiles, upload photos, and network through friend requests.

+ +

The operating company of Facebook is Facebook, Inc., 1 Hacker Way, Menlo Park, CA 94025, United States. If a person lives outside of the United States or Canada, the controller is the Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland.

+ +

With each call-up to one of the individual pages of this Internet website, which is operated by the controller and into which a Facebook component (Facebook plug-ins) was integrated, the web browser on the information technology system of the data subject is automatically prompted to download display of the corresponding Facebook component from Facebook through the Facebook component. An overview of all the Facebook Plug-ins may be accessed under https://developers.facebook.com/docs/plugins/. During the course of this technical procedure, Facebook is made aware of what specific sub-site of our website was visited by the data subject.

+ +

If the data subject is logged in at the same time on Facebook, Facebook detects with every call-up to our website by the data subject—and for the entire duration of their stay on our Internet site—which specific sub-site of our Internet page was visited by the data subject. This information is collected through the Facebook component and associated with the respective Facebook account of the data subject. If the data subject clicks on one of the Facebook buttons integrated into our website, e.g. the "Like" button, or if the data subject submits a comment, then Facebook matches this information with the personal Facebook user account of the data subject and stores the personal data.

+ +

Facebook always receives, through the Facebook component, information about a visit to our website by the data subject, whenever the data subject is logged in at the same time on Facebook during the time of the call-up to our website. This occurs regardless of whether the data subject clicks on the Facebook component or not. If such a transmission of information to Facebook is not desirable for the data subject, then he or she may prevent this by logging off from their Facebook account before a call-up to our website is made.

+ +

The data protection guideline published by Facebook, which is available at https://facebook.com/about/privacy/, provides information about the collection, processing and use of personal data by Facebook. In addition, it is explained there what setting options Facebook offers to protect the privacy of the data subject. In addition, different configuration options are made available to allow the elimination of data transmission to Facebook. These applications may be used by the data subject to eliminate a data transmission to Facebook.

+ +

8. Data protection provisions about the application and use of Instagram

+

On this website, the controller has integrated components of the service Instagram. Instagram is a service that may be qualified as an audiovisual platform, which allows users to share photos and videos, as well as disseminate such data in other social networks.

+ +

The operating company of the services offered by Instagram is Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2 Ireland.

+ +

With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which an Instagram component (Insta button) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to the download of a display of the corresponding Instagram component of Instagram. During the course of this technical procedure, Instagram becomes aware of what specific sub-page of our website was visited by the data subject.

+ +

If the data subject is logged in at the same time on Instagram, Instagram detects with every call-up to our website by the data subject—and for the entire duration of their stay on our Internet site—which specific sub-page of our Internet page was visited by the data subject. This information is collected through the Instagram component and is associated with the respective Instagram account of the data subject. If the data subject clicks on one of the Instagram buttons integrated on our website, then Instagram matches this information with the personal Instagram user account of the data subject and stores the personal data.

+ +

Instagram receives information via the Instagram component that the data subject has visited our website provided that the data subject is logged in at Instagram at the time of the call to our website. This occurs regardless of whether the person clicks on the Instagram button or not. If such a transmission of information to Instagram is not desirable for the data subject, then he or she can prevent this by logging off from their Instagram account before a call-up to our website is made.

+ +

Further information and the applicable data protection provisions of Instagram may be retrieved under https://help.instagram.com/155833707900388 and https://www.instagram.com/about/legal/privacy/.

+ +

9. Data protection provisions about the application and use of Twitter

+

On this website, the controller has integrated components of Twitter. Twitter is a multilingual, publicly-accessible microblogging service on which users may publish and spread so-called ‘tweets,’ e.g. short messages, which are limited to 280 characters. These short messages are available for everyone, including those who are not logged on to Twitter. The tweets are also displayed to so-called followers of the respective user. Followers are other Twitter users who follow a user's tweets. Furthermore, Twitter allows you to address a wide audience via hashtags, links or retweets.

+ +

The operating company of Twitter is Twitter International Company, One Cumberland Place, Fenian Street Dublin 2, D02 AX07, Ireland.

+ +

With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which a Twitter component (Twitter button) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to download a display of the corresponding Twitter component of Twitter. Further information about the Twitter buttons is available under https://about.twitter.com/de/resources/buttons. During the course of this technical procedure, Twitter gains knowledge of what specific sub-page of our website was visited by the data subject. The purpose of the integration of the Twitter component is a retransmission of the contents of this website to allow our users to introduce this web page to the digital world and increase our visitor numbers.

+ +

If the data subject is logged in at the same time on Twitter, Twitter detects with every call-up to our website by the data subject and for the entire duration of their stay on our Internet site which specific sub-page of our Internet page was visited by the data subject. This information is collected through the Twitter component and associated with the respective Twitter account of the data subject. If the data subject clicks on one of the Twitter buttons integrated on our website, then Twitter assigns this information to the personal Twitter user account of the data subject and stores the personal data.

+ +

Twitter receives information via the Twitter component that the data subject has visited our website, provided that the data subject is logged in on Twitter at the time of the call-up to our website. This occurs regardless of whether the person clicks on the Twitter component or not. If such a transmission of information to Twitter is not desirable for the data subject, then he or she may prevent this by logging off from their Twitter account before a call-up to our website is made.

+ +

The applicable data protection provisions of Twitter may be accessed under https://twitter.com/privacy?lang=en.

+ +

10. Data protection provisions about the application and use of YouTube

+

On this website, the controller has integrated components of YouTube. YouTube is an Internet video portal that enables video publishers to set video clips and other users free of charge, which also provides free viewing, review and commenting on them. YouTube allows you to publish all kinds of videos, so you can access both full movies and TV broadcasts, as well as music videos, trailers, and videos made by users via the Internet portal. +

+ +

The operating company of YouTube is Google Ireland Limited, Gordon House, Barrow Street, Dublin, D04 E5W5, Ireland.

+ +

With each call-up to one of the individual pages of this Internet site, which is operated by the controller and on which a YouTube component (YouTube video) was integrated, the Internet browser on the information technology system of the data subject is automatically prompted to download a display of the corresponding YouTube component. Further information about YouTube may be obtained under https://www.youtube.com/yt/about/en/. During the course of this technical procedure, YouTube and Google gain knowledge of what specific sub-page of our website was visited by the data subject.

+ +

If the data subject is logged in on YouTube, YouTube recognizes with each call-up to a sub-page that contains a YouTube video, which specific sub-page of our Internet site was visited by the data subject. This information is collected by YouTube and Google and assigned to the respective YouTube account of the data subject.

+ +

YouTube and Google will receive information through the YouTube component that the data subject has visited our website, if the data subject at the time of the call to our website is logged in on YouTube; this occurs regardless of whether the person clicks on a YouTube video or not. If such a transmission of this information to YouTube and Google is not desirable for the data subject, the delivery may be prevented if the data subject logs off from their own YouTube account before a call-up to our website is made.

+ +

YouTube's data protection provisions, available at https://www.google.com/intl/en/policies/privacy/, provide information about the collection, processing and use of personal data by YouTube and Google.

+ +

11. Legal basis for the processing

+

Art. 6(1) lit. a GDPR serves as the legal basis for processing operations for which we obtain consent for a specific processing purpose. If the processing of personal data is necessary for the performance of a contract to which the data subject is party, as is the case, for example, when processing operations are necessary for the supply of goods or to provide any other service, the processing is based on Article 6(1) lit. b GDPR. The same applies to such processing operations which are necessary for carrying out pre-contractual measures, for example in the case of inquiries concerning our products or services. Is our company subject to a legal obligation by which processing of personal data is required, such as for the fulfillment of tax obligations, the processing is based on Art. 6(1) lit. c GDPR. + In rare cases, the processing of personal data may be necessary to protect the vital interests of the data subject or of another natural person. This would be the case, for example, if a visitor were injured in our company and his name, age, health insurance data or other vital information would have to be passed on to a doctor, hospital or other third party. Then the processing would be based on Art. 6(1) lit. d GDPR. + Finally, processing operations could be based on Article 6(1) lit. f GDPR. This legal basis is used for processing operations which are not covered by any of the abovementioned legal grounds, if processing is necessary for the purposes of the legitimate interests pursued by our company or by a third party, except where such interests are overridden by the interests or fundamental rights and freedoms of the data subject which require protection of personal data. Such processing operations are particularly permissible because they have been specifically mentioned by the European legislator. He considered that a legitimate interest could be assumed if the data subject is a client of the controller (Recital 47 Sentence 2 GDPR). +

+ +

12. The legitimate interests pursued by the controller or by a third party

+

Where the processing of personal data is based on Article 6(1) lit. f GDPR our legitimate interest is to carry out our business in favor of the well-being of all our employees and the shareholders.

+ +

13. Period for which the personal data will be stored

+

The criteria used to determine the period of storage of personal data is the respective statutory retention period. After expiration of that period, the corresponding data is routinely deleted, as long as it is no longer necessary for the fulfillment of the contract or the initiation of a contract.

+ +

14. Provision of personal data as statutory or contractual requirement; Requirement necessary to enter into a contract; Obligation of the data subject to provide the personal data; possible consequences of failure to provide such data

+

We clarify that the provision of personal data is partly required by law (e.g. tax regulations) or can also result from contractual provisions (e.g. information on the contractual partner). + + Sometimes it may be necessary to conclude a contract that the data subject provides us with personal data, which must subsequently be processed by us. The data subject is, for example, obliged to provide us with personal data when our company signs a contract with him or her. The non-provision of the personal data would have the consequence that the contract with the data subject could not be concluded. + + Before personal data is provided by the data subject, the data subject must contact any employee. The employee clarifies to the data subject whether the provision of the personal data is required by law or contract or is necessary for the conclusion of the contract, whether there is an obligation to provide the personal data and the consequences of non-provision of the personal data. +

+ +

15. Existence of automated decision-making

+

As a responsible company, we do not use automatic decision-making or profiling.

+ +

This Privacy Policy has been generated by the Privacy Policy Generator of the DGD - Your External DPO that was developed in cooperation with German Lawyers from WILDE BEUGER SOLMECKE, Cologne. +

+
+ +{% endblock maincontent %} diff --git a/lostplaces/lostplaces_app/templates/global.html b/lostplaces/lostplaces_app/templates/global.html index e657bf5..6863ad3 100644 --- a/lostplaces/lostplaces_app/templates/global.html +++ b/lostplaces/lostplaces_app/templates/global.html @@ -14,73 +14,79 @@ {% block title %}Urban Exploration{% endblock %} - - -
-
- -
- - {% if user.is_authenticated %} - Hi {{ user.username }}! - logout - {% if user.is_superuser %} - | admin - {% endif %} + +
+
+ +
+ + {% if user.is_authenticated %} + Hi {{ user.username }}! + logout + {% if user.is_superuser %} + admin + {% endif %} - {% else %} - You are not logged in. - login | - signup - {% endif %} - -
-
- - - -
- {% if messages %} -
-
    - {% for message in messages %} -
  • -
    -
    -
    + {% else %} + You are not logged in. + login | + signup + {% endif %} + +
    +
+ + + +
+ {% if messages %} +
+
    + {% for message in messages %} +
  • +
    +
    +
    +
    +
    +
    + {{ message }}
    -
    - {{ message }} -
    -
- - {% endfor %} - -
- {% endif %} - {% block maincontent %} - {% endblock maincontent %} - - - + + {% endfor %} + + + {% endif %} - \ No newline at end of file + {% block maincontent %} + {% endblock maincontent %} + + + + + {% block footer %} + {% include 'partials/nav/footer.html' %} + {% endblock footer %} + + + diff --git a/lostplaces/lostplaces_app/templates/hello_world.html b/lostplaces/lostplaces_app/templates/hello_world.html deleted file mode 100644 index 371ca96..0000000 --- a/lostplaces/lostplaces_app/templates/hello_world.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Document - - - {{text}} - - \ No newline at end of file diff --git a/lostplaces/lostplaces_app/templates/home.html b/lostplaces/lostplaces_app/templates/home.html index 615b6e3..726fbf5 100644 --- a/lostplaces/lostplaces_app/templates/home.html +++ b/lostplaces/lostplaces_app/templates/home.html @@ -1,4 +1,5 @@ {% extends 'global.html'%} + {% load static %} {% block additional_head %} @@ -9,6 +10,10 @@ {% block maincontent %} +{% include 'partials/welcome.html' %} +
+
+ {% include 'partials/osm_map.html' %}

Explore the latest locations

diff --git a/lostplaces/lostplaces_app/templates/home_unauth.html b/lostplaces/lostplaces_app/templates/home_unauth.html new file mode 100644 index 0000000..7fb0e00 --- /dev/null +++ b/lostplaces/lostplaces_app/templates/home_unauth.html @@ -0,0 +1,53 @@ +{% extends 'global.html'%} + +# {% block title %}Start{% endblock %} + +{% block maincontent %} + +{% include 'partials/welcome.html' %} +
+

+ You can create, view and share your favorite lost places with other + members of this site. You can upload photos, place links to your + web galleries and contribute your knowledge by tagging other places or + commenting on them. You will find detailed information on where these + locations are, how to get there and what to expect from them. This might + even include detailed information on the surroundings or the history + of a lost place. +

+

+ Since vandalism is a growing problem these days, no sensitive + information is available to the public. You have to + sign up + with a voucher code as an invitation to join this community. Only admins + can create these codes. Usually you are given a code when we know you + in real life in person. A request from an unknown person will most + probably be denied. +

+
+ +
+

Our latest locations

+ +
+ +{% endblock maincontent %} \ No newline at end of file diff --git a/lostplaces/lostplaces_app/templates/partials/nav/footer.html b/lostplaces/lostplaces_app/templates/partials/nav/footer.html new file mode 100644 index 0000000..080e54b --- /dev/null +++ b/lostplaces/lostplaces_app/templates/partials/nav/footer.html @@ -0,0 +1,72 @@ + diff --git a/lostplaces/lostplaces_app/templates/partials/welcome.html b/lostplaces/lostplaces_app/templates/partials/welcome.html new file mode 100644 index 0000000..cb45a98 --- /dev/null +++ b/lostplaces/lostplaces_app/templates/partials/welcome.html @@ -0,0 +1,19 @@ +
+

Start

+
+ +
+

Welcome to our Urban Exploration community catalogue, + {% if user.is_authenticated %} + {{ user.username }} + {% else %} + explorer + {% endif %} + ! +

+

+ We strictly follow our + UrBex codex + and expect you to do so, too. +

+
diff --git a/lostplaces/lostplaces_app/urls.py b/lostplaces/lostplaces_app/urls.py index 311e717..a47b81e 100644 --- a/lostplaces/lostplaces_app/urls.py +++ b/lostplaces/lostplaces_app/urls.py @@ -7,10 +7,11 @@ from .views import ( PlaceCreateView, PlaceUpdateView, PlaceDeleteView, + PlaceTagDeleteView, + PlaceTagSubmitView, PhotoAlbumCreateView, PhotoAlbumDeleteView, - PlaceTagSubmitView, - PlaceTagDeleteView + FlatView ) urlpatterns = [ @@ -23,7 +24,9 @@ urlpatterns = [ path('place/update//', PlaceUpdateView.as_view(), name='place_edit'), path('place/delete//', PlaceDeleteView.as_view(), name='place_delete'), path('place/', PlaceListView.as_view(), name='place_list'), - # POST-only URL for tag submission + path('flat//', FlatView, name='flatpage'), + + # POST-only URLs for tag submission path('place/tag/', PlaceTagSubmitView.as_view(), name='place_tag_submit'), path('place/tag/delete//', PlaceTagDeleteView.as_view(), name='place_tag_delete') ] diff --git a/lostplaces/lostplaces_app/views/base_views.py b/lostplaces/lostplaces_app/views/base_views.py index 4eeded9..f0ec88d 100644 --- a/lostplaces/lostplaces_app/views/base_views.py +++ b/lostplaces/lostplaces_app/views/base_views.py @@ -12,6 +12,11 @@ from django.urls import reverse_lazy from lostplaces_app.models import Place class IsAuthenticated(LoginRequiredMixin, View): + ''' + A view mixin that checks wether a user is loged in or not. + If the user is not logged in, he gets redirected to + the login page. + ''' redirect_field_name = 'redirect_to' permission_denied_message = 'Please login to proceed' @@ -20,6 +25,12 @@ class IsAuthenticated(LoginRequiredMixin, View): return super().handle_no_permission() class IsPlaceSubmitter(UserPassesTestMixin, View): + ''' + A view mixin that checks wethe a user is the submitter + of a place Throws 403 if the user is not. The subclass + has to provide a get_place method, wich returns the + place to check. + ''' place_submitter_error_message = None def get_place(self): @@ -95,4 +106,4 @@ class PlaceAssetDeleteView(IsAuthenticated, IsPlaceSubmitter, SingleObjectMixin, place_id = self.get_object().place.id self.get_object().delete() messages.success(self.request, self.success_message) - return redirect(reverse_lazy('place_detail', kwargs={'pk': place_id})) \ No newline at end of file + return redirect(reverse_lazy('place_detail', kwargs={'pk': place_id})) diff --git a/lostplaces/lostplaces_app/views/views.py b/lostplaces/lostplaces_app/views/views.py index b1d86b1..8b2c1ef 100644 --- a/lostplaces/lostplaces_app/views/views.py +++ b/lostplaces/lostplaces_app/views/views.py @@ -4,7 +4,7 @@ from django.views.generic.edit import CreateView from django.contrib.messages.views import SuccessMessageMixin from django.contrib import messages from django.urls import reverse_lazy -from django.shortcuts import render, redirect +from django.shortcuts import render, redirect, get_object_or_404 from django.http import HttpResponseForbidden from lostplaces_app.forms import ExplorerCreationForm, TagSubmitForm @@ -24,7 +24,7 @@ class SignUpView(SuccessMessageMixin, CreateView): template_name = 'signup.html' success_message = 'User created.' -class HomeView(View): +class HomeView(IsAuthenticated, View): def get(self, request, *args, **kwargs): place_list = Place.objects.all().order_by('-submitted_when')[:10] place_map_center = Place.average_latlon(place_list) @@ -34,6 +34,13 @@ class HomeView(View): } return render(request, 'home.html', context) + def handle_no_permission(self): + place_list = Place.objects.all().order_by('-submitted_when')[:5] + context = { + 'place_list': place_list + } + return render(self.request, 'home_unauth.html', context) + class PhotoAlbumCreateView(PlaceAssetCreateView): model = PhotoAlbum fields = ['url', 'label'] @@ -66,4 +73,7 @@ class PlaceTagDeleteView(IsAuthenticated, View): place = Place.objects.get(pk=tagged_id) tag = Tag.objects.get(pk=tag_id) place.tags.remove(tag) - return redirect(reverse_lazy('place_detail', kwargs={'pk': tagged_id})) \ No newline at end of file + return redirect(reverse_lazy('place_detail', kwargs={'pk': tagged_id})) + +def FlatView(request, slug): + return render(request, 'flat/' + slug + '.html')