Skip to content

Commit d2d4e9d

Browse files
Merge pull request #11 from iAlexeyProkhorov/qBo_for_nopCommerce_4.50.2
Q bo for nop commerce 4.50.2
2 parents 13687fe + fb7e181 commit d2d4e9d

24 files changed

+550
-42
lines changed

Content/localization.en-US.xml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@
156156
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.WidgetZone.SlideList.PictureUrl">
157157
<Value>Picture</Value>
158158
</LocaleResource>
159+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.WidgetZone.SlideList.Name">
160+
<Value>Name</Value>
161+
</LocaleResource>
159162
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.WidgetZone.SlideList.StartDateUtc">
160163
<Value>Start date</Value>
161164
</LocaleResource>
@@ -239,6 +242,9 @@
239242
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.AddWidgetZoneSlide.Fields.PictureUrl">
240243
<Value>Picture</Value>
241244
</LocaleResource>
245+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.AddWidgetZoneSlide.Fields.Name">
246+
<Value>Name</Value>
247+
</LocaleResource>
242248
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.AddWidgetZoneSlide.Fields.StartDateUtc">
243249
<Value>Start date</Value>
244250
</LocaleResource>
@@ -402,4 +408,45 @@
402408
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideWidgetZone.Fields.OverrideDescription.Hint">
403409
<Value>Put here HTML content to override original slide HTML content. Keep empty if you're don't want to chnage content.</Value>
404410
</LocaleResource>
411+
<!--ADMIN SLIDE LIST-->
412+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.Slide.List.Name">
413+
<Value>Name</Value>
414+
</LocaleResource>
415+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.Slide.Fields.Name">
416+
<Value>Name</Value>
417+
</LocaleResource>
418+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.Slide.Fields.Name.hint">
419+
<Value>Slide search name. This property is using only for search purposes.</Value>
420+
</LocaleResource>
421+
<!--ADMIN SLIDE SEARCH-->
422+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchName">
423+
<Value>Slide name</Value>
424+
</LocaleResource>
425+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchName.hint">
426+
<Value>Put here part of searchable slide name.</Value>
427+
</LocaleResource>
428+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchWidgetZoneId">
429+
<Value>Widget zone</Value>
430+
</LocaleResource>
431+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchWidgetZoneId.hint">
432+
<Value>Select searchable widnget zone</Value>
433+
</LocaleResource>
434+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchStartDateOnUtc">
435+
<Value>Start date</Value>
436+
</LocaleResource>
437+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchStartDateOnUtc.hint">
438+
<Value>Put slide start publication date</Value>
439+
</LocaleResource>
440+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchFinishDateOnUtc">
441+
<Value>Finish date</Value>
442+
</LocaleResource>
443+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.SearchFinishDateOnUtc.hint">
444+
<Value>Put slide finish publication date</Value>
445+
</LocaleResource>
446+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.PublicationStateId">
447+
<Value>Published</Value>
448+
</LocaleResource>
449+
<LocaleResource Name="Nop.Plugin.Baroque.Widgets.qBoSlider.Admin.SlideSearch.PublicationStateId.hint">
450+
<Value>Select searchable slide publication state.</Value>
451+
</LocaleResource>
405452
</Language>

Controllers/qBoSlideController.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class qBoSlideController : BasePluginController
5252
private readonly INotificationService _notificationService;
5353
private readonly IPermissionService _permissionService;
5454
private readonly IPictureService _pictureService;
55+
private readonly ISearchModelFactory _searchModelFactory;
5556
private readonly ISettingService _settingService;
5657
private readonly ISlideModelFactory _slideModelFactory;
5758
private readonly ISlideWidgetZoneModelFactory _slideWidgetZoneModelFactory;
@@ -75,6 +76,7 @@ public qBoSlideController(IAclService aclService,
7576
INotificationService notificationService,
7677
IPermissionService permissionService,
7778
IPictureService pictureService,
79+
ISearchModelFactory searchModelFactory,
7880
ISettingService settingService,
7981
ISlideModelFactory slideModelFactory,
8082
ISlideWidgetZoneModelFactory slideWidgetZoneModelFactory,
@@ -94,6 +96,7 @@ public qBoSlideController(IAclService aclService,
9496
this._localizedEntityService = localizedEntityService;
9597
this._notificationService = notificationService;
9698
this._permissionService = permissionService;
99+
_searchModelFactory = searchModelFactory;
97100
this._pictureService = pictureService;
98101
this._settingService = settingService;
99102
this._slideModelFactory = slideModelFactory;
@@ -197,10 +200,10 @@ protected virtual async Task SaveCustomerRolesAclAsync(Slide slide, SlideModel m
197200

198201
#region Slides List / Create / Update / Delete
199202

200-
public virtual IActionResult List()
203+
public virtual async Task<IActionResult> List()
201204
{
202205
var model = new SlideSearchModel();
203-
model.SetGridPageSize();
206+
await _searchModelFactory.PrepareSlideSearchModelAsync(model);
204207

205208
return View("~/Plugins/Widgets.qBoSlider/Views/Admin/Slide/List.cshtml", model);
206209
}
@@ -248,6 +251,7 @@ public virtual async Task<IActionResult> Create(SlideModel model, bool continueE
248251

249252
var slide = new Slide()
250253
{
254+
Name = model.Name,
251255
Description = model.Description,
252256
HyperlinkAddress = model.Hyperlink,
253257
PictureId = model.PictureId,
@@ -324,6 +328,7 @@ public virtual async Task<IActionResult> Edit(SlideModel model, bool continueEdi
324328
}
325329

326330
//set values
331+
slide.Name = model.Name;
327332
slide.Description = model.Description;
328333
slide.HyperlinkAddress = model.Hyperlink;
329334
slide.PictureId = model.PictureId;

Controllers/qBoWidgetZoneController.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public class qBoWidgetZoneController : BasePluginController
4949
private readonly ILocalizedEntityService _localizedEntityService;
5050
private readonly INotificationService _notificationService;
5151
private readonly IPermissionService _permissionService;
52+
private readonly ISearchModelFactory _searchModelFactory;
5253
private readonly ISettingService _settingService;
5354
private readonly IStaticCacheManager _staticCacheManager;
5455
private readonly IStoreMappingService _storeMappingService;
@@ -68,6 +69,7 @@ public qBoWidgetZoneController(IAclService aclService,
6869
ILocalizedEntityService localizedEntityService,
6970
INotificationService notificationService,
7071
IPermissionService permissionService,
72+
ISearchModelFactory searchModelFactory,
7173
ISettingService settingService,
7274
IStoreMappingService storeMappingService,
7375
IStoreService storeService,
@@ -82,6 +84,7 @@ public qBoWidgetZoneController(IAclService aclService,
8284
_localizedEntityService = localizedEntityService;
8385
_notificationService = notificationService;
8486
_permissionService = permissionService;
87+
_searchModelFactory = searchModelFactory;
8588
_settingService = settingService;
8689
_storeMappingService = storeMappingService;
8790
_storeService = storeService;
@@ -478,8 +481,7 @@ public virtual async Task<IActionResult> AddWidgetZoneSlidePopup(int widgetZoneI
478481
{
479482
WidgetZoneId = widgetZoneId
480483
};
481-
482-
model.SetPopupGridPageSize();
484+
await _searchModelFactory.PrepareSlideSearchModelAsync(model);
483485

484486
return View("~/Plugins/Widgets.qBoSlider/Views/Admin/WidgetZone/AddWidgetZoneSlidePopup.cshtml", model);
485487
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//Copyright 2020 Alexey Prokhorov
2+
3+
//Licensed under the Apache License, Version 2.0 (the "License");
4+
//you may not use this file except in compliance with the License.
5+
//You may obtain a copy of the License at
6+
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
9+
//Unless required by applicable law or agreed to in writing, software
10+
//distributed under the License is distributed on an "AS IS" BASIS,
11+
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
//See the License for the specific language governing permissions and
13+
//limitations under the License.
14+
15+
using Nop.Plugin.Widgets.qBoSlider.Models.Admin;
16+
using Nop.Web.Framework.Models;
17+
using System.Threading.Tasks;
18+
19+
namespace Nop.Plugin.Widgets.qBoSlider.Factories.Admin
20+
{
21+
/// <summary>
22+
/// Represents search model factory interface.
23+
/// Stores methods which prepares common search box properties
24+
/// </summary>
25+
public interface ISearchModelFactory
26+
{
27+
/// <summary>
28+
/// Prepares slide search box model
29+
/// </summary>
30+
/// <typeparam name="TModel">Slide search model</typeparam>
31+
/// <param name="searchModel">Search box model instance</param>
32+
/// <returns>Model instance</returns>
33+
Task PrepareSlideSearchModelAsync<TModel>(TModel searchModel) where TModel : BaseSearchModel, ISlideSearchModel;
34+
}
35+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
//Copyright 2020 Alexey Prokhorov
2+
3+
//Licensed under the Apache License, Version 2.0 (the "License");
4+
//you may not use this file except in compliance with the License.
5+
//You may obtain a copy of the License at
6+
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
9+
//Unless required by applicable law or agreed to in writing, software
10+
//distributed under the License is distributed on an "AS IS" BASIS,
11+
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
//See the License for the specific language governing permissions and
13+
//limitations under the License.
14+
15+
using Microsoft.AspNetCore.Mvc.Rendering;
16+
using Nop.Plugin.Widgets.qBoSlider.Models.Admin;
17+
using Nop.Plugin.Widgets.qBoSlider.Service;
18+
using Nop.Services;
19+
using Nop.Services.Localization;
20+
using Nop.Web.Framework.Models;
21+
using System.Linq;
22+
using System.Threading.Tasks;
23+
24+
namespace Nop.Plugin.Widgets.qBoSlider.Factories.Admin
25+
{
26+
/// <summary>
27+
/// Represents search boxes model factory
28+
/// </summary>
29+
public class SearchModelFactory : ISearchModelFactory
30+
{
31+
#region Fields
32+
33+
private readonly ILocalizationService _localizationService;
34+
private readonly IWidgetZoneService _widgetZoneService;
35+
36+
#endregion
37+
38+
#region Constructor
39+
40+
public SearchModelFactory(
41+
ILocalizationService localizationService,
42+
IWidgetZoneService widgetZoneService)
43+
{
44+
_localizationService = localizationService;
45+
_widgetZoneService = widgetZoneService;
46+
}
47+
48+
#endregion
49+
50+
#region Methods
51+
52+
/// <summary>
53+
/// Prepares slide search model
54+
/// </summary>
55+
/// <param name="model">Slide search model</param>
56+
/// <returns>Slide search model</returns>
57+
public virtual async Task PrepareSlideSearchModelAsync<TModel>(TModel model) where TModel : BaseSearchModel, ISlideSearchModel
58+
{
59+
model.AvailableWidgetZones = _widgetZoneService.GetWidgetZones().Select(x =>
60+
{
61+
return new SelectListItem()
62+
{
63+
Value = x.Id.ToString(),
64+
Text = $"{x.Name} ({x.SystemName})"
65+
};
66+
}).ToList();
67+
model.AvailablePublicationStates = (await PublicationState.All.ToSelectListAsync(useLocalization: true)).ToList();
68+
model.SetGridPageSize();
69+
model.AvailableWidgetZones.Insert(0,
70+
new SelectListItem()
71+
{
72+
Value = "0",
73+
Text = await _localizationService.GetResourceAsync("admin.common.all")
74+
});
75+
}
76+
77+
#endregion
78+
}
79+
}

Factories/Admin/SlideModelFactory.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,12 @@ public virtual async Task PrepareAclModelAsync(SlideModel model, Slide slide, bo
151151
/// <returns>Slide paged list model</returns>
152152
public virtual async Task<SlideSearchModel.SlidePagedListModel> PrepareSlideListPagedModelAsync(SlideSearchModel searchModel)
153153
{
154-
var slides = await _slideService.GetAllSlidesAsync(showHidden: true, pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
154+
var slides = await _slideService.GetAllSlidesAsync(searchModel.SearchName,
155+
searchModel.SearchWidgetZoneId > 0 ? new int[1] { searchModel.SearchWidgetZoneId } : null,
156+
searchModel.SearchStartDateOnUtc,
157+
searchModel.SearchFinishDateOnUtc,
158+
(PublicationState)searchModel.SearchPublicationStateId, pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
159+
155160
var gridModel = await new SlideSearchModel.SlidePagedListModel().PrepareToGridAsync(searchModel, slides, () =>
156161
{
157162
return slides.SelectAwait(async slide =>
@@ -160,6 +165,7 @@ public virtual async Task PrepareAclModelAsync(SlideModel model, Slide slide, bo
160165
return new SlideSearchModel.SlideListItemModel()
161166
{
162167
Id = slide.Id,
168+
Name = slide.Name,
163169
Picture = await _pictureService.GetPictureUrlAsync(pictureId, 300),
164170
Hyperlink = slide.HyperlinkAddress,
165171
StartDateUtc = slide.StartDateUtc,
@@ -186,6 +192,7 @@ public virtual async Task<SlideModel> PrepareSlideModelAsync(SlideModel model, S
186192
if(slide != null)
187193
{
188194
model.Id = slide.Id;
195+
model.Name = slide.Name;
189196
model.Hyperlink = slide.HyperlinkAddress;
190197
model.PictureId = slide.PictureId.GetValueOrDefault(0);
191198
model.Description = slide.Description;

Factories/Admin/WidgetZoneSlideModelFactory.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public WidgetZoneSlideModelFactory(ILanguageService languageService,
8181
{
8282
Id = widgetZoneSlide.Id,
8383
PictureUrl = pictureUrl,
84+
Name = slide.Name,
8485
StartDateUtc = slide.StartDateUtc,
8586
EndDateUtc = slide.EndDateUtc,
8687
Published = slide.Published,
@@ -99,7 +100,14 @@ public WidgetZoneSlideModelFactory(ILanguageService languageService,
99100
/// <returns>Add widget zone slide model</returns>
100101
public virtual async Task<AddWidgetZoneSlideModel.SlidePagedListModel> PrepareAddWidgetZoneSlideModelAsync(AddWidgetZoneSlideModel searchModel)
101102
{
102-
var slides = await _slideService.GetAllSlidesAsync(showHidden: true, pageIndex: searchModel.Page - 1, pageSize: searchModel.PageSize);
103+
var slides = await _slideService.GetAllSlidesAsync(name: searchModel.SearchName,
104+
widgetZoneIds: searchModel.SearchWidgetZoneId > 0 ? new int[1] { searchModel.SearchWidgetZoneId } : null,
105+
startDate: searchModel.SearchStartDateOnUtc,
106+
endDate: searchModel.SearchFinishDateOnUtc,
107+
publicationState: (PublicationState)searchModel.SearchPublicationStateId,
108+
pageIndex: searchModel.Page - 1,
109+
pageSize: searchModel.PageSize);
110+
103111
var gridModel = await new AddWidgetZoneSlideModel.SlidePagedListModel().PrepareToGridAsync(searchModel, slides, () =>
104112
{
105113
return slides.SelectAwait(async slide =>
@@ -110,6 +118,7 @@ public WidgetZoneSlideModelFactory(ILanguageService languageService,
110118
return new AddWidgetZoneSlideModel.SlideModel()
111119
{
112120
Id = slide.Id,
121+
Name = slide.Name,
113122
PictureUrl = pictureUrl,
114123
StartDateUtc = slide.StartDateUtc,
115124
EndDateUtc = slide.EndDateUtc,

Infrastructure/NopStartup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public void ConfigureServices(IServiceCollection services, IConfiguration config
4141
services.AddScoped<IGarbageManager, GarbageManager>();
4242

4343
//factories
44+
services.AddScoped<ISearchModelFactory, SearchModelFactory>();
4445
services.AddScoped<ISlideModelFactory, SlideModelFactory>();
4546
services.AddScoped<ISlideWidgetZoneModelFactory, SlideWidgetZoneModelFactory>();
4647
services.AddScoped<IWidgetZoneModelFactory, WidgetZoneModelFactory>();

0 commit comments

Comments
 (0)