public/Copy-MoodleCourse.ps1
<#
.SYNOPSIS Copies the details from one Moodle course to another. .PARAMETER Id Specifies the unique ID of the source course. .PARAMETER Course Specifies the source course. .PARAMETER DestinationId Specifies the ID of the destination course. .PARAMETER Clear Specifies whether the destination course detail should be cleared before copying. .PARAMETER IncludeActivities Specifies whether course activities should be copied. .PARAMETER IncludeBlocks Specifies whether course blocks should be copied. .PARAMETER IncludeFilters Specifies whether course filters should be copied. .EXAMPLE Copy-MoodleCourse -Id 1 -DestinationId 2 -IncludeBlocks Copies group #1's details to group #2, including course blocks. #> function Copy-MoodleCourse { [CmdletBinding(SupportsShouldProcess)] param ( [Parameter(Mandatory,ParameterSetName='id')] [int] $Id, [Parameter(Mandatory,ValueFromPipeline,ParameterSetName='course')] [MoodleCourse] $Course, [Parameter(Mandatory)] [int] $DestinationId, [switch] $Clear, [switch] $IncludeActivities, [switch] $IncludeBlocks, [switch] $IncludeFilters ) 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_course_import_course' $path = "webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json" } Process { if ($Course) { $Id = $Course.Id } $body = @{ 'importfrom' = $Id 'importto' = $DestinationId 'deletecontent' = if ($Clear) { 1 } else { 0 } 'options[0][name]' = 'activities' 'options[0][value]' = if ($IncludeActivities) { 1 } else { 0 } 'options[1][name]' = 'blocks' 'options[1][value]' = if ($IncludeBlocks) { 1 } else { 0 } 'options[2][name]' = 'filters' 'options[2][value]' = if ($IncludeFilters) { 1 } else { 0 } } if ($PSCmdlet.ShouldProcess($Id, "Copy")) { $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 } } } } |