Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions /

How do I get all Members from a group into an array?


Reply


5 Posts   3371 Views

Avatar
baba-papa

Community Member, 279 Posts

13 July 2009 at 7:46am

Hi,

this is tricking me for 2 hours now. I can´t find any solution and I´m feeling like an idiot.
For a few weeks I´m tweeking the PrivatMessaging-Module. To send a message, you choose a nickname from a dropdown menu:

//Nicknames of all members is passed into an array
      $members = DataObject::get("Member", "", "Nickname");
      $allMembers = array();
      foreach($members as $member) {
$allMembers[$member->ID] = htmlentities($member->Nickname);
      }
      $me = Member::currentUser();
      return new Form($this, "PostMessageForm", new FieldSet(
         new ReadonlyField("From", _t('PrivateMessagePage.FROM', 'From'), "$me->Nickname"),
         new DropdownField("ToID", _t('PrivateMessagePage.CHOOSERECEIVER', 'Choose receiver:'), $allMembers),
         new TextField("Subject", _t('PrivateMessagePage.SUBJECT', 'Subject')),
         new TextareaField("Body", _t('PrivateMessagePage.TEXT', 'Text'))


The thing is, I want only members from the "forum members" group to appear in that menu. Members and groups have a many many relation. For that reason the group isn´t a class property of a member. The relation between members an groups is saved in an own database table. This means that I can´t use the method DataObject::get() to solve this issue.

I appreciate any help or hint.

Avatar
baba-papa

Community Member, 279 Posts

14 July 2009 at 3:13am

I solved this myself. There is a method inGroup() in the Members.php. It is passed the Code of the Membergroup:

      $members = DataObject::get("Member", "", "Nickname");
      $allMembers = array();
      foreach($members as $member) {
//Only Members of the forum-members group should appear in the $allMembers array
if($member->inGroup("forum-members")){
$allMembers[$member->ID] = htmlentities($member->Nickname);
}
      }

Sometimes it´s so easy ;)

Avatar
Cuba

Community Member, 12 Posts

24 August 2009 at 7:36am

A more "proper" and more efficient way is to do the search in the DB query like so:

DataObject::get("Member","Group_Members.GroupID=2","Created","LEFT JOIN `Group_Members` ON `Member`.`ID` = `Group_Members`.`MemberID` LEFT JOIN `Group` ON `Group`.`ID` = `Group_Members`.`GroupID`");

I choose groupID "2" in this ex, but you get the idea...

Avatar
baba-papa

Community Member, 279 Posts

24 August 2009 at 8:01am

Thanks for Your help, cuba. I´m not that familiar with SQL yet, thats why I avoid working with SQL strings. I will try your idea next time and SQL will be my next subject to study.

Avatar
MonkeyBen

Community Member, 25 Posts

15 June 2011 at 4:00am

I use this method: -

   $group = DataObject::get_one("Group", "Code = 'groupcode'");
   $records = $group->Members();