Skip to content

Commit

Permalink
Config, Staff (#2)
Browse files Browse the repository at this point in the history
- Add Configuration
- Add Staff
- Adjust Students
  • Loading branch information
msheldont4e authored Jan 19, 2021
1 parent 78d69fc commit 7bef69a
Show file tree
Hide file tree
Showing 5 changed files with 258 additions and 26 deletions.
58 changes: 58 additions & 0 deletions configuration.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
[
{
"key": "baseurl",
"type": "input",
"defaultValue": "",
"templateOptions": {
"label": "Base URI",
"required": true,
"placeholder": "https://customername.powerschool.com"
}
},
{
"key": "apiKey",
"type": "input",
"defaultValue": "",
"templateOptions": {
"label": "Client Key",
"required": true
}
},
{
"key": "apiSecret",
"type": "input",
"defaultValue": "",
"templateOptions": {
"label": "Client Secret",
"type": "password",
"required": true
}
},
{
"key": "expansions",
"type": "input",
"defaultValue": "demographics, school_enrollment, contact_info",
"templateOptions": {
"label": "Expansions",
"required": true
}
},
{
"key": "extensions",
"type": "input",
"defaultValue": "",
"templateOptions": {
"label": "Extensions",
"required": true
}
},
{
"key": "filter",
"type": "input",
"defaultValue": "name.last_name==*;school_enrollment.enroll_status_code==(-1,0)",
"templateOptions": {
"label": "Filter",
"required": false
}
}
]
17 changes: 9 additions & 8 deletions departments.ps1 → staff.departments.ps1
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
#Config
$baseurl = "https://<CUSTOMER>.powerschool.com";
$apiKey = "<KEY>";
$apiSecret = "<SECRET>";
$config = ConvertFrom-Json $configuration;
$expansions = $config.expansions -split (",");
$extensions = $config.extensions -split (",");

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

#Get OAuth Token
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($apiKey):$($apiSecret)") );
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($config.apiKey):$($config.apiSecret)") );
$headers = @{ Authorization = "Basic " + $Token };
$tokenResponse = Invoke-RestMethod -uri "$($baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})
$tokenResponse = Invoke-RestMethod -uri "$($config.baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $($tokenResponse.access_token)")
$headers.Add("Accept", "application/json")

#Get Schools
Write-Verbose -Verbose "Retrieving Schools"
$uri = "$($baseurl)/ws/v1/district/school/count"
$uri = "$($config.baseurl)/ws/v1/district/school/count"
$count = (Invoke-RestMethod $uri -Method GET -Headers $headers ).resource.count
$page = 1;
$schools = [System.Collections.ArrayList]@();
Expand All @@ -26,7 +27,7 @@ while($true)
page = $page;
pagesize = 100;
}
$uri = "$($baseurl)/ws/v1/district/school"
$uri = "$($config.baseurl)/ws/v1/district/school"
$response = Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters

if($response.schools.school -is [array])
Expand Down Expand Up @@ -58,4 +59,4 @@ foreach($s in $schools)
}

$row | ConvertTo-Json -Depth 10
}
}
115 changes: 115 additions & 0 deletions staff.persons.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
#Configuration
$config = ConvertFrom-Json $configuration;
$expansions = $config.expansions -split (",");
$extensions = $config.extensions -split (",");

#Get OAuth Token
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($config.apiKey):$($config.apiSecret)") );
$headers = @{ Authorization = "Basic " + $Token };
$tokenResponse = Invoke-RestMethod -uri "$($config.baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})


$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $($tokenResponse.access_token)")
$headers.Add("Accept", "application/json")

#Get Schools
$uri = "$($config.baseurl)/ws/v1/district/school"
$schools = (Invoke-RestMethod $uri -Method GET -Headers $headers).schools.school


$allstaff = [System.Collections.ArrayList]@();
foreach($school in $schools)
{
#Count Staff
$uri = "$($config.baseurl)/ws/v1/school/$($school.id)/staff/count"
$count = (Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters).resource.count

#Get Staff
Write-Verbose -Verbose "Retrieving Staff ($($school.id))"
$page = 1;
$staff = [System.Collections.ArrayList]@();

while($true)
{
$parameters = @{
expansions = ($expansions -join ',');
page = $page;
pagesize = 100

}
$uri = "$($config.baseurl)/ws/v1/school/$($school.id)/staff"
Write-Verbose -Verbose "Page $($page)";
$response = Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters

if($response.staffs.staff -eq $null) { break; }

if($response.staffs.staff -is [array])
{
[void]$staff.AddRange($response.staffs.staff);
}
else
{
[void]$staff.Add($response.staffs.staff);
}

if($staff.count -lt $count)
{
$page++;
}
else
{
break;
}

}

if($staff.count -gt 0)
{
[void]$allStaff.AddRange($staff);
}
}

function Get-ObjectProperties
{
param ($Object, $Depth = 0, $MaxDepth = 10)
$OutObject = @{};

foreach($prop in $Object.PSObject.properties)
{
if ($prop.TypeNameOfValue -eq "System.Management.Automation.PSCustomObject" -or $prop.TypeNameOfValue -eq "System.Object" -and $Depth -lt $MaxDepth)
{
$OutObject[$prop.Name] = Get-ObjectProperties -Object $prop.Value -Depth ($Depth + 1);
}
else
{
$OutObject[$prop.Name] = "$($prop.Value)";
}
}
return $OutObject;
}

foreach($s in $allstaff)
{
$person = @{};

$person = Get-ObjectProperties -Object $s;

$person['ExternalId'] = if($s.id) { $s.Id } else { $s.local_id }
$person['DisplayName'] = "$($s.Name.first_name) $($s.name.last_name) ($($person.ExternalId))";

$person['Contracts'] = [System.Collections.ArrayList]@();

foreach($school in $s.school_affiliations.school_affiliation)
{
$contract = @{};
$location = @{};

$contract = Get-ObjectProperties -Object $school;
$contract['PersonExternalId'] = $($person.ExternalId)
[void]$person['Contracts'].Add($contract);
}

Write-Output ($person | ConvertTo-Json -Depth 20);
}
62 changes: 62 additions & 0 deletions students.departments.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#Config
$config = ConvertFrom-Json $configuration;
$expansions = $config.expansions -split (",");
$extensions = $config.extensions -split (",");

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

#Get OAuth Token
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($config.apiKey):$($config.apiSecret)") );
$headers = @{ Authorization = "Basic " + $Token };
$tokenResponse = Invoke-RestMethod -uri "$($config.baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $($tokenResponse.access_token)")
$headers.Add("Accept", "application/json")

#Get Schools
Write-Verbose -Verbose "Retrieving Schools"
$uri = "$($config.baseurl)/ws/v1/district/school/count"
$count = (Invoke-RestMethod $uri -Method GET -Headers $headers ).resource.count
$page = 1;
$schools = [System.Collections.ArrayList]@();
while($true)
{
$parameters = @{
page = $page;
pagesize = 100;
}
$uri = "$($config.baseurl)/ws/v1/district/school"
$response = Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters

if($response.schools.school -is [array])
{
[void]$schools.AddRange($response.schools.school);
}
else
{
[void]$schools.Add($response.schools.school);
}

if($schools.count -lt $count)
{
$page++;
}
else
{
break;
}

}

foreach($s in $schools)
{
$row = @{
ExternalId = $s.id;
DisplayName = $s.name;
Code = $s.school_number;
}

$row | ConvertTo-Json -Depth 10
}
32 changes: 14 additions & 18 deletions persons.ps1 → students.persons.ps1
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
#Config
$baseurl = "https://<CUSTOMER>.powerschool.com";
$apiKey = "<KEY>";
$apiSecret = "<SECRET>";
$expansions = @("demographics", "school_enrollment", "contact_info");
$extensions = @();
$filter = "name.last_name==*;school_enrollment.enroll_status_code==(-1,0)"

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
#Configuration
$config = ConvertFrom-Json $configuration;
$expansions = $config.expansions -split (",");
$extensions = $config.extensions -split (",");

#Get OAuth Token
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($apiKey):$($apiSecret)") );
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$Token = [System.Convert]::ToBase64String( [System.Text.Encoding]::ASCII.GetBytes("$($config.apiKey):$($config.apiSecret)") );
$headers = @{ Authorization = "Basic " + $Token };
$tokenResponse = Invoke-RestMethod -uri "$($baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})
$tokenResponse = Invoke-RestMethod -uri "$($config.baseurl)/oauth/access_token" -Method 'POST' -Headers $headers -Body (@{grant_type= "client_credentials";})


$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
Expand All @@ -20,9 +16,9 @@ $headers.Add("Accept", "application/json")


#Count Students
$uri = "$($baseurl)/ws/v1/district/student/count"
$uri = "$($config.baseurl)/ws/v1/district/student/count"
$parameters = @{
q = "name.last_name==*;school_enrollment.enroll_status_code==(-1,0)";
q = $config.filter;
}
$count = (Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters).resource.count

Expand All @@ -36,10 +32,10 @@ while($true)
expansions = ($expansions -join ',');
page = $page;
pagesize = 100
q = $filter;
q = $config.filter;

}
$uri = "$($baseurl)/ws/v1/district/student"
$uri = "$($config.baseurl)/ws/v1/district/student"
Write-Verbose -Verbose "Page $($page)";
$response = Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters

Expand All @@ -65,7 +61,7 @@ while($true)

#Get Schools
Write-Verbose -Verbose "Retrieving Schools"
$uri = "$($baseurl)/ws/v1/district/school/count"
$uri = "$($config.baseurl)/ws/v1/district/school/count"
$count = (Invoke-RestMethod $uri -Method GET -Headers $headers ).resource.count
$page = 1;
$schools = [System.Collections.ArrayList]@();
Expand All @@ -75,7 +71,7 @@ while($true)
page = $page;
pagesize = 100;
}
$uri = "$($baseurl)/ws/v1/district/school"
$uri = "$($config.baseurl)/ws/v1/district/school"
$response = Invoke-RestMethod $uri -Method GET -Headers $headers -Body $parameters

if($response.schools.school -is [array])
Expand Down Expand Up @@ -124,7 +120,7 @@ foreach($student in $students)
$person = Get-ObjectProperties -Object $student;

$person['ExternalId'] = if($student.id) { $student.Id } else { $student.local_id }
$person['DisplayName'] = "$($student.FullNameFL) ($($person.ExternalId))";
$person['DisplayName'] = "$($student.Name.first_name) $($student.name.last_name) ($($person.ExternalId))";

$person['Contracts'] = [System.Collections.ArrayList]@();

Expand Down

0 comments on commit 7bef69a

Please sign in to comment.