diff --git a/Deployment/azuredeploy.json b/Deployment/azuredeploy.json index cc5136739..aef89b9e9 100644 --- a/Deployment/azuredeploy.json +++ b/Deployment/azuredeploy.json @@ -316,7 +316,8 @@ "AppInsightsSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('AppInsightsSecretName'))]", "UserAppSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('UserAppSecretName'))]", "AuthorAppSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('AuthorAppSecretName'))]", - "GraphAppSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('GraphAppSecretName'))]" + "GraphAppSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('GraphAppSecretName'))]", + "netFrameworkVersion":"v6.0" }, "resources": [ { @@ -571,7 +572,14 @@ "allowedOrigins": [ "[concat('https://', variables('frontDoorDomain'))]" ] - } + }, + "metadata": [ + { + "name": "CURRENT_STACK", + "value": "dotnet" + } + ], + "netFrameworkVersion": "v6.0.100" } }, "dependsOn": [ @@ -666,7 +674,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -710,7 +719,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('prepFunctionAppName'))]", @@ -754,7 +763,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -793,7 +803,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('sendFunctionAppName'))]", @@ -835,7 +845,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -875,7 +886,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('dataFunctionAppName'))]", diff --git a/Deployment/azuredeploywithcert.json b/Deployment/azuredeploywithcert.json index 2eaecfe0e..578dea8b2 100644 --- a/Deployment/azuredeploywithcert.json +++ b/Deployment/azuredeploywithcert.json @@ -316,7 +316,8 @@ "AppInsightsSecretName": "[concat(variables('keyVaultName'),'AppInsightsKey')]", "StorageAccountSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('StorageAccountSecretName'))]", "ServiceBusSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('ServiceBusSecretName'))]", - "AppInsightsSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('AppInsightsSecretName'))]" + "AppInsightsSecretResourceId": "[resourceId(resourceGroup().name, 'Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('AppInsightsSecretName'))]", + "netFrameworkVersion": "v6.0" }, "resources": [ { @@ -571,7 +572,14 @@ "allowedOrigins": [ "[concat('https://', variables('frontDoorDomain'))]" ] - } + }, + "metadata": [ + { + "name": "CURRENT_STACK", + "value": "dotnet" + } + ], + "netFrameworkVersion": "v6.0.100" } }, "dependsOn": [ @@ -665,7 +673,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -709,7 +718,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('prepFunctionAppName'))]", @@ -753,7 +762,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -796,7 +806,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('sendFunctionAppName'))]", @@ -838,7 +848,8 @@ "httpsOnly": true, "siteConfig": { "ftpsState": "Disabled", - "alwaysOn": "[not(variables('isSharedPlan'))]" + "alwaysOn": "[not(variables('isSharedPlan'))]", + "netFrameworkVersion": "[variables('netFrameworkVersion')]" } }, "dependsOn": [ @@ -880,7 +891,7 @@ "KeyVault:Url": "[variables('keyVaultUrl')]", "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "AzureWebJobsDashboard": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('StorageAccountSecretResourceId'),'2015-06-01').secretUriWithVersion, ')')]", - "FUNCTIONS_EXTENSION_VERSION": "~3", + "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')),'2015-05-01-preview').key1)]", "WEBSITE_CONTENTSHARE": "[toLower(variables('dataFunctionAppName'))]", diff --git a/Deployment/dotnet6-migration.ps1 b/Deployment/dotnet6-migration.ps1 new file mode 100644 index 000000000..88d62214c --- /dev/null +++ b/Deployment/dotnet6-migration.ps1 @@ -0,0 +1,65 @@ +function UpdateAzureFunctions { + param( + [Parameter(Mandatory = $true)] [string] $subscriptionId, + [Parameter(Mandatory = $true)] [string] $resourceGroupName, + [Parameter(Mandatory = $true)] [string] $baseResourceName + ) + + try{ + $prepFunctionName = $baseResourceName + "-prep-function" + $sendFunctionName = $baseResourceName + "-function" + $dataFunctionName = $baseResourceName + "-data-function" + + Write-Host "Please login with your Azure subscription account" + az login + az account set -s $subscriptionId + Write-Host "Successfully logged in to Azure Subscription " -ForegroundColor Green + + Write-Host "****************************************************************************************************************************************************************************************************************************" + Write-Host "Updating prep function to .NET 6 : $prepFunctionName" + az functionapp config set --net-framework-version v6.0 -n $prepFunctionName -g $resourceGroupName + Write-Host "Completed updating prep function to .NET 6 : $prepFunctionName" -ForegroundColor Green + + Write-Host "****************************************************************************************************************************************************************************************************************************" + Write-Host "Updating send function to .NET 6 : $sendFunctionName" + az functionapp config set --net-framework-version v6.0 -n $sendFunctionName -g $resourceGroupName + Write-Host "Completed updating send function to .NET 6 : $sendFunctionName" -ForegroundColor Green + + Write-Host "****************************************************************************************************************************************************************************************************************************" + Write-Host "Updating data function to .NET 6 : $dataFunctionName" + az functionapp config set --net-framework-version v6.0 -n $dataFunctionName -g $resourceGroupName + Write-Host "Completed updating data function to .NET 6 : $dataFunctionName" -ForegroundColor Green +} +catch { + $errorMessage = $_.Exception.Message + Write-Host "Failed to update the Azure functions. Error message: $errorMessage" -ForegroundColor Red + } +} + + +function UpdateAzureAppService { + param( + [Parameter(Mandatory = $true)] [string] $resourceGroupName, + [Parameter(Mandatory = $true)] [string] $baseResourceName + ) + + try{ + + Write-Host "****************************************************************************************************************************************************************************************************************************" + Write-Host "Updating app service to .NET 6 $baseResourceName" + az webapp config set --net-framework-version v6.0 -n $baseResourceName -g $resourceGroupName + Write-Host "Completed updating app service to .NET 6 $baseResourceName" -ForegroundColor Green +} +catch { + $errorMessage = $_.Exception.Message + Write-Host "Failed to update the app service $baseResourceName. Error message: $errorMessage" -ForegroundColor Red + } +} + +$subscriptionId = Read-Host "Please enter the subscription id of the resources where Company Communicator deployed" +$resourceGroupName = Read-Host "Please enter the resource group name" +$baseResourceName = Read-Host "Please enter the base resource name used" + +UpdateAzureFunctions -subscriptionId $subscriptionId -resourceGroupName $resourceGroupName -baseResourceName $baseResourceName +UpdateAzureAppService -resourceGroupName $resourceGroupName -baseResourceName $baseResourceName + diff --git a/Manifest/manifest_authors.json b/Manifest/manifest_authors.json index cefb76c54..f67ba56dd 100644 --- a/Manifest/manifest_authors.json +++ b/Manifest/manifest_authors.json @@ -1,7 +1,7 @@ { "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.5/MicrosoftTeams.schema.json", "manifestVersion": "1.5", - "version": "5.2.0", + "version": "5.3.0", "id": "1c07cd26-a088-4db8-8928-ace382fa219f", "packageName": "com.microsoft.teams.companycommunicator.authors", "developer": { diff --git a/Manifest/manifest_users.json b/Manifest/manifest_users.json index cb026c5b7..311e3b198 100644 --- a/Manifest/manifest_users.json +++ b/Manifest/manifest_users.json @@ -1,7 +1,7 @@ { "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.5/MicrosoftTeams.schema.json", "manifestVersion": "1.5", - "version": "5.2.0", + "version": "5.3.0", "id": "148a66bb-e83d-425a-927d-09f4299a9274", "packageName": "com.microsoft.teams.companycommunicator", "developer": { diff --git a/README.md b/README.md index c1ccd2260..4923d122e 100644 --- a/README.md +++ b/README.md @@ -23,15 +23,15 @@ Begin with the [Solution overview](https://github.com/OfficeDev/microsoft-teams- When you're ready to try out Company Communicator, or to use it in your own organization, you can choose to follow one of the below guides. * [Deployment guide powershell](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/wiki/Deployment-guide-powershell). - * **Recommended** Use this option to deploy the Company Communicator v5.2 using powershell script. The entire set-up is done by the powershell script. + * **Recommended** Use this option to deploy the latest version of Company Communicator using powershell script. The entire set-up is done by the powershell script. * [Deployment guide](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/wiki/Deployment-guide). - * Use this option to deploy the Company Communicator v5.2 with client secrets. + * Use this option to deploy the latest version of Company Communicator with client secrets. * [Deployment guide certificate](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/wiki/Deployment-guide-certificate). - * Use this option to deploy the Company Communicator v5.2 with certificates. + * Use this option to deploy the latest version of Company Communicator with certificates. ## Migration -If you already have older version of Company Communicator installed, then please use this [v5 migration guide](https://github.com/OfficeDev/microsoft-teams-apps-company-communicator/wiki/v5-migration-guide). Please note that deploying the major version update, like Company Communicator version 5.2 involves more than syncing the App Service and Azure Functions, so plan to review the migration guide before migrating to latest. +If you already have older version of Company Communicator installed, then please use this [v5 migration guide](https://github.com/OfficeDev/microsoft-teams-apps-company-communicator/wiki/v5-migration-guide). Please note that deploying the major version update, like Company Communicator version 5.3 involves more than syncing the App Service and Azure Functions, so plan to review the migration guide before migrating to latest. Migrating to newer versions. diff --git a/Source/CompanyCommunicator.Common/Microsoft.Teams.Apps.CompanyCommunicator.Common.csproj b/Source/CompanyCommunicator.Common/Microsoft.Teams.Apps.CompanyCommunicator.Common.csproj index 2f1454754..07d1ba09b 100644 --- a/Source/CompanyCommunicator.Common/Microsoft.Teams.Apps.CompanyCommunicator.Common.csproj +++ b/Source/CompanyCommunicator.Common/Microsoft.Teams.Apps.CompanyCommunicator.Common.csproj @@ -22,12 +22,14 @@ + + diff --git a/Source/CompanyCommunicator.Common/Repositories/BaseRepository.cs b/Source/CompanyCommunicator.Common/Repositories/BaseRepository.cs index 9ccaabb6a..0316bf44e 100644 --- a/Source/CompanyCommunicator.Common/Repositories/BaseRepository.cs +++ b/Source/CompanyCommunicator.Common/Repositories/BaseRepository.cs @@ -188,9 +188,13 @@ public async Task> GetAllAsync(string partition = null, int? coun } /// - public async Task> GetAllLessThanDateTimeAsync(DateTime dateTime) + public async Task> GetAllBetweenDateTimesAsync(DateTime startDateTime, DateTime endDateTime) { - var filterByDate = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThanOrEqual, dateTime); + var filterByDate = TableQuery.CombineFilters( + TableQuery.GenerateFilterConditionForDate( + "Timestamp", QueryComparisons.LessThanOrEqual, startDateTime), TableOperators.And, + TableQuery.GenerateFilterConditionForDate( + "Timestamp", QueryComparisons.GreaterThanOrEqual, endDateTime)); var query = new TableQuery().Where(filterByDate); diff --git a/Source/CompanyCommunicator.Common/Repositories/IRepository.cs b/Source/CompanyCommunicator.Common/Repositories/IRepository.cs index 369b257eb..de3bd65d3 100644 --- a/Source/CompanyCommunicator.Common/Repositories/IRepository.cs +++ b/Source/CompanyCommunicator.Common/Repositories/IRepository.cs @@ -79,9 +79,10 @@ public interface IRepository /// /// Get filtered data entities by date time from the table storage. /// - /// less than date time. + /// Start date time. + /// End date time. /// Filtered data entities. - public Task> GetAllLessThanDateTimeAsync(DateTime dateTime); + public Task> GetAllBetweenDateTimesAsync(DateTime startDateTime, DateTime endDateTime); /// /// Get all data stream from the table storage in a partition. diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.ar-SA.resx b/Source/CompanyCommunicator.Common/Resources/Strings.ar-SA.resx index 8db19a1fb..ea0ea01b7 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.ar-SA.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.ar-SA.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - اتصل بمسؤول تكنولوجيا المعلومات لديك للحصول على إذن بعرض هذه البيانات. + + اتصل بمسؤول تكنولوجيا المعلومات لديك للحصول على إذن بعرض هذه البيانات. - - التطبيق غير مثبت + + التطبيق غير مثبت - - حالة التسليم + + حالة التسليم - - تمّ التصدير بواسطة + + تمّ التصدير بواسطة - - الطابع الزمني للتصدير + + الطابع الزمني للتصدير - - عنوان الرسالة + + عنوان الرسالة - - الطابع الزمني المرسل + + الطابع الزمني المرسل - - سبب الحالة + + سبب الحالة - - معرِّف الفريق + + معرِّف الفريق - - اسم الفريق + + اسم الفريق - - UPN + + UPN - - معرِّف المستخدم + + معرِّف المستخدم - - الاسم + + الاسم - - {0}(نسخ) + + {0}(نسخ) - - حدث خطا ما. حاول تصدير النتائج مره أخرى. + + حدث خطا ما. حاول تصدير النتائج مره أخرى. - - فشل + + فشل - - لم يتم العثور علي تطبيق المستخدم. تاكد من تحميل تطبيق المستخدم إلى كتالوج تطبيقات مؤسستك. + + لم يتم العثور علي تطبيق المستخدم. تاكد من تحميل تطبيق المستخدم إلى كتالوج تطبيقات مؤسستك. - - فشل العثور علي تطبيق المستخدم: {0} في كتالوج تطبيقات المؤسسة. - {0} - app Id. (GUID). + + فشل العثور علي تطبيق المستخدم: {0} في كتالوج تطبيقات المؤسسة. + {0} - app Id. (GUID). - - فشل إنشاء المحادثة. رسالة خطأ: {0} + + فشل إنشاء المحادثة. رسالة خطأ: {0} - - فشل إنشاء محادثه مع مستخدمي الفرق: {0}. استثناء: {1} + + فشل إنشاء محادثه مع مستخدمي الفرق: {0}. استثناء: {1} - - فشل إنشاء المحادثة. تم التحكم بالطلب. رسالة الخطا: {0} " + + فشل إنشاء المحادثة. تم التحكم بالطلب. رسالة الخطا: {0} " - - فشل العثور علي {0} الفريق في قاعده البيانات. + + فشل العثور علي {0} الفريق في قاعده البيانات. - - فشل مزامنة كل المستخدمين. رمز الحالة: استثناء ال{0}: {1} + + فشل مزامنة كل المستخدمين. رمز الحالة: استثناء ال{0}: {1} - - فشل الحصول علي معرف المحادثة للمستخدم: {0}. رمز الحالة: استثناء ال{1}: {2} + + فشل الحصول علي معرف المحادثة للمستخدم: {0}. رمز الحالة: استثناء ال{1}: {2} - - فشل الحصول علي أعضاء {0} المجموعة: {1} + + فشل الحصول علي أعضاء {0} المجموعة: {1} - - فشل الحصول علي أعضاء {0} الفريق: {1} + + فشل الحصول علي أعضاء {0} الفريق: {1} - - فشل تثبيت التطبيق للمستخدم: {0}. استثناء: {1} + + فشل تثبيت التطبيق للمستخدم: {0}. استثناء: {1} - - فشل اعداد الرسالة لإرسالها: {0} + + فشل اعداد الرسالة لإرسالها: {0} - - يحتوي هذا الملف علي النتائج التي قمت بتصديرها. + + يحتوي هذا الملف علي النتائج التي قمت بتصديرها. - - انتهت صلاحيه الارتباط الخاص بهذا التنزيل. تصدير النتائج مره أخرى. + + انتهت صلاحيه الارتباط الخاص بهذا التنزيل. تصدير النتائج مره أخرى. - - بيانات التصدير + + بيانات التصدير - - تسليم_الرسالة + + تسليم_الرسالة - - بيانات التعريف + + بيانات التعريف - - الملف جاهز للتنزيل. تتوفر نسخه أيضا في OneDrive. + + الملف جاهز للتنزيل. تتوفر نسخه أيضا في OneDrive. - - حدث خطا ما. حاول تصدير النتائج مره أخرى. + + حدث خطا ما. حاول تصدير النتائج مره أخرى. - - يحتوي الإعلام علي {0} مجموعات كمستلمين. لا يجب أن يتجاوز {1} المجموعات. + + يحتوي الإعلام علي {0} مجموعات كمستلمين. لا يجب أن يتجاوز {1} المجموعات. - - يحتوي الاعلام علي {0} التقويم كمستلمين. لا يجب ان يتجاوز {1} التقويم. + + يحتوي الاعلام علي {0} التقويم كمستلمين. لا يجب ان يتجاوز {1} التقويم. - - يحتوي الإعلام علي {0} فرق كمستلمين. لا يجب أن يتجاوز {1} الفرق. + + يحتوي الإعلام علي {0} فرق كمستلمين. لا يجب أن يتجاوز {1} الفرق. - - موافق + + موافق - - تم رفض الاذن. لن يتم متابعه التصدير. + + تم رفض الاذن. لن يتم متابعه التصدير. - - لم يتم العثور علي المستلم + + لم يتم العثور علي المستلم - - تمّ بنجاح + + تمّ بنجاح - - مقيّد + + مقيّد - - نوع المستخدم + + نوع المستخدم - - الضيف + + الضيف - - العضو + + العضو - - المستخدم الضيف غير مدعم + + المستخدم الضيف غير مدعم \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.de-DE.resx b/Source/CompanyCommunicator.Common/Resources/Strings.de-DE.resx index 903c78d0e..b628897ca 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.de-DE.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.de-DE.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Wenden Sie sich an Ihren IT-Administrator, um die Berechtigung zum Anzeigen dieser Daten zu erhalten. + + Wenden Sie sich an Ihren IT-Administrator, um die Berechtigung zum Anzeigen dieser Daten zu erhalten. - - App ist nicht installiert + + App ist nicht installiert - - Zustellungsstatus + + Zustellungsstatus - - Exportiert von + + Exportiert von - - TimeStamp des Exports + + TimeStamp des Exports - - Nachrichtentitel + + Nachrichtentitel - - TimeStamp gesendet + + TimeStamp gesendet - - Grund für den Status + + Grund für den Status - - Team-ID + + Team-ID - - Teamname + + Teamname - - UPN + + UPN - - Benutzer-ID + + Benutzer-ID - - Name + + Name - - {0} (kopieren) + + {0} (kopieren) - - Etwas ist schief gegangen. Versuchen Sie noch Mal, die Ergebnisse zu exportieren. + + Etwas ist schief gegangen. Versuchen Sie noch Mal, die Ergebnisse zu exportieren. - - Fehlgeschlagen + + Fehlgeschlagen - - Die Benutzer Anwendung wurde nicht gefunden. Stellen Sie sicher, dass die Benutzer-App in den App-Katalog Ihrer Organisation hoch geladen ist. + + Die Benutzer Anwendung wurde nicht gefunden. Stellen Sie sicher, dass die Benutzer-App in den App-Katalog Ihrer Organisation hoch geladen ist. - - Fehler beim Suchen der Benutzer Anwendung: {0} im App-Katalog der Organisation. - {0} - app Id. (GUID). + + Fehler beim Suchen der Benutzer Anwendung: {0} im App-Katalog der Organisation. + {0} - app Id. (GUID). - - Fehler beim Erstellen der Unterhaltung. Fehlermeldung: {0} + + Fehler beim Erstellen der Unterhaltung. Fehlermeldung: {0} - - Fehler beim Erstellen einer unter Haltung mit Teams Benutzer: {0}. Ausnahme: {1} + + Fehler beim Erstellen einer unter Haltung mit Teams Benutzer: {0}. Ausnahme: {1} - - Fehler beim Erstellen der unter Haltung. Die Anforderung wurde gedrosselt. Fehler Meldung: {0} " + + Fehler beim Erstellen der unter Haltung. Die Anforderung wurde gedrosselt. Fehler Meldung: {0} " - - Die Team {0} in der Datenbank konnten nicht gefunden werden. + + Die Team {0} in der Datenbank konnten nicht gefunden werden. - - Fehler beim Synchronisieren aller Benutzer. Status Code: {0} Ausnahme: {1} + + Fehler beim Synchronisieren aller Benutzer. Status Code: {0} Ausnahme: {1} - - Fehler beim Abrufen der Unterhaltungs-ID für den Benutzer: {0}. Status Code: {1} Ausnahme: {2} + + Fehler beim Abrufen der Unterhaltungs-ID für den Benutzer: {0}. Status Code: {1} Ausnahme: {2} - - Fehler beim Abrufen der Mitglieder für die Gruppen {0}: {1} + + Fehler beim Abrufen der Mitglieder für die Gruppen {0}: {1} - - Fehler beim Abrufen von Mitgliedern für das Team {0}: {1} + + Fehler beim Abrufen von Mitgliedern für das Team {0}: {1} - - Fehler beim Installieren der Anwendung für den Benutzer: {0}. Ausnahme: {1} + + Fehler beim Installieren der Anwendung für den Benutzer: {0}. Ausnahme: {1} - - Fehler beim Vorbereiten der Nachricht zum Senden: {0} + + Fehler beim Vorbereiten der Nachricht zum Senden: {0} - - Diese Datei enthält die Resultate, die Sie exportiert haben. + + Diese Datei enthält die Resultate, die Sie exportiert haben. - - Der Link für diesen Download ist abgelaufen. Die Ergebnisse erneut exportieren. + + Der Link für diesen Download ist abgelaufen. Die Ergebnisse erneut exportieren. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - Metadaten + + Metadaten - - Ihre Datei kann jetzt herunter geladen werden. Eine Kopie ist auch auf OneDrive verfügbar. + + Ihre Datei kann jetzt herunter geladen werden. Eine Kopie ist auch auf OneDrive verfügbar. - - Etwas ist schief gegangen. Versuchen Sie noch Mal, die Ergebnisse zu exportieren. + + Etwas ist schief gegangen. Versuchen Sie noch Mal, die Ergebnisse zu exportieren. - - Die Benachrichtigung hat {0} Gruppen als Ihre Empfänger. Sie sollte {1} Gruppen nicht über schreiten. + + Die Benachrichtigung hat {0} Gruppen als Ihre Empfänger. Sie sollte {1} Gruppen nicht über schreiten. - - Die Benachrichtigung hat {0} rosters als Empfänger. Er sollte {1} rosters nicht über schreiten. + + Die Benachrichtigung hat {0} rosters als Empfänger. Er sollte {1} rosters nicht über schreiten. - - Die Benachrichtigung hat {0} Teams als Ihre Empfänger. Sie sollte {1} Teams nicht über schreiten. + + Die Benachrichtigung hat {0} Teams als Ihre Empfänger. Sie sollte {1} Teams nicht über schreiten. - - OK + + OK - - Berechtigung abgelehnt. Der Export wird nicht fort gesetzt. + + Berechtigung abgelehnt. Der Export wird nicht fort gesetzt. - - Empfänger wurde nicht gefunden + + Empfänger wurde nicht gefunden - - Erfolgreich + + Erfolgreich - - Gedrosselt + + Gedrosselt - - Benutzertyp + + Benutzertyp - - Gast + + Gast - - Mitglied + + Mitglied - - Gastbenutzer nicht unterstützt + + Gastbenutzer nicht unterstützt \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.es-ES.resx b/Source/CompanyCommunicator.Common/Resources/Strings.es-ES.resx index a10e9f240..104059dca 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.es-ES.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.es-ES.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Póngase en contacto con su administrador de TI para obtener permiso para ver estos datos. + + Póngase en contacto con su administrador de TI para obtener permiso para ver estos datos. - - Aplicación no instalada + + Aplicación no instalada - - Estado de entrega + + Estado de entrega - - Exportado por + + Exportado por - - Exportar marca de tiempo + + Exportar marca de tiempo - - Título del mensaje + + Título del mensaje - - Marca de tiempo enviada + + Marca de tiempo enviada - - Razón para el estado + + Razón para el estado - - Id. de equipo + + Id. de equipo - - Nombre del equipo + + Nombre del equipo - - UPN + + UPN - - Id. de usuario + + Id. de usuario - - Nombre + + Nombre - - {0} (copia) + + {0} (copia) - - Ha habido un problema. Intente volver a exportar los resultados. + + Ha habido un problema. Intente volver a exportar los resultados. - - Erróneo + + Erróneo - - No se encontró la aplicación de usuario. Asegúrese de que la aplicación de usuario se ha cargado en el catálogo de aplicaciones de su organización. + + No se encontró la aplicación de usuario. Asegúrese de que la aplicación de usuario se ha cargado en el catálogo de aplicaciones de su organización. - - No se pudo encontrar la aplicación de usuario: {0} en el catálogo de aplicaciones de la organización. - {0} - app Id. (GUID). + + No se pudo encontrar la aplicación de usuario: {0} en el catálogo de aplicaciones de la organización. + {0} - app Id. (GUID). - - No se pudo crear la conversación. Mensaje de error: {0} + + No se pudo crear la conversación. Mensaje de error: {0} - - No se pudo crear la conversación con el usuario de Teams: {0}. Excepción: {1} + + No se pudo crear la conversación con el usuario de Teams: {0}. Excepción: {1} - - No se pudo crear la conversación. Se limitó la solicitud. Mensaje de error: {0} " + + No se pudo crear la conversación. Se limitó la solicitud. Mensaje de error: {0} " - - No se pudo encontrar el equipo {0} en la base de datos. + + No se pudo encontrar el equipo {0} en la base de datos. - - Error al sincronizar todos los usuarios. Código de estado: {0} excepción: {1} + + Error al sincronizar todos los usuarios. Código de estado: {0} excepción: {1} - - No se pudo obtener el ID de conversación para el usuario: {0}. Código de estado: {1} excepción: {2} + + No se pudo obtener el ID de conversación para el usuario: {0}. Código de estado: {1} excepción: {2} - - No se pudieron obtener los miembros del grupo {0}: {1} + + No se pudieron obtener los miembros del grupo {0}: {1} - - No se pudieron obtener los miembros del equipo {0}: {1} + + No se pudieron obtener los miembros del equipo {0}: {1} - - No se pudo instalar la aplicación para el usuario: {0}. Excepción: {1} + + No se pudo instalar la aplicación para el usuario: {0}. Excepción: {1} - - Error al preparar el mensaje para el envío: {0} + + Error al preparar el mensaje para el envío: {0} - - Este archivo contiene los resultados exportados. + + Este archivo contiene los resultados exportados. - - El vínculo para esta descarga ha expirado. Vuelva a exportar los resultados. + + El vínculo para esta descarga ha expirado. Vuelva a exportar los resultados. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - Metadatos + + Metadatos - - El archivo está listo para descargarse. También hay una copia disponible en OneDrive. + + El archivo está listo para descargarse. También hay una copia disponible en OneDrive. - - Ha habido un problema. Intente volver a exportar los resultados. + + Ha habido un problema. Intente volver a exportar los resultados. - - La notificación tiene grupos de {0} como destinatarios. No debe superar los grupos de {1}. + + La notificación tiene grupos de {0} como destinatarios. No debe superar los grupos de {1}. - - La notificación ha {0} las listas como los destinatarios. No debe superar las listas de {1}. + + La notificación ha {0} las listas como los destinatarios. No debe superar las listas de {1}. - - La notificación tiene {0} equipos como destinatarios. No deben superar los {1} equipos. + + La notificación tiene {0} equipos como destinatarios. No deben superar los {1} equipos. - - Aceptar + + Aceptar - - Se rechazó el permiso. No se continuará con la exportación. + + Se rechazó el permiso. No se continuará con la exportación. - - No se encontró el destinatario + + No se encontró el destinatario - - Realizado correctamente + + Realizado correctamente - - Limitado + + Limitado - - Tipo de usuario + + Tipo de usuario - - Invitado + + Invitado - - Miembro + + Miembro - - No se admite el usuario invitado + + No se admite el usuario invitado \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.fr-FR.resx b/Source/CompanyCommunicator.Common/Resources/Strings.fr-FR.resx index f3e3446af..c8863944b 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.fr-FR.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.fr-FR.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Contactez votre administrateur informatique pour obtenir l’autorisation d’afficher ces données. + + Contactez votre administrateur informatique pour obtenir l’autorisation d’afficher ces données. - - Application non installée + + Application non installée - - État de la distribution + + État de la distribution - - Exporté par + + Exporté par - - Heure d’exportation + + Heure d’exportation - - Titre du message + + Titre du message - - Heure d’envoi + + Heure d’envoi - - Raison du statut + + Raison du statut - - ID d’équipe + + ID d’équipe - - Nom de l'équipe + + Nom de l'équipe - - UPN + + UPN - - ID utilisateur + + ID utilisateur - - Nom + + Nom - - {0} (copier) + + {0} (copier) - - Un problème est survenu. Réessayez d’exporter les résultats. + + Un problème est survenu. Réessayez d’exporter les résultats. - - Échec + + Échec - - Nous n’avons pas trouvé l’application utilisateur. Assurez-vous que l’application utilisateur est téléchargée vers le catalogue d’applications de votre organisation. + + Nous n’avons pas trouvé l’application utilisateur. Assurez-vous que l’application utilisateur est téléchargée vers le catalogue d’applications de votre organisation. - - Impossible de trouver l’application utilisateur : {0} dans le catalogue d’applications de l’organisation. - {0} - app Id. (GUID). + + Impossible de trouver l’application utilisateur : {0} dans le catalogue d’applications de l’organisation. + {0} - app Id. (GUID). - - Nous n’avons pas pu créer la conversation. Message d’erreur : {0} + + Nous n’avons pas pu créer la conversation. Message d’erreur : {0} - - Échec de la création de la conversation avec l’utilisateur teams : {0}. Exception : {1} + + Échec de la création de la conversation avec l’utilisateur teams : {0}. Exception : {1} - - Échec de la création de la conversation. Demande limitée. Message d’erreur : {0}» + + Échec de la création de la conversation. Demande limitée. Message d’erreur : {0}» - - Désolé... Nous n’avons pas pu trouver l’équipe {0} dans la base de données. + + Désolé... Nous n’avons pas pu trouver l’équipe {0} dans la base de données. - - Échec de la synchronisation de tous les utilisateurs. Code d’État : exception {0} : {1} + + Échec de la synchronisation de tous les utilisateurs. Code d’État : exception {0} : {1} - - Impossible d’obtenir l’ID de conversation pour l’utilisateur : {0}. Code d’État : exception {1} : {2} + + Impossible d’obtenir l’ID de conversation pour l’utilisateur : {0}. Code d’État : exception {1} : {2} - - Impossible d’obtenir les membres du groupe {0} : {1} + + Impossible d’obtenir les membres du groupe {0} : {1} - - Impossible d’obtenir les membres de l’équipe {0} : {1} + + Impossible d’obtenir les membres de l’équipe {0} : {1} - - Impossible d’installer l’application pour l’utilisateur : {0}. Exception : {1} + + Impossible d’installer l’application pour l’utilisateur : {0}. Exception : {1} - - Nous n’avons pas pu préparer le message à envoyer : {0} + + Nous n’avons pas pu préparer le message à envoyer : {0} - - Ce fichier contient les résultats que vous avez exportés. + + Ce fichier contient les résultats que vous avez exportés. - - Le lien pour ce téléchargement a expiré. Exporter de nouveau les résultats. + + Le lien pour ce téléchargement a expiré. Exporter de nouveau les résultats. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - Métadonnées + + Métadonnées - - Votre fichier est prêt à être téléchargé. Une copie est également disponible dans OneDrive. + + Votre fichier est prêt à être téléchargé. Une copie est également disponible dans OneDrive. - - Un problème est survenu. Réessayez d’exporter les résultats. + + Un problème est survenu. Réessayez d’exporter les résultats. - - La notification a {0} des groupes en tant que destinataires. Il ne doit pas dépasser {1} groupes. + + La notification a {0} des groupes en tant que destinataires. Il ne doit pas dépasser {1} groupes. - - La notification a {0} les listes en tant que destinataires. Il ne doit pas dépasser {1} les listes. + + La notification a {0} les listes en tant que destinataires. Il ne doit pas dépasser {1} les listes. - - La notification a {0} teams en tant que destinataires. Il ne doit pas dépasser {1} Teams. + + La notification a {0} teams en tant que destinataires. Il ne doit pas dépasser {1} Teams. - - OK + + OK - - Autorisation refusée. Nous n’allons pas continuer l’exportation. + + Autorisation refusée. Nous n’allons pas continuer l’exportation. - - Destinataire introuvable + + Destinataire introuvable - - Réussite + + Réussite - - Limité + + Limité - - Type d'utilisateur + + Type d'utilisateur - - Invité + + Invité - - Membre + + Membre - - Utilisateur invité non pris en charge + + Utilisateur invité non pris en charge \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.he-IL.resx b/Source/CompanyCommunicator.Common/Resources/Strings.he-IL.resx index 14d6186b4..337dae03d 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.he-IL.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.he-IL.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - פנה למנהל ה- IT לקבלת הרשאה להצגת נתונים אלה. + + פנה למנהל ה- IT לקבלת הרשאה להצגת נתונים אלה. - - האפליקציה לא מותקנת + + האפליקציה לא מותקנת - - מצב מסירה + + מצב מסירה - - הייצוא בוצע על-ידי + + הייצוא בוצע על-ידי - - ייצוא TimeStamp + + ייצוא TimeStamp - - כותרת הודעה + + כותרת הודעה - - נשלח TimeStamp + + נשלח TimeStamp - - סיבת מצב + + סיבת מצב - - מזהה צוות + + מזהה צוות - - שם צוות + + שם צוות - - UPN + + UPN - - מזהה משתמש + + מזהה משתמש - - שם + + שם - - {0} (העתק) + + {0} (העתק) - - משהו השתבש. נסה שוב לייצא את התוצאות. + + משהו השתבש. נסה שוב לייצא את התוצאות. - - נכשל + + נכשל - - יישום המשתמש לא נמצא. ודא שיישום המשתמש הועלה לקטלוג היישומים של הארגון שלך. + + יישום המשתמש לא נמצא. ודא שיישום המשתמש הועלה לקטלוג היישומים של הארגון שלך. - - לא היתה אפשרות למצוא את יישום המשתמש: {0} בקטלוג היישומים של הארגון. - {0} - app Id. (GUID). + + לא היתה אפשרות למצוא את יישום המשתמש: {0} בקטלוג היישומים של הארגון. + {0} - app Id. (GUID). - - יצירת השיחה נכשלה. הודעת שגיאה: {0} + + יצירת השיחה נכשלה. הודעת שגיאה: {0} - - יצירת שיחה עם משתמש teams נכשלה: {0}. חריגה: {1} + + יצירת שיחה עם משתמש teams נכשלה: {0}. חריגה: {1} - - יצירת השיחה נכשלה. הבקשה ויסות. הודעת שגיאה: {0} " + + יצירת השיחה נכשלה. הבקשה ויסות. הודעת שגיאה: {0} " - - לא היתה אפשרות למצוא את {0} הצוות במסד הנתונים. + + לא היתה אפשרות למצוא את {0} הצוות במסד הנתונים. - - סינכרון כל המשתמשים נכשל. קוד מצב: חריגה {0}: {1} + + סינכרון כל המשתמשים נכשל. קוד מצב: חריגה {0}: {1} - - לא היתה אפשרות לקבל מזהה שיחה עבור המשתמש: {0}. קוד מצב: חריגה {1}: {2} + + לא היתה אפשרות לקבל מזהה שיחה עבור המשתמש: {0}. קוד מצב: חריגה {1}: {2} - - לא היתה אפשרות לקבל חברים עבור הקבוצה {0}: {1} + + לא היתה אפשרות לקבל חברים עבור הקבוצה {0}: {1} - - קבלת חברים עבור {0} צוות נכשלה: {1} + + קבלת חברים עבור {0} צוות נכשלה: {1} - - התקנת היישום עבור המשתמש נכשלה: {0}. חריגה: {1} + + התקנת היישום עבור המשתמש נכשלה: {0}. חריגה: {1} - - הכנת ההודעה לשליחה נכשלה: {0} + + הכנת ההודעה לשליחה נכשלה: {0} - - קובץ זה מכיל את התוצאות שייצאת. + + קובץ זה מכיל את התוצאות שייצאת. - - תוקפו של הקישור עבור הורדה זו פג. יצא את התוצאות שוב. + + תוקפו של הקישור עבור הורדה זו פג. יצא את התוצאות שוב. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - מטה-נתונים + + מטה-נתונים - - הקובץ שלך מוכן להורדה. יש גם עותק זמין ב-OneDrive. + + הקובץ שלך מוכן להורדה. יש גם עותק זמין ב-OneDrive. - - משהו השתבש. נסה שוב לייצא את התוצאות. + + משהו השתבש. נסה שוב לייצא את התוצאות. - - ההודעה כוללת קבוצות {0} כנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} קבוצות. + + ההודעה כוללת קבוצות {0} כנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} קבוצות. - - ההודעה כוללת {0} אנשים מהנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} אנשים. + + ההודעה כוללת {0} אנשים מהנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} אנשים. - - ההודעה כוללת {0} צוותים כנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} צוותים. + + ההודעה כוללת {0} צוותים כנמענים שלה. הפעולה לא אמורה לחרוג מ-{1} צוותים. - - אישור + + אישור - - ההרשאה נדחתה. לא תמשיך בייצוא. + + ההרשאה נדחתה. לא תמשיך בייצוא. - - הנמען לא נמצא + + הנמען לא נמצא - - בוצע בהצלחה + + בוצע בהצלחה - - מווסת + + מווסת - - סוג משתמש + + סוג משתמש - - אורח + + אורח - - חבר + + חבר - - משתמש אורח אינו נתמך + + משתמש אורח אינו נתמך \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.ja-JP.resx b/Source/CompanyCommunicator.Common/Resources/Strings.ja-JP.resx index d767a315c..cbb772a96 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.ja-JP.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.ja-JP.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - このデータを表示するアクセス許可については、IT 管理者にお問い合わせください。 + + このデータを表示するアクセス許可については、IT 管理者にお問い合わせください。 - - アプリがインストールされていません + + アプリがインストールされていません - - 配信状態 + + 配信状態 - - エクスポート実行者 + + エクスポート実行者 - - エクスポートのタイムスタンプ + + エクスポートのタイムスタンプ - - メッセージの件名 + + メッセージの件名 - - 送信済みタイムスタンプ + + 送信済みタイムスタンプ - - 状態の理由 + + 状態の理由 - - チーム ID + + チーム ID - - チーム名 + + チーム名 - - UPN + + UPN - - ユーザー ID + + ユーザー ID - - 名前 + + 名前 - - {0} (コピー) + + {0} (コピー) - - 問題が発生しました。結果を再度エクスポートしてみてください。 + + 問題が発生しました。結果を再度エクスポートしてみてください。 - - 失敗 + + 失敗 - - ユーザーアプリケーションが見つかりません。ユーザーアプリが組織のアプリカタログにアップロードされていることを確認してください。 + + ユーザーアプリケーションが見つかりません。ユーザーアプリが組織のアプリカタログにアップロードされていることを確認してください。 - - 組織のアプリカタログでユーザーアプリケーション: {0} が見つかりませんでした。 - {0} - app Id. (GUID). + + 組織のアプリカタログでユーザーアプリケーション: {0} が見つかりませんでした。 + {0} - app Id. (GUID). - - 会話を作成できませんでした。エラー メッセージ: {0} + + 会話を作成できませんでした。エラー メッセージ: {0} - - Teams ユーザー: {0} を使用して会話を作成できませんでした。例外: {1} + + Teams ユーザー: {0} を使用して会話を作成できませんでした。例外: {1} - - 会話を作成できませんでした。要求が調整されました。エラーメッセージ: {0} " + + 会話を作成できませんでした。要求が調整されました。エラーメッセージ: {0} " - - DB で {0} チームを見つけることができませんでした。 + + DB で {0} チームを見つけることができませんでした。 - - すべてのユーザーを同期できませんでした。状態コード: {0} 例外: {1} + + すべてのユーザーを同期できませんでした。状態コード: {0} 例外: {1} - - ユーザー: {0} の会話 id を取得できませんでした。状態コード: {1} 例外: {2} + + ユーザー: {0} の会話 id を取得できませんでした。状態コード: {1} 例外: {2} - - グループ {0} のメンバーを取得できませんでした: {1} + + グループ {0} のメンバーを取得できませんでした: {1} - - チーム {0} のメンバーを取得できませんでした: {1} + + チーム {0} のメンバーを取得できませんでした: {1} - - ユーザー: {0} のアプリケーションをインストールできませんでした。例外: {1} + + ユーザー: {0} のアプリケーションをインストールできませんでした。例外: {1} - - 送信するメッセージの準備に失敗しました: {0} + + 送信するメッセージの準備に失敗しました: {0} - - このファイルにはエクスポートした結果が含まれています。 + + このファイルにはエクスポートした結果が含まれています。 - - このダウンロードのリンクの有効期限が切れています。結果を再度エクスポートします。 + + このダウンロードのリンクの有効期限が切れています。結果を再度エクスポートします。 - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - メタデータ + + メタデータ - - ファイルをダウンロードする準備ができました。コピーは OneDrive でも利用できます。 + + ファイルをダウンロードする準備ができました。コピーは OneDrive でも利用できます。 - - 問題が発生しました。結果を再度エクスポートしてみてください。 + + 問題が発生しました。結果を再度エクスポートしてみてください。 - - 通知は {0} 件のグループを受信者として持っています。グループの数が {1} 件を超えることはできません。 + + 通知は {0} 件のグループを受信者として持っています。グループの数が {1} 件を超えることはできません。 - - 通知は {0} 件の名簿を受信者として持っています。名簿の数が {1} 件を超えることはできません。 + + 通知は {0} 件の名簿を受信者として持っています。名簿の数が {1} 件を超えることはできません。 - - 通知は {0} 件のチームを受信者として持っています。チームの数が {1} 件を超えることはできません。 + + 通知は {0} 件のチームを受信者として持っています。チームの数が {1} 件を超えることはできません。 - - OK + + OK - - アクセス許可が拒否されました。エクスポートは実行されません。 + + アクセス許可が拒否されました。エクスポートは実行されません。 - - 受信者が見つかりません + + 受信者が見つかりません - - 成功しました + + 成功しました - - 調整済み + + 調整済み - - ユーザーの種類 + + ユーザーの種類 - - ゲスト + + ゲスト - - メンバー + + メンバー - - ゲスト ユーザーはサポートされていません + + ゲスト ユーザーはサポートされていません \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.ko-KR.resx b/Source/CompanyCommunicator.Common/Resources/Strings.ko-KR.resx index d17abbc8e..4a3671042 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.ko-KR.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.ko-KR.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 이 데이터를 볼 수 있는 권한에 대해서는 IT 관리자에게 문의하세요. + + 이 데이터를 볼 수 있는 권한에 대해서는 IT 관리자에게 문의하세요. - - 앱이 설치되지 않음 + + 앱이 설치되지 않음 - - 배달 상태 + + 배달 상태 - - 내보낸 사람 + + 내보낸 사람 - - 타임스탬프 내보내기 + + 타임스탬프 내보내기 - - 메시지 제목 + + 메시지 제목 - - 보낸 타임스탬프 + + 보낸 타임스탬프 - - 상태 이유 + + 상태 이유 - - 팀 ID + + 팀 ID - - 팀 이름 + + 팀 이름 - - UPN + + UPN - - 사용자 ID + + 사용자 ID - - 이름 + + 이름 - - {0} (복사) + + {0} (복사) - - 오류가 발생했습니다. 결과를 다시 내보내 보세요. + + 오류가 발생했습니다. 결과를 다시 내보내 보세요. - - 실패함 + + 실패함 - - 사용자 응용 프로그램을 찾을 수 없습니다. 사용자 앱이 조직의 앱 카탈로그에 업로드되는지 확인하세요. + + 사용자 응용 프로그램을 찾을 수 없습니다. 사용자 앱이 조직의 앱 카탈로그에 업로드되는지 확인하세요. - - 조직의 앱 카탈로그에서 {0} 사용자 응용 프로그램을 찾지 못했습니다. - {0} - app Id. (GUID). + + 조직의 앱 카탈로그에서 {0} 사용자 응용 프로그램을 찾지 못했습니다. + {0} - app Id. (GUID). - - 대화를 만들지 못했습니다. 오류 메시지: {0} + + 대화를 만들지 못했습니다. 오류 메시지: {0} - - 팀 사용자가 대화를 만들지 못했습니다({0}.). 예외: {1} + + 팀 사용자가 대화를 만들지 못했습니다({0}.). 예외: {1} - - 대화를 만들지 못했습니다. 요청이 제한되었습니다. 오류 메시지: {0}" + + 대화를 만들지 못했습니다. 요청이 제한되었습니다. 오류 메시지: {0}" - - DB에서 팀 {0} 찾지 못했습니다. + + DB에서 팀 {0} 찾지 못했습니다. - - 모든 사용자를 동기화하지 못했습니다. 상태 코드: {0} 예외: {1} + + 모든 사용자를 동기화하지 못했습니다. 상태 코드: {0} 예외: {1} - - 사용자를 위해 대화 ID를 가져오지 못했습니다. {0}. 상태 코드: {1} 예외: {2} + + 사용자를 위해 대화 ID를 가져오지 못했습니다. {0}. 상태 코드: {1} 예외: {2} - - {0} 그룹 구성원을 가져오지 못했습니다. {1} + + {0} 그룹 구성원을 가져오지 못했습니다. {1} - - 팀 {0} 팀 구성원을 가져오지 못했습니다. {1} + + 팀 {0} 팀 구성원을 가져오지 못했습니다. {1} - - 사용자에 대해 응용 프로그램을 설치하지 못했습니다. {0}. 예외: {1} + + 사용자에 대해 응용 프로그램을 설치하지 못했습니다. {0}. 예외: {1} - - 메시지를 다음을 위해 준비하지 못했습니다.{0} + + 메시지를 다음을 위해 준비하지 못했습니다.{0} - - 이 파일에는 내보낸 결과가 포함되어 있습니다. + + 이 파일에는 내보낸 결과가 포함되어 있습니다. - - 이 다운로드에 대한 링크가 만료되었습니다. 결과를 다시 내보냅니다. + + 이 다운로드에 대한 링크가 만료되었습니다. 결과를 다시 내보냅니다. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - 메타데이터 + + 메타데이터 - - 파일이 다운로드준비되었습니다. OneDrive에서도 복사본을 사용할 수 있습니다. + + 파일이 다운로드준비되었습니다. OneDrive에서도 복사본을 사용할 수 있습니다. - - 오류가 발생했습니다. 결과를 다시 내보내 보세요. + + 오류가 발생했습니다. 결과를 다시 내보내 보세요. - - 알림에 그룹이 {0} 그룹을 받는 사람으로 구성되어 있습니다. {1} 그룹을 넘어와서는 안 됩니다. + + 알림에 그룹이 {0} 그룹을 받는 사람으로 구성되어 있습니다. {1} 그룹을 넘어와서는 안 됩니다. - - 알림에 받는 사람으로 {0} 있습니다. {1} 명단을 초과하면 안 됩니다. + + 알림에 받는 사람으로 {0} 있습니다. {1} 명단을 초과하면 안 됩니다. - - 알림에 받는 사람으로 {0}개 팀이 있습니다. {1}개 팀을 초과하면 안 됩니다. + + 알림에 받는 사람으로 {0}개 팀이 있습니다. {1}개 팀을 초과하면 안 됩니다. - - 확인 + + 확인 - - 사용 권한이 거절되었습니다. 내보내기를 진행하지 않습니다. + + 사용 권한이 거절되었습니다. 내보내기를 진행하지 않습니다. - - 받는 사람을 찾을 수 없음 + + 받는 사람을 찾을 수 없음 - - 성공 + + 성공 - - 제한됨 + + 제한됨 - - 사용자 유형 + + 사용자 유형 - - 게스트 + + 게스트 - - 구성원 + + 구성원 - - 게스트 사용자가 지원되지 않음 + + 게스트 사용자가 지원되지 않음 \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.pt-BR.resx b/Source/CompanyCommunicator.Common/Resources/Strings.pt-BR.resx index 8a3795015..fec10631a 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.pt-BR.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.pt-BR.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Entre em contato com seu administrador de TI para obter permissão para visualizar esses dados. + + Entre em contato com seu administrador de TI para obter permissão para visualizar esses dados. - - Aplicativo Não Instalado + + Aplicativo Não Instalado - - Status de Entrega + + Status de Entrega - - Exportado Por + + Exportado Por - - Exportar Carimbo de data/hora + + Exportar Carimbo de data/hora - - Título da Mensagem + + Título da Mensagem - - Enviar Carimbo de data/hora + + Enviar Carimbo de data/hora - - Motivo do Status + + Motivo do Status - - Identificação da Equipe + + Identificação da Equipe - - Nome da Equipe + + Nome da Equipe - - UPN + + UPN - - ID do Usuário + + ID do Usuário - - Nome + + Nome - - {0} (copiar) + + {0} (copiar) - - Algo deu errado. Tente exportar os resultados novamente. + + Algo deu errado. Tente exportar os resultados novamente. - - Falhou + + Falhou - - Aplicativo de usuário não encontrado. Certifique-se de que o aplicativo do usuário seja carregado no catálogo de aplicativos da sua organização. + + Aplicativo de usuário não encontrado. Certifique-se de que o aplicativo do usuário seja carregado no catálogo de aplicativos da sua organização. - - Falha ao localizar o aplicativo do usuário: {0} no catálogo de aplicativos da organização. - {0} - app Id. (GUID). + + Falha ao localizar o aplicativo do usuário: {0} no catálogo de aplicativos da organização. + {0} - app Id. (GUID). - - Falha em criar conversa. Mensagem de erro: {0} + + Falha em criar conversa. Mensagem de erro: {0} - - Falha ao criar conversa com o usuário do teams: {0}. Exceção: {1} + + Falha ao criar conversa com o usuário do teams: {0}. Exceção: {1} - - Falha ao criar conversa. Solicitação limitada. Mensagem de erro: {0} " + + Falha ao criar conversa. Solicitação limitada. Mensagem de erro: {0} " - - Falha ao localizar o {0} de equipe no banco de BD. + + Falha ao localizar o {0} de equipe no banco de BD. - - Falha ao sincronizar todos os usuários. Código de status: {0} exceção: {1} + + Falha ao sincronizar todos os usuários. Código de status: {0} exceção: {1} - - Falha ao obter ID de conversa para o usuário: {0}. Código de status: {1} exceção: {2} + + Falha ao obter ID de conversa para o usuário: {0}. Código de status: {1} exceção: {2} - - Falha ao obter Membros para {0} de Grupo: {1} + + Falha ao obter Membros para {0} de Grupo: {1} - - Falha ao obter Membros para o {0} da equipe: {1} + + Falha ao obter Membros para o {0} da equipe: {1} - - Falha ao instalar o aplicativo para o usuário: {0}. Exceção: {1} + + Falha ao instalar o aplicativo para o usuário: {0}. Exceção: {1} - - Falha ao preparar a mensagem para envio: {0} + + Falha ao preparar a mensagem para envio: {0} - - Este arquivo contém os resultados exportados. + + Este arquivo contém os resultados exportados. - - O link deste download expirou. Exporte os resultados novamente. + + O link deste download expirou. Exporte os resultados novamente. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - Metadados + + Metadados - - Seu arquivo está pronto para ser baixado. Uma cópia também está disponível no OneDrive. + + Seu arquivo está pronto para ser baixado. Uma cópia também está disponível no OneDrive. - - Algo deu errado. Tente exportar os resultados novamente. + + Algo deu errado. Tente exportar os resultados novamente. - - A notificação tem {0} grupos como destinatários. Ele não deve exceder {1} grupos. + + A notificação tem {0} grupos como destinatários. Ele não deve exceder {1} grupos. - - A notificação tem {0} listagens como destinatários. Ela não deve exceder {1}. + + A notificação tem {0} listagens como destinatários. Ela não deve exceder {1}. - - A notificação tem {0} Teams como seus destinatários. Isso não deve exceder {1} equipes. + + A notificação tem {0} Teams como seus destinatários. Isso não deve exceder {1} equipes. - - OK + + OK - - Permissão recusada. Não continuaremos com a exportação. + + Permissão recusada. Não continuaremos com a exportação. - - Destinatário Não Encontrado + + Destinatário Não Encontrado - - Bem-sucedido + + Bem-sucedido - - Limitado + + Limitado - - Tipo de Usuário + + Tipo de Usuário - - Convidado + + Convidado - - Membro + + Membro - - Não há suporte para o Usuário Convidado + + Não há suporte para o Usuário Convidado \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploc.resx b/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploc.resx index ed9fb26e6..775e2ed10 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploc.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploc.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - _Cфйтд©т чфцґ ЇЋ дdмїй fбг pэямїssїбп тю vїзш тнїs dдтд.ЍѝцзджфЍ_ + + _Cфйтд©т чфцґ ЇЋ дdмїй fбг pэямїssїбп тю vїзш тнїs dдтд.ЍѝцзджфЍ_ - - _Дpp Лфт ЇпsтдllёdЍѝц_ + + _Дpp Лфт ЇпsтдllёdЍѝц_ - - _Dёlїvзґу SтдтµsЍѝ_ + + _Dёlїvзґу SтдтµsЍѝ_ - - _Эжpюятзd БўЍѝ_ + + _Эжpюятзd БўЍѝ_ - - _Эжpюгт ЋїмзSтдмpЍѝ_ + + _Эжpюгт ЋїмзSтдмpЍѝ_ - - _Mёssдgэ ЋїтlёЍѝ_ + + _Mёssдgэ ЋїтlёЍѝ_ - - _Sёпт ЋїмёSтдмpЍѝ_ + + _Sёпт ЋїмёSтдмpЍѝ_ - - _Sтдтџs ЯєдsблЍѝ_ + + _Sтдтџs ЯєдsблЍѝ_ - - _Ћздм ЇDЍ_ + + _Ћздм ЇDЍ_ - - _Ћэдм ИдмёЍ_ + + _Ћэдм ИдмёЍ_ - - _ЦPП_ + + _ЦPП_ - - _Џsзґ ЇDЍ_ + + _Џsзґ ЇDЍ_ - - _ПдмзЍ_ + + _ПдмзЍ_ - - _{0} (©юpў)Ѝѝ_ + + _{0} (©юpў)Ѝѝ_ - - _Sфмєтнїиg щзит щяблg. Ћґў єжpбятїпg тнз яєsџlтs дgдїп.ЍѝцзджфЍ_ + + _Sфмєтнїиg щзит щяблg. Ћґў єжpбятїпg тнз яєsџlтs дgдїп.ЍѝцзджфЍ_ - - _FдїlэdЍ_ + + _FдїlэdЍ_ - - _Џsєя дpplї©дтїби пфт fфџйd. Mдкз sцгз тћз Цsєг дpp їs цplюдdзd тф чбџґ фґgдпїzдтїби's дpp ©дтдlюg.ЍѝцзджфЍѝцзджфЍ_ + + _Џsєя дpplї©дтїби пфт fфџйd. Mдкз sцгз тћз Цsєг дpp їs цplюдdзd тф чбџґ фґgдпїzдтїби's дpp ©дтдlюg.ЍѝцзджфЍѝцзджфЍ_ - - _Fдїlєd тю fїйd тћз Џsёґ дpplї©дтїюп: {0} їп тнє бгgдиїzдтїфй's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ - {0} - app Id. (GUID). + + _Fдїlєd тю fїйd тћз Џsёґ дpplї©дтїюп: {0} їп тнє бгgдиїzдтїфй's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ + {0} - app Id. (GUID). - - _Fдїlєd тф ©ґєдтэ ©бпvёґsдтїбл. Єгяфя мєssдgё: {0}Ѝѝцзджф_ + + _Fдїlєd тф ©ґєдтэ ©бпvёґsдтїбл. Єгяфя мєssдgё: {0}Ѝѝцзджф_ - - _Fдїlєd тф ©яздтё ©юпvєяsдтїбл щїтћ тёдмs џsєг: {0}. Єж©зpтїюп: {1}ЍѝцзджфЍѝц_ + + _Fдїlєd тф ©яздтё ©юпvєяsдтїбл щїтћ тёдмs џsєг: {0}. Єж©зpтїюп: {1}ЍѝцзджфЍѝц_ - - _Fдїlєd тю ©ґэдтё ©юлvєґsдтїбй. Язqџзsт тнгюттlзd. Ёггфг мзssдgє: {0}"ЍѝцзджфЍѝц_ + + _Fдїlєd тю ©ґэдтё ©юлvєґsдтїбй. Язqџзsт тнгюттlзd. Ёггфг мзssдgє: {0}"ЍѝцзджфЍѝц_ - - _Fдїlэd тб fїпd тћє тєдм {0} їй DБ.Ѝѝцзд_ + + _Fдїlэd тб fїпd тћє тєдм {0} їй DБ.Ѝѝцзд_ - - _Fдїlєd тю sўп© дll цsэґs. Sтдтцs Cбdё: {0} Ёж©зpтїбп: {1}ЍѝцзджфЍѝ_ + + _Fдїlєd тю sўп© дll цsэґs. Sтдтцs Cбdё: {0} Ёж©зpтїбп: {1}ЍѝцзджфЍѝ_ - - _Fдїlёd тб gёт ©бпvєгsдтїюп їd fбя џsэя: {0}. Sтдтµs Cфdє: {1} Ёж©єpтїфи: {2}ЍѝцзджфЍѝцз_ + + _Fдїlёd тб gёт ©бпvєгsдтїюп їd fбя џsэя: {0}. Sтдтµs Cфdє: {1} Ёж©єpтїфи: {2}ЍѝцзджфЍѝцз_ - - _Fдїlєd тф gэт мёмьзяs fюя gябџp {0}: {1}Ѝѝцздж_ + + _Fдїlєd тф gэт мёмьзяs fюя gябџp {0}: {1}Ѝѝцздж_ - - _Fдїlёd тю gёт мємьэґs fюґ тєдм {0}: {1}Ѝѝцздж_ + + _Fдїlёd тю gёт мємьэґs fюґ тєдм {0}: {1}Ѝѝцздж_ - - _Fдїlзd тф їиsтдll дpplї©дтїбй fбг џsзг: {0}. Зж©ёpтїбл: {1}ЍѝцзджфЍѝ_ + + _Fдїlзd тф їиsтдll дpplї©дтїбй fбг џsзг: {0}. Зж©ёpтїбл: {1}ЍѝцзджфЍѝ_ - - _Fдїlёd тю pґёpдґё тћє мєssдgё fфґ sєлdїлg:{0}Ѝѝцзджф_ + + _Fдїlёd тю pґёpдґё тћє мєssдgё fфґ sєлdїлg:{0}Ѝѝцзджф_ - - _Ћћїs fїlэ ©бптдїпs тнё ґєsцlтs чфц ёжpфгтэd.Ѝѝцзджф_ + + _Ћћїs fїlэ ©бптдїпs тнё ґєsцlтs чфц ёжpфгтэd.Ѝѝцзджф_ - - _Ћћё lїиќ fфя тћїs dфшлlбдd ћдs єжpїґєd. Зжpбят тћэ ґєsџlтs дgдїй.ЍѝцзджфЍѝц_ + + _Ћћё lїиќ fфя тћїs dфшлlбдd ћдs єжpїґєd. Зжpбят тћэ ґєsџlтs дgдїй.ЍѝцзджфЍѝц_ - - _ЗжpюгтDдтдЍѝ_ + + _ЗжpюгтDдтдЍѝ_ - - _Mёssдgз_DёlїvэячЍѝ_ + + _Mёssдgз_DёlїvэячЍѝ_ - - _MётдdдтдЍ_ + + _MётдdдтдЍ_ - - _Чфµґ fїlє їs яэдdу тб dющпlбдd. Д ©фpў їs дlsб дvдїlдьlз їй ЮйзDгїvё.ЍѝцзджфЍѝц_ + + _Чфµґ fїlє їs яэдdу тб dющпlбдd. Д ©фpў їs дlsб дvдїlдьlз їй ЮйзDгїvё.ЍѝцзджфЍѝц_ - - _Sюмєтнїлg шёлт шґбпg. Ћяч єжpфятїиg тнє язsцlтs дgдїй.ЍѝцзджфЍ_ + + _Sюмєтнїлg шёлт шґбпg. Ћяч єжpфятїиg тнє язsцlтs дgдїй.ЍѝцзджфЍ_ - - _Ћћё ифтїfї©дтїюл ћдs {0} gяюцps дs їтs яё©їpїзитs. Їт sнфџldл'т ёж©єэd {1} gябµps.ЍѝцзджфЍѝцзд_ + + _Ћћё ифтїfї©дтїюл ћдs {0} gяюцps дs їтs яё©їpїзитs. Їт sнфџldл'т ёж©єэd {1} gябµps.ЍѝцзджфЍѝцзд_ - - _Ћћз йбтїfї©дтїфи ћдs {0} ґюsтзяs дs їтs яє©їpїзптs. Їт sнфџldл'т зж©зєd {1} ґфsтёгs.ЍѝцзджфЍѝцздж_ + + _Ћћз йбтїfї©дтїфи ћдs {0} ґюsтзяs дs їтs яє©їpїзптs. Їт sнфџldл'т зж©зєd {1} ґфsтёгs.ЍѝцзджфЍѝцздж_ - - _Ћнё йбтїfї©дтїюи ндs {0} тэдмs дs їтs ґє©їpїэйтs. Їт sнфµldй'т зж©єэd {1} тэдмs.ЍѝцзджфЍѝцзд_ + + _Ћнё йбтїfї©дтїюи ндs {0} тэдмs дs їтs ґє©їpїэйтs. Їт sнфµldй'т зж©єэd {1} тэдмs.ЍѝцзджфЍѝцзд_ - - _ЮЌ_ + + _ЮЌ_ - - _Pёґмїssїбп dз©lїлзd. Щэ щїll лбт pяф©єэd шїтћ тнё зжpфґт.ЍѝцзджфЍѝ_ + + _Pёґмїssїбп dз©lїлзd. Щэ щїll лбт pяф©єэd шїтћ тнё зжpфґт.ЍѝцзджфЍѝ_ - - _Гз©їpїєит Иют FбµпdЍѝц_ + + _Гз©їpїєит Иют FбµпdЍѝц_ - - _Sџ©©эєdэdЍ_ + + _Sџ©©эєdэdЍ_ - - _ЋнґбттlёdЍ_ + + _ЋнґбттlёdЍ_ - - _Цsёя ЋўpєЍ_ + + _Цsёя ЋўpєЍ_ - - _GµёsтЍ_ + + _GµёsтЍ_ - - _MзмвэгЍ_ + + _MзмвэгЍ_ - - _Gµэsт Џsэя йфт sцppфґтэdЍѝцз_ + + _Gµэsт Џsэя йфт sцppфґтэdЍѝцз_ \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploca.resx b/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploca.resx index c7d092c9f..cc7864f9c 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploca.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.qps-ploca.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - _Cблтд©т уфцґ ЇЋ дdмїп fюя pёґмїssїфп тб vїзш тнїs dдтд.ЍѝцзджфЍ_ + + _Cблтд©т уфцґ ЇЋ дdмїп fюя pёґмїssїфп тб vїзш тнїs dдтд.ЍѝцзджфЍ_ - - _Дpp Пфт ЇиsтдllзdЍѝц_ + + _Дpp Пфт ЇиsтдllзdЍѝц_ - - _Dзlїvзгч SтдтџsЍѝ_ + + _Dзlїvзгч SтдтџsЍѝ_ - - _Эжpбгтєd bўЍѝ_ + + _Эжpбгтєd bўЍѝ_ - - _Эжpфят ЋїмёSтдмpЍѝ_ + + _Эжpфят ЋїмёSтдмpЍѝ_ - - _Mёssдgё ЋїтlєЍѝ_ + + _Mёssдgё ЋїтlєЍѝ_ - - _Sёлт ЋїмёSтдмpЍѝ_ + + _Sёлт ЋїмёSтдмpЍѝ_ - - _Sтдтџs ЯёдsфйЍѝ_ + + _Sтдтџs ЯёдsфйЍѝ_ - - _Ћздм ЇDЍ_ + + _Ћздм ЇDЍ_ - - _Ћэдм ПдмєЍ_ + + _Ћэдм ПдмєЍ_ - - _ЦPЛ_ + + _ЦPЛ_ - - _Цsзґ ЇDЍ_ + + _Цsзґ ЇDЍ_ - - _ЙдмэЍ_ + + _ЙдмэЍ_ - - _{0} (©фpу)Ѝѝ_ + + _{0} (©фpу)Ѝѝ_ - - _Sфмєтћїйg шэпт щяюлg. Ћгч єжpюятїлg тћє ґєsџlтs дgдїл.ЍѝцзджфЍ_ + + _Sфмєтћїйg шэпт щяюлg. Ћгч єжpюятїлg тћє ґєsџlтs дgдїл.ЍѝцзджфЍ_ - - _FдїlэdЍ_ + + _FдїlэdЍ_ - - _Џsэґ дpplї©дтїюй йют fфµпd. Mдќє sµяє тнє Џsєя дpp їs µplфдdёd тф ўюцг бяgдлїzдтїби's дpp ©дтдlфg.ЍѝцзджфЍѝцзджфЍ_ + + _Џsэґ дpplї©дтїюй йют fфµпd. Mдќє sµяє тнє Џsєя дpp їs µplфдdёd тф ўюцг бяgдлїzдтїби's дpp ©дтдlфg.ЍѝцзджфЍѝцзджфЍ_ - - _Fдїlэd тб fїиd тћз Цsзг дpplї©дтїфй: {0} їл тнє бяgдпїzдтїфй's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ - {0} - app Id. (GUID). + + _Fдїlэd тб fїиd тћз Цsзг дpplї©дтїфй: {0} їл тнє бяgдпїzдтїфй's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ + {0} - app Id. (GUID). - - _Fдїlзd тю ©гэдтё ©бпvёґsдтїюи. Зяґфг мёssдgэ: {0}Ѝѝцзджф_ + + _Fдїlзd тю ©гэдтё ©бпvёґsдтїюи. Зяґфг мёssдgэ: {0}Ѝѝцзджф_ - - _Fдїlёd тф ©гздтё ©бпvзгsдтїюл шїтћ тёдмs µsэґ: {0}. Эж©зpтїюп: {1}ЍѝцзджфЍѝц_ + + _Fдїlёd тф ©гздтё ©бпvзгsдтїюл шїтћ тёдмs µsэґ: {0}. Эж©зpтїюп: {1}ЍѝцзджфЍѝц_ - - _Fдїlёd тб ©ґёдтє ©фпvзґsдтїфп. Язqџэsт тнґфттlзd. Ёґгфґ мэssдgэ: {0}"ЍѝцзджфЍѝц_ + + _Fдїlёd тб ©ґёдтє ©фпvзґsдтїфп. Язqџэsт тнґфттlзd. Ёґгфґ мэssдgэ: {0}"ЍѝцзджфЍѝц_ - - _Fдїlёd тб fїпd тћэ тёдм {0} їй Db.Ѝѝцзд_ + + _Fдїlёd тб fїпd тћэ тёдм {0} їй Db.Ѝѝцзд_ - - _Fдїlэd тб sчл© дll цsєґs. Sтдтџs Cюdэ: {0} Зж©єpтїфй: {1}ЍѝцзджфЍѝ_ + + _Fдїlэd тб sчл© дll цsєґs. Sтдтџs Cюdэ: {0} Зж©єpтїфй: {1}ЍѝцзджфЍѝ_ - - _Fдїlєd тю gэт ©бпvзяsдтїфп їd fбя цsэя: {0}. Sтдтџs Cюdз: {1} Эж©зpтїюи: {2}ЍѝцзджфЍѝцз_ + + _Fдїlєd тю gэт ©бпvзяsдтїфп їd fбя цsэя: {0}. Sтдтџs Cюdз: {1} Эж©зpтїюи: {2}ЍѝцзджфЍѝцз_ - - _Fдїlєd тф gёт мємьёяs fбг gяфµp {0}: {1}Ѝѝцздж_ + + _Fдїlєd тф gёт мємьёяs fбг gяфµp {0}: {1}Ѝѝцздж_ - - _Fдїlзd тб gєт мэмъєгs fюя тэдм {0}: {1}Ѝѝцздж_ + + _Fдїlзd тб gєт мэмъєгs fюя тэдм {0}: {1}Ѝѝцздж_ - - _Fдїlёd тю їпsтдll дpplї©дтїфи fфґ µsзґ: {0}. Ёж©зpтїбп: {1}ЍѝцзджфЍѝ_ + + _Fдїlёd тю їпsтдll дpplї©дтїфи fфґ µsзґ: {0}. Ёж©зpтїбп: {1}ЍѝцзджфЍѝ_ - - _Fдїlєd тю pяёpдяє тћз мзssдgё fюґ sєпdїпg:{0}Ѝѝцзджф_ + + _Fдїlєd тю pяёpдяє тћз мзssдgё fюґ sєпdїпg:{0}Ѝѝцзджф_ - - _Ћнїs fїlз ©юлтдїйs тћэ гєsµlтs уюц зжpбґтєd.Ѝѝцзджф_ + + _Ћнїs fїlз ©юлтдїйs тћэ гєsµlтs уюц зжpбґтєd.Ѝѝцзджф_ - - _Ћћё lїик fюг тћїs dфшлlюдd ћдs ёжpїґёd. Єжpюґт тнз яэsµlтs дgдїи.ЍѝцзджфЍѝц_ + + _Ћћё lїик fюг тћїs dфшлlюдd ћдs ёжpїґёd. Єжpюґт тнз яэsµlтs дgдїи.ЍѝцзджфЍѝц_ - - _ЁжpюгтDдтдЍѝ_ + + _ЁжpюгтDдтдЍѝ_ - - _Mєssдgё_DёlїvэяуЍѝ_ + + _Mєssдgё_DёlїvэяуЍѝ_ - - _MётдdдтдЍ_ + + _MётдdдтдЍ_ - - _Чюµя fїlё їs гздdу тф dюшпlюдd. Д ©юpў їs дlsб дvдїlдвlэ їи ЮпзDяїvё.ЍѝцзджфЍѝц_ + + _Чюµя fїlё їs гздdу тф dюшпlюдd. Д ©юpў їs дlsб дvдїlдвlэ їи ЮпзDяїvё.ЍѝцзджфЍѝц_ - - _Sюмётћїиg щёит щгбиg. Ћгў єжpюґтїлg тћз ґєsµlтs дgдїй.ЍѝцзджфЍ_ + + _Sюмётћїиg щёит щгбиg. Ћгў єжpюґтїлg тћз ґєsµlтs дgдїй.ЍѝцзджфЍ_ - - _Ћнє пютїfї©дтїфл ндs {0} gґбµps дs їтs яє©їpїэитs. Їт sћбџldп'т зж©єєd {1} gяюџps.ЍѝцзджфЍѝцзд_ + + _Ћнє пютїfї©дтїфл ндs {0} gґбµps дs їтs яє©їpїэитs. Їт sћбџldп'т зж©єєd {1} gяюџps.ЍѝцзджфЍѝцзд_ - - _Ћнё пютїfї©дтїфй ћдs {0} яюsтёгs дs їтs гё©їpїэптs. Їт sћбцldи'т єж©ёєd {1} ґфsтєяs.ЍѝцзджфЍѝцздж_ + + _Ћнё пютїfї©дтїфй ћдs {0} яюsтёгs дs їтs гё©їpїэптs. Їт sћбцldи'т єж©ёєd {1} ґфsтєяs.ЍѝцзджфЍѝцздж_ - - _Ћћз пфтїfї©дтїюп ћдs {0} тэдмs дs їтs яэ©їpїёлтs. Їт sнфџldп'т ёж©ээd {1} тздмs.ЍѝцзджфЍѝцзд_ + + _Ћћз пфтїfї©дтїюп ћдs {0} тэдмs дs їтs яэ©їpїёлтs. Їт sнфџldп'т ёж©ээd {1} тздмs.ЍѝцзджфЍѝцзд_ - - _ФЌ_ + + _ФЌ_ - - _Pзґмїssїфи dз©lїлёd. Щє щїll лбт pгю©ёєd шїтн тћє єжpбґт.ЍѝцзджфЍѝ_ + + _Pзґмїssїфи dз©lїлёd. Щє щїll лбт pгю©ёєd шїтн тћє єжpбґт.ЍѝцзджфЍѝ_ - - _Яё©їpїзйт Пфт FюцпdЍѝц_ + + _Яё©їpїзйт Пфт FюцпdЍѝц_ - - _Sц©©ээdзdЍ_ + + _Sц©©ээdзdЍ_ - - _ЋћяюттlёdЍ_ + + _ЋћяюттlёdЍ_ - - _Цsзґ ЋуpёЍ_ + + _Цsзґ ЋуpёЍ_ - - _GµєsтЍ_ + + _GµєsтЍ_ - - _MємвёяЍ_ + + _MємвёяЍ_ - - _Gµэsт Цsёя ифт sџppюятзdЍѝцз_ + + _Gµэsт Цsёя ифт sџppюятзdЍѝцз_ \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.qps-plocm.resx b/Source/CompanyCommunicator.Common/Resources/Strings.qps-plocm.resx index 65d196353..1b5aceb62 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.qps-plocm.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.qps-plocm.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - _Cфлтд©т уфџг ЇЋ дdмїп fфя pэґмїssїюи тф vїєш тћїs dдтд.ЍѝцзджфЍ_ + + _Cфлтд©т уфџг ЇЋ дdмїп fфя pэґмїssїюи тф vїєш тћїs dдтд.ЍѝцзджфЍ_ - - _Дpp Йфт ЇпsтдllзdЍѝц_ + + _Дpp Йфт ЇпsтдllзdЍѝц_ - - _Dэlїvзяу SтдтџsЍѝ_ + + _Dэlїvзяу SтдтџsЍѝ_ - - _Ёжpюгтєd bуЍѝ_ + + _Ёжpюгтєd bуЍѝ_ - - _Єжpбят ЋїмёSтдмpЍѝ_ + + _Єжpбят ЋїмёSтдмpЍѝ_ - - _Mэssдgэ ЋїтlэЍѝ_ + + _Mэssдgэ ЋїтlэЍѝ_ - - _Sэит ЋїмєSтдмpЍѝ_ + + _Sэит ЋїмєSтдмpЍѝ_ - - _Sтдтµs ЃэдsюйЍѝ_ + + _Sтдтµs ЃэдsюйЍѝ_ - - _Ћздм ЇDЍ_ + + _Ћздм ЇDЍ_ - - _Ћэдм ЙдмзЍ_ + + _Ћэдм ЙдмзЍ_ - - _ЏPЛ_ + + _ЏPЛ_ - - _Џsзґ ЇDЍ_ + + _Џsзґ ЇDЍ_ - - _ЛдмэЍ_ + + _ЛдмэЍ_ - - _{0} (©фpч)Ѝѝ_ + + _{0} (©фpч)Ѝѝ_ - - _Sбмєтнїпg шэпт щгфйg. Ћґу зжpюятїлg тнё язsџlтs дgдїл.ЍѝцзджфЍ_ + + _Sбмєтнїпg шэпт щгфйg. Ћґу зжpюятїлg тнё язsџlтs дgдїл.ЍѝцзджфЍ_ - - _FдїlёdЍ_ + + _FдїlёdЍ_ - - _Цsэґ дpplї©дтїюй иют fюџиd. Mдќє sџяз тћє Цsэг дpp їs цplюдdёd тю чбця югgдпїzдтїфл's дpp ©дтдlбg.ЍѝцзджфЍѝцзджфЍ_ + + _Цsэґ дpplї©дтїюй иют fюџиd. Mдќє sџяз тћє Цsэг дpp їs цplюдdёd тю чбця югgдпїzдтїфл's дpp ©дтдlбg.ЍѝцзджфЍѝцзджфЍ_ - - _Fдїlєd тф fїлd тћэ Цsёя дpplї©дтїюи: {0} їп тнє фґgдлїzдтїюп's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ - {0} - app Id. (GUID). + + _Fдїlєd тф fїлd тћэ Цsёя дpplї©дтїюи: {0} їп тнє фґgдлїzдтїюп's дpp ©дтдlбg.ЍѝцзджфЍѝцз_ + {0} - app Id. (GUID). - - _Fдїlзd тб ©ґэдтё ©юйvзгsдтїюп. Зггбя мзssдgё: {0}Ѝѝцзджф_ + + _Fдїlзd тб ©ґэдтё ©юйvзгsдтїюп. Зггбя мзssдgё: {0}Ѝѝцзджф_ - - _Fдїlэd тб ©яздтз ©юиvєґsдтїби шїтн тєдмs µsёґ: {0}. Ёж©эpтїюл: {1}ЍѝцзджфЍѝц_ + + _Fдїlэd тб ©яздтз ©юиvєґsдтїби шїтн тєдмs µsёґ: {0}. Ёж©эpтїюл: {1}ЍѝцзджфЍѝц_ - - _Fдїlєd тю ©гёдтз ©блvзґsдтїфл. Ґєqµзsт тнґбттlєd. Єяґюя мзssдgз: {0}"ЍѝцзджфЍѝц_ + + _Fдїlєd тю ©гёдтз ©блvзґsдтїфл. Ґєqµзsт тнґбттlєd. Єяґюя мзssдgз: {0}"ЍѝцзджфЍѝц_ - - _Fдїlэd тф fїлd тћэ тёдм {0} їл DЪ.Ѝѝцзд_ + + _Fдїlэd тф fїлd тћэ тёдм {0} їл DЪ.Ѝѝцзд_ - - _Fдїlзd тю sўл© дll µsзяs. Sтдтµs Cбdз: {0} Єж©єpтїфи: {1}ЍѝцзджфЍѝ_ + + _Fдїlзd тю sўл© дll µsзяs. Sтдтµs Cбdз: {0} Єж©єpтїфи: {1}ЍѝцзджфЍѝ_ - - _Fдїlзd тю gэт ©фйvзгsдтїби їd fбґ џsзя: {0}. Sтдтцs Cбdє: {1} Эж©ёpтїюй: {2}ЍѝцзджфЍѝцз_ + + _Fдїlзd тю gэт ©фйvзгsдтїби їd fбґ џsзя: {0}. Sтдтцs Cбdє: {1} Эж©ёpтїюй: {2}ЍѝцзджфЍѝцз_ - - _Fдїlзd тб gэт мзмъэяs fюг gябµp {0}: {1}Ѝѝцздж_ + + _Fдїlзd тб gэт мзмъэяs fюг gябµp {0}: {1}Ѝѝцздж_ - - _Fдїlэd тю gёт мёмьёгs fюя тёдм {0}: {1}Ѝѝцздж_ + + _Fдїlэd тю gёт мёмьёгs fюя тёдм {0}: {1}Ѝѝцздж_ - - _Fдїlёd тю їлsтдll дpplї©дтїбл fюг µsэг: {0}. Зж©зpтїфи: {1}ЍѝцзджфЍѝ_ + + _Fдїlёd тю їлsтдll дpplї©дтїбл fюг µsэг: {0}. Зж©зpтїфи: {1}ЍѝцзджфЍѝ_ - - _Fдїlёd тф pгёpдгэ тћэ мёssдgз fбя sєлdїлg:{0}Ѝѝцзджф_ + + _Fдїlёd тф pгёpдгэ тћэ мёssдgз fбя sєлdїлg:{0}Ѝѝцзджф_ - - _Ћћїs fїlэ ©фйтдїиs тнз гёsцlтs ўюџ зжpбятзd.Ѝѝцзджф_ + + _Ћћїs fїlэ ©фйтдїиs тнз гёsцlтs ўюџ зжpбятзd.Ѝѝцзджф_ - - _Ћнё lїйк fбя тнїs dфшпlбдd ндs ёжpїгёd. Зжpфґт тћё яэsџlтs дgдїл.ЍѝцзджфЍѝц_ + + _Ћнё lїйк fбя тнїs dфшпlбдd ндs ёжpїгёd. Зжpфґт тћё яэsџlтs дgдїл.ЍѝцзджфЍѝц_ - - _ЄжpфятDдтдЍѝ_ + + _ЄжpфятDдтдЍѝ_ - - _Mзssдgз_DёlїvєгўЍѝ_ + + _Mзssдgз_DёlїvєгўЍѝ_ - - _MётдdдтдЍ_ + + _MётдdдтдЍ_ - - _Чфµя fїlё їs яздdу тб dющлlфдd. Д ©фpў їs дlsю дvдїlдъlз їп ФпэDяїvз.ЍѝцзджфЍѝц_ + + _Чфµя fїlё їs яздdу тб dющлlфдd. Д ©фpў їs дlsю дvдїlдъlз їп ФпэDяїvз.ЍѝцзджфЍѝц_ - - _Sюмзтћїпg щзит шгюлg. Ћяў ёжpбґтїиg тћє гєsµlтs дgдїл.ЍѝцзджфЍ_ + + _Sюмзтћїпg щзит шгюлg. Ћяў ёжpбґтїиg тћє гєsµlтs дgдїл.ЍѝцзджфЍ_ - - _Ћнэ йбтїfї©дтїюи ћдs {0} gгфџps дs їтs гэ©їpїєитs. Їт sнфџldп'т зж©зэd {1} gябџps.ЍѝцзджфЍѝцзд_ + + _Ћнэ йбтїfї©дтїюи ћдs {0} gгфџps дs їтs гэ©їpїєитs. Їт sнфџldп'т зж©зэd {1} gябџps.ЍѝцзджфЍѝцзд_ - - _Ћнз лбтїfї©дтїбп ћдs {0} гфsтэгs дs їтs ґз©їpїєлтs. Їт sћбџldл'т зж©ёэd {1} яюsтёґs.ЍѝцзджфЍѝцздж_ + + _Ћнз лбтїfї©дтїбп ћдs {0} гфsтэгs дs їтs ґз©їpїєлтs. Їт sћбџldл'т зж©ёэd {1} яюsтёґs.ЍѝцзджфЍѝцздж_ - - _Ћћє йбтїfї©дтїбл ндs {0} тёдмs дs їтs яз©їpїёитs. Їт sћфµldи'т эж©ёэd {1} тэдмs.ЍѝцзджфЍѝцзд_ + + _Ћћє йбтїfї©дтїбл ндs {0} тёдмs дs їтs яз©їpїёитs. Їт sћфµldи'т эж©ёэd {1} тэдмs.ЍѝцзджфЍѝцзд_ - - _ЮЌ_ + + _ЮЌ_ - - _Pєгмїssїфй dэ©lїпэd. Щз щїll йбт pгю©эєd шїтћ тнэ зжpюят.ЍѝцзджфЍѝ_ + + _Pєгмїssїфй dэ©lїпэd. Щз щїll йбт pгю©эєd шїтћ тнэ зжpюят.ЍѝцзджфЍѝ_ - - _Гё©їpїзит Ибт FюџпdЍѝц_ + + _Гё©їpїзит Ибт FюџпdЍѝц_ - - _Sц©©ёєdёdЍ_ + + _Sц©©ёєdёdЍ_ - - _ЋћгфттlёdЍ_ + + _ЋћгфттlёdЍ_ - - _Цsёг ЋуpзЍ_ + + _Цsёг ЋуpзЍ_ - - _GџзsтЍ_ + + _GџзsтЍ_ - - _MэмьзґЍ_ + + _MэмьзґЍ_ - - _Gџёsт Џsзя пют sџppбятзdЍѝцз_ + + _Gџёsт Џsзя пют sџppбятзdЍѝцз_ \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.ru-RU.resx b/Source/CompanyCommunicator.Common/Resources/Strings.ru-RU.resx index 2ac6238ee..6cb48a589 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.ru-RU.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.ru-RU.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Обратитесь к ИТ-администратору за разрешением на просмотр этих данных. + + Обратитесь к ИТ-администратору за разрешением на просмотр этих данных. - - Приложение не установлено + + Приложение не установлено - - Статус доставки + + Статус доставки - - Экспортировано пользователем + + Экспортировано пользователем - - Отметка времени экспорта + + Отметка времени экспорта - - Заголовок сообщения + + Заголовок сообщения - - Отметка времени отправки + + Отметка времени отправки - - Причина состояния + + Причина состояния - - Идентификатор команды + + Идентификатор команды - - Имя команды + + Имя команды - - UPN + + UPN - - Идентификатор пользователя + + Идентификатор пользователя - - Имя + + Имя - - {0} (копия) + + {0} (копия) - - Произошла ошибка. Повторите попытку экспорта результатов. + + Произошла ошибка. Повторите попытку экспорта результатов. - - Сбой + + Сбой - - Пользовательское приложение не найдено. Убедитесь, что приложение пользователя отправлено в каталог приложений вашей организации. + + Пользовательское приложение не найдено. Убедитесь, что приложение пользователя отправлено в каталог приложений вашей организации. - - Не удалось найти пользовательское приложение: {0} в каталоге приложений организации. - {0} - app Id. (GUID). + + Не удалось найти пользовательское приложение: {0} в каталоге приложений организации. + {0} - app Id. (GUID). - - Не удалось создать беседу. Сообщение об ошибке: {0} + + Не удалось создать беседу. Сообщение об ошибке: {0} - - Не удалось создать беседу с пользователем Teams: {0}. Исключение: {1} + + Не удалось создать беседу с пользователем Teams: {0}. Исключение: {1} - - Не удалось создать беседу. Запрос отрегулирован. Сообщение об ошибке: {0} " + + Не удалось создать беседу. Запрос отрегулирован. Сообщение об ошибке: {0} " - - Не удалось найти команду {0} в базе данных. + + Не удалось найти команду {0} в базе данных. - - Не удалось синхронизировать всех пользователей. Код состояния: исключение {0}: {1} + + Не удалось синхронизировать всех пользователей. Код состояния: исключение {0}: {1} - - Не удалось получить ИД беседы для пользователя: {0}. Код состояния: исключение {1}: {2} + + Не удалось получить ИД беседы для пользователя: {0}. Код состояния: исключение {1}: {2} - - Не удалось получить участников группы {0}: {1} + + Не удалось получить участников группы {0}: {1} - - Не удалось получить участников группы {0}: {1} + + Не удалось получить участников группы {0}: {1} - - Не удалось установить приложение для пользователя: {0}. Исключение: {1} + + Не удалось установить приложение для пользователя: {0}. Исключение: {1} - - Не удалось подготовить сообщение для отправки: {0} + + Не удалось подготовить сообщение для отправки: {0} - - Этот файл содержит экспортированные результаты. + + Этот файл содержит экспортированные результаты. - - Срок действия ссылки для скачивания истек. Экспортируйте результаты еще раз. + + Срок действия ссылки для скачивания истек. Экспортируйте результаты еще раз. - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - Метаданные + + Метаданные - - Файл готов к загрузке. Копия также доступна в OneDrive. + + Файл готов к загрузке. Копия также доступна в OneDrive. - - Произошла ошибка. Повторите попытку экспорта результатов. + + Произошла ошибка. Повторите попытку экспорта результатов. - - В уведомлении {0} группы в качестве получателей. Не должно превышать {1} групп. + + В уведомлении {0} группы в качестве получателей. Не должно превышать {1} групп. - - Количество списков получателей у этого уведомления: {0}. Количество списков не должно превышать {1}. + + Количество списков получателей у этого уведомления: {0}. Количество списков не должно превышать {1}. - - Уведомление содержит {0} Teams в качестве его получателей. Не должно превышать {1} Teams. + + Уведомление содержит {0} Teams в качестве его получателей. Не должно превышать {1} Teams. - - ОК + + ОК - - Разрешение отклонено. Экспорт не может быть продолжен. + + Разрешение отклонено. Экспорт не может быть продолжен. - - Получатель не найден + + Получатель не найден - - Успешно + + Успешно - - Отрегулировано + + Отрегулировано - - Тип пользователя + + Тип пользователя - - Гость + + Гость - - Участник + + Участник - - Гостевой пользователь не поддерживается + + Гостевой пользователь не поддерживается \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.zh-CN.resx b/Source/CompanyCommunicator.Common/Resources/Strings.zh-CN.resx index 3b9c8d6a7..f39a2106d 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.zh-CN.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.zh-CN.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 请与你的 IT 管理员联系,以获取查看此数据的权限。 + + 请与你的 IT 管理员联系,以获取查看此数据的权限。 - - 未安装应用 + + 未安装应用 - - 发送状态 + + 发送状态 - - 导出者 + + 导出者 - - 导出时间戳 + + 导出时间戳 - - 邮件标题 + + 邮件标题 - - 已发送 TimeStamp + + 已发送 TimeStamp - - 状态原因 + + 状态原因 - - 团队 ID + + 团队 ID - - 团队名称 + + 团队名称 - - UPN + + UPN - - 用户 ID + + 用户 ID - - 姓名 + + 姓名 - - {0} (副本) + + {0} (副本) - - 出现错误。请再次尝试导出结果。 + + 出现错误。请再次尝试导出结果。 - - 失败 + + 失败 - - 找不到用户应用程序。请确保将用户应用上传到你组织的应用程序目录。 + + 找不到用户应用程序。请确保将用户应用上传到你组织的应用程序目录。 - - 找不到用户应用程序: {0} 在组织的应用程序目录中。 - {0} - app Id. (GUID). + + 找不到用户应用程序: {0} 在组织的应用程序目录中。 + {0} - app Id. (GUID). - - 无法创建对话。错误消息: {0} + + 无法创建对话。错误消息: {0} - - 未能创建与团队用户: {0} 的对话。异常: {1} + + 未能创建与团队用户: {0} 的对话。异常: {1} - - 未能创建对话。请求受到限制。错误消息: {0}" + + 未能创建对话。请求受到限制。错误消息: {0}" - - 未能在 DB 中找到团队 {0}。 + + 未能在 DB 中找到团队 {0}。 - - 未能同步所有用户。状态代码: {0} 异常: {1} + + 未能同步所有用户。状态代码: {0} 异常: {1} - - 未能获取用户的会话 id: {0}。状态代码: {1} 异常: {2} + + 未能获取用户的会话 id: {0}。状态代码: {1} 异常: {2} - - 未能获取组 {0} 的成员: {1} + + 未能获取组 {0} 的成员: {1} - - 未能获取团队 {0} 的成员: {1} + + 未能获取团队 {0} 的成员: {1} - - 未能为用户: {0} 安装应用程序。异常: {1} + + 未能为用户: {0} 安装应用程序。异常: {1} - - 未能准备要发送的邮件: {0} + + 未能准备要发送的邮件: {0} - - 此文件包含导出的结果。 + + 此文件包含导出的结果。 - - 此下载的链接已过期。再次导出结果。 + + 此下载的链接已过期。再次导出结果。 - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - 元数据 + + 元数据 - - 文件已准备好下载。OneDrive 中也提供了一份副本。 + + 文件已准备好下载。OneDrive 中也提供了一份副本。 - - 出现错误。请再次尝试导出结果。 + + 出现错误。请再次尝试导出结果。 - - 通知已 {0} 组作为其收件人。不应超过 {1} 组。 + + 通知已 {0} 组作为其收件人。不应超过 {1} 组。 - - 通知已 {0} 名单作为收件人。不应超过这些 {1} 名单。 + + 通知已 {0} 名单作为收件人。不应超过这些 {1} 名单。 - - 通知已 {0} 团队作为其收件人。不应超过 {1} 团队。 + + 通知已 {0} 团队作为其收件人。不应超过 {1} 团队。 - - 确定 + + 确定 - - 已拒绝权限。我们不会继续导出。 + + 已拒绝权限。我们不会继续导出。 - - 找不到收件人 + + 找不到收件人 - - 成功 + + 成功 - - 限制 + + 限制 - - 用户类型 + + 用户类型 - - 来宾 + + 来宾 - - 成员 + + 成员 - - 不支持来宾用户 + + 不支持来宾用户 \ No newline at end of file diff --git a/Source/CompanyCommunicator.Common/Resources/Strings.zh-TW.resx b/Source/CompanyCommunicator.Common/Resources/Strings.zh-TW.resx index 11f61b02d..15b746523 100644 --- a/Source/CompanyCommunicator.Common/Resources/Strings.zh-TW.resx +++ b/Source/CompanyCommunicator.Common/Resources/Strings.zh-TW.resx @@ -1,63 +1,63 @@  - @@ -117,146 +117,146 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 請連絡您的 IT 系統管理員,以取得檢視資料的權限。 + + 請連絡您的 IT 系統管理員,以取得檢視資料的權限。 - - 應用程式未安裝 + + 應用程式未安裝 - - 傳遞狀態 + + 傳遞狀態 - - 匯出者 + + 匯出者 - - 匯出時間戳記 + + 匯出時間戳記 - - 郵件標題 + + 郵件標題 - - 已傳送時間戳記 + + 已傳送時間戳記 - - 狀態原因 + + 狀態原因 - - 小組識別碼 + + 小組識別碼 - - 團隊名稱 + + 團隊名稱 - - UPN + + UPN - - 使用者識別碼 + + 使用者識別碼 - - 名稱 + + 名稱 - - {0} (複製) + + {0} (複製) - - 發生錯誤。請試著再次匯出結果。 + + 發生錯誤。請試著再次匯出結果。 - - 已失敗 + + 已失敗 - - 找不到使用者應用程式。請確定使用者應用程式已上傳至您組織的應用程式目錄。 + + 找不到使用者應用程式。請確定使用者應用程式已上傳至您組織的應用程式目錄。 - - 找不到使用者應用程式: 在組織的應用程式目錄中的 {0}。 - {0} - app Id. (GUID). + + 找不到使用者應用程式: 在組織的應用程式目錄中的 {0}。 + {0} - app Id. (GUID). - - 無法建立交談。錯誤訊息: {0} + + 無法建立交談。錯誤訊息: {0} - - 無法建立與 Teams 使用者的交談: {0}。例外狀況: {1} + + 無法建立與 Teams 使用者的交談: {0}。例外狀況: {1} - - 無法建立交談。要求已節流。錯誤訊息: {0}" + + 無法建立交談。要求已節流。錯誤訊息: {0}" - - 在 DB 中找不到團隊 {0}。 + + 在 DB 中找不到團隊 {0}。 - - 無法同步處理所有使用者。狀態碼: {0} 例外狀況: {1} + + 無法同步處理所有使用者。狀態碼: {0} 例外狀況: {1} - - 無法取得使用者的交談識別碼: {0}。狀態碼: {1} 例外狀況: {2} + + 無法取得使用者的交談識別碼: {0}。狀態碼: {1} 例外狀況: {2} - - 無法取得群組{0} 的成員: {1} + + 無法取得群組{0} 的成員: {1} - - 無法取得團隊 {0} 的成員: {1} + + 無法取得團隊 {0} 的成員: {1} - - 無法為使用者安裝應用程式: {0}。例外狀況: {1} + + 無法為使用者安裝應用程式: {0}。例外狀況: {1} - - 無法準備要傳送的訊息: {0} + + 無法準備要傳送的訊息: {0} - - 此檔案包含您已匯出的結果。 + + 此檔案包含您已匯出的結果。 - - 此下載的連結已過期。再次匯出結果。 + + 此下載的連結已過期。再次匯出結果。 - - ExportData + + ExportData - - Message_Delivery + + Message_Delivery - - 中繼資料 + + 中繼資料 - - 您的檔案已可供下載。在 OneDrive 中也可以使用複本。 + + 您的檔案已可供下載。在 OneDrive 中也可以使用複本。 - - 發生錯誤。請試著再次匯出結果。 + + 發生錯誤。請試著再次匯出結果。 - - 通知已 {0} 群組為其收件者。不應該超過 {1} 群組。 + + 通知已 {0} 群組為其收件者。不應該超過 {1} 群組。 - - 此通知有 {0} 個名冊做為其收件者。它不應超過 {1} 個名冊。 + + 此通知有 {0} 個名冊做為其收件者。它不應超過 {1} 個名冊。 - - 此通知有 {0} 個團隊做為其收件者。它不應超過 {1} 個團隊。 + + 此通知有 {0} 個團隊做為其收件者。它不應超過 {1} 個團隊。 - - 確定 + + 確定 - - 權限遭到拒絕。我們不會繼續匯出。 + + 權限遭到拒絕。我們不會繼續匯出。 - - 找不到收件者 + + 找不到收件者 - - 已成功 + + 已成功 - - 已節流 + + 已節流 - - 使用者類型 + + 使用者類型 - - 來賓 + + 來賓 - - 成員 + + 成員 - - 不支援來賓使用者 + + 不支援來賓使用者 \ No newline at end of file diff --git a/Source/CompanyCommunicator.Data.Func/CompanyCommunicatorCleanUpFunction.cs b/Source/CompanyCommunicator.Data.Func/CompanyCommunicatorCleanUpFunction.cs index b1faab86a..65a7f985b 100644 --- a/Source/CompanyCommunicator.Data.Func/CompanyCommunicatorCleanUpFunction.cs +++ b/Source/CompanyCommunicator.Data.Func/CompanyCommunicatorCleanUpFunction.cs @@ -56,12 +56,14 @@ public CompanyCommunicatorCleanUpFunction( [FunctionName("CompanyCommunicatorCleanUpFunction")] public async Task Run([TimerTrigger("%CleanUpScheduleTriggerTime%")] TimerInfo myTimer, ILogger log) { - var cleanUpDateTime = DateTime.UtcNow.AddDays(-this.cleanUpFileOlderThanDays); - var exportDataEntities = await this.exportDataRepository.GetAllLessThanDateTimeAsync(cleanUpDateTime); + var cleanUpStartDateTime = DateTime.UtcNow.AddDays(-this.cleanUpFileOlderThanDays); + var cleanUpEndDateTime = DateTime.UtcNow.AddDays(-7); + var exportDataEntities = await this.exportDataRepository.GetAllBetweenDateTimesAsync(cleanUpStartDateTime, cleanUpEndDateTime); exportDataEntities = exportDataEntities.Where(exportDataEntity => exportDataEntity.Status.Equals(ExportStatus.Completed.ToString())); await this.DeleteFilesAndCards(exportDataEntities); - await this.exportDataRepository.BatchDeleteAsync(exportDataEntities); + log.LogInformation($"Company Communicator Clean Up function deleted the files and cards at: {DateTime.Now}"); + await this.exportDataRepository.BatchDeleteAsync(exportDataEntities); log.LogInformation($"Company Communicator Clean Up function executed at: {DateTime.Now}"); } diff --git a/Source/CompanyCommunicator.Data.Func/Microsoft.Teams.Apps.CompanyCommunicator.Data.Func.csproj b/Source/CompanyCommunicator.Data.Func/Microsoft.Teams.Apps.CompanyCommunicator.Data.Func.csproj index d3499067a..4544ec907 100644 --- a/Source/CompanyCommunicator.Data.Func/Microsoft.Teams.Apps.CompanyCommunicator.Data.Func.csproj +++ b/Source/CompanyCommunicator.Data.Func/Microsoft.Teams.Apps.CompanyCommunicator.Data.Func.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 - v3 + net6.0 + v4 true /home/site/wwwroot Linux @@ -13,13 +13,14 @@ - - + + - + + all diff --git a/Source/CompanyCommunicator.Data.Func/Services/FileCardServices/FileCardService.cs b/Source/CompanyCommunicator.Data.Func/Services/FileCardServices/FileCardService.cs index 09683b4bb..0de1a6166 100644 --- a/Source/CompanyCommunicator.Data.Func/Services/FileCardServices/FileCardService.cs +++ b/Source/CompanyCommunicator.Data.Func/Services/FileCardServices/FileCardService.cs @@ -61,7 +61,12 @@ public FileCardService( /// A representing the asynchronous operation. public async Task DeleteAsync(string userId, string fileConsentId) { - var user = await this.userDataRepository.GetAsync(UserDataTableNames.UserDataPartition, userId); + var user = await this.userDataRepository.GetAsync(UserDataTableNames.AuthorDataPartition, userId); + if (user == null) + { + user = await this.userDataRepository.GetAsync(UserDataTableNames.UserDataPartition, userId); + } + var conversationReference = new ConversationReference { ServiceUrl = user.ServiceUrl, @@ -74,21 +79,21 @@ public async Task DeleteAsync(string userId, string fileConsentId) int maxNumberOfAttempts = 10; await this.botAdapter.ContinueConversationAsync( - botId: this.authorAppId, - reference: conversationReference, - callback: async (turnContext, cancellationToken) => - { - // Retry it in addition to the original call. - var retryPolicy = Policy.Handle().WaitAndRetryAsync(maxNumberOfAttempts, p => TimeSpan.FromSeconds(p)); - await retryPolicy.ExecuteAsync(async () => - { - await turnContext.DeleteActivityAsync(fileConsentId, cancellationToken); - var deleteMessage = MessageFactory.Text(deleteText); - deleteMessage.TextFormat = "xml"; - await turnContext.SendActivityAsync(deleteMessage, cancellationToken); - }); - }, - cancellationToken: CancellationToken.None); + botId: this.authorAppId, + reference: conversationReference, + callback: async (turnContext, cancellationToken) => + { + // Retry it in addition to the original call. + var retryPolicy = Policy.Handle().WaitAndRetryAsync(maxNumberOfAttempts, p => TimeSpan.FromSeconds(p)); + await retryPolicy.ExecuteAsync(async () => + { + await turnContext.DeleteActivityAsync(fileConsentId, cancellationToken); + var deleteMessage = MessageFactory.Text(deleteText); + deleteMessage.TextFormat = "xml"; + await turnContext.SendActivityAsync(deleteMessage, cancellationToken); + }); + }, + cancellationToken: CancellationToken.None); } } } diff --git a/Source/CompanyCommunicator.Data.Func/Startup.cs b/Source/CompanyCommunicator.Data.Func/Startup.cs index f487c3f0f..55271ed20 100644 --- a/Source/CompanyCommunicator.Data.Func/Startup.cs +++ b/Source/CompanyCommunicator.Data.Func/Startup.cs @@ -58,7 +58,7 @@ public override void Configure(IFunctionsHostBuilder builder) botOptions.UserAppPassword = configuration.GetValue("UserAppPassword", string.Empty); botOptions.UserAppCertName = configuration.GetValue("UserAppCertName", string.Empty); botOptions.AuthorAppId = configuration.GetValue("AuthorAppId"); - botOptions.AuthorAppCertName = configuration.GetValue("AuthorAppPassword", string.Empty); + botOptions.AuthorAppPassword = configuration.GetValue("AuthorAppPassword", string.Empty); botOptions.AuthorAppCertName = configuration.GetValue("AuthorAppCertName", string.Empty); botOptions.GraphAppId = configuration.GetValue("GraphAppId"); botOptions.GraphAppCertName = configuration.GetValue("GraphAppCertName", string.Empty); diff --git a/Source/CompanyCommunicator.Prep.Func/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.csproj b/Source/CompanyCommunicator.Prep.Func/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.csproj index ded902fa0..e0fe1906f 100644 --- a/Source/CompanyCommunicator.Prep.Func/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.csproj +++ b/Source/CompanyCommunicator.Prep.Func/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 - v3 + net6.0 + v4 true /home/site/wwwroot Linux @@ -17,15 +17,16 @@ - - + + - + + all diff --git a/Source/CompanyCommunicator.Send.Func/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.csproj b/Source/CompanyCommunicator.Send.Func/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.csproj index 14d548ff2..c80457578 100644 --- a/Source/CompanyCommunicator.Send.Func/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.csproj +++ b/Source/CompanyCommunicator.Send.Func/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 - v3 + net6.0 + v4 true /home/site/wwwroot Linux @@ -12,13 +12,14 @@ - + - + + all runtime; build; native; contentfiles; analyzers diff --git a/Source/CompanyCommunicator/ClientApp/package.json b/Source/CompanyCommunicator/ClientApp/package.json index e2e2e608c..d8becf979 100644 --- a/Source/CompanyCommunicator/ClientApp/package.json +++ b/Source/CompanyCommunicator/ClientApp/package.json @@ -1,6 +1,6 @@ { "name": "company-communicator", - "version": "5.1.0", + "version": "5.3.0", "private": true, "dependencies": { "@fluentui/react-northstar": "^0.52.0", @@ -13,8 +13,8 @@ "i18next": "^19.5.1", "i18next-browser-languagedetector": "^5.0.0", "i18next-http-backend": "^1.3.2", - "markdown-it": "^12.0.6", - "moment": "2.24.0", + "markdown-it": "^13.0.1", + "moment": "2.29.4", "msteams-ui-components-react": "^0.8.1", "msteams-ui-icons-react": "^0.4.1", "office-ui-fabric-react": "^6.188.1", @@ -24,11 +24,10 @@ "react-i18next": "^11.7.0", "react-redux": "^7.1.0", "react-router-dom": "^5.2.0", - "react-scripts": "^4.0.3", - "react-simple-markdown-editor": "^1.1.0", "redux": "^4.0.1", "redux-thunk": "^2.3.0", "sass": "^1.32.7", + "scheduler": "^0.23.0", "typescript": "3.5.1", "typestyle": "^2.0.2" }, @@ -59,7 +58,6 @@ "@types/faker": "^4.1.5", "@types/history": "^4.7.2", "@types/jest": "24.0.13", - "@types/markdown-it": "^12.0.1", "@types/node": "12.0.4", "@types/react": "16.8.19", "@types/react-dom": "16.8.4", @@ -67,6 +65,7 @@ "@types/react-redux": "^7.1.1", "@types/react-router-dom": "^4.3.3", "@types/redux": "^3.6.0", + "react-scripts": "^4.0.3", "tslint": "^5.20.0", "tslint-microsoft-contrib": "6.2.0" } diff --git a/Source/CompanyCommunicator/ClientApp/public/locales/en-US/translation.json b/Source/CompanyCommunicator/ClientApp/public/locales/en-US/translation.json index 66d8721b1..d256ebd0b 100644 --- a/Source/CompanyCommunicator/ClientApp/public/locales/en-US/translation.json +++ b/Source/CompanyCommunicator/ClientApp/public/locales/en-US/translation.json @@ -8,6 +8,7 @@ "Recipients": "Recipients", "Sent": "Sent", "Send": "Send", + "CreatedBy": "Created By", "PreviewInThisChannel": "Preview in this channel", "Edit": "Edit", "Duplicate": "Duplicate", @@ -87,9 +88,9 @@ "ExportErrorMessage": "Try exporting the results again. If the problem persists, contact your IT admin for help.", "ExportButtonText": "Export detailed results", "ExportButtonProgressText": "Export in progress", - "CompanyCommunicator" : "Company Communicator", - "Support" : "Support", - "Feedback" :"Feedback", + "CompanyCommunicator": "Company Communicator", + "Support": "Support", + "Feedback": "Feedback", "ErrorURLMessage": "URL must start with https://", "ErrorImageTypesMessage": "Supported file types are .jpg, .jpeg, .png, .gif", "ErrorImageSizeMessage": "Maximum allowed size of image via upload is ~1 MB.", diff --git a/Source/CompanyCommunicator/ClientApp/src/actions/index.ts b/Source/CompanyCommunicator/ClientApp/src/actions/index.ts index 167876818..a4cd4649c 100644 --- a/Source/CompanyCommunicator/ClientApp/src/actions/index.ts +++ b/Source/CompanyCommunicator/ClientApp/src/actions/index.ts @@ -16,6 +16,7 @@ type Notification = { throttled: number, title: string, totalMessageCount: number, + createdBy: string, } export const selectMessage = (message: any) => { diff --git a/Source/CompanyCommunicator/ClientApp/src/components/Messages/messages.tsx b/Source/CompanyCommunicator/ClientApp/src/components/Messages/messages.tsx index a8f89df8d..199b27ea9 100644 --- a/Source/CompanyCommunicator/ClientApp/src/components/Messages/messages.tsx +++ b/Source/CompanyCommunicator/ClientApp/src/components/Messages/messages.tsx @@ -124,7 +124,7 @@ class Messages extends React.Component { key: "labels", content: ( - + { > - + - + { > - + { > + + + + @@ -196,17 +204,17 @@ class Messages extends React.Component { private messageContent = (message: any) => { return ( - + - + {this.renderSendingText(message)} - +
@@ -219,9 +227,9 @@ class Messages extends React.Component { { message.canceled && - - {formatNumber(message.canceled)} - + + {formatNumber(message.canceled)} + } { message.unknown && @@ -232,13 +240,20 @@ class Messages extends React.Component { }
- + + + + diff --git a/Source/CompanyCommunicator/ClientApp/src/components/SendConfirmationTaskModule/sendConfirmationTaskModule.tsx b/Source/CompanyCommunicator/ClientApp/src/components/SendConfirmationTaskModule/sendConfirmationTaskModule.tsx index 22f39cb88..ce6b0a6d0 100644 --- a/Source/CompanyCommunicator/ClientApp/src/components/SendConfirmationTaskModule/sendConfirmationTaskModule.tsx +++ b/Source/CompanyCommunicator/ClientApp/src/components/SendConfirmationTaskModule/sendConfirmationTaskModule.tsx @@ -37,6 +37,7 @@ export interface IMessage { author?: string; buttonLink?: string; buttonTitle?: string; + createdBy?: string; } export interface SendConfirmationTaskModuleProps extends RouteComponentProps, WithTranslation { diff --git a/Source/CompanyCommunicator/ClientApp/src/components/StatusTaskModule/statusTaskModule.tsx b/Source/CompanyCommunicator/ClientApp/src/components/StatusTaskModule/statusTaskModule.tsx index acdcd9f0c..6b1942923 100644 --- a/Source/CompanyCommunicator/ClientApp/src/components/StatusTaskModule/statusTaskModule.tsx +++ b/Source/CompanyCommunicator/ClientApp/src/components/StatusTaskModule/statusTaskModule.tsx @@ -49,6 +49,7 @@ export interface IMessage { warningMessage?: string; canDownload?: boolean; sendingCompleted?: boolean; + createdBy?: string; } export interface IStatusState { @@ -128,6 +129,7 @@ class StatusTaskModule extends React.Component{this.localize("Completed")} {this.state.message.sentDate} +
+

{this.localize("Created By")}

+ {this.state.message.createdBy} +

{this.localize("Duration")}

{this.state.message.sendingDuration} diff --git a/Source/CompanyCommunicator/Controllers/SentNotificationsController.cs b/Source/CompanyCommunicator/Controllers/SentNotificationsController.cs index 94f19f2a0..1366a163c 100644 --- a/Source/CompanyCommunicator/Controllers/SentNotificationsController.cs +++ b/Source/CompanyCommunicator/Controllers/SentNotificationsController.cs @@ -180,6 +180,7 @@ public async Task> GetSentNotificationsAsyn TotalMessageCount = notificationEntity.TotalMessageCount, SendingStartedDate = notificationEntity.SendingStartedDate, Status = notificationEntity.GetStatus(), + CreatedBy = notificationEntity.CreatedBy, }; result.Add(summary); @@ -242,6 +243,7 @@ public async Task GetSentNotificationByIdAsync(string id) WarningMessage = notificationEntity.WarningMessage, CanDownload = userNotificationDownload == null, SendingCompleted = notificationEntity.IsCompleted(), + CreatedBy = notificationEntity.CreatedBy, }; // In case we have blob name instead of URL to public image. diff --git a/Source/CompanyCommunicator/Microsoft.Teams.Apps.CompanyCommunicator.csproj b/Source/CompanyCommunicator/Microsoft.Teams.Apps.CompanyCommunicator.csproj index ca87c75ce..fa0cc8899 100644 --- a/Source/CompanyCommunicator/Microsoft.Teams.Apps.CompanyCommunicator.csproj +++ b/Source/CompanyCommunicator/Microsoft.Teams.Apps.CompanyCommunicator.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 true Latest false @@ -14,20 +14,22 @@ - - - - + + + + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Source/CompanyCommunicator/Models/SentNotification.cs b/Source/CompanyCommunicator/Models/SentNotification.cs index 8e6690b67..f0a5cc9ce 100644 --- a/Source/CompanyCommunicator/Models/SentNotification.cs +++ b/Source/CompanyCommunicator/Models/SentNotification.cs @@ -82,5 +82,10 @@ public class SentNotification : BaseNotification /// Gets or sets a value indicating whether sending is in progress. ///
public bool SendingCompleted { get; set; } + + /// + /// Gets or sets a value of created by. + /// + public string CreatedBy { get; set; } } } diff --git a/Source/CompanyCommunicator/Models/SentNotificationSummary.cs b/Source/CompanyCommunicator/Models/SentNotificationSummary.cs index ba65c49c6..7baf5e809 100644 --- a/Source/CompanyCommunicator/Models/SentNotificationSummary.cs +++ b/Source/CompanyCommunicator/Models/SentNotificationSummary.cs @@ -67,5 +67,10 @@ public class SentNotificationSummary /// Gets or sets notification status. for possible values. /// public string Status { get; set; } + + /// + /// Gets or sets created by value. + /// + public string CreatedBy { get; set; } } } diff --git a/Source/CompanyCommunicator/Startup.cs b/Source/CompanyCommunicator/Startup.cs index 01f4bfa75..883b4dc8b 100644 --- a/Source/CompanyCommunicator/Startup.cs +++ b/Source/CompanyCommunicator/Startup.cs @@ -7,6 +7,7 @@ namespace Microsoft.Teams.Apps.CompanyCommunicator { using System; using System.Net; + using System.Net.Http; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Hosting; @@ -182,7 +183,8 @@ public void ConfigureServices(IServiceCollection services) // Add microsoft graph services. services.AddScoped(); - services.AddScoped(); + services.AddScoped(); + services.AddScoped(sp => new GraphServiceClient(sp.GetService(), sp.GetService())); services.AddScoped(); services.AddScoped(sp => sp.GetRequiredService().GetGroupsService()); services.AddScoped(sp => sp.GetRequiredService().GetAppCatalogService()); diff --git a/Source/Test/CompanyCommunicator.Common.Test/Microsoft.Teams.App.CompanyCommunicator.Common.Test.csproj b/Source/Test/CompanyCommunicator.Common.Test/Microsoft.Teams.App.CompanyCommunicator.Common.Test.csproj index 07e2f7a6c..0695c1f94 100644 --- a/Source/Test/CompanyCommunicator.Common.Test/Microsoft.Teams.App.CompanyCommunicator.Common.Test.csproj +++ b/Source/Test/CompanyCommunicator.Common.Test/Microsoft.Teams.App.CompanyCommunicator.Common.Test.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 true false @@ -11,10 +11,11 @@ - + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/Test/CompanyCommunicator.Common.Test/Services/Mock/MockHttpProvider.cs b/Source/Test/CompanyCommunicator.Common.Test/Services/Mock/MockHttpProvider.cs index b59fd5554..1dfb3542b 100644 --- a/Source/Test/CompanyCommunicator.Common.Test/Services/Mock/MockHttpProvider.cs +++ b/Source/Test/CompanyCommunicator.Common.Test/Services/Mock/MockHttpProvider.cs @@ -38,7 +38,7 @@ public Task SendAsync(HttpRequestMessage request) { string key = request.Method.ToString() + ":" + request.RequestUri.ToString(); var response = new HttpResponseMessage(); - if (this.Responses.ContainsKey(key) && response.Content == null) + if (this.Responses.ContainsKey(key)) { response.Content = new StringContent(this.Serializer.SerializeObject(this.Responses[key])); } diff --git a/Source/Test/CompanyCommunicator.Common.Test/Services/Recipients/RecipientsServiceTest.cs b/Source/Test/CompanyCommunicator.Common.Test/Services/Recipients/RecipientsServiceTest.cs index 4fb3b1ae0..d24c78c93 100644 --- a/Source/Test/CompanyCommunicator.Common.Test/Services/Recipients/RecipientsServiceTest.cs +++ b/Source/Test/CompanyCommunicator.Common.Test/Services/Recipients/RecipientsServiceTest.cs @@ -42,7 +42,7 @@ public void RecipientService_NullParameters_ShouldThrowArgumentNullException() /// Test case to check if argument null exception is thrown when parameters are null. /// [Fact] - public void BatchRecipients_NullParameters_ShouldThrowArgumentNullException() + public async void BatchRecipients_NullParameters_ShouldThrowArgumentNullException() { // Arrange var recipientService = this.GetRecipientsService(); @@ -51,7 +51,7 @@ public void BatchRecipients_NullParameters_ShouldThrowArgumentNullException() Func task1 = async () => await recipientService.BatchRecipients(null /*recipients*/); // Assert - task1.Should().Throw(); + await task1.Should().ThrowAsync(); } /// diff --git a/Source/Test/CompanyCommunicator.Prep.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.Test.csproj b/Source/Test/CompanyCommunicator.Prep.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.Test.csproj index 794e220ce..da7854393 100644 --- a/Source/Test/CompanyCommunicator.Prep.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.Test.csproj +++ b/Source/Test/CompanyCommunicator.Prep.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Prep.Func.Test.csproj @@ -1,16 +1,17 @@  - netcoreapp3.1 + net6.0 true false - + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/Test/CompanyCommunicator.Send.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.Test.csproj b/Source/Test/CompanyCommunicator.Send.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.Test.csproj index 494feb55c..4e752cc10 100644 --- a/Source/Test/CompanyCommunicator.Send.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.Test.csproj +++ b/Source/Test/CompanyCommunicator.Send.Func.Test/Microsoft.Teams.Apps.CompanyCommunicator.Send.Func.Test.csproj @@ -1,15 +1,16 @@  - netcoreapp3.1 + net6.0 true false - + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/Test/CompanyCommunicator.Test/Controllers/SentNotificationsControllerTest.cs b/Source/Test/CompanyCommunicator.Test/Controllers/SentNotificationsControllerTest.cs index 30e70c5bd..daaad696e 100644 --- a/Source/Test/CompanyCommunicator.Test/Controllers/SentNotificationsControllerTest.cs +++ b/Source/Test/CompanyCommunicator.Test/Controllers/SentNotificationsControllerTest.cs @@ -307,6 +307,7 @@ public async Task GetSummary_CorrectMapping_ReturnsNotificationSummaryListObject Assert.Equal(notification.Status, sentNotificationSummary.Status); Assert.Equal(notification.Unknown, sentNotificationSummary.Unknown); Assert.Equal(notification.Canceled, sentNotificationSummary.Canceled); + Assert.Equal(notification.CreatedBy, sentNotificationSummary.CreatedBy); } /// @@ -409,6 +410,7 @@ public async Task GetNotication_CorrectMapping_ReturnsSentNotificationObject() Assert.Equal(notificationEntity.SendingStartedDate, sentNotification.SendingStartedDate); Assert.Equal(notificationEntity.ErrorMessage, sentNotification.ErrorMessage); Assert.Equal(notificationEntity.WarningMessage, sentNotification.WarningMessage); + Assert.Equal(notificationEntity.CreatedBy, sentNotification.CreatedBy); } private SentNotificationsController GetControllerInstance(bool proactivelyInstallUserApp = true) @@ -458,6 +460,7 @@ private NotificationDataEntity GetNotification() TeamsInString = "['item1','item2']", RostersInString = "['item1','item2']", GroupsInString = "['group1','group2']", + CreatedBy = "createdBy", }; } } diff --git a/Source/Test/CompanyCommunicator.Test/Microsoft.Teams.Apps.CompanyCommunicator.Test.csproj b/Source/Test/CompanyCommunicator.Test/Microsoft.Teams.Apps.CompanyCommunicator.Test.csproj index b3d012e19..a09a69711 100644 --- a/Source/Test/CompanyCommunicator.Test/Microsoft.Teams.Apps.CompanyCommunicator.Test.csproj +++ b/Source/Test/CompanyCommunicator.Test/Microsoft.Teams.Apps.CompanyCommunicator.Test.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 true false @@ -11,15 +11,17 @@ - + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Support/readme.md b/Support/readme.md index 544f6a4a9..2e8554c29 100644 --- a/Support/readme.md +++ b/Support/readme.md @@ -7,9 +7,7 @@ This script is designed for the purpose of testing the chat functionality of the * $tenantId = "tenant.onmicrosoft.com" #or in GUID format "00000000-0000-0000-0000-000000000000" * $teamsAppId = "00000000-0000-0000-0000-000000000000" # AppId of the Teams App Manifest * $graphAppId = "00000000-0000-0000-0000-000000000000" -* $graphAppSecret= "secret" * $userAppId = "00000000-0000-0000-0000-000000000000" -* $userAppSecret = "secret" For the secrets, I recommend to an extra secret per App which you can delete after using this script. This way, it won't interfere with the configuration of the application. And as an added bonus, it's more secure because the script will only run with the newly created secrets. diff --git a/Wiki/Deployment-guide-powershell.md b/Wiki/Deployment-guide-powershell.md index 28530ecda..e8fbd531f 100644 --- a/Wiki/Deployment-guide-powershell.md +++ b/Wiki/Deployment-guide-powershell.md @@ -137,7 +137,7 @@ To begin, you will need: - `appDisplayName` - The app (and bot) display name. Default value:Company Communicator. - `appDescription` - The app (and bot) description. Default value: Broadcast messages to multiple teams and people in one go. - `appIconUrl` - The link to the icon for the app. It must resolve to a PNG file. Default value [https://raw.githubusercontent.com/OfficeDev/microsoft-teams-company-communicator-app/main/Manifest/color.png](https://raw.githubusercontent.com/OfficeDev/microsoft-teams-company-communicator-app/main/Manifest/color.png) - - `Header Text` - Default value is `Company Communicator`. This is the banner text that will appear starting v5.2, you will have the option to modify later. + - `Header Text` - Default value is `Company Communicator`. This is the banner text that will appear starting v5.2 and later, you will have the option to modify later. - `Header Logo Url` - Default image is Microsoft logo. You will have the option to modify later. - `companyName` - The display name for the company. - `websiteUrl` - The https:// URL to you company's website. This link should take users to your company or product-specific landing page. diff --git a/Wiki/Deployment-guide.md b/Wiki/Deployment-guide.md index 9863c718e..c96a89009 100644 --- a/Wiki/Deployment-guide.md +++ b/Wiki/Deployment-guide.md @@ -124,7 +124,7 @@ Register three Azure AD application in your tenant's directory: one for author b 7. **Microsoft Graph App Secret**: The client secret of the Microsoft Graph Azure AD app. (from Step 1) 8. **Proactively Install User App [Optional]**: Default value is `true`. You may set it to `false` if you want to disable the feature. 9. **User App ExternalId [Optional]**: Default value is `148a66bb-e83d-425a-927d-09f4299a9274`. This **MUST** be the same `id` that is in the Teams app manifest for the user app. - 10. **Header Text [Optional]**: Default value is `Company Communicator`. This is the banner text that will appear starting v5.2, you will have the option to modify later. + 10. **Header Text [Optional]**: Default value is `Company Communicator`. This is the banner text that will appear starting v5.2 and later, you will have the option to modify later. 11. **Header Logo Url [Optional]**: Default image is Microsoft logo. You will have the option to modify later. 12. **Hosting Plan SKU [Optional]**: The pricing tier for the hosting plan. Default value is `Standard`. You may choose between Basic, Standard and Premium. 13. **Hosting Plan Size [Optional]**: The size of the hosting plan (small - 1, medium - 2, or large - 3). Default value is `2`. diff --git a/Wiki/FAQ.md b/Wiki/FAQ.md index 4f1c3db10..e84feb711 100644 --- a/Wiki/FAQ.md +++ b/Wiki/FAQ.md @@ -72,4 +72,7 @@ You can update the banner title and the logo by updating the configuration in Az ### 13. Is it possible to format the message in the summary field? Yes, you can use markdown tags for formatting the message in the summary. CC v5.2 supports this feature, you can refer [here](https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/text-features) to know the list of styles supported. +### 14. Latest changes does not reflect after upgrading the app to v5.3.0? +Teams client default behavior is to use client app resources (js/css/ images) from teams cache. To reflect the latest changes please sign out and sign in again to the teams client or clear the teams cache with the steps mentioned [here](https://docs.microsoft.com/en-us/microsoftteams/troubleshoot/teams-administration/clear-teams-cache). + diff --git a/Wiki/Release-notes.md b/Wiki/Release-notes.md index eef00fa3f..f8374a58d 100644 --- a/Wiki/Release-notes.md +++ b/Wiki/Release-notes.md @@ -6,6 +6,7 @@ Cumulative improvements in Company Communicator App. |Release |Published to
Microsoft Store | |---|---| +| 5.3 | Dec 14, 2022 | 5.2 | Jul 26, 2022 | 5.1 | Apr 28, 2022 | 5.0 | Nov 10, 2021 @@ -23,6 +24,13 @@ Cumulative improvements in Company Communicator App. | 1.0 | Dec 20, 2019 ### Company Communicator feature release notes +#### 5.3 (Dec 14, 2022) +##### Changes introduced +- .NET upgrade from .NET Core 3.1 to .NET 6.0 +- Updated Azure App Service app to use .NET 6.0. +- Updated Azure Function apps to use runtime version 4.x. +- Capture the sender info in the Author app. +- Bug fix for the issue with clean up function. #### 5.2 (Jul 26, 2022) ##### Changes introduced diff --git a/Wiki/Troubleshooting.md b/Wiki/Troubleshooting.md index 0fe09f16b..74b71a1ab 100644 --- a/Wiki/Troubleshooting.md +++ b/Wiki/Troubleshooting.md @@ -237,5 +237,24 @@ The above error occurs due to the mismatch in Azure CLI version. There are two w 1. Install [Azure CLI v2.30.0](https://azcliprod.blob.core.windows.net/msi/azure-cli-2.30.0.msi). 2. Uninstall the Azure CLI from your system and re-run the powershell script in future, the script will automatically install Azure CLI v2.30.0 and authentication steps will be completed. +### 14. App service deployment failed while Sync operation with below error? + +Error Logs: + +![appservice sync deployment error](images/appservice_sync_deployment_error.png) + +#### Fix + +The above error occurs when default node version of app service points to the older versions. + +1. Go to portal.azure.com. Navigate to resource group where all CC resources are deployed. +2. Click on the App service -> Click on Configuration. +3. Click on WEBSITE_NODE_DEFAULT_VERSION. +4. Update the default value to 16.13.0 (previous value ->10.15.2). +5. Click on Overview and Re-start the app service. +6. Once the app service is restarted. Navigate to Deployment Center and click on Sync. Once deployment is successful. Re-start the app service. + +![appservice sync deployment error fix](images/appservice_sync_error_fix.png) + # Didn't find your problem here? Please report the issue [here](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/issues/new) diff --git a/Wiki/User-manual.md b/Wiki/User-manual.md index 427755a17..c68b840c0 100644 --- a/Wiki/User-manual.md +++ b/Wiki/User-manual.md @@ -21,7 +21,7 @@ Click 'New Message' to draft the message to be sent, - **Title:** Title of the message in few words. - **Image URL:** The image to be attached to the message, they are 2 ways the image can be attached. - 1. Click 'Upload' button and select the image from the local machine, image should not be more than 1 MB in size + 1. Click 'Upload' button and select the image from the local machine, image should not be more than ~1 MB in size 1. Upload the image to public site and paste the image URL in the field, remember the URL should be publicly accessible - **Summary:** You can provide the summary of the message, you can also format the message using markdown tags, refer [here](https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/text-features) to know the list of styles supported. - **Author:** Name of the author who sends the message. diff --git a/Wiki/images/appservice-dotnet-version.png b/Wiki/images/appservice-dotnet-version.png new file mode 100644 index 000000000..609edaec2 Binary files /dev/null and b/Wiki/images/appservice-dotnet-version.png differ diff --git a/Wiki/images/appservice_sync_deployment_error.png b/Wiki/images/appservice_sync_deployment_error.png new file mode 100644 index 000000000..d5bba38b9 Binary files /dev/null and b/Wiki/images/appservice_sync_deployment_error.png differ diff --git a/Wiki/images/appservice_sync_error_fix.png b/Wiki/images/appservice_sync_error_fix.png new file mode 100644 index 000000000..17eb86c13 Binary files /dev/null and b/Wiki/images/appservice_sync_error_fix.png differ diff --git a/Wiki/images/azurefunctions_runtime_version.png b/Wiki/images/azurefunctions_runtime_version.png new file mode 100644 index 000000000..c6dff9815 Binary files /dev/null and b/Wiki/images/azurefunctions_runtime_version.png differ diff --git a/Wiki/images/dotnet_upgrade_execution.png b/Wiki/images/dotnet_upgrade_execution.png new file mode 100644 index 000000000..be0e322fa Binary files /dev/null and b/Wiki/images/dotnet_upgrade_execution.png differ diff --git a/Wiki/images/single_tenant_app_creation.png b/Wiki/images/single_tenant_app_creation.png new file mode 100644 index 000000000..73821842d Binary files /dev/null and b/Wiki/images/single_tenant_app_creation.png differ diff --git a/Wiki/images/single_tenant_app_overview.png b/Wiki/images/single_tenant_app_overview.png new file mode 100644 index 000000000..40120b90d Binary files /dev/null and b/Wiki/images/single_tenant_app_overview.png differ diff --git a/Wiki/images/single_tenant_app_secret.png b/Wiki/images/single_tenant_app_secret.png new file mode 100644 index 000000000..f9ec764f9 Binary files /dev/null and b/Wiki/images/single_tenant_app_secret.png differ diff --git a/Wiki/v5-migration-guide.md b/Wiki/v5-migration-guide.md index fb1406776..8c8421ad8 100644 --- a/Wiki/v5-migration-guide.md +++ b/Wiki/v5-migration-guide.md @@ -1,5 +1,71 @@ ## Company Communicator v5 Migration Guide +## Upgrading from v5.x to latest version +If you have CC v5.0, v5.1 or v5.2 deployed and plan to migrate to the latest version, please perform the following steps: + +### 1. Update the .Net version of Azure Functions and App Service to support .NET 6.0 : + +- Download the whole solution folder from [GitHub](https://github.com/OfficeDev/microsoft-teams-company-communicator-app) +- Unzip the Content to a folder. (say companyCommunicator) +- Open a PowerShell window in **administrator** mode and navigate to the folder where you unzipped the content. +- Navigate to Deployment folder. + ``` + cd microsoft-teams-apps-company-communicator-main\Deployment + ``` + +- Run the below command. This will allow you to run dotnet6-migration.ps1. By default, the execution policy is restricted. You may change it to back restricted after deployment is completed. + ``` + Set-ExecutionPolicy -ExecutionPolicy RemoteSigned + ``` +- Run the below command to unblock the deployment script. + ``` + Unblock-File -Path .\dotnet6-migration.ps1 + ``` + +#### Execute script + +- Open a PowerShell window in **administrator** mode and navigate to Deployment folder + ``` + cd microsoft-teams-apps-company-communicator-main\Deployment + ``` +- Execute the `dotnet6-migration.ps1` script in the Powershell window: + ``` + .\dotnet6-migration.ps1 + ``` +- During execution of script you will be asked to provide below input parameters, + * Subscription Id : Please enter the subscription id of the resources where Company Communicator deployed. + * Resource Group Name : Please enter the resource group name where the previous resources were created. + * Base Resource Name : Please enter the base resource name used in the previous deployment. Base resource name is same as the app service name. + +![DotNet Upgrade](images/dotnet_upgrade_execution.png) + +#### Validate .NET 6 upgrade +- Go to portal.azure.com. Navigate to resource group where all CC resources are deployed. +- Click on the App service -> Click on Configuration -> Click on General Settings +- Check and confirm the .NET version to be .NET 6 (LTS) + +![App Service .NET Version ](images/appservice-dotnet-version.png) + +- Click on *-prep-function -> Click on Configuration -> Click on Function runtime settings. +- Select the runtime version to be ~4. Similary select for ***-function** and ***-data-function**. + +![App Functions Runtime Version ](images/azurefunctions_runtime_version.png) + +### 2. Validate and update the config settings and sync to the lastest code : + +1. Go to app service --> Configuration--> Click on New application setting and add below name and values. You can update the value for the header text and the header image as per your organization needs. + * REACT_APP_HEADERTEXT : Company Communicator + * REACT_APP_HEADERIMAGE : https://raw.githubusercontent.com/OfficeDev/microsoft-teams-company-communicator-app/main/Source/CompanyCommunicator/ClientApp/src/assets/Images/mslogo.png + + ![Update banner](images/update_banner_title_logo.png) + +1. Verify the WEBSITE_NODE_DEFAULT_VERSION value should be 16.13.0. Please update it to 16.13.0 if any other value is shown. +1. Save the configuration. +1. Restart the app service and sync to the latest changes. +1. For all azure functions verify if the WEBSITE_NODE_DEFAULT_VERSION to be 16.13.0. Please update it if any other value is shown and sync the changes. +1. Restart the functions. +1. Sign out from teams and sign in again to see the latest changes. + ## Upgrading from v4 to v5 If you have the CCv4 deployed and plan to migrate from CCv4 to CCv5, perform the following steps: @@ -36,17 +102,17 @@ Please refer [step 2](https://github.com/OfficeDev/microsoft-teams-company-commu - **Supported account types**: Select "Accounts in this organizational directory only(Default Directory only - Single tenant)". - Leave the "Redirect URI" field blank for now. - ![Azure AD app registration page](images/multitenant_app_creation.png) + ![Azure AD app registration page](images/single_tenant_app_creation.png) 6. Click **Register** to complete the registration. -7. When the app is registered, you'll be taken to the app's "Overview" page. Copy the **Application (client) ID**; we will need it later. Verify that the "Supported account types" is set to **Multiple organizations**. +7. When the app is registered, you'll be taken to the app's "Overview" page. Copy the **Application (client) ID**; we will need it later. Verify that the "Supported account types" is set to **My organization only**. - ![Azure AD app overview page](images/multitenant_app_overview_1.png) + ![Azure AD app overview page](images/single_tenant_app_overview.png) 8. On the side rail in the Manage section, navigate to the "Certificates & secrets" section. In the Client secrets section, click on "+ New client secret". Add a description for the secret, and choose when the secret will expire. Click "Add". - ![Azure AD app secret](images/multitenant_app_secret.png) + ![Azure AD app secret](images/single_tenant_app_secret.png) 9. Once the client secret is created, copy its **Value**; we will need it later. @@ -124,19 +190,24 @@ Please refer [step 2](https://github.com/OfficeDev/microsoft-teams-company-commu 7. **Microsoft Graph App Secret**: The client secret of the Microsoft Graph Azure AD app. (from Step 2) 8. **Proactively Install User App [Optional]**: Default value is `true`. You may set it to `false` if you want to disable the feature. 9. **User App ExternalId [Optional]**: Default value is `148a66bb-e83d-425a-927d-09f4299a9274`. This **MUST** be the same `id` that is in the Teams app manifest for the user app. - 10. **Service Bus Web App Role Name Guid [Optional]**: Default value is `958380b3-630d-4823-b933-f59d92cdcada`. This **MUST** be the same `id` per app deployment. + 10. **Header Text [Optional]**: Default value is `Company Communicator`. This is the banner text that will appear starting v5.2 and later, you will have the option to modify later. + 11. **Header Logo Url [Optional]**: Default image is Microsoft logo. You will have the option to modify later. + 12. **Hosting Plan SKU [Optional]**: The pricing tier for the hosting plan. Default value is `Standard`. You may choose between Basic, Standard and Premium. + 13. **Hosting Plan Size [Optional]**: The size of the hosting plan (small - 1, medium - 2, or large - 3). Default value is `2`. + + > **Note:** The default value is 2 to minimize the chances of an error during app deployment. After deployment you can choose to change the size of the hosting plan. + 14. **Service Bus Web App Role Name Guid [Optional]**: Default value is `958380b3-630d-4823-b933-f59d92cdcada`. This **MUST** be the same `id` per app deployment. > **Note:** Make sure to keep the same values for an upgrade. Please change the role name GUIDs in case of another Company Communicator Deployment in same subscription. - 11. **Service Bus Prep Func Role Name Guid [Optional]**: Default value is `ce6ca916-08e9-4639-bfbe-9d098baf42ca`. This **MUST** be the same `id` per app deployment. - 12. **Service Bus Send Func Role Name Guid [Optional]**: Default value is `960365a2-c7bf-4ff3-8887-efa86fe4a163`. This **MUST** be the same `id` per app deployment. - 13. **Service Bus Data Func Role Name Guid [Optional]**: Default value is `d42703bc-421d-4d98-bc4d-cd2bb16e5b0a`. This **MUST** be the same `id` per app deployment. - 14. **Storage Account Web App Role Name Guid [Optional]**: Default value is `edd0cc48-2cf7-490e-99e8-131311e42030`. This **MUST** be the same `id` per app deployment. - 15. **Storage Account Prep Func Role Name Guid [Optional]**: Default value is `9332a9e9-93f4-48d9-8121-d279f30a732e`. This **MUST** be the same `id` per app deployment. - 16. **Storage Account Data Func Role Name Guid [Optional]**: Default value is `5b67af51-4a98-47e1-9d22-745069f51a13`. This **MUST** be the same `id` per app deployment. - 17. **DefaultCulture [Optional]**: By default the application uses `en-US` locale. You can choose the locale from the list, if you wish to use the app in different locale.Also, you may add/update the resources for other locales and update this configuration if desired. - 18. **SupportedCultures [Optional]**: This is the list of locales that application supports currently.You may add/update the resources for other locales and update this configuration if desired. - + 15. **Service Bus Prep Func Role Name Guid [Optional]**: Default value is `ce6ca916-08e9-4639-bfbe-9d098baf42ca`. This **MUST** be the same `id` per app deployment. + 16. **Service Bus Send Func Role Name Guid [Optional]**: Default value is `960365a2-c7bf-4ff3-8887-efa86fe4a163`. This **MUST** be the same `id` per app deployment. + 17. **Service Bus Data Func Role Name Guid [Optional]**: Default value is `d42703bc-421d-4d98-bc4d-cd2bb16e5b0a`. This **MUST** be the same `id` per app deployment. + 18. **Storage Account Web App Role Name Guid [Optional]**: Default value is `edd0cc48-2cf7-490e-99e8-131311e42030`. This **MUST** be the same `id` per app deployment. + 19. **Storage Account Prep Func Role Name Guid [Optional]**: Default value is `9332a9e9-93f4-48d9-8121-d279f30a732e`. This **MUST** be the same `id` per app deployment. + 20. **Storage Account Data Func Role Name Guid [Optional]**: Default value is `5b67af51-4a98-47e1-9d22-745069f51a13`. This **MUST** be the same `id` per app deployment. + 21. **DefaultCulture [Optional]**: By default the application uses `en-US` locale. You can choose the locale from the list, if you wish to use the app in different locale.Also, you may add/update the resources for other locales and update this configuration if desired. + 22. **SupportedCultures [Optional]**: This is the list of locales that application supports currently.You may add/update the resources for other locales and update this configuration if desired. > **Note:** Make sure that the values are copied as-is, with no extra spaces. The template checks that GUIDs are exactly 36 characters. @@ -148,6 +219,8 @@ Please refer [step 2](https://github.com/OfficeDev/microsoft-teams-company-commu 1. If you wish to change the app name, description, and icon from the defaults, modify the corresponding template parameters. +1. If you wish to change the header/banner text and logo, refer to FAQ in the Wiki. + 1. Agree to the Azure terms and conditions by clicking on the check box "I agree to the terms and conditions stated above" located at the bottom of the page. 1. Click on "Purchase" to start the deployment. @@ -167,7 +240,7 @@ Please refer [step 2](https://github.com/OfficeDev/microsoft-teams-company-commu * **userBotId:** This is the Microsoft Application ID for the Company Communicator app. For the following steps, it will be referred to as `%userBotId%`. * **appDomain:** This is the base domain for the Company Communicator app. For the following steps, it will be referred to as `%appDomain%`. -## 5. Set-up Authentication +### 5. Set-up Authentication 1. Note that you have the `%authorBotId%`, `%userBotId%` and `%appDomain%` values from the previous step (Step 2). @@ -227,7 +300,7 @@ Please refer [step 2](https://github.com/OfficeDev/microsoft-teams-company-commu 1. Click **Save** to commit your changes. -## 6. Add Permissions to your app +### 6. Add Permissions to your app Continuing from the Azure AD author app registration page where we ended Step 3. @@ -261,7 +334,7 @@ Continuing from the Azure AD author app registration page where we ended Step 3. - Prepare link - https://login.microsoftonline.com/common/adminconsent?client_id=%appId%. Replace the `%appId%` with the `Application (client) ID` of Microsoft Graph Azure AD app (from above). - Global Administrator can grant consent using the link above. -## 7. Create the Teams app packages +### 7. Create the Teams app packages Company communicator app comes with 2 applications – Author, User. The Author application is intended for employees who create and send messages in the organization, and the User application is intended for employees who receive the messages. @@ -296,7 +369,7 @@ Create two Teams app packages: one to be installed to an Authors team and other Repeat the steps above but with the file `Manifest\manifest_users.json` and use `%userBotId%` for `<>` placeholder. Note: you will not need to change anything for the configurationUrl or webApplicationInfo section because the recipients app does not have the configurable tab. Name the resulting package `company-communicator-users.zip`, so you know that this is the app for the recipients. -## 8. Install the lastest apps in Microsoft Teams +### 8. Install the lastest apps in Microsoft Teams 1. Delete the v4.x apps and re-upload the latest v.5 manifest. Install the authors app (the `company-communicator-authors.zip` package) to your team of message authors. * Note that even if non-authors install the app, the UPN list in the app configuration will prevent them from accessing the message authoring experience. Only the users in the sender UPN list will be able to compose and send messages. @@ -311,4 +384,6 @@ Repeat the steps above but with the file `Manifest\manifest_users.json` and use > If `proactiveAppInstallation` is enabled, you may skip this step. The service will install the app for all the recipients when authors send a message. ### Migration Status -If you have performed all the steps, migration completes after successful deployment. \ No newline at end of file +If you have performed all the steps, migration completes after successful deployment. + +> **Note:** If latest changes doesn't reflect after upgrading the app, please sign out and sign in again to the teams client or clear the teams cache with the steps mentioned [here](https://docs.microsoft.com/en-us/microsoftteams/troubleshoot/teams-administration/clear-teams-cache). \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c0496b29b..37ff861ed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,6 +1,6 @@ pool: name: Azure Pipelines - vmImage: 'windows-latest' + vmImage: 'windows-2022' demands: - msbuild - visualstudio @@ -14,16 +14,18 @@ steps: - checkout: self - task: UseDotNet@2 - displayName: '.NET Core 3.1.x' + displayName: 'Use .NET 6.0.x' inputs: - version: '3.1.x' packageType: sdk + version: '6.0.x' + includePreviewVersions: true - task: DotNetCoreCLI@2 - displayName: Build solution + displayName: 'Build solution' inputs: + command: build projects: $(Solution) - arguments: --configuration $(BuildConfiguration) + arguments: '--configuration $(BuildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Run unit tests' @@ -31,7 +33,7 @@ steps: command: test projects: $(Solution) arguments: '--collect "Code coverage"' - + - task: DotNetCoreCLI@2 displayName: 'Publish Company Communicator' inputs: diff --git a/global.json b/global.json index ac25633c4..d6c2c37f7 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "3.1.108", + "version": "6.0.100", "rollForward": "latestFeature" } } \ No newline at end of file