77
88namespace FAIR \Packages \Admin \Info ;
99
10+ use FAIR \Packages ;
1011use FAIR \Packages \Admin ;
1112use FAIR \Packages \MetadataDocument ;
1213use FAIR \Packages \ReleaseDocument ;
@@ -165,7 +166,7 @@ function render( MetadataDocument $doc, string $tab, string $section ) {
165166
166167 <div id="section-holder">
167168 <?php
168- check_requirements ( $ latest );
169+ add_requirement_notices ( $ latest );
169170 foreach ( $ sections as $ section_id => $ content ) {
170171 $ prepared = sanitize_html ( $ content );
171172 $ prepared = links_add_target ( $ prepared , '_blank ' );
@@ -324,53 +325,19 @@ function render_fyi( MetadataDocument $doc, ReleaseDocument $release ) : void {
324325}
325326
326327/**
327- * Get version requirements.
328+ * Check requirements, and add notices if not met .
328329 *
329330 * @param ReleaseDocument $release Release document.
330- *
331- * @return array
331+ * @return void
332332 */
333- function version_requirements ( ReleaseDocument $ release ) {
334- $ required_versions = [];
335- foreach ( $ release ->requires as $ pkg => $ vers ) {
336- $ vers = preg_replace ( '/^[^0-9]+/ ' , '' , $ vers );
337- if ( $ pkg === 'env:php ' ) {
338- $ required_versions ['requires_php ' ] = $ vers ;
339- }
340- if ( $ pkg === 'env:wp ' ) {
341- $ required_versions ['requires_wp ' ] = $ vers ;
342- }
343- }
344- foreach ( $ release ->suggests as $ pkg => $ vers ) {
345- $ vers = preg_replace ( '/^[^0-9]+/ ' , '' , $ vers );
346- if ( $ pkg === 'env:wp ' ) {
347- $ required_versions ['tested_to ' ] = $ vers ;
348- }
333+ function add_requirement_notices ( ReleaseDocument $ release ) : void {
334+ $ unmet_requires = Packages \get_unmet_requirements ( (array ) $ release ->requires );
335+ $ unmet_suggests = Packages \get_unmet_requirements ( (array ) $ release ->suggests );
336+ if ( empty ( $ unmet_requires ) && empty ( $ unmet_suggests ) ) {
337+ return ;
349338 }
350339
351- return $ required_versions ;
352- }
353-
354- /**
355- * Check requirements.
356- *
357- * @param ReleaseDocument $release Release document.
358- *
359- * @return bool
360- */
361- function check_requirements ( ReleaseDocument $ release ) {
362- $ required_versions = version_requirements ( $ release );
363- $ requires_php = $ required_versions ['requires_php ' ] ?? null ;
364- $ requires_wp = $ required_versions ['requires_wp ' ] ?? null ;
365- $ tested_to = $ required_versions ['tested_to ' ] ?? null ;
366-
367- $ compatible_php = is_php_version_compatible ( $ requires_php );
368- $ compatible_wp = is_wp_version_compatible ( $ requires_wp );
369-
370- // Set to true if using a development release.
371- $ tested_wp = (bool ) preg_match ( '/alpha|beta|RC/ ' , get_bloginfo ( 'version ' ) ) ?? ( empty ( $ tested_to ) || version_compare ( get_bloginfo ( 'version ' ), $ tested_to , '<= ' ) );
372-
373- if ( ! $ compatible_php ) {
340+ if ( isset ( $ unmet_requires ['env:php ' ] ) ) {
374341 $ compatible_php_notice_message = '<p> ' ;
375342 $ compatible_php_notice_message .= __ ( '<strong>Error:</strong> This plugin <strong>requires a newer version of PHP</strong>. ' , 'fair ' );
376343
@@ -394,15 +361,16 @@ function check_requirements( ReleaseDocument $release ) {
394361 );
395362 }
396363
397- if ( ! $ tested_wp ) {
364+ $ is_dev = (bool ) preg_match ( '/alpha|beta|RC/ ' , get_bloginfo ( 'version ' ) );
365+ if ( isset ( $ unmet_suggests ['env:wp ' ] ) && ! $ is_dev ) {
398366 wp_admin_notice (
399367 __ ( '<strong>Warning:</strong> This plugin <strong>has not been tested</strong> with your current version of WordPress. ' , 'fair ' ),
400368 [
401369 'type ' => 'warning ' ,
402370 'additional_classes ' => [ 'notice-alt ' ],
403371 ]
404372 );
405- } elseif ( ! $ compatible_wp ) {
373+ } elseif ( isset ( $ unmet_requires [ ' env:wp ' ]) ) {
406374 $ compatible_wp_notice_message = __ ( '<strong>Error:</strong> This plugin <strong>requires a newer version of WordPress</strong>. ' , 'fair ' );
407375 if ( current_user_can ( 'update_core ' ) ) {
408376 $ compatible_wp_notice_message .= sprintf (
@@ -420,8 +388,6 @@ function check_requirements( ReleaseDocument $release ) {
420388 ]
421389 );
422390 }
423-
424- return $ compatible_php && $ compatible_wp && $ tested_to ;
425391}
426392
427393/**
@@ -439,7 +405,7 @@ function get_action_button( MetadataDocument $doc, ReleaseDocument $release ) {
439405 }
440406
441407 // Do we actually meet the requirements?
442- $ compatible = check_requirements ( $ release );
408+ $ compatible = Packages \ check_requirements ( $ release );
443409
444410 $ status = 'install ' ; // todo.
445411 switch ( $ status ) {
0 commit comments