예제 #1
0
 /// <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,
     });
예제 #2
0
        /// <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&lt;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);
        }