knitr::opts_chunk$set(echo = TRUE)

makecondition

library(dplyr)
# library(rmdgrader)
library(econDS)
library(tidyverse)
library(googledrive)
.root <- function(){
  "/Users/martinl/Github/course-dashboard-programming-for-data-science"
}
datafilename <- 
    file.path(.root(),params$gradingFolder,params$title,"data4step3.Rdata")
  load(datafilename, envir = .GlobalEnv)
correctAnsFilename = 
    file.path(
      .root(), params$ansfilename
    ) 
gradeSavingFilename <- 
  file.path(.root(),params$gradingFolder,params$title,"data4step4.Rdata")
load(gradeSavingFilename, envir=.GlobalEnv)
returnFolder <-
  file.path(.root(), params$submissionFolder, params$title, "return")
problemFolder <- 
  file.path(returnFolder, "cannotSynthesized")
copy2returnGDfolderFilename = 
  file.path(.root(), params$gradingFolder, params$title,
            "data4step5.Rdata")
classDriveFolderPath = params$classDriveFolderPath 
if(!dir.exists(problemFolder)) dir.create(problemFolder)
ansLabels <- colnames(tb_grades %>% select(contains("ans")))
load(
  file.path(
    .root(),"109-1-completeRoster.Rdata"),
  envir = .GlobalEnv
)
if(!dir.exists(returnFolder)) dir.create(returnFolder)

Retrieve Process

pe <- Process()
pe$inBatch_studentsRmds$tryGet_list_codeChunks()

only4HW8 ={
  purrr::walk(
    seq_along(pe$studentsRmds),
    ~{
      names(pe$studentsRmds[[.x]]$codeChunksProcessed$list_codeChunks) %>%
      stringr::str_replace("ans12", "ans12.") %>%
      stringr::str_replace("ans13", "ans13.") %>%
      stringr::str_replace("data12", "data12.") %>%
      stringr::str_replace("data13", "data13.") ->
      names(pe$studentsRmds[[.x]]$codeChunksProcessed$list_codeChunks)
    }
  )
}

pe$correctAnsFilename$tryGet_list_codeChunks()

Return

Produce returnRmd

re <- Return(pe, returnFolderpath = params$localGDReturnFolderPath)
# generate a template from correct ans Rmd as a holder to fill in student's codes
re$template$generate_holder()
# generate students returnRmd in batch
re$inBatch$generate_returnRmd()
# Each student's returnRmd lines will be:
re$studentRmds$HW8_410672033.Rmd$returnRmd$lines

You can also generate only one student's returnRmd at a time:

# Generate one student's returnRmd lines
re$studentRmds$HW8_410674270.Rmd$returnRmd_generate()

Return to google drive

Once returnRmd lines are generated, user can return them in batch:

re$inBatch$return()

# If regret, user can delete them in batch as well:
re$inBatch$delete()

Individual return/delete is also possible:

# return to one student:
re$studentRmds$HW8_410672033.Rmd$returnRmd$return()
# if somehow user regret, he/she can delete it:
re$studentRmds$HW8_410672033.Rmd$returnRmd$delete()

Fire dispute issue

deadline <- lubridate::today()+lubridate::days(7)
content <-
{
  glue::glue("問題反應截止日期: {deadline}

請用以下格式來寫:(一人請只留一則訊息,裡頭包含你所有的問題,否則會影響後續的程式處理)

---

學號:411073007

ans11
我的答案是 .... 但.....(陳述內容自定)

ans31
我的答案是.... 但 ....(陳述內容自定)")
}
title = glue::glue("{params$title} 批改方式問題")
post_disputeIssue2Github(
  repoUrl = params$disputeGithub,
  title=title,
  content=content
) -> response

Setup individual return GD folder

THIS IS DONE ONLY ONCE EACH SEMESTER to setup each student's return folder:

result_setupIndividualReturnFolder = {
  gd_returnFolderIndividuals <-
    create_individualGoogleDriveReturnFolder(classDriveFolderPath, roster)

  gd_returnFolderIndividuals_shared <- 
    share_gdReturnFolders(gd_returnFolderIndividuals)

  destfile = 
    file.path(
      .root(), params$gradingFolder, params$title, "gd_returnFolderIndividuals_shared.Rdata"
    )
  save(gd_returnFolderIndividuals_shared,
       file=destfile)
  gd_returnFolderIndividuals_shared
}
replacement <- list(
  studentname="謝琪",
  examTitle="Midterm1",
  grade="10")
contentTemplate <- "{studentname}同學好, \n你的{examTitle}成績是{grade}。\n祝學習愉快\n茂廷老師"
#' Generate content with keywords replaced with values defined in replacement object
#'
#' @param contentTemplate A character vector of content template, keywords to be replaced must formed as `{keyword}` as it is taken care by glue::glue()
#' @param replacement A list of keyword=value pairs
#'
#' @return
#' @export
#'
#' @examples none.
generate_emailContent <- function(contentTemplate, replacement){
  contentTemplate <- paste0(contentTemplate, collapse="\n")
  with(
    replacement,
    glue::glue(contentTemplate)
  )
}

generate_emailContent(contentTemplate, replacement)


tpemartin/rmdgrader documentation built on Nov. 22, 2022, 6:39 p.m.