protected void save_Click(object sender, EventArgs e) { SharedBasePage requestPage = this.Page as SharedBasePage; if (SiteSecurity.IsValidContributor()) { //Catch empty posts! if (!editControl.HasText()) { return; } CrosspostInfoCollection crosspostList = new CrosspostInfoCollection(); Entry entry; if (CurrentEntry == null) { entry = new Entry(); entry.Initialize(); } else { entry = CurrentEntry; } //Try a culture specific parse... // TODO: Come up with a shiny javascript datetime picker if(textDate.SelectedDateFormatted.Length > 0) { try { DateTime createdLocalTime = new DateTime(textDate.SelectedDate.Year, textDate.SelectedDate.Month, textDate.SelectedDate.Day, entry.CreatedLocalTime.Hour, entry.CreatedLocalTime.Minute, entry.CreatedLocalTime.Second, entry.CreatedLocalTime.Millisecond); entry.CreatedLocalTime = createdLocalTime; } catch(FormatException fex) { Trace.Write("Bad DateTime string creating new Entry: " + fex.ToString()); } } // see if we need to delete any old Enclosures if (entry.Enclosure != null) { if (this.enclosureUpload.Visible == true && this.buttonRemove.Visible == false) { DeleteEnclosures(); } } // upload the attachment if (enclosureUpload.Value != null && enclosureUpload.Value != String.Empty) { try { long numBytes; string type; string baseFileName = HandleUpload(enclosureUpload, entry.EntryId, out type, out numBytes); entry.Attachments.Add(new Attachment(baseFileName, type, numBytes, AttachmentType.Enclosure)); } catch (Exception exc) { ErrorTrace.Trace(TraceLevel.Error, exc); } } entry.Language = listLanguages.SelectedValue == "" ? null : listLanguages.SelectedValue; entry.Title = entryTitle.Text; entry.Description = entryAbstract.Text; entry.Author = requestPage.User.Identity.Name; entry.AllowComments = checkBoxAllowComments.Checked; entry.IsPublic = checkBoxPublish.Checked; entry.Syndicated = checkBoxSyndicated.Checked; // GeoRSS. if (siteConfig.EnableGeoRss) { double latitude, longitude; if (double.TryParse(txtLat.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out latitude)) { entry.Latitude = latitude; } else { entry.Latitude = null; } if (double.TryParse(txtLong.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out longitude)) { entry.Longitude = longitude; } else { entry.Longitude = null; } } if (isDHTMLEdit) { entry.Content = editControl.Text; } // handle categories string categories = ""; StringBuilder sb = new StringBuilder(); bool needSemi = false; foreach (ListItem listItem in categoryList.Items) { if (listItem.Selected) { if (needSemi) sb.Append(";"); sb.Append(listItem.Text); needSemi = true; } } categories = sb.ToString(); entry.Categories = categories; // handle crosspostSiteInfo CrosspostInfoCollection crosspostSiteInfo = new CrosspostInfoCollection(); // we need to reload the crosspostinfo as it contains sensitive data like password foreach (CrosspostSite site in requestPage.SiteConfig.CrosspostSites) { CrosspostInfo ci = new CrosspostInfo(site); ci.TrackingUrlBase = SiteUtilities.GetCrosspostTrackingUrlBase(requestPage.SiteConfig); crosspostSiteInfo.Add(ci); } // merge the crosspost config with the crosspost data foreach (CrosspostInfo cpi in crosspostSiteInfo) { foreach (Crosspost cp in entry.Crossposts) { if (cp.ProfileName == cpi.Site.ProfileName) { cpi.IsAlreadyPosted = true; cpi.TargetEntryId = cp.TargetEntryId; cpi.Categories = cp.Categories; break; } } } foreach (DataGridItem item in gridCrossposts.Items) { CheckBox checkSite = item.FindControl("checkSite") as CheckBox; if (checkSite.Checked) { TextBox textSiteCategory = item.FindControl("textSiteCategory") as TextBox; foreach (CrosspostInfo cpi in crosspostSiteInfo) { if (cpi.Site.ProfileName == checkSite.Text) { cpi.Categories = textSiteCategory.Text; crosspostList.Add(cpi); break; } } } } try { // prevent SaveEntry from happenning twice if (crosspostList.Count == 0) crosspostList = null; if (CurrentEntry == null) // new entry { SiteUtilities.SaveEntry(entry, this.textTrackback.Text, crosspostList, requestPage.SiteConfig, requestPage.LoggingService, requestPage.DataService); } else // existing entry { SiteUtilities.UpdateEntry(entry, this.textTrackback.Text, crosspostList, requestPage.SiteConfig, requestPage.LoggingService, requestPage.DataService); } } catch (Exception ex) { //SDH: Changed to ex.ToString as the InnerException is often null, which causes another error in this catch! StackTrace st = new StackTrace(); requestPage.LoggingService.AddEvent( new EventDataItem(EventCodes.Error, ex.ToString() + Environment.NewLine + st.ToString(), SiteUtilities.GetPermaLinkUrl(entry))); // if we created a new entry, and there was an error, delete the enclosure folder DeleteEnclosures(); requestPage.Redirect("FormatPage.aspx?path=SiteConfig/pageerror.format.html"); } entryTitle.Text = ""; entryAbstract.Text = ""; categoryList.Items.Clear(); if (Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] != null) { Uri originalReferrer = Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] as Uri; Session.Remove("newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"); Redirect(originalReferrer.AbsoluteUri); } else { Redirect(SiteUtilities.GetAdminPageUrl(requestPage.SiteConfig)); } } }
protected void Page_Load(object sender, EventArgs e) { SharedBasePage requestPage = this.Page as SharedBasePage; siteConfig = SiteConfig.GetSiteConfig(); resmgr = ApplicationResourceTable.Get(); imageUpload.Accept = "image/jpeg,image/gif,image/png"; editControl.Width = Unit.Percentage(99d); editControl.Height = Unit.Pixel(400); editControl.Text = "<p></p>"; // TODO: OmarS need to get rid of this isDHTMLEdit = true; editControl.SetLanguage(CultureInfo.CurrentUICulture.Name); editControl.SetTextDirection(requestPage.ReadingDirection); if (!requestPage.SiteConfig.EnableCrossposts) { gridCrossposts.Visible = false; labelCrosspost.Visible = false; } if (!SiteSecurity.IsValidContributor()) { Response.Redirect("~/FormatPage.aspx?path=SiteConfig/accessdenied.format.html"); } CrosspostInfoCollection crosspostSiteInfo = new CrosspostInfoCollection(); if (!IsPostBack) { foreach (CrosspostSite site in requestPage.SiteConfig.CrosspostSites) { CrosspostInfo ci = new CrosspostInfo(site); ci.TrackingUrlBase = SiteUtilities.GetCrosspostTrackingUrlBase(requestPage.SiteConfig); crosspostSiteInfo.Add(ci); } // set up categories foreach (CategoryCacheEntry category in requestPage.DataService.GetCategories()) { this.categoryList.Items.Add(category.Name); } // get the cultures CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); // setup temp store for listitem items, for sorting List <ListItem> cultureList = new List <ListItem>(cultures.Length); foreach (CultureInfo ci in cultures) { string langName = (ci.NativeName != ci.EnglishName) ? ci.NativeName + " / " + ci.EnglishName : ci.NativeName; if (langName.Length > 55) { langName = langName.Substring(0, 55) + "..."; } cultureList.Add(new ListItem(langName, ci.Name)); } // setup the sort culture string rssCulture = requestPage.SiteConfig.RssLanguage; CultureInfo sortCulture; try { sortCulture = (rssCulture != null && rssCulture.Length > 0 ? new CultureInfo(rssCulture) : CultureInfo.CurrentCulture); } catch (ArgumentException) { // default to the culture of the server sortCulture = CultureInfo.CurrentCulture; } // sort the list cultureList.Sort(delegate(ListItem x, ListItem y) { // actual comparison return(String.Compare(x.Text, y.Text, true, sortCulture)); }); // add to the languages listbox ListItem[] cultureListItems = cultureList.ToArray(); listLanguages.Items.AddRange(cultureListItems); listLanguages.SelectedValue = ""; if (requestPage != null && requestPage.WeblogEntryId != "") { Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] = Request.UrlReferrer; Entry entry = requestPage.DataService.GetEntryForEdit(requestPage.WeblogEntryId); if (entry != null) { CurrentEntry = entry; entryTitle.Text = entry.Title; entryAbstract.Text = entry.Description; textDate.SelectedDate = entry.CreatedLocalTime; if (isDHTMLEdit) { editControl.Text = entry.Content; } foreach (string s in entry.GetSplitCategories()) { categoryList.Items.FindByText(s).Selected = true; } this.checkBoxAllowComments.Checked = entry.AllowComments; this.checkBoxPublish.Checked = entry.IsPublic; this.checkBoxSyndicated.Checked = entry.Syndicated; // GeoRSS. this.txtLat.Text = String.Format(CultureInfo.InvariantCulture, "{0}", entry.Latitude); this.txtLong.Text = String.Format(CultureInfo.InvariantCulture, "{0}", entry.Longitude); if (entry.Attachments.Count > 0) { foreach (Attachment enclosure in entry.Attachments) { enclosure.Url = SiteUtilities.GetEnclosureLinkUrl(requestPage.SiteConfig, entry.EntryId, enclosure); } this.enclosureUpload.Visible = false; this.buttonRemove.Visible = true; this.labelEnclosureName.Visible = true; this.labelEnclosureName.Text = entry.Attachments[0].Name; } listLanguages.SelectedValue = entry.Language == null ? "" : entry.Language; // merge the crosspost config with the crosspost data foreach (CrosspostInfo cpi in crosspostSiteInfo) { foreach (Crosspost cp in entry.Crossposts) { if (cp.ProfileName == cpi.Site.ProfileName) { cpi.IsAlreadyPosted = true; cpi.TargetEntryId = cp.TargetEntryId; cpi.Categories = cp.Categories; break; } } } // if the entry is not public yet but opened for editing, then we can setup autosave. // (If the entry was already published publically and then autosave was used, the // entry's status would change to non-public and then no longer be accessible!) if (requestPage.SiteConfig.EnableAutoSave && !entry.IsPublic) { SetupAutoSave(); } if (requestPage.SiteConfig.EnableGoogleMaps) { AddGoogleMapsApi(); } } } else // This is a brand new entry, so setup the AutoSave script if it's enabled. { if (requestPage.SiteConfig.EnableAutoSave) { SetupAutoSave(); } if (requestPage.SiteConfig.EnableGoogleMaps) { AddGoogleMapsApi(); } txtLat.Text = String.Format(CultureInfo.InvariantCulture, "{0}", siteConfig.DefaultLatitude); txtLong.Text = String.Format(CultureInfo.InvariantCulture, "{0}", siteConfig.DefaultLongitude); } gridCrossposts.DataSource = crosspostSiteInfo; DataBind(); } }
protected void Page_Load(object sender, EventArgs e) { SharedBasePage requestPage = this.Page as SharedBasePage; siteConfig = SiteConfig.GetSiteConfig(); resmgr = ApplicationResourceTable.Get(); imageUpload.Accept = "image/jpeg,image/gif,image/png"; editControl.Width = Unit.Percentage(99d); editControl.Height = Unit.Pixel(400); editControl.Text = "<p></p>"; // TODO: OmarS need to get rid of this isDHTMLEdit = true; editControl.SetLanguage(CultureInfo.CurrentUICulture.Name); editControl.SetTextDirection(requestPage.ReadingDirection); if (!requestPage.SiteConfig.EnableCrossposts) { gridCrossposts.Visible = false; labelCrosspost.Visible = false; } if (!SiteSecurity.IsValidContributor()) { Response.Redirect("~/FormatPage.aspx?path=SiteConfig/accessdenied.format.html"); } CrosspostInfoCollection crosspostSiteInfo = new CrosspostInfoCollection(); if (!IsPostBack) { foreach (CrosspostSite site in requestPage.SiteConfig.CrosspostSites) { CrosspostInfo ci = new CrosspostInfo(site); ci.TrackingUrlBase = SiteUtilities.GetCrosspostTrackingUrlBase(requestPage.SiteConfig); crosspostSiteInfo.Add(ci); } // set up categories foreach (CategoryCacheEntry category in requestPage.DataService.GetCategories()) { this.categoryList.Items.Add(category.Name); } // get the cultures CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); // setup temp store for listitem items, for sorting List<ListItem> cultureList = new List<ListItem>(cultures.Length); foreach (CultureInfo ci in cultures) { string langName = (ci.NativeName != ci.EnglishName) ? ci.NativeName + " / " + ci.EnglishName : ci.NativeName; if (langName.Length > 55) { langName = langName.Substring(0, 55) + "..."; } cultureList.Add( new ListItem(langName, ci.Name)); } // setup the sort culture string rssCulture = requestPage.SiteConfig.RssLanguage; CultureInfo sortCulture; try{ sortCulture = ( rssCulture != null && rssCulture.Length > 0 ? new CultureInfo( rssCulture ) : CultureInfo.CurrentCulture); }catch(ArgumentException){ // default to the culture of the server sortCulture = CultureInfo.CurrentCulture; } // sort the list cultureList.Sort(delegate(ListItem x, ListItem y) { // actual comparison return String.Compare(x.Text, y.Text, true, sortCulture); }); // add to the languages listbox ListItem[] cultureListItems = cultureList.ToArray(); listLanguages.Items.AddRange(cultureListItems); listLanguages.SelectedValue = ""; if (requestPage != null && requestPage.WeblogEntryId != "") { Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] = Request.UrlReferrer; Entry entry = requestPage.DataService.GetEntryForEdit(requestPage.WeblogEntryId); if (entry != null) { CurrentEntry = entry; entryTitle.Text = entry.Title; entryAbstract.Text = entry.Description; textDate.SelectedDate = entry.CreatedLocalTime; if (isDHTMLEdit) { editControl.Text = entry.Content; } foreach (string s in entry.GetSplitCategories()) { categoryList.Items.FindByText(s).Selected = true; } this.checkBoxAllowComments.Checked = entry.AllowComments; this.checkBoxPublish.Checked = entry.IsPublic; this.checkBoxSyndicated.Checked = entry.Syndicated; // GeoRSS. this.txtLat.Text = String.Format(CultureInfo.InvariantCulture, "{0}", entry.Latitude); this.txtLong.Text = String.Format(CultureInfo.InvariantCulture, "{0}", entry.Longitude); if (entry.Attachments.Count > 0) { foreach (Attachment enclosure in entry.Attachments) { enclosure.Url = SiteUtilities.GetEnclosureLinkUrl(requestPage.SiteConfig, entry.EntryId, enclosure); } this.enclosureUpload.Visible = false; this.buttonRemove.Visible = true; this.labelEnclosureName.Visible = true; this.labelEnclosureName.Text = entry.Attachments[0].Name; } listLanguages.SelectedValue = entry.Language == null ? "" : entry.Language; // merge the crosspost config with the crosspost data foreach (CrosspostInfo cpi in crosspostSiteInfo) { foreach (Crosspost cp in entry.Crossposts) { if (cp.ProfileName == cpi.Site.ProfileName) { cpi.IsAlreadyPosted = true; cpi.TargetEntryId = cp.TargetEntryId; cpi.Categories = cp.Categories; break; } } } // if the entry is not public yet but opened for editing, then we can setup autosave. // (If the entry was already published publically and then autosave was used, the // entry's status would change to non-public and then no longer be accessible!) if (requestPage.SiteConfig.EnableAutoSave && !entry.IsPublic) { SetupAutoSave(); } if (requestPage.SiteConfig.EnableGoogleMaps) { AddGoogleMapsApi(); } } } else // This is a brand new entry, so setup the AutoSave script if it's enabled. { if (requestPage.SiteConfig.EnableAutoSave) { SetupAutoSave(); } if (requestPage.SiteConfig.EnableGoogleMaps) { AddGoogleMapsApi(); } txtLat.Text = String.Format(CultureInfo.InvariantCulture, "{0}", siteConfig.DefaultLatitude); txtLong.Text = String.Format(CultureInfo.InvariantCulture, "{0}", siteConfig.DefaultLongitude); } gridCrossposts.DataSource = crosspostSiteInfo; DataBind(); } }
protected void save_Click(object sender, EventArgs e) { SharedBasePage requestPage = this.Page as SharedBasePage; if (SiteSecurity.IsValidContributor()) { //Catch empty posts! if (!editControl.HasText()) { return; } CrosspostInfoCollection crosspostList = new CrosspostInfoCollection(); Entry entry; if (CurrentEntry == null) { entry = new Entry(); entry.Initialize(); } else { entry = CurrentEntry; } //Try a culture specific parse... // TODO: Come up with a shiny javascript datetime picker if (textDate.SelectedDateFormatted.Length > 0) { try { DateTime createdLocalTime = new DateTime(textDate.SelectedDate.Year, textDate.SelectedDate.Month, textDate.SelectedDate.Day, entry.CreatedLocalTime.Hour, entry.CreatedLocalTime.Minute, entry.CreatedLocalTime.Second, entry.CreatedLocalTime.Millisecond); entry.CreatedLocalTime = createdLocalTime; } catch (FormatException fex) { Trace.Write("Bad DateTime string creating new Entry: " + fex.ToString()); } } // see if we need to delete any old Enclosures if (entry.Enclosure != null) { if (this.enclosureUpload.Visible == true && this.buttonRemove.Visible == false) { DeleteEnclosures(); } } // upload the attachment if (enclosureUpload.Value != null && enclosureUpload.Value != String.Empty) { try { long numBytes; string type; string baseFileName; string fileUrl = HandleUpload(enclosureUpload, entry.EntryId, out type, out numBytes, out baseFileName); entry.Attachments.Add(new Attachment(baseFileName, type, numBytes, AttachmentType.Enclosure)); } catch (Exception exc) { ErrorTrace.Trace(TraceLevel.Error, exc); } } entry.Language = listLanguages.SelectedValue == "" ? null : listLanguages.SelectedValue; entry.Title = entryTitle.Text; entry.Description = entryAbstract.Text; entry.Author = requestPage.User.Identity.Name; entry.AllowComments = checkBoxAllowComments.Checked; entry.IsPublic = checkBoxPublish.Checked; entry.Syndicated = checkBoxSyndicated.Checked; // GeoRSS. if (siteConfig.EnableGeoRss) { double latitude, longitude; if (double.TryParse(txtLat.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out latitude)) { entry.Latitude = latitude; } else { entry.Latitude = null; } if (double.TryParse(txtLong.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out longitude)) { entry.Longitude = longitude; } else { entry.Longitude = null; } } if (isDHTMLEdit) { entry.Content = editControl.Text; } // handle categories string categories = ""; StringBuilder sb = new StringBuilder(); bool needSemi = false; foreach (ListItem listItem in categoryList.Items) { if (listItem.Selected) { if (needSemi) { sb.Append(";"); } sb.Append(listItem.Text); needSemi = true; } } categories = sb.ToString(); entry.Categories = categories; // handle crosspostSiteInfo CrosspostInfoCollection crosspostSiteInfo = new CrosspostInfoCollection(); // we need to reload the crosspostinfo as it contains sensitive data like password foreach (CrosspostSite site in requestPage.SiteConfig.CrosspostSites) { CrosspostInfo ci = new CrosspostInfo(site); ci.TrackingUrlBase = SiteUtilities.GetCrosspostTrackingUrlBase(requestPage.SiteConfig); crosspostSiteInfo.Add(ci); } // merge the crosspost config with the crosspost data foreach (CrosspostInfo cpi in crosspostSiteInfo) { foreach (Crosspost cp in entry.Crossposts) { if (cp.ProfileName == cpi.Site.ProfileName) { cpi.IsAlreadyPosted = true; cpi.TargetEntryId = cp.TargetEntryId; cpi.Categories = cp.Categories; break; } } } foreach (DataGridItem item in gridCrossposts.Items) { CheckBox checkSite = item.FindControl("checkSite") as CheckBox; if (checkSite.Checked) { TextBox textSiteCategory = item.FindControl("textSiteCategory") as TextBox; foreach (CrosspostInfo cpi in crosspostSiteInfo) { if (cpi.Site.ProfileName == checkSite.Text) { cpi.Categories = textSiteCategory.Text; crosspostList.Add(cpi); break; } } } } try { // prevent SaveEntry from happenning twice if (crosspostList.Count == 0) { crosspostList = null; } if (CurrentEntry == null) // new entry { SiteUtilities.SaveEntry(entry, this.textTrackback.Text, crosspostList, requestPage.SiteConfig, requestPage.LoggingService, requestPage.DataService); } else // existing entry { SiteUtilities.UpdateEntry(entry, this.textTrackback.Text, crosspostList, requestPage.SiteConfig, requestPage.LoggingService, requestPage.DataService); } } catch (Exception ex) { //SDH: Changed to ex.ToString as the InnerException is often null, which causes another error in this catch! StackTrace st = new StackTrace(); requestPage.LoggingService.AddEvent( new EventDataItem(EventCodes.Error, ex.ToString() + Environment.NewLine + st.ToString(), SiteUtilities.GetPermaLinkUrl(entry))); // if we created a new entry, and there was an error, delete the enclosure folder DeleteEnclosures(); requestPage.Redirect("FormatPage.aspx?path=SiteConfig/pageerror.format.html"); } entryTitle.Text = ""; entryAbstract.Text = ""; categoryList.Items.Clear(); if (Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] != null) { Uri originalReferrer = Session["newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"] as Uri; Session.Remove("newtelligence.DasBlog.Web.EditEntryBox.OriginalReferrer"); Redirect(originalReferrer.AbsoluteUri); } else { Redirect(SiteUtilities.GetAdminPageUrl(requestPage.SiteConfig)); } } }