public function getCMSFields()
 {
     $fields = parent::getCMSFields();
     // Remove MCListSegment GridField Tab And Manually Manage
     $fields->removeByName("MCListSegments");
     // Manually Manage Creation of MCListSegments Based on Selected MCLists
     if (empty($this->owner->ID)) {
         $lists = new DataList("MCList");
         if ($lists->count() > 1) {
             $fields->addFieldToTab('Root.Main', new LiteralField('_AffectedMCListsTitle', '<h2>Affected MailChimp Lists</h2>'));
             $map = $lists->map("ID", "Name");
             $listIDs = new CheckboxSetField('_AffectedMCListIDs', 'Which MailChimp List(s) Does This Event Relate To', $map);
             $listIDs->setDefaultItems(array_keys($map->toArray()));
         } else {
             if ($lists->count() == 1) {
                 $listIDs = new HiddenField('_AffectedMCListIDs', 'Which MailChimp List(s) Does This Event Relate To', $lists->first()->ID);
             } else {
                 $listIDs = new HiddenField('_AffectedMCListIDs', 'Which MailChimp List(s) Does This Event Relate To', 0);
             }
         }
         $fields->addFieldToTab('Root.Main', $listIDs);
     }
     // Configure Attendees Gridfield
     $gf = $fields->fieldByName('Root.Attendees.Attendees');
     if (is_object($gf) && $gf->exists()) {
         $gf->setList($this->getMyManyManyComponents('Attendees'));
         $config = $gf->getConfig();
         $config->removeComponentsByType('GridfieldAddNewButton');
     }
     return $fields;
 }
 public function getCMSFields()
 {
     $fields = parent::getCMSFields();
     // Validate The Fact That an Actual E-mail Has Been Used
     $fields->replaceField("Email", new EmailField("Email", "Email"));
     $fields->removeByName('DoubleOptIn');
     $fields->removeByName('MCMemberID');
     $fields->removeByName('MCListID');
     $fields->removeByName('MemberID');
     if (empty($this->ID)) {
         $fields->removeByName('Subscribed');
     }
     if (empty($this->UnsubscribeReason)) {
         $fields->removeByName('UnsubscribeReason');
     }
     $lists = new DataList("MCList");
     $lists->sort("\"MCList\".\"Name\" ASC");
     $map = $lists->map("ID", "Name");
     $mcListID = new DropdownField('MCListID', 'MailChimp List', $map);
     // Calculate What Parent Object We Are Adding This Subscription record Under (A Specific MCList or A Member)
     $params = Director::get_current_page()->getURLParams();
     $FormParentObject = end($params);
     // If Already Set Don't Allow It To Be Modified
     if (!empty($this->MCListID)) {
         $mcListID = $mcListID->performReadonlyTransformation();
     }
     // If Already Set And Read Only Or If Unset But Adding Subscription Record Under Member Object Show The MCListID Filed
     if (!empty($this->MCListID) || $FormParentObject == "Members") {
         $fields->addFieldToTab('Root.Main', $mcListID);
     }
     $MCMemberID = new TextField('MCMemberID', 'MailChimp Member ID');
     $MCMemberID = $MCMemberID->performReadonlyTransformation();
     $MCEmailID = new TextField('MCEmailID', 'MailChimp Email ID');
     $MCEmailID = $MCEmailID->performReadonlyTransformation();
     $fields->addFieldToTab('Root.Main', $MCMemberID, 'FirstName');
     $fields->addFieldToTab('Root.Main', $MCEmailID, 'FirstName');
     return $fields;
 }
 private function getListboxOptions($o)
 {
     $list = new DataList($o);
     return array('' => '') + $list->map()->toArray();
 }
 /**
  * Excluded products that can not be purchased
  * We all make a record of all the products that are in the current list
  * For efficiency sake, we do both these things at the same time.
  * IMPORTANT: Adjusts allProducts and returns it...
  * @todo: cache data per user ....
  * @return DataList
  */
 protected function removeExcludedProductsAndSaveIncludedProducts()
 {
     if (is_array($this->canBePurchasedArray) && is_array($this->canNOTbePurchasedArray)) {
         //already done!
     } else {
         $this->canNOTbePurchasedArray = array();
         $this->canBePurchasedArray = array();
         if ($this->config()->get("actively_check_for_can_purchase")) {
             foreach ($this->allProducts as $buyable) {
                 if (!$buyable->canPurchase()) {
                     $this->canNOTbePurchasedArray[$buyable->ID] = $buyable->ID;
                 } else {
                     $this->canBePurchasedArray[$buyable->ID] = $buyable->ID;
                 }
             }
         } else {
             if ($this->rawCount > 0) {
                 $this->canBePurchasedArray = $this->allProducts->map("ID", "ID")->toArray();
             } else {
                 $this->canBePurchasedArray = array();
             }
         }
         if (count($this->canNOTbePurchasedArray)) {
             $this->allProducts = $this->allProducts->Exclude(array("ID" => $this->canNOTbePurchasedArray));
         }
     }
     return $this->allProducts;
 }