Source of file ValueProvider.php
Size: 2,739 Bytes - Last Modified: 2021-12-23T10:02:17+00:00
/var/www/docs.ssmods.com/process/src/code/Providers/ValueProvider.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | <?php namespace Seeder; use Exception; /** * Class ValueProvider * @package Seeder */ class ValueProvider extends Provider { /** * @var string */ public static $shorthand = 'Value'; /** * @param $argumentString * @return array */ public static function parseOptions($argumentString) { return array( 'value' => $argumentString, ); } /** * @param $field * @param $state * @return int|mixed|string */ protected function generateField($field, $state) { $value = $this->resolveValue($field, $state); if ($value instanceof \DataObject) { $value = $value->ID; } return $value; } /** * @param $field * @param $state * @return mixed|string */ protected function generateOne($field, $state) { $value = $this->resolveValue($field, $state); return $value; } /** * @param $field * @param $state * @throws Exception * @returns null */ protected function generateMany($field, $state) { throw new Exception('value provider does not support generating has many fields'); } /** * @param $field * @param $state * @return mixed|string */ private function resolveValue($field, $state) { if (empty($field->options['value'])) { return ''; } $value = $field->options['value']; if (preg_match_all('/\{\$([^}]+)}/', $field->options['value'], $matches)) { for ($i = 0; $i < count($matches[0]); $i++) { $variable = $matches[1][$i]; $variableValue = $this->resolveVariable($state, $variable); // when string is an object e.g '{$Up.Up}' if ($value === $matches[0][$i]) { $value = $variableValue; } else { $value = str_replace($matches[0][$i], $variableValue, $value); } } } return $value; } /** * @param $state * @param $variable * @return mixed */ private function resolveVariable($state, $variable) { $variables = explode('.', $variable); if ($variable === 'i') { return $state->index(); } $value = $state->object(); foreach ($variables as $variable) { if ($variable === 'Up') { $state = $state->up(); $value = $state->object(); } else { // does this support has_one $value = $value->getField($variable); } } return $value; } } |