/
Template_Checker_Report.php
119 lines (101 loc) · 3.76 KB
/
Template_Checker_Report.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
/**
* Assembles a report of recently updated plugin views and template overrides in
* possible revision, for each plugin that registers itself and its template
* filepaths.
*/
class Tribe__Support__Template_Checker_Report {
const VERSION_INDEX = 0;
const INCLUDED_VIEWS_INDEX = 1;
const THEME_OVERRIDES_INDEX = 2;
/**
* Contains the individual view/template reports for each registered plugin.
*
* @var array
*/
protected static $plugin_reports = [];
/**
* Container for finished report.
*
* @var string
*/
protected static $complete_report = '';
/**
* Provides an up-to-date report concerning template changes.
*
* @return string
*/
public static function generate() {
foreach ( self::registered_plugins() as $plugin_name => $plugin_template_system ) {
self::generate_for( $plugin_name, $plugin_template_system );
}
self::wrap_report();
return self::$complete_report;
}
protected static function registered_plugins() {
/**
* Provides a mechanism for plugins to register information about their template/view
* setups.
*
* This should be done by adding an entry to $registere_template_systems where the key
* should be the plugin name and the element an array structured as follows:
*
* [
* plugin_version,
* path_to_included_views,
* path_to_theme_overrides
* ]
*
* @var array $registered_template_systems
*/
return apply_filters( 'tribe_support_registered_template_systems', [] );
}
/**
* Creates a report for the specified plugin.
*
* @param string $plugin_name
* @param array $template_system
*/
protected static function generate_for( $plugin_name, array $template_system ) {
$report = '<dt>' . esc_html( $plugin_name ) . '</dt>';
$scanner = new Tribe__Support__Template_Checker(
$template_system[ self::VERSION_INDEX ],
$template_system[ self::INCLUDED_VIEWS_INDEX ],
$template_system[ self::THEME_OVERRIDES_INDEX ]
);
$newly_introduced_or_updated = $scanner->get_views_tagged_this_release();
$outdated_or_unknown = $scanner->get_outdated_overrides( true );
if ( empty( $newly_introduced_or_updated ) && empty( $outdated_or_unknown ) ) {
$report .= '<dd>' . __( 'No notable changes detected', 'tribe-common' ) . '</dd>';
}
if ( ! empty( $newly_introduced_or_updated ) ) {
$report .= '<dd><p>' . sprintf( __( 'Templates introduced or updated with this release (%s):', 'tribe-common' ), $template_system[ self::VERSION_INDEX ] ) . '</p><ul>';
foreach ( $newly_introduced_or_updated as $view_name => $version ) {
$report .= '<li>' . esc_html( $view_name ) . '</li>';
}
$report .= '</ul></dd>';
}
if ( ! empty( $outdated_or_unknown ) ) {
$report .= '<dd><p>' . __( 'Existing theme overrides that may need revision:', 'tribe-common' ) . '</p><ul>';
foreach ( $outdated_or_unknown as $view_name => $version ) {
$version_note = empty( $version )
? __( 'version data missing from override', 'tribe-common' )
: sprintf( __( 'based on %s version', 'tribe-common' ), $version );
$report .= '<li>' . esc_html( $view_name ) . ' (' . $version_note . ') </li>';
}
$report .= '</ul></dd>';
}
self::$plugin_reports[ $plugin_name ] = $report;
}
/**
* Wraps the individual plugin template reports ready for display.
*/
protected static function wrap_report() {
if ( empty( self::$plugin_reports ) ) {
self::$complete_report = '<p>' . __( 'No notable template changes detected.', 'tribe-common' ) . '</p>';
} else {
self::$complete_report = '<p>' . __( 'Information about recent template changes and potentially impacted template overrides is provided below.', 'tribe-common' ) . '</p>'
. '<div class="template-updates-wrapper">' . join( ' ', self::$plugin_reports ) . '</div>';
}
}
}