PluginProbe
404 Solution / 4.1.13
404 Solution v4.1.13
4.3.5 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.2.0 4.1.19 4.1.18 4.1.17 4.1.16 4.1.15 4.1.13 4.1.12 4.1.11 4.1.10 4.1.9 4.1.8 4.1.7 4.1.6 4.1.5 4.1.4 4.1.3 trunk 2.30.0 All 109 releases
404-solution / includes / View.php

View.php in 404 Solution 4.1.13, at includes/View.php

85 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 if (!defined('ABSPATH')) {
5 exit;
6 }
7
8 /* Turns data into an html display and vice versa.
9 * Houses all displayed pages. Logs, options page, captured 404s, stats, etc. */
10
11 require_once __DIR__ . '/ViewTrait_Shared.php';
12 require_once __DIR__ . '/ViewTrait_UI.php';
13 require_once __DIR__ . '/ViewTrait_Stats.php';
14 require_once __DIR__ . '/ViewTrait_Settings.php';
15 require_once __DIR__ . '/ViewTrait_Redirects.php';
16 require_once __DIR__ . '/ViewTrait_RedirectsTable.php';
17 require_once __DIR__ . '/ViewTrait_Logs.php';
18
19 class ABJ_404_Solution_View {
20
21 use ViewTrait_Shared,
22 ViewTrait_UI,
23 ViewTrait_Stats,
24 ViewTrait_Settings,
25 ViewTrait_Redirects,
26 ViewTrait_RedirectsTable,
27 ViewTrait_Logs;
28
29 /** @var self|null */
30 private static $instance = null;
31
32 /** @var ABJ_404_Solution_Functions */
33 private $f;
34
35 /** @var ABJ_404_Solution_PluginLogic */
36 private $logic;
37
38 /** @var ABJ_404_Solution_DataAccess */
39 private $dao;
40
41 /** @var ABJ_404_Solution_Logging */
42 private $logger;
43
44 /** @var array<string,string> Latest table data signatures by subpage. */
45 private $tableDataSignatures = array();
46
47 /**
48 * Constructor with dependency injection.
49 * Dependencies are now explicit and visible.
50 *
51 * @param ABJ_404_Solution_Functions|null $functions String manipulation utilities
52 * @param ABJ_404_Solution_PluginLogic|null $pluginLogic Business logic service
53 * @param ABJ_404_Solution_DataAccess|null $dataAccess Data access layer
54 * @param ABJ_404_Solution_Logging|null $logging Logging service
55 */
56 public function __construct($functions = null, $pluginLogic = null, $dataAccess = null, $logging = null) {
57 // Use injected dependencies or fall back to getInstance() for backward compatibility
58 $this->f = $functions !== null ? $functions : abj_service('functions');
59 $this->logic = $pluginLogic !== null ? $pluginLogic : abj_service('plugin_logic');
60 $this->dao = $dataAccess !== null ? $dataAccess : abj_service('data_access');
61 $this->logger = $logging !== null ? $logging : abj_service('logging');
62 }
63
64 /** @return self */
65 public static function getInstance() {
66 if (self::$instance !== null) {
67 return self::$instance;
68 }
69
70 // If the DI container is initialized, prefer it.
71 if (class_exists('ABJ_404_Solution_ServiceContainer')) {
72 $resolved = ABJ_404_Solution_ServiceContainer::safeGet('view');
73 if ($resolved instanceof self) {
74 self::$instance = $resolved;
75 return self::$instance;
76 }
77 }
78
79 self::$instance = new ABJ_404_Solution_View();
80
81 return self::$instance;
82 }
83
84 }
85