<?php
namespace Jet_Engine\Modules\Custom_Content_Types;
/**
* Database manager class
*/
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* Define Base DB class
*/
class DB {
private $_found_items = array();
/**
* Check if booking DB table already exists
*
* @var bool
*/
public $table_exists = null;
/**
* Return format flag;
*
* @var null
*/
public $format_flag = null;
/**
* Stores latest queried result to use it
*
* @var null
*/
public $latest_result = null;
public $defaults = array(
'cct_status' => 'publish',
);
private $table = null;
public $schema = array();
public $queried_item_id = false;
public $queried_item = false;
/**
* Constructor for the class
*/
public function __construct( $table = null, $schema = array() ) {
$this->table = $table;
$this->schema = apply_filters( 'jet-engine/custom-content-types/table-schema', $schema, $this );
if ( ! empty( $_GET['jet_cct_install_tables'] ) ) {
add_action( 'init', array( $this, 'install_table' ) );
}
}
/**
* Return s Custom content types tables prfix
*
* @return [type] [description]
*/
public static function table_prefix() {
return self::wpdb()->prefix . 'jet_cct_';
}
/**
* Returns table name
* @return [type] [description]
*/
public function table() {
return self::table_prefix() . $this->table;
}
public function get_queried_item_id() {
return $this->queried_item_id;
}
public function set_queried_item_id( $item_id = false ) {
$this->queried_item_id = $item_id;
}
public function get_queried_item() {
if ( ! $this->queried_item && $this->get_queried_item_id() ) {
$this->queried_item = $this->get_item( $this->get_queried_item_id() );
}
return $this->queried_item;
}
public function set_queried_item( $item = false ) {
if ( is_integer( $item ) ) {
$this->set_queried_item_id( $item );
$this->get_queried_item();
} else {
$this->queried_item = $item;
}
}
/**
* Insert booking
*
* @param array $booking [description]
* @return [type] [description]
*/
public function insert( $data = array() ) {
if ( ! empty( $this->defaults ) ) {
foreach ( $this->defaults as $default_key => $default_value ) {
if ( ! isset( $data[ $default_key ] ) ) {
$data[ $default_key ] = $default_value;
}
}
}
$time = current_time( 'mysql' );
if ( empty( $data['cct_created'] ) ) {
$data['cct_created'] = $time;
}
if ( empty( $data['cct_modified'] ) ) {
$item['cct_modified'] = $time;
}
foreach ( $data as $key => $value ) {
if ( is_array( $value ) ) {
$value = maybe_serialize( $value );
$data[ $key ] = $value;
}
}
$inserted = self::wpdb()->insert( $this->table(), $data );
if ( $inserted ) {
return self::wpdb()->insert_id;
} else {
return false;
}
}
/**
* Update appointment info
*
* @param array $new_data [description]
* @param array $where [description]
* @return [type] [description]
*/
public function update( $new_data = array(), $where = array() ) {
if ( ! empty( $this->defaults ) ) {
foreach ( $this->defaults as $default_key => $default_value ) {
if ( ! isset( $data[ $default_key ] ) ) {
$data[ $default_key ] = $default_value;
}
}
}
foreach ( $new_data as $key => $value ) {
if ( is_array( $value ) ) {
$value = maybe_serialize( $value );
$new_data[ $key ] = $value;
}
}
if ( empty( $data['cct_modified'] ) ) {
$item['cct_modified'] = current_time( 'mysql' );
}
self::wpdb()->update( $this->table(), $new_data, $where );
}
/**
* Delete column
* @return [type] [description]
*/
public function delete( $where = array() ) {
self::wpdb()->delete( $this->table(), $where );
}
/**
* Returns WPDB error thrown
*
* @return [type] [description]
*/
public function get_errors() {
return self::wpdb()->last_error;
}
/**
* Check if current instance table alredy exists
*
* @return boolean [description]
*/
public function is_table_exists() {
if ( null !== $this->table_exists ) {
return $this->table_exists;
}
$table = $this->table();
if ( strtolower( $table ) === strtolower( self::wpdb()->get_var( "SHOW TABLES LIKE '$table'" ) ) ) {
$this->table_exists = true;
} else {
$this->table_exists = false;
}
return $this->table_exists;
}
/**
* Check if requested table already exists
*
* @return boolean [description]
*/
public static function custom_table_exists( $table = null ) {
if ( ! $table ) {
return false;
}
$table = self::table_prefix() . $table;
if ( $table === self::wpdb()->get_var( "SHOW TABLES LIKE '$table'" ) ) {
return true;
} else {
return false;
}
}
/**
* Try to recreate DB table by request
*
* @return void
*/
public function install_table() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$this->create_table();
}
/**
* Returns WPDB instance
* @return [type] [description]
*/
public static function wpdb() {
global $wpdb;
return $wpdb;
}
/**
* Create DB table for apartment units
*
* @return [type] [description]
*/
public function create_table( $delete_if_exists = false ) {
if ( ! function_exists( 'dbDelta' ) ) {
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
}
if ( $delete_if_exists && $this->is_table_exists() ) {
$this->drop_table();
}
$sql = $this->get_table_schema();
dbDelta( $sql );
}
/**
* Drop current table from DB
*
* @return [type] [description]
*/
public function drop_table() {
$table = $this->table();
self::wpdb()->query( "DROP TABLE $table;" );
}
/**
* Returns table columns schema
*
* @return [type] [description]
*/
public function get_table_schema() {
$charset_collate = $this->wpdb()->get_charset_collate();
$table = $this->table();
$default_columns = array(
'_ID' => 'bigint(20) NOT NULL AUTO_INCREMENT',
'cct_status' => 'text'
);
$additional_columns = $this->schema;
$columns_schema = '';
foreach ( $default_columns as $column => $desc ) {
$columns_schema .= $column . ' ' . $desc . ',';
}
if ( is_array( $additional_columns ) && ! empty( $additional_columns ) ) {
foreach ( $additional_columns as $column => $definition ) {
if ( ! $definition ) {
$definition = 'text';
}
$columns_schema .= $column . ' ' . $definition . ',';
}
}
return "CREATE TABLE $table (
$columns_schema
PRIMARY KEY (_ID)
) $charset_collate;";
}
/**
* Check if content type has given column
*
* @param [type] $column_name [description]
Loading ...