isNeedToShow(adminGetFixedNotices(),(array)get_user_meta( $user_id, $this->dismissedKey,true ));
}
function allCloseNotice(){
require_once PYS_FREE_PATH . '/notices/fixed.php';
$notices = adminGetFixedNotices();
$user_id = get_current_user_id();
if ( empty( $user_id ) ) {
return;
}
if ( empty( $_REQUEST['nonce'] ) || ! wp_verify_nonce( $_REQUEST['nonce'], 'pys_fixed_notice_opt_dismiss') ) {
return;
}
$dismissedSlugs = (array)get_user_meta( $user_id, $this->dismissedKey,true);
foreach ($notices as $noticesGroup)
{
foreach ($noticesGroup['multiMessage'] as $noticesMessage) {
$dismissedSlugs[] = sanitize_text_field( $noticesMessage['slug'] );
}
}
$dismissedSlugs = array_unique($dismissedSlugs);
update_user_meta($user_id, $this->dismissedKey, $dismissedSlugs );
echo json_encode($dismissedSlugs);
die();
}
function catchOnCloseNotice() {
require_once PYS_FREE_PATH . '/notices/fixed.php';
$notices = adminGetFixedNotices();
$user_id = get_current_user_id();
if ( empty( $user_id ) || empty( $_POST['addon_slug'] ) || empty( $_POST['meta_key'] ) ) {
return;
}
if ( empty( $_REQUEST['nonce'] ) || ! wp_verify_nonce( $_REQUEST['nonce'], 'pys_fixed_notice_dismiss' ) ) {
return;
}
$dismissedSlugs = (array)get_user_meta( $user_id, $this->dismissedKey,true);
foreach ($_POST['meta_key'] as $meta_key)
{
$dismissedSlugs[] = sanitize_text_field( $meta_key );
}
// save dismissed notice
update_user_meta($user_id, $this->dismissedKey, $dismissedSlugs );
echo json_encode($this->whoIsNext($notices));
die();
}
private function renderNotice($notice) {
if ( ! current_user_can( 'manage_pys' ) ) {
return;
}
if ( ! $notice ) {
return;
}
?>
$noticeGroup) {
// check is notice has some plugin dependencies
if( isset($noticeGroup['plugins']) && (count($noticeGroup['plugins']) == 0
|| (count(array_intersect($noticeGroup['plugins'], $activePlugins)) == count($activePlugins)
&& count($noticeGroup['plugins']) == count($activePlugins)))
) {
if(isset($noticeGroup['type']) && $noticeGroup['type'] == 'promo'){
if(!in_array($noticeGroup['slug'],$showedNoticesSlug)) {
$this->renderNotice($noticeGroup);
}
}
}
}
$this->renderNoticeGroped($this->whoIsNext($noticeGroups));
}
private function whoIsNext($noticeGroups) {
$minOrderBlock = 999999;
$user_id = get_current_user_id();
$noticeBlock = array();
foreach ($noticeGroups as $keyGroup => $noticeGroup) {
if(isset($noticeGroup['type']) && $noticeGroup['type'] == 'event chain')
{
$paramGroup = $noticeGroup;
unset($paramGroup['multiMessage']);
$noticeBlock[$noticeGroup['order']] = $paramGroup;
foreach ($noticeGroup['multiMessage'] as $notice){
if(!in_array($notice['slug'], (array)get_user_meta( $user_id, $this->dismissedKey,true ))) {
$noticeBlock[$noticeGroup['order']]['multiMessage'][] = $notice;
}
}
}
}
foreach ($noticeBlock as $block)
{
if(($block['order'] <= $minOrderBlock) && isset($block['multiMessage'])){
$minOrderBlock = $block['order'];
}
}
if(get_user_meta($user_id, 'free_next_chain_notice', true) != $minOrderBlock)
{
if(get_user_meta($user_id, 'free_next_chain_notice', true) < $minOrderBlock && $minOrderBlock != 999999)
{
update_user_meta($user_id, 'free_expiration_chain_notice_dismissed_at', time() + $this->convertTimeToSeconds(isset($noticeBlock[$minOrderBlock]['wait']) ? $noticeBlock[$minOrderBlock]['wait'] : 24, 'hours'));
}
else if(get_user_meta($user_id, 'free_next_chain_notice', true) > $minOrderBlock && $minOrderBlock != 999999)
{
update_user_meta($user_id, 'free_expiration_chain_notice_dismissed_at', time() + $this->convertTimeToSeconds(0, 'seconds'));
}
update_user_meta($user_id, 'free_next_chain_notice', $minOrderBlock);
}
if(isset($noticeBlock[$minOrderBlock]) && (get_user_meta($user_id, 'free_next_chain_notice', true) == $minOrderBlock && time() >= get_user_meta($user_id, 'free_expiration_chain_notice_dismissed_at', true)))
{
return $noticeBlock[$minOrderBlock];
}
}
private function convertTimeToSeconds($timeValue = 24, $type = 'hours')
{
switch ($type){
case 'hours':
$time = $timeValue * 60 * 60;
break;
case 'minute':
$time = $timeValue * 60;
break;
case 'seconds':
$time = $timeValue;
break;
}
return $time;
}
}
/**
* @return NoticesFixed
*/
function NoticesFixed() {
return NoticesFixed::instance();
}
NoticesFixed();