def _show_public_profile(user): user_dict = cached_users.public_get_user_summary(user.name) md = cached_users.get_metadata(user.name) form = MetadataForm(**md) projects_contributed = cached_users.projects_contributed_cached(user.id) projects_created = cached_users.published_projects_cached(user.id) total_projects_contributed = '{} / {}'.format(cached_users.n_projects_contributed(user.id), n_published()) percentage_tasks_completed = user_dict['n_answers'] * 100 / (n_total_tasks() or 1) if current_user.is_authenticated() and current_user.admin: draft_projects = cached_users.draft_projects(user.id) projects_created.extend(draft_projects) title = "%s · User Profile" % user_dict['fullname'] response = dict(template='/account/public_profile.html', title=title, user=user_dict, projects=projects_contributed, form=form, projects_created=projects_created, metadata=md, can_update=can_update_user_info(current_user, user), total_projects_contributed=total_projects_contributed, percentage_tasks_completed=percentage_tasks_completed) return handle_content_type(response)
def add_metadata(name): """ Admin can add metadata for selected user Redirects to public profile page for selected user. """ user = user_repo.get_by_name(name=name) if not can_update_user_info(current_user, user): abort(403) form = MetadataForm(request.form) if not any(value for value in form.data.values()): user.info['metadata'] = {} user.user_pref = {} elif form.validate(): metadata = dict(admin=current_user.name, time_stamp=time.ctime(), user_type=form.user_type.data, start_time=form.start_time.data, end_time=form.end_time.data, review=form.review.data, timezone=form.timezone.data, profile_name=user.name) user.info['metadata'] = metadata user_pref = {} if form.languages.data: user_pref["languages"] = form.languages.data if form.locations.data: user_pref["locations"] = form.locations.data user.user_pref = user_pref else: projects_contributed = cached_users.projects_contributed_cached(user.id) projects_created = cached_users.published_projects_cached(user.id) metadata = cached_users.get_metadata(user.name) if current_user.is_authenticated() and current_user.admin: draft_projects = cached_users.draft_projects(user.id) projects_created.extend(draft_projects) title = "%s · User Profile" % user.name flash("Please fix the errors", 'message') return render_template('/account/public_profile.html', title=title, user=user, metadata=metadata, projects=projects_contributed, form=form, projects_created=projects_created, input_form=True) user_repo.update(user) cached_users.delete_user_metadata(user.name) delete_memoized(get_user_preferences, user.id) flash("Input saved successfully", "info") return redirect(url_for('account.profile', name=name))