Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/crm/includes/class-bwfcrm-form-feed.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- 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>
2025-11-03 21:04:30 -06:00

322 lines
7.9 KiB
PHP
Executable File

<?php
#[AllowDynamicProperties]
class BWFCRM_Form_Feed {
private $_id = 0;
private $_source = '';
private $_title = '';
private $_contacts = 0;
private $_status = 1;
private $_data = array();
private $_db_row = array();
public static $STATUS_DRAFT = 1;
public static $STATUS_ACTIVE = 2;
public static $STATUS_INACTIVE = 3;
public function __construct( $feed_id = 0 ) {
if ( empty( absint( $feed_id ) ) ) {
return;
}
$feed = BWFAN_Model_Form_Feeds::get( absint( $feed_id ) );
if ( ! is_array( $feed ) || empty( $feed ) ) {
return;
}
/** Set the DB row for further use */
$this->set_db_row( $feed );
$this->set_form_feed( $feed['ID'], $feed['title'], $feed['contacts'], $feed['source'], $feed['status'], $feed['data'] );
}
public function is_feed_exists() {
return $this->get_id() > 0;
}
public function set_form_feed( $id, $title, $contacts, $source, $status, $data ) {
! empty( absint( $id ) ) && $this->set_id( absint( $id ) );
! empty( $title ) && $this->set_title( $title );
! empty( $contacts ) && $this->set_contacts( absint( $contacts ) );
! empty( $source ) && $this->set_source( $source );
! empty( absint( $status ) ) && $this->set_status( $status );
if ( ! is_array( $data ) && ! empty( $data ) ) {
$data = json_decode( $data, true );
}
if ( is_array( $data ) && ! empty( $data ) ) {
foreach ( $data as $key => $datum ) {
$this->set_data( $key, $datum );
}
}
}
public function set_db_row( $db_row = [] ) {
if ( empty( $db_row ) ) {
return;
}
$this->_db_row = $db_row;
}
public function get_id() {
return absint( $this->_id );
}
public function get_source() {
return $this->_source;
}
public function get_title() {
return $this->_title;
}
public function get_contacts() {
return $this->_contacts;
}
public function get_db_row() {
return $this->_db_row;
}
public function get_created_at() {
$feed = $this->get_db_row();
if ( empty( $feed ) || ! isset( $feed['created_at'] ) ) {
return '';
}
return $feed['created_at'];
}
public function get_updated_at() {
$feed = $this->get_db_row();
if ( empty( $feed ) || ! isset( $feed['updated_at'] ) ) {
return '';
}
return $feed['updated_at'];
}
public function get_status() {
return absint( $this->_status );
}
public function get_status_text() {
switch ( $this->_status ) {
case self::$STATUS_DRAFT:
return __( 'Draft', 'wp-marketing-automations-pro' );
case self::$STATUS_ACTIVE:
return __( 'Active', 'wp-marketing-automations-pro' );
case self::$STATUS_INACTIVE:
return __( 'Inactive', 'wp-marketing-automations-pro' );
default:
return '';
}
}
public function get_data( $key = '' ) {
if ( empty( $key ) ) {
return $this->_data;
}
return isset( $this->_data[ $key ] ) ? $this->_data[ $key ] : '';
}
public function set_id( $id ) {
$this->_id = absint( $id );
}
public function set_source( $source ) {
$this->_source = $source;
}
public function set_title( $title ) {
$this->_title = $title;
}
public function set_status( $status ) {
$this->_status = absint( $status );
}
public function set_contacts( $count ) {
$this->_contacts = absint( $count );
}
public function increment_contacts() {
$this->_contacts ++;
}
public function decrement_contacts() {
$this->_contacts --;
}
public function set_data( $key, $value ) {
if ( empty( $key ) ) {
return false;
}
$this->_data[ $key ] = $value;
return true;
}
public function empty_data() {
$this->_data = [];
}
public function unset_data( $key ) {
if ( ! isset( $this->_data[ $key ] ) ) {
unset( $this->_data[ $key ] );
}
}
/**
* @param bool $reset_previous_data
*
* @return bool|WP_Error
*/
public function save_data( $reset_previous_data = false ) {
if ( 0 === $this->get_id() ) {
return BWFCRM_Common::crm_error( __( 'Feed not exists', 'wp-marketing-automations-pro' ) );
}
$feed_data = $this->get_data();
if ( ! $reset_previous_data ) {
$feed = BWFAN_Model_Form_Feeds::get( $this->get_id() );
if ( ! is_array( $feed ) || empty( $feed ) ) {
return BWFCRM_Common::crm_error( __( 'Invalid DB Feed', 'wp-marketing-automations-pro' ) );
}
$feed_data = isset( $feed['data'] ) && ! empty( $feed['data'] ) ? $feed['data'] : '';
$feed_data = json_decode( $feed_data, true );
$feed_data = ! is_array( $feed_data ) ? [] : $feed_data;
$feed_data = array_replace( $feed_data, $this->get_data() );
}
$feed_data = wp_json_encode( $feed_data );
if ( false === BWFAN_Model_Form_Feeds::update( [ 'data' => $feed_data, 'updated_at' => current_time( 'mysql', 1 ) ], [ 'ID' => $this->get_id() ] ) ) {
return BWFCRM_Common::crm_error( __( 'Unable to update data', 'wp-marketing-automations-pro' ) );
}
return true;
}
/**
* @param bool $reset_previous_data
*
* @return int
*/
public function save( $reset_previous_data = false ) {
if ( 0 === $this->get_id() ) {
BWFAN_Model_Form_Feeds::insert( array(
'title' => $this->get_title(),
'contacts' => $this->get_contacts(),
'source' => $this->get_source(),
'status' => $this->get_status(),
'created_at' => current_time( 'mysql', 1 ),
'updated_at' => current_time( 'mysql', 1 ),
) );
$this->set_id( BWFAN_Model_Form_Feeds::insert_id() );
} else {
BWFAN_Model_Form_Feeds::update( array(
'title' => $this->get_title(),
'contacts' => $this->get_contacts(),
'source' => $this->get_source(),
'status' => $this->get_status(),
'updated_at' => current_time( 'mysql', 1 ),
), [ 'ID' => $this->get_id() ] );
}
$this->save_data( $reset_previous_data );
return $this->get_id();
}
public function get_array( $slim_data = false ) {
$form = BWFCRM_Core()->forms->get_form( $this->get_source() );
$form_link = '';
/** Get Form link to the feed */
if ( $form instanceof BWFCRM_Form_Base ) {
$form_link = $form->get_form_link( $this );
}
$feed = array(
'id' => $this->get_id(),
'title' => empty( $this->get_title() ) ? "Feed #{$this->get_id()}" : $this->get_title(),
'source' => empty( $this->get_source() ) ? '' : $this->get_source(),
'contacts_created' => $this->get_contacts(),
'status' => $this->get_status(),
'status_text' => $this->get_status_text(),
'valid' => ! $slim_data ? $this->is_feed_valid() : '',
'form_link' => $form_link,
'created_on' => get_date_from_gmt( $this->get_created_at() ),
'last_updated' => $this->get_updated_at(),
);
if ( true === $slim_data ) {
return $feed;
}
$feed['data'] = $this->get_data();
/** Fetch updated list */
if ( isset( $feed['data']['lists'] ) ) {
$feed['data']['lists'] = BWFAN_Common::get_updated_tags_and_list( $feed['data']['lists'], 'id','value' );
}
/** Fetch updated tags */
if ( isset( $feed['data']['tags'] ) ) {
$feed['data']['tags'] = BWFAN_Common::get_updated_tags_and_list( $feed['data']['tags'], 'id','value' );
}
$feed['source_meta'] = $this->get_source_meta();
return $feed;
}
public function get_source_meta() {
$form = BWFCRM_Core()->forms->get_form( $this->get_source() );
if ( is_null( $form ) ) {
return array();
}
return $form->get_meta();
}
public function is_feed_valid() {
if ( ! $this->is_feed_exists() ) {
return false;
}
if ( self::$STATUS_DRAFT === $this->get_status() ) {
return true;
}
$form = BWFCRM_Core()->forms->get_form( $this->get_source() );
if ( is_null( $form ) ) {
return false;
}
return $form->is_selected_form_valid( $this );
/** todo: Check if the selected form mapped fields valid */
}
public function delete() {
BWFAN_Model_Form_Feeds::delete( $this->get_id() );
/** Reset All */
$this->reset_object();
}
public function reset_object() {
$this->set_id( 0 );
$this->set_source( '' );
$this->set_status( 1 );
$this->set_contacts( 0 );
$this->set_title( '' );
$this->_data = [];
}
}