public/Set-MoodleCohort.ps1
<#
.SYNOPSIS Updates a Moodle cohort. .PARAMETER Id Specifies the unique ID of the cohort to update. .PARAMETER Cohort Specifies the cohort to update. .PARAMETER CategoryId Specifies the ID of the course category to which the cohort should apply. .PARAMETER Category Specifies the course category to which the cohort should apply. .PARAMETER System Specifies that this should be a system-level cohort. .PARAMETER Name Specifies the name of the cohort. .PARAMETER Description Specifies the description of the cohort. .PARAMETER DescriptionFormat Specifies the format of the given description. .PARAMETER Visible Specifies whether the chort should be visible. .PARAMETER Theme Specifies the theme of the cohort. .PARAMETER IdNumber Specifies a free-text ID Number for the cohort. .EXAMPLE Set-MoodleCohort -Id 1 "Teachers' Pets" -Description 'Our favourite students.' Updates cohort #1's name and description. #> function Set-MoodleCohort { [CmdletBinding(SupportsShouldProcess)] param ( [Parameter(Mandatory,ParameterSetName='id-system',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='id-catid',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='id-category',ValueFromPipelineByPropertyName)] [int] $Id, [Parameter(Mandatory,ParameterSetName='cohort-system',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='cohort-catid',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='cohort-category',ValueFromPipelineByPropertyName)] [MoodleCohort] $Cohort, [Parameter(Mandatory,ParameterSetName='id-system',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='cohort-system',ValueFromPipelineByPropertyName)] [switch] $System, [Parameter(Mandatory,ParameterSetName='id-catid',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='cohort-catid',ValueFromPipelineByPropertyName)] [int] $CategoryId, [Parameter(Mandatory,ParameterSetName='id-category',ValueFromPipelineByPropertyName)] [Parameter(Mandatory,ParameterSetName='cohort-category',ValueFromPipelineByPropertyName)] [MoodleCourseCategory] $Category, [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string] $Name, [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [string] $IdNumber, [Parameter(ValueFromPipelineByPropertyName)] [string] $Description, [Parameter(ValueFromPipelineByPropertyName)] [MoodleDescriptionFormat] $DescriptionFormat, [Parameter(ValueFromPipelineByPropertyName)] [bool] $Visible, [Parameter(ValueFromPipelineByPropertyName)] [string] $Theme ) Begin { $Url = $PsCmdlet.SessionState.PSVariable.GetValue("_MoodleUrl") $Token = $PsCmdlet.SessionState.PSVariable.GetValue("_MoodleToken") if (!$Url -or !$Token) { Throw "You must call the Connect-Moodle cmdlet before calling any other cmdlets." } $function = 'core_cohort_update_cohorts' $path = "webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json" } Process { if ($Cohort) { $Id = $Cohort.Id } $params = @{ name = $Name idnumber = $IdNumber description = $Description descriptionformat = [int]$DescriptionFormat visible = if ($Visible) { 1 } else { 0 } theme = $Theme } $body = @{ 'cohorts[0][id]' = $Id } foreach ($key in $params.Keys) { if ($PSBoundParameters.ContainsKey($key)) { $body["cohorts[0][$key]"] = $params[$key] } } if ($System) { $body['cohorts[0][categorytype][type]'] = 'system' $body['cohorts[0][categorytype][value]'] = '0' } else { if ($Category) { $CategoryId = $Category.Id } if ($CategoryId) { $body['cohorts[0][categorytype][type]'] = 'id' $body['cohorts[0][categorytype][value]'] = $CategoryId } } if ($PSCmdlet.ShouldProcess($Id, "Update")) { $result = Invoke-RestMethod -Method Post -Uri ([uri]::new($Url, $path)) -Body $body -ContentType 'application/x-www-form-urlencoded' if ($result.errorcode) { Write-Error $result.message } } } } |