Source of file ContactLocation.php
Size: 6,629 Bytes - Last Modified: 2021-12-23T10:24:26+00:00
/var/www/docs.ssmods.com/process/src/src/model/ContactLocation.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 | <?php namespace SilverCommerce\ContactAdmin\Model; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Member; use SilverStripe\Security\Permission; use SilverStripe\Versioned\Versioned; use SilverStripe\Forms\RequiredFields; use SilverStripe\Security\PermissionProvider; use SilverCommerce\VersionHistoryField\Forms\VersionHistoryField; use SilverStripe\Security\Security; /** * Details on a particular contact * * @property string Title * @property string Address * @property string Address1 * @property string Address2 * @property string City * @property string Country * @property string County * @property string PostCode * @property bool Default * * @method Contact Contact * * @author ilateral * @package Contacts */ class ContactLocation extends DataObject { private static $table_name = 'ContactLocation'; private static $db = [ "Address1" => "Varchar(255)", "Address2" => "Varchar(255)", "City" => "Varchar(255)", "Country" => "Varchar(255)", "County" => "Varchar(255)", "PostCode" => "Varchar(10)", "Default" => "Boolean" ]; private static $has_one = [ "Contact" => Contact::class ]; private static $casting = [ "Title" => "Varchar", "Address" => "Text" ]; private static $frontend_fields = [ "Address1", "Address2", "City", "Country", "County", "PostCode", "Default" ]; private static $summary_fields = [ "Address1", "Address2", "City", "County", "Country", "PostCode", "Default" ]; private static $export_fields = [ "Address1", "Address2", "City", "County", "Country", "PostCode", "Default" ]; /** * Add extension classes * * @var array * @config */ private static $extensions = [ Versioned::class . '.versioned', ]; /** * Declare version history * * @var array * @config */ private static $versioning = [ "History" ]; /** * Generate a title for this location * * @return string */ public function getTitle() { $title = $this->Address1 . " (" . $this->PostCode . ")"; $this->extend("updateTitle", $title); return $title; } /** * Get a list of address fields as an array * * @return array */ protected function getAddressArray() { $array = [$this->Address1]; if (!empty($this->Address2)) { $array[] = $this->Address2; } $array[] = $this->City; if (!empty($this->County)) { $array[] = $this->County; } $array[] = $this->Country; $array[] = $this->PostCode; $this->extend("updateAddressArray", $array); return $array; } /** * Get the address from this location as a string * * @return string */ public function getAddress() { $return = $this->getAddressArray(); $this->extend("updateAddress", $return); return implode(",\n", $return); } public function getCMSFields() { $self = $this; $this->beforeUpdateCMSFields( function ($fields) use ($self) { if ($self->exists()) { $fields->addFieldToTab( "Root.History", VersionHistoryField::create( "History", _t("SilverCommerce\VersionHistoryField.History", "History"), $this )->addExtraClass("stacked") ); } } ); return parent::getCMSFields(); } public function getCMSValidator() { $validator = new RequiredFields( [ "Address1", "City", "Country", "PostCode" ] ); $this->extend('updateCMSValidator', $validator); return $validator; } /** * Get the default export fields for this object * * @return array */ public function getExportFields() { $raw_fields = $this->config()->get('export_fields'); // Merge associative / numeric keys $fields = []; foreach ($raw_fields as $key => $value) { if (is_int($key)) { $key = $value; } $fields[$key] = $value; } $this->extend("updateExportFields", $fields); // Final fail-over, just list ID field if (!$fields) { $fields['ID'] = 'ID'; } return $fields; } public function canView($member = null) { $extended = $this->extendedCan(__FUNCTION__, $member); if ($extended !== null) { return $extended; } return $this->Contact()->canView($member); } public function canCreate($member = null, $context = []) { $extended = $this->extendedCan(__FUNCTION__, $member, $context); if ($extended !== null) { return $extended; } if (!$member) { $member = Security::getCurrentUser(); } if ($member && Permission::checkMember($member->ID, "CONTACTS_MANAGE")) { return true; } return false; } public function canEdit($member = null) { $extended = $this->extendedCan(__FUNCTION__, $member); if ($extended !== null) { return $extended; } return $this->Contact()->canEdit($member); } public function canDelete($member = null, $context = []) { $extended = $this->extendedCan(__FUNCTION__, $member); if ($extended !== null) { return $extended; } return $this->Contact()->canDelete($member); } /** * If we have assigned this as a default location, loop through * other locations and disable default. * * @return void */ public function onAfterWrite() { parent::onAfterWrite(); if ($this->Default) { foreach ($this->Contact()->Locations() as $location) { if ($location->ID != $this->ID && $location->Default) { $location->Default = false; $location->write(); } } } } } |