You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.0 KiB
110 lines
3.0 KiB
from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponsePermanentRedirect
|
|
from django.shortcuts import get_object_or_404
|
|
from city.models import City
|
|
from country.models import Country
|
|
from theme.models import Theme, Tag
|
|
from exposition.models import Exposition
|
|
from conference.models import Conference
|
|
from company.models import Company
|
|
from article.models import Article
|
|
from accounts.models import User
|
|
|
|
|
|
class RedirectMixin(object):
|
|
model = None
|
|
|
|
def get_object_url(self, key, value):
|
|
Model = self.model
|
|
|
|
try:
|
|
obj = Model.objects.get(old_url=value)
|
|
except:
|
|
obj = get_object_or_404(Model, url=value)
|
|
if obj:
|
|
return {key: obj.url}
|
|
else:
|
|
raise Http404
|
|
|
|
class CityRedirect(RedirectMixin):
|
|
model = City
|
|
|
|
class CountryRedirect(RedirectMixin):
|
|
model = Country
|
|
|
|
class ThemeRedirect(RedirectMixin):
|
|
model = Theme
|
|
|
|
class TagRedirect(RedirectMixin):
|
|
model = Tag
|
|
|
|
class CompanyRedirect(RedirectMixin):
|
|
model = Company
|
|
|
|
|
|
|
|
class EventRedirect(object):
|
|
|
|
def get_object_url(self,key, value):
|
|
|
|
try:
|
|
obj = Exposition.objects.get(old_url=value)
|
|
except Exposition.DoesNotExist:
|
|
obj = Exposition.objects.safe_get(url=value)
|
|
except Exposition.MultipleObjectsReturned:
|
|
obj = Exposition.objects.filter(old_url=value)[0]
|
|
|
|
if not obj:
|
|
try:
|
|
obj = Conference.objects.get(old_url=value)
|
|
except Conference.DoesNotExist:
|
|
obj = Conference.objects.safe_get(url=value)
|
|
except Conference.MultipleObjectsReturned:
|
|
obj = Conference.objects.filter(old=value)[0]
|
|
if obj:
|
|
return {'event_url': obj.url, 'event_catalog': obj.catalog}
|
|
else:
|
|
raise Http404
|
|
|
|
class ArticleRedirect(object):
|
|
def get_object_url(self,key, value):
|
|
obj = get_object_or_404(Article, id=value)
|
|
return {key: obj.slug}
|
|
|
|
class UserRedirect(object):
|
|
def get_object_url(self,key, value):
|
|
obj = get_object_or_404(User, url=value)
|
|
return {key: obj.url}
|
|
|
|
class PageRedirect(object):
|
|
def get_object_url(self,key, value):
|
|
return {key: value}
|
|
|
|
|
|
|
|
old_params = {'city': CityRedirect, 'country': CountryRedirect, 'theme': ThemeRedirect, 'tag': TagRedirect,
|
|
'event': EventRedirect, 'company': Company, 'article': ArticleRedirect, 'user': UserRedirect,
|
|
'page': PageRedirect}
|
|
|
|
def old_redirect(request, *args, **kwargs):
|
|
|
|
redirect = kwargs.get('redirect_url')
|
|
params = dict(kwargs)
|
|
updates = {}
|
|
|
|
for key, value in params.iteritems():
|
|
if key in old_params:
|
|
redirect_obj = old_params[key]()
|
|
updates.update(redirect_obj.get_object_url(key, value))
|
|
|
|
|
|
params.update(updates)
|
|
redirect = redirect.format(**params)
|
|
|
|
return HttpResponsePermanentRedirect(redirect)
|
|
|
|
def old_profile(request):
|
|
user = request.user
|
|
if user.is_authenticated():
|
|
return HttpResponseRedirect('/%s/'%user.url)
|
|
else:
|
|
raise Http404 |