PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.6.1
Jetpack – WP Security, Backup, Speed, & Growth v14.6.1
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / sitemaps / sitemap-buffer-xmlwriter.php
jetpack / modules / sitemaps Last commit date
sitemap-buffer-factory.php 1 year ago sitemap-buffer-fallback.php 2 years ago sitemap-buffer-image-fallback.php 2 years ago sitemap-buffer-image-xmlwriter.php 1 year ago sitemap-buffer-image.php 4 years ago sitemap-buffer-master-fallback.php 2 years ago sitemap-buffer-master-xmlwriter.php 1 year ago sitemap-buffer-master.php 4 years ago sitemap-buffer-news-fallback.php 2 years ago sitemap-buffer-news-xmlwriter.php 1 year ago sitemap-buffer-news.php 4 years ago sitemap-buffer-page-fallback.php 2 years ago sitemap-buffer-page-xmlwriter.php 1 year ago sitemap-buffer-page.php 4 years ago sitemap-buffer-video-fallback.php 2 years ago sitemap-buffer-video-xmlwriter.php 1 year ago sitemap-buffer-video.php 4 years ago sitemap-buffer-xmlwriter.php 1 year ago sitemap-buffer.php 1 year ago sitemap-builder.php 1 year ago sitemap-constants.php 1 year ago sitemap-finder.php 2 years ago sitemap-librarian.php 1 year ago sitemap-logger.php 4 years ago sitemap-state.php 2 years ago sitemap-stylist.php 2 years ago sitemaps.php 1 year ago
sitemap-buffer-xmlwriter.php
237 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * XMLWriter implementation of the sitemap buffer.
4 *
5 * @since 14.6
6 * @package automattic/jetpack
7 */
8
9 /**
10 * A buffer for constructing sitemap xml files using XMLWriter.
11 *
12 * @since 14.6
13 */
14 abstract class Jetpack_Sitemap_Buffer_XMLWriter {
15
16 /**
17 * Largest number of items the buffer can hold.
18 *
19 * @access protected
20 * @since 14.6
21 * @var int $item_capacity The item capacity.
22 */
23 protected $item_capacity;
24
25 /**
26 * Largest number of bytes the buffer can hold.
27 *
28 * @access protected
29 * @since 14.6
30 * @var int $byte_capacity The byte capacity.
31 */
32 protected $byte_capacity;
33
34 /**
35 * Flag which detects when the buffer is full.
36 *
37 * @access protected
38 * @since 14.6
39 * @var bool $is_full_flag The flag value.
40 */
41 protected $is_full_flag;
42
43 /**
44 * The most recent timestamp seen by the buffer.
45 *
46 * @access protected
47 * @since 14.6
48 * @var string $timestamp Must be in 'YYYY-MM-DD hh:mm:ss' format.
49 */
50 protected $timestamp;
51
52 /**
53 * The XMLWriter instance used to construct the XML.
54 *
55 * @access protected
56 * @since 14.6
57 * @var XMLWriter $writer
58 */
59 protected $writer;
60
61 /**
62 * Helper class to construct sitemap paths.
63 *
64 * @since 14.6
65 * @protected
66 * @var Jetpack_Sitemap_Finder
67 */
68 protected $finder;
69
70 /**
71 * The XML content as a string.
72 *
73 * @access protected
74 * @since 14.6
75 * @var string $content
76 */
77 protected $content = '';
78
79 /**
80 * Construct a new Jetpack_Sitemap_Buffer_XMLWriter.
81 *
82 * @since 14.6
83 *
84 * @param int $item_limit The maximum size of the buffer in items.
85 * @param int $byte_limit The maximum size of the buffer in bytes.
86 * @param string $time The initial datetime of the buffer. Must be in 'YYYY-MM-DD hh:mm:ss' format.
87 */
88 public function __construct( $item_limit, $byte_limit, $time ) {
89 $this->is_full_flag = false;
90 $this->timestamp = $time;
91 $this->finder = new Jetpack_Sitemap_Finder();
92
93 $this->writer = new XMLWriter();
94 $this->writer->openMemory();
95 $this->writer->setIndent( true );
96 $this->writer->startDocument( '1.0', 'UTF-8' );
97
98 $this->item_capacity = max( 1, (int) $item_limit );
99 $this->byte_capacity = max( 1, (int) $byte_limit );
100
101 $this->initialize_buffer();
102 }
103
104 /**
105 * Initialize the buffer with any required headers or setup.
106 * This should be implemented by child classes.
107 *
108 * @access protected
109 * @since 14.6
110 */
111 abstract protected function initialize_buffer();
112
113 /**
114 * Append an item to the buffer.
115 *
116 * @since 14.6
117 *
118 * @param array $array The item to be added.
119 * @return bool True if the append succeeded, False if not.
120 */
121 public function append( $array ) {
122 if ( $array === null ) {
123 return true;
124 }
125
126 if ( $this->is_full_flag ) {
127 return false;
128 }
129
130 if ( 0 >= $this->item_capacity || 0 >= $this->byte_capacity ) {
131 $this->is_full_flag = true;
132 return false;
133 }
134
135 $current_content = $this->writer->outputMemory( true );
136 $this->content .= $current_content;
137
138 $this->append_item( $array );
139
140 $new_content = $this->writer->outputMemory( true );
141 $this->content .= $new_content;
142
143 // Update capacities after successful append
144 $this->item_capacity -= 1;
145 $this->byte_capacity -= strlen( $new_content );
146
147 // Check both capacity limits
148 if ( 0 >= $this->item_capacity || $this->byte_capacity <= 0 ) {
149 $this->is_full_flag = true;
150 }
151
152 return true;
153 }
154
155 /**
156 * Append a specific item to the buffer.
157 * This should be implemented by child classes.
158 *
159 * @access protected
160 * @since 14.6
161 * @param array $array The item to be added.
162 */
163 abstract protected function append_item( $array );
164
165 /**
166 * Retrieve the contents of the buffer.
167 *
168 * @since 14.6
169 * @return string The contents of the buffer.
170 */
171 public function contents() {
172 $this->writer->endElement(); // End root element (urlset/sitemapindex)
173 $this->writer->endDocument();
174 $final_content = $this->writer->outputMemory( true );
175 $this->content .= $final_content;
176
177 if ( empty( $this->content ) ) {
178 // If buffer is empty, return a minimal valid XML structure
179 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"></urlset>";
180 }
181 return $this->content;
182 }
183
184 /**
185 * Detect whether the buffer is full.
186 *
187 * @since 14.6
188 * @return bool True if the buffer is full, false otherwise.
189 */
190 public function is_full() {
191 return $this->is_full_flag;
192 }
193
194 /**
195 * Detect whether the buffer is empty.
196 *
197 * @since 14.6
198 * @return bool True if the buffer is empty, false otherwise.
199 */
200 public function is_empty() {
201 $current = $this->writer->outputMemory( true );
202 $this->content .= $current;
203 return empty( $this->content );
204 }
205
206 /**
207 * Update the timestamp of the buffer.
208 *
209 * @since 14.6
210 * @param string $new_time A datetime string in 'YYYY-MM-DD hh:mm:ss' format.
211 */
212 public function view_time( $new_time ) {
213 $this->timestamp = max( $this->timestamp, $new_time );
214 }
215
216 /**
217 * Retrieve the timestamp of the buffer.
218 *
219 * @since 14.6
220 * @return string A datetime string in 'YYYY-MM-DD hh:mm:ss' format.
221 */
222 public function last_modified() {
223 return $this->timestamp;
224 }
225
226 /**
227 * Compatibility method for the old DOMDocument implementation.
228 * This is only here to satisfy the jetpack_print_sitemap filter.
229 *
230 * @since 14.6
231 * @return null
232 */
233 public function get_document() {
234 return null;
235 }
236 }
237