Fix by Tom Witherington - U4-1167 tags not saving or deleting in Tags data type
Also cleaned up the usage of obsolete method calls
This commit is contained in:
@@ -3,21 +3,20 @@ using System.Collections;
|
||||
using System.Linq;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using umbraco.BusinessLogic;
|
||||
using ClientDependency.Core.Controls;
|
||||
using ClientDependency.Core;
|
||||
using umbraco.presentation;
|
||||
using umbraco.interfaces;
|
||||
|
||||
namespace umbraco.editorControls.tags
|
||||
{
|
||||
public class DataEditor : System.Web.UI.UpdatePanel, umbraco.interfaces.IDataEditor, umbraco.interfaces.IUseTags
|
||||
public class DataEditor : TextBox, IDataEditor, IUseTags
|
||||
{
|
||||
#region IDataEditor Members
|
||||
|
||||
cms.businesslogic.datatype.DefaultData _data;
|
||||
string _group = "";
|
||||
private readonly cms.businesslogic.datatype.DefaultData _data;
|
||||
readonly string _group = "";
|
||||
|
||||
public DataEditor(umbraco.interfaces.IData Data, SortedList Prevalues)
|
||||
public DataEditor(IData Data, SortedList Prevalues)
|
||||
{
|
||||
_data = (cms.businesslogic.datatype.DefaultData)Data;
|
||||
|
||||
@@ -25,41 +24,22 @@ namespace umbraco.editorControls.tags
|
||||
_group = Prevalues["group"].ToString();
|
||||
}
|
||||
|
||||
public TextBox tagBox = new TextBox();
|
||||
|
||||
|
||||
public Control Editor { get { return this; } }
|
||||
|
||||
public void Save()
|
||||
{
|
||||
int _nodeID;
|
||||
int.TryParse(_data.NodeId.ToString(), out _nodeID);
|
||||
string allTags = "";
|
||||
int nodeId = _data.NodeId;
|
||||
|
||||
//first clear out all items associated with this ID...
|
||||
umbraco.cms.businesslogic.Tags.Tag.RemoveTagsFromNode(_nodeID, _group);
|
||||
cms.businesslogic.Tags.Tag.RemoveTagsFromNode(nodeId, _group);
|
||||
|
||||
var items = tagBox.Text.Trim().Split(',');
|
||||
foreach (var item in items)
|
||||
{
|
||||
var tagName = item.Trim();
|
||||
if(string.IsNullOrEmpty(tagName))
|
||||
continue;
|
||||
|
||||
var tagId = cms.businesslogic.Tags.Tag.GetTagId(tagName, _group);
|
||||
if(tagId == 0)
|
||||
tagId = cms.businesslogic.Tags.Tag.AddTag(tagName, _group);
|
||||
|
||||
if (tagId > 0)
|
||||
{
|
||||
umbraco.cms.businesslogic.Tags.Tag.AssociateTagToNode(_nodeID, tagId);
|
||||
}
|
||||
}
|
||||
UpdateOrAddTags(nodeId);
|
||||
|
||||
//and just in case, we'll save the tags as plain text on the node itself...
|
||||
_data.Value = tagBox.Text;
|
||||
_data.Value = this.Text;
|
||||
}
|
||||
|
||||
|
||||
public bool ShowLabel
|
||||
{
|
||||
get { return true; }
|
||||
@@ -74,35 +54,54 @@ namespace umbraco.editorControls.tags
|
||||
[Obsolete("use the umbraco.cms.businesslogic.Tags.Tag class instead")]
|
||||
public int getTagId(string tag, string group)
|
||||
{
|
||||
return umbraco.cms.businesslogic.Tags.Tag.GetTagId(tag, group);
|
||||
return cms.businesslogic.Tags.Tag.GetTagId(tag, group);
|
||||
}
|
||||
|
||||
|
||||
protected override void OnInit(EventArgs e)
|
||||
{
|
||||
base.OnInit(e);
|
||||
|
||||
//ClientDependencyLoader.Instance.RegisterDependency("Application/JQuery/jquery.autocomplete.js", "UmbracoClient", ClientDependencyType.Javascript);
|
||||
// register all dependencies - only registered once
|
||||
ClientDependencyLoader.Instance.RegisterDependency("ui/ui-lightness/jquery-ui.custom.css", "UmbracoClient", ClientDependencyType.Css);
|
||||
ClientDependencyLoader.Instance.RegisterDependency("css/umbracoGui.css", "UmbracoRoot", ClientDependencyType.Css);
|
||||
|
||||
ClientDependencyLoader.Instance.RegisterDependency("tags/css/jquery.tagsinput.css", "UmbracoClient", ClientDependencyType.Css);
|
||||
ClientDependencyLoader.Instance.RegisterDependency("tags/js/jquery.tagsinput.min.js", "UmbracoClient", ClientDependencyType.Javascript);
|
||||
|
||||
|
||||
string _alias = ((umbraco.cms.businesslogic.datatype.DefaultData)_data).PropertyId.ToString();
|
||||
var pageId = GetPageId();
|
||||
if (!Page.IsPostBack && !String.IsNullOrEmpty(pageId) && string.IsNullOrWhiteSpace(this.Text))
|
||||
{
|
||||
var tags = cms.businesslogic.Tags.Tag.GetTags(int.Parse(pageId), _group);
|
||||
this.Text = string.Join(",", tags.Select(x => x.TagCaption));
|
||||
}
|
||||
|
||||
//making sure that we have a ID for context
|
||||
string pageId = UmbracoContext.Current.Request["id"];
|
||||
var tagsAutoCompleteScript = TagsAutocompleteScript(pageId);
|
||||
var tagsAutoCompleteInitScript = string.Format("jQuery(document).ready(function(){{{0}}});", tagsAutoCompleteScript);
|
||||
|
||||
if (pageId != null) pageId = pageId.Trim();
|
||||
// register it as a startup script
|
||||
Page.ClientScript.RegisterStartupScript(GetType(), ClientID + "_tagsinit", tagsAutoCompleteInitScript, true);
|
||||
}
|
||||
|
||||
private string TagsAutocompleteScript(string pageId)
|
||||
{
|
||||
var tagsAutoCompleteScript = string.Format("jQuery('#{0}').tagsInput({{ width: '400px', defaultText: 'Add a tag', minChars: 2, autocomplete_url: '{1}/webservices/TagsAutoCompleteHandler.ashx?group={2}&id={3}&rnd={4}&format=json' }});",
|
||||
this.ClientID,
|
||||
Umbraco.Core.IO.IOHelper.ResolveUrl(Umbraco.Core.IO.SystemDirectories.Umbraco),
|
||||
_group,
|
||||
pageId,
|
||||
DateTime.Now.Ticks);
|
||||
|
||||
return tagsAutoCompleteScript;
|
||||
}
|
||||
|
||||
private static string GetPageId()
|
||||
{
|
||||
var pageId = Umbraco.Web.UmbracoContext.Current.HttpContext.Request["id"];
|
||||
if (string.IsNullOrEmpty(pageId))
|
||||
{
|
||||
// we need an empty try/catch as Node.GetCurrent() will throw an exception if we're outside of Umbraco Context
|
||||
try
|
||||
{
|
||||
NodeFactory.Node currentNode = NodeFactory.Node.GetCurrent();
|
||||
var currentNode = NodeFactory.Node.GetCurrent();
|
||||
if (currentNode != null)
|
||||
{
|
||||
pageId = currentNode.Id.ToString();
|
||||
@@ -112,38 +111,28 @@ namespace umbraco.editorControls.tags
|
||||
{
|
||||
}
|
||||
}
|
||||
if (pageId != null) pageId = pageId.Trim();
|
||||
return pageId;
|
||||
}
|
||||
|
||||
tagBox.ID = "tagBox2_" + _alias;
|
||||
tagBox.CssClass = "umbEditorTextField umbTagBox";
|
||||
|
||||
if (!String.IsNullOrEmpty(pageId))
|
||||
private void UpdateOrAddTags(int nodeId)
|
||||
{
|
||||
var items = this.Text.Trim().Split(',');
|
||||
foreach (var item in items)
|
||||
{
|
||||
var tags = umbraco.cms.businesslogic.Tags.Tag.GetTags(int.Parse(pageId), _group);
|
||||
var tagName = item.Trim();
|
||||
if (string.IsNullOrEmpty(tagName))
|
||||
continue;
|
||||
|
||||
tagBox.Text = string.Join(",", tags.Select(x => x.TagCaption));
|
||||
var tagId = cms.businesslogic.Tags.Tag.GetTagId(tagName, _group);
|
||||
if (tagId == 0)
|
||||
tagId = cms.businesslogic.Tags.Tag.AddTag(tagName, _group);
|
||||
|
||||
if (tagId > 0)
|
||||
{
|
||||
cms.businesslogic.Tags.Tag.AssociateTagToNode(nodeId, tagId);
|
||||
}
|
||||
}
|
||||
|
||||
this.ContentTemplateContainer.Controls.Add(tagBox);
|
||||
|
||||
string tagsAutoCompleteScript =
|
||||
"jQuery('#" + tagBox.ClientID + "').tagsInput({ width: '400px', defaultText: 'Add a tag', minChars: 2, autocomplete_url: '" +
|
||||
umbraco.IO.IOHelper.ResolveUrl(umbraco.IO.SystemDirectories.Umbraco)
|
||||
+ "/webservices/TagsAutoCompleteHandler.ashx?group=" + _group + "&id=" + pageId + "&rnd=" +
|
||||
DateTime.Now.Ticks + "&format=json' });";
|
||||
|
||||
|
||||
string tagsAutoCompleteInitScript =
|
||||
"jQuery(document).ready(function(){"
|
||||
+ tagsAutoCompleteScript
|
||||
+ "});";
|
||||
|
||||
Page.ClientScript.RegisterStartupScript(GetType(), ClientID + "_tagsinit", tagsAutoCompleteInitScript, true);
|
||||
|
||||
if (Page.IsPostBack)
|
||||
{
|
||||
ScriptManager.RegisterClientScriptBlock(this, GetType(), ClientID + "_tags", tagsAutoCompleteScript, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -155,50 +144,35 @@ namespace umbraco.editorControls.tags
|
||||
get { return _group; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IUseTags Members
|
||||
|
||||
|
||||
public void RemoveTag(int nodeId, string tag)
|
||||
{
|
||||
library.RemoveTagFromNode(nodeId, tag, _group);
|
||||
cms.businesslogic.Tags.Tag.RemoveTagFromNode(nodeId, tag, _group);
|
||||
}
|
||||
|
||||
public System.Collections.Generic.List<umbraco.interfaces.ITag> GetTagsFromNode(int nodeId)
|
||||
public System.Collections.Generic.List<ITag> GetTagsFromNode(int nodeId)
|
||||
{
|
||||
return library.GetTagsFromNodeAsITags(nodeId);
|
||||
return cms.businesslogic.Tags.Tag.GetTags(nodeId).Cast<ITag>().ToList();
|
||||
}
|
||||
|
||||
public System.Collections.Generic.List<umbraco.interfaces.ITag> GetAllTags()
|
||||
public System.Collections.Generic.List<ITag> GetAllTags()
|
||||
{
|
||||
return library.GetTagsFromGroupAsITags(_group);
|
||||
return cms.businesslogic.Tags.Tag.GetTags(_group).Cast<ITag>().ToList();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IUseTags Members
|
||||
|
||||
|
||||
public void AddTag(string tag)
|
||||
{
|
||||
library.AddTag(tag, _group);
|
||||
cms.businesslogic.Tags.Tag.AddTag(tag, _group);
|
||||
}
|
||||
|
||||
public void AddTagToNode(int nodeId, string tag)
|
||||
{
|
||||
library.addTagsToNode(nodeId, tag, _group);
|
||||
cms.businesslogic.Tags.Tag.AddTagsToNode(nodeId, tag, _group);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IUseTags Members
|
||||
|
||||
|
||||
public void RemoveTagsFromNode(int nodeId)
|
||||
{
|
||||
foreach (umbraco.interfaces.ITag t in library.GetTagsFromNodeAsITags(nodeId))
|
||||
library.RemoveTagFromNode(nodeId, t.TagCaption, t.Group);
|
||||
foreach (var tag in cms.businesslogic.Tags.Tag.GetTags(nodeId).Cast<ITag>().ToList())
|
||||
cms.businesslogic.Tags.Tag.RemoveTagFromNode(nodeId, tag.TagCaption, tag.Group);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user