Dismissed.php
3.11 KB
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
<?php
namespace OTGS\Installer\AdminNotices;
use OTGS\Installer\FP\Obj;
class Dismissed {
const STORE_KEY = 'dismissed';
/**
* @param array $dismissedNotices
* @param string $repo
* @param string $id
*
* @return bool
*/
public static function isDismissed( array $dismissedNotices, $repo, $id ) {
return isset( $dismissedNotices['repo'][ $repo ][ $id ] );
}
/**
* @param string $plugin_slug
* @param bool $network
* @return void
*/
public static function dismissNoticeOnPluginActivation( $plugin_slug, $network ) {
$repositoryRecommendations = Obj::propOr([], 'repo', apply_filters( 'otgs_installer_admin_notices', [] ) );
$isPluginRecommendation = function( $plugin_attrs ) use ( $plugin_slug ) {
return str_contains($plugin_slug, $plugin_attrs['glue_plugin_slug']);
};
foreach( $repositoryRecommendations as $repository => $notices ) {
if ( ! isset( $notices['plugin-activated'] ) ) {
continue;
}
$pluginRecommendationsToDisable = wpml_collect( $notices['plugin-activated'] )
->filter( $isPluginRecommendation );
foreach ( $pluginRecommendationsToDisable as $plugin => $recommendation ) {
self::dismissNoticeByTypeAndRepository( $repository, 'plugin-activated', $plugin );
}
}
}
/**
* @param array $dismissedNotices
* @param callable $timeOut - int -> string -> string -> bool
*
* @return mixed
*/
public static function clearExpired( array $dismissedNotices, callable $timeOut ) {
if ( isset( $dismissedNotices['repo'] ) ) {
foreach ( $dismissedNotices['repo'] as $repo => $ids ) {
foreach ( $ids as $id => $dismissedTimeStamp ) {
if ( $timeOut( $dismissedTimeStamp, $repo, $id ) ) {
unset ( $dismissedNotices['repo'][ $repo ][ $id ] );
}
}
}
}
return $dismissedNotices;
}
public static function dismissNotice() {
$rawData = filter_var_array( $_POST, [
'repository' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'noticeType' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
'noticePluginSlug' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
] );
self::dismissNoticeByTypeAndRepository(
Obj::propOr('', 'repository', $rawData ),
Obj::propOr('', 'noticeType', $rawData ),
Obj::propOr('', 'noticePluginSlug', $rawData )
);
wp_send_json_success( [] );
}
public static function dismissRecommendationNoticeByPluginSlug( $dismissed, $data ) {
$dismissed['repo'][ $data['repository'] ][ $data['noticePluginSlug'] ] = time();
return $dismissed;
}
/**
* @param string $dismissRepository
* @param string $dismissNoticeType
* @param string $dismissNoticePluginSlug
* @return void
*/
private static function dismissNoticeByTypeAndRepository($dismissRepository, $dismissNoticeType, $dismissNoticePluginSlug) {
$dismissions = apply_filters('otgs_installer_admin_notices_dismissions', []);
$store = new Store();
$dismissed = $store->get(self::STORE_KEY, []);
$data = [
'repository' => $dismissRepository,
'noticeType' => $dismissNoticeType,
'noticePluginSlug' => $dismissNoticePluginSlug,
];
$dismissed = $dismissions[$dismissNoticeType]($dismissed, $data);
$store->save(self::STORE_KEY, $dismissed);
}
}