Skip to content

Commit

Permalink
TEOC - v1.0 release changes (#50)
Browse files Browse the repository at this point in the history
* TEOC - v1.0 release changes,
- New Feature: Ability to configure the Team Name format from dashboard.
- New Feature: Ability to view the version history for each incident from dashboard.
- New Feature: Ability to "Save default users for Roles" and "Save default roles for an Incident Type".
- New Feature: Local language support (translations) available for 12 languages.
- Upgraded the Teams toolkit version from v3.7.0 to v4.0.5

* Updated the package-lock.json files

* Update Home.md

* Update README.md
  • Loading branch information
v-royavinash committed Oct 11, 2022
1 parent 46a8693 commit a4e48fb
Show file tree
Hide file tree
Showing 70 changed files with 28,843 additions and 1,254 deletions.
6 changes: 3 additions & 3 deletions Deployment/appPackage/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.11/MicrosoftTeams.schema.json",
"manifestVersion": "1.11",
"version": "0.5.1",
"version": "1.0",
"id": "bef61400-db9b-41d4-a617-403deb7bbe77",
"packageName": "com.microsoft.teams.extension",
"developer": {
Expand All @@ -16,10 +16,10 @@
},
"name": {
"short": "TEOC",
"full": "Microsoft Teams Emergency Operations Center (Preview)"
"full": "Microsoft Teams Emergency Operations Center"
},
"description": {
"short": "Microsoft Teams Emergency Operation Center (Preview)",
"short": "Microsoft Teams Emergency Operation Center",
"full": "The Microsoft Teams Emergency Operations Center (TEOC) solution template leverages the power of the Microsoft 365 platform to centralize incident response, information sharing and field communications using powerful services like Microsoft Lists, SharePoint and more. An open-source solution supported by Microsoft it provides core functionality out of the box or can be extended to meet specific agency requirements."
},
"accentColor": "#FFFFFF",
Expand Down
24 changes: 23 additions & 1 deletion Deployment/azuredeploy.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@
"description": "The ID of the tenant to which the app will be deployed."
}
},
"SharePointSiteName": {
"type": "string",
"minLength": 1,
"metadata": {
"description": "The SharePoint Site Name."
}
},
"m365OauthAuthorityHost": {
"type": "string",
"minLength": 1,
Expand Down Expand Up @@ -294,6 +301,9 @@
},
"m365OauthAuthorityHost": {
"value": "[parameters('m365OauthAuthorityHost')]"
},
"SharePointSiteName": {
"value": "[parameters('SharePointSiteName')]"
}
},
"template": {
Expand Down Expand Up @@ -341,6 +351,13 @@
"metadata": {
"description": "The base name to use for the resources that will be provisioned."
}
},
"SharePointSiteName": {
"type": "string",
"minLength": 1,
"metadata": {
"description": "Provide name for the sharepoint site that will be provisioned."
}
}
},
"variables": {
Expand All @@ -358,7 +375,8 @@
"outlookWebAppClientId": "00000002-0000-0ff1-ce00-000000000000",
"authorizedClientApplicationIds": "[format('{0};{1};{2};{3};{4};{5}', variables('teamsMobileOrDesktopAppClientId'), variables('teamsWebAppClientId'), variables('officeWebAppClientId1'), variables('officeWebAppClientId2'), variables('outlookDesktopAppClientId'), variables('outlookWebAppClientId'))]",
"identifierURI": "[concat(parameters('baseResourceName'), '.azurewebsites.net')]",
"tabAppEndpoint": "[concat(parameters('baseResourceName'), '.azurewebsites.net')]"
"tabAppEndpoint": "[concat(parameters('baseResourceName'), '.azurewebsites.net')]",
"SharePointSiteName": "[parameters('SharePointSiteName')]"
},
"resources": [
{
Expand Down Expand Up @@ -436,6 +454,10 @@
{
"name": "WEBSITE_NODE_DEFAULT_VERSION",
"value": "16.13.0"
},
{
"name": "REACT_APP_SHAREPOINT_SITE_NAME",
"value": "[parameters('SharePointSiteName')]"
}
]
}
Expand Down
35 changes: 24 additions & 11 deletions Deployment/provisioning/EOC-Provision.ps1
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
param([string]$AdminEmail,
[string]$TenantName)

$FilePath = Read-Host "Please enter site template XML schema file path";
$FilePath = Read-Host "Enter site template XML schema file path";
$FilePath = $FilePath.Trim();

Write-Host $FilePath

$TenantName = Read-Host "Please enter your tenant name: (contoso)";
$TenantName = Read-Host "Enter tenant name: (contoso)";
$TenantName = $TenantName.Trim();

$AdminEmail = Read-Host "Please enter your tenant admin email";
$AdminEmail = Read-Host "Enter tenant admin email";
$AdminEmail = $AdminEmail.Trim();

$SiteName = Read-Host "Enter site name. Allowed characters for site name are underscore, dashes, single quotes, and periods (_,-,',.), and can't start or end with a period.";
$SiteName = $SiteName.Trim();

$SiteURL = $SiteName -replace " ",""
# verify the PnP.PowerShell module we need is installed
if (-not (Get-Module -ListAvailable -Name PnP.PowerShell )) {
Write-Warning "Could not find the PnP.PowerShell module, installing it"
Expand All @@ -20,10 +24,8 @@ if (-not (Get-Module -ListAvailable -Name PnP.PowerShell )) {
Write-Host "PnP.PowerShell module found"
}


$TenantURL = "https://$TenantName.sharepoint.com"
#Do not change
$EOCSiteURL = "/sites/TEOCSite"
$EOCSiteURL = "/sites/$SiteURL"

Connect-PnPOnline -Url $TenantURL -Interactive

Expand All @@ -41,18 +43,29 @@ try {
Write-Host "Site doesn't exist, creating new site at $EOCSiteURL"
}

New-PnPSite -Type TeamSiteWithoutMicrosoft365Group -Title TEOC -Url $TenantURL$EOCSiteURL -Owner $AdminEmail -ErrorAction Stop -WarningAction SilentlyContinue
try{
if(($TenantURL+$EOCSiteURL).Length -lt 128){
New-PnPSite -Type TeamSiteWithoutMicrosoft365Group -Title $SiteName -Url $TenantURL$EOCSiteURL -Owner $AdminEmail -ErrorAction Stop -WarningAction SilentlyContinue
}
else{
Write-Host "Site creation failed. Site URL cannot have more than 128 characters." -ErrorAction Stop
return
}
}
catch{
Write-Host "Site creation failed. Site name cannot contain symbols other than underscore, dashes, single quotes, and periods (_,-,',.), and can't start or end with a period."
return;

}
Connect-PnPOnline -Url $TenantURL$EOCSiteURL -Interactive

Write-Host "Creating lists in TEOC site"
Write-Host "Creating lists in $SiteName site"

Invoke-PnPSiteTemplate -Path $FilePath -ErrorAction Stop -WarningAction SilentlyContinue

Write-Host "TEOC App Provision complete."
Write-Host "App Provision complete."
}
catch{

Write-Host "`nError Message: " $_.Exception.Message
Write-Host "`nTEOC App Provisioning failed."
Write-Host "`nApp Provisioning failed."
}
87 changes: 85 additions & 2 deletions Deployment/provisioning/EOC-SiteTemplate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@
<FieldRef Name="Location" />
<FieldRef Name="RoleAssignment" />
<FieldRef Name="IncidentId" />
<FieldRef Name="Severity" />
<FieldRef Name="ReasonForUpdate" />
</ViewFields>
<RowLimit Paged="TRUE">30</RowLimit>
<JSLink>clienttemplates.js</JSLink>
Expand All @@ -179,7 +181,9 @@
<Field Name="RoleAssignment" FromBaseType="FALSE" Type="Note" DisplayName="RoleAssignment" Required="FALSE" EnforceUniqueValues="FALSE" Indexed="FALSE" NumLines="6" RichText="FALSE" Sortable="FALSE" ID="{4d358bc3-6b55-41ea-a23b-543fe291aaec}" Version="2" StaticName="RoleAssignment" SourceID="{{listid:TEOC-IncidentTransaction}}" ColName="ntext2" RowOrdinal="0" />
<Field Type="Text" DisplayName="IncidentId" Required="FALSE" EnforceUniqueValues="FALSE" Indexed="FALSE" MaxLength="255" ID="{b4eaf27a-d1fc-47da-80a9-1dc1ea805c31}" SourceID="{{listid:TEOC-IncidentTransaction}}" StaticName="IncidentId" Name="IncidentId" ColName="nvarchar16" RowOrdinal="0" />
<Field DisplayName="TeamWebURL" Type="Note" Required="FALSE" ID="{ac01043f-5b8b-4c5f-8255-2b0a17552eec}" SourceID="{{listid:IncidentTransaction}}" StaticName="TeamWebURL" Name="TeamWebURL" ColName="nvarchar17" RowOrdinal="0" Version="1" />

<Field DisplayName="Severity" Type="Text" Required="FALSE" EnforceUniqueValues="FALSE" Indexed="FALSE" MaxLength="255" ID="{1a7b870d-3c61-4bff-9920-73b68174e0fe}" SourceID="{{listid:TEOC-IncidentTransaction}}" StaticName="Severity" Name="Severity" ColName="nvarchar18" RowOrdinal="0" />
<Field DisplayName="ReasonForUpdate" Type="Note" Required="FALSE" ID="{275f387a-2ed3-411a-a200-7187ab64782f}" SourceID="{{listid:TEOC-IncidentTransaction}}" StaticName="ReasonForUpdate" Name="ReasonForUpdate" ColName="nvarchar19" RowOrdinal="0" Version="1" />

</pnp:Fields>
</pnp:ListInstance>
<pnp:ListInstance Title="TEOC-IncidentType" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/TEOC-IncidentType" EnableVersioning="true" MinorVersionLimit="0" MaxVersionLimit="50" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false" DefaultDisplayFormUrl="{site}/Lists/TEOC-IncidentType/DispForm.aspx" DefaultEditFormUrl="{site}/Lists/TEOC-IncidentType/EditForm.aspx" DefaultNewFormUrl="{site}/Lists/TEOC-IncidentType/NewForm.aspx" ImageUrl="/_layouts/15/images/itgen.gif?rev=47" IrmExpire="false" IrmReject="false" IsApplicationList="false" ValidationFormula="" ValidationMessage="">
Expand Down Expand Up @@ -481,7 +485,86 @@
<pnp:FieldRef ID="139da674-dbf6-439f-98e0-4eb05fa9a669" Name="_OriginalSourceListId" DisplayName="Original Source List ID" />
<pnp:FieldRef ID="91e86a43-75f2-426f-80da-35edfb47d55d" Name="_OriginalSourceItemId" DisplayName="Original Source Item ID" />
</pnp:FieldRefs>
</pnp:ListInstance>
</pnp:ListInstance>
<pnp:ListInstance Title="TEOC-Config" Description="Use this list to configure the format of the Teams name created for each incident" DocumentTemplate="" TemplateType="100" Url="Lists/TEOCConfig" EnableVersioning="true" MinorVersionLimit="0" MaxVersionLimit="50" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false" DefaultDisplayFormUrl="{site}/Lists/TEOCConfig/DispForm.aspx" DefaultEditFormUrl="{site}/Lists/TEOCConfig/EditForm.aspx" DefaultNewFormUrl="{site}/Lists/TEOCConfig/NewForm.aspx" ImageUrl="/_layouts/15/images/itgen.png?rev=47" IrmExpire="false" IrmReject="false" IsApplicationList="false" ValidationFormula="" ValidationMessage="">
<pnp:ContentTypeBindings>
<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
<pnp:ContentTypeBinding ContentTypeID="0x0120" />
</pnp:ContentTypeBindings>
<pnp:Views>
<View Name="{02967936-92CF-4C84-93A0-CC1C026F7BAB}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="{site}/Lists/TEOCConfig/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=47">
<Query />
<ViewFields>
<FieldRef Name="Title" />
<FieldRef Name="Value" />
</ViewFields>
<RowLimit Paged="TRUE">30</RowLimit>
<Aggregations Value="Off" />
<JSLink>clienttemplates.js</JSLink>
<CustomFormatter />
<ViewData />
</View>
</pnp:Views>
<pnp:Fields>
<Field DisplayName="Value" Type="Note" Required="FALSE" ID="{51a1e44f-4e67-486a-bcdf-e13efdd07b36}" SourceID="{{listid:TEOC-Config}}" StaticName="Value" Name="Value" ColName="nvarchar5" RowOrdinal="0" Version="1" />
</pnp:Fields>
<pnp:Webhooks>
<pnp:Webhook ServerNotificationUrl="https://southeastasia1-0.pushnp.svc.ms/notifications?token=4b912ca4-6d08-4c59-806c-cf8f8d7ecdf9" ExpiresInDays="1" />
</pnp:Webhooks>
<pnp:DataRows UpdateBehavior="Overwrite">
<pnp:DataRow>
<pnp:DataValue FieldName="Title">TeamNameConfig</pnp:DataValue>
<pnp:DataValue FieldName="Value">{"PrefixValue":"TEOC","Prefix":"1","IncidentName":"2","IncidentType":"3","StartDate":"4"}</pnp:DataValue>
</pnp:DataRow>
</pnp:DataRows>
</pnp:ListInstance>
<pnp:ListInstance Title="TEOC-RoleDefaultValues" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/TEOCRoleDefaultValues" EnableVersioning="true" MinorVersionLimit="0" MaxVersionLimit="50" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false" DefaultDisplayFormUrl="{site}/Lists/TEOCRoleDefaultValues/DispForm.aspx" DefaultEditFormUrl="{site}/Lists/TEOCRoleDefaultValues/EditForm.aspx" DefaultNewFormUrl="{site}/Lists/TEOCRoleDefaultValues/NewForm.aspx" ImageUrl="/_layouts/15/images/itgen.png?rev=47" IrmExpire="false" IrmReject="false" IsApplicationList="false" ValidationFormula="" ValidationMessage="">
<pnp:ContentTypeBindings>
<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
<pnp:ContentTypeBinding ContentTypeID="0x0120" />
</pnp:ContentTypeBindings>
<pnp:Views>
<View Name="{72838c1f-e01c-4518-bc3e-4281a76f2f42}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="{site}/Lists/TEOCRoleDefaultValues/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=47">
<Query />
<ViewFields>
<FieldRef Name="Title" />
<FieldRef Name="Users" />
</ViewFields>
<RowLimit Paged="TRUE">30</RowLimit>
<Aggregations Value="Off" />
<JSLink>clienttemplates.js</JSLink>
<CustomFormatter />
<ViewData />
</View>
</pnp:Views>
<pnp:Fields>
<Field DisplayName="Users" Type="Note" Required="FALSE" ID="{37fd4499-e90e-4bac-8206-077682987263}" SourceID="{{listid:TEOC-RoleDefaultValues}}" StaticName="Users" Name="Users" ColName="nvarchar5" RowOrdinal="0" Version="1" />
</pnp:Fields>
</pnp:ListInstance>
<pnp:ListInstance Title="TEOC-IncidentTypeDefaultRoles" Description="" DocumentTemplate="" TemplateType="100" Url="Lists/TEOCIncidentTypeDefaultRoles" EnableVersioning="true" MinorVersionLimit="0" MaxVersionLimit="50" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-de22-43b2-a848-c05709900100" EnableFolderCreation="false" DefaultDisplayFormUrl="{site}/Lists/TEOCIncidentTypeDefaultRoles/DispForm.aspx" DefaultEditFormUrl="{site}/Lists/TEOCIncidentTypeDefaultRoles/EditForm.aspx" DefaultNewFormUrl="{site}/Lists/TEOCIncidentTypeDefaultRoles/NewForm.aspx" ImageUrl="/_layouts/15/images/itgen.png?rev=47" IrmExpire="false" IrmReject="false" IsApplicationList="false" ValidationFormula="" ValidationMessage="">
<pnp:ContentTypeBindings>
<pnp:ContentTypeBinding ContentTypeID="0x01" Default="true" />
<pnp:ContentTypeBinding ContentTypeID="0x0120" />
</pnp:ContentTypeBindings>
<pnp:Views>
<View Name="{ac325d36-be63-436c-969a-008558afe1ed}" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" Type="HTML" DisplayName="All Items" Url="{site}/Lists/TEOCIncidentTypeDefaultRoles/AllItems.aspx" Level="1" BaseViewID="1" ContentTypeID="0x" ImageUrl="/_layouts/15/images/generic.png?rev=47">
<Query />
<ViewFields>
<FieldRef Name="Title" />
<FieldRef Name="RoleAssignment" />
</ViewFields>
<RowLimit Paged="TRUE">30</RowLimit>
<Aggregations Value="Off" />
<JSLink>clienttemplates.js</JSLink>
<CustomFormatter />
<ViewData />
</View>
</pnp:Views>
<pnp:Fields>
<Field DisplayName="RoleAssignment" Type="Note" Required="FALSE" ID="{276adc46-b4d8-40dd-8ddf-710285d47069}" SourceID="{{listid:TEOC-IncidentTypeDefaultRoles}}" StaticName="RoleAssignment" Name="RoleAssignment" ColName="nvarchar5" RowOrdinal="0" Version="1" />
</pnp:Fields>
</pnp:ListInstance>

</pnp:Lists>
<pnp:Features>
<pnp:WebFeatures>
Expand Down
57 changes: 57 additions & 0 deletions Deployment/provisioning/Upgrade/Update-EOC-Provision.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
param([string]$AdminEmail,
[string]$TenantName)

$FilePath = Read-Host "Please enter site template XML schema file path";
$FilePath = $FilePath.Trim();

Write-Host $FilePath

$TenantName = Read-Host "Please enter your tenant name: (contoso)";
$TenantName = $TenantName.Trim();

$AdminEmail = Read-Host "Please enter your tenant admin email";
$AdminEmail = $AdminEmail.Trim();

# verify the PnP.PowerShell module we need is installed
if (-not (Get-Module -ListAvailable -Name PnP.PowerShell )) {
Write-Warning "Could not find the PnP.PowerShell module, installing it"
Install-Module -Name "PnP.PowerShell"
} else {
Write-Host "PnP.PowerShell module found"
}


$TenantURL = "https://$TenantName.sharepoint.com"
#Do not change
$EOCSiteURL = "/sites/TEOCSite"

Connect-PnPOnline -Url $TenantURL -Interactive

try {
Write-Host "Checking if site exists at $EOCSiteURL"
$site = Get-PnPTenantSite -Url $TenantURL$EOCSiteURL -ErrorAction SilentlyContinue

if ($site -ne $null)
{
Write-Host "TEOC Site exists. Updating the site template..."

}
else
{
Write-Host "TEOC Site doesn't exist. Update aborted."
return;
}


Connect-PnPOnline -Url $TenantURL$EOCSiteURL -Interactive


Invoke-PnPSiteTemplate -Path $FilePath -ErrorAction Stop -WarningAction SilentlyContinue

Write-Host "TEOC App Upgrade complete."
}
catch{

Write-Host "`nError Message: " $_.Exception.Message
Write-Host "`nTEOC App Upgrade failed."
}
Loading

0 comments on commit a4e48fb

Please sign in to comment.