Source of file CatalogProduct.php
Size: 10,478 Bytes - Last Modified: 2021-12-24T06:46:25+00:00
/var/www/docs.ssmods.com/process/src/src/dataobjects/CatalogProduct.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 | <?php namespace Dynamic\ProductCatalog\ORM; use Dynamic\ProductCatalog\Docs\CareCleaningDoc; use Dynamic\ProductCatalog\Docs\OperationManual; use Dynamic\ProductCatalog\Docs\SpecSheet; use Dynamic\ProductCatalog\Docs\Warranty; use Dynamic\ProductCatalog\Page\CatalogCategory; use Dynamic\ViewableDataObject\VDOInterfaces\ViewableDataObjectInterface; use SilverStripe\Assets\Image; use SilverStripe\Forms\GridField\GridField; use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter; use SilverStripe\Forms\GridField\GridFieldAddNewButton; use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor; use SilverStripe\Forms\HTMLEditor\HTMLEditorField; use SilverStripe\Forms\TextField; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Permission; use SilverStripe\Security\PermissionProvider; use Symbiote\GridFieldExtensions\GridFieldAddExistingSearchButton; use Symbiote\GridFieldExtensions\GridFieldOrderableRows; class CatalogProduct extends DataObject implements PermissionProvider, ViewableDataObjectInterface { /** * @var string */ private static $singular_name = 'Product'; /** * @var string */ private static $plural_name = 'Products'; /** * @var array */ private static $db = array( 'Title' => 'Varchar(255)', 'Content' => 'HTMLText', 'QuickFeatures' => 'HTMLText', 'Dimensions' => 'Varchar(255)', 'SKU' => 'Varchar(50)', ); /** * @var array */ private static $many_many = array( 'Categories' => CatalogCategory::class, 'CareCleaningDocs' => CareCleaningDoc::class, 'OperationManuals' => OperationManual::class, 'SpecSheets' => SpecSheet::class, 'Warranties' => Warranty::class, ); /** * @var array */ private static $many_many_extraFields = array( 'Categories' => array( 'SortOrder' => 'Int', ), 'CareCleaningDocs' => array( 'Sort' => 'Int', ), 'OperationManuals' => array( 'Sort' => 'Int', ), 'SpecSheets' => array( 'Sort' => 'Int', ), 'Warranties' => array( 'Sort' => 'Int', ), ); /** * @var string */ private static $table_name = 'CatalogProdcut'; /** * @var bool */ private static $versioned_gridfield_extensions = true; /** * @var array */ private static $summary_fields = array( 'ProductThumbnail' => 'Image', 'Title' => 'Title', 'Type' => 'Type', 'CategoryList' => 'Categories', ); /** * @var array */ private static $searchable_fields = array( 'Title' => array( 'title' => 'Product Name', ), 'Categories.ID' => array( 'title' => 'Category', ), ); /** * @var string */ private static $slide_tab_title = 'Images'; /** * @param bool $includerelations * * @return array|string */ public function fieldLabels($includerelations = true) { $labels = parent::fieldLabels($includerelations); $labels['Title'] = 'Product Name'; $labels['Categories.ID'] = 'Category'; return $labels; } /** * @return string */ public function CategoryList() { $list = ''; if ($this->Categories()) { $i = 0; foreach ($this->Categories()->sort('SortOrder') as $category) { $list .= $category->Title; if (++$i !== $this->Categories()->Count()) { $list .= ', '; } } } return $list; } /** * @return mixed */ public function getImage() { if ($this->Slides()->exists()) { $slide = $this->Slides()->first(); if ($slide->ImageID > 0) { return $slide->Image(); } } return false; } /** * @return mixed */ public function Image() { return $this->getImage(); } /** * @return mixed */ public function ProductThumbnail() { if ($image = $this->getImage()) { if ($thumb = Image::get()->byID($image->ID)) { return $thumb->CMSThumbnail(); } } return false; } /** * @return \SilverStripe\Forms\FieldList */ public function getCMSFields() { $fields = parent::getCMSFields(); $remove = [ 'Categories', 'CareCleaningDocs', 'OperationManuals', 'SpecSheets', 'Warranties', 'DisabledBlocks', 'Slides', ]; if (!$this->ID) { $remove[] = 'Blocks'; } $fields->removeByName($remove); $fields->insertBefore( $fields->dataFieldByName('SKU'), 'Content' ); $fields->addFieldsToTab('Root.Info', array( TextField::create('Dimensions'), HTMLEditorField::create('QuickFeatures') ->addExtraClass('stacked'), )); if ($this->ID) { // Categories $config = GridFieldConfig_RelationEditor::create(); $config->addComponent(new GridFieldOrderableRows('SortOrder')); $config->removeComponentsByType(GridFieldAddExistingAutocompleter::class); $config->addComponent(new GridFieldAddExistingSearchButton()); $config->removeComponentsByType(GridFieldAddNewButton::class); $categories = $this->Categories()->sort('SortOrder'); $categoryField = GridField::create('Categories', 'Categories', $categories, $config); $fields->addFieldsToTab('Root.Categories.Categories', array( $categoryField, )); // Care and Cleaning $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldOrderableRows('Sort')); $config->removeComponentsByType(GridFieldAddExistingAutocompleter::class); $config->addComponent(new GridFieldAddExistingSearchButton()); $operation = GridField::create( 'CareCleaningDocs', 'Care and Cleaning', $this->CareCleaningDocs()->sort('Sort'), $config ); $fields->addFieldsToTab('Root.Files.Care', array( $operation, )); // Operation Manuals $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldOrderableRows('Sort')); $config->removeComponentsByType(GridFieldAddExistingAutocompleter::class); $config->addComponent(new GridFieldAddExistingSearchButton()); $operation = GridField::create( 'OperationManuals', 'Operation Manuals', $this->OperationManuals()->sort('Sort'), $config ); $fields->addFieldsToTab('Root.Files.Operation', array( $operation, )); // Spec Sheets $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldOrderableRows('Sort')); $config->removeComponentsByType(GridFieldAddExistingAutocompleter::class); $config->addComponent(new GridFieldAddExistingSearchButton()); $specsheets = GridField::create('SpecSheets', 'Spec Sheets', $this->SpecSheets()->sort('Sort'), $config); $fields->addFieldsToTab('Root.Files.SpecSheets', array( $specsheets, )); // Warranties $config = GridFieldConfig_RecordEditor::create(); $config->addComponent(new GridFieldOrderableRows('Sort')); $config->removeComponentsByType(GridFieldAddExistingAutocompleter::class); $config->addComponent(new GridFieldAddExistingSearchButton()); $warranties = GridField::create('Warranties', 'Warranties', $this->Warranties()->sort('Sort'), $config); $fields->addFieldsToTab('Root.Files.Warranty', array( $warranties, )); } return $fields; } /** * @return CatalogCategory */ public function getPrimaryCategory() { if ($this->Categories()->exists()) { $category = $this->Categories()->sort('SortOrder')->first(); } else { $category = CatalogCategory::get()->first(); } return $category; } /** * set ParentPage for ViewableDataobject. * * @return string */ public function getParentPage() { return $this->getPrimaryCategory(); } /** * set ViewAction for ViewableDataobject. * * @return string */ public function getViewAction() { return 'view'; } /** * @return \SilverStripe\ORM\DataList */ public function getAncestors() { return CatalogCategory::get(); } /** * @return array */ public function providePermissions() { return array( 'Product_EDIT' => 'Edit a Product', 'Product_DELETE' => 'Delete a Product', 'Product_CREATE' => 'Create a Product', ); } /** * @param null $member * * @return bool|int */ public function canEdit($member = null, $context = []) { return Permission::check('Product_EDIT', 'any', $member); } /** * @param null $member * * @return bool|int */ public function canDelete($member = null, $context = []) { return Permission::check('Product_DELETE', 'any', $member); } /** * @param null $member * * @return bool|int */ public function canCreate($member = null, $context = []) { return Permission::check('Product_CREATE', 'any', $member); } /** * @param null $member * * @return bool */ public function canView($member = null, $context = []) { return true; } /** * @return array */ public function allowedChildren() { return []; } } |