API
1 month ago
Blocks
10 months ago
License
1 month ago
AdminNotice.php
3 weeks ago
AdminNotices.php
3 weeks ago
AjaxActions.php
3 weeks ago
Blocks.php
1 year ago
Compatibility.php
10 months ago
Learn.php
1 month ago
Menu.php
1 month ago
Migrations.php
1 year ago
NpsSurvey.php
5 months ago
Onboarding.php
3 weeks ago
Player.php
3 days ago
PluginInstaller.php
1 month ago
PreloadService.php
1 year ago
ProCompatibility.php
1 month ago
ReusableVideos.php
2 weeks ago
RewriteRulesManager.php
1 year ago
Scripts.php
2 weeks ago
Settings.php
1 month ago
Shortcodes.php
1 month ago
Streamer.php
3 weeks ago
Translation.php
3 weeks ago
Usage.php
3 weeks ago
VideoPostType.php
2 weeks ago
NpsSurvey.php
80 lines
| 1 | <?php |
| 2 | /** |
| 3 | * NPS Survey Service. |
| 4 | * |
| 5 | * Responsible for loading the latest version of the NPS Survey library. |
| 6 | * This ensures version arbitration works correctly when multiple plugins |
| 7 | * ship the same library. |
| 8 | * |
| 9 | * @package PrestoPlayer\Services |
| 10 | */ |
| 11 | |
| 12 | namespace PrestoPlayer\Services; |
| 13 | |
| 14 | use PrestoPlayer\Contracts\Service; |
| 15 | |
| 16 | /** |
| 17 | * NPS Survey Service. |
| 18 | */ |
| 19 | class NpsSurvey implements Service { |
| 20 | |
| 21 | /** |
| 22 | * Register the service. |
| 23 | * |
| 24 | * @return void |
| 25 | */ |
| 26 | public function register() { |
| 27 | $this->versionCheck(); |
| 28 | add_action( 'init', array( $this, 'load' ), 999 ); |
| 29 | } |
| 30 | |
| 31 | /** |
| 32 | * Version Check |
| 33 | * |
| 34 | * Compares the bundled NPS survey version against a global variable |
| 35 | * to ensure only the highest version is loaded (shared library pattern). |
| 36 | * |
| 37 | * @return void |
| 38 | */ |
| 39 | public function versionCheck(): void { |
| 40 | $file = realpath( PRESTO_PLAYER_PLUGIN_DIR . 'inc/lib/nps-survey/version.json' ); |
| 41 | |
| 42 | // Validate file exists and is readable before accessing. |
| 43 | if ( $file && is_file( $file ) && is_readable( $file ) ) { |
| 44 | // @codingStandardsIgnoreStart - file_get_contents is safe here: path is constructed from PRESTO_PLAYER_PLUGIN_DIR constant and hardcoded string, validated with realpath(), is_file(), and is_readable(). |
| 45 | $file_data = json_decode( file_get_contents( $file ), true ); |
| 46 | // @codingStandardsIgnoreEnd |
| 47 | |
| 48 | // Note: Global variables are used for version management across the NPS survey library. |
| 49 | // This is intentional design to allow multiple plugins to share the same library instance. |
| 50 | global $nps_survey_version, $nps_survey_init; |
| 51 | |
| 52 | $path = realpath( PRESTO_PLAYER_PLUGIN_DIR . 'inc/lib/nps-survey/nps-survey.php' ); |
| 53 | $version = $file_data['nps-survey'] ?? 0; |
| 54 | |
| 55 | if ( null === $nps_survey_version ) { |
| 56 | $nps_survey_version = '1.0.0'; |
| 57 | } |
| 58 | |
| 59 | // Compare versions - only register if our version is higher or equal. |
| 60 | if ( version_compare( $version, $nps_survey_version, '>=' ) ) { |
| 61 | $nps_survey_version = $version; |
| 62 | $nps_survey_init = $path; |
| 63 | } |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | /** |
| 68 | * Load the latest version of the NPS survey library. |
| 69 | * |
| 70 | * @return void |
| 71 | */ |
| 72 | public function load(): void { |
| 73 | global $nps_survey_init; |
| 74 | |
| 75 | if ( ! empty( $nps_survey_init ) && is_file( realpath( $nps_survey_init ) ) ) { |
| 76 | include_once realpath( $nps_survey_init ); |
| 77 | } |
| 78 | } |
| 79 | } |
| 80 |