Source of file CampaignMonitorCustomField.php
Size: 5,255 Bytes - Last Modified: 2021-12-23T10:39:01+00:00
/var/www/docs.ssmods.com/process/src/src/Model/CampaignMonitorCustomField.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | <?php namespace Sunnysideup\CampaignMonitor\Model; use SilverStripe\Forms\CheckboxSetField; use SilverStripe\Forms\DateField; use SilverStripe\Forms\NumericField; use SilverStripe\Forms\OptionsetField; use SilverStripe\Forms\TextField; use SilverStripe\ORM\DataObject; use Sunnysideup\CampaignMonitor\CampaignMonitorSignupPage; /** * @author nicolaas [at] sunnysideup.co.nz * * @description: this represents a sub group of a list, otherwise known as a segment */ class CampaignMonitorCustomField extends DataObject { private static $table_name = 'CampaignMonitorCustomField'; private static $db = [ 'Code' => 'Varchar(64)', 'Title' => 'Varchar(64)', 'Type' => 'Varchar(32)', 'Options' => 'Text', 'Visible' => 'Boolean', 'ListID' => 'Varchar(32)', ]; private static $casting = [ 'Key' => 'Varchar', ]; private static $summary_fields = [ 'Title' => 'Title', 'Type' => 'Type', 'Options' => 'Options', 'Visible.Nice' => 'Visible', ]; private static $indexes = [ 'ListID' => true, 'Code' => true, ]; private static $has_one = [ 'CampaignMonitorSignupPage' => CampaignMonitorSignupPage::class, ]; private static $default_sort = [ 'Visible' => 'DESC', ]; /** * form field matcher between CM and SS CMField => SSField. * * @return array */ private static $field_translator = [ 'MultiSelectOne' => OptionsetField::class, 'Text' => TextField::class, 'Number' => NumericField::class, 'MultiSelectMany' => CheckboxSetField::class, 'Date' => DateField::class, ]; /** * @var array */ private $_fieldTranslator = []; public function getCMSFields() { $fields = parent::getCMSFields(); $readOnlyFields = [ 'Code', 'Title', 'Type', 'Options', 'Visible', 'ListID', ]; foreach ($readOnlyFields as $readOnlyField) { $fields->replaceField( $readOnlyField, $fields->dataFieldByName($readOnlyField)->performReadonlyTransformation() ); } return $fields; } public function canCreate($member = null, $context = []) { return false; } public function canDelete($member = null) { return false; } public function canEdit($member = null, $context = []) { return parent::canEdit(); } public function getKey() { return '[' . $this->Code . ']'; } public function getOptionsAsArray() { return ['' => _t('CampaignMonitor.PLEASE_SELECT', '-- please select --')] + explode(',', $this->Options); } /** * @param mixed $customFieldsObject * @param mixed $listID * * @return CampaignMonitorCustomField */ public static function create_from_campaign_monitor_object($customFieldsObject, $listID) { $filterOptions = [ 'ListID' => $listID, 'Code' => self::key_to_code($customFieldsObject->Key), ]; /** @var null|CampaignMonitorCustomField $obj */ $obj = CampaignMonitorCustomField::get()->filter($filterOptions)->first(); if (! $obj) { $obj = CampaignMonitorCustomField::create($filterOptions); } $page = CampaignMonitorSignupPage::get()->filter(['ListID' => $listID])->first(); if ($page) { $obj->CampaignMonitorSignupPageID = $page->ID; } $obj->ListID = $listID; $obj->Code = self::key_to_code($customFieldsObject->Key); $obj->Title = $customFieldsObject->FieldName; $obj->Type = $customFieldsObject->DataType; $obj->Options = implode(',', $customFieldsObject->FieldOptions); $obj->Visible = $customFieldsObject->VisibleInPreferenceCenter; $obj->write(); return $obj; } /** * @param string $namePrefix * @param string $nameAppendix * @param string $title * @param null|array $options */ public function getFormField($namePrefix = '', $nameAppendix = '', $title = '', $options = null) { //sort out names, title if (! $title) { $title = $this->Title; } $name = $namePrefix . $this->Code . $nameAppendix; //create field if (! count($this->_fieldTranslator)) { $this->_fieldTranslator = $this->Config()->get('field_translator'); } $fieldName = $this->_fieldTranslator[$this->Type]; $field = $fieldName::create($name, $title); //add options if (! $options && $this->Options) { $optionsArray = explode(',', $this->Options); $optionsArray = array_combine($optionsArray, $optionsArray); $field->setSource($optionsArray); } return $field; } protected function onBeforeWrite() { parent::onBeforeWrite(); $this->Code = self::key_to_code($this->Code); } private static function key_to_code($key) { return str_replace(['[', ']'], '', $key); } } |