refactor(autoload): migrate theme classes to Composer PSR-4
Move 288 types from global AKSRT_* + inc/classes manual requires into
namespace AKSRT\{Domain} under src/AKSRT/, wire composer.json psr-4,
and slim bootstrap to helpers/modules/hooks only. Split multi-class
widget/gateway files, update admin contract audit paths, and document
the layout in ADR/README.
This commit is contained in:
@@ -1,37 +1,62 @@
|
||||
# ADR: Domain folder placement for `inc/classes`
|
||||
# ADR: Domain folder placement + PSR-4 namespaces for theme types
|
||||
|
||||
## Status
|
||||
Accepted (2026-07-17)
|
||||
Accepted (2026-07-17); **updated 2026-07-17** for Composer PSR-4.
|
||||
|
||||
## Context
|
||||
After moving root class files into domain folders, freeze placement for boundary types so later moves are intentional.
|
||||
Domain folders were frozen after the root→domain move. Theme types then migrated from global `AKSRT_*` + manual `require_once` to real PHP namespaces under `src/AKSRT/` with Composer PSR-4.
|
||||
|
||||
## Decision
|
||||
|
||||
### Domain ownership (unchanged)
|
||||
|
||||
| Concern | Domain | Why |
|
||||
|---------|--------|-----|
|
||||
| Theme shell (setup, scripts, templates, SEO, meta boxes, DB migrator, front-submit, docs presenter, home modules, stats, redirects, update checker, comment actions) | `core/` | Shared CMS plumbing |
|
||||
| SPA shell + controllers + schema + native ops | `admin/` | Dual-surface IA |
|
||||
| Settings facade + runtime delegates | `settings/` | Single public settings API |
|
||||
| Auth, OAuth, captcha, moderation, email rollback | `auth/` | Identity & access |
|
||||
| User center/home/badges/level/metrics/notifications/follow | `user/` | Account surface |
|
||||
| Credits, balance wallet, signin, invite, points-free | `credits/` | Points + cash wallet |
|
||||
| Download tokens/state, content pay, VIP, visibility | `content/` | Post-centric paid content |
|
||||
| Topic pay, plate follow pay | `forum/` | Forum SKUs (not generic content pay) |
|
||||
| Orders, gateways, coupon, charge-card, revenue, creator-revenue, withdrawal, rebate, discount, after-sale, shipping, wechat-notify | `payment/` | Commerce + settlement |
|
||||
| Shop services/meta/reviews | `shop/` | Product catalog / cart |
|
||||
| SMS stack | `sms/` | Messaging channel |
|
||||
| AI runtime (admin AI controller stays in `admin/`) | `ai/` | Generation helpers |
|
||||
| Message, private message, site notice, report center | `messages/` | In-site messaging |
|
||||
| MeiliSearch, search-push, ip-geo, content-audit, api-audit | `extensions/` | Optional integrations |
|
||||
| Widgets + registry | `widgets/` | WP widgets |
|
||||
| Inline style / custom code / loading overlay | `frontend/` | Asset render helpers |
|
||||
| Theme shell (setup, scripts, templates, SEO, meta boxes, DB migrator, front-submit, docs presenter, home modules, stats, redirects, update checker, comment actions) | `Core` | Shared CMS plumbing |
|
||||
| SPA shell + controllers + schema + native ops | `Admin` | Dual-surface IA |
|
||||
| Settings facade + runtime delegates | `Settings` | Single public settings API |
|
||||
| Auth, OAuth, captcha, moderation, email rollback | `Auth` | Identity & access |
|
||||
| User center/home/badges/level/metrics/notifications/follow | `User` | Account surface |
|
||||
| Credits, balance wallet, signin, invite, points-free | `Credits` | Points + cash wallet |
|
||||
| Download tokens/state, content pay, VIP, visibility | `Content` | Post-centric paid content |
|
||||
| Topic pay, plate follow pay | `Forum` | Forum SKUs (not generic content pay) |
|
||||
| Orders, gateways, coupon, charge-card, revenue, creator-revenue, withdrawal, rebate, discount, after-sale, shipping, wechat-notify | `Payment` | Commerce + settlement |
|
||||
| Shop services/meta/reviews | `Shop` | Product catalog / cart |
|
||||
| SMS stack | `Sms` | Messaging channel |
|
||||
| AI runtime (admin AI controller stays in `Admin`) | `Ai` | Generation helpers |
|
||||
| Message, private message, site notice, report center | `Messages` | In-site messaging |
|
||||
| MeiliSearch, search-push, ip-geo, content-audit, api-audit | `Extensions` | Optional integrations |
|
||||
| Widgets + registry | `Widgets` | WP widgets |
|
||||
| Inline style / custom code / loading overlay | `Frontend` | Asset render helpers |
|
||||
|
||||
### Rules
|
||||
- Traits live next to owner: `{domain}/{slug}-traits/`.
|
||||
- Loader: manual `require_once` in `inc/bootstrap.php` only; traits before shells.
|
||||
- Do not move `topic-pay` / `plate-follow-pay` into `content/` without updating this ADR.
|
||||
- `creator-revenue` and `wechat-notify` stay under `payment/`.
|
||||
### PSR-4 layout
|
||||
|
||||
- Composer: `"AKSRT\\": "src/AKSRT/"`
|
||||
- Namespace `AKSRT\{Domain}\…` ↔ path `src/AKSRT/{Domain}/…`
|
||||
- One type per file; StudlyCaps filename = short class/trait/interface name
|
||||
- Nested segments: `Admin\Schema`, `Admin\Native`, `Payment\Gateways`, `Admin\Schema\PostList`
|
||||
- OAuth stays under `Auth` (`AKSRT\Auth\OAuth`) — no separate `oauth/` tree
|
||||
- Do not move `TopicPay` / `PlateFollowPay` into `Content` without updating this ADR
|
||||
- `CreatorRevenue` and `WeChatNotify` stay under `Payment`
|
||||
|
||||
### Loader
|
||||
|
||||
1. `functions.php` loads `vendor/autoload.php` (Composer: third-party + theme PSR-4)
|
||||
2. `inc/bootstrap.php` loads helpers + procedural modules (`inc/modules/*`) + core-hooks only
|
||||
3. Singleton `init()` remains in `functions.php` using FQCNs
|
||||
|
||||
### Procedural (not PSR-4)
|
||||
|
||||
- `inc/helpers/*` function libraries
|
||||
- `inc/modules/*` (captcha, user-hub/parts, user-notifications, widgets-register, …)
|
||||
- `inc/core-hooks.php` (+ parts)
|
||||
|
||||
### Map tooling
|
||||
|
||||
- `php tools/build-psr4-map.php --write` — inventory / map under `tools/psr4-map/`
|
||||
- Migration helpers under `tools/psr4-*.php` (historical; re-run only with care)
|
||||
|
||||
## Out of scope
|
||||
PSR-4 class namespaces; class renames.
|
||||
|
||||
- Dual-read `class_alias` shims for old `AKSRT_*` global names (rewrite references instead)
|
||||
- Converting all helpers to classes
|
||||
|
||||
@@ -43,16 +43,16 @@ function collect_php_schema_sections(string $themeRoot): array {
|
||||
|
||||
// Primary domain builders.
|
||||
$primary = [
|
||||
'global' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-global.php',
|
||||
'page_display' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php',
|
||||
'post_list' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php',
|
||||
'permissions' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php',
|
||||
'users' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-users.php',
|
||||
'payment' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php',
|
||||
'extensions' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-extensions.php',
|
||||
'tools' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-tools.php',
|
||||
'shop' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-shop.php',
|
||||
'forum' => $themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-forum.php',
|
||||
'global' => $themeRoot . '/src/AKSRT/Admin/Schema/GlobalSchema.php',
|
||||
'page_display' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaPageDisplay.php',
|
||||
'post_list' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaPostList.php',
|
||||
'permissions' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaPermissions.php',
|
||||
'users' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaUsers.php',
|
||||
'payment' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaPayment.php',
|
||||
'extensions' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaExtensions.php',
|
||||
'tools' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaTools.php',
|
||||
'shop' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaShop.php',
|
||||
'forum' => $themeRoot . '/src/AKSRT/Admin/Schema/SchemaForum.php',
|
||||
];
|
||||
|
||||
foreach ($primary as $domain => $file) {
|
||||
@@ -75,7 +75,7 @@ function collect_php_schema_sections(string $themeRoot): array {
|
||||
}
|
||||
|
||||
// Leaf builders that return a single section with 'key' => 'section-id'
|
||||
$leafFiles = glob($themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-*.php') ?: [];
|
||||
$leafFiles = array_merge(glob($themeRoot . '/src/AKSRT/Admin/Schema/*.php') ?: [], glob($themeRoot . '/src/AKSRT/Admin/Schema/*/*.php') ?: []);
|
||||
foreach ($leafFiles as $file) {
|
||||
$src = file_get_contents($file);
|
||||
if ($src === false) {
|
||||
@@ -92,7 +92,7 @@ function collect_php_schema_sections(string $themeRoot): array {
|
||||
$section = $km[1];
|
||||
// Infer domain from filename: class-aksrt-admin-schema-{domain}-{section}.php
|
||||
$base = basename($file, '.php');
|
||||
$base = preg_replace('/^class-aksrt-admin-schema-/', '', $base);
|
||||
$base = preg_replace('/^(class-aksrt-admin-schema-|Schema)/', '', $base);
|
||||
$parts = explode('-', $base);
|
||||
// domain may be multi-token (page_display is page-display in menus but page_display in PHP).
|
||||
// Prefer matching known domains by prefix.
|
||||
@@ -105,8 +105,17 @@ function collect_php_schema_sections(string $themeRoot): array {
|
||||
}
|
||||
}
|
||||
if ($domain === null) {
|
||||
// Fallback: first token.
|
||||
$domain = str_replace('-', '_', $parts[0] ?? '');
|
||||
// Fallback: first token / PSR-4 Schema* short names.
|
||||
if (str_contains($base, 'PostList')) {
|
||||
$domain = 'post_list';
|
||||
} else {
|
||||
$domain = str_replace('-', '_', $parts[0] ?? '');
|
||||
}
|
||||
}
|
||||
// Leaf under Schema/PostList/ with key list → post_list/list
|
||||
if ($domain === 'post_list' && $section === 'list') {
|
||||
$register($domain, $section, $file);
|
||||
continue;
|
||||
}
|
||||
$register($domain, $section, $file);
|
||||
}
|
||||
@@ -160,7 +169,7 @@ function collect_enum_maps(string $themeRoot): array {
|
||||
$php = [];
|
||||
$js = [];
|
||||
|
||||
$phpFiles = glob($themeRoot . '/inc/classes/admin/schema/class-aksrt-admin-schema-*.php') ?: [];
|
||||
$phpFiles = array_merge(glob($themeRoot . '/src/AKSRT/Admin/Schema/*.php') ?: [], glob($themeRoot . '/src/AKSRT/Admin/Schema/*/*.php') ?: []);
|
||||
foreach ($phpFiles as $file) {
|
||||
$src = file_get_contents($file);
|
||||
if ($src === false) {
|
||||
@@ -230,9 +239,16 @@ function collect_enum_maps(string $themeRoot): array {
|
||||
|
||||
function collect_missing_this_callbacks(string $themeRoot): array {
|
||||
$issues = [];
|
||||
$adminRoot = $themeRoot . '/inc/classes/admin';
|
||||
$adminRoot = $themeRoot . '/src/AKSRT/Admin';
|
||||
if (!is_dir($adminRoot)) {
|
||||
$adminRoot = $themeRoot . '/inc/classes/admin';
|
||||
}
|
||||
$methodIndex = [];
|
||||
|
||||
if (!is_dir($adminRoot)) {
|
||||
return $issues;
|
||||
}
|
||||
|
||||
$allPhp = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($adminRoot, FilesystemIterator::SKIP_DOTS));
|
||||
foreach ($allPhp as $file) {
|
||||
if ($file->getExtension() !== 'php') {
|
||||
|
||||
@@ -0,0 +1,373 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
* Build PSR-4 class map for AKSRT theme classes.
|
||||
*
|
||||
* Usage: php tools/build-psr4-map.php [--write]
|
||||
* Writes tools/psr4-map/map.json when --write is passed.
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$root = dirname(__DIR__);
|
||||
$write = in_array('--write', $argv, true);
|
||||
|
||||
/**
|
||||
* Domain folder (lowercase) → namespace segment.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
const DOMAIN_NS = [
|
||||
'admin' => 'Admin',
|
||||
'ai' => 'Ai',
|
||||
'auth' => 'Auth',
|
||||
'content' => 'Content',
|
||||
'core' => 'Core',
|
||||
'credits' => 'Credits',
|
||||
'extensions' => 'Extensions',
|
||||
'forum' => 'Forum',
|
||||
'frontend' => 'Frontend',
|
||||
'messages' => 'Messages',
|
||||
'payment' => 'Payment',
|
||||
'settings' => 'Settings',
|
||||
'shop' => 'Shop',
|
||||
'sms' => 'Sms',
|
||||
'user' => 'User',
|
||||
'widgets' => 'Widgets',
|
||||
];
|
||||
|
||||
/**
|
||||
* Explicit short-name overrides (old global → short class under domain).
|
||||
* Used for reserved words / clarity.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
const SHORT_OVERRIDES = [
|
||||
'AKSRT_Admin_Schema_Global' => 'GlobalSchema',
|
||||
'AKSRT_Payment_Gateway_Interface' => 'PaymentGatewayInterface',
|
||||
'AKSRT_SMS_Provider' => 'SmsProviderInterface',
|
||||
// Preserve brand/acronym casing in short names after segment join.
|
||||
'AKSRT_OAuth' => 'OAuth',
|
||||
'AKSRT_OAuth_Part_1' => 'OAuthPart1',
|
||||
'AKSRT_OAuth_Part_2' => 'OAuthPart2',
|
||||
'AKSRT_OAuth_Proxy_Client' => 'OAuthProxyClient',
|
||||
'AKSRT_OAuth_Proxy_Server' => 'OAuthProxyServer',
|
||||
'AKSRT_WeChat_Notify' => 'WeChatNotify',
|
||||
'AKSRT_WechatPay_Gateway' => 'WechatPayGateway',
|
||||
'AKSRT_PayPal_Gateway' => 'PayPalGateway',
|
||||
'AKSRT_MeiliSearch' => 'MeiliSearch',
|
||||
'AKSRT_Custom_HTML_Gap_Widget' => 'CustomHtmlGapWidget',
|
||||
];
|
||||
|
||||
/**
|
||||
* Forced domain for helpers moved into the tree.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
const HELPER_DOMAIN = [
|
||||
'AKSRT_Nav_Walker' => 'Frontend',
|
||||
'AKSRT_Shortcodes' => 'Core',
|
||||
'AKSRT_Domain_Model' => 'Core',
|
||||
];
|
||||
|
||||
/**
|
||||
* Convert AKSRT_Foo_Bar_2 → FooBar2 (preserve short ALLCAPS tokens like AI, SEO, SMS, DB, IP, API).
|
||||
*/
|
||||
function aksrt_to_short(string $old): string {
|
||||
if (isset(SHORT_OVERRIDES[$old])) {
|
||||
return SHORT_OVERRIDES[$old];
|
||||
}
|
||||
if (!str_starts_with($old, 'AKSRT_')) {
|
||||
throw new RuntimeException("Unexpected name: {$old}");
|
||||
}
|
||||
$parts = explode('_', substr($old, 6));
|
||||
$out = '';
|
||||
foreach ($parts as $p) {
|
||||
if ($p === '') {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^\d+$/', $p)) {
|
||||
$out .= $p;
|
||||
continue;
|
||||
}
|
||||
// Keep short uppercase acronyms as-is.
|
||||
if (preg_match('/^[A-Z]{2,5}$/', $p)) {
|
||||
$out .= $p;
|
||||
continue;
|
||||
}
|
||||
$out .= ucfirst(strtolower($p));
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Nested path segments under domain → extra namespace segments.
|
||||
*
|
||||
* @return list<string>
|
||||
*/
|
||||
function aksrt_path_ns_segments(string $rel_under_domain): array {
|
||||
$rel_under_domain = str_replace('\\', '/', $rel_under_domain);
|
||||
if ($rel_under_domain === '' || $rel_under_domain === '.') {
|
||||
return [];
|
||||
}
|
||||
$parts = array_values(array_filter(explode('/', $rel_under_domain), static fn($p) => $p !== '' && $p !== '.'));
|
||||
// Drop filename.
|
||||
array_pop($parts);
|
||||
$segs = [];
|
||||
foreach ($parts as $p) {
|
||||
// Trait dump folders → no extra NS (class short name already unique).
|
||||
if (str_ends_with($p, '-traits') || $p === 'user-parts') {
|
||||
continue;
|
||||
}
|
||||
if ($p === 'gateways') {
|
||||
$segs[] = 'Gateways';
|
||||
continue;
|
||||
}
|
||||
if ($p === 'schema') {
|
||||
$segs[] = 'Schema';
|
||||
continue;
|
||||
}
|
||||
if ($p === 'post-list') {
|
||||
$segs[] = 'PostList';
|
||||
continue;
|
||||
}
|
||||
if ($p === 'native') {
|
||||
$segs[] = 'Native';
|
||||
continue;
|
||||
}
|
||||
// Unknown nested folder: PascalCase the slug.
|
||||
$segs[] = str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $p)));
|
||||
}
|
||||
return $segs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scan PHP files for top-level type declarations.
|
||||
*
|
||||
* @return list<array{kind:string,name:string,path:string}>
|
||||
*/
|
||||
function aksrt_scan_types(string $root): array {
|
||||
$out = [];
|
||||
$dirs = [
|
||||
$root . '/inc/classes',
|
||||
];
|
||||
$extra_files = [
|
||||
$root . '/inc/helpers/class-aksrt-nav-walker.php',
|
||||
$root . '/inc/helpers/aksrt-shortcodes.php',
|
||||
$root . '/inc/helpers/aksrt-domain-model.php',
|
||||
];
|
||||
|
||||
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirs[0]));
|
||||
$files = [];
|
||||
foreach ($rii as $file) {
|
||||
if ($file->isFile() && str_ends_with($file->getFilename(), '.php')) {
|
||||
$files[] = $file->getPathname();
|
||||
}
|
||||
}
|
||||
foreach ($extra_files as $f) {
|
||||
if (is_file($f)) {
|
||||
$files[] = $f;
|
||||
}
|
||||
}
|
||||
|
||||
$re = '/^(?:abstract\s+|final\s+)?(class|trait|interface)\s+(\w+)/m';
|
||||
foreach ($files as $abs) {
|
||||
$rel = str_replace('\\', '/', substr($abs, strlen($root) + 1));
|
||||
$text = file_get_contents($abs);
|
||||
if ($text === false) {
|
||||
continue;
|
||||
}
|
||||
if (!preg_match_all($re, $text, $m, PREG_SET_ORDER)) {
|
||||
$out[] = [
|
||||
'kind' => 'procedural',
|
||||
'name' => null,
|
||||
'path' => $rel,
|
||||
];
|
||||
continue;
|
||||
}
|
||||
foreach ($m as $match) {
|
||||
$out[] = [
|
||||
'kind' => $match[1],
|
||||
'name' => $match[2],
|
||||
'path' => $rel,
|
||||
];
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<array{kind:string,name:?string,path:string}> $scanned
|
||||
* @return array{entries: list<array<string,mixed>>, procedural: list<string>, errors: list<string>}
|
||||
*/
|
||||
function aksrt_build_map(array $scanned, string $root): array {
|
||||
$entries = [];
|
||||
$procedural = [];
|
||||
$errors = [];
|
||||
$by_old = [];
|
||||
|
||||
foreach ($scanned as $row) {
|
||||
if ($row['kind'] === 'procedural') {
|
||||
$procedural[] = $row['path'];
|
||||
continue;
|
||||
}
|
||||
$old = $row['name'];
|
||||
$path = $row['path'];
|
||||
$kind = $row['kind'];
|
||||
|
||||
if (!str_starts_with($old, 'AKSRT_') && $old !== 'AKSRT') {
|
||||
$errors[] = "Non-AKSRT type {$old} in {$path}";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Domain
|
||||
$domain_ns = null;
|
||||
$rel_under = '';
|
||||
if (str_starts_with($path, 'inc/helpers/')) {
|
||||
$domain_ns = HELPER_DOMAIN[$old] ?? 'Core';
|
||||
$rel_under = '';
|
||||
} elseif (preg_match('#^inc/classes/([^/]+)(?:/(.*))?$#', $path, $pm)) {
|
||||
$dom = $pm[1];
|
||||
if (!isset(DOMAIN_NS[$dom])) {
|
||||
$errors[] = "Unknown domain folder {$dom} for {$path}";
|
||||
continue;
|
||||
}
|
||||
$domain_ns = DOMAIN_NS[$dom];
|
||||
$rel_under = $pm[2] ?? '';
|
||||
} else {
|
||||
$errors[] = "Unmapped path {$path}";
|
||||
continue;
|
||||
}
|
||||
|
||||
$extra = aksrt_path_ns_segments($rel_under);
|
||||
$short = aksrt_to_short($old);
|
||||
|
||||
// Strip redundant leading domain token from short name when not emptying it.
|
||||
// AKSRT_Admin_AI_Controller → AdminAIController → AIController under Admin\.
|
||||
if (str_starts_with($short, $domain_ns) && strlen($short) > strlen($domain_ns)) {
|
||||
$rest = substr($short, strlen($domain_ns));
|
||||
if ($rest !== '' && preg_match('/^[A-Z]/', $rest)) {
|
||||
$short = $rest;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-4 root: src/AKSRT/ (avoids Windows case-collision with inc/classes/admin vs Admin).
|
||||
$ns_parts = array_merge(['AKSRT', $domain_ns], $extra);
|
||||
$fqcn = implode('\\', $ns_parts) . '\\' . $short;
|
||||
$new_rel = 'src/AKSRT/' . implode('/', array_slice($ns_parts, 1)) . '/' . $short . '.php';
|
||||
|
||||
$entry = [
|
||||
'kind' => $kind,
|
||||
'old' => $old,
|
||||
'new_fqcn' => $fqcn,
|
||||
'namespace' => implode('\\', $ns_parts),
|
||||
'short' => $short,
|
||||
'old_path' => $path,
|
||||
'new_path' => $new_rel,
|
||||
'multi_source' => false,
|
||||
];
|
||||
|
||||
if (isset($by_old[$old])) {
|
||||
$errors[] = "Duplicate old name {$old}: {$by_old[$old]['old_path']} vs {$path}";
|
||||
}
|
||||
$by_old[$old] = $entry;
|
||||
$entries[] = $entry;
|
||||
}
|
||||
|
||||
// Mark multi-decl sources.
|
||||
$by_path = [];
|
||||
foreach ($entries as $i => $e) {
|
||||
$by_path[$e['old_path']][] = $i;
|
||||
}
|
||||
foreach ($by_path as $path => $idxs) {
|
||||
if (count($idxs) > 1) {
|
||||
foreach ($idxs as $i) {
|
||||
$entries[$i]['multi_source'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Detect FQCN collisions.
|
||||
$by_new = [];
|
||||
foreach ($entries as $e) {
|
||||
$k = $e['new_fqcn'];
|
||||
if (isset($by_new[$k])) {
|
||||
$errors[] = "FQCN collision {$k}: {$by_new[$k]} vs {$e['old']}";
|
||||
}
|
||||
$by_new[$k] = $e['old'];
|
||||
}
|
||||
|
||||
// Detect new_path collisions (two types → same file).
|
||||
$by_new_path = [];
|
||||
foreach ($entries as $e) {
|
||||
$k = $e['new_path'];
|
||||
if (isset($by_new_path[$k])) {
|
||||
$errors[] = "Path collision {$k}: {$by_new_path[$k]} vs {$e['old']}";
|
||||
}
|
||||
$by_new_path[$k] = $e['old'];
|
||||
}
|
||||
|
||||
return [
|
||||
'entries' => $entries,
|
||||
'procedural' => $procedural,
|
||||
'errors' => $errors,
|
||||
'by_old' => $by_old,
|
||||
];
|
||||
}
|
||||
|
||||
$scanned = aksrt_scan_types($root);
|
||||
$map = aksrt_build_map($scanned, $root);
|
||||
|
||||
$summary = [
|
||||
'generated_at' => gmdate('c'),
|
||||
'counts' => [
|
||||
'types' => count($map['entries']),
|
||||
'classes' => count(array_filter($map['entries'], static fn($e) => $e['kind'] === 'class')),
|
||||
'traits' => count(array_filter($map['entries'], static fn($e) => $e['kind'] === 'trait')),
|
||||
'interfaces' => count(array_filter($map['entries'], static fn($e) => $e['kind'] === 'interface')),
|
||||
'procedural_files' => count($map['procedural']),
|
||||
'multi_source_types' => count(array_filter($map['entries'], static fn($e) => $e['multi_source'])),
|
||||
'errors' => count($map['errors']),
|
||||
],
|
||||
'procedural' => $map['procedural'],
|
||||
'errors' => $map['errors'],
|
||||
'entries' => $map['entries'],
|
||||
];
|
||||
|
||||
echo "Types: {$summary['counts']['types']} (class={$summary['counts']['classes']} trait={$summary['counts']['traits']} iface={$summary['counts']['interfaces']})\n";
|
||||
echo "Procedural files: {$summary['counts']['procedural_files']}\n";
|
||||
echo "Multi-source types: {$summary['counts']['multi_source_types']}\n";
|
||||
echo "Errors: {$summary['counts']['errors']}\n";
|
||||
if ($map['errors']) {
|
||||
foreach ($map['errors'] as $err) {
|
||||
echo " ERROR: {$err}\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Sample print.
|
||||
foreach (array_slice($map['entries'], 0, 8) as $e) {
|
||||
echo " {$e['old']} => {$e['new_fqcn']}\n {$e['old_path']} -> {$e['new_path']}\n";
|
||||
}
|
||||
|
||||
if ($write) {
|
||||
$dir = $root . '/tools/psr4-map';
|
||||
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
|
||||
fwrite(STDERR, "Cannot create {$dir}\n");
|
||||
exit(1);
|
||||
}
|
||||
$file = $dir . '/map.json';
|
||||
file_put_contents($file, json_encode($summary, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n");
|
||||
// Also CSV for quick review.
|
||||
$csv = $dir . '/map.csv';
|
||||
$fh = fopen($csv, 'wb');
|
||||
fputcsv($fh, ['kind', 'old', 'new_fqcn', 'old_path', 'new_path', 'multi_source'], ',', '"', '\\');
|
||||
foreach ($map['entries'] as $e) {
|
||||
fputcsv($fh, [$e['kind'], $e['old'], $e['new_fqcn'], $e['old_path'], $e['new_path'], $e['multi_source'] ? '1' : '0'], ',', '"', '\\');
|
||||
}
|
||||
fclose($fh);
|
||||
echo "Wrote {$file} and {$csv}\n";
|
||||
}
|
||||
|
||||
exit($map['errors'] ? 1 : 0);
|
||||
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
/**
|
||||
* Robust multi-file splitter for PSR-4.
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
$root = dirname(__DIR__);
|
||||
$map = json_decode((string) file_get_contents($root . '/tools/psr4-map/map.json'), true, 512, JSON_THROW_ON_ERROR);
|
||||
$by_old = [];
|
||||
foreach ($map['entries'] as $e) {
|
||||
$by_old[$e['old']] = $e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all top-level type declarations with start offsets.
|
||||
*
|
||||
* @return list<array{name:string,kind:string,start:int,decl:int}>
|
||||
*/
|
||||
function list_types(string $text): array {
|
||||
$out = [];
|
||||
if (!preg_match_all(
|
||||
'/^(?:abstract\s+|final\s+)?(class|trait|interface)\s+(\w+)/m',
|
||||
$text,
|
||||
$m,
|
||||
PREG_SET_ORDER | PREG_OFFSET_CAPTURE
|
||||
)) {
|
||||
return [];
|
||||
}
|
||||
foreach ($m as $match) {
|
||||
$decl = (int) $match[0][1];
|
||||
$kind = $match[1][0];
|
||||
$name = $match[2][0];
|
||||
// Include preceding docblock.
|
||||
$before = substr($text, 0, $decl);
|
||||
$start = $decl;
|
||||
if (preg_match('/(?:\n|^)(\s*\/\*\*[\s\S]*?\*\/\s*)\z/', $before, $dm, PREG_OFFSET_CAPTURE)) {
|
||||
$start = (int) $dm[1][1];
|
||||
}
|
||||
$out[] = ['name' => $name, 'kind' => $kind, 'start' => $start, 'decl' => $decl];
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
function extract_by_index(string $text, array $types, int $idx): string {
|
||||
$start = $types[$idx]['start'];
|
||||
// End is start of next type or EOF (but need end of braces of this type).
|
||||
$brace = strpos($text, '{', $types[$idx]['decl']);
|
||||
$len = strlen($text);
|
||||
$depth = 0;
|
||||
$in_str = false;
|
||||
$str_q = '';
|
||||
$in_line = false;
|
||||
$in_block = false;
|
||||
$escape = false;
|
||||
for ($i = $brace; $i < $len; $i++) {
|
||||
$ch = $text[$i];
|
||||
$next = $i + 1 < $len ? $text[$i + 1] : '';
|
||||
if ($in_line) {
|
||||
if ($ch === "\n") {
|
||||
$in_line = false;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($in_block) {
|
||||
if ($ch === '*' && $next === '/') {
|
||||
$in_block = false;
|
||||
$i++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($in_str) {
|
||||
if ($escape) {
|
||||
$escape = false;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '\\') {
|
||||
$escape = true;
|
||||
continue;
|
||||
}
|
||||
if ($ch === $str_q) {
|
||||
$in_str = false;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($ch === '/' && $next === '/') {
|
||||
$in_line = true;
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '/' && $next === '*') {
|
||||
$in_block = true;
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '"' || $ch === "'") {
|
||||
$in_str = true;
|
||||
$str_q = $ch;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '{') {
|
||||
$depth++;
|
||||
} elseif ($ch === '}') {
|
||||
$depth--;
|
||||
if ($depth === 0) {
|
||||
return substr($text, $start, $i - $start + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new RuntimeException('brace match failed for ' . $types[$idx]['name']);
|
||||
}
|
||||
|
||||
$rep = [];
|
||||
foreach ($map['entries'] as $e) {
|
||||
$rep[$e['old']] = '\\' . $e['new_fqcn'];
|
||||
}
|
||||
$rep['AKSRT_Creator_Revenue'] = '\\AKSRT\\Payment\\CreatorRevenue';
|
||||
uksort($rep, static fn($a, $b) => strlen($b) <=> strlen($a));
|
||||
|
||||
function rewrite_refs(string $code, array $rep): string {
|
||||
$preserve = [
|
||||
'AKSRT_DIR', 'AKSRT_URI', 'AKSRT_VERSION', 'AKSRT_NO_EMAIL_GATE',
|
||||
'AKSRT_PAY_TYPE_NO', 'AKSRT_PAY_TYPE_READING', 'AKSRT_PAY_TYPE_DOWNLOAD',
|
||||
'AKSRT_PAY_TYPE_GALLERY', 'AKSRT_PAY_TYPE_VIDEO', 'AKSRT_PAY_TYPE_VIP',
|
||||
];
|
||||
foreach ($preserve as $i => $tok) {
|
||||
$code = str_replace($tok, "\0P{$i}\0", $code);
|
||||
}
|
||||
$pattern = '/\b(' . implode('|', array_map(static fn($k) => preg_quote($k, '/'), array_keys($rep))) . ')\b/';
|
||||
$code = preg_replace_callback($pattern, static fn($m) => $rep[$m[1]] ?? $m[1], $code) ?? $code;
|
||||
foreach ($preserve as $i => $tok) {
|
||||
$code = str_replace("\0P{$i}\0", $tok, $code);
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
$files = [
|
||||
'inc/classes/payment/class-aksrt-payment-gateway.php',
|
||||
'inc/classes/widgets/class-aksrt-forum-widgets.php',
|
||||
'inc/classes/widgets/class-aksrt-home-widgets.php',
|
||||
'inc/classes/widgets/class-aksrt-shop-widgets.php',
|
||||
'inc/classes/widgets/class-aksrt-widgets-batch1.php',
|
||||
'inc/classes/widgets/class-aksrt-widgets-new.php',
|
||||
'inc/classes/widgets/class-aksrt-widgets-original.php',
|
||||
];
|
||||
|
||||
foreach ($files as $git_path) {
|
||||
$text = shell_exec('git -C ' . escapeshellarg($root) . ' show HEAD:' . escapeshellarg($git_path));
|
||||
if (!$text) {
|
||||
fwrite(STDERR, "git show fail $git_path\n");
|
||||
continue;
|
||||
}
|
||||
$types = list_types($text);
|
||||
echo $git_path, ' has ', count($types), " types: ", implode(', ', array_column($types, 'name')), "\n";
|
||||
foreach ($types as $idx => $info) {
|
||||
$old = $info['name'];
|
||||
if (!isset($by_old[$old])) {
|
||||
fwrite(STDERR, " unmapped $old\n");
|
||||
continue;
|
||||
}
|
||||
$entry = $by_old[$old];
|
||||
$chunk = extract_by_index($text, $types, $idx);
|
||||
// Rename: only the declaration line's name.
|
||||
$chunk = preg_replace(
|
||||
'/^((?:abstract\s+|final\s+)?' . preg_quote($info['kind'], '/') . '\s+)' . preg_quote($old, '/') . '\b/m',
|
||||
'$1' . $entry['short'],
|
||||
$chunk,
|
||||
1
|
||||
);
|
||||
$chunk = rewrite_refs($chunk, $rep);
|
||||
$ns = $entry['namespace'];
|
||||
// Shorten same-namespace refs BUT not if it would re-break declaration - declaration already short.
|
||||
$chunk = preg_replace('/\\\\' . preg_quote($ns, '/') . '\\\\(\w+)/', '$1', $chunk) ?? $chunk;
|
||||
// Global WP types.
|
||||
foreach (['WP_Widget', 'WP_REST_Request', 'WP_REST_Response', 'WP_Error', 'WP_Post', 'WP_User', 'WP_Query'] as $g) {
|
||||
$chunk = preg_replace('/(?<!\\\\)\b' . $g . '\b/', '\\' . $g, $chunk) ?? $chunk;
|
||||
}
|
||||
$chunk = str_replace('\\\\', '\\', $chunk);
|
||||
|
||||
$out = "<?php\n/**\n * @package AKSRT\n */\n\nnamespace {$ns};\n\ndefined('ABSPATH') || exit;\n\n" . rtrim($chunk) . "\n";
|
||||
// Verify
|
||||
if (!preg_match('/\b' . preg_quote($info['kind'], '/') . '\s+' . preg_quote($entry['short'], '/') . '\b/', $out)) {
|
||||
fwrite(STDERR, " VERIFY FAIL $old -> {$entry['short']}\n");
|
||||
fwrite(STDERR, " head: " . substr($out, 0, 250) . "\n");
|
||||
continue;
|
||||
}
|
||||
$path = $root . '/' . $entry['new_path'];
|
||||
if (!is_dir(dirname($path))) {
|
||||
mkdir(dirname($path), 0777, true);
|
||||
}
|
||||
file_put_contents($path, $out);
|
||||
echo " OK {$old} => {$entry['new_path']} (", strlen($out), " bytes)\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Globalize WP_* in all src files once more carefully
|
||||
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($root . '/src/AKSRT'));
|
||||
foreach ($rii as $f) {
|
||||
if (!$f->isFile() || !str_ends_with($f->getFilename(), '.php')) {
|
||||
continue;
|
||||
}
|
||||
$p = $f->getPathname();
|
||||
$t = (string) file_get_contents($p);
|
||||
$orig = $t;
|
||||
foreach (['WP_REST_Request', 'WP_REST_Response', 'WP_Error', 'WP_Post', 'WP_User', 'WP_Query', 'WP_Widget', 'WP_Admin_Bar', 'WP_HTTP_Response', 'WP_Term'] as $g) {
|
||||
// only when used as type/extends/new/catch - simple: bare WP_ not already escaped
|
||||
$t = preg_replace('/(?<!\\\\|[\w\\\\])' . preg_quote($g, '/') . '\b/', '\\' . $g, $t) ?? $t;
|
||||
}
|
||||
if ($t !== $orig) {
|
||||
file_put_contents($p, $t);
|
||||
}
|
||||
}
|
||||
|
||||
echo "done\n";
|
||||
@@ -0,0 +1,289 @@
|
||||
kind,old,new_fqcn,old_path,new_path,multi_source
|
||||
class,AKSRT_Admin_AI_Controller,"AKSRT\Admin\AIController",inc/classes/admin/class-aksrt-admin-ai-controller.php,src/AKSRT/Admin/AIController.php,0
|
||||
class,AKSRT_Admin_Comment_Controller,"AKSRT\Admin\CommentController",inc/classes/admin/class-aksrt-admin-comment-controller.php,src/AKSRT/Admin/CommentController.php,0
|
||||
class,AKSRT_Admin_Controller_Base,"AKSRT\Admin\ControllerBase",inc/classes/admin/class-aksrt-admin-controller-base.php,src/AKSRT/Admin/ControllerBase.php,0
|
||||
class,AKSRT_Admin_Extension_Controller,"AKSRT\Admin\ExtensionController",inc/classes/admin/class-aksrt-admin-extension-controller.php,src/AKSRT/Admin/ExtensionController.php,0
|
||||
class,AKSRT_Admin_Forum_Controller,"AKSRT\Admin\ForumController",inc/classes/admin/class-aksrt-admin-forum-controller.php,src/AKSRT/Admin/ForumController.php,0
|
||||
class,AKSRT_Admin_Global_Controller,"AKSRT\Admin\GlobalController",inc/classes/admin/class-aksrt-admin-global-controller.php,src/AKSRT/Admin/GlobalController.php,0
|
||||
class,AKSRT_Admin_Import_Export_Controller,"AKSRT\Admin\ImportExportController",inc/classes/admin/class-aksrt-admin-import-export-controller.php,src/AKSRT/Admin/ImportExportController.php,0
|
||||
class,AKSRT_Admin_Message_Controller,"AKSRT\Admin\MessageController",inc/classes/admin/class-aksrt-admin-message-controller.php,src/AKSRT/Admin/MessageController.php,0
|
||||
class,AKSRT_Admin_Page_Display_Controller,"AKSRT\Admin\PageDisplayController",inc/classes/admin/class-aksrt-admin-page-display-controller.php,src/AKSRT/Admin/PageDisplayController.php,0
|
||||
class,AKSRT_Admin_Payment_Controller,"AKSRT\Admin\PaymentController",inc/classes/admin/class-aksrt-admin-payment-controller.php,src/AKSRT/Admin/PaymentController.php,0
|
||||
class,AKSRT_Admin_Permissions_Controller,"AKSRT\Admin\PermissionsController",inc/classes/admin/class-aksrt-admin-permissions-controller.php,src/AKSRT/Admin/PermissionsController.php,0
|
||||
class,AKSRT_Admin_Post_List_Controller,"AKSRT\Admin\PostListController",inc/classes/admin/class-aksrt-admin-post-list-controller.php,src/AKSRT/Admin/PostListController.php,0
|
||||
class,AKSRT_Admin_Schema_Provider,"AKSRT\Admin\SchemaProvider",inc/classes/admin/class-aksrt-admin-schema-provider.php,src/AKSRT/Admin/SchemaProvider.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Coupon_Gateway_Operations,"AKSRT\Admin\ShopControllerCouponGatewayOperations",inc/classes/admin/class-aksrt-admin-shop-controller-coupon-gateway-operations.php,src/AKSRT/Admin/ShopControllerCouponGatewayOperations.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Frontend_Flow_Operations,"AKSRT\Admin\ShopControllerFrontendFlowOperations",inc/classes/admin/class-aksrt-admin-shop-controller-frontend-flow-operations.php,src/AKSRT/Admin/ShopControllerFrontendFlowOperations.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Fulfillment_Operations,"AKSRT\Admin\ShopControllerFulfillmentOperations",inc/classes/admin/class-aksrt-admin-shop-controller-fulfillment-operations.php,src/AKSRT/Admin/ShopControllerFulfillmentOperations.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Order_Operations,"AKSRT\Admin\ShopControllerOrderOperations",inc/classes/admin/class-aksrt-admin-shop-controller-order-operations.php,src/AKSRT/Admin/ShopControllerOrderOperations.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Product_Admin_Columns,"AKSRT\Admin\ShopControllerProductAdminColumns",inc/classes/admin/class-aksrt-admin-shop-controller-product-admin-columns.php,src/AKSRT/Admin/ShopControllerProductAdminColumns.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Product_Operations,"AKSRT\Admin\ShopControllerProductOperations",inc/classes/admin/class-aksrt-admin-shop-controller-product-operations.php,src/AKSRT/Admin/ShopControllerProductOperations.php,0
|
||||
trait,AKSRT_Admin_Shop_Controller_Variant_Export_Operations,"AKSRT\Admin\ShopControllerVariantExportOperations",inc/classes/admin/class-aksrt-admin-shop-controller-variant-export-operations.php,src/AKSRT/Admin/ShopControllerVariantExportOperations.php,0
|
||||
class,AKSRT_Admin_Shop_Controller,"AKSRT\Admin\ShopController",inc/classes/admin/class-aksrt-admin-shop-controller.php,src/AKSRT/Admin/ShopController.php,0
|
||||
class,AKSRT_Admin_Tools_Controller,"AKSRT\Admin\ToolsController",inc/classes/admin/class-aksrt-admin-tools-controller.php,src/AKSRT/Admin/ToolsController.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Auth_Phone_Operations,"AKSRT\Admin\UserControllerAuthPhoneOperations",inc/classes/admin/class-aksrt-admin-user-controller-auth-phone-operations.php,src/AKSRT/Admin/UserControllerAuthPhoneOperations.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Follow_Operations,"AKSRT\Admin\UserControllerFollowOperations",inc/classes/admin/class-aksrt-admin-user-controller-follow-operations.php,src/AKSRT/Admin/UserControllerFollowOperations.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Invite_Operations,"AKSRT\Admin\UserControllerInviteOperations",inc/classes/admin/class-aksrt-admin-user-controller-invite-operations.php,src/AKSRT/Admin/UserControllerInviteOperations.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Report_Operations,"AKSRT\Admin\UserControllerReportOperations",inc/classes/admin/class-aksrt-admin-user-controller-report-operations.php,src/AKSRT/Admin/UserControllerReportOperations.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Restriction_Operations,"AKSRT\Admin\UserControllerRestrictionOperations",inc/classes/admin/class-aksrt-admin-user-controller-restriction-operations.php,src/AKSRT/Admin/UserControllerRestrictionOperations.php,0
|
||||
trait,AKSRT_Admin_User_Controller_Verify_Integrations,"AKSRT\Admin\UserControllerVerifyIntegrations",inc/classes/admin/class-aksrt-admin-user-controller-verify-integrations.php,src/AKSRT/Admin/UserControllerVerifyIntegrations.php,0
|
||||
class,AKSRT_Admin_User_Controller,"AKSRT\Admin\UserController",inc/classes/admin/class-aksrt-admin-user-controller.php,src/AKSRT/Admin/UserController.php,0
|
||||
class,AKSRT_Admin,"AKSRT\Admin\Admin",inc/classes/admin/class-aksrt-admin.php,src/AKSRT/Admin/Admin.php,0
|
||||
trait,AKSRT_Admin_Forum_Controller_Part_1,"AKSRT\Admin\ForumControllerPart1",inc/classes/admin/forum-ctrl-traits/trait-aksrt-admin-forum-controller-part-1.php,src/AKSRT/Admin/ForumControllerPart1.php,0
|
||||
trait,AKSRT_Admin_Forum_Controller_Part_2,"AKSRT\Admin\ForumControllerPart2",inc/classes/admin/forum-ctrl-traits/trait-aksrt-admin-forum-controller-part-2.php,src/AKSRT/Admin/ForumControllerPart2.php,0
|
||||
trait,AKSRT_Admin_Global_Controller_Part_1,"AKSRT\Admin\GlobalControllerPart1",inc/classes/admin/global-ctrl-traits/trait-aksrt-admin-global-controller-part-1.php,src/AKSRT/Admin/GlobalControllerPart1.php,0
|
||||
trait,AKSRT_Admin_Global_Controller_Part_2,"AKSRT\Admin\GlobalControllerPart2",inc/classes/admin/global-ctrl-traits/trait-aksrt-admin-global-controller-part-2.php,src/AKSRT/Admin/GlobalControllerPart2.php,0
|
||||
trait,AKSRT_Admin_Homepage_Settings_Rest,"AKSRT\Admin\HomepageSettingsRest",inc/classes/admin/global-ctrl-traits/trait-aksrt-admin-homepage-settings-rest.php,src/AKSRT/Admin/HomepageSettingsRest.php,0
|
||||
trait,AKSRT_Admin_Import_Export_Controller_Part_1,"AKSRT\Admin\ImportExportControllerPart1",inc/classes/admin/import-export-traits/trait-aksrt-admin-import-export-controller-part-1.php,src/AKSRT/Admin/ImportExportControllerPart1.php,0
|
||||
trait,AKSRT_Admin_Import_Export_Controller_Part_2,"AKSRT\Admin\ImportExportControllerPart2",inc/classes/admin/import-export-traits/trait-aksrt-admin-import-export-controller-part-2.php,src/AKSRT/Admin/ImportExportControllerPart2.php,0
|
||||
class,AKSRT_Admin_Pay_After_Sale,"AKSRT\Admin\Native\PayAfterSale",inc/classes/admin/native/class-aksrt-admin-pay-after-sale.php,src/AKSRT/Admin/Native/PayAfterSale.php,0
|
||||
class,AKSRT_Admin_Pay_Charge_Cards,"AKSRT\Admin\Native\PayChargeCards",inc/classes/admin/native/class-aksrt-admin-pay-charge-cards.php,src/AKSRT/Admin/Native/PayChargeCards.php,0
|
||||
class,AKSRT_Admin_Pay_Coupons,"AKSRT\Admin\Native\PayCoupons",inc/classes/admin/native/class-aksrt-admin-pay-coupons.php,src/AKSRT/Admin/Native/PayCoupons.php,0
|
||||
class,AKSRT_Admin_Pay_Download_Logs,"AKSRT\Admin\Native\PayDownloadLogs",inc/classes/admin/native/class-aksrt-admin-pay-download-logs.php,src/AKSRT/Admin/Native/PayDownloadLogs.php,0
|
||||
class,AKSRT_Admin_Pay_Income,"AKSRT\Admin\Native\PayIncome",inc/classes/admin/native/class-aksrt-admin-pay-income.php,src/AKSRT/Admin/Native/PayIncome.php,0
|
||||
class,AKSRT_Admin_Pay_Menus,"AKSRT\Admin\Native\PayMenus",inc/classes/admin/native/class-aksrt-admin-pay-menus.php,src/AKSRT/Admin/Native/PayMenus.php,0
|
||||
class,AKSRT_Admin_Pay_Orders,"AKSRT\Admin\Native\PayOrders",inc/classes/admin/native/class-aksrt-admin-pay-orders.php,src/AKSRT/Admin/Native/PayOrders.php,0
|
||||
class,AKSRT_Admin_Pay_Products,"AKSRT\Admin\Native\PayProducts",inc/classes/admin/native/class-aksrt-admin-pay-products.php,src/AKSRT/Admin/Native/PayProducts.php,0
|
||||
class,AKSRT_Admin_Pay_Rebate,"AKSRT\Admin\Native\PayRebate",inc/classes/admin/native/class-aksrt-admin-pay-rebate.php,src/AKSRT/Admin/Native/PayRebate.php,0
|
||||
class,AKSRT_Admin_Pay_Shipping,"AKSRT\Admin\Native\PayShipping",inc/classes/admin/native/class-aksrt-admin-pay-shipping.php,src/AKSRT/Admin/Native/PayShipping.php,0
|
||||
class,AKSRT_Admin_Pay_Withdrawals,"AKSRT\Admin\Native\PayWithdrawals",inc/classes/admin/native/class-aksrt-admin-pay-withdrawals.php,src/AKSRT/Admin/Native/PayWithdrawals.php,0
|
||||
class,AKSRT_Admin_Users_Menus,"AKSRT\Admin\Native\UsersMenus",inc/classes/admin/native/class-aksrt-admin-users-menus.php,src/AKSRT/Admin/Native/UsersMenus.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions_Audit,"AKSRT\Admin\Schema\SchemaExtensionsAudit",inc/classes/admin/schema/class-aksrt-admin-schema-extensions-audit.php,src/AKSRT/Admin/Schema/SchemaExtensionsAudit.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions_Docs_Mode,"AKSRT\Admin\Schema\SchemaExtensionsDocsMode",inc/classes/admin/schema/class-aksrt-admin-schema-extensions-docs-mode.php,src/AKSRT/Admin/Schema/SchemaExtensionsDocsMode.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions_IP,"AKSRT\Admin\Schema\SchemaExtensionsIP",inc/classes/admin/schema/class-aksrt-admin-schema-extensions-ip.php,src/AKSRT/Admin/Schema/SchemaExtensionsIP.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions_Push,"AKSRT\Admin\Schema\SchemaExtensionsPush",inc/classes/admin/schema/class-aksrt-admin-schema-extensions-push.php,src/AKSRT/Admin/Schema/SchemaExtensionsPush.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions_Security,"AKSRT\Admin\Schema\SchemaExtensionsSecurity",inc/classes/admin/schema/class-aksrt-admin-schema-extensions-security.php,src/AKSRT/Admin/Schema/SchemaExtensionsSecurity.php,0
|
||||
class,AKSRT_Admin_Schema_Extensions,"AKSRT\Admin\Schema\SchemaExtensions",inc/classes/admin/schema/class-aksrt-admin-schema-extensions.php,src/AKSRT/Admin/Schema/SchemaExtensions.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Basic,"AKSRT\Admin\Schema\SchemaForumBasic",inc/classes/admin/schema/class-aksrt-admin-schema-forum-basic.php,src/AKSRT/Admin/Schema/SchemaForumBasic.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Board_Page,"AKSRT\Admin\Schema\SchemaForumBoardPage",inc/classes/admin/schema/class-aksrt-admin-schema-forum-board-page.php,src/AKSRT/Admin/Schema/SchemaForumBoardPage.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Credits,"AKSRT\Admin\Schema\SchemaForumCredits",inc/classes/admin/schema/class-aksrt-admin-schema-forum-credits.php,src/AKSRT/Admin/Schema/SchemaForumCredits.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Homepage,"AKSRT\Admin\Schema\SchemaForumHomepage",inc/classes/admin/schema/class-aksrt-admin-schema-forum-homepage.php,src/AKSRT/Admin/Schema/SchemaForumHomepage.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Names,"AKSRT\Admin\Schema\SchemaForumNames",inc/classes/admin/schema/class-aksrt-admin-schema-forum-names.php,src/AKSRT/Admin/Schema/SchemaForumNames.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Other,"AKSRT\Admin\Schema\SchemaForumOther",inc/classes/admin/schema/class-aksrt-admin-schema-forum-other.php,src/AKSRT/Admin/Schema/SchemaForumOther.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Permissions,"AKSRT\Admin\Schema\SchemaForumPermissions",inc/classes/admin/schema/class-aksrt-admin-schema-forum-permissions.php,src/AKSRT/Admin/Schema/SchemaForumPermissions.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Post_Page,"AKSRT\Admin\Schema\SchemaForumPostPage",inc/classes/admin/schema/class-aksrt-admin-schema-forum-post-page.php,src/AKSRT/Admin/Schema/SchemaForumPostPage.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Reply,"AKSRT\Admin\Schema\SchemaForumReply",inc/classes/admin/schema/class-aksrt-admin-schema-forum-reply.php,src/AKSRT/Admin/Schema/SchemaForumReply.php,0
|
||||
class,AKSRT_Admin_Schema_Forum_Upload,"AKSRT\Admin\Schema\SchemaForumUpload",inc/classes/admin/schema/class-aksrt-admin-schema-forum-upload.php,src/AKSRT/Admin/Schema/SchemaForumUpload.php,0
|
||||
class,AKSRT_Admin_Schema_Forum,"AKSRT\Admin\Schema\SchemaForum",inc/classes/admin/schema/class-aksrt-admin-schema-forum.php,src/AKSRT/Admin/Schema/SchemaForum.php,0
|
||||
class,AKSRT_Admin_Schema_Global,"AKSRT\Admin\Schema\GlobalSchema",inc/classes/admin/schema/class-aksrt-admin-schema-global.php,src/AKSRT/Admin/Schema/GlobalSchema.php,0
|
||||
class,AKSRT_Admin_Schema_Page_Display,"AKSRT\Admin\Schema\SchemaPageDisplay",inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php,src/AKSRT/Admin/Schema/SchemaPageDisplay.php,0
|
||||
class,AKSRT_Admin_Schema_Payment,"AKSRT\Admin\Schema\SchemaPayment",inc/classes/admin/schema/class-aksrt-admin-schema-payment.php,src/AKSRT/Admin/Schema/SchemaPayment.php,0
|
||||
class,AKSRT_Admin_Schema_Permissions,"AKSRT\Admin\Schema\SchemaPermissions",inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php,src/AKSRT/Admin/Schema/SchemaPermissions.php,0
|
||||
class,AKSRT_Admin_Schema_Post_List,"AKSRT\Admin\Schema\SchemaPostList",inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php,src/AKSRT/Admin/Schema/SchemaPostList.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Basic,"AKSRT\Admin\Schema\SchemaShopBasic",inc/classes/admin/schema/class-aksrt-admin-schema-shop-basic.php,src/AKSRT/Admin/Schema/SchemaShopBasic.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Contact,"AKSRT\Admin\Schema\SchemaShopContact",inc/classes/admin/schema/class-aksrt-admin-schema-shop-contact.php,src/AKSRT/Admin/Schema/SchemaShopContact.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_List,"AKSRT\Admin\Schema\SchemaShopList",inc/classes/admin/schema/class-aksrt-admin-schema-shop-list.php,src/AKSRT/Admin/Schema/SchemaShopList.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Product_Defaults,"AKSRT\Admin\Schema\SchemaShopProductDefaults",inc/classes/admin/schema/class-aksrt-admin-schema-shop-product-defaults.php,src/AKSRT/Admin/Schema/SchemaShopProductDefaults.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Shipping_Config,"AKSRT\Admin\Schema\SchemaShopShippingConfig",inc/classes/admin/schema/class-aksrt-admin-schema-shop-shipping-config.php,src/AKSRT/Admin/Schema/SchemaShopShippingConfig.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Single,"AKSRT\Admin\Schema\SchemaShopSingle",inc/classes/admin/schema/class-aksrt-admin-schema-shop-single.php,src/AKSRT/Admin/Schema/SchemaShopSingle.php,0
|
||||
class,AKSRT_Admin_Schema_Shop_Timing,"AKSRT\Admin\Schema\SchemaShopTiming",inc/classes/admin/schema/class-aksrt-admin-schema-shop-timing.php,src/AKSRT/Admin/Schema/SchemaShopTiming.php,0
|
||||
class,AKSRT_Admin_Schema_Shop,"AKSRT\Admin\Schema\SchemaShop",inc/classes/admin/schema/class-aksrt-admin-schema-shop.php,src/AKSRT/Admin/Schema/SchemaShop.php,0
|
||||
class,AKSRT_Admin_Schema_Tools_Backup,"AKSRT\Admin\Schema\SchemaToolsBackup",inc/classes/admin/schema/class-aksrt-admin-schema-tools-backup.php,src/AKSRT/Admin/Schema/SchemaToolsBackup.php,0
|
||||
class,AKSRT_Admin_Schema_Tools_Email_Rollback,"AKSRT\Admin\Schema\SchemaToolsEmailRollback",inc/classes/admin/schema/class-aksrt-admin-schema-tools-email-rollback.php,src/AKSRT/Admin/Schema/SchemaToolsEmailRollback.php,0
|
||||
class,AKSRT_Admin_Schema_Tools_Health,"AKSRT\Admin\Schema\SchemaToolsHealth",inc/classes/admin/schema/class-aksrt-admin-schema-tools-health.php,src/AKSRT/Admin/Schema/SchemaToolsHealth.php,0
|
||||
class,AKSRT_Admin_Schema_Tools_Import_Export,"AKSRT\Admin\Schema\SchemaToolsImportExport",inc/classes/admin/schema/class-aksrt-admin-schema-tools-import-export.php,src/AKSRT/Admin/Schema/SchemaToolsImportExport.php,0
|
||||
class,AKSRT_Admin_Schema_Tools,"AKSRT\Admin\Schema\SchemaTools",inc/classes/admin/schema/class-aksrt-admin-schema-tools.php,src/AKSRT/Admin/Schema/SchemaTools.php,0
|
||||
class,AKSRT_Admin_Schema_Users,"AKSRT\Admin\Schema\SchemaUsers",inc/classes/admin/schema/class-aksrt-admin-schema-users.php,src/AKSRT/Admin/Schema/SchemaUsers.php,0
|
||||
class,AKSRT_Admin_Schema_Post_List_List,"AKSRT\Admin\Schema\PostList\SchemaPostListList",inc/classes/admin/schema/post-list/class-aksrt-admin-schema-post-list-list.php,src/AKSRT/Admin/Schema/PostList/SchemaPostListList.php,0
|
||||
class,AKSRT_AI_Prompt,"AKSRT\Ai\AIPrompt",inc/classes/ai/class-aksrt-ai-prompt.php,src/AKSRT/Ai/AIPrompt.php,0
|
||||
class,AKSRT_AI_SEO,"AKSRT\Ai\AISEO",inc/classes/ai/class-aksrt-ai-seo.php,src/AKSRT/Ai/AISEO.php,0
|
||||
class,AKSRT_AI,"AKSRT\Ai\AI",inc/classes/ai/class-aksrt-ai.php,src/AKSRT/Ai/AI.php,0
|
||||
trait,AKSRT_Auth_Service_Part_1a,"AKSRT\Auth\ServicePart1a",inc/classes/auth/auth-traits/trait-aksrt-auth-service-part-1a.php,src/AKSRT/Auth/ServicePart1a.php,0
|
||||
trait,AKSRT_Auth_Service_Part_1b,"AKSRT\Auth\ServicePart1b",inc/classes/auth/auth-traits/trait-aksrt-auth-service-part-1b.php,src/AKSRT/Auth/ServicePart1b.php,0
|
||||
class,AKSRT_Auth_Email_Verification,"AKSRT\Auth\EmailVerification",inc/classes/auth/class-aksrt-auth-email-verification.php,src/AKSRT/Auth/EmailVerification.php,0
|
||||
class,AKSRT_Auth_Router,"AKSRT\Auth\Router",inc/classes/auth/class-aksrt-auth-router.php,src/AKSRT/Auth/Router.php,0
|
||||
class,AKSRT_Auth_Service,"AKSRT\Auth\Service",inc/classes/auth/class-aksrt-auth-service.php,src/AKSRT/Auth/Service.php,0
|
||||
class,AKSRT_Email_Rollback,"AKSRT\Auth\EmailRollback",inc/classes/auth/class-aksrt-email-rollback.php,src/AKSRT/Auth/EmailRollback.php,0
|
||||
class,AKSRT_Moderation,"AKSRT\Auth\Moderation",inc/classes/auth/class-aksrt-moderation.php,src/AKSRT/Auth/Moderation.php,0
|
||||
class,AKSRT_OAuth_Proxy_Client,"AKSRT\Auth\OAuthProxyClient",inc/classes/auth/class-aksrt-oauth-proxy-client.php,src/AKSRT/Auth/OAuthProxyClient.php,0
|
||||
class,AKSRT_OAuth_Proxy_Server,"AKSRT\Auth\OAuthProxyServer",inc/classes/auth/class-aksrt-oauth-proxy-server.php,src/AKSRT/Auth/OAuthProxyServer.php,0
|
||||
class,AKSRT_OAuth,"AKSRT\Auth\OAuth",inc/classes/auth/class-aksrt-oauth.php,src/AKSRT/Auth/OAuth.php,0
|
||||
trait,AKSRT_Moderation_Part_1,"AKSRT\Auth\ModerationPart1",inc/classes/auth/moderation-traits/trait-aksrt-moderation-part-1.php,src/AKSRT/Auth/ModerationPart1.php,0
|
||||
trait,AKSRT_Moderation_Part_2,"AKSRT\Auth\ModerationPart2",inc/classes/auth/moderation-traits/trait-aksrt-moderation-part-2.php,src/AKSRT/Auth/ModerationPart2.php,0
|
||||
trait,AKSRT_OAuth_Part_1,"AKSRT\Auth\OAuthPart1",inc/classes/auth/oauth-traits/trait-aksrt-oauth-part-1.php,src/AKSRT/Auth/OAuthPart1.php,0
|
||||
trait,AKSRT_OAuth_Part_2,"AKSRT\Auth\OAuthPart2",inc/classes/auth/oauth-traits/trait-aksrt-oauth-part-2.php,src/AKSRT/Auth/OAuthPart2.php,0
|
||||
class,AKSRT_Content_Pay,"AKSRT\Content\Pay",inc/classes/content/class-aksrt-content-pay.php,src/AKSRT/Content/Pay.php,0
|
||||
class,AKSRT_Content_Visibility,"AKSRT\Content\Visibility",inc/classes/content/class-aksrt-content-visibility.php,src/AKSRT/Content/Visibility.php,0
|
||||
class,AKSRT_Download_State,"AKSRT\Content\DownloadState",inc/classes/content/class-aksrt-download-state.php,src/AKSRT/Content/DownloadState.php,0
|
||||
class,AKSRT_Download,"AKSRT\Content\Download",inc/classes/content/class-aksrt-download.php,src/AKSRT/Content/Download.php,0
|
||||
class,AKSRT_Vip_Service,"AKSRT\Content\VipService",inc/classes/content/class-aksrt-vip-service.php,src/AKSRT/Content/VipService.php,0
|
||||
trait,AKSRT_Content_Pay_Helpers,"AKSRT\Content\PayHelpers",inc/classes/content/content-pay-traits/trait-aksrt-content-pay-helpers.php,src/AKSRT/Content/PayHelpers.php,0
|
||||
trait,AKSRT_Content_Pay_Orders,"AKSRT\Content\PayOrders",inc/classes/content/content-pay-traits/trait-aksrt-content-pay-orders.php,src/AKSRT/Content/PayOrders.php,0
|
||||
trait,AKSRT_Content_Pay_Rest,"AKSRT\Content\PayRest",inc/classes/content/content-pay-traits/trait-aksrt-content-pay-rest.php,src/AKSRT/Content/PayRest.php,0
|
||||
trait,AKSRT_Vip_Service_Packages,"AKSRT\Content\VipServicePackages",inc/classes/content/vip-service-traits/trait-aksrt-vip-service-packages.php,src/AKSRT/Content/VipServicePackages.php,0
|
||||
trait,AKSRT_Vip_Service_Purchase,"AKSRT\Content\VipServicePurchase",inc/classes/content/vip-service-traits/trait-aksrt-vip-service-purchase.php,src/AKSRT/Content/VipServicePurchase.php,0
|
||||
trait,AKSRT_Vip_Service_Rest,"AKSRT\Content\VipServiceRest",inc/classes/content/vip-service-traits/trait-aksrt-vip-service-rest.php,src/AKSRT/Content/VipServiceRest.php,0
|
||||
class,AKSRT_Category_Rewrite,"AKSRT\Core\CategoryRewrite",inc/classes/core/class-aksrt-category-rewrite.php,src/AKSRT/Core/CategoryRewrite.php,0
|
||||
class,AKSRT_Comment_Actions,"AKSRT\Core\CommentActions",inc/classes/core/class-aksrt-comment-actions.php,src/AKSRT/Core/CommentActions.php,0
|
||||
class,AKSRT_DB_Migrator,"AKSRT\Core\DBMigrator",inc/classes/core/class-aksrt-db-migrator.php,src/AKSRT/Core/DBMigrator.php,0
|
||||
class,AKSRT_Docs_Presenter,"AKSRT\Core\DocsPresenter",inc/classes/core/class-aksrt-docs-presenter.php,src/AKSRT/Core/DocsPresenter.php,0
|
||||
class,AKSRT_Front_Submit,"AKSRT\Core\FrontSubmit",inc/classes/core/class-aksrt-front-submit.php,src/AKSRT/Core/FrontSubmit.php,0
|
||||
class,AKSRT_Go_Redirect,"AKSRT\Core\GoRedirect",inc/classes/core/class-aksrt-go-redirect.php,src/AKSRT/Core/GoRedirect.php,0
|
||||
class,AKSRT_Home_Modules,"AKSRT\Core\HomeModules",inc/classes/core/class-aksrt-home-modules.php,src/AKSRT/Core/HomeModules.php,0
|
||||
class,AKSRT_Post_Meta_Box,"AKSRT\Core\PostMetaBox",inc/classes/core/class-aksrt-post-meta-box.php,src/AKSRT/Core/PostMetaBox.php,0
|
||||
class,AKSRT_Resource_Meta_Box,"AKSRT\Core\ResourceMetaBox",inc/classes/core/class-aksrt-resource-meta-box.php,src/AKSRT/Core/ResourceMetaBox.php,0
|
||||
class,AKSRT_Scripts,"AKSRT\Core\Scripts",inc/classes/core/class-aksrt-scripts.php,src/AKSRT/Core/Scripts.php,0
|
||||
class,AKSRT_SEO_Head,"AKSRT\Core\SEOHead",inc/classes/core/class-aksrt-seo-head.php,src/AKSRT/Core/SEOHead.php,0
|
||||
class,AKSRT_SEO_Meta_Box,"AKSRT\Core\SEOMetaBox",inc/classes/core/class-aksrt-seo-meta-box.php,src/AKSRT/Core/SEOMetaBox.php,0
|
||||
class,AKSRT_Setup,"AKSRT\Core\Setup",inc/classes/core/class-aksrt-setup.php,src/AKSRT/Core/Setup.php,0
|
||||
class,AKSRT_Stats_Tracker,"AKSRT\Core\StatsTracker",inc/classes/core/class-aksrt-stats-tracker.php,src/AKSRT/Core/StatsTracker.php,0
|
||||
class,AKSRT_Templates,"AKSRT\Core\Templates",inc/classes/core/class-aksrt-templates.php,src/AKSRT/Core/Templates.php,0
|
||||
class,AKSRT_Term_Meta,"AKSRT\Core\TermMeta",inc/classes/core/class-aksrt-term-meta.php,src/AKSRT/Core/TermMeta.php,0
|
||||
class,AKSRT_Update_Checker,"AKSRT\Core\UpdateChecker",inc/classes/core/class-aksrt-update-checker.php,src/AKSRT/Core/UpdateChecker.php,0
|
||||
trait,AKSRT_DB_Migrator_Part_2,"AKSRT\Core\DBMigratorPart2",inc/classes/core/db-traits/trait-aksrt-db-migrator-part-2.php,src/AKSRT/Core/DBMigratorPart2.php,0
|
||||
trait,AKSRT_DB_Migrator_Part_3,"AKSRT\Core\DBMigratorPart3",inc/classes/core/db-traits/trait-aksrt-db-migrator-part-3.php,src/AKSRT/Core/DBMigratorPart3.php,0
|
||||
trait,AKSRT_Scripts_Part_1b,"AKSRT\Core\ScriptsPart1b",inc/classes/core/scripts-traits/trait-aksrt-scripts-part-1b.php,src/AKSRT/Core/ScriptsPart1b.php,0
|
||||
trait,AKSRT_Scripts_Part_1c,"AKSRT\Core\ScriptsPart1c",inc/classes/core/scripts-traits/trait-aksrt-scripts-part-1c.php,src/AKSRT/Core/ScriptsPart1c.php,0
|
||||
trait,AKSRT_Scripts_Part_2,"AKSRT\Core\ScriptsPart2",inc/classes/core/scripts-traits/trait-aksrt-scripts-part-2.php,src/AKSRT/Core/ScriptsPart2.php,0
|
||||
trait,AKSRT_Setup_Part_1,"AKSRT\Core\SetupPart1",inc/classes/core/setup-traits/trait-aksrt-setup-part-1.php,src/AKSRT/Core/SetupPart1.php,0
|
||||
trait,AKSRT_Setup_Part_2,"AKSRT\Core\SetupPart2",inc/classes/core/setup-traits/trait-aksrt-setup-part-2.php,src/AKSRT/Core/SetupPart2.php,0
|
||||
trait,AKSRT_Balance_Service_Charge,"AKSRT\Credits\BalanceServiceCharge",inc/classes/credits/balance-service-traits/trait-aksrt-balance-service-charge.php,src/AKSRT/Credits/BalanceServiceCharge.php,0
|
||||
trait,AKSRT_Balance_Service_Points,"AKSRT\Credits\BalanceServicePoints",inc/classes/credits/balance-service-traits/trait-aksrt-balance-service-points.php,src/AKSRT/Credits/BalanceServicePoints.php,0
|
||||
trait,AKSRT_Balance_Service_Rest,"AKSRT\Credits\BalanceServiceRest",inc/classes/credits/balance-service-traits/trait-aksrt-balance-service-rest.php,src/AKSRT/Credits/BalanceServiceRest.php,0
|
||||
class,AKSRT_Balance_Service,"AKSRT\Credits\BalanceService",inc/classes/credits/class-aksrt-balance-service.php,src/AKSRT/Credits/BalanceService.php,0
|
||||
class,AKSRT_Balance,"AKSRT\Credits\Balance",inc/classes/credits/class-aksrt-balance.php,src/AKSRT/Credits/Balance.php,0
|
||||
class,AKSRT_Credits_Earn,"AKSRT\Credits\Earn",inc/classes/credits/class-aksrt-credits-earn.php,src/AKSRT/Credits/Earn.php,0
|
||||
class,AKSRT_Credits,"AKSRT\Credits\Credits",inc/classes/credits/class-aksrt-credits.php,src/AKSRT/Credits/Credits.php,0
|
||||
class,AKSRT_Invite,"AKSRT\Credits\Invite",inc/classes/credits/class-aksrt-invite.php,src/AKSRT/Credits/Invite.php,0
|
||||
class,AKSRT_Points_Free,"AKSRT\Credits\PointsFree",inc/classes/credits/class-aksrt-points-free.php,src/AKSRT/Credits/PointsFree.php,0
|
||||
class,AKSRT_Signin,"AKSRT\Credits\Signin",inc/classes/credits/class-aksrt-signin.php,src/AKSRT/Credits/Signin.php,0
|
||||
class,AKSRT_API_Audit,"AKSRT\Extensions\APIAudit",inc/classes/extensions/class-aksrt-api-audit.php,src/AKSRT/Extensions/APIAudit.php,0
|
||||
class,AKSRT_Content_Audit,"AKSRT\Extensions\ContentAudit",inc/classes/extensions/class-aksrt-content-audit.php,src/AKSRT/Extensions/ContentAudit.php,0
|
||||
class,AKSRT_IP_Geo,"AKSRT\Extensions\IPGeo",inc/classes/extensions/class-aksrt-ip-geo.php,src/AKSRT/Extensions/IPGeo.php,0
|
||||
class,AKSRT_MeiliSearch,"AKSRT\Extensions\MeiliSearch",inc/classes/extensions/class-aksrt-meilisearch.php,src/AKSRT/Extensions/MeiliSearch.php,0
|
||||
class,AKSRT_Search_Push,"AKSRT\Extensions\SearchPush",inc/classes/extensions/class-aksrt-search-push.php,src/AKSRT/Extensions/SearchPush.php,0
|
||||
trait,AKSRT_Forum_Board_Service_Part_1,"AKSRT\Forum\BoardServicePart1",inc/classes/forum/board-service-traits/trait-aksrt-forum-board-service-part-1.php,src/AKSRT/Forum/BoardServicePart1.php,0
|
||||
trait,AKSRT_Forum_Board_Service_Part_2,"AKSRT\Forum\BoardServicePart2",inc/classes/forum/board-service-traits/trait-aksrt-forum-board-service-part-2.php,src/AKSRT/Forum/BoardServicePart2.php,0
|
||||
trait,AKSRT_Forum_Board_Service_Part_3,"AKSRT\Forum\BoardServicePart3",inc/classes/forum/board-service-traits/trait-aksrt-forum-board-service-part-3.php,src/AKSRT/Forum/BoardServicePart3.php,0
|
||||
class,AKSRT_Forum_Board_Service,"AKSRT\Forum\BoardService",inc/classes/forum/class-aksrt-forum-board-service.php,src/AKSRT/Forum/BoardService.php,0
|
||||
class,AKSRT_Forum_Comment_Service,"AKSRT\Forum\CommentService",inc/classes/forum/class-aksrt-forum-comment-service.php,src/AKSRT/Forum/CommentService.php,0
|
||||
class,AKSRT_Forum_Draft_Service,"AKSRT\Forum\DraftService",inc/classes/forum/class-aksrt-forum-draft-service.php,src/AKSRT/Forum/DraftService.php,0
|
||||
class,AKSRT_Forum_Moderation_Service,"AKSRT\Forum\ModerationService",inc/classes/forum/class-aksrt-forum-moderation-service.php,src/AKSRT/Forum/ModerationService.php,0
|
||||
class,AKSRT_Forum_Permission_Service,"AKSRT\Forum\PermissionService",inc/classes/forum/class-aksrt-forum-permission-service.php,src/AKSRT/Forum/PermissionService.php,0
|
||||
class,AKSRT_Forum_Score_Service,"AKSRT\Forum\ScoreService",inc/classes/forum/class-aksrt-forum-score-service.php,src/AKSRT/Forum/ScoreService.php,0
|
||||
class,AKSRT_Forum_Topic_Service,"AKSRT\Forum\TopicService",inc/classes/forum/class-aksrt-forum-topic-service.php,src/AKSRT/Forum/TopicService.php,0
|
||||
class,AKSRT_Forum_View_Builder,"AKSRT\Forum\ViewBuilder",inc/classes/forum/class-aksrt-forum-view-builder.php,src/AKSRT/Forum/ViewBuilder.php,0
|
||||
class,AKSRT_Forum,"AKSRT\Forum\Forum",inc/classes/forum/class-aksrt-forum.php,src/AKSRT/Forum/Forum.php,0
|
||||
class,AKSRT_Plate_Admin_List,"AKSRT\Forum\PlateAdminList",inc/classes/forum/class-aksrt-plate-admin-list.php,src/AKSRT/Forum/PlateAdminList.php,0
|
||||
class,AKSRT_Plate_Follow_Pay,"AKSRT\Forum\PlateFollowPay",inc/classes/forum/class-aksrt-plate-follow-pay.php,src/AKSRT/Forum/PlateFollowPay.php,0
|
||||
class,AKSRT_Plate_Meta_Box,"AKSRT\Forum\PlateMetaBox",inc/classes/forum/class-aksrt-plate-meta-box.php,src/AKSRT/Forum/PlateMetaBox.php,0
|
||||
class,AKSRT_Topic_Admin_List,"AKSRT\Forum\TopicAdminList",inc/classes/forum/class-aksrt-topic-admin-list.php,src/AKSRT/Forum/TopicAdminList.php,0
|
||||
class,AKSRT_Topic_Meta_Box,"AKSRT\Forum\TopicMetaBox",inc/classes/forum/class-aksrt-topic-meta-box.php,src/AKSRT/Forum/TopicMetaBox.php,0
|
||||
class,AKSRT_Topic_Pay,"AKSRT\Forum\TopicPay",inc/classes/forum/class-aksrt-topic-pay.php,src/AKSRT/Forum/TopicPay.php,0
|
||||
trait,AKSRT_Forum_Topic_Service_Part_1,"AKSRT\Forum\TopicServicePart1",inc/classes/forum/topic-service-traits/trait-aksrt-forum-topic-service-part-1.php,src/AKSRT/Forum/TopicServicePart1.php,0
|
||||
trait,AKSRT_Forum_Topic_Service_Part_2,"AKSRT\Forum\TopicServicePart2",inc/classes/forum/topic-service-traits/trait-aksrt-forum-topic-service-part-2.php,src/AKSRT/Forum/TopicServicePart2.php,0
|
||||
trait,AKSRT_Forum_Topic_Service_Part_3,"AKSRT\Forum\TopicServicePart3",inc/classes/forum/topic-service-traits/trait-aksrt-forum-topic-service-part-3.php,src/AKSRT/Forum/TopicServicePart3.php,0
|
||||
trait,AKSRT_Forum_Topic_Service_Part_4,"AKSRT\Forum\TopicServicePart4",inc/classes/forum/topic-service-traits/trait-aksrt-forum-topic-service-part-4.php,src/AKSRT/Forum/TopicServicePart4.php,0
|
||||
trait,AKSRT_Forum_View_Builder_Part_1,"AKSRT\Forum\ViewBuilderPart1",inc/classes/forum/view-builder-traits/trait-aksrt-forum-view-builder-part-1.php,src/AKSRT/Forum/ViewBuilderPart1.php,0
|
||||
trait,AKSRT_Forum_View_Builder_Part_2,"AKSRT\Forum\ViewBuilderPart2",inc/classes/forum/view-builder-traits/trait-aksrt-forum-view-builder-part-2.php,src/AKSRT/Forum/ViewBuilderPart2.php,0
|
||||
class,AKSRT_Custom_Code_Renderer,"AKSRT\Frontend\CustomCodeRenderer",inc/classes/frontend/class-aksrt-custom-code-renderer.php,src/AKSRT/Frontend/CustomCodeRenderer.php,0
|
||||
class,AKSRT_Inline_Style_Builder,"AKSRT\Frontend\InlineStyleBuilder",inc/classes/frontend/class-aksrt-inline-style-builder.php,src/AKSRT/Frontend/InlineStyleBuilder.php,0
|
||||
class,AKSRT_Loading_Overlay_Renderer,"AKSRT\Frontend\LoadingOverlayRenderer",inc/classes/frontend/class-aksrt-loading-overlay-renderer.php,src/AKSRT/Frontend/LoadingOverlayRenderer.php,0
|
||||
class,AKSRT_Message,"AKSRT\Messages\Message",inc/classes/messages/class-aksrt-message.php,src/AKSRT/Messages/Message.php,0
|
||||
class,AKSRT_Private_Message,"AKSRT\Messages\PrivateMessage",inc/classes/messages/class-aksrt-private-message.php,src/AKSRT/Messages/PrivateMessage.php,0
|
||||
class,AKSRT_Report_Center,"AKSRT\Messages\ReportCenter",inc/classes/messages/class-aksrt-report-center.php,src/AKSRT/Messages/ReportCenter.php,0
|
||||
class,AKSRT_Site_Notice,"AKSRT\Messages\SiteNotice",inc/classes/messages/class-aksrt-site-notice.php,src/AKSRT/Messages/SiteNotice.php,0
|
||||
class,AKSRT_After_Sale,"AKSRT\Payment\AfterSale",inc/classes/payment/class-aksrt-after-sale.php,src/AKSRT/Payment/AfterSale.php,0
|
||||
class,AKSRT_Charge_Card,"AKSRT\Payment\ChargeCard",inc/classes/payment/class-aksrt-charge-card.php,src/AKSRT/Payment/ChargeCard.php,0
|
||||
class,AKSRT_Coupon,"AKSRT\Payment\Coupon",inc/classes/payment/class-aksrt-coupon.php,src/AKSRT/Payment/Coupon.php,0
|
||||
class,AKSRT_Discount,"AKSRT\Payment\Discount",inc/classes/payment/class-aksrt-discount.php,src/AKSRT/Payment/Discount.php,0
|
||||
class,AKSRT_Order_Repository,"AKSRT\Payment\OrderRepository",inc/classes/payment/class-aksrt-order-repository.php,src/AKSRT/Payment/OrderRepository.php,0
|
||||
class,AKSRT_Order,"AKSRT\Payment\Order",inc/classes/payment/class-aksrt-order.php,src/AKSRT/Payment/Order.php,0
|
||||
interface,AKSRT_Payment_Gateway_Interface,"AKSRT\Payment\GatewayInterface",inc/classes/payment/class-aksrt-payment-gateway.php,src/AKSRT/Payment/GatewayInterface.php,1
|
||||
class,AKSRT_Payment_Gateway,"AKSRT\Payment\Gateway",inc/classes/payment/class-aksrt-payment-gateway.php,src/AKSRT/Payment/Gateway.php,1
|
||||
class,AKSRT_Balance_Gateway,"AKSRT\Payment\BalanceGateway",inc/classes/payment/class-aksrt-payment-gateway.php,src/AKSRT/Payment/BalanceGateway.php,1
|
||||
class,AKSRT_Rebate,"AKSRT\Payment\Rebate",inc/classes/payment/class-aksrt-rebate.php,src/AKSRT/Payment/Rebate.php,0
|
||||
class,AKSRT_Revenue,"AKSRT\Payment\Revenue",inc/classes/payment/class-aksrt-revenue.php,src/AKSRT/Payment/Revenue.php,0
|
||||
class,AKSRT_Shipping,"AKSRT\Payment\Shipping",inc/classes/payment/class-aksrt-shipping.php,src/AKSRT/Payment/Shipping.php,0
|
||||
class,AKSRT_WeChat_Notify,"AKSRT\Payment\WeChatNotify",inc/classes/payment/class-aksrt-wechat-notify.php,src/AKSRT/Payment/WeChatNotify.php,0
|
||||
class,AKSRT_Withdrawal,"AKSRT\Payment\Withdrawal",inc/classes/payment/class-aksrt-withdrawal.php,src/AKSRT/Payment/Withdrawal.php,0
|
||||
class,AKSRT_Alipay_Gateway,"AKSRT\Payment\Gateways\AlipayGateway",inc/classes/payment/gateways/class-aksrt-alipay-gateway.php,src/AKSRT/Payment/Gateways/AlipayGateway.php,0
|
||||
class,AKSRT_PayPal_Gateway,"AKSRT\Payment\Gateways\PayPalGateway",inc/classes/payment/gateways/class-aksrt-paypal-gateway.php,src/AKSRT/Payment/Gateways/PayPalGateway.php,0
|
||||
class,AKSRT_Stripe_Gateway,"AKSRT\Payment\Gateways\StripeGateway",inc/classes/payment/gateways/class-aksrt-stripe-gateway.php,src/AKSRT/Payment/Gateways/StripeGateway.php,0
|
||||
class,AKSRT_WechatPay_Gateway,"AKSRT\Payment\Gateways\WechatPayGateway",inc/classes/payment/gateways/class-aksrt-wechatpay-gateway.php,src/AKSRT/Payment/Gateways/WechatPayGateway.php,0
|
||||
trait,AKSRT_Order_Repository_Admin,"AKSRT\Payment\OrderRepositoryAdmin",inc/classes/payment/order-repository-traits/trait-aksrt-order-repository-admin.php,src/AKSRT/Payment/OrderRepositoryAdmin.php,0
|
||||
trait,AKSRT_Order_Repository_Core,"AKSRT\Payment\OrderRepositoryCore",inc/classes/payment/order-repository-traits/trait-aksrt-order-repository-core.php,src/AKSRT/Payment/OrderRepositoryCore.php,0
|
||||
trait,AKSRT_Shipping_Part_1,"AKSRT\Payment\ShippingPart1",inc/classes/payment/shipping-traits/trait-aksrt-shipping-part-1.php,src/AKSRT/Payment/ShippingPart1.php,0
|
||||
trait,AKSRT_Shipping_Part_2,"AKSRT\Payment\ShippingPart2",inc/classes/payment/shipping-traits/trait-aksrt-shipping-part-2.php,src/AKSRT/Payment/ShippingPart2.php,0
|
||||
class,AKSRT_Settings_Capabilities,"AKSRT\Settings\Capabilities",inc/classes/settings/class-aksrt-settings-capabilities.php,src/AKSRT/Settings/Capabilities.php,0
|
||||
trait,AKSRT_Settings_Category_Integration_Groups,"AKSRT\Settings\CategoryIntegrationGroups",inc/classes/settings/class-aksrt-settings-category-integration-groups.php,src/AKSRT/Settings/CategoryIntegrationGroups.php,0
|
||||
class,AKSRT_Settings_Category_Runtime,"AKSRT\Settings\CategoryRuntime",inc/classes/settings/class-aksrt-settings-category-runtime.php,src/AKSRT/Settings/CategoryRuntime.php,0
|
||||
trait,AKSRT_Settings_Credits_Payment_Groups,"AKSRT\Settings\CreditsPaymentGroups",inc/classes/settings/class-aksrt-settings-credits-payment-groups.php,src/AKSRT/Settings/CreditsPaymentGroups.php,0
|
||||
class,AKSRT_Settings_Credits_Runtime,"AKSRT\Settings\CreditsRuntime",inc/classes/settings/class-aksrt-settings-credits-runtime.php,src/AKSRT/Settings/CreditsRuntime.php,0
|
||||
trait,AKSRT_Settings_Display_Page_Groups,"AKSRT\Settings\DisplayPageGroups",inc/classes/settings/class-aksrt-settings-display-page-groups.php,src/AKSRT/Settings/DisplayPageGroups.php,0
|
||||
class,AKSRT_Settings_Display_Runtime,"AKSRT\Settings\DisplayRuntime",inc/classes/settings/class-aksrt-settings-display-runtime.php,src/AKSRT/Settings/DisplayRuntime.php,0
|
||||
trait,AKSRT_Settings_Domain_Groups,"AKSRT\Settings\DomainGroups",inc/classes/settings/class-aksrt-settings-domain-groups.php,src/AKSRT/Settings/DomainGroups.php,0
|
||||
class,AKSRT_Settings_Extension_Runtime,"AKSRT\Settings\ExtensionRuntime",inc/classes/settings/class-aksrt-settings-extension-runtime.php,src/AKSRT/Settings/ExtensionRuntime.php,0
|
||||
class,AKSRT_Settings_Forum_Shop,"AKSRT\Settings\ForumShop",inc/classes/settings/class-aksrt-settings-forum-shop.php,src/AKSRT/Settings/ForumShop.php,0
|
||||
class,AKSRT_Settings_Home_Cms,"AKSRT\Settings\HomeCms",inc/classes/settings/class-aksrt-settings-home-cms.php,src/AKSRT/Settings/HomeCms.php,0
|
||||
class,AKSRT_Settings_Integration,"AKSRT\Settings\Integration",inc/classes/settings/class-aksrt-settings-integration.php,src/AKSRT/Settings/Integration.php,0
|
||||
class,AKSRT_Settings_Mail,"AKSRT\Settings\Mail",inc/classes/settings/class-aksrt-settings-mail.php,src/AKSRT/Settings/Mail.php,0
|
||||
class,AKSRT_Settings_Payment_Runtime,"AKSRT\Settings\PaymentRuntime",inc/classes/settings/class-aksrt-settings-payment-runtime.php,src/AKSRT/Settings/PaymentRuntime.php,0
|
||||
class,AKSRT_Settings_Post_Display,"AKSRT\Settings\PostDisplay",inc/classes/settings/class-aksrt-settings-post-display.php,src/AKSRT/Settings/PostDisplay.php,0
|
||||
class,AKSRT_Settings_Theme_Search,"AKSRT\Settings\ThemeSearch",inc/classes/settings/class-aksrt-settings-theme-search.php,src/AKSRT/Settings/ThemeSearch.php,0
|
||||
class,AKSRT_Settings_User_Runtime,"AKSRT\Settings\UserRuntime",inc/classes/settings/class-aksrt-settings-user-runtime.php,src/AKSRT/Settings/UserRuntime.php,0
|
||||
class,AKSRT_Settings,"AKSRT\Settings\Settings",inc/classes/settings/class-aksrt-settings.php,src/AKSRT/Settings/Settings.php,0
|
||||
trait,AKSRT_Settings_Auth_Reader,"AKSRT\Settings\AuthReader",inc/classes/settings/trait-aksrt-settings-auth-reader.php,src/AKSRT/Settings/AuthReader.php,0
|
||||
trait,AKSRT_Settings_Facade_Bulk,"AKSRT\Settings\FacadeBulk",inc/classes/settings/trait-aksrt-settings-facade-bulk.php,src/AKSRT/Settings/FacadeBulk.php,0
|
||||
trait,AKSRT_Settings_Homepage_Reader,"AKSRT\Settings\HomepageReader",inc/classes/settings/trait-aksrt-settings-homepage-reader.php,src/AKSRT/Settings/HomepageReader.php,0
|
||||
class,AKSRT_Product_Meta_Box,"AKSRT\Shop\ProductMetaBox",inc/classes/shop/class-aksrt-product-meta-box.php,src/AKSRT/Shop/ProductMetaBox.php,0
|
||||
class,AKSRT_Product_Review,"AKSRT\Shop\ProductReview",inc/classes/shop/class-aksrt-product-review.php,src/AKSRT/Shop/ProductReview.php,0
|
||||
class,AKSRT_Product_Variants_Meta_Box,"AKSRT\Shop\ProductVariantsMetaBox",inc/classes/shop/class-aksrt-product-variants-meta-box.php,src/AKSRT/Shop/ProductVariantsMetaBox.php,0
|
||||
class,AKSRT_Shop_Address_Service,"AKSRT\Shop\AddressService",inc/classes/shop/class-aksrt-shop-address-service.php,src/AKSRT/Shop/AddressService.php,0
|
||||
class,AKSRT_Shop_Cart_Service,"AKSRT\Shop\CartService",inc/classes/shop/class-aksrt-shop-cart-service.php,src/AKSRT/Shop/CartService.php,0
|
||||
class,AKSRT_Shop_Checkout_Service,"AKSRT\Shop\CheckoutService",inc/classes/shop/class-aksrt-shop-checkout-service.php,src/AKSRT/Shop/CheckoutService.php,0
|
||||
class,AKSRT_Shop_Product_Service,"AKSRT\Shop\ProductService",inc/classes/shop/class-aksrt-shop-product-service.php,src/AKSRT/Shop/ProductService.php,0
|
||||
class,AKSRT_Shop_Term_Meta,"AKSRT\Shop\TermMeta",inc/classes/shop/class-aksrt-shop-term-meta.php,src/AKSRT/Shop/TermMeta.php,0
|
||||
class,AKSRT_Shop,"AKSRT\Shop\Shop",inc/classes/shop/class-aksrt-shop.php,src/AKSRT/Shop/Shop.php,0
|
||||
trait,AKSRT_Shop_Part_1,"AKSRT\Shop\Part1",inc/classes/shop/shop-traits/trait-aksrt-shop-part-1.php,src/AKSRT/Shop/Part1.php,0
|
||||
trait,AKSRT_Shop_Part_2,"AKSRT\Shop\Part2",inc/classes/shop/shop-traits/trait-aksrt-shop-part-2.php,src/AKSRT/Shop/Part2.php,0
|
||||
trait,AKSRT_Shop_Part_3,"AKSRT\Shop\Part3",inc/classes/shop/shop-traits/trait-aksrt-shop-part-3.php,src/AKSRT/Shop/Part3.php,0
|
||||
class,AKSRT_SMS_Provider_Aliyun,"AKSRT\Sms\SMSProviderAliyun",inc/classes/sms/class-aksrt-sms-provider-aliyun.php,src/AKSRT/Sms/SMSProviderAliyun.php,0
|
||||
class,AKSRT_SMS_Provider_Custom,"AKSRT\Sms\SMSProviderCustom",inc/classes/sms/class-aksrt-sms-provider-custom.php,src/AKSRT/Sms/SMSProviderCustom.php,0
|
||||
class,AKSRT_SMS_Provider_Factory,"AKSRT\Sms\SMSProviderFactory",inc/classes/sms/class-aksrt-sms-provider-factory.php,src/AKSRT/Sms/SMSProviderFactory.php,0
|
||||
class,AKSRT_SMS_Provider_Huawei,"AKSRT\Sms\SMSProviderHuawei",inc/classes/sms/class-aksrt-sms-provider-huawei.php,src/AKSRT/Sms/SMSProviderHuawei.php,0
|
||||
class,AKSRT_SMS_Provider_Tencent,"AKSRT\Sms\SMSProviderTencent",inc/classes/sms/class-aksrt-sms-provider-tencent.php,src/AKSRT/Sms/SMSProviderTencent.php,0
|
||||
interface,AKSRT_SMS_Provider,"AKSRT\Sms\ProviderInterface",inc/classes/sms/class-aksrt-sms-provider.php,src/AKSRT/Sms/ProviderInterface.php,0
|
||||
class,AKSRT_SMS_Signature_Helper,"AKSRT\Sms\SMSSignatureHelper",inc/classes/sms/class-aksrt-sms-signature-helper.php,src/AKSRT/Sms/SMSSignatureHelper.php,0
|
||||
class,AKSRT_SMS,"AKSRT\Sms\SMS",inc/classes/sms/class-aksrt-sms.php,src/AKSRT/Sms/SMS.php,0
|
||||
class,AKSRT_Follow,"AKSRT\User\Follow",inc/classes/user/class-aksrt-follow.php,src/AKSRT/User/Follow.php,0
|
||||
class,AKSRT_User_Badges_Admin,"AKSRT\User\BadgesAdmin",inc/classes/user/class-aksrt-user-badges-admin.php,src/AKSRT/User/BadgesAdmin.php,0
|
||||
class,AKSRT_User_Badges,"AKSRT\User\Badges",inc/classes/user/class-aksrt-user-badges.php,src/AKSRT/User/Badges.php,0
|
||||
class,AKSRT_User_Balance_Admin,"AKSRT\User\BalanceAdmin",inc/classes/user/class-aksrt-user-balance-admin.php,src/AKSRT/User/BalanceAdmin.php,0
|
||||
class,AKSRT_User_Center,"AKSRT\User\Center",inc/classes/user/class-aksrt-user-center.php,src/AKSRT/User/Center.php,0
|
||||
class,AKSRT_User_Credits_Admin,"AKSRT\User\CreditsAdmin",inc/classes/user/class-aksrt-user-credits-admin.php,src/AKSRT/User/CreditsAdmin.php,0
|
||||
class,AKSRT_User_Home,"AKSRT\User\Home",inc/classes/user/class-aksrt-user-home.php,src/AKSRT/User/Home.php,0
|
||||
class,AKSRT_User_Level,"AKSRT\User\Level",inc/classes/user/class-aksrt-user-level.php,src/AKSRT/User/Level.php,0
|
||||
class,AKSRT_User_Metrics,"AKSRT\User\Metrics",inc/classes/user/class-aksrt-user-metrics.php,src/AKSRT/User/Metrics.php,0
|
||||
class,AKSRT_User_Restriction,"AKSRT\User\Restriction",inc/classes/user/class-aksrt-user-restriction.php,src/AKSRT/User/Restriction.php,0
|
||||
class,AKSRT_Widget_Announcement,"AKSRT\Widgets\WidgetAnnouncement",inc/classes/widgets/class-aksrt-announcement-widget.php,src/AKSRT/Widgets/WidgetAnnouncement.php,0
|
||||
class,AKSRT_Widget_Cover_Cards,"AKSRT\Widgets\WidgetCoverCards",inc/classes/widgets/class-aksrt-cover-cards-widget.php,src/AKSRT/Widgets/WidgetCoverCards.php,0
|
||||
class,AKSRT_Widget_Forum_Hot_Topics,"AKSRT\Widgets\WidgetForumHotTopics",inc/classes/widgets/class-aksrt-forum-widgets.php,src/AKSRT/Widgets/WidgetForumHotTopics.php,1
|
||||
class,AKSRT_Widget_Forum_Recent_Topics,"AKSRT\Widgets\WidgetForumRecentTopics",inc/classes/widgets/class-aksrt-forum-widgets.php,src/AKSRT/Widgets/WidgetForumRecentTopics.php,1
|
||||
class,AKSRT_Widget_Forum_Board_List,"AKSRT\Widgets\WidgetForumBoardList",inc/classes/widgets/class-aksrt-forum-widgets.php,src/AKSRT/Widgets/WidgetForumBoardList.php,1
|
||||
class,AKSRT_Category_Block_Widget,"AKSRT\Widgets\CategoryBlockWidget",inc/classes/widgets/class-aksrt-home-widgets.php,src/AKSRT/Widgets/CategoryBlockWidget.php,1
|
||||
class,AKSRT_Category_Tabs_Widget,"AKSRT\Widgets\CategoryTabsWidget",inc/classes/widgets/class-aksrt-home-widgets.php,src/AKSRT/Widgets/CategoryTabsWidget.php,1
|
||||
class,AKSRT_Category_Recommend_Widget,"AKSRT\Widgets\CategoryRecommendWidget",inc/classes/widgets/class-aksrt-home-widgets.php,src/AKSRT/Widgets/CategoryRecommendWidget.php,1
|
||||
class,AKSRT_Widget_Lang_Switch,"AKSRT\Widgets\WidgetLangSwitch",inc/classes/widgets/class-aksrt-lang-switch-widget.php,src/AKSRT/Widgets/WidgetLangSwitch.php,0
|
||||
class,AKSRT_Widget_Product_List,"AKSRT\Widgets\WidgetProductList",inc/classes/widgets/class-aksrt-shop-widgets.php,src/AKSRT/Widgets/WidgetProductList.php,1
|
||||
class,AKSRT_Widget_Product_Oneline,"AKSRT\Widgets\WidgetProductOneline",inc/classes/widgets/class-aksrt-shop-widgets.php,src/AKSRT/Widgets/WidgetProductOneline.php,1
|
||||
class,AKSRT_Widget_Product_Tab,"AKSRT\Widgets\WidgetProductTab",inc/classes/widgets/class-aksrt-shop-widgets.php,src/AKSRT/Widgets/WidgetProductTab.php,1
|
||||
class,AKSRT_Widget_User_Card,"AKSRT\Widgets\WidgetUserCard",inc/classes/widgets/class-aksrt-user-card-widget.php,src/AKSRT/Widgets/WidgetUserCard.php,0
|
||||
class,AKSRT_Widget_User_Ranking,"AKSRT\Widgets\WidgetUserRanking",inc/classes/widgets/class-aksrt-user-ranking-widget.php,src/AKSRT/Widgets/WidgetUserRanking.php,0
|
||||
class,AKSRT_Widget_Video_Player,"AKSRT\Widgets\WidgetVideoPlayer",inc/classes/widgets/class-aksrt-video-player-widget.php,src/AKSRT/Widgets/WidgetVideoPlayer.php,0
|
||||
class,AKSRT_Search_Widget,"AKSRT\Widgets\SearchWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/SearchWidget.php,1
|
||||
class,AKSRT_Notice_Widget,"AKSRT\Widgets\NoticeWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/NoticeWidget.php,1
|
||||
class,AKSRT_Recent_Comments_Widget,"AKSRT\Widgets\RecentCommentsWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/RecentCommentsWidget.php,1
|
||||
class,AKSRT_Friend_Links_Widget,"AKSRT\Widgets\FriendLinksWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/FriendLinksWidget.php,1
|
||||
class,AKSRT_Icon_Cards_Widget,"AKSRT\Widgets\IconCardsWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/IconCardsWidget.php,1
|
||||
class,AKSRT_Buttons_Widget,"AKSRT\Widgets\ButtonsWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/ButtonsWidget.php,1
|
||||
class,AKSRT_Custom_HTML_Gap_Widget,"AKSRT\Widgets\CustomHtmlGapWidget",inc/classes/widgets/class-aksrt-widgets-batch1.php,src/AKSRT/Widgets/CustomHtmlGapWidget.php,1
|
||||
class,AKSRT_Hot_Posts_Widget,"AKSRT\Widgets\HotPostsWidget",inc/classes/widgets/class-aksrt-widgets-new.php,src/AKSRT/Widgets/HotPostsWidget.php,1
|
||||
class,AKSRT_Tab_Posts_Widget,"AKSRT\Widgets\TabPostsWidget",inc/classes/widgets/class-aksrt-widgets-new.php,src/AKSRT/Widgets/TabPostsWidget.php,1
|
||||
class,AKSRT_About_Widget,"AKSRT\Widgets\AboutWidget",inc/classes/widgets/class-aksrt-widgets-original.php,src/AKSRT/Widgets/AboutWidget.php,1
|
||||
class,AKSRT_Categories_Widget,"AKSRT\Widgets\CategoriesWidget",inc/classes/widgets/class-aksrt-widgets-original.php,src/AKSRT/Widgets/CategoriesWidget.php,1
|
||||
class,AKSRT_Tag_Cloud_Widget,"AKSRT\Widgets\TagCloudWidget",inc/classes/widgets/class-aksrt-widgets-original.php,src/AKSRT/Widgets/TagCloudWidget.php,1
|
||||
class,AKSRT_Widget_Yiyan,"AKSRT\Widgets\WidgetYiyan",inc/classes/widgets/class-aksrt-yiyan-widget.php,src/AKSRT/Widgets/WidgetYiyan.php,0
|
||||
class,AKSRT_Nav_Walker,"AKSRT\Frontend\NavWalker",inc/helpers/class-aksrt-nav-walker.php,src/AKSRT/Frontend/NavWalker.php,0
|
||||
class,AKSRT_Shortcodes,"AKSRT\Core\Shortcodes",inc/helpers/aksrt-shortcodes.php,src/AKSRT/Core/Shortcodes.php,0
|
||||
class,AKSRT_Domain_Model,"AKSRT\Core\DomainModel",inc/helpers/aksrt-domain-model.php,src/AKSRT/Core/DomainModel.php,0
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,671 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
* One-shot PSR-4 migrator for AKSRT theme.
|
||||
*
|
||||
* Prerequisites: php tools/build-psr4-map.php --write
|
||||
*
|
||||
* Usage:
|
||||
* php tools/psr4-migrate.php --dry-run
|
||||
* php tools/psr4-migrate.php --apply
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$root = dirname(__DIR__);
|
||||
$apply = in_array('--apply', $argv, true);
|
||||
$dry = !$apply;
|
||||
|
||||
$map_file = $root . '/tools/psr4-map/map.json';
|
||||
if (!is_file($map_file)) {
|
||||
fwrite(STDERR, "Missing map. Run: php tools/build-psr4-map.php --write\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/** @var array{entries: list<array<string,mixed>>, procedural: list<string>} $map */
|
||||
$map = json_decode((string) file_get_contents($map_file), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
const PRESERVE_TOKENS = [
|
||||
'AKSRT_DIR',
|
||||
'AKSRT_URI',
|
||||
'AKSRT_VERSION',
|
||||
'AKSRT_NO_EMAIL_GATE',
|
||||
];
|
||||
|
||||
/**
|
||||
* Find declaration start offset for a type name.
|
||||
*/
|
||||
function aksrt_find_decl_start(string $text, string $old_name): ?int {
|
||||
if (!preg_match(
|
||||
'/(?:abstract\s+|final\s+)?(?:class|trait|interface)\s+' . preg_quote($old_name, '/') . '\b/',
|
||||
$text,
|
||||
$m,
|
||||
PREG_OFFSET_CAPTURE
|
||||
)) {
|
||||
return null;
|
||||
}
|
||||
$decl = (int) $m[0][1];
|
||||
// Include immediately preceding docblock if present.
|
||||
$before = substr($text, 0, $decl);
|
||||
if (preg_match('/(?:\n|^)\s*\/\*\*[\s\S]*?\*\/\s*\z/', $before, $dm, PREG_OFFSET_CAPTURE)) {
|
||||
return (int) $dm[0][1];
|
||||
}
|
||||
return $decl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract one class/trait/interface by brace matching from its declaration.
|
||||
*/
|
||||
function aksrt_extract_type(string $text, string $old_name): ?string {
|
||||
$start = aksrt_find_decl_start($text, $old_name);
|
||||
if ($start === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$brace = strpos($text, '{', $start);
|
||||
if ($brace === false) {
|
||||
// Possible empty interface? require body.
|
||||
return null;
|
||||
}
|
||||
|
||||
$len = strlen($text);
|
||||
$depth = 0;
|
||||
$in_str = false;
|
||||
$str_q = '';
|
||||
$in_line_comment = false;
|
||||
$in_block_comment = false;
|
||||
$escape = false;
|
||||
|
||||
for ($i = $brace; $i < $len; $i++) {
|
||||
$ch = $text[$i];
|
||||
$next = $i + 1 < $len ? $text[$i + 1] : '';
|
||||
|
||||
if ($in_line_comment) {
|
||||
if ($ch === "\n") {
|
||||
$in_line_comment = false;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($in_block_comment) {
|
||||
if ($ch === '*' && $next === '/') {
|
||||
$in_block_comment = false;
|
||||
$i++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ($in_str) {
|
||||
if ($escape) {
|
||||
$escape = false;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '\\') {
|
||||
$escape = true;
|
||||
continue;
|
||||
}
|
||||
if ($ch === $str_q) {
|
||||
$in_str = false;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($ch === '/' && $next === '/') {
|
||||
$in_line_comment = true;
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '/' && $next === '*') {
|
||||
$in_block_comment = true;
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
if ($ch === '"' || $ch === "'") {
|
||||
$in_str = true;
|
||||
$str_q = $ch;
|
||||
continue;
|
||||
}
|
||||
// Heredoc/nowdoc not handled fully — rare in this codebase.
|
||||
|
||||
if ($ch === '{') {
|
||||
$depth++;
|
||||
} elseif ($ch === '}') {
|
||||
$depth--;
|
||||
if ($depth === 0) {
|
||||
return substr($text, $start, $i - $start + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<array<string,mixed>> $entries
|
||||
* @return array<string, string>
|
||||
*/
|
||||
function aksrt_replacements(array $entries): array {
|
||||
$rep = [];
|
||||
foreach ($entries as $e) {
|
||||
$rep[$e['old']] = '\\' . $e['new_fqcn'];
|
||||
}
|
||||
uksort($rep, static fn($a, $b) => strlen($b) <=> strlen($a));
|
||||
return $rep;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $rep
|
||||
*/
|
||||
function aksrt_rewrite_refs(string $code, array $rep): string {
|
||||
$protected = [];
|
||||
$i = 0;
|
||||
foreach (PRESERVE_TOKENS as $tok) {
|
||||
$ph = "\0PRESERVE{$i}\0";
|
||||
$protected[$ph] = $tok;
|
||||
$code = str_replace($tok, $ph, $code);
|
||||
$i++;
|
||||
}
|
||||
|
||||
if ($rep) {
|
||||
$pattern = '/\b(' . implode('|', array_map(static fn($k) => preg_quote($k, '/'), array_keys($rep))) . ')\b/';
|
||||
$code = preg_replace_callback($pattern, static function ($m) use ($rep) {
|
||||
return $rep[$m[1]] ?? $m[1];
|
||||
}, $code) ?? $code;
|
||||
}
|
||||
|
||||
foreach ($protected as $ph => $tok) {
|
||||
$code = str_replace($ph, $tok, $code);
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string,mixed> $entry
|
||||
* @param array<string,string> $rep
|
||||
*/
|
||||
function aksrt_build_namespaced_file(array $entry, string $body, array $rep): string {
|
||||
$kind = $entry['kind'];
|
||||
$old = $entry['old'];
|
||||
$short = $entry['short'];
|
||||
$ns = $entry['namespace'];
|
||||
|
||||
$body = preg_replace(
|
||||
'/(abstract\s+|final\s+)?(' . preg_quote($kind, '/') . ')\s+' . preg_quote($old, '/') . '\b/',
|
||||
'$1$2 ' . $short,
|
||||
$body,
|
||||
1
|
||||
) ?? $body;
|
||||
|
||||
$body = aksrt_rewrite_refs($body, $rep);
|
||||
|
||||
// Same-namespace FQCN → short name.
|
||||
$body = preg_replace(
|
||||
'/\\\\' . preg_quote($ns, '/') . '\\\\(\w+)/',
|
||||
'$1',
|
||||
$body
|
||||
) ?? $body;
|
||||
|
||||
$out = "<?php\n/**\n * @package AKSRT\n */\n\nnamespace {$ns};\n\ndefined('ABSPATH') || exit;\n\n";
|
||||
$out .= rtrim($body) . "\n";
|
||||
return $out;
|
||||
}
|
||||
|
||||
function aksrt_ensure_dir(string $file): void {
|
||||
$dir = dirname($file);
|
||||
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
|
||||
throw new RuntimeException("mkdir failed: {$dir}");
|
||||
}
|
||||
}
|
||||
|
||||
function aksrt_write(string $abs, string $contents, bool $dry): void {
|
||||
if ($dry) {
|
||||
echo '[dry] write ' . $abs . ' (' . strlen($contents) . " bytes)\n";
|
||||
return;
|
||||
}
|
||||
aksrt_ensure_dir($abs);
|
||||
if (file_put_contents($abs, $contents) === false) {
|
||||
throw new RuntimeException("write failed: {$abs}");
|
||||
}
|
||||
}
|
||||
|
||||
$rep = aksrt_replacements($map['entries']);
|
||||
$entries = $map['entries'];
|
||||
|
||||
echo ($dry ? 'DRY-RUN' : 'APPLY') . ' — ' . count($entries) . " types\n";
|
||||
|
||||
$old_type_paths = [];
|
||||
$failed = [];
|
||||
$written = 0;
|
||||
foreach ($entries as $entry) {
|
||||
$old_abs = $root . '/' . $entry['old_path'];
|
||||
$new_abs = $root . '/' . $entry['new_path'];
|
||||
$old_type_paths[$entry['old_path']] = true;
|
||||
|
||||
if (!is_file($old_abs)) {
|
||||
if (is_file($new_abs)) {
|
||||
continue;
|
||||
}
|
||||
$failed[] = "missing source {$entry['old_path']} for {$entry['old']}";
|
||||
continue;
|
||||
}
|
||||
|
||||
$text = (string) file_get_contents($old_abs);
|
||||
$chunk = aksrt_extract_type($text, $entry['old']);
|
||||
if ($chunk === null) {
|
||||
$failed[] = "cannot extract {$entry['old']} from {$entry['old_path']}";
|
||||
continue;
|
||||
}
|
||||
|
||||
$contents = aksrt_build_namespaced_file($entry, $chunk, $rep);
|
||||
aksrt_write($new_abs, $contents, $dry);
|
||||
$written++;
|
||||
}
|
||||
echo "Type files: {$written}\n";
|
||||
|
||||
if ($failed) {
|
||||
fwrite(STDERR, "Extraction failures (" . count($failed) . "):\n");
|
||||
foreach (array_slice($failed, 0, 30) as $f) {
|
||||
fwrite(STDERR, " {$f}\n");
|
||||
}
|
||||
if (!$dry) {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
$proc_moves = [
|
||||
'inc/classes/auth/class-aksrt-captcha.php' => 'inc/modules/captcha.php',
|
||||
'inc/classes/payment/class-aksrt-creator-revenue.php' => 'inc/modules/creator-revenue.php',
|
||||
'inc/classes/user/class-aksrt-user-notifications.php' => 'inc/modules/user-notifications.php',
|
||||
'inc/classes/user/class-aksrt-user.php' => 'inc/modules/user-hub.php',
|
||||
'inc/classes/user/user-parts/aksrt-user-account-ajax.php' => 'inc/modules/user-parts/account-ajax.php',
|
||||
'inc/classes/user/user-parts/aksrt-user-routing.php' => 'inc/modules/user-parts/routing.php',
|
||||
'inc/classes/user/user-parts/aksrt-user-template-registry.php' => 'inc/modules/user-parts/template-registry.php',
|
||||
'inc/classes/user/user-parts/aksrt-user-urls.php' => 'inc/modules/user-parts/urls.php',
|
||||
'inc/classes/widgets/class-aksrt-widgets.php' => 'inc/modules/widgets-register.php',
|
||||
];
|
||||
|
||||
foreach ($proc_moves as $from => $to) {
|
||||
$from_abs = $root . '/' . $from;
|
||||
$to_abs = $root . '/' . $to;
|
||||
if (!is_file($from_abs) && is_file($to_abs)) {
|
||||
continue;
|
||||
}
|
||||
if (!is_file($from_abs)) {
|
||||
echo "warn: procedural missing {$from}\n";
|
||||
continue;
|
||||
}
|
||||
$text = (string) file_get_contents($from_abs);
|
||||
if ($from === 'inc/classes/user/class-aksrt-user.php') {
|
||||
$text = str_replace(
|
||||
[
|
||||
"__DIR__ . '/user-parts/aksrt-user-template-registry.php'",
|
||||
"__DIR__ . '/user-parts/aksrt-user-urls.php'",
|
||||
"__DIR__ . '/user-parts/aksrt-user-routing.php'",
|
||||
"__DIR__ . '/user-parts/aksrt-user-account-ajax.php'",
|
||||
],
|
||||
[
|
||||
"__DIR__ . '/user-parts/template-registry.php'",
|
||||
"__DIR__ . '/user-parts/urls.php'",
|
||||
"__DIR__ . '/user-parts/routing.php'",
|
||||
"__DIR__ . '/user-parts/account-ajax.php'",
|
||||
],
|
||||
$text
|
||||
);
|
||||
}
|
||||
$text = aksrt_rewrite_refs($text, $rep);
|
||||
aksrt_write($to_abs, $text, $dry);
|
||||
}
|
||||
|
||||
$scan_roots = [
|
||||
$root . '/inc/helpers',
|
||||
$root . '/inc/core-hooks',
|
||||
$root . '/inc/modules',
|
||||
$root . '/templates',
|
||||
$root . '/tools',
|
||||
];
|
||||
$scan_files = [
|
||||
$root . '/functions.php',
|
||||
$root . '/inc/bootstrap.php',
|
||||
$root . '/inc/core-hooks.php',
|
||||
$root . '/uninstall.php',
|
||||
$root . '/header.php',
|
||||
$root . '/footer.php',
|
||||
$root . '/index.php',
|
||||
$root . '/single.php',
|
||||
$root . '/page.php',
|
||||
$root . '/archive.php',
|
||||
$root . '/search.php',
|
||||
$root . '/category.php',
|
||||
$root . '/tag.php',
|
||||
$root . '/author.php',
|
||||
$root . '/404.php',
|
||||
$root . '/home.php',
|
||||
$root . '/front-page.php',
|
||||
$root . '/comments.php',
|
||||
$root . '/sidebar.php',
|
||||
$root . '/image.php',
|
||||
$root . '/go.php',
|
||||
$root . '/slim-forum.php',
|
||||
$root . '/archive-resources.php',
|
||||
];
|
||||
|
||||
$php_files = $scan_files;
|
||||
foreach ($scan_roots as $dir) {
|
||||
if (!is_dir($dir)) {
|
||||
continue;
|
||||
}
|
||||
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
|
||||
foreach ($rii as $file) {
|
||||
if ($file->isFile() && str_ends_with($file->getFilename(), '.php')) {
|
||||
$php_files[] = $file->getPathname();
|
||||
}
|
||||
}
|
||||
}
|
||||
$php_files = array_values(array_unique($php_files));
|
||||
$rewritten = 0;
|
||||
foreach ($php_files as $abs) {
|
||||
if (!is_file($abs)) {
|
||||
continue;
|
||||
}
|
||||
$rel = str_replace('\\', '/', substr($abs, strlen($root) + 1));
|
||||
if (str_starts_with($rel, 'tools/build-psr4-map.php')
|
||||
|| str_starts_with($rel, 'tools/psr4-migrate.php')
|
||||
|| str_starts_with($rel, 'tools/psr4-map/')) {
|
||||
continue;
|
||||
}
|
||||
if (str_starts_with($rel, 'src/')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$orig = (string) file_get_contents($abs);
|
||||
$next = aksrt_rewrite_refs($orig, $rep);
|
||||
if ($next !== $orig) {
|
||||
aksrt_write($abs, $next, $dry);
|
||||
$rewritten++;
|
||||
}
|
||||
}
|
||||
echo "Reference rewrites in non-src PHP: {$rewritten} files\n";
|
||||
|
||||
// Helper pure-class files become stubs after class move — rewrite domain-model/shortcodes if they still have class bodies (migrator already wrote src copies).
|
||||
// After apply, delete old type sources and helper class-only file.
|
||||
$helper_pure = [
|
||||
'inc/helpers/class-aksrt-nav-walker.php',
|
||||
];
|
||||
|
||||
if (!$dry) {
|
||||
foreach (array_keys($old_type_paths) as $rel) {
|
||||
$abs = $root . '/' . $rel;
|
||||
if (is_file($abs)) {
|
||||
unlink($abs);
|
||||
}
|
||||
}
|
||||
foreach (array_keys($proc_moves) as $rel) {
|
||||
$abs = $root . '/' . $rel;
|
||||
if (is_file($abs)) {
|
||||
unlink($abs);
|
||||
}
|
||||
}
|
||||
foreach ($helper_pure as $rel) {
|
||||
$abs = $root . '/' . $rel;
|
||||
if (is_file($abs)) {
|
||||
unlink($abs);
|
||||
}
|
||||
}
|
||||
// helpers that still contain only moved classes: strip by rewriting shortcodes/domain-model to empty require-safe stubs if class was extracted.
|
||||
foreach (['inc/helpers/aksrt-shortcodes.php', 'inc/helpers/aksrt-domain-model.php'] as $rel) {
|
||||
$abs = $root . '/' . $rel;
|
||||
if (!is_file($abs)) {
|
||||
continue;
|
||||
}
|
||||
$t = (string) file_get_contents($abs);
|
||||
// If file still has class keyword for types we moved, replace with comment stub.
|
||||
if (preg_match('/\b(class|trait|interface)\s+/', $t)) {
|
||||
file_put_contents(
|
||||
$abs,
|
||||
"<?php\n/**\n * Procedural helpers previously co-located with classes (now under src/AKSRT).\n *\n * @package AKSRT\n */\n\ndefined('ABSPATH') || exit;\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Prune empty dirs under inc/classes.
|
||||
$classes = $root . '/inc/classes';
|
||||
if (is_dir($classes)) {
|
||||
$iterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($classes, FilesystemIterator::SKIP_DOTS),
|
||||
RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
foreach ($iterator as $file) {
|
||||
if ($file->isDir()) {
|
||||
@rmdir($file->getPathname());
|
||||
} else {
|
||||
echo 'leftover file: ' . $file->getPathname() . "\n";
|
||||
}
|
||||
}
|
||||
@rmdir($classes);
|
||||
}
|
||||
} else {
|
||||
echo '[dry] would delete ' . count($old_type_paths) . " old type paths + procedural + prune inc/classes\n";
|
||||
}
|
||||
|
||||
$lookup = [];
|
||||
foreach ($entries as $e) {
|
||||
$lookup[$e['old']] = $e['new_fqcn'];
|
||||
}
|
||||
$auth_fq = $lookup['AKSRT_Auth_Service'] ?? 'AKSRT\\Auth\\Service';
|
||||
$settings_fq = $lookup['AKSRT_Settings'] ?? 'AKSRT\\Settings\\Settings';
|
||||
|
||||
$bootstrap = <<<PHP
|
||||
<?php
|
||||
/**
|
||||
* AKSRT Theme Bootstrap Loader
|
||||
*
|
||||
* Helpers + procedural modules + core hooks.
|
||||
* Domain classes load via Composer PSR-4 (src/AKSRT → AKSRT\\).
|
||||
*
|
||||
* @package AKSRT
|
||||
* @version 3.4.0
|
||||
*/
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
// ============================================================
|
||||
// Stage 1: helpers (must load before runtime that calls them)
|
||||
// ============================================================
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-icons.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-domain-model.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-template-tags.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-frontend-tags.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-flow.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-homepage.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-single-components.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-single.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-yiyan.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-single-render.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-archive.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-archive-filters.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-comments.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-forum.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-slider.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-vip.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-auth-ui.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-i18n-switch.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-posts-renderer.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-resource.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-pay.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-coupon-order.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-credits.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-null.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-identity.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-rewards.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/menu-decoration.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-transactions.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-commerce.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-dashboard.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-center.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-home.php';
|
||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-shortcodes.php';
|
||||
|
||||
// ============================================================
|
||||
// Stage 2: procedural modules (not PSR-4 types)
|
||||
// ============================================================
|
||||
require_once AKSRT_DIR . '/inc/modules/captcha.php';
|
||||
require_once AKSRT_DIR . '/inc/modules/user-hub.php';
|
||||
require_once AKSRT_DIR . '/inc/modules/user-notifications.php';
|
||||
require_once AKSRT_DIR . '/inc/modules/creator-revenue.php';
|
||||
require_once AKSRT_DIR . '/inc/modules/widgets-register.php';
|
||||
|
||||
// ============================================================
|
||||
// Stage 3: core hooks
|
||||
// ============================================================
|
||||
require_once AKSRT_DIR . '/inc/core-hooks.php';
|
||||
|
||||
// ============================================================
|
||||
// Stage 4: auth service global hooks
|
||||
// ============================================================
|
||||
if (class_exists(\\{$auth_fq}::class)) {
|
||||
\\\\{$auth_fq}::init();
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// Stage 5: email verification backfill
|
||||
// ============================================================
|
||||
add_action('init', function () {
|
||||
if (defined('AKSRT_NO_EMAIL_GATE') && AKSRT_NO_EMAIL_GATE) {
|
||||
return;
|
||||
}
|
||||
if (!class_exists(\\{$auth_fq}::class) || !class_exists(\\{$settings_fq}::class)) {
|
||||
return;
|
||||
}
|
||||
if (!\\\\{$settings_fq}::registration_requires_email_verification()) {
|
||||
return;
|
||||
}
|
||||
if (get_option('aksrt_email_verification_backfill_done')) {
|
||||
return;
|
||||
}
|
||||
if (!is_admin() && !(defined('DOING_CRON') && DOING_CRON)) {
|
||||
return;
|
||||
}
|
||||
\\\\{$auth_fq}::backfill_legacy_users_as_verified();
|
||||
}, 5);
|
||||
|
||||
add_action('aksrt_email_verification_backfill_batch', function (\$offset = 0) {
|
||||
if (class_exists(\\{$auth_fq}::class)) {
|
||||
\\\\{$auth_fq}::run_async_backfill_batch((int) \$offset);
|
||||
}
|
||||
}, 10, 1);
|
||||
|
||||
// ============================================================
|
||||
// Stage 6: settings migration stub (admin only)
|
||||
// ============================================================
|
||||
add_action('admin_init', function () {
|
||||
}, 5);
|
||||
|
||||
PHP;
|
||||
|
||||
// Fix accidental double backslashes from heredoc interpolation mess.
|
||||
$bootstrap = str_replace(['\\\\' . $auth_fq, '\\\\' . $settings_fq, '\\{' ], ['\\' . $auth_fq, '\\' . $settings_fq, '{'], $bootstrap);
|
||||
// Cleaner: rebuild bootstrap without broken escapes.
|
||||
$bootstrap = "<?php\n"
|
||||
. "/**\n * AKSRT Theme Bootstrap Loader\n *\n"
|
||||
. " * Helpers + procedural modules + core hooks.\n"
|
||||
. " * Domain classes load via Composer PSR-4 (src/AKSRT → AKSRT\\).\n"
|
||||
. " *\n * @package AKSRT\n * @version 3.4.0\n */\n\n"
|
||||
. "defined('ABSPATH') || exit;\n\n"
|
||||
. "// Stage 1: helpers\n";
|
||||
|
||||
$helpers = [
|
||||
'aksrt-icons.php',
|
||||
'aksrt-domain-model.php',
|
||||
'aksrt-template-tags.php',
|
||||
'aksrt-frontend-tags.php',
|
||||
'aksrt-flow.php',
|
||||
'aksrt-homepage.php',
|
||||
'aksrt-single-components.php',
|
||||
'aksrt-single.php',
|
||||
'aksrt-yiyan.php',
|
||||
'aksrt-single-render.php',
|
||||
'aksrt-archive.php',
|
||||
'aksrt-archive-filters.php',
|
||||
'aksrt-comments.php',
|
||||
'aksrt-forum.php',
|
||||
'aksrt-slider.php',
|
||||
'aksrt-vip.php',
|
||||
'aksrt-auth-ui.php',
|
||||
'aksrt-i18n-switch.php',
|
||||
'aksrt-posts-renderer.php',
|
||||
'aksrt-resource.php',
|
||||
'aksrt-pay.php',
|
||||
'aksrt-coupon-order.php',
|
||||
'aksrt-credits.php',
|
||||
'aksrt-null.php',
|
||||
'aksrt-identity.php',
|
||||
'aksrt-rewards.php',
|
||||
'menu-decoration.php',
|
||||
'aksrt-transactions.php',
|
||||
'aksrt-commerce.php',
|
||||
'aksrt-user-dashboard.php',
|
||||
'aksrt-user-center.php',
|
||||
'aksrt-user-home.php',
|
||||
'aksrt-shortcodes.php',
|
||||
];
|
||||
foreach ($helpers as $h) {
|
||||
$bootstrap .= "require_once AKSRT_DIR . '/inc/helpers/{$h}';\n";
|
||||
}
|
||||
$bootstrap .= "\n// Stage 2: procedural modules\n";
|
||||
foreach (['captcha.php', 'user-hub.php', 'user-notifications.php', 'creator-revenue.php', 'widgets-register.php'] as $m) {
|
||||
$bootstrap .= "require_once AKSRT_DIR . '/inc/modules/{$m}';\n";
|
||||
}
|
||||
$bootstrap .= "\n// Stage 3: core hooks\n";
|
||||
$bootstrap .= "require_once AKSRT_DIR . '/inc/core-hooks.php';\n\n";
|
||||
$bootstrap .= "// Stage 4: auth service hooks\n";
|
||||
$bootstrap .= "if (class_exists(\\{$auth_fq}::class)) {\n\t\\{$auth_fq}::init();\n}\n\n";
|
||||
// The above still has escape issues - build with concatenation only:
|
||||
$bootstrap = "<?php\n/**\n * AKSRT Theme Bootstrap Loader\n *\n * Helpers + procedural modules + core hooks.\n * Domain classes load via Composer PSR-4 (src/AKSRT).\n *\n * @package AKSRT\n * @version 3.4.0\n */\n\ndefined('ABSPATH') || exit;\n\n";
|
||||
$bootstrap .= "// Stage 1: helpers\n";
|
||||
foreach ($helpers as $h) {
|
||||
$bootstrap .= "require_once AKSRT_DIR . '/inc/helpers/{$h}';\n";
|
||||
}
|
||||
$bootstrap .= "\n// Stage 2: procedural modules\n";
|
||||
foreach (['captcha.php', 'user-hub.php', 'user-notifications.php', 'creator-revenue.php', 'widgets-register.php'] as $mod) {
|
||||
$bootstrap .= "require_once AKSRT_DIR . '/inc/modules/{$mod}';\n";
|
||||
}
|
||||
$bootstrap .= "\n// Stage 3: core hooks\nrequire_once AKSRT_DIR . '/inc/core-hooks.php';\n\n";
|
||||
$bootstrap .= "// Stage 4: auth service hooks\n";
|
||||
$bootstrap .= 'if (class_exists(\\' . $auth_fq . '::class)) {' . "\n";
|
||||
$bootstrap .= "\t\\" . $auth_fq . "::init();\n}\n\n";
|
||||
$bootstrap .= "// Stage 5: email verification backfill\n";
|
||||
$bootstrap .= "add_action('init', function () {\n";
|
||||
$bootstrap .= "\tif (defined('AKSRT_NO_EMAIL_GATE') && AKSRT_NO_EMAIL_GATE) {\n\t\treturn;\n\t}\n";
|
||||
$bootstrap .= "\tif (!class_exists(\\" . $auth_fq . '::class) || !class_exists(\\' . $settings_fq . "::class)) {\n\t\treturn;\n\t}\n";
|
||||
$bootstrap .= "\tif (!\\" . $settings_fq . "::registration_requires_email_verification()) {\n\t\treturn;\n\t}\n";
|
||||
$bootstrap .= "\tif (get_option('aksrt_email_verification_backfill_done')) {\n\t\treturn;\n\t}\n";
|
||||
$bootstrap .= "\tif (!is_admin() && !(defined('DOING_CRON') && DOING_CRON)) {\n\t\treturn;\n\t}\n";
|
||||
$bootstrap .= "\t\\" . $auth_fq . "::backfill_legacy_users_as_verified();\n}, 5);\n\n";
|
||||
$bootstrap .= "add_action('aksrt_email_verification_backfill_batch', function (\$offset = 0) {\n";
|
||||
$bootstrap .= "\tif (class_exists(\\" . $auth_fq . "::class)) {\n";
|
||||
$bootstrap .= "\t\t\\" . $auth_fq . "::run_async_backfill_batch((int) \$offset);\n\t}\n}, 10, 1);\n\n";
|
||||
$bootstrap .= "add_action('admin_init', function () {\n}, 5);\n";
|
||||
|
||||
aksrt_write($root . '/inc/bootstrap.php', $bootstrap, $dry);
|
||||
|
||||
$composer_path = $root . '/composer.json';
|
||||
$composer = json_decode((string) file_get_contents($composer_path), true, 512, JSON_THROW_ON_ERROR);
|
||||
$composer['autoload'] = [
|
||||
'psr-4' => [
|
||||
'AKSRT\\' => 'src/AKSRT/',
|
||||
],
|
||||
];
|
||||
$composer['description'] = 'AKSRT WordPress Theme';
|
||||
$json = json_encode($composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
|
||||
aksrt_write($composer_path, $json, $dry);
|
||||
|
||||
// functions.php must require composer autoload (already does) — ensure fatal if missing for theme classes.
|
||||
if (!$dry) {
|
||||
$fn = (string) file_get_contents($root . '/functions.php');
|
||||
// Already rewritten class names. Optionally strengthen vendor require message.
|
||||
if (!str_contains($fn, 'vendor/autoload.php')) {
|
||||
fwrite(STDERR, "functions.php missing vendor/autoload.php require\n");
|
||||
}
|
||||
}
|
||||
|
||||
echo "Done.\n";
|
||||
exit(($failed && !$dry) ? 1 : 0);
|
||||
Reference in New Issue
Block a user