| 
									
										
										
										
											2021-02-20 22:42:28 +00:00
										 |  |  | #!/usr/local/bin/php | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Symfony\Component\Yaml\Yaml; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define('ROOT', dirname(__DIR__)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require ROOT . '/vendor/autoload.php'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const types = [ | 
					
						
							| 
									
										
										
										
											2020-07-26 00:18:15 +00:00
										 |  |  |     'blob'         => '', | 
					
						
							|  |  |  |     'bool'         => 'bool', | 
					
						
							|  |  |  |     'char'         => 'string', | 
					
						
							| 
									
										
										
										
											2021-04-27 21:23:00 +00:00
										 |  |  |     'datetime'     => '\DateTimeInterface', | 
					
						
							|  |  |  |     'timestamp'    => '\DateTimeInterface', | 
					
						
							| 
									
										
										
										
											2020-07-26 00:18:15 +00:00
										 |  |  |     'html'         => 'string', | 
					
						
							|  |  |  |     'int'          => 'int', | 
					
						
							|  |  |  |     'numeric'      => 'float', | 
					
						
							|  |  |  |     'serial'       => 'int', | 
					
						
							|  |  |  |     'text'         => 'string', | 
					
						
							|  |  |  |     'varchar'      => 'string', | 
					
						
							| 
									
										
										
										
											2020-07-27 03:36:34 +00:00
										 |  |  |     'phone_number' => 'PhoneNumber', | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-07 23:47:50 +00:00
										 |  |  | $files = array_merge(glob(ROOT . '/src/Entity/*.php'), | 
					
						
							|  |  |  |                      array_merge(glob(ROOT . '/components/*/Entity/*.php'), | 
					
						
							|  |  |  |                                  glob(ROOT . '/plugins/*/Entity/*.php'))); | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-08 16:10:57 +00:00
										 |  |  | $classes = []; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | foreach ($files as $file) { | 
					
						
							| 
									
										
										
										
											2020-06-30 18:19:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  |     require_once $file; | 
					
						
							| 
									
										
										
										
											2020-03-30 17:16:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 15:15:31 +00:00
										 |  |  |     $declared = get_declared_classes(); | 
					
						
							| 
									
										
										
										
											2020-08-08 16:10:57 +00:00
										 |  |  |     foreach ($declared as $dc) { | 
					
						
							| 
									
										
										
										
											2020-09-07 23:47:50 +00:00
										 |  |  |         if (preg_match('/(App|(Component|Plugin)\\\\[^\\\\]+)\\\\Entity/', $dc) && !in_array($dc, $classes)) { | 
					
						
							| 
									
										
										
										
											2020-08-08 16:10:57 +00:00
										 |  |  |             $class = $dc; | 
					
						
							|  |  |  |             $classes[] = $class; | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $no_ns_class  = preg_replace('/.*?\\\\/', '', $class); | 
					
						
							|  |  |  |     $schema       = $class::schemaDef(); | 
					
						
							|  |  |  |     $fields       = array_keys($schema['fields']); | 
					
						
							|  |  |  |     $fields_code  = []; | 
					
						
							|  |  |  |     $methods_code = []; | 
					
						
							|  |  |  |     foreach ($fields as $field) { | 
					
						
							|  |  |  |         $nullable       = !@$schema['fields'][$field]['not null'] ? '?' : ''; | 
					
						
							| 
									
										
										
										
											2020-03-30 15:15:31 +00:00
										 |  |  |         $type           = types[$schema['fields'][$field]['type']]; | 
					
						
							|  |  |  |         $type           = $type !== '' ? $nullable . $type : $type; | 
					
						
							| 
									
										
										
										
											2021-09-18 03:22:27 +01:00
										 |  |  |         $method_name    = str_replace([' ', 'actor'], ['', 'Actor'], ucwords(str_replace('_', ' ', $field))); | 
					
						
							| 
									
										
										
										
											2020-07-25 01:54:18 +00:00
										 |  |  |         $default        = @$schema['fields'][$field]['default']; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-27 21:23:00 +00:00
										 |  |  |         if (isset($default) && $nullable != '?' && $type != '\DateTimeInterface') { | 
					
						
							| 
									
										
										
										
											2020-07-25 01:54:18 +00:00
										 |  |  |             if (is_string($default)) { | 
					
						
							|  |  |  |                 $default = "'{$default}'"; | 
					
						
							|  |  |  |             } elseif ($type == 'bool') { | 
					
						
							|  |  |  |                 $default = $default ? 'true' : 'false'; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $fields_code[]  = "    private {$type} \${$field} = {$default};"; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $fields_code[]  = "    private {$type} \${$field};"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-08 16:10:57 +00:00
										 |  |  |         $methods_code[] = "    public function set{$method_name}({$type} \${$field}): self" . | 
					
						
							|  |  |  |                         "\n    {\n        \$this->{$field} = \${$field};\n        return \$this;\n    }" . "\n\n" . | 
					
						
							|  |  |  |                         "    public function get{$method_name}()" . ($type !== '' ? ": {$type}" : '') . | 
					
						
							|  |  |  |                         "\n    {\n        return \$this->{$field};\n    }" . "\n"; | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-03-30 15:15:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $fields_code  = implode("\n", $fields_code); | 
					
						
							|  |  |  |     $methods_code = implode("\n", $methods_code) . "\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $begin = '// {{{ Autocode'; | 
					
						
							|  |  |  |     $end   = '// }}} Autocode'; | 
					
						
							|  |  |  |     $code  = " | 
					
						
							|  |  |  |     {$begin} | 
					
						
							| 
									
										
										
										
											2021-05-05 15:56:03 +00:00
										 |  |  |     // @codeCoverageIgnoreStart | 
					
						
							| 
									
										
										
										
											2020-03-30 15:15:31 +00:00
										 |  |  | {$fields_code} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {$methods_code} | 
					
						
							| 
									
										
										
										
											2021-05-05 15:56:03 +00:00
										 |  |  |     // @codeCoverageIgnoreEnd | 
					
						
							| 
									
										
										
										
											2020-08-08 16:10:57 +00:00
										 |  |  |     {$end}"; | 
					
						
							| 
									
										
										
										
											2020-03-30 15:15:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     foreach (['/\\//' => '\\/', '/ /' => '\\ '] as $from => $to) { | 
					
						
							|  |  |  |         $begin = preg_replace($from, $to, $begin); | 
					
						
							|  |  |  |         $end   = preg_replace($from, $to, $end); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-03-18 15:32:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     $in_file  = file_get_contents($file); | 
					
						
							|  |  |  |     $out_file = preg_replace("/\\s*{$begin}[^\\/]*{$end}/m", $code, $in_file); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     file_put_contents($file, $out_file); | 
					
						
							|  |  |  | } |