Fix code quality violations and rename select input components

Move small tasks from wishlist to todo, update npm packages
Replace #[Auth] attributes with manual auth checks and code quality rule
Remove on_jqhtml_ready lifecycle method from framework
Complete ACL system with 100-based role indexing and /dev/acl tester
WIP: ACL system implementation with debug instrumentation
Convert rsx:check JS linting to RPC socket server
Clean up docs and fix $id→$sid in man pages, remove SSR/FPC feature
Reorganize wishlists: priority order, mark sublayouts complete, add email
Update model_fetch docs: mark MVP complete, fix enum docs, reorganize
Comprehensive documentation overhaul: clarity, compression, and critical rules
Convert Contacts/Projects CRUD to Model.fetch() and add fetch_or_null()
Add JS ORM relationship lazy-loading and fetch array handling
Add JS ORM relationship fetching and CRUD documentation
Fix ORM hydration and add IDE resolution for Base_* model stubs
Rename Json_Tree_Component to JS_Tree_Debug_Component and move to framework
Enhance JS ORM infrastructure and add Json_Tree class name badges

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-23 21:39:43 +00:00
parent 78553d4edf
commit 84ca3dfe42
167 changed files with 7538 additions and 49164 deletions

View File

@@ -1300,6 +1300,70 @@ function handle_resolve_class_service($data) {
}
}
// Final fallback: Check for Base_* model stubs (auto-generated at bundle time)
// These don't exist as JS classes but their corresponding PHP models do
if (str_starts_with($identifier, 'Base_')) {
$model_name = substr($identifier, 5); // Strip 'Base_' prefix
$model_data = $find_php_class($model_name);
if ($model_data) {
// Check if this is a subclass of Rsx_Model_Abstract
$is_model = false;
$current_class = $model_name;
$visited = [];
while ($current_class) {
if (in_array($current_class, $visited)) break;
$visited[] = $current_class;
$class_data = $find_php_class($current_class);
if (!$class_data) break;
$extends = $class_data['extends'] ?? null;
if (!$extends) break;
// Normalize extends (strip namespace)
$extends_parts = explode('\\', $extends);
$extends_simple = end($extends_parts);
if ($extends_simple === 'Rsx_Model_Abstract') {
$is_model = true;
break;
}
$current_class = $extends_simple;
}
if ($is_model) {
$file_path = $model_data['file'];
$line_number = 1;
$absolute_path = IDE_BASE_PATH . '/' . $file_path;
// Try to find the fetch method line number if it exists
if (file_exists($absolute_path)) {
$content = file_get_contents($absolute_path);
$lines = explode("\n", $content);
foreach ($lines as $index => $line) {
if (preg_match('/^\s*(public\s+)?(static\s+)?function\s+fetch\s*\(/', $line)) {
$line_number = $index + 1;
break;
}
}
}
json_response([
'found' => true,
'type' => 'base_model_stub',
'file' => $file_path,
'line' => $line_number,
'identifier' => $identifier,
'resolved_model' => $model_name,
]);
}
}
}
// Nothing found after trying all types
json_response([
'found' => false,