public function __construct($name, $title = null, $value = null, $form = null) { // Create a callable function that returns an array of options for the DependentDropdownField. // When the value of the field it depends on changes, this function is called passing the // updated value as the first parameter ($val) $getanchors = function ($page_id) { // Copied from HtmlEditorField_Toolbar::getanchors() if (($page = Page::get()->byID($page_id)) && !empty($page)) { // if (!$page->canView()) { /* ERROR? */ } // Similar to the regex found in HtmlEditorField.js / getAnchors method. if (preg_match_all("/\\s(name|id)=\"([^\"]+?)\"|\\s(name|id)='([^']+?)'/im", $page->Content, $matches)) { // var_dump(array_filter(array_merge($matches[2], $matches[4]))); $anchors = array_filter(array_merge($matches[2], $matches[4])); return array_combine($anchors, $anchors); } } }; // naming with underscores to prevent values from actually being saved somewhere $this->fieldCustomURL = new TextField("{$name}[CustomURL]", '', '', 300, $form); $this->fieldShortcode = new TextField("{$name}[Shortcode]", '', '', 300, $form); $this->fieldPageID = new TreeDropdownField("{$name}[PageID]", '', 'SiteTree', 'ID', 'MenuTitle'); $this->fieldPageID->setForm($form); // $this->fieldPageAnchor = new DropdownField("{$name}[PageAnchor]", 'Anchor:',array(), '', $form); // The DependentDropdownField, setting the source as the callable function // and setting the field it depends on to the appropriate field $this->fieldPageAnchor = DependentDropdownField::create("{$name}[PageAnchor]", 'Text-anchor:', $getanchors, $form)->setEmptyString('Page anchor: (none)')->setDepends($this->fieldPageID); $this->fieldFileID = new TreeDropdownField("{$name}[FileID]", '', 'File', 'ID', 'Name'); $this->fieldFileID->addExtraClass('filetree'); $this->fieldFileID->setForm($form); $this->fieldTitle = new TextField("{$name}[Title]", 'Title: ', '', 300, $form); $this->fieldLinkmode = new DropdownField("{$name}[Linkmode]", 'Type: ', array('Page' => 'Page', 'URL' => 'URL', 'File' => 'File', 'Email' => 'Email', 'Shortcode' => 'Shortcode'), '', $form); $this->fieldLinkmode->addExtraClass('LinkModePicker'); parent::__construct($name, $title, $value, $form); }
public function getCMSFields() { $fields = parent::getCMSFields(); $monthArray = array(); for ($i = 1; $i <= 12; $i++) { $monthArray[$i] = date('F', mktime(0, 0, 0, $i)); } $yearArray = array(); $currentYear = date('Y'); for ($i = 0; $i <= 10; $i++) { $yearArray[$currentYear + $i] = $currentYear + $i; } // callback function $memberDataSource = function ($keyword) { return Member::get()->where("FirstName like '%{$keyword}%' OR Surname like '%{$keyword}%'")->map('ID', 'Name')->toArray(); }; if ($this->ID) { // Format and hide the credit card number $creditCardMask = $this->maskCreditCardNumber(); $fields->addFieldToTab('Root.Main', new ReadonlyField('CreditCardMask', 'Credit Card Number', $creditCardMask), 'CreditCardNumber'); $fields->replaceField('CreditCardNumber', new HiddenField('CreditCardNumber', $this->CreditCardNumber)); $fields->replaceField('CreditCardCVV', new PasswordField('CreditCardCVV', 'Credit Card CVV', $this->CreditCardCVV)); $fields->replaceField('Country', new CountryDropdownField('Country')); $fields->replaceField('MemberID', new HiddenField('MemberID')); $fields->replaceField('ISCCID', new HiddenField('ISCCID')); $fields->replaceField('ExpiryMonth', new DropdownField('ExpiryMonth', 'Expiry Month', $monthArray, $this->ExpiryMonth)); $fields->replaceField('ExpiryYear', new DropdownField('ExpiryYear', 'Expiry Year', $yearArray, $this->ExpiryYear)); } else { $fields->addFieldToTab("Root.Main", new TextField('Keyword', 'Enter a keyword to search a member'), 'MemberID'); $keyword = $fields->dataFieldByName('Keyword'); $memberId = DependentDropdownField::create('MemberID', 'Member', $memberDataSource)->setDepends($keyword)->setEmptyString('(Select a member)'); $fields->replaceField('MemberID', $memberId); $fields->removeByName('ISCCID'); $fields->replaceField('CreditCardCVV', new PasswordField('CreditCardCVV', 'Credit Card CVV')); $fields->replaceField('ExpiryMonth', new DropdownField('ExpiryMonth', 'Expiry Month', $monthArray)); $fields->replaceField('ExpiryYear', new DropdownField('ExpiryYear', 'Expiry Year', $yearArray)); $fields->replaceField('Country', new CountryDropdownField('Country')); } return $fields; }
public function getCMSFields() { // callback function $dataSource = function ($memberId) { $member = Member::get()->byID($memberId); // Get the Page controller $Page_Ctrl = new Page_Controller(); $subscription = $Page_Ctrl->getCurrentSubscription($memberId); if ($subscription) { switch ($subscription->ProductID) { case 1: $productArray = array(4); break; case 2: $productArray = array(5); break; case 3: $productArray = array(6); break; } } else { $productArray = array(1, 2, 3, 7); } return Product::get()->filter(array('ID' => $productArray))->map('ID', 'Name')->toArray(); }; // callback function $memberDataSource = function ($keyword) { return Member::get()->where("FirstName like '%{$keyword}%' OR Surname like '%{$keyword}%'")->map('ID', 'Name')->toArray(); }; $fields = parent::getCMSFields(); if ($this->ID) { $fields->replaceField('SubscriptionID', new ReadonlyField('SubscriptionID')); $fields->replaceField('StartDate', new ReadonlyField('StartDate')); $fields->replaceField('ExpireDate', new ReadonlyField('ExpireDate')); $fields->replaceField('Status', new ReadonlyField('Status')); $fields->replaceField('IsTrial', new ReadonlyField('IsTrial')); $fields->replaceField('SubscriptionCount', new ReadonlyField('SubscriptionCount')); $fields->replaceField('MemberID', new ReadonlyField('MemberID')); if (!$this->Status) { $fields->replaceField('ProductID', new ReadonlyField('ProductID')); $fields->replaceField('ReasonCancelled', new ReadonlyField('ReasonCancelled')); } $fields->replaceField('OrderID', new ReadonlyField('OrderID')); } if ($this->ID && $this->Status) { $products = $fields->dataFieldByName('ProductID'); $products->setDisabledItems(array(4, 5, 6, 7, 10)); $fields->replaceField('MemberID', new HiddenField('MemberID', $this->MemberID)); $reasons = array("I didn't use the product as much as I anticipated" => "I didn't use the product as much as I anticipated", "The cost was too high" => "The cost was too high", "I had technical problems generating heatmaps" => "I had technical problems generating heatmaps", "I have changed jobs/careers" => "I have changed jobs/careers", "I had problems with customer service" => "I had problems with customer service", "I didn't find the heatmaps helpful" => "I didn't find the heatmaps helpful", "Other (you may contact us support@attentionwizard.com with additional feedback)" => "Other (you may contact us support@attentionwizard.com with additional feedback)"); $fields->replaceField('ReasonCancelled', new CheckboxSetField('ReasonCancelled', 'Reason Cancelled', $reasons)); } if (!$this->ID) { $fields->addFieldToTab("Root.Main", new TextField('Keyword', 'Enter a keyword to search a member'), 'MemberID'); $keyword = $fields->dataFieldByName('Keyword'); $memberId = DependentDropdownField::create('MemberID', 'Member', $memberDataSource)->setDepends($keyword)->setEmptyString('(Select a member)'); $fields->replaceField('MemberID', $memberId); $members = $fields->dataFieldByName('MemberID'); $products = DependentDropdownField::create('ProductID', 'Product', $dataSource)->setDepends($members)->setEmptyString('(Select a product)'); $fields->replaceField('ProductID', $products); $fields->removeByName('Status'); $fields->removeByName('SubscriptionID'); $fields->removeByName('StartDate'); $fields->removeByName('ExpireDate'); $fields->removeByName('IsTrial'); $fields->removeByName('SubscriptionCount'); $fields->removeByName('ReasonCancelled'); $fields->removeByName('OrderID'); $fields->addFieldToTab("Root.Main", new TextField('Quantity', 'Quantity(Required if Prepaid)')); } return $fields; }