/// <summary> /// Adds a new custom column to the Canvas gradebook /// </summary> /// <param name="accessToken">The Canvas access token of the user</param> /// <param name="column">The column to add to the Canvas Gradebook</param> /// <param name="courseId">The id of the course to add the column to</param> /// <param name="userId">The id of the user in <b>this</b> system</param> /// <param name="table">The table to add the custom column to</param> /// <param name="csvFileContent">The contents of the csv file (if applicable) as a string</param> /// <returns>bool: Whether or not this operation succeeded</returns> public bool AddNewColumn(string accessToken, CourseDataColumn column, int courseId, int userId, CourseDataTable table, string csvFileContent) { return(column.ColumnType switch { ColumnType.Custom_Canvas_Column => AddCustomColumn(accessToken, column, courseId, userId), ColumnType.Derived_Data => AddDerivedColumn(accessToken, column, courseId, userId, table), ColumnType.File_Import => AddFileColumn(accessToken, column, courseId, userId, csvFileContent), _ => false, });
/// <summary> /// Returns the list of custom data columns related with the Canvas Gradebook of a particular course /// </summary> /// <param name="accessToken">The Canvas Personal Access Token being used</param> /// <param name="courseId">The id of the course</param> /// <returns>List<CourseDataColumn>: Custom Columns of Canvas Gradebook</returns> public List <CourseDataColumn> GetCustomDataColumns(string accessToken, int courseId) { var custDataColumns = new List <CourseDataColumn>(); var canvasCustCols = _canvasDataAccess.GetCustomColumns(accessToken, courseId); var custColsDb = _dbCtx.CustomDataColumns.Where(x => x.CourseId == courseId).ToList(); foreach (var canvasCol in canvasCustCols) { var currDbCol = custColsDb.Where(x => x.RelatedDataId == canvasCol.Id).FirstOrDefault(); if (currDbCol != null) { // The derived data columns should be loaded last since they derive data from other columns // (hence it being called a "Dervied" column) if (currDbCol.ColumnType != ColumnType.Derived_Data) { CourseDataColumn newKnownCol; if (currDbCol.DataType == ColumnDataType.Number) { newKnownCol = new NumericDataColumn { Name = canvasCol.Title, DataType = currDbCol.DataType, ColumnType = currDbCol.ColumnType, RelatedDataId = canvasCol.Id, CalcRule = currDbCol.CalcRule, ColMaxValue = currDbCol.ColMaxValue, ColMinValue = currDbCol.ColMinValue, ColumnId = Guid.NewGuid() }; ((NumericDataColumn)newKnownCol).Rows = GetCustomDataRowsForNumberColumns(accessToken, courseId, newKnownCol); } else { newKnownCol = new StringDataColumn { Name = canvasCol.Title, DataType = currDbCol.DataType, ColumnType = currDbCol.ColumnType, RelatedDataId = canvasCol.Id, CalcRule = currDbCol.CalcRule, ColMaxValue = currDbCol.ColMaxValue, ColMinValue = currDbCol.ColMinValue, ColumnId = Guid.NewGuid() }; ((StringDataColumn)newKnownCol).Rows = GetCustomDataFromStringColumns(accessToken, courseId, newKnownCol); } custDataColumns.Add(newKnownCol); } } else { var newCol = new CourseDataColumn { Name = canvasCol.Title, RelatedDataId = canvasCol.Id, ColumnType = ColumnType.Custom_Canvas_Column, }; var newColRows = GetCustomColumnDataRowsForUnknownTypes(accessToken, courseId, newCol); newCol.DataType = GetColumnDataType(newColRows[0].Value); if (newColRows != null) { if (newColRows.Count > 0) { } } if (newCol.DataType == ColumnDataType.Number) { var numCol = (NumericDataColumn)newCol; numCol.Rows = new List <NumericDataRow>(); foreach (var row in newColRows) { numCol.Rows.Add(new NumericDataRow { ColumnId = Guid.NewGuid(), AssociatedUser = row.AssociatedUser, Value = double.Parse(row.Value), ValueChanged = false }); } custDataColumns.Add(numCol); } else { var strCol = (StringDataColumn)newCol; strCol.Rows = newColRows; custDataColumns.Add(strCol); } } } return(custDataColumns); }