Golang appengine-user.String类(方法)实例源码

下面列出了Golang appengine-user.String 类(方法)源码代码实例,从而了解它的用法。

作者:kshedde    项目:randomizatio   
// Edit_sharing
func Edit_sharing(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")
	shr := strings.Split(pkey, "::")
	owner := shr[0]
	project_name := shr[1]

	if strings.ToLower(owner) != strings.ToLower(user.String()) {
		msg := "Only the owner of a project can manage sharing."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	shared_users, err := Get_shared_users(pkey, &c)
	if err != nil {
		shared_users = make([]string, 0)
		c.Infof("Failed to retrieve sharing: %v %v", project_name, owner)
	}

	type TV struct {
		User           string
		LoggedIn       bool
		SharedUsers    []string
		AnySharedUsers bool
		ProjectName    string
		Pkey           string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.SharedUsers = shared_users
	template_values.AnySharedUsers = len(shared_users) > 0
	template_values.ProjectName = project_name
	template_values.Pkey = pkey

	tmpl, err := template.ParseFiles("header.html",
		"edit_sharing.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "edit_sharing.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step2 asks if the subject-level data are to be logged.
func Create_project_step2(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	user := user.Current(c)
	project_name := r.FormValue("project_name")

	// Check if the project name has already been used.
	pkey := user.String() + "::" + project_name
	key := datastore.NewKey(c, "EncodedProject", pkey, 0, nil)
	var pr EncodedProject
	err := datastore.Get(c, key, &pr)
	if err == nil {
		msg := fmt.Sprintf("A project named \"%s\" belonging to user %s already exists.", project_name, user.String())
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	type TV struct {
		User     string
		LoggedIn bool
		Name     string
		Pkey     string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")

	tmpl, err := template.ParseFiles("header.html",
		"create_project_step2.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step2.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step1 gets the project name from the user.
func Delete_project_step1(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)

	_, projlist, err := GetProjects(user.String(), false, &c)
	if err != nil {
		msg := "A datastore error occured, your projects cannot be retrieved."
		c.Errorf("Delete_project_step1: %v", err)
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	if len(projlist) == 0 {
		msg := "You are not the owner of any projects.  A project can only be deleted by its owner."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	type TV struct {
		User     string
		LoggedIn bool
		Proj     []*EncodedProjectView
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.Proj = Format_encoded_projects(projlist)
	template_values.LoggedIn = user != nil

	tmpl, err := template.ParseFiles("header.html",
		"delete_project_step1.html")
	if err != nil {
		c.Errorf("Delete_project_step1: %v", err)
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "delete_project_step1.html",
		template_values); err != nil {
		c.Errorf("Delete_project_step1: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step1 gets the project name from the user.
func Create_project_step1(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)

	type TV struct {
		User     string
		LoggedIn bool
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil

	tmpl, err := template.ParseFiles("header.html",
		"create_project_step1.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step1.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
func Copy_project(w http.ResponseWriter, r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	ok := Check_access(user, pkey, &c, &w, r)

	if !ok {
		msg := "Only the project owner can copy a project."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		return
	}

	key := datastore.NewKey(c, "EncodedProject", pkey, 0, nil)
	var eproj EncodedProject
	err := datastore.Get(c, key, &eproj)
	if err != nil {
		c.Errorf("Copy_project: %v", err)
		msg := "Unknown datastore error."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		return
	}

	type TV struct {
		User        string
		LoggedIn    bool
		Pkey        string
		ProjectName string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Pkey = pkey
	template_values.ProjectName = eproj.Name

	tmpl, err := template.ParseFiles("header.html", "copy_project.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "copy_project.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
func Dashboard(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)

	_, projlist, err := GetProjects(user.String(), true, &c)
	if err != nil {
		msg := "A datastore error occured, projects cannot be retrieved."
		c.Errorf("Dashboard: %v", err)
		return_msg := "Return to dashboard"
		Message_page(w, r, nil, msg, return_msg, "/dashboard")
		return
	}

	type TV struct {
		User     string
		LoggedIn bool
		PRN      bool
		PR       []*EncodedProjectView
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.PR = Format_encoded_projects(projlist)
	template_values.PRN = len(projlist) > 0
	template_values.LoggedIn = user != nil

	tmpl, err := template.ParseFiles("header.html", "dashboard.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "dashboard.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Confirm_add_comment
func Confirm_add_comment(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	if ok := Check_access(user, pkey, &c, &w, r); !ok {
		return
	}

	proj, err := Get_project_from_key(pkey, &c)
	if err != nil {
		msg := "Datastore error, unable to add comment."
		return_msg := "Return to project"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		c.Errorf("Confirm_add_comment [1]: %v", err)
		return
	}

	comment_text := r.FormValue("comment_text")
	comment_text = strings.TrimSpace(comment_text)
	comment_lines := strings.Split(comment_text, "\n")

	if len(comment_text) == 0 {
		msg := "No comment was entered."
		return_msg := "Return to project"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		return
	}

	comment := new(Comment)
	comment.Person = user.String()
	comment.DateTime = time.Now()
	loc, _ := time.LoadLocation("America/New_York")
	t := comment.DateTime.In(loc)
	comment.Date = t.Format("2006-1-2")
	comment.Time = t.Format("3:04pm")
	comment.Comment = comment_lines
	proj.Comments = append(proj.Comments, comment)

	Store_project(proj, pkey, &c)

	msg := "Your comment has been added to the project."
	return_msg := "Return to project"
	Message_page(w, r, user, msg, return_msg,
		"/project_dashboard?pkey="+pkey)
}

作者:kshedde    项目:randomizatio   
// Create_project_step4
func Create_project_step4(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	user := user.Current(c)

	numgroups, _ := strconv.Atoi(r.FormValue("numgroups"))

	type TV struct {
		User         string
		LoggedIn     bool
		Name         string
		Pkey         string
		StoreRawData bool
		NumGroups    int
		IX           []int
	}

	// Group numbers (they don't have names yet)
	IX := make([]int, numgroups, numgroups)
	for i := 0; i < numgroups; i++ {
		IX[i] = i + 1
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")
	template_values.StoreRawData = r.FormValue("store_rawdata") == "true"
	template_values.IX = IX
	template_values.NumGroups = numgroups

	tmpl, err := template.ParseFiles("header.html",
		"create_project_step4.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step4.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// View_comment
func View_comments(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	if ok := Check_access(user, pkey, &c, &w, r); !ok {
		return
	}

	PR, _ := Get_project_from_key(pkey, &c)
	PV := Format_project(PR)

	for _, c := range PV.Comments {
		c.Date = c.DateTime.Format("2006-1-2")
		c.Time = c.DateTime.Format("3:04pm")
	}

	type TV struct {
		User         string
		LoggedIn     bool
		PR           *Project
		PV           *ProjectView
		Pkey         string
		Any_comments bool
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.PR = PR
	template_values.PV = PV
	template_values.Any_comments = len(PR.Comments) > 0
	template_values.Pkey = pkey

	tmpl, err := template.ParseFiles("header.html",
		"view_comments.html")
	if err != nil {
		c.Errorf("View_comments: %v", err)
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "view_comments.html",
		template_values); err != nil {
		c.Errorf("View_comments: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
func validation_error_step8(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	user := user.Current(c)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	type TV struct {
		User          string
		LoggedIn      bool
		Name          string
		NumGroups     int
		Pkey          string
		GroupNames    string
		StoreRawData  bool
		Numvar        int
		SamplingRates string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")
	template_values.GroupNames = r.FormValue("group_names")
	template_values.NumGroups, _ = strconv.Atoi(r.FormValue("numgroups"))
	template_values.Numvar, _ = strconv.Atoi(r.FormValue("numvar"))
	template_values.StoreRawData = r.FormValue("store_rawdata") == "true"
	template_values.SamplingRates = r.FormValue("rates")

	tmpl, err := template.ParseFiles("header.html",
		"validation_error_step8.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "validation_error_step8.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Delete_project_step2 confirms that a project should be deleted.
func Delete_project_step2(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	user := user.Current(c)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	pkey := r.FormValue("project_list")
	svec := strings.Split(pkey, "::")

	type TV struct {
		User        string
		LoggedIn    bool
		ProjectName string
		Pkey        string
		Nokey       bool
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Pkey = pkey
	if len(svec) >= 2 {
		template_values.ProjectName = svec[1]
	}
	template_values.Nokey = len(pkey) == 0

	tmpl, err := template.ParseFiles("header.html",
		"delete_project_step2.html")
	if err != nil {
		c.Errorf("Delete_project_step2: %v", err)
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "delete_project_step2.html",
		template_values); err != nil {
		c.Errorf("Delete_project_step2: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// OpenClose_completed
func OpenClose_completed(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	if ok := Check_access(user, pkey, &c, &w, r); !ok {
		msg := "You do not have access to this page."
		return_msg := "Return"
		Message_page(w, r, user, msg, return_msg, "/")
		return
	}

	proj, err := Get_project_from_key(pkey, &c)
	if err != nil {
		msg := "Datastore error: unable to retrieve project."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg, "/project_dashboard?pkey="+pkey)
		return
	}

	if proj.Owner != user.String() {
		msg := "Only the project owner can open or close a project for enrollment."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg, "/project_dashboard?pkey="+pkey)
		return
	}

	status := r.FormValue("open")

	if status == "open" {
		msg := fmt.Sprintf("The project \"%s\" is now open for enrollment.", proj.Name)
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg, "/project_dashboard?pkey="+pkey)
		proj.Open = true
	} else {
		msg := fmt.Sprintf("The project \"%s\" is now closed for enrollment.", proj.Name)
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg, "/project_dashboard?pkey="+pkey)
		proj.Open = false
	}

	Store_project(proj, pkey, &c)
}

作者:kshedde    项目:randomizatio   
// Add_comment
func Add_comment(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	if ok := Check_access(user, pkey, &c, &w, r); !ok {
		return
	}

	proj, _ := Get_project_from_key(pkey, &c)
	PV := Format_project(proj)

	type TV struct {
		User     string
		LoggedIn bool
		PR       *Project
		PV       *ProjectView
		Pkey     string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.PR = proj
	template_values.PV = PV
	template_values.Pkey = pkey

	tmpl, err := template.ParseFiles("header.html",
		"add_comment.html")
	if err != nil {
		c.Errorf("Add_comment: %v", err)
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "add_comment.html",
		template_values); err != nil {
		c.Errorf("Add_comment: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step3 gets the number of treatment groups.
func Create_project_step3(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	user := user.Current(c)

	type TV struct {
		User         string
		LoggedIn     bool
		Name         string
		Pkey         string
		StoreRawData bool
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")
	template_values.StoreRawData = r.FormValue("store_rawdata") == "yes"

	tmpl, err := template.ParseFiles("header.html",
		"create_project_step3.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step3.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Information_page displays a page of information about this application.
func Information_page(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)

	type TV struct {
		User     string
		LoggedIn bool
	}

	template_values := new(TV)
	if user != nil {
		template_values.User = user.String()
	} else {
		template_values.User = ""
	}
	template_values.LoggedIn = user != nil

	tmpl, err := template.ParseFiles("header.html", "information_page.html")
	if err != nil {
		c.Errorf("Information_page: %v", err)
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "information_page.html",
		template_values); err != nil {
		c.Errorf("Information page: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step6
func Create_project_step6(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	user := user.Current(c)

	type TV struct {
		User          string
		LoggedIn      bool
		Name          string
		Pkey          string
		GroupNames    string
		StoreRawData  bool
		SamplingRates string
		NumGroups     int
	}

	numgroups, _ := strconv.Atoi(r.FormValue("numgroups"))

	// Get the sampling rates from the previous page
	group_names_arr := Clean_split(r.FormValue("group_names"), ",")
	sampling_rates := make([]string, numgroups, numgroups)
	for i := 0; i < numgroups; i++ {
		sampling_rates[i] = r.FormValue(fmt.Sprintf("rate%s", group_names_arr[i]))

		x, err := strconv.ParseFloat(sampling_rates[i], 64)
		if (err != nil) || (x <= 0) {
			msg := "The sampling rates must be positive numbers."
			return_msg := "Return to dashboard"
			Message_page(w, r, user, msg, return_msg, "/dashboard")
			return
		}
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")
	template_values.GroupNames = r.FormValue("group_names")
	template_values.StoreRawData = r.FormValue("store_rawdata") == "true"
	template_values.SamplingRates = strings.Join(sampling_rates, ",")
	template_values.NumGroups = numgroups

	tmpl, err := template.ParseFiles("header.html", "create_project_step6.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step6.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Edit_sharing_confirm
func Edit_sharing_confirm(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	spkey := strings.Split(pkey, "::")
	project_name := spkey[1]

	ap := r.FormValue("additional_people")
	add_users := []string{}
	add_users = Clean_split(ap, ",")
	for k, x := range add_users {
		add_users[k] = strings.ToLower(x)
	}

	// Gmail addresses don't use @gmail.com.
	invalid_emails := make([]string, 0)
	for k, x := range add_users {
		uparts := strings.Split(x, "@")
		if len(uparts) != 2 {
			invalid_emails = append(invalid_emails, x)
		} else {
			if uparts[1] == "gmail.com" {
				add_users[k] = uparts[0]
			}
		}
	}

	if len(invalid_emails) > 0 {
		msg := "The project was not shared because the following email addresses are not valid: "
		msg += strings.Join(invalid_emails, ", ") + "."
		return_msg := "Return to project"
		Message_page(w, r, user, msg, return_msg, "/project_dashboard?pkey="+pkey)
		return
	}

	var err error
	err = Add_sharing(pkey, add_users, &c)
	if err != nil {
		msg := "Datastore error: unable to update sharing information."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		c.Errorf("Edit_sharing_confirm [1]: %v", err)
		return
	}

	remove_users := r.Form["remove_users"]
	err = Remove_sharing(pkey, remove_users, &c)
	if err != nil {
		msg := "Datastore error: unable to update sharing information."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		c.Errorf("Edit_sharing_confirm [2]: %v", err)
		return
	}

	type TV struct {
		User        string
		LoggedIn    bool
		ProjectName string
		Pkey        string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.ProjectName = project_name
	template_values.Pkey = pkey

	tmpl, err := template.ParseFiles("header.html",
		"edit_sharing_confirm.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "edit_sharing_confirm.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
// Create_project_step8
func Create_project_step8(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	numgroups, _ := strconv.Atoi(r.FormValue("numgroups"))
	numvar, _ := strconv.Atoi(r.FormValue("numvar"))
	variables, ok := process_variable_info(r, numvar)

	if !ok {
		validation_error_step8(w, r)
		return
	}

	type TV struct {
		User          string
		LoggedIn      bool
		Name          string
		Pkey          string
		IX            []int
		GroupNames    string
		StoreRawData  bool
		NumGroups     int
		Numvar        int
		Variables     string
		SamplingRates string
	}

	IX := make([]int, numvar, numvar)

	for i := 0; i < numvar; i++ {
		IX[i] = i + 1
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Name = r.FormValue("project_name")
	template_values.GroupNames = r.FormValue("group_names")
	template_values.IX = IX
	template_values.NumGroups = numgroups
	template_values.Numvar = numvar
	template_values.Variables = variables
	template_values.StoreRawData = r.FormValue("store_rawdata") == "true"
	template_values.SamplingRates = r.FormValue("rates")

	tmpl, err := template.ParseFiles("header.html",
		"create_project_step8.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "create_project_step8.html",
		template_values); err != nil {
		c.Errorf("Failed to execute template: %v", err)
	}
}

作者:kshedde    项目:randomizatio   
func Copy_project_completed(w http.ResponseWriter, r *http.Request) {

	if r.Method != "GET" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	ok := Check_access(user, pkey, &c, &w, r)

	if !ok {
		msg := "You do not have access to the requested project."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		return
	}

	key := datastore.NewKey(c, "EncodedProject", pkey, 0, nil)
	var eproj EncodedProject
	err := datastore.Get(c, key, &eproj)
	if err != nil {
		msg := "Unknown error, the project was not copied."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		c.Errorf("Copy_project: %v", err)
		return
	}

	eproj_copy := Copy_encoded_project(&eproj)

	// Check if the name is valid (not blank)
	new_name := r.FormValue("new_project_name")
	new_name = strings.TrimSpace(new_name)
	if len(new_name) == 0 {
		msg := "A name for the new project must be provided."
		return_msg := "Return to project dashboard"
		Message_page(w, r, user, msg, return_msg,
			"/project_dashboard?pkey="+pkey)
		return
	}
	eproj_copy.Name = new_name

	// The owner of the copied project is the current user
	eproj_copy.Owner = user.String()

	// Check if the project name has already been used.
	new_pkey := user.String() + "::" + new_name
	new_key := datastore.NewKey(c, "EncodedProject", new_pkey, 0, nil)
	var pr EncodedProject
	err = datastore.Get(c, new_key, &pr)
	if err == nil {
		msg := fmt.Sprintf("A project named \"%s\" belonging to user %s already exists.", new_name,
			user.String())
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	_, err = datastore.Put(c, new_key, eproj_copy)
	if err != nil {
		c.Errorf("Copy_project: %v", err)
		msg := "Unknown error, the project was not copied."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	c.Infof("Copied %s to %s", pkey, new_pkey)
	msg := "The project has been successfully copied."
	return_msg := "Return to dashboard"
	Message_page(w, r, user, msg, return_msg, "/dashboard")
	return
}

作者:kshedde    项目:randomizatio   
// Assign_treatment
func Assign_treatment(w http.ResponseWriter,
	r *http.Request) {

	if r.Method != "POST" {
		Serve404(w)
		return
	}

	c := appengine.NewContext(r)
	user := user.Current(c)
	pkey := r.FormValue("pkey")

	if ok := Check_access(user, pkey, &c, &w, r); !ok {
		return
	}

	if err := r.ParseForm(); err != nil {
		ServeError(&c, w, err)
		return
	}

	proj, err := Get_project_from_key(pkey, &c)
	if err != nil {
		c.Errorf("Assign_treatment %v", err)
		msg := "A datastore error occured, the project could not be loaded."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	subject_id := r.FormValue("subject_id")

	// Check this a second time in case someone lands on this page
	// without going through the previous checks
	// (e.g. inappropriate use of back button on browser).
	ok := check_before_assigning(proj, pkey, subject_id, user, w, r)
	if !ok {
		return
	}

	pview := Format_project(proj)

	fields := strings.Split(r.FormValue("fields"), ",")
	values := strings.Split(r.FormValue("values"), ",")

	// mpv maps variable names to values for the unit that is about
	// to be randomized to a treatment group.
	mpv := make(map[string]string)
	for i, x := range fields {
		mpv[x] = values[i]
	}

	ax, err := Do_assignment(&mpv, proj, subject_id, user.String())
	if err != nil {
		c.Errorf("%v", err)
	}

	proj.Modified = time.Now()

	// Update the project in the database.
	eproj, _ := Encode_Project(proj)
	key := datastore.NewKey(c, "EncodedProject", pkey, 0, nil)
	_, err = datastore.Put(c, key, eproj)
	if err != nil {
		c.Errorf("Assign_treatment: %v", err)
		msg := "A datastore error occured, the project could not be updated."
		return_msg := "Return to dashboard"
		Message_page(w, r, user, msg, return_msg, "/dashboard")
		return
	}

	type TV struct {
		User      string
		LoggedIn  bool
		PR        *Project
		PV        *ProjectView
		NumGroups int
		Ax        string
		Pkey      string
	}

	template_values := new(TV)
	template_values.User = user.String()
	template_values.LoggedIn = user != nil
	template_values.Ax = ax
	template_values.PR = proj
	template_values.PV = pview
	template_values.NumGroups = len(proj.GroupNames)
	template_values.Pkey = pkey

	tmpl, err := template.ParseFiles("header.html",
		"assign_treatment.html")
	if err != nil {
		ServeError(&c, w, err)
		return
	}

	if err := tmpl.ExecuteTemplate(w, "assign_treatment.html",
		template_values); err != nil {
//.........这里部分代码省略.........


问题


面经


文章

微信
公众号

扫码关注公众号