Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,8 @@ public static IEnumerable<DefaultPermission> DefaultPermissions()
StandardPermission.ManageShipments,
StandardPermission.ManageMerchandiseReturns,
StandardPermission.ManageCheckoutAttribute,
StandardPermission.ManageReports
StandardPermission.ManageReports,
StandardPermission.ManageNews
]
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,6 @@
<admin-input asp-for="NewsSettings.NewsArchivePageSize"/>
<span asp-validation-for="NewsSettings.NewsArchivePageSize"></span>
</div>
</div>
</div>
</div>
</div>
3 changes: 1 addition & 2 deletions src/Web/Grand.Web.Admin/Controllers/NewsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,7 @@ public IActionResult Comments(string filterByNewsItemId)
[HttpPost]
public async Task<IActionResult> Comments(string filterByNewsItemId, DataSourceRequest command)
{
var comments =
await _newsViewModelService.PrepareNewsCommentModel(filterByNewsItemId, command.Page, command.PageSize);
var comments = await _newsViewModelService.PrepareNewsCommentModel(filterByNewsItemId, command.Page, command.PageSize);

var gridModel = new DataSourceResult {
Data = comments.newsCommentModels.ToList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@ public class NewsItemListModel : BaseModel
[GrandResourceDisplayName("Admin.Content.News.NewsItems.List.SearchStore")]
public string SearchStoreId { get; set; }

[GrandResourceDisplayName("Admin.Content.News.NewsItems.List.SearchTitle")]
public string SearchNewsTitle { get; set; }

public IList<SelectListItem> AvailableStores { get; set; } = new List<SelectListItem>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public NewsViewModelService(INewsService newsService,
public virtual async Task<(IEnumerable<NewsItemModel> newsItemModels, int totalCount)> PrepareNewsItemModel(
NewsItemListModel model, int pageIndex, int pageSize)
{
var news = await _newsService.GetAllNews(model.SearchStoreId, pageIndex - 1, pageSize, true, true);
var news = await _newsService.GetAllNews(model.SearchStoreId, pageIndex - 1, pageSize, true, true, model.SearchNewsTitle);
return (news.Select(x =>
{
var m = x.ToModel(_dateTimeService);
Expand Down
38 changes: 38 additions & 0 deletions src/Web/Grand.Web.Store/Areas/Store/Views/News/Create.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
@model NewsItemModel
@{
//page title
ViewBag.Title = Loc["Admin.Content.News.NewsItems.AddNew"];
Layout = Constants.LayoutStore;
}
<form asp-area="@Constants.AreaStore" asp-controller="News" asp-action="Create" method="post">

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-hacker-news"></i>
@Loc["Admin.Content.News.NewsItems.AddNew"]
<small>
<i class="fa fa-arrow-circle-left"></i>@Html.ActionLink(Loc["Admin.Content.News.NewsItems.BackToList"], "List")
</small>
</div>
<div class="actions">
<div class="btn-group btn-group-devided">
<button class="btn btn-success" type="submit" name="save">
<i class="fa fa-check"></i> @Loc["Admin.Common.Save"]
</button>
<button class="btn btn-success" type="submit" name="save-continue">
<i class="fa fa-check-circle"></i> @Loc["Admin.Common.SaveContinue"]
</button>
<vc:admin-widget widget-zone="news_details_buttons" additional-data="null"/>
</div>
</div>
</div>
<div class="x_content form">
<partial name="Partials/CreateOrUpdate" model="Model"/>
</div>
</div>
</div>
</div>
</form>
46 changes: 46 additions & 0 deletions src/Web/Grand.Web.Store/Areas/Store/Views/News/Edit.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
@model NewsItemModel
@{
//page title
ViewBag.Title = Loc["Admin.Content.News.NewsItems.EditNewsItemDetails"];
Layout = Constants.LayoutStore;
}
<form asp-area="@Constants.AreaStore" asp-controller="News" asp-action="Edit" method="post">

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-hacker-news"></i>
@Loc["Admin.Content.News.NewsItems.EditNewsItemDetails"] - @Model.Title
<small>
<i class="fa fa-arrow-circle-left"></i>@Html.ActionLink(Loc["Admin.Content.News.NewsItems.BackToList"], "List")
</small>
</div>
<div class="actions">
<div class="btn-group btn-group-devided">
<button type="button" onclick="window.open('@Url.RouteUrl("NewsItem", new { Model.SeName })','_blank');" class="btn purple">
<i class="fa fa-eye"></i>
@Loc["Admin.Common.Preview"]
</button>
<button class="btn btn-success" type="submit" name="save">
<i class="fa fa-check"></i> @Loc["Admin.Common.Save"]
</button>
<button class="btn btn-success" type="submit" name="save-continue">
<i class="fa fa-check-circle"></i> @Loc["Admin.Common.SaveContinue"]
</button>
<span id="newsitem-delete" class="btn red">
<i class="fa fa-trash-o"></i> @Loc["Admin.Common.Delete"]
</span>
<vc:admin-widget widget-zone="news_details_buttons" additional-data="Model"/>
</div>
</div>
</div>
<div class="x_content form">
<partial name="Partials/CreateOrUpdate" model="Model"/>
</div>
</div>
</div>
</div>
</form>
<admin-delete-confirmation button-id="newsitem-delete"/>
131 changes: 131 additions & 0 deletions src/Web/Grand.Web.Store/Areas/Store/Views/News/List.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
@model NewsItemListModel
@inject AdminAreaSettings adminAreaSettings
@{
//page title
ViewBag.Title = Loc["Admin.Content.News.NewsItems"];
Layout = Constants.LayoutStore;
}

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-hacker-news"></i>
@Loc["Admin.Content.News.NewsItems"]
</div>
<div class="actions btn-group btn-group-devided">
<a href="@Url.Action("Create", new { area = Constants.AreaStore })" class="btn green">
<i class="fa fa-plus"></i><span class="d-none d-sm-inline"> @Loc["Admin.Common.AddNew"] </span>
</a>
<vc:admin-widget widget-zone="news_list_buttons" additional-data="null" />
</div>
</div>
<div class="x_content">
<div class="form-horizontal">
<div class="form-body">
<div class="x_content">
<div id="newsitem-grid"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
$("#newsitem-grid").kendoGrid({
dataSource: {
transport: {
read: {
url: "@Html.Raw(Url.Action("List", "News", new { area = Constants.AreaStore }))",
type: "POST",
dataType: "json",
data: additionalData
}
},
schema: {
data: "Data",
total: "Total",
errors: "Errors"
},
error: function(e) {
display_kendoui_grid_error(e);
// Cancel the changes
this.cancelChanges();
},
pageSize: @(adminAreaSettings.DefaultGridPageSize),
serverPaging: true,
serverFiltering: true,
serverSorting: true
},
pageable: {
refresh: true,
pageSizes: [@(adminAreaSettings.GridPageSizes)]
},
editable: {
confirmation: false,
mode: "inline"
},
scrollable: false,
columns: [{
field: "Title",
width: 300,
title: "@Loc["Admin.Content.News.NewsItems.Fields.Title"]",
template: '<a class="k-link" href="Edit/#=Id#">#=kendo.htmlEncode(Title)#</a>',
}, {
field: "Comments",
title: "@Loc["Admin.Content.News.NewsItems.Fields.Comments"]",
width: 200,
template: '<a class="k-link" href="Edit/#=Id#">@Loc["Admin.Content.News.NewsItems.Fields.Comments"] - #=Comments# </a>'
}, {
field: "StartDate",
title: "@Loc["Admin.Content.News.NewsItems.Fields.StartDate"]",
width: 150,
type: "date",
format: "{0:G}"
}, {
field: "EndDate",
title: "@Loc["Admin.Content.News.NewsItems.Fields.EndDate"]",
width: 150,
type: "date",
format: "{0:G}"
}, {
field: "Published",
title: "@Loc["Admin.Content.News.NewsItems.Fields.Published"]",
width: 100,
headerAttributes: { style: "text-align:center" },
attributes: { style: "text-align:center" },
template: '# if(Published) {# <i class="fa fa-check" aria-hidden="true" style="color:green"></i> #} else {# <i class="fa fa-times" aria-hidden="true" style="color:red"></i> #} #'
}, {
field: "CreatedOn",
title: "@Loc["Admin.Content.News.NewsItems.Fields.CreatedOn"]",
width: 200,
type: "date",
format: "{0:G}"
}]
});
});
</script>
<script>

$(document).ready(function () {
//search button
$('#search-newsitem').click(function () {
//search
var grid = $('#newsitem-grid').data('kendoGrid');
grid.dataSource.page(1); //new search. Set page size to 1
//grid.dataSource.read(); we already loaded the grid above using "page" function
return false;
});
});

function additionalData() {
var data = {
SearchNewsTitle: ''
};
addAntiForgeryToken(data);
return data;
}
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
@model NewsItemModel
@inject AdminAreaSettings adminAreaSettings
<vc:admin-widget widget-zone="news_details_comments_list" additional-data="Model"/>
@if (!string.IsNullOrEmpty(Model.Id))
{
<div class="panel panel-default">
<vc:admin-widget widget-zone="news_details_comments_top" additional-data="Model"/>
<div class="panel-body">
<div id="comments-grid"></div>
</div>
<vc:admin-widget widget-zone="news_details_comments_bottom" additional-data="Model"/>
</div>
<script>
$(document).ready(function () {
$("#comments-grid").kendoGrid({
dataSource: {
transport: {
read: {
url: "@Url.Action("Comments", "News", new { filterByNewsItemId = Model.Id, area = Constants.AreaStore })",
type: "POST",
dataType: "json",
data: addAntiForgeryToken
},
destroy: {
url: "@Html.Raw(Url.Action("CommentDelete", "News", new { area = Constants.AreaStore }))",
type: "POST",
dataType: "json",
data: addAntiForgeryToken
}
},
schema: {
data: "Data",
total: "Total",
errors: "Errors",
model: {
id: "Id",
fields: {
//do not implicitly specify all fields
//we do it only for fields which implicitly require it
//otherwise, they'll be formatted wrong way
CreatedOn: {type: "date" }
}
}
},
error: function(e) {
display_kendoui_grid_error(e);
// Cancel the changes
this.cancelChanges();
},
pageSize: @(adminAreaSettings.DefaultGridPageSize),
serverPaging: true,
serverFiltering: true,
serverSorting: true
},
pageable: {
refresh: true,
pageSizes: [@(adminAreaSettings.GridPageSizes)]
},
editable: {
confirmation: true,
mode: "inline"
},
scrollable: false,
columns: [{
field: "CustomerId",
title: "@Loc["Admin.Content.News.Comments.Fields.Customer"]",
width: 200,
template: '<a class="k-link" href="@Url.Action("Edit", "Customer", new { area = Constants.AreaStore })/#=CustomerId#">#:kendo.htmlEncode(CustomerInfo)#</a>'
}, {
field: "CommentTitle",
title: "@Loc["Admin.Content.News.Comments.Fields.CommentTitle"]"
}, {
field: "CommentText",
title: "@Loc["Admin.Content.News.Comments.Fields.CommentText"]",
encoded: false
}, {
field: "CreatedOn",
title: "@Loc["Admin.Content.News.Comments.Fields.CreatedOn"]",
width: 200,
type: "date",
format: "{0:G}"
}, {
command: { name: "destroy", text: "@Loc["Admin.Common.Delete"]" },
title: "@Loc["Admin.Common.Delete"]",
width: 100
}]
});
});
</script>
}
else
{
<div class="note note-info">
@Loc["Admin.Content.News.NewsItems.SaveBeforeEdit"]
</div>
}
Loading