Source of file NutriHolder.php
Size: 5,895 Bytes - Last Modified: 2021-12-23T10:40:57+00:00
/var/www/docs.ssmods.com/process/src/code/model/NutriHolder.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | <?php class NutriHolder extends DataObject { private static $singular_name = 'Nutritional Information Profile'; public function i18n_singular_name() { return self::$singular_name; } private static $plural_name = 'Nutritional Information Profiles'; public function i18n_plural_name() { return self::$plural_name; } private static $db = array( 'ProfileName' => 'Varchar(50)', 'ServingCount' => 'Int', 'Container' => 'Varchar(10)', 'ServingSize' => 'Varchar(15)', 'AdditionalInfo' => 'Varchar(100)', 'HidePerServeColumn' => 'Boolean', 'HidePer100gColumn' => 'Boolean', 'HidePerDVColumn' => 'Boolean' ); private static $has_many = array( 'NutriRows' => 'NutriRow', 'Products' => 'ProductGroup', 'ProductVariations' => 'ProductVariation' ); /** * @inherited */ private static $casting = array( 'Title' => "Varchar", 'Per100Unit' => "Varchar" ); /** * Returns the unit for the 'Per 100' column of nutritional information. It tries * to get the unit from the ServingSize field, and if no match returns 'g' * @return String */ public function Per100Unit() { return $this->getPer100Unit(); } public function getPer100Unit() { $string = trim($this->ServingSize); $matches = array(); $matchResult = preg_match('/ ?([A-Z]|[a-z]){1,7}/', $string, $matches); if (!$matchResult) { return "g"; } return trim($matches[0]); } /** * @return String */ public function Title() { return $this->getTitle(); } public function getTitle() { $string = $this->ProfileName; if (!$string) { $string = 'Profile #'.$this->ID.' (please customise) '; } $string .= ': '; $string .= "serving: ".$this->ServingCount."; "; $string .= "size: ".$this->ServingSize."; "; $string .= "container: ".$this->Container."; "; return $string; } private static $summary_fields = array( 'Title' => 'Title', ); private static $searchable_fields = array( 'ProfileName' => 'PartialMatchFilter', 'ServingCount' => 'ExactMatchFilter', 'Container' => 'PartialMatchFilter', 'ServingSize' => 'ExactMatchFilter', 'AdditionalInfo' => 'PartialMatchFilter', 'AdditionalInfo' => 'PartialMatchFilter' ); public function getCMSFields() { $fields = parent::getCMSFields(); $config = GridFieldConfig_RelationEditor::create(); $config->addComponent(new GridFieldSortableRows('SortOrder')); $fields->addFieldsToTab( 'Root.Main', array( NumericField::create('ServingCount', 'Servings per package') ->setRightTitle('The number of servings in the jar/bucket/bottle/conatiner'), TextField::create('Container', 'The product container') ->setRightTitle('The conatiner for the product e.g. Jar, Bottle, Bucket'), TextField::create('ServingSize', 'The size of each serving') ->setRightTitle('The size of each serving e.g., 3g, 30ml'), TextField::create('AdditionalInfo', 'Additional information') ->setRightTitle('For example "Remove label with care."'), ) ); $productsGrid = $fields->dataFieldByName('Products'); if ($productsGrid) { $productsFieldConfig = GridFieldConfig_RecordViewer::create(); $productsGrid -> setConfig($productsFieldConfig); } $productVariationsGrid = $fields->dataFieldByName('ProductVariations'); if ($productVariationsGrid) { $productVariationsConfig = GridFieldConfig_RecordViewer::create(); $productVariationsGrid -> setConfig($productVariationsConfig); } $nutriRowsGridField = $fields->dataFieldByName('NutriRows'); if ($nutriRowsGridField) { $nutriRowsFieldConfig = $nutriRowsGridField ->getConfig(); $nutriRowsFieldConfig ->addComponent(new GridFieldEditableColumns()) ->addComponent(new GridFieldDeleteAction()) ->addComponent(new GridFieldSortableRows('SortOrder')) ->getComponentByType('GridFieldEditableColumns') ->setDisplayFields( array( 'Title' => array( 'title' => 'Item', 'field' => 'ReadonlyField' ), 'PerServe' => array( "title" => "Per Serve", "callback" => function ($record, $column, $grid) { return new TextField($column, "Serve"); }), 'Per100' => function ($record, $column, $grid) { return new TextField($column, "Per 100"); } ) ); } $fields->removeFieldFromTab('Root.Main', 'SortOrder'); return $fields; } /** * @return DataList */ public function ShownNutriRows() { return $this->NutriRows() ->exclude(array("Hide" => 1)); } /** * @return DataList */ public function NumberOfTableColums() { $tablesCols = 4; if ($this->HidePerServeColumn) { $tablesCols--; } if ($this->HidePer100gColumn) { $tablesCols--; } if ($this->HidePerDVColumn) { $tablesCols--; } return $tablesCols; } } |