/iv2ex/backstage.py
https://github.com/hitigon/woosuko · Python · 1036 lines · 982 code · 18 blank · 36 comment · 241 complexity · 810efa4939cb6966e51b97f15edd0e12 MD5 · raw file
- #coding=utf-8
- '''
- Created on 11-9-13
- @author: qiaoshun8888
- '''
- import os
- import random
- import re
- import datetime
- import Image
- from django.http import HttpResponseRedirect
- from django.shortcuts import render_to_response
- import time
- import sys
- import math
- import config
- from iv2ex import SYSTEM_VERSION
- from iv2ex.models import Counter, Section, Member, Minisite, Node, Page, Topic, Reply, Notification
- import settings
- from v2ex.babel.da import GetSite, GetKindByName, GetKindByNum
- from v2ex.babel.l10n import GetMessages, GetLanguageSelect, GetSupportedLanguages
- from v2ex.babel.security import CheckAuth
- from v2ex.babel.ua import detect
- from django.core.cache import cache as memcache
- def BackstageHomeHandler(request):
- if request.method == 'GET':
- site = GetSite()
- browser = detect(request)
- member = CheckAuth(request)
- l10n = GetMessages(member, site)
- template_values = {}
- template_values['l10n'] = l10n
- template_values['site'] = site
- template_values['rnd'] = random.randrange(1, 100)
- template_values['system_version'] = SYSTEM_VERSION
- template_values['member'] = member
- template_values['page_title'] = site.title + u' › ' + l10n.backstage.decode('utf-8')
- member_total = memcache.get('member_total')
- if member_total is None:
- q3 = Counter.objects.filter(name='member.total')
- if (len(q3) > 0):
- member_total = q3[0].value
- else:
- member_total = 0
- memcache.set('member_total', member_total, 600)
- template_values['member_total'] = member_total
- topic_total = memcache.get('topic_total')
- if topic_total is None:
- q4 = Counter.objects.filter(name='topic.total')
- if (len(q4) > 0):
- topic_total = q4[0].value
- else:
- topic_total = 0
- memcache.set('topic_total', topic_total, 600)
- template_values['topic_total'] = topic_total
- reply_total = memcache.get('reply_total')
- if reply_total is None:
- q5 = Counter.objects.filter(name='reply.total')
- if (len(q5) > 0):
- reply_total = q5[0].value
- else:
- reply_total = 0
- memcache.set('reply_total', reply_total, 600)
- template_values['reply_total'] = reply_total
- if (member):
- if (member.level == 0):
- q = Section.objects.filter().order_by('-nodes')
- template_values['sections'] = q
- q2 = Member.objects.filter().order_by('-created')[:5]
- template_values['latest_members'] = q2
- q3 = Minisite.objects.filter().order_by('-created')
- template_values['minisites'] = q3
- q4 = Node.objects.filter().order_by('-last_modified')[:8]
- template_values['latest_nodes'] = q4
- if browser['ios']:
- path = os.path.join('mobile', 'backstage_home.html')
- else:
- path = os.path.join('desktop', 'backstage_home.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageNewMinisiteHandler(request):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新站点'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- path = os.path.join('desktop', 'backstage_new_minisite.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新站点'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- errors = 0
- # Verification: name
- minisite_name_error = 0
- minisite_name_error_messages = ['',
- u'请输入站点名',
- u'站点名长度不能超过 32 个字符',
- u'站点名只能由 a-Z 0-9 及 - 和 _ 组成',
- u'抱歉这个站点名已经存在了']
- minisite_name = request.POST['name'].strip().lower()
- if (len(minisite_name) == 0):
- errors = errors + 1
- minisite_name_error = 1
- else:
- if (len(minisite_name) > 32):
- errors = errors + 1
- minisite_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_]+$', minisite_name)):
- q = Minisite.objects.filter(name=minisite_name.lower())
- if (len(q) > 0):
- errors = errors + 1
- minisite_name_error = 4
- else:
- errors = errors + 1
- minisite_name_error = 3
- template_values['minisite_name'] = minisite_name
- template_values['minisite_name_error'] = minisite_name_error
- template_values['minisite_name_error_message'] = minisite_name_error_messages[minisite_name_error]
- # Verification: title
- minisite_title_error = 0
- minisite_title_error_messages = ['',
- u'请输入站点标题',
- u'站点标题长度不能超过 32 个字符'
- ]
- minisite_title = request.POST['title'].strip()
- if (len(minisite_title) == 0):
- errors = errors + 1
- minisite_title_error = 1
- else:
- if (len(minisite_title) > 32):
- errors = errors + 1
- minisite_title_error = 2
- template_values['minisite_title'] = minisite_title
- template_values['minisite_title_error'] = minisite_title_error
- template_values['minisite_title_error_message'] = minisite_title_error_messages[minisite_title_error]
- # Verification: description
- minisite_description_error = 0
- minisite_description_error_messages = ['',
- u'请输入站点描述',
- u'站点描述长度不能超过 2000 个字符'
- ]
- minisite_description = request.POST['description'].strip()
- if (len(minisite_description) == 0):
- errors = errors + 1
- minisite_description_error = 1
- else:
- if (len(minisite_description) > 2000):
- errors = errors + 1
- minisite_description_error = 2
- template_values['minisite_description'] = minisite_description
- template_values['minisite_description_error'] = minisite_description_error
- template_values['minisite_description_error_message'] = minisite_description_error_messages[minisite_description_error]
- template_values['errors'] = errors
- if (errors == 0):
- minisite = Minisite()
- q = Counter.objects.filter(name='minisite.max')
- if (len(q) == 1):
- counter = q[0]
- counter.value = counter.value + 1
- else:
- counter = Counter()
- counter.name = 'minisite.max'
- counter.value = 1
- minisite.num = counter.value
- minisite.name = minisite_name
- minisite.title = minisite_title
- minisite.description = minisite_description
- minisite.save()
- counter.save()
- return HttpResponseRedirect('/backstage')
- else:
- path = os.path.join('desktop', 'backstage_new_minisite.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageMinisiteHandler(request, minisite_name):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › Minisite'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- minisite = GetKindByName('Minisite', minisite_name)
- if minisite is not False:
- template_values['minisite'] = minisite
- template_values['page_title'] = site.title + u' › ' + minisite.title
- q = Page.objects.filter(minisite=minisite).order_by('weight')
- template_values['pages'] = q
- path = os.path.join('desktop', 'backstage_minisite.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/backstage')
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageNewPageHandler(request, minisite_name):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- minisite = GetKindByName('Minisite', minisite_name)
- if minisite is not False:
- template_values['minisite'] = minisite
- template_values['page_title'] = site.title + u' › ' + minisite.title + u' › 添加新页面'
- template_values['page_content_type'] = 'text/html;charset=utf-8'
- template_values['page_weight'] = 0
- template_values['page_mode'] = 0
- path = os.path.join('desktop', 'backstage_new_page.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/backstage')
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- minisite = GetKindByName('Minisite', minisite_name)
- if minisite is False:
- return HttpResponseRedirect('/backstage')
- else:
- template_values['minisite'] = minisite
- template_values['page_title'] = site.title + u' › ' + minisite.title + u' › 添加新页面'
- errors = 0
- # Verification: name
- page_name_error = 0
- page_name_error_messages = ['',
- u'请输入页面名',
- u'页面名长度不能超过 64 个字符',
- u'页面名只能由 a-Z 0-9 及 . - _ 组成',
- u'抱歉这个页面名已经存在了']
- page_name = request.POST['name'].strip().lower()
- if (len(page_name) == 0):
- errors = errors + 1
- page_name_error = 1
- else:
- if (len(page_name) > 64):
- errors = errors + 1
- page_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_\.]+$', page_name)):
- q = Page.objects.filter(name=page_name.lower())
- if (len(q) > 0):
- if q[0].minisite.name == minisite.name:
- errors = errors + 1
- page_name_error = 4
- else:
- errors = errors + 1
- page_name_error = 3
- template_values['page_name'] = page_name
- template_values['page_name_error'] = page_name_error
- template_values['page_name_error_message'] = page_name_error_messages[page_name_error]
- # Verification: title
- page_t_error = 0
- page_t_error_messages = ['',
- u'请输入页面标题',
- u'页面标题长度不能超过 100 个字符'
- ]
- page_t = request.POST['t'].strip()
- if (len(page_t) == 0):
- errors = errors + 1
- page_t_error = 1
- else:
- if (len(page_t) > 100):
- errors = errors + 1
- page_t_error = 2
- template_values['page_t'] = page_t
- template_values['page_t_error'] = page_t_error
- template_values['page_t_error_message'] = page_t_error_messages[page_t_error]
- # Verification: content
- page_content_error = 0
- page_content_error_messages = ['',
- u'请输入页面内容',
- u'页面内容长度不能超过 200000 个字符'
- ]
- page_content = request.POST['content'].strip()
- if (len(page_content) == 0):
- errors = errors + 1
- page_content_error = 1
- else:
- if (len(page_content) > 200000):
- errors = errors + 1
- page_content_error = 2
- template_values['page_content'] = page_content
- template_values['page_content_error'] = page_content_error
- template_values['page_content_error_message'] = page_content_error_messages[page_content_error]
- # Verification: mode
- page_mode = 0
- page_mode = request.POST['mode'].strip()
- if page_mode == '1':
- page_mode = 1
- else:
- page_mode = 0
- # Verification: content_type
- page_content_type = request.POST['content_type'].strip()
- if (len(page_content_type) == 0):
- page_content_type = 'text/html;charset=utf-8'
- else:
- if (len(page_content_type) > 40):
- page_content_type = 'text/html;charset=utf-8'
- template_values['page_content_type'] = page_content_type
- # Verification: weight
- page_weight = request.POST['weight'].strip()
- if (len(page_content_type) == 0):
- page_content_type = 0
- else:
- if (len(page_weight) > 9):
- page_weight = 0
- else:
- try:
- page_weight = int(page_weight)
- except:
- page_weight = 0
- template_values['page_weight'] = page_weight
- template_values['errors'] = errors
- if (errors == 0):
- page = Page()
- page.minisite = minisite
- q = Counter.objects.filter(name='page.max')
- if (len(q) == 1):
- counter = q[0]
- counter.value = counter.value + 1
- else:
- counter = Counter()
- counter.name = 'page.max'
- counter.value = 1
- q2 = Counter.objects.filter(name='page.total')
- if (len(q2) == 1):
- counter2 = q[0]
- counter2.value = counter.value + 1
- else:
- counter2 = Counter()
- counter2.name = 'page.total'
- counter2.value = 1
- page.num = counter.value
- page.name = page_name
- page.title = page_t
- page.content = page_content
- if page_mode == 1:
- from django.template import Context, Template
- t = Template(page_content)
- c = Context({"site" : site, "minisite" : page.minisite, "page" : page})
- output = t.render(c)
- page.content_rendered = output
- else:
- page.content_rendered = page_content
- page.content_type = page_content_type
- page.weight = page_weight
- page.mode = page_mode
- page.minisite = minisite
- page.save()
- counter.save()
- counter2.save()
- minisite.pages = minisite.pages + 1
- minisite.save()
- memcache.delete('Minisite_' + str(minisite.num))
- memcache.delete('Minisite::' + str(minisite.name))
- return HttpResponseRedirect('/backstage-minisite/' + minisite.name)
- else:
- path = os.path.join('desktop', 'backstage_new_page.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageRemoveMinisiteHandler(request, minisite_key):
- if request.method == 'GET':
- member = CheckAuth(request)
- if member:
- if member.level == 0:
- minisite = db.get(db.Key(minisite_key))
- if minisite:
- # Delete all contents
- pages = db.GqlQuery("SELECT * FROM Page WHERE minisite = :1", minisite)
- for page in pages:
- memcache.delete('Page_' + str(page.num))
- memcache.delete('Page::' + str(page.name))
- memcache.delete(minisite.name + '/' + page.name)
- page.delete()
- minisite.pages = 0
- minisite.put()
- # Delete the minisite
- memcache.delete('Minisite_' + str(minisite.num))
- memcache.delete('Minisite::' + str(minisite.name))
- minisite.delete()
- self.redirect('/backstage')
- else:
- self.redirect('/backstage')
- else:
- self.redirect('/')
- else:
- self.redirect('/signin')
- def BackstagePageHandler(request, page_key):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- page = Page.objects.get(id=int(page_key))
- #page = db.get(db.Key(page_key))
- if page:
- minisite = page.minisite
- template_values['page'] = page
- template_values['minisite'] = minisite
- template_values['page_title'] = site.title + u' › ' + minisite.title + u' › ' + page.title + u' › 编辑'
- template_values['page_name'] = page.name
- template_values['page_t'] = page.title
- template_values['page_content'] = page.content
- template_values['page_content_type'] = page.content_type
- template_values['page_mode'] = page.mode
- template_values['page_weight'] = page.weight
- path = os.path.join('desktop', 'backstage_page.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/backstage')
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- page = Page.objects.get(id=int(page_key))
- #page = db.get(db.Key(page_key))
- if page:
- minisite = page.minisite
- template_values['page'] = page
- template_values['minisite'] = minisite
- template_values['page_title'] = site.title + u' › ' + minisite.title + u' › 添加新页面'
- errors = 0
- # Verification: name
- page_name_error = 0
- page_name_error_messages = ['',
- u'请输入页面名',
- u'页面名长度不能超过 64 个字符',
- u'页面名只能由 a-Z 0-9 及 . - _ 组成',
- u'抱歉这个页面名已经存在了']
- page_name = request.POST['name'].strip().lower()
- if (len(page_name) == 0):
- errors = errors + 1
- page_name_error = 1
- else:
- if (len(page_name) > 64):
- errors = errors + 1
- page_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_\.]+$', page_name)):
- q = Page.objects.filter(name=page_name.lower(), minisite=page.minisite)
- if (len(q) > 0):
- if q[0].num != page.num:
- errors = errors + 1
- page_name_error = 4
- else:
- errors = errors + 1
- page_name_error = 3
- template_values['page_name'] = page_name
- template_values['page_name_error'] = page_name_error
- template_values['page_name_error_message'] = page_name_error_messages[page_name_error]
- # Verification: title
- page_t_error = 0
- page_t_error_messages = ['',
- u'请输入页面标题',
- u'页面标题长度不能超过 100 个字符'
- ]
- page_t = request.POST['t'].strip()
- if (len(page_t) == 0):
- errors = errors + 1
- page_t_error = 1
- else:
- if (len(page_t) > 100):
- errors = errors + 1
- page_t_error = 2
- template_values['page_t'] = page_t
- template_values['page_t_error'] = page_t_error
- template_values['page_t_error_message'] = page_t_error_messages[page_t_error]
- # Verification: content
- page_content_error = 0
- page_content_error_messages = ['',
- u'请输入页面内容',
- u'页面内容长度不能超过 200000 个字符'
- ]
- page_content = request.POST['content'].strip()
- if (len(page_content) == 0):
- errors = errors + 1
- page_content_error = 1
- else:
- if (len(page_content) > 200000):
- errors = errors + 1
- page_content_error = 2
- template_values['page_content'] = page_content
- template_values['page_content_error'] = page_content_error
- template_values['page_content_error_message'] = page_content_error_messages[page_content_error]
- # Verification: mode
- page_mode = 0
- page_mode = request.POST['mode'].strip()
- if page_mode == '1':
- page_mode = 1
- else:
- page_mode = 0
- # Verification: content_type
- page_content_type = request.POST['content_type'].strip()
- if (len(page_content_type) == 0):
- page_content_type = 'text/html;charset=utf-8'
- else:
- if (len(page_content_type) > 40):
- page_content_type = 'text/html;charset=utf-8'
- template_values['page_content_type'] = page_content_type
- # Verification: weight
- page_weight = request.POST['weight'].strip()
- if (len(page_content_type) == 0):
- page_content_type = 0
- else:
- if (len(page_weight) > 9):
- page_weight = 0
- else:
- try:
- page_weight = int(page_weight)
- except:
- page_weight = 0
- template_values['page_weight'] = page_weight
- template_values['errors'] = errors
- if (errors == 0):
- page.name = page_name
- page.title = page_t
- page.content = page_content
- if page.mode == 1:
- from django.template import Context, Template
- t = Template(page_content)
- c = Context({"site" : site, "minisite" : page.minisite, "page" : page})
- output = t.render(c)
- page.content_rendered = output
- else:
- page.content_rendered = page_content
- page.content_type = page_content_type
- page.mode = page_mode
- page.weight = page_weight
- page.save()
- memcache.delete('Page_' + str(page.num))
- memcache.delete('Page::' + str(page.name))
- memcache.delete(minisite.name + '/' + page.name)
- return HttpResponseRedirect('/backstage-minisite/' + minisite.name)
- else:
- path = os.path.join('desktop', 'backstage_page.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/backstage')
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageRemovePageHandler(request):
- def get(self, page_key):
- member = CheckAuth(request)
- if member:
- if member.level == 0:
- page = db.get(db.Key(page_key))
- if page:
- memcache.delete('Page_' + str(page.num))
- memcache.delete('Page::' + str(page.name))
- memcache.delete(page.minisite.name + '/' + page.name)
- minisite = page.minisite
- page.delete()
- minisite.pages = minisite.pages - 1
- minisite.put()
- self.redirect('/backstage/minisite/' + minisite.name)
- else:
- self.redirect('/')
- else:
- self.redirect('/signin')
- def BackstageNewSectionHandler(request):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新区域'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- path = os.path.join('desktop', 'backstage_new_section.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新区域'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- template_values['member'] = member
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- errors = 0
- # Verification: name
- section_name_error = 0
- section_name_error_messages = ['',
- u'请输入区域名',
- u'区域名长度不能超过 32 个字符',
- u'区域名只能由 a-Z 0-9 及 - 和 _ 组成',
- u'抱歉这个区域名已经存在了']
- section_name = request.POST['name'].strip().lower()
- if (len(section_name) == 0):
- errors = errors + 1
- section_name_error = 1
- else:
- if (len(section_name) > 32):
- errors = errors + 1
- section_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_]+$', section_name)):
- q = Section.objects.filter(name=section_name.lower())
- if (len(q) > 0):
- errors = errors + 1
- section_name_error = 4
- else:
- errors = errors + 1
- section_name_error = 3
- template_values['section_name'] = section_name
- template_values['section_name_error'] = section_name_error
- template_values['section_name_error_message'] = section_name_error_messages[section_name_error]
- # Verification: title
- section_title_error = 0
- section_title_error_messages = ['',
- u'请输入区域标题',
- u'区域标题长度不能超过 32 个字符'
- ]
- section_title = request.POST['title'].strip()
- if (len(section_title) == 0):
- errors = errors + 1
- section_title_error = 1
- else:
- if (len(section_title) > 32):
- errors = errors + 1
- section_title_error = 2
- template_values['section_title'] = section_title
- template_values['section_title_error'] = section_title_error
- template_values['section_title_error_message'] = section_title_error_messages[section_title_error]
- # Verification: title
- section_title_alternative_error = 0
- section_title_alternative_error_messages = ['',
- u'请输入区域副标题',
- u'区域标题长度不能超过 32 个字符'
- ]
- section_title_alternative = request.POST['title_alternative'].strip()
- if (len(section_title_alternative) == 0):
- errors = errors + 1
- section_title_alternative_error = 1
- else:
- if (len(section_title_alternative) > 32):
- errors = errors + 1
- section_title_alternative_error = 2
- template_values['section_title_alternative'] = section_title_alternative
- template_values['section_title_alternative_error'] = section_title_alternative_error
- template_values['section_title_alternative_error_message'] = section_title_alternative_error_messages[section_title_alternative_error]
- template_values['errors'] = errors
- if (errors == 0):
- section = Section()
- q = Counter.objects.filter(name='section.max')
- if (len(q) == 1):
- counter = q[0]
- counter.value = counter.value + 1
- else:
- counter = Counter()
- counter.name = 'section.max'
- counter.value = 1
- section.num = counter.value
- section.name = section_name
- section.title = section_title
- section.title_alternative = section_title_alternative
- section.save()
- counter.save()
- return HttpResponseRedirect('/backstage')
- else:
- path = os.path.join('mobile', 'backstage_new_section.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageSectionHandler(request,section_name):
- if request.method == 'GET':
- site = GetSite()
- browser = detect(request)
- template_values = {}
- template_values['rnd'] = random.randrange(1, 100)
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- template_values['member'] = member
- q = Section.objects.filter(name=section_name)
- section = False
- if (len(q) == 1):
- section = q[0]
- template_values['section'] = section
- template_values['page_title'] = site.title + u' › 后台 › ' + section.title
- template_values['section_name'] = section.name
- template_values['section_title'] = section.title
- template_values['section_title_alternative'] = section.title_alternative
- if section.header:
- template_values['section_header'] = section.header
- else:
- template_values['section_header'] = ''
- if section.footer:
- template_values['section_footer'] = section.footer
- else:
- template_values['section_footer'] = ''
- else:
- template_values['section'] = section
- if (section):
- q = Node.objects.filter(section_num=section.num).order_by('-topics')
- template_values['nodes'] = q
- section.nodes = len(q)
- section.save()
- template_values['section'] = section
- q2 = Node.objects.filter(section_num=section.num).order_by('-last_modified')[:10]
- template_values['recent_modified'] = q2
- else:
- template_values['nodes'] = False
- if browser['ios']:
- path = os.path.join('mobile', 'backstage_section.html')
- else:
- path = os.path.join('desktop', 'backstage_section.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- browser = detect(request)
- template_values = {}
- template_values['rnd'] = random.randrange(1, 100)
- template_values['site'] = site
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if member:
- if member.level == 0:
- template_values['member'] = member
- section = GetKindByName('Section', section_name)
- if section is not False:
- template_values['section'] = section
- errors = 0
- # Verification: name
- section_name_error = 0
- section_name_error_messages = ['',
- u'请输入区域名',
- u'区域名长度不能超过 32 个字符',
- u'区域名只能由 a-Z 0-9 及 - 和 _ 组成',
- u'抱歉这个区域名已经存在了']
- section_name = request.POST['name'].strip().lower()
- if (len(section_name) == 0):
- errors = errors + 1
- section_name_error = 1
- else:
- if (len(section_name) > 32):
- errors = errors + 1
- section_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_]+$', section_name)):
- q = Section.objects.filter(name=section_name.lower())
- if (len(q) > 0):
- for possible_conflict in q:
- if possible_conflict.num != section.num:
- errors = errors + 1
- section_name_error = 4
- else:
- errors = errors + 1
- section_name_error = 3
- template_values['section_name'] = section_name
- template_values['section_name_error'] = section_name_error
- template_values['section_name_error_message'] = section_name_error_messages[section_name_error]
- # Verification: title
- section_title_error = 0
- section_title_error_messages = ['',
- u'请输入区域标题',
- u'区域标题长度不能超过 32 个字符'
- ]
- section_title = request.POST['title'].strip()
- if (len(section_title) == 0):
- errors = errors + 1
- section_title_error = 1
- else:
- if (len(section_title) > 32):
- errors = errors + 1
- section_title_error = 2
- template_values['section_title'] = section_title
- template_values['section_title_error'] = section_title_error
- template_values['section_title_error_message'] = section_title_error_messages[section_title_error]
- # Verification: title_alternative
- section_title_alternative_error = 0
- section_title_alternative_error_messages = ['',
- u'请输入区域副标题',
- u'区域标题长度不能超过 32 个字符'
- ]
- section_title_alternative = request.POST['title_alternative'].strip()
- if (len(section_title_alternative) == 0):
- errors = errors + 1
- section_title_alternative_error = 1
- else:
- if (len(section_title_alternative) > 32):
- errors = errors + 1
- section_title_alternative_error = 2
- template_values['section_title_alternative'] = section_title_alternative
- template_values['section_title_alternative_error'] = section_title_alternative_error
- template_values['section_title_alternative_error_message'] = section_title_alternative_error_messages[section_title_alternative_error]
- # Verification: header
- section_header_error = 0
- section_header_error_messages = ['',
- u'区域头部信息不能超过 1000 个字符'
- ]
- section_header = request.POST['header'].strip()
- if len(section_header) > 1000:
- errors = errors + 1
- section_header_error = 1
- template_values['section_header'] = section_header
- template_values['section_header_error'] = section_header_error
- template_values['section_header_error_message'] = section_header_error_messages[section_header_error]
- # Verification: footer
- section_footer_error = 0
- section_footer_error_messages = ['',
- u'区域尾部信息不能超过 1000 个字符'
- ]
- section_footer = request.POST['footer'].strip()
- if len(section_footer) > 1000:
- errors = errors + 1
- section_footer_error = 1
- template_values['section_footer'] = section_footer
- template_values['section_footer_error'] = section_footer_error
- template_values['section_footer_error_message'] = section_footer_error_messages[section_footer_error]
- template_values['errors'] = errors
- if (errors == 0):
- memcache.delete('Section::' + section.name)
- section.name = section_name
- section.title = section_title
- section.title_alternative = section_title_alternative
- section.header = section_header
- section.footer = section_footer
- section.save()
- memcache.delete('Section_' + str(section.num))
- memcache.delete('Section::' + section_name)
- return HttpResponseRedirect('/backstage')
- else:
- path = os.path.join('desktop', 'backstage_section.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/backstage')
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- def BackstageNewNodeHandler(request,section_name):
- if request.method == 'GET':
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新节点'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- template_values['member'] = CheckAuth(request)
- q = Section.objects.filter(name=section_name)
- if (len(q) == 1):
- template_values['section'] = q[0]
- else:
- template_values['section'] = False
- path = os.path.join('desktop', 'backstage_new_node.html')
- return render_to_response(path, template_values)
- else:
- return HttpResponseRedirect('/')
- else:
- return HttpResponseRedirect('/signin')
- else:
- site = GetSite()
- template_values = {}
- template_values['site'] = site
- template_values['page_title'] = site.title + u' › 添加新节点'
- template_values['system_version'] = SYSTEM_VERSION
- member = CheckAuth(request)
- l10n = GetMessages(member, site)
- template_values['l10n'] = l10n
- if (member):
- if (member.level == 0):
- template_values['member'] = member
- section = False
- q = Section.objects.filter(name=section_name)
- if (len(q) == 1):
- section = q[0]
- template_values['section'] = section
- else:
- template_values['section'] = False
- errors = 0
- # Verification: name
- node_name_error = 0
- node_name_error_messages = ['',
- u'请输入节点名',
- u'节点名长度不能超过 32 个字符',
- u'节点名只能由 a-Z 0-9 及 - 和 _ 组成',
- u'抱歉这个节点名已经存在了']
- node_name = request.POST['name'].strip().lower()
- if (len(node_name) == 0):
- errors = errors + 1
- node_name_error = 1
- else:
- if (len(node_name) > 32):
- errors = errors + 1
- node_name_error = 2
- else:
- if (re.search('^[a-zA-Z0-9\-\_]+$', node_name)):
- q = Node.objects.filter(name=node_name.lower())
- if (len(q) > 0):
- errors = errors + 1
- node_name_error = 4
- else:
- errors = errors + 1
- node_name_error = 3
- template_values['node_name'] = node_name
- template_values['node_name_error'] = node_name_error
- template_values['node_name_error_message'] = node_name_error_messages[node_name_error]
- # Verification: title
- node_title_error = 0
- node_title_error_messages = ['',
- u'请输入节点标题',
- u'节点标题长度不能超过 32 个字符'
- ]
- node_title = request.POST['title'].strip()
- if (len(node_title) == 0):
- errors = errors + 1
- node_title_error = 1
- else:
- if (len(node_title) > 32):
- errors = errors + 1
- node_title_error = 2
- template_values['node_title'] = node_title
- template_values['node_title_error'] = node_title_error
- template_values['node_title_error_message'] = node_title_error_messages[node_title_error]
- # Verification: title
- node_title_alternative_error = 0