Text Compare
Produced: 5/22/2013 1:57:57 PM
   
Mode:  Differences, With Context  
Left file: ContentDefinitionService.cs:72dab93     Right file: ContentDefinitionService.cs:7d60eec  
5 5 using Orchard.ContentManagement.Drivers;
6 6 using Orchard.ContentManagement.MetaData;
7 7 using Orchard.ContentManagement.MetaData.Models;
8 8 using Orchard.ContentTypes.ViewModels;
9 9 using Orchard.Core.Contents.Extensions;
10 10 using Orchard.Localization;
  11 using Orchard.Logging;
11 12 using Orchard.Utility.Extensions;
12 13  
13 14 namespace Orchard.ContentTypes.Services {
14 15     public class ContentDefinitionService : IContentDefinitionService {
15 16         private readonly IContentDefinitionManager _contentDefinitionManager;
16 17         private readonly IEnumerable<IContentPartDriver> _contentPartDrivers;
17 18         private readonly IEnumerable<IContentFieldDriver> _contentFieldDrivers;
18 19         private readonly IContentDefinitionEditorEvents _contentDefinitionEditorEvents;
  20         private readonly IEnumerable<IContentDefinitionEventHandler> _contentDefinitionEventHandlers;
19 21  
20 22         public ContentDefinitionService(
21 23                 IOrchardServices services,
22 24                 IContentDefinitionManager contentDefinitionManager,
23 25                 IEnumerable<IContentPartDriver> contentPartDrivers,
24 26                 IEnumerable<IContentFieldDriver> contentFieldDrivers,
25                   IContentDefinitionEditorEvents contentDefinitionEditorEvents)
  27                 IContentDefinitionEditorEvents contentDefinitionEditorEvents,
  28                 IEnumerable<IContentDefinitionEventHandler> contentDefinitionEventHandlers)
26 29         {
27 30             Services = services;
28 31             _contentDefinitionManager = contentDefinitionManager;
29 32             _contentPartDrivers = contentPartDrivers;
30 33             _contentFieldDrivers = contentFieldDrivers;
31 34             _contentDefinitionEditorEvents = contentDefinitionEditorEvents;
  35             _contentDefinitionEventHandlers = contentDefinitionEventHandlers;
  36             Logger = NullLogger.Instance;
32 37             T = NullLocalizer.Instance;
33 38         }
34 39  
35 40         public IOrchardServices Services { get; set; }
36 41         public Localizer T { get; set; }
  42         public ILogger Logger { get; set; }
37 43  
38 44         public IEnumerable<EditTypeViewModel> GetTypes() {
39 45             return _contentDefinitionManager.ListTypeDefinitions().Select(ctd => new EditTypeViewModel(ctd)).OrderBy(m => m.DisplayName);
40 46         }
41 47  
42 48         public EditTypeViewModel GetType(string name) {
 
77 83                 }
78 84             }
79 85  
80 86             while ( _contentDefinitionManager.GetTypeDefinition(name) != null )
81 87                 name = VersionName(name);
82 88  
  89             _contentDefinitionEventHandlers.Invoke(x => x.AddingType(name, displayName), Logger);
  90  
83 91             var contentTypeDefinition = new ContentTypeDefinition(name, displayName);
84 92             _contentDefinitionManager.StoreTypeDefinition(contentTypeDefinition);
85 93             _contentDefinitionManager.AlterTypeDefinition(name,
86 94                 cfg => cfg.Creatable().Draftable());
  95  
  96             _contentDefinitionEventHandlers.Invoke(x => x.AddedType(name, displayName), Logger);
87 97  
88 98             return contentTypeDefinition;
89 99         }
90 100  
91 101         public void AlterType(EditTypeViewModel typeViewModel, IUpdateModel updateModel) {
92 102             var updater = new Updater(updateModel);
 
143 153                     });
144 154                 }
145 155             });
146 156         }
147 157  
148 158         public void RemoveType(string name, bool deleteContent) {
  159             _contentDefinitionEventHandlers.Invoke(x => x.RemovingType(name, deleteContent), Logger);
149 160  
150 161             // first remove all attached parts
151 162             var typeDefinition = _contentDefinitionManager.GetTypeDefinition(name);
152 163             var partDefinitions = typeDefinition.Parts.ToArray();
153 164             foreach (var partDefinition in partDefinitions) {
154 165                 RemovePartFromType(partDefinition.PartDefinition.Name, name);
 
166 177                 var contentItems = Services.ContentManager.Query(name).List();
167 178                 foreach (var contentItem in contentItems) {
168 179                     Services.ContentManager.Remove(contentItem);
169 180                 }
170 181             }
171 182  
  183             _contentDefinitionEventHandlers.Invoke(x => x.RemovedType(name, deleteContent), Logger);
172 184         }
173 185  
174 186         public void AddPartToType(string partName, string typeName) {
  187             _contentDefinitionEventHandlers.Invoke(x => x.AddingPartToType(partName, typeName), Logger);
  188  
175 189             _contentDefinitionManager.AlterTypeDefinition(typeName, typeBuilder => typeBuilder.WithPart(partName));
  190  
  191             _contentDefinitionEventHandlers.Invoke(x => x.AddedPartToType(partName, typeName), Logger);
176 192         }
177 193  
178 194         public void RemovePartFromType(string partName, string typeName) {
  195             _contentDefinitionEventHandlers.Invoke(x => x.RemovingPartFromType(partName, typeName), Logger);
  196  
179 197             _contentDefinitionManager.AlterTypeDefinition(typeName, typeBuilder => typeBuilder.RemovePart(partName));
  198  
  199             _contentDefinitionEventHandlers.Invoke(x => x.RemovedPartFromType(partName, typeName), Logger);
180 200         }
181 201  
182 202         public IEnumerable<EditPartViewModel> GetParts(bool metadataPartsOnly) {
183 203             var typeNames = GetTypes().Select(ctd => ctd.Name);
184 204  
185 205             // user-defined parts
 
215 235             var name = partViewModel.Name;
216 236  
217 237             if (_contentDefinitionManager.GetPartDefinition(name) != null)
218 238                 throw new OrchardException(T("Cannot add part named '{0}'. It already exists.", name));
219 239  
220 240             if (!String.IsNullOrEmpty(name)) {
  241                 _contentDefinitionEventHandlers.Invoke(x => x.AddingPart(name), Logger);
  242                
221 243                 _contentDefinitionManager.AlterPartDefinition(name, builder => builder.Attachable());
  244  
  245                 _contentDefinitionEventHandlers.Invoke(x => x.AddedPart(name), Logger);
  246  
222 247                 return new EditPartViewModel(_contentDefinitionManager.GetPartDefinition(name));
223 248             }
224 249  
225 250             return null;
226 251         }
227 252  
 
231 256                 partViewModel.Templates = _contentDefinitionEditorEvents.PartEditorUpdate(partBuilder, updater);
232 257             });
233 258         }
234 259  
235 260         public void RemovePart(string name) {
236 261             var partDefinition = _contentDefinitionManager.GetPartDefinition(name);
  262            
  263             _contentDefinitionEventHandlers.Invoke(x => x.RemovingPart(name), Logger);
  264  
237 265             var fieldDefinitions = partDefinition.Fields.ToArray();
238 266             foreach(var fieldDefinition in fieldDefinitions) {
239 267                 RemoveFieldFromPart(fieldDefinition.Name, name);
240 268             }
241 269            
242 270             _contentDefinitionManager.DeletePartDefinition(name);
  271  
  272             _contentDefinitionEventHandlers.Invoke(x => x.RemovedPart(name), Logger);
243 273         }
244 274  
245 275         public IEnumerable<ContentFieldInfo> GetFields() {
246 276             return _contentFieldDrivers.SelectMany(d => d.GetFieldInfo());
247 277         }
248 278  
 
252 282  
253 283         public void AddFieldToPart(string fieldName, string displayName, string fieldTypeName, string partName) {
254 284             fieldName = fieldName.ToSafeName();
255 285             if (string.IsNullOrEmpty(fieldName)) {
256 286                 throw new OrchardException(T("Fields must have a name containing no spaces or symbols."));
257 287             }
  288            
  289             _contentDefinitionEventHandlers.Invoke(x => x.AddingFieldToPart(fieldName, displayName, fieldTypeName, partName), Logger);
  290  
258 291             _contentDefinitionManager.AlterPartDefinition(partName,
259 292                 partBuilder => partBuilder.WithField(fieldName, fieldBuilder => fieldBuilder.OfType(fieldTypeName).WithDisplayName(displayName)));
  293  
  294             _contentDefinitionEventHandlers.Invoke(x => x.AddedFieldToPart(fieldName, displayName, fieldTypeName, partName), Logger);
260 295         }
261 296  
262 297         public void RemoveFieldFromPart(string fieldName, string partName) {
  298             _contentDefinitionEventHandlers.Invoke(x => x.RemovingFieldFromPart(fieldName, partName), Logger);
  299  
263 300             _contentDefinitionManager.AlterPartDefinition(partName, typeBuilder => typeBuilder.RemoveField(fieldName));
  301  
  302             _contentDefinitionEventHandlers.Invoke(x => x.RemovedFieldFromPart(fieldName, partName), Logger);
264 303         }
265 304  
266 305         public string GenerateContentTypeNameFromDisplayName(string displayName) {
267 306             displayName = displayName.ToSafeName();
268 307  
269 308             while (_contentDefinitionManager.GetTypeDefinition(displayName) != null)