- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
181 lines
4.0 KiB
PHP
Executable File
181 lines
4.0 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Thrive Themes - https://thrivethemes.com
|
|
*
|
|
* @package thrive-dashboard
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Silence is golden
|
|
}
|
|
|
|
/**
|
|
* Save the Notification Post
|
|
*
|
|
* @param $model
|
|
*
|
|
* @return int|false
|
|
*/
|
|
function td_nm_save_notification( $model ) {
|
|
$defaults = array(
|
|
'post_type' => 'td_nm_notification',
|
|
'post_status' => 'publish',
|
|
);
|
|
|
|
if ( empty( $model['ID'] ) ) {
|
|
$id = wp_insert_post( array_merge( $defaults, $model ) );
|
|
} else {
|
|
$id = wp_update_post( $model );
|
|
}
|
|
|
|
if ( empty( $id ) || is_wp_error( $id ) ) {
|
|
return false;
|
|
}
|
|
|
|
//save trigger or delete the notification
|
|
$trigger_saved = td_nm_save_trigger( $model['trigger'], $id );
|
|
if ( empty( $trigger_saved ) ) {
|
|
td_nm_delete_notification( $id );
|
|
|
|
return false;
|
|
}
|
|
|
|
//save the actions or delete the notification
|
|
$actions_saved = td_nm_save_actions( $model['actions'], $id );
|
|
if ( empty( $actions_saved ) ) {
|
|
td_nm_delete_notification( $id );
|
|
|
|
return false;
|
|
}
|
|
|
|
return $id;
|
|
}
|
|
|
|
/**
|
|
* Assign some post_meta for the a notification|post
|
|
*
|
|
* @param array $trigger
|
|
* @param int $notification_id
|
|
*
|
|
* @return int|false
|
|
*/
|
|
function td_nm_save_trigger( $trigger, $notification_id ) {
|
|
if ( empty( $trigger['type'] ) || empty( $trigger['settings'] ) || get_post_status( $notification_id ) === false ) {
|
|
return false;
|
|
}
|
|
|
|
$old_type = get_post_meta( $notification_id, 'td_nm_trigger_type', true );
|
|
$old_settings = get_post_meta( $notification_id, 'td_nm_trigger_settings', true );
|
|
|
|
if ( $trigger['type'] === $old_type && $old_settings === $trigger['settings'] ) {
|
|
return $notification_id;
|
|
}
|
|
|
|
update_post_meta( $notification_id, 'td_nm_trigger_type', $trigger['type'] );
|
|
update_post_meta( $notification_id, 'td_nm_trigger_settings', $trigger['settings'] );
|
|
|
|
return $notification_id;
|
|
}
|
|
|
|
/**
|
|
* Read Notifications from DB based on filters
|
|
*
|
|
* @param array $filters
|
|
*
|
|
* @return array
|
|
*/
|
|
function td_nm_get_notifications( $filters = array() ) {
|
|
$defaults = array(
|
|
'posts_per_page' => - 1,
|
|
'post_type' => 'td_nm_notification',
|
|
'orderby' => 'date',
|
|
'order' => 'ASC',
|
|
);
|
|
|
|
if ( ! function_exists( 'is_plugin_active' ) ) {
|
|
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
|
}
|
|
|
|
$filters = array_merge( $defaults, $filters );
|
|
$posts = get_posts( $filters );
|
|
$notifications = array();
|
|
|
|
foreach ( $posts as $post ) {
|
|
|
|
$trigger = td_nm_get_trigger( $post->ID );
|
|
$trigger_instance = TD_NM_Trigger_Factory::get_instance( $trigger );
|
|
|
|
if ( $applicable = $trigger_instance->is_notification_applicable() ) {
|
|
$post->trigger = $trigger;
|
|
$post->actions = td_nm_get_actions( $post->ID );
|
|
$notifications[] = $post;
|
|
}
|
|
}
|
|
|
|
return $notifications;
|
|
}
|
|
|
|
/**
|
|
* Get trigger for a notification|post
|
|
*
|
|
* @param int $notification_id
|
|
*
|
|
* @return array
|
|
*/
|
|
function td_nm_get_trigger( $notification_id ) {
|
|
$item = array(
|
|
'type' => null,
|
|
'settings' => array(),
|
|
);
|
|
|
|
$item['type'] = get_post_meta( $notification_id, 'td_nm_trigger_type', true );
|
|
$item['settings'] = get_post_meta( $notification_id, 'td_nm_trigger_settings', true );
|
|
$item['ID'] = $notification_id;
|
|
|
|
return $item;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get actions for a notification|post
|
|
*
|
|
* @param int $notification_id
|
|
*
|
|
* @return array
|
|
*/
|
|
function td_nm_get_actions( $notification_id ) {
|
|
$items = get_post_meta( $notification_id, 'td_nm_actions', true );
|
|
foreach ( $items as $key => &$item ) {
|
|
$item['ID'] = $key;
|
|
}
|
|
|
|
return $items;
|
|
}
|
|
|
|
/**
|
|
* @param $actions
|
|
* @param $notification_id
|
|
*
|
|
* @return bool|int
|
|
*/
|
|
function td_nm_save_actions( $actions, $notification_id ) {
|
|
foreach ( $actions as &$action ) {
|
|
$action['notification_id'] = $notification_id;
|
|
}
|
|
|
|
return update_post_meta( $notification_id, 'td_nm_actions', $actions );
|
|
}
|
|
|
|
/**
|
|
* Delete notification|post with all its data|meta
|
|
*
|
|
* @param $notification_id
|
|
*
|
|
* @return bool
|
|
*/
|
|
function td_nm_delete_notification( $notification_id ) {
|
|
$post_deleted = wp_delete_post( $notification_id, true );
|
|
|
|
return empty( $post_deleted ) || is_wp_error( $post_deleted ) ? false : true;
|
|
}
|