Jump to:

7935 Posts in 1536 Topics by 943 members

DataObjectManager Module

SilverStripe Forums » DataObjectManager Module » How to choose a list of members to put into "groups"?

Discuss the DataObjectManager module, and the related ImageGallery module.

Moderators: martimiz, UncleCheese, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 1307 Views
  • silk
    Avatar
    Community Member
    18 Posts

    How to choose a list of members to put into "groups"? Link to this post

    Hello,

    this really is a dumb question, but for some reason I cannot figure out how to get it to work.
    My problem:

    My domain provides several majordomo lists. Those have to be configured by mail. Now I want to write something to do it with a module: For each mailing list I want to build up a list of Members to keep track who is part of it. For adding members I want to have a dropdown list of Members to choose from. Sounds like a easy task for the DataObjectManager.

    Unfortunatly I don't get it to work. Right now I have this:

    class MailinglistePage extends Page {
    static $db = array(
    'Description'=>'Text',
    'EMail'=>'Text'
    );
    static $has_one = array('Admin'=>'Member'
    );

    static $many_many = array('MailUser'=>'MailinglistenUser'
    );

    public function getCMSFields()
       {
          $f = parent::getCMSFields();
          $f->addFieldToTab("Root.Content.Mitglieder", new DataObjectManager(
             $this,
             'MailUser',
             'MailinglistenUser',
             array('User' => 'User'),
             'getCMSFields_forPopup'
          ));
          return $f;
       }

    }

    I have added a new class to wrap the Member:

    class MailinglistenUser extends DataObject
    {
       static $db = array (
       );
       
       static $has_one = array (
          'User' => 'Member'
       );
       
       static $belongs_many_many = array(
        'Mailingliste' => 'MailinglistePage'
       );
          
       public function getCMSFields_forPopup()
       {
        $members = DataObject::get("Member");
        $memberList = array();
        foreach($members as $member){
        $memberList[$member->ID] = $member->getName();
        }   
        return new FieldSet(
        new DropdownField('User', 'User', $memberList)
    );
       }
    }

    With this, the cms looks good. Everything looks ready to add new Members to the Mailinglist. Unfortunatly it does not work. When I select a new member it is not inserted correctly and does not show up in the list. This is not surprising as the table MailinglistePage_MailUser stays empty. Only thing what happens is, that table MailinglistenUser each time gets a new entry with default UserID 0.
    My question: Do I approach the problem in a sensible way?
    If yes: What am I doing wrong?
    If no: Any suggestions how to do it better?

  • UncleCheese
    Avatar
    4085 Posts

    Re: How to choose a list of members to put into "groups"? Link to this post

    Without getting too far into it, the first thing I notice is that you're trying to manage a many_many relation with a DataObjectManager object. You need to use ManyManyDataObjectManager.

    Make that change and let me know how you do.

  • silk
    Avatar
    Community Member
    18 Posts

    Re: How to choose a list of members to put into "groups"? Link to this post

    Thank's for helping me.

    I have followed your instructions. Additionally I have simplified my code to some extend:

    class MailinglistenUser extends DataObject
    {
       static $db = array (
        'Name'=>'Text',
        'Vorname'=>'Text',
        'Email'=>'Text'
       );
       
       static $has_one = array (
       
       );
       
       static $belongs_many_many = array(
        'Mailingliste' => 'MailinglistePage'
       );
          
       public function getCMSFields_forPopup()
       {
       
    return new FieldSet(
    new TextField('Name', 'Name'),
    new TextField('Vorname', 'Vorname'),
    new EmailField('Email', 'Email'));
       }
    }

    class MailinglistePage extends Page {
    static $db = array(
    'Description'=>'Text',
    'EMail'=>'Text'
    );
    static $has_one = array('Admin'=>'Member'
    );

    static $many_many = array('MailUser'=>'MailinglistenUser'
    );

    public function getCMSFields()
       {
          $f = parent::getCMSFields();
          $f->addFieldToTab("Root.Content.Mitglieder", new ManyManyDataObjectManager(
             $this,
             'MailUser',
             'MailinglistenUser',
             array('Name' => 'Name',
             'Vorname'=>'Vorname',
             'Email'=>'Email'         
             ),
             'getCMSFields_forPopup'
          ));
          return $f;
       }
    }

    Now I can add MailinglistenUser and they show up in the cms. They are showing up in *all* MailinglistPages, though.
    In the database the new User is created in the table MailinglistenUser, but the table MailinglistePage_MailUser is empty.

  • UncleCheese
    Avatar
    4085 Posts

    Re: How to choose a list of members to put into "groups"? Link to this post

    Yeah, the way a MMDOM works is that every table will give you a global view of all the records, and you check off which ones are associated with the page using the checkbox in the right column.

  • silk
    Avatar
    Community Member
    18 Posts

    Re: How to choose a list of members to put into "groups"? Link to this post

    Oh, it already worked..
    Thank's!

    1307 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.