diff --git a/.gitignore b/.gitignore
index 78edf6b..4ca0f89 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,7 +17,6 @@
[Rr]eleases/
x64/
x86/
-build/
bld/
[Bb]in/
[Oo]bj/
@@ -199,4 +198,24 @@ FakesAssemblies/
TEMP/
Logs/
-App_Data/
\ No newline at end of file
+
+# Umbraco
+# Ignore unimportant folders generated by Umbraco
+**/App_Data/Logs/
+**/App_Data/[Pp]review/
+**/App_Data/TEMP/
+**/App_Data/NuGetBackup/
+
+# Ignore Umbraco content cache file
+**/App_Data/umbraco.config
+
+## this [Uu]mbraco/ folder should be created by cmd like `Install-Package UmbracoCms -Version 8.5.3`
+## you can find your Umbraco version in your Web.config. (i.e. )
+## Uncomment this line if you think it fits the way you work on your project.
+## **/[Uu]mbraco/
+
+# ImageProcessor DiskCache
+**/App_Data/cache/
+
+# Ignore the Models Builder models out of date flag
+**/ood.flag
\ No newline at end of file
diff --git a/source/.vscode/launch.json b/source/.vscode/launch.json
new file mode 100644
index 0000000..de4578a
--- /dev/null
+++ b/source/.vscode/launch.json
@@ -0,0 +1,33 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": ".NET Core Launch (web)",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build",
+ "program": "${workspaceFolder}/InboundLinkErrors.Website/bin/Debug/net5.0/InboundLinkErrors.Website.dll",
+ "args": [],
+ "cwd": "${workspaceFolder}/InboundLinkErrors.Website",
+ "stopAtEntry": false,
+ "serverReadyAction": {
+ "action": "openExternally",
+ "pattern": "\\bNow listening on:\\s+(https?://\\S+)"
+ },
+ "env": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "sourceFileMap": {
+ "/Views": "${workspaceFolder}/Views"
+ }
+ },
+ {
+ "name": ".NET Core Attach",
+ "type": "coreclr",
+ "request": "attach"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/source/.vscode/tasks.json b/source/.vscode/tasks.json
new file mode 100644
index 0000000..0508788
--- /dev/null
+++ b/source/.vscode/tasks.json
@@ -0,0 +1,42 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "build",
+ "${workspaceFolder}/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj",
+ "/property:GenerateFullPaths=true",
+ "/consoleloggerparameters:NoSummary"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "publish",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "publish",
+ "${workspaceFolder}/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj",
+ "/property:GenerateFullPaths=true",
+ "/consoleloggerparameters:NoSummary"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "watch",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "watch",
+ "run",
+ "${workspaceFolder}/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj",
+ "/property:GenerateFullPaths=true",
+ "/consoleloggerparameters:NoSummary"
+ ],
+ "problemMatcher": "$msCompile"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/source/InboundLinkErrors.Core/InboundLinkErrors.Core.csproj b/source/InboundLinkErrors.Core/InboundLinkErrors.Core.csproj
index 2ca0552..e30c001 100644
--- a/source/InboundLinkErrors.Core/InboundLinkErrors.Core.csproj
+++ b/source/InboundLinkErrors.Core/InboundLinkErrors.Core.csproj
@@ -11,7 +11,7 @@
-
-
+
+
diff --git a/source/InboundLinkErrors.Core/LinkErrorsDashboard.cs b/source/InboundLinkErrors.Core/LinkErrorsDashboard.cs
index 825c640..e7e44e9 100644
--- a/source/InboundLinkErrors.Core/LinkErrorsDashboard.cs
+++ b/source/InboundLinkErrors.Core/LinkErrorsDashboard.cs
@@ -6,7 +6,7 @@ namespace InboundLinkErrors.Core
public class LinkErrorsDashboard : IDashboard
{
public string Alias => "linkErrorsDashboard";
- public string View => "/App_Plugins/LinkErrors/app.html";
+ public string View => "/App_Plugins/InboundLinkErrors/app.html";
public string[] Sections => new string[] {"Content"};
public IAccessRule[] AccessRules => Array.Empty();
}
diff --git a/source/InboundLinkErrors.Core/LinkErrorsUserComposer.cs b/source/InboundLinkErrors.Core/LinkErrorsUserComposer.cs
index 85ef4d0..72e0b2f 100644
--- a/source/InboundLinkErrors.Core/LinkErrorsUserComposer.cs
+++ b/source/InboundLinkErrors.Core/LinkErrorsUserComposer.cs
@@ -2,11 +2,12 @@
using InboundLinkErrors.Core.ConfigurationProvider;
using InboundLinkErrors.Core.Interfaces;
using InboundLinkErrors.Core.Mappers;
-using InboundLinkErrors.Core.MiddleWare;
+using InboundLinkErrors.Core.Middleware;
using InboundLinkErrors.Core.Options;
using InboundLinkErrors.Core.Processor;
using InboundLinkErrors.Core.Repositories;
using InboundLinkErrors.Core.Services;
+using InboundLinkErrors.Core.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core;
@@ -37,8 +38,12 @@ public void Compose(IUmbracoBuilder composition)
composition.Services.AddUnique();
composition.Services.AddUnique();
+ composition.Services.AddHostedService();
+ composition.Services.AddHostedService();
+
composition.Services.Configure(composition.Config.GetSection(
LinkErrorsOptions.Position));
+
composition.Services.Configure(options => {
options.AddFilter(new UmbracoPipelineFilter(
"InboundLinkErrors",
diff --git a/source/InboundLinkErrors.Core/MiddleWare/LinkErrorsMiddleware.cs b/source/InboundLinkErrors.Core/MiddleWare/LinkErrorsMiddleware.cs
index 16be266..7c999a2 100644
--- a/source/InboundLinkErrors.Core/MiddleWare/LinkErrorsMiddleware.cs
+++ b/source/InboundLinkErrors.Core/MiddleWare/LinkErrorsMiddleware.cs
@@ -6,18 +6,21 @@
using InboundLinkErrors.Core.Processor;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
+using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Web;
-namespace InboundLinkErrors.Core.MiddleWare
+namespace InboundLinkErrors.Core.Middleware
{
public class LinkErrorsMiddleware
{
private readonly RequestDelegate _next;
private readonly ILinkErrorsProcessor _processor;
private readonly LinkErrorConfiguration _configuration;
+ private readonly IUmbracoContextAccessor _umbracoContextAccessor;
- public LinkErrorsMiddleware(RequestDelegate next, ILinkErrorsProcessor processor, ILinkErrorConfigurationProvider configurationProvider)
+ public LinkErrorsMiddleware(RequestDelegate next, ILinkErrorsProcessor processor, ILinkErrorConfigurationProvider configurationProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
+ _umbracoContextAccessor = umbracoContextAccessor;
_next = next;
_processor = processor;
_configuration = configurationProvider.GetConfiguration();
@@ -25,22 +28,28 @@ public LinkErrorsMiddleware(RequestDelegate next, ILinkErrorsProcessor processor
public async Task InvokeAsync(HttpContext context)
{
- if (context.Response.StatusCode != (int)HttpStatusCode.NotFound)
+ var pathAndQuery = context.Request.GetEncodedPathAndQuery();
+
+ if (pathAndQuery.IndexOf("/umbraco", StringComparison.InvariantCultureIgnoreCase) == 0)
{
await _next(context);
return;
}
- var pathAndQuery = context.Request.GetEncodedPathAndQuery();
+ if (!_configuration.TrackMedia && Path.HasExtension(pathAndQuery))
+ {
+ await _next(context);
+ return;
+ }
- // Ignore all /umbraco/ requests
- if (pathAndQuery.IndexOf("/umbraco/", StringComparison.InvariantCultureIgnoreCase) == 0)
+ if (!_umbracoContextAccessor.TryGetUmbracoContext(out var umbracoContext))
{
await _next(context);
return;
}
+ var publishedRequest = umbracoContext?.PublishedRequest;
- if (!_configuration.TrackMedia && Path.HasExtension(pathAndQuery))
+ if (publishedRequest is not null && publishedRequest.ResponseStatusCode != StatusCodes.Status404NotFound)
{
await _next(context);
return;
@@ -50,8 +59,8 @@ public async Task InvokeAsync(HttpContext context)
var referrer = _configuration.TrackReferrer ? headers.Referer?.AbsoluteUri : null;
var userAgent = _configuration.TrackUserAgents ? headers.Headers["User-Agent"].ToString() : null;
- _processor.AddRequest(pathAndQuery, referrer, userAgent);
+ _processor.AddRequest(context.Request.GetEncodedUrl(), referrer, userAgent);
await _next(context);
}
}
-}
+}
\ No newline at end of file
diff --git a/source/InboundLinkErrors.Core/Repositories/LinkErrorsRepository.cs b/source/InboundLinkErrors.Core/Repositories/LinkErrorsRepository.cs
index d86e25f..4d0fef5 100644
--- a/source/InboundLinkErrors.Core/Repositories/LinkErrorsRepository.cs
+++ b/source/InboundLinkErrors.Core/Repositories/LinkErrorsRepository.cs
@@ -14,9 +14,9 @@ namespace InboundLinkErrors.Core.Repositories
public class LinkErrorsRepository : ILinkErrorsRepository
{
private readonly IScopeProvider _scopeProvider;
- private readonly UmbracoMapper _umbracoMapper;
+ private readonly IUmbracoMapper _umbracoMapper;
- public LinkErrorsRepository(IScopeProvider scopeProvider, UmbracoMapper umbracoMapper)
+ public LinkErrorsRepository(IScopeProvider scopeProvider, IUmbracoMapper umbracoMapper)
{
_scopeProvider = scopeProvider;
_umbracoMapper = umbracoMapper;
diff --git a/source/InboundLinkErrors.Website/App_Plugins/InboundLinkErrors/assets/scripts/app.js b/source/InboundLinkErrors.Website/App_Plugins/InboundLinkErrors/assets/scripts/app.js
index 9c98a8c..399b14f 100644
--- a/source/InboundLinkErrors.Website/App_Plugins/InboundLinkErrors/assets/scripts/app.js
+++ b/source/InboundLinkErrors.Website/App_Plugins/InboundLinkErrors/assets/scripts/app.js
@@ -39,7 +39,7 @@ angular.module("umbraco").controller("LinkErrorsController", function ($scope, $
$scope.openRedirectDialog = function (linkError) {
var redirectDialogOptions = {
title: "Set redirect",
- view: "/App_Plugins/LinkErrors/assets/views/createRedirect.html",
+ view: "/App_Plugins/InboundLinkErrors/assets/views/createRedirect.html",
size: "small",
submit: function (model) {
var selectedNodeId = model.selectedNode.id;
@@ -58,7 +58,7 @@ angular.module("umbraco").controller("LinkErrorsController", function ($scope, $
$scope.openDetailDialog = function (linkError) {
var detailDialogOptions = {
title: "Details",
- view: "/App_Plugins/LinkErrors/assets/views/detail.html",
+ view: "/App_Plugins/InboundLinkErrors/assets/views/detail.html",
size: "small",
linkError: linkError,
close: function () {
@@ -203,7 +203,7 @@ angular.module("umbraco.resources").factory("LinkErrorsApi", function ($http) {
},
//Remove / Delete an existing redirect
remove: function (id) {
- return $http.delete("backoffice/LinkErrors/LinkErrorsApi/Delete/" + id);
+ return $http.delete("backoffice/LinkErrors/LinkErrorsApi/Delete/?id=" + id);
},
setRedirect: function (linkErrorId, nodeId, culture) {
return $http.post("backoffice/LinkErrors/LinkErrorsApi/SetRedirect?linkErrorId=" + linkErrorId + "&nodeId=" + nodeId + "&culture=" + culture);
diff --git a/source/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj b/source/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj
index 7e9de2c..036c7f9 100644
--- a/source/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj
+++ b/source/InboundLinkErrors.Website/InboundLinkErrors.Website.csproj
@@ -4,14 +4,11 @@
-
+
+
+
-
-
-
-
-
@@ -41,6 +38,10 @@
+
+
+
+
diff --git a/source/InboundLinkErrors.Website/Properties/launchSettings.json b/source/InboundLinkErrors.Website/Properties/launchSettings.json
index 49234fe..54c7bd8 100644
--- a/source/InboundLinkErrors.Website/Properties/launchSettings.json
+++ b/source/InboundLinkErrors.Website/Properties/launchSettings.json
@@ -4,8 +4,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
- "applicationUrl": "http://localhost:26438",
- "sslPort": 44369
+ "applicationUrl": "http://localhost:47665",
+ "sslPort": 44325
}
},
"profiles": {
@@ -20,7 +20,7 @@
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
- "applicationUrl": "https://localhost:44369;http://localhost:26438",
+ "applicationUrl": "https://localhost:44325;http://localhost:47665",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
diff --git a/source/InboundLinkErrors.Website/Startup.cs b/source/InboundLinkErrors.Website/Startup.cs
index 795e0a4..075bb3a 100644
--- a/source/InboundLinkErrors.Website/Startup.cs
+++ b/source/InboundLinkErrors.Website/Startup.cs
@@ -62,8 +62,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseUmbraco()
.WithMiddleware(u =>
{
- u.WithBackOffice();
- u.WithWebsite();
+ u.UseBackOffice();
+ u.UseWebsite();
})
.WithEndpoints(u =>
{
diff --git a/source/InboundLinkErrors.Website/Umbraco/Config/Lang/cs.xml b/source/InboundLinkErrors.Website/Umbraco/Config/Lang/cs.xml
index 75159d7..1c9def6 100644
--- a/source/InboundLinkErrors.Website/Umbraco/Config/Lang/cs.xml
+++ b/source/InboundLinkErrors.Website/Umbraco/Config/Lang/cs.xml
@@ -16,10 +16,10 @@
Vytvořit skupinu
Odstranit
Deaktivovat
- Vyprázdnit koš
+ Vyprázdnit koš
Aktivovat
Exportovat typ dokumentu
- Importovat typ dokumentu
+ Importovat typ dokumentu
Importovat balíček
Editovat na stránce
Odhlásit
@@ -33,7 +33,6 @@
Práva
Přejmenovat
Obnovit
- Nastavit oprávnění pro stránku %0%
Kam zkopírovat
Kam přesunout
do struktury stromu pod
@@ -135,12 +134,10 @@
Uložit
Uložit a zavřít
Uložit a publikovat
- Uložit a naplánovat
Uložit a odeslat ke schválení
Náhled
Uložit zobrazení seznamu
Naplánovat
- Náhled
Náhled je deaktivován, protože není přiřazena žádná šablona
Vybrat styl
Zobrazit styly
@@ -149,7 +146,6 @@
Uložit a generovat modely
Zpět
Znovu
- Obnovit
Smazat štítek
Zrušit
Potvrdit
@@ -185,29 +181,7 @@
Seřadit
Historie (všechny jazyky)
-
- Abyste změnili typ dokumentu pro zvolený obsah, nejprve jej vyberte ze seznamu typů platných pro tohle umístění.
- Pak potvrďte a/nebo pozměňte mapování vlastností z aktuálního typu na nový a dejte Uložit.
- Obsah byl znovu publikován.
- Aktuální vlastnost
- Aktuální typ
- Typ dokumentu nemůže být změněn, neboť neexistují alternativy platné pro toto umístění.
- Typ dokumentu byl změněn
- Mapování vlastností
- Mapování na vlastnost
- Nová šablona
- Nový typ
- nic
- Obsah
- Vybrat nový typ dokumentu
- Typ dokumentu pro zvolený obsah byl úspěšně změněný na [new type] a následující vlastnosti byly namapovány:
- na
- Nelze dokončit mapování vlastností, neboť nejméně jedna z vlastností má definováno více než jedno mapování.
- Jsou zobrazeny pouze alternativní typy platné pro aktuální umístění.
-
- Nepodařilo se vytvořit složku pod rodičem s ID %0%
- Nepodařilo se vytvořit složku pod rodičem s názvem %0%
Název složky nesmí obsahovat nepovolené znaky.
Odstranění položky se nezdařilo: %0%
@@ -296,17 +270,10 @@
Include drafts: also publish unpublished content items.
This value is hidden. If you need access to view this value please contact your website administrator.
This value is hidden.
- What languages would you like to publish? All languages with content are saved!
What languages would you like to publish?
- What languages would you like to save?
- All languages with content are saved on creation!
What languages would you like to send for approval?
What languages would you like to schedule?
Select the languages to unpublish. Unpublishing a mandatory language will unpublish all languages.
- Published Languages
- Unpublished Languages
- Unmodified Languages
- These languages haven't been created
Ready to Publish?
Ready to Save?
Send for approval
@@ -327,13 +294,10 @@
Klikněte pro nahrání
nebo kliknutím sem vyberte soubory
- Sem můžete přetáhnout a nahrát soubory.
Tento soubor nelze nahrát, nemá povolený typ souboru
Maximální velikost souboru je
Nejvyšší složka médií
- Nepodařilo se přesunout média
Nadřazené a cílové složky nemohou být stejné
- Médium se nepodařilo zkopírovat
Nepodařilo se vytvořit složku pod nadřazeným id %0%
Nepodařilo se přejmenovat složku s id %0%
Přetáhněte své soubory do oblasti
@@ -441,7 +405,6 @@
Místní odkaz:
Při používání místních odkazů vložte znak "#" před odkaz
Otevřít v novém okně?
- Nastavení makra
Toto makro nemá žádné vlastnosti, které by bylo možno editovat
Vložit
Editovat oprávnění pro
@@ -579,10 +542,6 @@
Související stylopisy
Zobrazit jmenovku
Šířka a výška
- Všechny typy vlastností a údaje o nich
- použití tohoto datového typu bude trvale smazáno, potvrďte, že je chcete odstranit
- Ano, smazat
- a všechny typy vlastností a data vlastností používající tento typ dat
Vyberte složku, kterou chcete přesunout
do stromové struktury níže
byla přesunuta pod
@@ -676,7 +635,6 @@
Ikona
Id
Import
- Zahrnout podsložky do vyhledávání
Info
Vnitřní okraj
Vložit
@@ -768,7 +726,6 @@
Další
Články
Videa
- Instalování
Modrá
@@ -819,7 +776,7 @@
Pro pokračování otevřete, prosím, soubor "web.config" (za pužití Visual Studia nebo Vašeho oblíbeného tedtového editoru), přejděte na jeho konec, přidejte připojovací řetězec pro Vaši databázi v klíčí nazvaném "umbracoDbDSN" a soubor uložte.
Klikněte na tlačítko zopakovat, až budete hotovi.
- Další informace o editování souboru web.config zde.
]]>
+ Další informace o editování souboru web.config zde.
]]>
Pokud je to nezbytné, kontaktujte vašeho poskytovatele hostingu.
Jestliže instalujete na místní počítač nebo server, budete potřebovat informace od Vašeho systémového administrátora.]]>
@@ -942,85 +899,85 @@
Umbraco: Resetování hesla
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
- Vyžadováno resetování hesla
-
-
- Vaše uživatelské jméno pro přihlášení do backoffice Umbraco je: %0%
-
-
-
-
- Pokud nemůžete kliknout na odkaz, zkopírujte a vložte tuto adresu URL do okna prohlížeče:
-
-
- |
-
-
- |
-
-
-
-
- |
- |
-
-
-
-