def edit_site(request): site = get_site() if not site: return HttpResponseRedirect(reverse('create-site')) if request.method == 'POST': # If the form has been submitted... form = SiteDetailsForm(request.POST) # A form bound to the POST data if form.is_valid(): # All validation rules pass site.name = form.cleaned_data['name'].strip() site.timezone = form.cleaned_data['timezone'].strip() site.twitter = form.cleaned_data['twitter'] or None site.offline = form.cleaned_data['offline'] or None site.put() site.expire_assets() else: site = get_site() if site: site_details = { 'name': site.name, 'timezone': site.timezone, 'slug': site.slug, 'hostnames': ",".join(site.hostnames), 'google_analytics_code': site.google_analytics_code, 'google_site_verification': site.google_site_verification, 'twitter': site.twitter, } form = SiteDetailsForm(site_details) else: form = SiteDetailsForm() # An unbound form return render_to_response('eventsite/admin.html', locals(), context_instance=RequestContext(request))
def save(self): site=get_site() timezone=pytz.timezone(site.timezone) cleaned_data=self.cleaned_data profile=get_current_profile() if profile.userlevel > 9: credit_name, credit_link= "Staff", None status='approved' approved_on=datetime.now() else: credit_name, credit_link = profile.nickname, profile.link status='submitted' approved_on=None event=Event(title=cleaned_data.get("title"), link=cleaned_data.get("link") or None, description=cleaned_data.get("description")[:250] or None, start=timezone.localize(datetime.combine(cleaned_data.get("start_date"),cleaned_data.get("start_time"))), end=timezone.localize(datetime.combine(cleaned_data.get("end_date") or cleaned_data.get("start_date"),cleaned_data.get("end_time"))), location=cleaned_data.get("location") or None, submitted_by=get_current_profile(), status=status, site=get_site(), cost=cleaned_data.get("cost"), credit_name=credit_name, credit_link=credit_link, approved_on=approved_on, approved_by=profile, ) event.put() return event
def edit_site(request): site=get_site() if not site: return HttpResponseRedirect(reverse('create-site')) if request.method == 'POST': # If the form has been submitted... form = SiteDetailsForm(request.POST) # A form bound to the POST data if form.is_valid(): # All validation rules pass site.name=form.cleaned_data['name'].strip() site.timezone= form.cleaned_data['timezone'].strip() site.audience=form.cleaned_data['audience'].strip() site.hostnames=form.cleaned_data['hostnames'] site.google_site_verification=form.cleaned_data['google_site_verification'].strip() site.google_analytics_code=form.cleaned_data['google_analytics_code'].strip() site.twitter=form.cleaned_data['twitter'] or None site.bsa_code=form.cleaned_data['bsa_code'] or None site.offline=form.cleaned_data['offline'] or None site.put() site.expire_assets() else: site=get_site() if site: site_details={'name':site.name, 'timezone':site.timezone, 'slug':site.slug, 'audience': site.audience, 'hostnames':",".join(site.hostnames), 'google_analytics_code':site.google_analytics_code, 'google_site_verification':site.google_site_verification, 'twitter':site.twitter, } form=SiteDetailsForm(site_details) else: form = SiteDetailsForm() # An unbound form return render_to_response('eventsite/admin.html', locals(), context_instance=RequestContext(request))
def naturalday(value, arg=None): """ For date values that are tomorrow, today or yesterday compared to present day returns representing string. Otherwise, returns a string formatted according to settings.DATE_FORMAT. """ try: value = date(value.year, value.month, value.day) except AttributeError: # Passed value wasn't a date object return value except ValueError: # Date arguments out of range return value site = get_site() timezone = pytz.timezone(site.timezone) today = today = utc.localize(datetime.utcnow()).astimezone(timezone).date() delta = value - today if delta.days == 0: return _(u'Today') elif delta.days == 1: return _(u'Tomorrow') elif delta.days == -1: return _(u'Yesterday') return defaultfilters.date(value, arg)
def naturalday(value, arg=None): """ For date values that are tomorrow, today or yesterday compared to present day returns representing string. Otherwise, returns a string formatted according to settings.DATE_FORMAT. """ try: value = date(value.year, value.month, value.day) except AttributeError: # Passed value wasn't a date object return value except ValueError: # Date arguments out of range return value site=get_site() timezone=pytz.timezone(site.timezone) today=today=utc.localize(datetime.utcnow()).astimezone(timezone).date() delta = value - today if delta.days == 0: return _(u'Today') elif delta.days == 1: return _(u'Tomorrow') elif delta.days == -1: return _(u'Yesterday') return defaultfilters.date(value, arg)
def logo(request): site = get_site() if request.method == 'POST': files = get_uploads(request) for upload in files: if site.original_logo: site.original_logo.delete() site.original_logo = upload if site.original_logo_version: site.original_logo_version = site.original_logo_version + 1 else: site.original_logo_version = 1 ext = upload.filename.split('.')[-1] site.logo_asset_href = get_serving_url(str(upload.key()), 512) #site.logo_asset_href=reverse('original-logo',kwargs={'site_slug':site.slug, # 'version':site.original_logo_version, # 'ext':ext}) site.put() site.expire_assets() return HttpResponseRedirect(reverse('logo-upload')) asset_href = site.logo_asset_href upload_url = blobstore.create_upload_url(reverse('logo-upload')) form = LogoUploadForm() return render_to_response('admin/logo.html', locals(), context_instance=RequestContext(request))
def logo(request): site=get_site() if request.method=='POST': files=get_uploads(request) for upload in files: if site.original_logo:site.original_logo.delete() site.original_logo=upload if site.original_logo_version: site.original_logo_version=site.original_logo_version+1 else: site.original_logo_version=1 ext=upload.filename.split('.')[-1] site.logo_asset_href=get_serving_url(str(upload.key()), 512) #site.logo_asset_href=reverse('original-logo',kwargs={'site_slug':site.slug, # 'version':site.original_logo_version, # 'ext':ext}) site.put() site.expire_assets() return HttpResponseRedirect(reverse('logo-upload')) asset_href=site.logo_asset_href upload_url=blobstore.create_upload_url(reverse('logo-upload')) form=LogoUploadForm() return render_to_response('admin/logo.html', locals(), context_instance=RequestContext(request))
def get_current_profile(): site=get_site() user=get_current_user() if not site: return None if not user: return None profile=Profile.get_or_insert(site.slug+user.user_id(), user=user, site=site, subscribes=False) return profile
def naturalweek(day): site=get_site() timezone=site.tz today=today=utc.localize(datetime.utcnow()).astimezone(timezone).date() week=day+relativedelta(weekday=MO(-1)) if week == today+relativedelta(weekday=MO(-1)): return "this week" if week == today+relativedelta(days=+1,weekday=MO(+1)): return "next week" return defaultfilters.date(week, "week of F jS Y")
def get_current_profile(): site = get_site() user = get_current_user() if not site: return None if not user: return None profile = Profile.get_or_insert(site.slug + user.user_id(), user=user, site=site, subscribes=False) return profile
def save(self): site=get_site() mc=SitesMailchimp(parent=site, apikey=self.cleaned_data['mailchimp_api_key']) mc.put() return mc
def clean(self): data = self.cleaned_data #if not (data.get('link') or data.get('description')): # self._errors["link"] = ErrorList(["You must provide either a link or description"]) site=get_site() local_today=utc.localize(datetime.utcnow()).astimezone(site.tz).date() if data.has_key('start_date'): if (data['start_date'] < local_today) and ((data['end_date'] == None) or (data['end_date'] < local_today)): self._errors["start_date"] = ErrorList(["This event occurs in the past"]) return super(EventBasicsForm, self).clean()
def save(self): cleaned_data = self.cleaned_data profile = get_current_profile() from models import ICalendarSource ical = ICalendarSource(site=get_site(), name=cleaned_data['name'], source_link=cleaned_data['link'] or None, ical_href=cleaned_data['ical'], submitted_by=profile, status='submitted', last_fetch=datetime(year=1970, month=1, day=1)) ical.put()
def save(self): cleaned_data=self.cleaned_data profile=get_current_profile() from models import ICalendarSource ical= ICalendarSource(site=get_site(), name=cleaned_data['name'], source_link=cleaned_data['link'] or None, ical_href=cleaned_data['ical'], submitted_by=profile, status='submitted', last_fetch=datetime(year=1970, month=1, day=1) ) ical.put()
def manage_users(request): site=get_site() users= site.profile_set if request.method == 'POST': updated_users=[] for key in request.POST.keys(): #return HttpResponse(str(request.POST)) if key.startswith('set-userlevel-'): u=site.profile_set.filter('slug = ', key[14:]).get() u.userlevel=int(request.POST[key]) updated_users.append(u) db.put(updated_users) return render_to_response('admin/users.html', locals(), context_instance=RequestContext(request))
def save_profile(profile, form): nickname=striptags(form.cleaned_data['nickname'].strip()) profile.nickname=nickname profile.email= form.cleaned_data['email'].strip() profile.slug=unicode(slugify(nickname)) profile.confirmed_at=datetime.now() profile.link=form.cleaned_data['link'] or None profile.put() if profile.subscribes: site=get_site() chimp=site.chimp taskqueue.add(url='/subscriptions/subscribe_email/', params={'apikey': chimp.apikey, 'list_id': chimp.listid, 'email': form.cleaned_data['email']})
def create_and_send_campaign(request): try: if request.method == 'POST': api = pychimp.PyChimp(request.POST['apikey']) campaign = api.campaignCreate( 'regular', { 'list_id': request.POST['listid'], 'subject': request.POST['subject'], 'from_email': request.POST['from_email'], 'from_name': request.POST['from_name'] }, { 'url': request.POST['url'], 'text': "check out this weeks events at %s" % request.POST['url'] }) taskqueue.add(url='/subscriptions/send_campaign/', params={ 'apikey': request.POST['apikey'], 'campaign': campaign, }, countdown=20, name="campaign-%s" % campaign) return HttpResponse("Created campaign %s" % campaign) else: site = get_site() chimp = site.chimp return HttpResponse(""" <form method="POST"> url: <input type="text" value="" name="url"/><br/> subject: <input type="text" value="" name="subject"/><br/> from name: <input type="text" value="" name="from_name"/><br/> from email: <input type="text" value="" name="from_email"/> <input type="hidden" name="apikey" value="%s"/> <input type="hidden" name="listid" value="%s"/> <input type="submit" value="Send"/> </form> """ % (chimp.apikey, chimp.listid)) except Exception, e: logging.error("%s in \n%s" % (traceback.format_exc(), str(request.POST))) HttpResponse("OK")
def replacement_view(request, *args, **kwargs): site=get_site() user=get_current_user() if user and not site: return func(request, *args, **kwargs) if not user: return redirect(create_signin_url(request.get_full_path())) profile=get_current_profile() if not profile.confirmed_at: return redirect(create_profile_confirm_url(request.get_full_path())) request.site= site request.profile=profile return func(request, *args, **kwargs)
def site_context(request): site=get_site() additional_context={'site': site, 'user':get_current_profile(), 'admin':users.is_current_user_admin(), 'logout':users.create_logout_url(reverse('account-signout')), 'links':Link.all().filter('status =','approved').fetch(20) } #additional_context['logo']=get_serving_url(str(site.original_logo.key()), 512) return additional_context
def create_site(request): hostname=request.get_host() site=get_site() if site:return HttpResponseRedirect(reverse('admin-home')) form=SiteCreateForm() if request.method == 'POST': form=SiteCreateForm(request.POST) if form.is_valid(): new_site=models.Eventsite(name=form.cleaned_data['name'].strip(), timezone= form.cleaned_data['timezone'].strip(), audience=form.cleaned_data['audience'].strip(), hostnames=[hostname,], key_name=hostname, slug=form.cleaned_data['slug']) new_site.put() return HttpResponseRedirect(reverse('admin-home')) return render_to_response('eventsite/admin.html', locals(), context_instance=RequestContext(request))
def replacement_view(request, *args, **kwargs): site = get_site() user = get_current_user() if user and not site: return func(request, *args, **kwargs) if not user: return redirect(create_signin_url(request.get_full_path())) profile = get_current_profile() if not profile.confirmed_at: return redirect(create_profile_confirm_url( request.get_full_path())) request.site = site request.profile = profile return func(request, *args, **kwargs)
def save_profile(profile, form): nickname = striptags(form.cleaned_data['nickname'].strip()) profile.nickname = nickname profile.email = form.cleaned_data['email'].strip() profile.slug = unicode(slugify(nickname)) profile.confirmed_at = datetime.now() profile.link = form.cleaned_data['link'] or None profile.put() if profile.subscribes: site = get_site() chimp = site.chimp taskqueue.add(url='/subscriptions/subscribe_email/', params={ 'apikey': chimp.apikey, 'list_id': chimp.listid, 'email': form.cleaned_data['email'] })
def manage_users(request): site = get_site() users = site.profile_set if request.method == 'POST': updated_users = [] for key in request.POST.keys(): #return HttpResponse(str(request.POST)) if key.startswith('set-userlevel-'): u = site.profile_set.filter('slug = ', key[14:]).get() u.userlevel = int(request.POST[key]) updated_users.append(u) db.put(updated_users) return render_to_response('admin/users.html', locals(), context_instance=RequestContext(request))
def clean(self): site=get_site() cleaned_data = self.cleaned_data nickname = cleaned_data.get("nickname") email = cleaned_data.get("email") profile=get_current_profile() existing_profile_with_slug=site.profile_set.filter('slug =', unicode(slugify(nickname))).get() existing_profile_with_email=site.profile_set.filter('email =', email).get() if (existing_profile_with_slug != None and existing_profile_with_slug.key() != profile.key()): msg = u"Someone else already took that nickname!" self._errors["nickname"] = ErrorList([msg]) del cleaned_data['nickname'] if (existing_profile_with_email != None and existing_profile_with_email.key() != profile.key()): msg = u"Someone has already registered with that email" self._errors["email"] = ErrorList([msg]) del cleaned_data['email'] return super(ProfileForm, self).clean()
def configure_mailchimp(request): site = get_site() mc = models.SitesMailchimp.all().ancestor(site).get() if not mc: if request.method == 'POST': form = MailChimpApiKey(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse('configure-mailchimp')) else: form = MailChimpApiKey() return render_to_response('admin/mailchimp_apikey.html', locals(), context_instance=RequestContext(request)) else: chimp = pychimp.PyChimp(mc.apikey) lists = chimp.lists() list_choices = [(l['id'] + '!@!' + l['name'], l['name']) for l in lists] class MailChimpListForm(forms.Form): mailchimp_list = forms.ChoiceField(choices=list_choices) def save(self): mc.listid, mc.listname = self.cleaned_data[ 'mailchimp_list'].split('!@!') mc.put() if request.method == 'POST': form = MailChimpListForm(request.POST) if form.is_valid(): form.save() messages.add_message(request, messages.INFO, "Mailing list configured!") return HttpResponseRedirect(reverse('admin-home')) form = MailChimpListForm() return render_to_response('admin/mailchimp_apikey.html', locals(), context_instance=RequestContext(request)) return HttpResponse(lists)
def save(self): cleaned_data=self.cleaned_data site=get_site() ical=site.icalendarsource_set.filter(' __key__ =', db.Key(cleaned_data['source_key']) ).get() tags=[t.strip() for t in cleaned_data.get("tags","").lower().split(',')] if cleaned_data['state']== 'fetch now': ical.fetch() return if cleaned_data['state']== 'save': state='approved' else: state=cleaned_data['state'] ical.status=state ical.trusted=cleaned_data['trusted'] ical.default_tags=tags ical.put() return ical
def save(self): cleaned_data = self.cleaned_data site = get_site() ical = site.icalendarsource_set.filter( ' __key__ =', db.Key(cleaned_data['source_key'])).get() tags = [ t.strip() for t in cleaned_data.get("tags", "").lower().split(',') ] if cleaned_data['state'] == 'fetch now': ical.fetch() return if cleaned_data['state'] == 'save': state = 'approved' else: state = cleaned_data['state'] ical.status = state ical.trusted = cleaned_data['trusted'] ical.default_tags = tags ical.put() return ical
def create_site(request): hostname = request.get_host() site = get_site() if site: return HttpResponseRedirect(reverse('admin-home')) form = SiteCreateForm() if request.method == 'POST': form = SiteCreateForm(request.POST) if form.is_valid(): new_site = models.Eventsite( name=form.cleaned_data['name'].strip(), timezone=form.cleaned_data['timezone'].strip(), hostnames=[ hostname, ], key_name=hostname, slug=str(slugify(hostname))) new_site.put() return HttpResponseRedirect(reverse('admin-home')) return render_to_response('eventsite/admin.html', locals(), context_instance=RequestContext(request))
def clean(self): site = get_site() cleaned_data = self.cleaned_data nickname = cleaned_data.get("nickname") email = cleaned_data.get("email") profile = get_current_profile() existing_profile_with_slug = site.profile_set.filter( 'slug =', unicode(slugify(nickname))).get() existing_profile_with_email = site.profile_set.filter( 'email =', email).get() if (existing_profile_with_slug != None and existing_profile_with_slug.key() != profile.key()): msg = u"Someone else already took that nickname!" self._errors["nickname"] = ErrorList([msg]) del cleaned_data['nickname'] if (existing_profile_with_email != None and existing_profile_with_email.key() != profile.key()): msg = u"Someone has already registered with that email" self._errors["email"] = ErrorList([msg]) del cleaned_data['email'] return super(ProfileForm, self).clean()
def configure_mailchimp(request): site=get_site() mc=models.SitesMailchimp.all().ancestor(site).get() if not mc: if request.method == 'POST': form=MailChimpApiKey(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse('configure-mailchimp')) else: form = MailChimpApiKey() return render_to_response('admin/mailchimp_apikey.html', locals(), context_instance=RequestContext(request)) else: chimp=pychimp.PyChimp(mc.apikey) lists=chimp.lists() list_choices=[(l['id']+'!@!'+l['name'], l['name']) for l in lists] class MailChimpListForm(forms.Form): mailchimp_list=forms.ChoiceField(choices=list_choices) def save(self): mc.listid, mc.listname=self.cleaned_data['mailchimp_list'].split('!@!') mc.put() if request.method=='POST': form=MailChimpListForm(request.POST) if form.is_valid(): form.save() messages.add_message(request, messages.INFO, "Mailing list configured!") return HttpResponseRedirect(reverse('admin-home')) form=MailChimpListForm() return render_to_response('admin/mailchimp_apikey.html', locals(), context_instance=RequestContext(request)) return HttpResponse(lists)
def create_and_send_campaign(request): try: if request.method == 'POST': api=pychimp.PyChimp(request.POST['apikey']) campaign=api.campaignCreate('regular', {'list_id':request.POST['listid'], 'subject':request.POST['subject'], 'from_email':request.POST['from_email'], 'from_name':request.POST['from_name']}, {'url':request.POST['url'], 'text': "check out this weeks events at %s"% request.POST['url']}) taskqueue.add(url='/subscriptions/send_campaign/', params={'apikey':request.POST['apikey'], 'campaign':campaign, }, countdown=20, name="campaign-%s"% campaign) return HttpResponse("Created campaign %s"% campaign) else: site=get_site() chimp=site.chimp return HttpResponse(""" <form method="POST"> url: <input type="text" value="" name="url"/><br/> subject: <input type="text" value="" name="subject"/><br/> from name: <input type="text" value="" name="from_name"/><br/> from email: <input type="text" value="" name="from_email"/> <input type="hidden" name="apikey" value="%s"/> <input type="hidden" name="listid" value="%s"/> <input type="submit" value="Send"/> </form> """% (chimp.apikey, chimp.listid)) except Exception,e: logging.error("%s in \n%s"% (traceback.format_exc(),str(request.POST))) HttpResponse("OK")
def get_object(self, bits): site = get_site() return site
def week_url(day): site=get_site() monday=day+relativedelta(MO(-1)) return "http://%s/week-of/%s" %( site.hostnames[0], monday.strftime("%Y-%m-%d"))
def save(self): site = get_site() mc = SitesMailchimp(parent=site, apikey=self.cleaned_data['mailchimp_api_key']) mc.put() return mc
def index(request): site = get_site() if not site: return HttpResponseRedirect(reverse('create-site')) else: return HttpResponseRedirect(reverse('edit-site'))
def week_url(day): site = get_site() monday = day + relativedelta(MO(-1)) return "http://%s/week-of/%s" % (site.hostnames[0], monday.strftime("%Y-%m-%d"))
def index(request): site=get_site() if not site: return HttpResponseRedirect(reverse('create-site')) else: return HttpResponseRedirect(reverse('edit-site'))
def get_object(self, bits): site=get_site() return site