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   3334 Views

Avatar
baba-papa

13 July 2009 at 7:46am Community Member, 279 Posts

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

14 July 2009 at 3:13am Community Member, 279 Posts

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

24 August 2009 at 7:36am Community Member, 12 Posts

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

24 August 2009 at 8:01am Community Member, 279 Posts

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

15 June 2011 at 4:00am Community Member, 25 Posts

I use this method: -

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