Current nodeID inside a usercontrol Options
martinbentzen
Posted: Tuesday, February 26, 2008 9:00:20 PM
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
neehouse
Posted: Tuesday, February 26, 2008 9:38:57 PM

Rank: Umbracoholic

Joined: 7/20/2006
Posts: 1,069
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 •
martinbentzen
Posted: Tuesday, February 26, 2008 10:09:50 PM
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
kenny
Posted: Tuesday, February 26, 2008 10:26:10 PM

Rank: Aficionado

Joined: 8/12/2006
Posts: 132
Location: Norway
Code:

Request["id"]


Kenneth Solberg - core dev - level 2 cert pro - my blog
neehouse
Posted: Tuesday, February 26, 2008 10:35:37 PM

Rank: Umbracoholic

Joined: 7/20/2006
Posts: 1,069
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 •
martinbentzen
Posted: Tuesday, February 26, 2008 11:17:47 PM
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
Users browsing this topic
Guest


You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.