From 3a621e63098b96436eb9cf745a618df5d86a778e Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 23 Jul 2023 06:48:51 +0000 Subject: [PATCH] update --- Helper/findMissingApiFunctions.php | 288 +++++++++++++++++++++++++++-- 1 file changed, 276 insertions(+), 12 deletions(-) diff --git a/Helper/findMissingApiFunctions.php b/Helper/findMissingApiFunctions.php index 83614e9..899ee65 100644 --- a/Helper/findMissingApiFunctions.php +++ b/Helper/findMissingApiFunctions.php @@ -12,16 +12,240 @@ */ declare(strict_types=1); -// Find modules where the Module/tests/Admin/AdminTest.php is missing +// Create missing api functions $modules = \scandir(__DIR__ . '/../../Modules'); +$allowed = []; + +function createFunction($module, $modelName) +{ + $varName = \lcfirst($modelName); + $snakeCase = \strtolower(\preg_replace('/(?validate{$modelName}Create(\$request))) { + \$response->data['{$snakeCase}_create'] = new FormValidation(\$val); + \$response->header->status = RequestStatusCode::R_400; + + return; + } + + \${$varName} = \$this->create{$modelName}FromRequest(\$request); + \$this->createModel(\$request->header->account, \${$varName}, {$modelName}Mapper::class, '{$snakeCase}', \$request->getOrigin()); + \$this->createStandardCreateResponse(\$request, \$response, \${$varName}); + } + + /** + * Method to create {$modelName} from request. + * + * @param RequestAbstract \$request Request + * + * @return {$modelName} + * + * @todo: implement + * + * @since 1.0.0 + */ + private function create{$modelName}FromRequest(RequestAbstract \$request) : {$modelName} + { + \${$varName} = new {$modelName}(); + + return \${$varName}; + } + + /** + * Validate {$modelName} create request + * + * @param RequestAbstract \$request Request + * + * @return array + * + * @todo: implement + * + * @since 1.0.0 + */ + private function validate{$modelName}Create(RequestAbstract \$request) : array + { + \$val = []; + if (false) { + return \$val; + } + + return []; + } + + HEREDOC; + + return $create; +} + +function updateFunction($module, $modelName, $helperName = '') +{ + $varName = \lcfirst($modelName); + $snakeCase = \strtolower(\preg_replace('/(?validate{$modelName}Update(\$request))) { + \$response->data[\$request->uri->__toString()] = new FormValidation(\$val); + \$response->header->status = RequestStatusCode::R_400; + + return; + } + + /** @var {$helperName} \$old */ + \$old = {$modelName}Mapper::get()->where('id', (int) \$request->getData('id')); + \$new = \$this->update{$modelName}FromRequest(\$request, clone \$old); + + \$this->updateModel(\$request->header->account, \$old, \$new, {$modelName}Mapper::class, '{$snakeCase}', \$request->getOrigin()); + \$this->createStandardUpdateResponse(\$request, \$response, \$new); + } + + /** + * Method to update {$modelName} from request. + * + * @param RequestAbstract \$request Request + * @param {$helperName} \$new Model to modify + * + * @return {$helperName} + * + * @todo: implement + * + * @since 1.0.0 + */ + public function update{$modelName}FromRequest(RequestAbstract \$request, {$helperName} \$new) : {$helperName} + { + return \$new; + } + + /** + * Validate {$modelName} update request + * + * @param RequestAbstract \$request Request + * + * @return array + * + * @todo: implement + * + * @since 1.0.0 + */ + private function validate{$modelName}Update(RequestAbstract \$request) : array + { + \$val = []; + if ((\$val['id'] = !\$request->hasData('id'))) { + return \$val; + } + + return []; + } + + HEREDOC; + + return $create; +} + +function deleteFunction($module, $modelName) +{ + $varName = \lcfirst($modelName); + $snakeCase = \strtolower(\preg_replace('/(?validate{$modelName}Delete(\$request))) { + \$response->data[\$request->uri->__toString()] = new FormValidation(\$val); + \$response->header->status = RequestStatusCode::R_400; + + return; + } + + /** @var \Modules\\{$module}\Models\\{$modelName} \${$varName} */ + \${$varName} = {$modelName}Mapper::get()->where('id', (int) \$request->getData('id'))->execute(); + \$this->deleteModel(\$request->header->account, \${$varName}, {$modelName}Mapper::class, '{$snakeCase}', \$request->getOrigin()); + \$this->createStandardDeleteResponse(\$request, \$response, \${$varName}); + } + + /** + * Validate {$modelName} delete request + * + * @param RequestAbstract \$request Request + * + * @return array + * + * @todo: implement + * + * @since 1.0.0 + */ + private function validate{$modelName}Delete(RequestAbstract \$request) : array + { + \$val = []; + if ((\$val['id'] = !\$request->hasData('id'))) { + return \$val; + } + + return []; + } + + HEREDOC; + + return $create; +} + foreach ($modules as $module) { if ($module === '..' || $module === '.' || !\is_dir(__DIR__ . '/../../Modules/' . $module) || !\is_dir(__DIR__ . '/../../Modules/' . $module . '/Controller') - || !\is_file(__DIR__ . '/../../Modules/' . $module . '/info.json')) - { + || !\is_file(__DIR__ . '/../../Modules/' . $module . '/info.json') + || (!empty($allowed) && !\in_array($module, $allowed)) + ) { continue; } @@ -48,58 +272,98 @@ foreach ($modules as $module) { if (\strpos($match, 'Create') !== false || \strpos($match, 'Add') !== false) { $create[] = $match; - } elseif (\strpos($match, 'Update') !== false || \strpos($match, 'Change') !== false) { + } elseif (\strpos($match, 'Update') !== false || \strpos($match, 'Change') !== false || \strpos($match, 'Set') !== false) { $update[] = $match; } elseif (\strpos($match, 'Delete') !== false || \strpos($match, 'Remove') !== false) { $delete[] = $match; } } + $newContent = ''; + $missing = []; foreach ($create as $c) { $nUpdate1 = \str_replace(['Create', 'Add'], 'Update', $c); $nUpdate2 = \str_replace(['Create', 'Add'], 'Change', $c); if (!\in_array($nUpdate1, $update) && !\in_array($nUpdate2, $update)) { $missing[] = $nUpdate1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $c); + + $fnPos = \stripos($content, 'private function create' . $modelName . 'FromRequest'); + if ($fnPos === false) { + $modelRet = ''; + } else { + $retTypePos1 = \stripos($content, ':', $fnPos); + $retTypePos2 = \stripos($content, "\n", $fnPos); + + $modelRet = \substr($content, $retTypePos1 + 1, $retTypePos2 - ($retTypePos1 + 1)); + } + + $newContent .= updateFunction($module, $modelName, \trim($modelRet, " :\n")); + $update[] = $nUpdate1; } $nDelete1 = \str_replace(['Create', 'Add'], 'Delete', $c); $nDelete2 = \str_replace(['Create', 'Add'], 'Remove', $c); if (!\in_array($nDelete1, $delete) && !\in_array($nDelete2, $delete)) { $missing[] = $nDelete1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $c); + $newContent .= deleteFunction($module, $modelName); + $delete[] = $nDelete1; } } foreach ($update as $u) { - $nCreate1 = \str_replace(['Create', 'Add'], 'Update', $u); - $nCreate2 = \str_replace(['Create', 'Add'], 'Change', $u); + $nCreate1 = \str_replace(['Update', 'Change', 'Set'], 'Create', $u); + $nCreate2 = \str_replace(['Update', 'Change', 'Set'], 'Add', $u); if (!\in_array($nCreate1, $create) && !\in_array($nCreate2, $create)) { $missing[] = $nCreate1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $u); + $newContent .= createFunction($module, $modelName); + $create[] = $nCreate1; } - $nDelete1 = \str_replace(['Update', 'Change'], 'Delete', $u); - $nDelete2 = \str_replace(['Update', 'Change'], 'Remove', $u); + $nDelete1 = \str_replace(['Update', 'Change', 'Set'], 'Delete', $u); + $nDelete2 = \str_replace(['Update', 'Change', 'Set'], 'Remove', $u); if (!\in_array($nDelete1, $delete) && !\in_array($nDelete2, $delete)) { $missing[] = $nDelete1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $u); + $newContent .= deleteFunction($module, $modelName); + $delete[] = $nDelete1; } } foreach ($delete as $d) { - $nCreate1 = \str_replace(['Create', 'Add'], 'Update', $d); - $nCreate2 = \str_replace(['Create', 'Add'], 'Change', $d); + $nCreate1 = \str_replace(['Delete', 'Remove'], 'Create', $d); + $nCreate2 = \str_replace(['Delete', 'Remove'], 'Add', $d); if (!\in_array($nCreate1, $create) && !\in_array($nCreate2, $create)) { $missing[] = $nCreate1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $d); + $newContent .= createFunction($module, $modelName); + $create[] = $nCreate1; } - $nUpdate1 = \str_replace(['Create', 'Add'], 'Update', $d); - $nUpdate2 = \str_replace(['Create', 'Add'], 'Change', $d); + $nUpdate1 = \str_replace(['Delete', 'Remove'], 'Update', $d); + $nUpdate2 = \str_replace(['Delete', 'Remove'], 'Change', $d); if (!\in_array($nUpdate1, $update) && !\in_array($nUpdate2, $update)) { $missing[] = $nUpdate1; + + $modelName = \str_replace(['api', 'Update', 'Change', 'Set', 'Remove', 'Delete', 'Create', 'Add'], '', $d); + $newContent .= updateFunction($module, $modelName); + $create[] = $nUpdate1; } } if (!empty($missing)) { echo "\nMissing functions \"" . $module . "\": \n"; + + $newContent = \rtrim($content, " }\n") . "\n }\n" . $newContent . "}\n"; + \file_put_contents(__DIR__ . '/../../Modules/' . $module . '/Controller/' . $controller, $newContent); } foreach ($missing as $m) {