. * */ namespace Vvveb\Component; use function Vvveb\model; use Vvveb\System\Component\ComponentBase; use Vvveb\System\Event; class Fields extends ComponentBase { public static $defaultOptions = [ 'start' => 0, 'limit' => 100, 'site_id' => NULL, 'language_id' => NULL, 'field_group_id' => NULL, 'type' => NULL, 'subtype' => NULL, 'post_type' => NULL, 'product_id' => 'url', 'post_id' => 'url', 'user_id' => 'url', 'order_id' => 'url', 'taxonomy_item_id' => 'url', 'field_id' => NULL, //array with filed_id's to filter ]; public $cacheExpire = 0; //no cache function results() { $model = false; $field_type = trim($this->options['type'] ?? ''); if (in_array($field_type, ['post', 'product', 'user', 'order', 'taxonomy_item'])) { $modelName = $field_type . '_field_value'; $model = model($field_type . '_field_value'); } if (! $model) { return []; } if (! $this->options['subtype']) { unset($this->options['subtype']); } $results = $model->getAll($this->options); if (isset($results[$modelName])) { foreach ($results[$modelName] as $field_id => &$field) { $field['settings'] = json_decode($field['settings'], true); $field['name'] = $field['settings']['name']; $field['type'] = $field['settings']['type']; if ($field['value'] && $field['value'][0] == '{') { $field['value'] = json_decode($field['value'], true); } } } $results['field'] = $results[$modelName] ?? []; unset($results[$modelName]); list($results) = Event :: trigger(__CLASS__,__FUNCTION__, $results); return $results; } //called on each request function request(&$results, $index = 0) { if (isset($this->options['field_id']) && is_array($this->options['field_id'])) { $results = array_intersect_key($results, $this->options['field_id']); } return $results; } }