def site_create(request): if not request.user.has_perm('tracker.add_site'): messages.error(request, 'Unfortunately, you do not have access to create a new site.') return redirect('sites') new_user = not Visit.objects.filter(site_user__site__users=request.user).exists() if request.method == 'POST': form = SiteForm(request.POST) if form.is_valid(): site = form.save() site.identifier = Site.generate_identifier() site.secret_key = Site.generate_identifier() site.users.add(request.user) site.save() if new_user: return redirect(reverse('site', args=[site.identifier])) messages.info(request, "'%s' was created." % (site.name)) return redirect('sites') else: form = SiteForm() return { 'TEMPLATE': 'www/site_update.html', 'form': form, 'new_user': new_user, }
def handle(self, *args, **options): user = first(User.objects.filter(username='******')[:1]) if user: user.delete() user = User(username='******', email='demo') user.set_password('demo') user.save() site = first(Site.objects.filter(identifier='demo')[:1]) if site: site.delete() site = Site(name='Sample demo for Wham', identifier='demo', secret_key='asdf1234', url='http://example.com') site.save() site.users.add(user) site.save() for x in range(1, 10): email = 'user' + str(x) + '@example.com' authenticated_site_user = AuthenticatedSiteUser(user_id=str(x), email=email, username='******' + str(x), number_of_visits=9, number_of_sessions=9) authenticated_site_user.save() site_user = SiteUser(site=site, authenticated_site_user=authenticated_site_user, sf_user_id=Site.generate_identifier(), number_of_visits=9, number_of_sessions=9) site_user.save() for y in range(1, 10): created_datetime = (timezone.now() - timedelta(minutes=y + randint(1, 9))) visit = Visit(created=created_datetime, site_user=site_user, ip_address='127.0.0.1', user_id=str(x), email=email, username='******' + str(x), url='http://example.com/' + str(randint(44, 88)) + '.html', referrer='http://google.com/') visit.save() if y == 1: site_user.first_visit = visit authenticated_site_user.first_visit = visit session = Session(visit=visit) session.save() site_user.first_session = session authenticated_site_user.first_session = session elif y == 9: site_user.last_visit = visit authenticated_site_user.last_visit = visit session = Session(visit=visit) session.save() site_user.last_session = session authenticated_site_user.last_session = session site_user.save() authenticated_site_user.save() self.stdout.write('Demo data is loaded.')
def inner_decorator(request, *args, **kwargs): site_identifier = kwargs.get('site_identifier', None) site = Site.get_by_site_identifier(site_identifier) if not site or not site.users.filter(id=request.user.id): print site.users.all() messages.error(request, 'Either that site is invalid or you do not have access.') return redirect('login') return func(request, *args, **kwargs)
def site_update(request, site_identifier): if not request.user.has_perm('tracker.change_site'): messages.error(request, 'Unfortunately, you do not have access to edit the site.') return redirect('sites') site = Site.get_by_site_identifier(site_identifier) form = SiteForm(instance=site) if request.method == 'POST': form = SiteForm(request.POST, instance=site) if form.is_valid(): site = form.save() messages.info(request, "<em>%s</em> was updated." % (site.name)) return redirect('sites') return { 'TEMPLATE': 'www/site_update.html', 'form': form, }
def site(request, site_identifier): site = Site.get_by_site_identifier(site_identifier) query = Q() filters = {} if request.method == 'POST': if 'segment' in request.POST: # TODO: Store the filters into a segmentation model # Segment model has pickled version of Q() crazyness, total count the last time the segment ran, last time it ran, FK to site qs = convert_to_querystring(request.POST) return redirect('%s?%s' % (request.path, qs)) else: raise Exception('Incorrect POST') (query, filters) = _get_filter_query(request) # print query # print filters # TODO: Abiliity to change time period. time_period = (timezone.now() - timedelta(days=30)) filtered_authenticated_site_users = AuthenticatedSiteUser.get_filtered_authenticated_site_users(site, time_period, query) page_size = 10 paginator = Paginator(filtered_authenticated_site_users, page_size) authenticated_site_users_count = paginator.count if filters: authenticated_site_users_count = AuthenticatedSiteUser.get_authenticated_site_users_count(site, time_period) site_users_count = SiteUser.get_site_users_count(site) page = request.GET.get('p') try: paginated_authenticated_site_users = paginator.page(page) except PageNotAnInteger: paginated_authenticated_site_users = paginator.page(1) except EmptyPage: paginated_authenticated_site_users = paginator.page(paginator.num_pages) authenticated_site_users_counts_dict = {} authenticated_site_users_counts = [] for user in filtered_authenticated_site_users: date = user.last_visit_created.date() if date in authenticated_site_users_counts_dict: authenticated_site_users_counts_dict[date] = authenticated_site_users_counts_dict[date] + 1 else: authenticated_site_users_counts_dict[date] = 1 site_users_counts_dict = Visit.get_filtered_site_users_grouped_by_date(site, time_period) site_users_counts = [] numdays = 30 date_list = [ datetime.today().date() - timedelta(days=x) for x in range(0, numdays) ] for date in date_list: if date in site_users_counts_dict: site_users_counts.append(site_users_counts_dict[date]) else: site_users_counts.append(0) if date in authenticated_site_users_counts_dict: authenticated_site_users_counts.append(authenticated_site_users_counts_dict[date]) else: authenticated_site_users_counts.append(0) highest_site_user_count = max(authenticated_site_users_counts + site_users_counts) return { 'TEMPLATE': 'www/site.html', 'site': site, 'filters': filters, 'paginated_authenticated_site_users': paginated_authenticated_site_users, 'filtered_authenticated_site_users_count': paginator.count, 'filtered_authenticated_site_users_ratio': (float(paginator.count) / float(authenticated_site_users_count)) * 100 if authenticated_site_users_count else 0, 'authenticated_site_users_count': authenticated_site_users_count, 'site_users_count': site_users_count, 'authenticated_site_users_ratio': (float(authenticated_site_users_count) / float(site_users_count)) * 100 if site_users_count else 0, 'days': range(1, 30), 'authenticated_site_users_counts': authenticated_site_users_counts, 'site_users_counts': site_users_counts, 'highest_site_user_count': highest_site_user_count, }