|
|
Rank: Devotee
Joined: 7/20/2006 Posts: 48 Location: Copenhagen, Denmark
|
I'm creating a usercontrol and use it with the "Usercontrol Wrapper". Some of functionality in the control is to create a new membergroup and add members to it. But I dont want to expose all members in the system for the user - only those who allready has access to the page where the usercontrol is placed. I use Code:_availableMemberGroups = umbraco.cms.businesslogic.web.Access.GetAccessingGroups(_nodeID) but my problem is, that I dont know the nodeID of the page where the control is placed. Hope my issue is clear enough. /Martin Udblog.dk
|
|
 Rank: Umbracoholic
Joined: 7/20/2006 Posts: 1,038 Location: Charleston, West Virginia, United States
|
Martin You can pass the page id via [#pageId] in a macro property, and expose a public property in your user control to the same alias as the macro field. umbraco automatically links the two up, and passes the parameters. Another option is to use the umbraco.library.GetXmlNodeCurrent() and access the page's properties that way. Case [I hope I got that right - :P]
• 2007/2008 MVP • 2008/2009 MVP • Core Developer • Certified Professional Level I & II •
|
|
Rank: Devotee
Joined: 7/20/2006 Posts: 48 Location: Copenhagen, Denmark
|
Casey, Thanks for you reply! But I dont think I can do it the way you describe. I want to use my usercontrol as a datatype, to store a property to a document (and also do some other logic). I have then created the datatype as a "Usercontrol Wrapper". But besides the public value property of the "IUsercontrolDataEditor" interface, I cant see other references to Umbraco - neither how I can get use of the [#pageID] as you mention, as I dont use it in a macro. I've allreday tried to use "umbraco.library.GetXmlNodeCurrent()", but it doesn't return anything usable. Maybe because it is used inside a usercontrol? Here are my very-early-stage code... Imaginge there is an .ascx file also with 2 listbox controls. Look around line 35: Code:using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using umbraco.cms.businesslogic.member; using umbraco.cms.businesslogic.web;
namespace memberGroup { public partial class memberGroup : System.Web.UI.UserControl, umbraco.editorControls.userControlGrapper.IUsercontrolDataEditor { private umbraco.cms.businesslogic.member.MemberGroup[] _availableMemberGroups; private ArrayList _availableMembers = null; private ArrayList _selectedMembers = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { _availableMembers = new ArrayList(); _selectedMembers = new ArrayList(); UniqueAvailableMembers(); PopulateControls(); } }
private void UniqueAvailableMembers() { _availableMemberGroups = umbraco.cms.businesslogic.web.Access.GetAccessingGroups(3733); //_availableMemberGroups = umbraco.cms.businesslogic.member.MemberGroup.GetAll;
umbraco.cms.businesslogic.member.Member[] allMembers = umbraco.cms.businesslogic.member.Member.GetAll; foreach (umbraco.cms.businesslogic.member.MemberGroup _availableMemberGroup in _availableMemberGroups) foreach (Member m in allMembers) if (m.Groups.ContainsKey(_availableMemberGroup.Id) && !_availableMembers.Contains(m)) _availableMembers.Add(m); }
private void PopulateControls() { lstAvailableMembers.DataSource = _availableMembers; lstAvailableMembers.DataTextField = "LoginName"; lstAvailableMembers.DataValueField = "Id"; lstAvailableMembers.DataBind(); }
private void getDataFromSelected() { _selectedMembers = new ArrayList(); foreach (ListItem li in lstSelectedMembers.Items) { Member m = new Member(int.Parse(li.Value)); _selectedMembers.Add(m); } }
protected void btnAdd_Click(object sender, EventArgs e) { lstSelectedMembers.Items.Add(lstAvailableMembers.SelectedItem); lstAvailableMembers.Items.Remove(lstAvailableMembers.SelectedItem); }
protected void btnRemove_Click(object sender, EventArgs e) { lstSelectedMembers.Items.Remove(lstSelectedMembers.SelectedItem); lstAvailableMembers.Items.Add(lstSelectedMembers.SelectedItem); }
#region IUsercontrolDataEditor Members public object value { get { umbraco.cms.businesslogic.member.MemberGroup g; try { // create memberGroup if not exist g = umbraco.cms.businesslogic.member.MemberGroup.MakeNew(txtMemberGroupName.Text,new umbraco.BusinessLogic.User(-1)); } catch {}
// some check stuff is needed here... g = umbraco.cms.businesslogic.member.MemberGroup.GetByName(txtMemberGroupName.Text); getDataFromSelected(); // add selected members to group foreach (object member in _selectedMembers) { Member selMember = (Member)member; selMember.AddGroup(g.Id); } return txtMemberGroupName.Text; } set { txtMemberGroupName.Text = value.ToString(); } } #endregion
}
} Martin Udblog.dk
|
|
 Rank: Aficionado
Joined: 8/12/2006 Posts: 129 Location: Norway
|
Kenneth Solberg - core dev - level 2 cert pro - my blog
|
|
 Rank: Umbracoholic
Joined: 7/20/2006 Posts: 1,038 Location: Charleston, West Virginia, United States
|
My miss-understanding.. (guess it helps to read rather than scan posts).. Kenneth hit it on the head!
• 2007/2008 MVP • 2008/2009 MVP • Core Developer • Certified Professional Level I & II •
|
|
Rank: Devotee
Joined: 7/20/2006 Posts: 48 Location: Copenhagen, Denmark
|
Casey and Kenneth, You both get the credits... First - I have to apologise - umbraco.library.GetXmlNodeCurrent() do the job when you are on the frontend (I used the function in a bad way when I tried earlier.) I cant use that function when I'm in the backend, so I then have to use request["id"]. Thank you very much! /Martin Udblog.dk
|
|
|
Guest |