'; protected $id = null; public const TYPE = ''; protected $group = null; protected $name = null; protected $available = true; protected $position = 10; protected $patterns = []; public function get_data() { return [ 'id' => $this->id, 'type' => static::TYPE, 'group' => $this->group, 'name' => $this->name, 'icon' => $this->icon, 'available' => $this->available, 'position' => $this->position, 'patterns' => $this->patterns, ]; } public function get_id() { return $this->id; } public function get_type() { return static::TYPE; } public function get_patterns() { return $this->patterns; } public function add_pattern( BasePattern $pattern ) { $added_patterns = array_map( function( $item ) { return $item->get_type(); }, $this->patterns ); if ( ! in_array( $pattern->get_type(), $added_patterns, true ) ) { $this->patterns[] = $pattern; } } public function get_raw_data() { $data = $this->get_data(); $data['patterns'] = array_map( function( BasePattern $item ) { return $item->get_raw_data(); }, $data['patterns'] ); return $data; } }