public ContentItem Get(int id, VersionOptions options) { var record = _contentStorageManager .Query<ContentItemVersionRecord>(x => _query(x, id, options)) .OrderBy(x => x.Number) .LastOrDefault(); return new ContentItem { VersionRecord = record }; }
public virtual void Create(ContentItem contentItem, VersionOptions options) { if (contentItem.VersionRecord == null) { // produce root record to determine the model id contentItem.VersionRecord = new ContentItemVersionRecord { ContentItemRecord = new ContentItemRecord(), Number = 1, Latest = true, Published = true }; } // add to the collection manually for the created case contentItem.VersionRecord.ContentItemRecord.Versions.Add(contentItem.VersionRecord); // version may be specified if (options.VersionNumber != 0) { contentItem.VersionRecord.Number = options.VersionNumber; } // draft flag on create is required for explicitly-published content items if (options.IsDraft) { contentItem.VersionRecord.Published = false; } _contentItemStore.Store(contentItem); // build a context with the initialized instance to create var context = new CreateContentContext(contentItem); // invoke handlers to add information to persistent stores Handlers.Invoke(handler => handler.Creating(context)); // deferring the assignment of ContentType as loading a Record might force NHibernate to AutoFlush // the ContentPart, and needs the ContentItemRecord to be created before (created in previous statement) contentItem.VersionRecord.ContentItemRecord.ContentType = AcquireContentTypeRecord(contentItem.ContentType); Handlers.Invoke(handler => handler.Created(context)); if (options.IsPublished) { var publishContext = new PublishContentContext(contentItem, null); // invoke handlers to acquire state, or at least establish lazy loading callbacks Handlers.Invoke(handler => handler.Publishing(publishContext)); // invoke handlers to acquire state, or at least establish lazy loading callbacks Handlers.Invoke(handler => handler.Published(publishContext)); } }
public virtual ContentItem Get(int id, VersionOptions options) { ContentItem contentItem; ContentItemVersionRecord versionRecord = null; // obtain the root records based on version options if (options.VersionRecordId != 0) { // short-circuit if item held in session if (_contentManagerSession.RecallVersionRecordId(options.VersionRecordId, out contentItem)) { return contentItem; } versionRecord = _contentItemStore.Get(id, options).VersionRecord; } else if (options.VersionNumber != 0) { // short-circuit if item held in session if (_contentManagerSession.RecallVersionNumber(id, options.VersionNumber, out contentItem)) { return contentItem; } versionRecord = _contentItemStore.Get(id, options).VersionRecord; } else if (_contentManagerSession.RecallContentRecordId(id, out contentItem)) { // try to reload a previously loaded published content item if (options.IsPublished) { return contentItem; } versionRecord = contentItem.VersionRecord; } // no record means content item is not in db if (versionRecord == null) { // check in memory var record = _contentItemStore.Get(id, options).VersionRecord; if (record == null) { return null; } versionRecord = record; } // return item if obtained earlier in session if (_contentManagerSession.RecallVersionRecordId(versionRecord.Id, out contentItem)) { if (options.IsDraftRequired && versionRecord.Published) { return BuildNewVersion(contentItem); } return contentItem; } // allocate instance and set record property contentItem = New(versionRecord.ContentItemRecord.ContentType.Name); contentItem.VersionRecord = versionRecord; // store in session prior to loading to avoid some problems with simple circular dependencies _contentManagerSession.Store(contentItem); // create a context with a new instance to load var context = new LoadContentContext(contentItem); // invoke handlers to acquire state, or at least establish lazy loading callbacks Handlers.Invoke(handler => handler.Loading(context)); Handlers.Invoke(handler => handler.Loaded(context)); // when draft is required and latest is published a new version is appended if (options.IsDraftRequired && versionRecord.Published) { contentItem = BuildNewVersion(context.ContentItem); } return contentItem; }