using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Scoping; namespace Umbraco.Core.Services.Implement { /// /// Represents the Macro Service, which is an easy access to operations involving /// public class MacroService : ScopeRepositoryService, IMacroService { private readonly IMacroRepository _macroRepository; private readonly IAuditRepository _auditRepository; public MacroService(IScopeProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory, IMacroRepository macroRepository, IAuditRepository auditRepository) : base(provider, logger, eventMessagesFactory) { _macroRepository = macroRepository; _auditRepository = auditRepository; } /// /// Gets an object by its alias /// /// Alias to retrieve an for /// An object public IMacro GetByAlias(string alias) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { var q = Query().Where(x => x.Alias == alias); return _macroRepository.Get(q).FirstOrDefault(); } } public IEnumerable GetAll() { return GetAll(new int[0]); } public IEnumerable GetAll(params int[] ids) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _macroRepository.GetMany(ids); } } public IEnumerable GetAll(params Guid[] ids) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _macroRepository.GetMany(ids); } } public IMacro GetById(int id) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _macroRepository.Get(id); } } public IMacro GetById(Guid id) { using (var scope = ScopeProvider.CreateScope(autoComplete: true)) { return _macroRepository.Get(id); } } /// /// Deletes an /// /// to delete /// Optional id of the user deleting the macro public void Delete(IMacro macro, int userId = Constants.Security.SuperUserId) { using (var scope = ScopeProvider.CreateScope()) { var deleteEventArgs = new DeleteEventArgs(macro); if (scope.Events.DispatchCancelable(Deleting, this, deleteEventArgs)) { scope.Complete(); return; } _macroRepository.Delete(macro); deleteEventArgs.CanCancel = false; scope.Events.Dispatch(Deleted, this, deleteEventArgs); Audit(AuditType.Delete, userId, -1); scope.Complete(); } } /// /// Saves an /// /// to save /// Optional Id of the user deleting the macro public void Save(IMacro macro, int userId = Constants.Security.SuperUserId) { using (var scope = ScopeProvider.CreateScope()) { var saveEventArgs = new SaveEventArgs(macro); if (scope.Events.DispatchCancelable(Saving, this, saveEventArgs)) { scope.Complete(); return; } if (string.IsNullOrWhiteSpace(macro.Name)) { throw new ArgumentException("Cannot save macro with empty name."); } _macroRepository.Save(macro); saveEventArgs.CanCancel = false; scope.Events.Dispatch(Saved, this, saveEventArgs); Audit(AuditType.Save, userId, -1); scope.Complete(); } } ///// ///// Gets a list all available plugins ///// ///// An enumerable list of objects //public IEnumerable GetMacroPropertyTypes() //{ // return MacroPropertyTypeResolver.Current.MacroPropertyTypes; //} ///// ///// Gets an by its alias ///// ///// Alias to retrieve an for ///// An object //public IMacroPropertyType GetMacroPropertyTypeByAlias(string alias) //{ // return MacroPropertyTypeResolver.Current.MacroPropertyTypes.FirstOrDefault(x => x.Alias == alias); //} private void Audit(AuditType type, int userId, int objectId) { _auditRepository.Save(new AuditItem(objectId, type, userId, "Macro")); } #region Event Handlers /// /// Occurs before Delete /// public static event TypedEventHandler> Deleting; /// /// Occurs after Delete /// public static event TypedEventHandler> Deleted; /// /// Occurs before Save /// public static event TypedEventHandler> Saving; /// /// Occurs after Save /// public static event TypedEventHandler> Saved; #endregion } }