/// <summary>
        /// This should only run after the Post exists in the data store.
        /// </summary>
        /// <returns>The newly created ContentItemID from the data store.</returns>
        /// <remarks>This is for the first question in the thread. Not for replies or items with ParentID > 0.</remarks>
        internal ContentItem CreateContentItem(AlbumInfo objPost, int tabId)
        {
            var typeController  = new ContentTypeController();
            var colContentTypes = (from t in typeController.GetContentTypes() where t.ContentType == Constants.ContentTypeName select t);
            int contentTypeID;

            if (colContentTypes.Count() > 0)
            {
                var contentType = colContentTypes.Single();
                contentTypeID = contentType == null?CreateContentType() : contentType.ContentTypeId;
            }
            else
            {
                contentTypeID = CreateContentType();
            }

            var objContent = new ContentItem
            {
                Content       = objPost.Body,
                ContentTypeId = contentTypeID,
                Indexed       = false,
                ContentKey    = "view=" + Constants.PageScope.Question.ToString().ToLower() + "&id=" + objPost.PostId,
                ModuleID      = objPost.ModuleID,
                TabID         = tabId
            };

            objContent.ContentItemId = Util.GetContentController().AddContentItem(objContent);

            // Add Terms
            var cntTerm = new TermDnnController();

            cntTerm.ManageQuestionTerms(objPost, objContent);

            return(objContent);
        }
Example #2
0
        /// <summary>
        /// Add New album
        /// 1 add tag
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void View_AddNewAlbum(object sender, Args.AlbumEventArgs <Entities.AlbumInfo, string> e)
        {
            //Insert new Album to DataBase
            string[] tags = e.Tags.Split(new[] { ',' });
            if (tags.Length < 2)
            {
                DotNetNuke.UI.Skins.Skin.AddModuleMessage(sender as UserControl, LocalizeString("RequiredTagInput"), ModuleMessage.ModuleMessageType.RedError);
                return;
            }

            var userEnteredTerms = e.Tags.Split(',')
                                   .Where(s => s != string.Empty)
                                   .Select(p => p.Trim())
                                   .Distinct().ToList();

            foreach (var s in userEnteredTerms)
            {
                if (!UtilsGB.ContainsSpecialCharacter(s))
                {
                    continue;
                }
                var msg = Localization.GetString("UnAllowedCharacters", LocalResourceFile);
                msg = msg.Replace("{0}", Constants.DisallowedCharacters);
                DotNetNuke.UI.Skins.Skin.AddModuleMessage(sender as UserControl, msg, ModuleMessage.ModuleMessageType.RedError);
                return;
            }

            try
            {
                //add news term to vocabularyid
                var terms = new List <Term>();
                userEnteredTerms.ForEach(t => terms.Add(TermDnnController.CreateAndReturnTerm(t, VocabularyId)));

                e.AlbumInfo.Terms = terms;
                AlbumController album = new AlbumController();
                album.AddAlbum(e.AlbumInfo, ModuleContext.TabId);

                DotNetNuke.UI.Skins.Skin.AddModuleMessage(sender as UserControl, LocalizeString("SaveSuccess"), ModuleMessage.ModuleMessageType.GreenSuccess);
            }catch (Exception ex)
            {
                ProcessModuleLoadException(ex);
                DotNetNuke.UI.Skins.Skin.AddModuleMessage(sender as UserControl, LocalizeString("SaveError"), ModuleMessage.ModuleMessageType.RedError);
            }
        }
        /// <summary>
        /// This is used to update the content in the ContentItems table. Should be called when a question is updated.
        /// </summary>
        internal void UpdateContentItem(AlbumInfo objPost, int tabId)
        {
            var objContent = Util.GetContentController().GetContentItem(objPost.ContentItemId);

            if (objContent == null)
            {
                return;
            }
            objContent.Content    = objPost.Body;
            objContent.TabID      = tabId;
            objContent.ContentKey = "view=" + Constants.PageScope.Question.ToString().ToLower() + "&id=" + objPost.PostId;

            Util.GetContentController().UpdateContentItem(objContent);

            // Update Terms
            var cntTerm = new TermDnnController();

            cntTerm.ManageQuestionTerms(objPost, objContent);
        }
        /// <summary>
        /// This removes a content item associated with a question/thread from the data store. Should run every time an entire thread is deleted.
        /// </summary>
        /// <param name="contentItemID"></param>
        internal void DeleteContentItem(int contentItemID)
        {
            if (contentItemID <= Null.NullInteger)
            {
                return;
            }
            var objContent = Util.GetContentController().GetContentItem(contentItemID);

            if (objContent == null)
            {
                return;
            }

            // remove any metadata/terms associated first (perhaps we should just rely on ContentItem cascade delete here?)
            var cntTerms = new TermDnnController();

            cntTerms.RemoveQuestionTerms(objContent);

            Util.GetContentController().DeleteContentItem(objContent);
        }