Merge branch 'temp-U4-8802' into dev-v7
# Conflicts: # src/Umbraco.Web/Routing/RedirectTrackingEventHandler.cs # src/Umbraco.Web/Umbraco.Web.csproj
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name umbraco.resources.redirectUrlResource
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
* Used by the redirect url dashboard to get urls and send requests to remove redirects.
|
||||
*/
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
function redirectUrlsResource($http, umbRequestHelper) {
|
||||
|
||||
/**
|
||||
* @ngdoc function
|
||||
* @name umbraco.resources.redirectUrlResource#searchRedirectUrls
|
||||
* @methodOf umbraco.resources.redirectUrlResource
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
* Called to search redirects
|
||||
* ##usage
|
||||
* <pre>
|
||||
* redirectUrlsResource.searchRedirectUrls("", 0, 20)
|
||||
* .then(function(response) {
|
||||
*
|
||||
* });
|
||||
* </pre>
|
||||
* @param {String} searchTerm Searh term
|
||||
* @param {Int} pageIndex index of the page to retrive items from
|
||||
* @param {Int} pageSize The number of items on a page
|
||||
*/
|
||||
function searchRedirectUrls(searchTerm, pageIndex, pageSize) {
|
||||
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.get(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"redirectUrlManagementApiBaseUrl",
|
||||
"SearchRedirectUrls",
|
||||
{ searchTerm: searchTerm, pageIndex: pageIndex, pageSize: pageSize })),
|
||||
'Failed to retrieve data for searching redirect urls');
|
||||
}
|
||||
|
||||
function isEnabled() {
|
||||
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.get(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"redirectUrlManagementApiBaseUrl",
|
||||
"IsEnabled")),
|
||||
'Failed to retrieve data to check if the 301 redirect is enabled');
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc function
|
||||
* @name umbraco.resources.redirectUrlResource#deleteRedirectUrl
|
||||
* @methodOf umbraco.resources.redirectUrlResource
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
* Called to delete a redirect
|
||||
* ##usage
|
||||
* <pre>
|
||||
* redirectUrlsResource.deleteRedirectUrl(1234)
|
||||
* .then(function() {
|
||||
*
|
||||
* });
|
||||
* </pre>
|
||||
* @param {Int} id Id of the redirect
|
||||
*/
|
||||
function deleteRedirectUrl(id) {
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"redirectUrlManagementApiBaseUrl",
|
||||
"DeleteRedirectUrl", { id: id })),
|
||||
'Failed to remove redirect');
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc function
|
||||
* @name umbraco.resources.redirectUrlResource#toggleUrlTracker
|
||||
* @methodOf umbraco.resources.redirectUrlResource
|
||||
* @function
|
||||
*
|
||||
* @description
|
||||
* Called to enable or disable redirect url tracker
|
||||
* ##usage
|
||||
* <pre>
|
||||
* redirectUrlsResource.toggleUrlTracker(true)
|
||||
* .then(function() {
|
||||
*
|
||||
* });
|
||||
* </pre>
|
||||
* @param {Bool} disable true/false to disable/enable the url tracker
|
||||
*/
|
||||
function toggleUrlTracker(disable) {
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"redirectUrlManagementApiBaseUrl",
|
||||
"ToggleUrlTracker", { disable: disable })),
|
||||
'Failed to toggle redirect url tracker');
|
||||
}
|
||||
|
||||
var resource = {
|
||||
searchRedirectUrls: searchRedirectUrls,
|
||||
deleteRedirectUrl: deleteRedirectUrl,
|
||||
toggleUrlTracker: toggleUrlTracker,
|
||||
isEnabled: isEnabled
|
||||
};
|
||||
|
||||
return resource;
|
||||
|
||||
}
|
||||
|
||||
angular.module('umbraco.resources').factory('redirectUrlsResource', redirectUrlsResource);
|
||||
|
||||
})();
|
||||
@@ -331,6 +331,11 @@
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.umb-era-button.umb-button--s {
|
||||
height: 30px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
|
||||
/* CATEGORIES */
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
position: relative;
|
||||
|
||||
border: 1px solid @grayLight;
|
||||
|
||||
flex-wrap: nowrap;
|
||||
@@ -11,6 +13,25 @@
|
||||
min-width: 640px;
|
||||
}
|
||||
|
||||
.umb-table.umb-table-inactive {
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
background: rgba(255, 255, 255, 0.75);
|
||||
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
|
||||
z-index: 10;
|
||||
|
||||
outline: 1px solid rgba(255, 255, 255, 0.75);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.umb-table a {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
@@ -93,6 +114,14 @@ input.umb-table__input {
|
||||
}
|
||||
}
|
||||
|
||||
.umb-table-body .umb-table-row.-solid {
|
||||
cursor: default;
|
||||
|
||||
&:hover {
|
||||
background-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.umb-table-body__link {
|
||||
text-decoration: none;
|
||||
|
||||
@@ -183,6 +212,8 @@ input.umb-table__input {
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.umb-table-row.-selected,
|
||||
.umb-table-row.-selected:hover {
|
||||
background-color: fade(@blueDark, 4%);
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
(function() {
|
||||
"use strict";
|
||||
|
||||
function RedirectUrlsController($scope, redirectUrlsResource, notificationsService, $q) {
|
||||
//...todo
|
||||
//search by url or url part
|
||||
//search by domain
|
||||
//display domain in dashboard results?
|
||||
|
||||
//used to cancel any request in progress if another one needs to take it's place
|
||||
var vm = this;
|
||||
var canceler = null;
|
||||
|
||||
vm.dashboard = {
|
||||
searchTerm: "",
|
||||
loading: false,
|
||||
urlTrackerDisabled: false
|
||||
};
|
||||
|
||||
vm.pagination = {
|
||||
pageIndex: 0,
|
||||
pageNumber: 1,
|
||||
totalPages: 1,
|
||||
pageSize: 20
|
||||
};
|
||||
|
||||
vm.goToPage = goToPage;
|
||||
vm.search = search;
|
||||
vm.removeRedirect = removeRedirect;
|
||||
vm.disableUrlTracker = disableUrlTracker;
|
||||
vm.enableUrlTracker = enableUrlTracker;
|
||||
vm.filter = filter;
|
||||
vm.checkEnabled = checkEnabled;
|
||||
|
||||
function activate() {
|
||||
vm.checkEnabled().then(function() {
|
||||
vm.search();
|
||||
});
|
||||
}
|
||||
|
||||
function checkEnabled() {
|
||||
vm.dashboard.loading = true;
|
||||
return redirectUrlsResource.isEnabled().then(function (response) {
|
||||
vm.dashboard.urlTrackerDisabled = response !== "true";
|
||||
vm.dashboard.loading = false;
|
||||
});
|
||||
}
|
||||
|
||||
function goToPage(pageNumber) {
|
||||
vm.pagination.pageIndex = pageNumber - 1;
|
||||
vm.pagination.pageNumber = pageNumber;
|
||||
vm.search();
|
||||
}
|
||||
|
||||
function search() {
|
||||
|
||||
vm.dashboard.loading = true;
|
||||
|
||||
var searchTerm = vm.dashboard.searchTerm;
|
||||
if (searchTerm === undefined) {
|
||||
searchTerm = "";
|
||||
}
|
||||
|
||||
redirectUrlsResource.searchRedirectUrls(searchTerm, vm.pagination.pageIndex, vm.pagination.pageSize).then(function(response) {
|
||||
|
||||
vm.redirectUrls = response.searchResults;
|
||||
|
||||
// update pagination
|
||||
vm.pagination.pageIndex = response.currentPage;
|
||||
vm.pagination.pageNumber = response.currentPage + 1;
|
||||
vm.pagination.totalPages = response.pageCount;
|
||||
|
||||
vm.dashboard.loading = false;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function removeRedirect(redirectToDelete) {
|
||||
|
||||
redirectUrlsResource.deleteRedirectUrl(redirectToDelete.redirectId).then(function () {
|
||||
|
||||
var index = vm.redirectUrls.indexOf(redirectToDelete);
|
||||
vm.redirectUrls.splice(index, 1);
|
||||
notificationsService.success("Redirect Url Removed!", "Redirect Url " + redirectToDelete.Url + " has been deleted");
|
||||
|
||||
}, function(error) {
|
||||
|
||||
notificationsService.error("Redirect Url Error!", "Redirect Url " + redirectToDelete.Url + " was not deleted");
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function disableUrlTracker() {
|
||||
var toggleConfirm = confirm("Are you sure you want to disable the URL tracker?");
|
||||
if (toggleConfirm) {
|
||||
|
||||
redirectUrlsResource.toggleUrlTracker(true).then(function() {
|
||||
activate();
|
||||
notificationsService.success("URL Tracker has now been disabled");
|
||||
}, function(error) {
|
||||
notificationsService.warning("Error disabling the URL Tracker, more information can be found in your log file.");
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function enableUrlTracker() {
|
||||
redirectUrlsResource.toggleUrlTracker(false).then(function() {
|
||||
activate();
|
||||
notificationsService.success("URL Tracker has now been enabled");
|
||||
}, function(error) {
|
||||
notificationsService.warning("Error enabling the URL Tracker, more information can be found in your log file.");
|
||||
});
|
||||
}
|
||||
|
||||
var filterDebounced = _.debounce(function(e) {
|
||||
|
||||
$scope.$apply(function() {
|
||||
|
||||
//a canceler exists, so perform the cancelation operation and reset
|
||||
if (canceler) {
|
||||
canceler.resolve();
|
||||
canceler = $q.defer();
|
||||
} else {
|
||||
canceler = $q.defer();
|
||||
}
|
||||
|
||||
vm.search();
|
||||
|
||||
});
|
||||
|
||||
}, 200);
|
||||
|
||||
function filter() {
|
||||
filterDebounced();
|
||||
}
|
||||
|
||||
activate();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Dashboard.RedirectUrlsController", RedirectUrlsController);
|
||||
})();
|
||||
@@ -0,0 +1,99 @@
|
||||
<div class="redirecturlsearch" ng-controller="Umbraco.Dashboard.RedirectUrlsController as vm">
|
||||
|
||||
<umb-load-indicator ng-if="vm.dashboard.loading"></umb-load-indicator>
|
||||
|
||||
<umb-editor-sub-header>
|
||||
|
||||
<umb-editor-sub-header-content-right>
|
||||
|
||||
<umb-editor-sub-header-section>
|
||||
|
||||
<button
|
||||
ng-if="vm.dashboard.urlTrackerDisabled === false"
|
||||
type="button"
|
||||
class="umb-era-button umb-button--s"
|
||||
ng-click="vm.disableUrlTracker()">
|
||||
<span>Disable URL Tracker</span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
ng-if="vm.dashboard.urlTrackerDisabled === true"
|
||||
type="button"
|
||||
class="umb-era-button umb-button--s -blue"
|
||||
ng-click="vm.enableUrlTracker()">
|
||||
<span>Enable URL Tracker</span>
|
||||
</button>
|
||||
|
||||
</umb-editor-sub-header-section>
|
||||
|
||||
<umb-editor-sub-header-section ng-if="vm.dashboard.urlTrackerDisabled === false">
|
||||
|
||||
<input
|
||||
class="-full-width-input"
|
||||
placeholder="Search for redirect"
|
||||
ng-model="vm.dashboard.searchTerm"
|
||||
ng-change="vm.filter()"
|
||||
no-dirty-check>
|
||||
|
||||
</umb-editor-sub-header-section>
|
||||
|
||||
</umb-editor-sub-header-content-right>
|
||||
|
||||
</umb-editor-sub-header>
|
||||
|
||||
|
||||
<div class="umb-table" ng-class="{'umb-table-inactive': vm.dashboard.urlTrackerDisabled === true}">
|
||||
|
||||
<div class="umb-table-head">
|
||||
<div class="umb-table-row">
|
||||
<div class="umb-table-cell"></div>
|
||||
<div class="umb-table-cell">Original Url</div>
|
||||
<div class="umb-table-cell">Redirected To</div>
|
||||
<div class="umb-table-cell">Date Created</div>
|
||||
<div class="umb-table-cell"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="umb-table-body">
|
||||
|
||||
<div class="umb-table-row -solid" ng-repeat="redirectUrl in vm.redirectUrls">
|
||||
|
||||
<div class="umb-table-cell">
|
||||
<i class="umb-table-body__icon umb-table-body__fileicon icon-shuffle"></i>
|
||||
</div>
|
||||
|
||||
<div class="umb-table-cell">
|
||||
<a class="umb-table-body__link" href="{{redirectUrl.originalUrl}}" target="_blank" title="{{redirectUrl.originalUrl}}">{{redirectUrl.originalUrl}}</a>
|
||||
</div>
|
||||
|
||||
<div class="umb-table-cell">
|
||||
<a class="umb-table-body__link" href="{{redirectUrl.destinationUrl}}" target="_blank" title="{{redirectUrl.destinationUrl}}">{{redirectUrl.destinationUrl}}</a>
|
||||
</div>
|
||||
|
||||
<div class="umb-table-cell">
|
||||
{{redirectUrl.createDateUtc | date:'medium'}}
|
||||
</div>
|
||||
|
||||
<div class="umb-table-cell justify-end">
|
||||
<a href="/umbraco/#/content/content/edit/{{redirectUrl.contentId}}" class="umb-era-button -gray umb-button--s" style="margin-right: 10px;">Edit</a>
|
||||
<button class="umb-era-button -gray umb-button--s" ng-click="vm.removeRedirect(redirectUrl)">Remove</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flex justify-center items-center">
|
||||
<umb-pagination
|
||||
ng-if="vm.pagination.totalPages > 1 && !vm.dashboard.loading"
|
||||
page-number="vm.pagination.pageNumber"
|
||||
total-pages="vm.pagination.totalPages"
|
||||
on-next="vm.goToPage"
|
||||
on-prev="vm.goToPage"
|
||||
on-go-to-page="vm.goToPage">
|
||||
</umb-pagination>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
Reference in New Issue
Block a user