SilverStripe Extend Members

SilverStripe Extend Members fields and add to Security

The code example below adds three additional fields to the Members class by extending using custom MyMembers class. It also makes the additional fields searchable with the Search ... Filter button functionality.

/mysite/_config.php:

DataObject::add_extension('Member', 'MyMember');

/mysite/code/MyMember.php:

class MyMember extends DataObjectDecorator {
        //        ::
        //        ::
    function extraStatics() {
        return array(
            'db' => array(
                'MembershipExpiresOn' => 'Date',        
                'BusinessName' => 'Varchar(255)',
                'BusinessPremiumExpiresOn' => 'Date',        
                    //        ::
                    //        ::
            ),
            'many_many' => array(
                    //        ::
            ),
            'has_one' => array(
                    //        ::
            ),
            /*** Make entries searchable using a filter ***/
            'searchable_fields' => array(
                'BusinessName',
                'MembershipExpiresOn',
                'BusinessPremiumExpiresOn',                
            )                
        );
    }
    
    /*** Include additions in Security CMS admin ***/
    function updateSummaryFields(Fieldset &$fields) {
        $fields['BusinessName'] = 'BusinessName';
        $fields['IsMembershipExpired'] = 'Membership (Renewal date)';
        $fields['IsBusinessPremiumExpired'] = 'Business Premium (Renewal date)';
    }
    
    /*** Manipulate information before inclusion ***/
    function IsBusinessPremiumExpired() {
        $yn = (strtotime($this->owner->BusinessPremiumExpiresOn) >= mktime())?'Yes':'No';
        return  $yn . ' (' . $this->owner->BusinessPremiumExpiresOn . ')';
    }    
    
    function IsMembershipExpired() {
        $yn = (strtotime($this->owner->MembershipExpiresOn) >= mktime())?'Yes':'No';
        return  $yn . ' (' . $this->owner->MembershipExpiresOn . ')';
    }    
    
    public function getCMSFields() {
        $fields = parent::getCMSFields();
       $this->extend('updateCMSFields', $fields);
       return $fields;
    }

    public function updateCMSFields(&$fields) {
        $fields->addFieldToTab("Root.Main", $dateField = new DatetimeField('MembershipExpiresOn','Membership Expires On'), 'MemberDetailsHeader');    
        $dateField->getDateField()->setConfig('showcalendar', true);
        $dateField->getTimeField()->setConfig('showdropdown', true);

                    //        ::
                    //        ::

        $fields->addFieldToTab("Root.Business", new HiddenField('BusinessPremium'));    

        $fields->addFieldToTab("Root.Business", $dateField2 = new DatetimeField('BusinessPremiumExpiresOn','Business Premium Expires On'));    
        $dateField2->getDateField()->setConfig('showcalendar', true);
        $dateField2->getTimeField()->setConfig('showdropdown', true);

                    //        ::
                    //        ::

    return $fields;
  }
}