Source of file CheckoutPageStepDescription.php
Size: 9,008 Bytes - Last Modified: 2021-12-23T10:39:35+00:00
/var/www/docs.ssmods.com/process/src/src/Model/Process/CheckoutPageStepDescription.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 | <?php namespace Sunnysideup\Ecommerce\Model\Process; use SilverStripe\Core\Config\Config; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\TextareaField; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DB; use SilverStripe\Security\Permission; use SilverStripe\Security\Security; use Sunnysideup\CmsEditLinkField\Api\CMSEditLinkAPI; use Sunnysideup\Ecommerce\Config\EcommerceConfig; use Sunnysideup\Ecommerce\Interfaces\EditableEcommerceObject; use Sunnysideup\Ecommerce\Model\Extensions\EcommerceRole; use Sunnysideup\Ecommerce\Pages\CheckoutPageController; // Class used to describe the steps in the checkout class CheckoutPageStepDescription extends DataObject implements EditableEcommerceObject { /** * standard SS variable. * * @var array */ private static $table_name = 'CheckoutPageStepDescription'; private static $db = [ 'Heading' => 'Varchar', 'Above' => 'Text', 'Below' => 'Text', 'Code' => 'Varchar(100)', ]; /** * standard SS variable. * * @var array */ private static $searchable_fields = [ 'Heading' => 'PartialMatchFilter', 'Above' => 'PartialMatchFilter', 'Below' => 'PartialMatchFilter', ]; /** * standard SS variable. * * @var array */ private static $field_labels = [ 'Above' => 'Above Checkout Step', 'Below' => 'Below Checkout Step', ]; /** * standard SS variable. * * @var array */ private static $summary_fields = [ 'ID' => 'Step Number', 'Heading' => 'Heading', ]; private static $indexes = [ 'Code' => true, ]; /** * standard SS variable. * * @var array */ private static $casting = [ 'Title' => 'Varchar', ]; /** * standard SS variable. * * @var string */ private static $singular_name = 'Checkout Step Description'; /** * standard SS variable. * * @var string */ private static $plural_name = 'Checkout Step Descriptions'; /** * Standard SS variable. * * @var string */ private static $description = 'A step within the checkout process (e.g. confirm details).'; /** * standard SS variable. * * @return bool */ private static $can_create = false; public function i18n_singular_name() { return _t('CheckoutPage.CHECKOUTSTEPDESCRIPTION', 'Checkout Step Description'); } public function i18n_plural_name() { return _t('CheckoutPage.CHECKOUTSTEPDESCRIPTIONS', 'Checkout Step Descriptions'); } /** * these are only created programmatically * standard SS method. * * @param \SilverStripe\Security\Member $member * @param mixed $context * * @return bool */ public function canCreate($member = null, $context = []) { return false; } /** * standard SS method. * * @param \SilverStripe\Security\Member $member * @param mixed $context * * @return bool */ public function canView($member = null, $context = []) { if (! $member) { $member = Security::getCurrentUser(); } $extended = $this->extendedCan(__FUNCTION__, $member); if (null !== $extended) { return $extended; } if (Permission::checkMember($member, Config::inst()->get(EcommerceRole::class, 'admin_permission_code'))) { return true; } return parent::canEdit($member); } /** * standard SS method. * * @param \SilverStripe\Security\Member $member * @param mixed $context * * @return bool */ public function canEdit($member = null, $context = []) { if (! $member) { $member = Security::getCurrentUser(); } $extended = $this->extendedCan(__FUNCTION__, $member); if (null !== $extended) { return $extended; } if (Permission::checkMember($member, Config::inst()->get(EcommerceRole::class, 'admin_permission_code'))) { return true; } return parent::canEdit($member); } /** * standard SS method. * * @param \SilverStripe\Security\Member $member * * @return bool */ public function canDelete($member = null) { $array = EcommerceConfig::get(CheckoutPageController::class, 'checkout_steps'); if (in_array($this->getCode, $array, true)) { return false; } if (! $member) { $member = Security::getCurrentUser(); } $extended = $this->extendedCan(__FUNCTION__, $member); if (null !== $extended) { return $extended; } if (Permission::checkMember($member, Config::inst()->get(EcommerceRole::class, 'admin_permission_code'))) { return true; } return parent::canEdit($member); } /** * standard SS method. * * @return \SilverStripe\Forms\FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $fields->replaceField('Description', new TextareaField('Description', _t('Checkout.DESCRIPTION', 'Description'))); $fields->replaceField('Above', new TextareaField('Above', _t('Checkout.ABOVE', 'Top of section note'))); $fields->replaceField('Below', new TextareaField('Below', _t('Checkout.BELOW', 'Bottom of section note'))); $fields->replaceField( 'Code', DropdownField::create( 'Code', 'Code', array_combine( EcommerceConfig::get(CheckoutPageController::class, 'checkout_steps'), EcommerceConfig::get(CheckoutPageController::class, 'checkout_steps') ) ) ); return $fields; } /** * link to edit the record. * * @param null|string $action - e.g. edit * * @return string */ public function CMSEditLink($action = null) { return CMSEditLinkAPI::find_edit_link_for_object($this, $action); } /** * casted variable. * * @return string */ public function Title() { return $this->getTitle(); } public function getTitle() { return $this->Heading; } /** * standard SS method. */ public function requireDefaultRecords() { parent::requireDefaultRecords(); $steps = EcommerceConfig::get(CheckoutPageController::class, 'checkout_steps'); if (is_array($steps) && count($steps)) { $idArray = []; $addCodeSteps = CheckoutPageStepDescription::get() ->where('"Code" = \'\' OR "Code" IS NULL') ; $stepsToAdd = $steps; if ($addCodeSteps->exists()) { foreach ($addCodeSteps as $addCodeStep) { DB::alteration_message('Adding Code to Step ...' . $addCodeStep->Code, 'created'); $addCodeStep->Code = array_shift($stepsToAdd); $addCodeStep->write(); } } foreach ($steps as $code) { $filter = ['Code' => $code]; $obj = CheckoutPageStepDescription::get()->filter($filter)->first(); if ($obj) { //do nothing } else { $obj = CheckoutPageStepDescription::create($filter); $obj->Heading = $this->getDefaultTitle($code); $obj->write(); DB::alteration_message("Creating CheckoutPageStepDescription {$code}", 'created'); } $idArray[$obj->ID] = $obj->ID; } $toDeleteObjects = CheckoutPageStepDescription::get()->exclude(['ID' => $idArray]); if ($toDeleteObjects->exists()) { foreach ($toDeleteObjects as $toDeleteObject) { DB::alteration_message('Deleting CheckoutPageStepDescription ' . $toDeleteObject->Code, 'deleted'); $toDeleteObject->delete(); } } } } /** * turns code into title (default values). * * @param string $code - code * * @return string */ private function getDefaultTitle($code) { switch ($code) { case 'orderitems': return _t('CheckoutPage.ORDERITEMS', 'Order items'); case 'orderformaddress': return _t('CheckoutPage.ORDERFORMADDRESS', 'Your details'); case 'orderconfirmationandpayment': return _t('CheckoutPage.ORDERCONFIRMATIONANDPAYMENT', 'Confirm and pay'); } return $code; } } |