PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Newsfeed / NewsfeedProvider.php
wp-staging / Framework / Newsfeed Last commit date
NewsfeedProvider.php 5 months ago NewsfeedRequester.php 5 months ago NewsfeedValidator.php 4 months ago
NewsfeedProvider.php
110 lines
1 <?php
2
3 namespace WPStaging\Framework\Newsfeed;
4
5 use WPStaging\Framework\Language\Language;
6
7 /**
8 * Provides newsfeed data for display in the admin interface.
9 *
10 * Fetches JSON newsfeed data from remote server based on user's language preference
11 * and provides it to the view for rendering.
12 */
13 class NewsfeedProvider
14 {
15 /** @var Language */
16 private $language;
17
18 /** @var bool */
19 private $isDebug = false;
20
21 /** @param Language $language */
22 public function __construct(Language $language)
23 {
24 $this->language = $language;
25 }
26
27 /**
28 * Get newsfeed data as an array for rendering
29 *
30 * @return array|null Newsfeed data or null if unavailable
31 */
32 public function getNewsfeedData()
33 {
34 $newsfeedUrls = $this->getNewsfeedUrls();
35 $languageCode = $this->language->getLocaleLanguageCode();
36
37 foreach ($newsfeedUrls as $newsfeedUrl) {
38 if (!$newsfeedUrl['show']) {
39 continue;
40 }
41
42 $url = $languageCode === 'de' ? $newsfeedUrl['de_url'] : $newsfeedUrl['en_url'];
43 $requester = new NewsfeedRequester($newsfeedUrl['id'] . '_' . $languageCode, $url);
44 $requester->setIsDebug($this->isDebug);
45
46 $data = $requester->returnData();
47 if ($data !== null) {
48 return $data;
49 }
50 }
51
52 return null;
53 }
54
55 /**
56 * Set debug mode (bypasses cache and uses e2e-tests folder)
57 *
58 * @param bool $isDebug
59 * @return void
60 */
61 public function setIsDebug(bool $isDebug)
62 {
63 $this->isDebug = $isDebug;
64 }
65
66 /**
67 * Count the number of Pro-only features in the newsfeed data
68 *
69 * @param array $data
70 * @return int
71 */
72 public function countProFeatures(array $data): int
73 {
74 $count = 0;
75
76 foreach ($data['highlights'] ?? [] as $item) {
77 if (!empty($item['pro_only'])) {
78 $count++;
79 }
80 }
81
82 foreach ($data['fixes'] ?? [] as $item) {
83 if (!empty($item['pro_only'])) {
84 $count++;
85 }
86 }
87
88 return $count;
89 }
90
91 /**
92 * Get configured newsfeed URLs
93 *
94 * @return array
95 */
96 private function getNewsfeedUrls(): array
97 {
98 $testFolder = $this->isDebug ? '/e2e-tests/' : '/';
99
100 return [
101 [
102 'id' => 'newsfeed',
103 'show' => true,
104 'de_url' => 'https://wp-staging.com/newsfeed' . $testFolder . 'newsfeed-de.json',
105 'en_url' => 'https://wp-staging.com/newsfeed' . $testFolder . 'newsfeed-en.json',
106 ],
107 ];
108 }
109 }
110