config
4 years ago
notices
1 month ago
Config.php
1 month ago
Dismissed.php
1 month ago
Display.php
1 month ago
Loader.php
1 month ago
MessageTexts.php
1 month ago
PageConfig.php
1 month ago
ScreenConfig.php
1 month ago
Store.php
1 month ago
Dismissed.php
87 lines
| 1 | <?php |
| 2 | |
| 3 | namespace OTGS\Installer\AdminNotices; |
| 4 | |
| 5 | use OTGS\Installer\FP\Obj; |
| 6 | |
| 7 | class Dismissed { |
| 8 | const STORE_KEY = 'dismissed'; |
| 9 | |
| 10 | public static function isDismissed( array $dismissedNotices, $repo, $id ) { |
| 11 | return isset( $dismissedNotices['repo'][ $repo ][ $id ] ); |
| 12 | } |
| 13 | |
| 14 | public static function dismissNoticeOnPluginActivation( $plugin_slug, $network ) { |
| 15 | $repositoryRecommendations = Obj::propOr([], 'repo', apply_filters( 'otgs_installer_admin_notices', [] ) ); |
| 16 | |
| 17 | $isPluginRecommendation = function( $plugin_attrs ) use ( $plugin_slug ) { |
| 18 | return '' === $plugin_slug || strpos( $plugin_slug, $plugin_attrs['glue_plugin_slug'] ) !== false; |
| 19 | }; |
| 20 | foreach( $repositoryRecommendations as $repository => $notices ) { |
| 21 | if ( ! isset( $notices['plugin-activated'] ) ) { |
| 22 | continue; |
| 23 | } |
| 24 | $pluginRecommendationsToDisable = array_filter( $notices['plugin-activated'], $isPluginRecommendation ); |
| 25 | |
| 26 | foreach ( $pluginRecommendationsToDisable as $plugin => $recommendation ) { |
| 27 | self::dismissNoticeByTypeAndRepository( $repository, 'plugin-activated', $plugin ); |
| 28 | } |
| 29 | } |
| 30 | } |
| 31 | |
| 32 | public static function clearExpired( array $dismissedNotices, callable $timeOut ) { |
| 33 | if ( isset( $dismissedNotices['repo'] ) ) { |
| 34 | |
| 35 | foreach ( $dismissedNotices['repo'] as $repo => $ids ) { |
| 36 | foreach ( $ids as $id => $dismissedTimeStamp ) { |
| 37 | if ( $timeOut( $dismissedTimeStamp, $repo, $id ) ) { |
| 38 | unset ( $dismissedNotices['repo'][ $repo ][ $id ] ); |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | return $dismissedNotices; |
| 45 | } |
| 46 | |
| 47 | public static function dismissNotice() { |
| 48 | $rawData = filter_var_array( $_POST, [ |
| 49 | 'repository' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, |
| 50 | 'noticeType' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, |
| 51 | 'noticePluginSlug' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, |
| 52 | ] ); |
| 53 | |
| 54 | self::dismissNoticeByTypeAndRepository( |
| 55 | Obj::propOr('', 'repository', $rawData ), |
| 56 | Obj::propOr('', 'noticeType', $rawData ), |
| 57 | Obj::propOr('', 'noticePluginSlug', $rawData ) |
| 58 | ); |
| 59 | |
| 60 | wp_send_json_success( [] ); |
| 61 | } |
| 62 | |
| 63 | public static function dismissRecommendationNoticeByPluginSlug( $dismissed, $data ) { |
| 64 | $dismissed['repo'][ $data['repository'] ][ $data['noticePluginSlug'] ] = time(); |
| 65 | return $dismissed; |
| 66 | } |
| 67 | |
| 68 | private static function dismissNoticeByTypeAndRepository($dismissRepository, $dismissNoticeType, $dismissNoticePluginSlug) { |
| 69 | $dismissions = apply_filters('otgs_installer_admin_notices_dismissions', []); |
| 70 | |
| 71 | $store = new Store(); |
| 72 | |
| 73 | $dismissed = $store->get(self::STORE_KEY, []); |
| 74 | |
| 75 | $data = [ |
| 76 | 'repository' => $dismissRepository, |
| 77 | 'noticeType' => $dismissNoticeType, |
| 78 | 'noticePluginSlug' => $dismissNoticePluginSlug, |
| 79 | ]; |
| 80 | |
| 81 | $dismissed = $dismissions[$dismissNoticeType]($dismissed, $data); |
| 82 | |
| 83 | $store->save(self::STORE_KEY, $dismissed); |
| 84 | } |
| 85 | |
| 86 | } |
| 87 |