936 lines
24 KiB
PHP
936 lines
24 KiB
PHP
<?php
|
|
/**
|
|
* YouTube Feeds Database
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
|
|
namespace SmashBalloon\YouTubeFeed\Builder;
|
|
|
|
class SBY_Db {
|
|
|
|
const RESULTS_PER_PAGE = 20;
|
|
|
|
const RESULTS_PER_CRON_UPDATE = 14;
|
|
|
|
/**
|
|
* Query the sbi_sources table
|
|
*
|
|
* @param array $args
|
|
*
|
|
* @return array|bool
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function source_query( $args = array() ) {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
$page = 0;
|
|
if ( isset( $args['page'] ) ) {
|
|
$page = (int) $args['page'] - 1;
|
|
unset( $args['page'] );
|
|
}
|
|
|
|
$offset = max( 0, $page * self::RESULTS_PER_PAGE );
|
|
|
|
if ( empty( $args ) ) {
|
|
|
|
$limit = (int) self::RESULTS_PER_PAGE;
|
|
$sql = "SELECT s.id, s.account_id, s.account_type, s.privilege, s.access_token, s.username, s.info, s.error, s.expires, count(f.id) as used_in
|
|
FROM $sources_table_name s
|
|
LEFT JOIN $feeds_table_name f ON f.settings LIKE CONCAT('%', s.account_id, '%')
|
|
GROUP BY s.id, s.account_id
|
|
LIMIT $limit
|
|
OFFSET $offset;
|
|
";
|
|
|
|
$results = $wpdb->get_results( $sql, ARRAY_A );
|
|
|
|
if ( empty( $results ) ) {
|
|
return array();
|
|
}
|
|
|
|
$i = 0;
|
|
foreach ( $results as $result ) {
|
|
if ( (int) $result['used_in'] > 0 ) {
|
|
$account_id = sanitize_key( $result['account_id'] );
|
|
$sql = "SELECT *
|
|
FROM $feeds_table_name
|
|
WHERE settings LIKE CONCAT('%', $account_id, '%')
|
|
GROUP BY id
|
|
LIMIT 100;
|
|
";
|
|
|
|
$results[ $i ]['instances'] = $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
$i++;
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
if ( ! empty( $args['expiring'] ) ) {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_type = 'personal'
|
|
AND expires < %s
|
|
AND last_updated < %s
|
|
ORDER BY expires ASC
|
|
LIMIT 5;
|
|
",
|
|
gmdate( 'Y-m-d H:i:s', time() + SBI_REFRESH_THRESHOLD_OFFSET ),
|
|
gmdate( 'Y-m-d H:i:s', time() - SBI_MINIMUM_INTERVAL )
|
|
);
|
|
|
|
return $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
|
|
if ( ! empty( $args['username'] ) ) {
|
|
return $wpdb->get_results(
|
|
$wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE username = %s;
|
|
",
|
|
$args['username']
|
|
),
|
|
ARRAY_A
|
|
);
|
|
}
|
|
|
|
if ( isset( $args['access_token'] ) && ! isset( $args['id'] ) ) {
|
|
return $wpdb->get_results(
|
|
$wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE access_token = %s;
|
|
",
|
|
$args['access_token']
|
|
),
|
|
ARRAY_A
|
|
);
|
|
}
|
|
|
|
if ( ! isset( $args['id'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
if ( is_array( $args['id'] ) ) {
|
|
$id_array = array();
|
|
foreach ( $args['id'] as $id ) {
|
|
$id_array[] = esc_sql( $id );
|
|
}
|
|
} elseif ( strpos( $args['id'], ',' ) !== false ) {
|
|
$id_array = explode( ',', str_replace( ' ', '', esc_sql( $args['id'] ) ) );
|
|
}
|
|
if ( isset( $id_array ) ) {
|
|
$id_string = "'" . implode( "' , '", array_map( 'esc_sql', $id_array ) ) . "'";
|
|
}
|
|
|
|
if ( ! empty( $args['all_business'] ) ) {
|
|
$id_string = empty( $id_string ) ? '0' : $id_string;
|
|
$sql = "
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_id IN ($id_string)
|
|
OR account_type = 'business'
|
|
";
|
|
|
|
return $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
|
|
$privilege = '';
|
|
|
|
if ( ! empty( $privilege ) ) {
|
|
if ( isset( $id_string ) ) {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_id IN ($id_string)
|
|
AND privilege = %s;
|
|
",
|
|
$privilege
|
|
);
|
|
|
|
} else {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_id = %s
|
|
AND privilege = %s;
|
|
",
|
|
$args['id'],
|
|
$privilege
|
|
);
|
|
}
|
|
} else {
|
|
if ( isset( $id_string ) ) {
|
|
$sql = "
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_id IN ($id_string);
|
|
";
|
|
|
|
} else {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $sources_table_name
|
|
WHERE account_id = %s;
|
|
",
|
|
$args['id']
|
|
);
|
|
}
|
|
}
|
|
|
|
return $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
|
|
/**
|
|
* Update a source (connected account)
|
|
*
|
|
* @param array $to_update
|
|
* @param array $where_data
|
|
*
|
|
* @return false|int
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function source_update( $to_update, $where_data ) {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$encryption = new \SB_YouTube_Data_Encryption();
|
|
|
|
$data = array();
|
|
$where = array();
|
|
$format = array();
|
|
$where_format = array();
|
|
if ( isset( $to_update['type'] ) ) {
|
|
$data['account_type'] = $to_update['type'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['privilege'] ) ) {
|
|
$data['privilege'] = $to_update['privilege'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['id'] ) ) {
|
|
$where['account_id'] = $to_update['id'];
|
|
$where_format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['access_token'] ) ) {
|
|
$data['access_token'] = $encryption->maybe_encrypt( $to_update['access_token'] );
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['username'] ) ) {
|
|
$data['username'] = $to_update['username'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['info'] ) ) {
|
|
$data['info'] = $encryption->maybe_encrypt( $to_update['info'] );
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['error'] ) ) {
|
|
$data['error'] = $to_update['error'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['expires'] ) ) {
|
|
$data['expires'] = $to_update['expires'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['last_updated'] ) ) {
|
|
$data['last_updated'] = $to_update['last_updated'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_update['author'] ) ) {
|
|
$data['author'] = $to_update['author'];
|
|
$format[] = '%d';
|
|
}
|
|
|
|
if ( isset( $where_data['type'] ) ) {
|
|
$where['account_type'] = $where_data['type'];
|
|
$where_format[] = '%s';
|
|
}
|
|
if ( isset( $where_data['privilege'] ) ) {
|
|
$where['privilege'] = $where_data['privilege'];
|
|
$where_format[] = '%s';
|
|
}
|
|
if ( isset( $where_data['author'] ) ) {
|
|
$where['author'] = $where_data['author'];
|
|
$where_format[] = '%d';
|
|
}
|
|
if ( isset( $where_data['id'] ) ) {
|
|
$where['account_id'] = $where_data['id'];
|
|
$where_format[] = '%s';
|
|
}
|
|
if ( isset( $where_data['record_id'] ) ) {
|
|
$where['id'] = $where_data['record_id'];
|
|
$where_format[] = '%d';
|
|
}
|
|
$affected = $wpdb->update( $sources_table_name, $data, $where, $format, $where_format );
|
|
|
|
return $affected;
|
|
}
|
|
|
|
/**
|
|
* New source (connected account) data is added to the
|
|
* sbi_sources table and the new insert ID is returned
|
|
*
|
|
* @param array $to_insert
|
|
*
|
|
* @return false|int
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function source_insert( $to_insert ) {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$encryption = new \SB_Instagram_Data_Encryption();
|
|
|
|
$data = array();
|
|
$format = array();
|
|
if ( isset( $to_insert['id'] ) ) {
|
|
$data['account_id'] = $to_insert['id'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['type'] ) ) {
|
|
$data['account_type'] = $to_insert['type'];
|
|
$format[] = '%s';
|
|
} else {
|
|
$data['account_type'] = 'page';
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['privilege'] ) ) {
|
|
$data['privilege'] = $to_insert['privilege'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['access_token'] ) ) {
|
|
$data['access_token'] = $encryption->maybe_encrypt( $to_insert['access_token'] );
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['username'] ) ) {
|
|
$data['username'] = $to_insert['username'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['info'] ) ) {
|
|
$data['info'] = $encryption->maybe_encrypt( $to_insert['info'] );
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['error'] ) ) {
|
|
$data['error'] = $to_insert['error'];
|
|
$format[] = '%s';
|
|
}
|
|
if ( isset( $to_insert['expires'] ) ) {
|
|
$data['expires'] = $to_insert['expires'];
|
|
$format[] = '%s';
|
|
} else {
|
|
$data['expires'] = '2100-12-30 00:00:00';
|
|
$format[] = '%s';
|
|
}
|
|
$data['last_updated'] = gmdate( 'Y-m-d H:i:s' );
|
|
$format[] = '%s';
|
|
if ( isset( $to_insert['author'] ) ) {
|
|
$data['author'] = $to_insert['author'];
|
|
$format[] = '%d';
|
|
} else {
|
|
$data['author'] = get_current_user_id();
|
|
$format[] = '%d';
|
|
}
|
|
|
|
return $wpdb->insert( $sources_table_name, $data, $format );
|
|
}
|
|
|
|
/**
|
|
* Query the to get feeds list for Elementor
|
|
*
|
|
* @return array
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function elementor_feeds_query() {
|
|
global $wpdb;
|
|
$feeds_elementor = array();
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$feeds_list = $wpdb->get_results(
|
|
"
|
|
SELECT id, feed_name FROM $feeds_table_name;
|
|
"
|
|
);
|
|
if ( ! empty( $feeds_list ) ) {
|
|
foreach ( $feeds_list as $feed ) {
|
|
$feeds_elementor[ $feed->id ] = $feed->feed_name;
|
|
}
|
|
}
|
|
return $feeds_elementor;
|
|
}
|
|
|
|
|
|
/**
|
|
* Count the sby_feeds table
|
|
*
|
|
* @return int
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function feeds_count() {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$results = $wpdb->get_results(
|
|
"SELECT COUNT(*) AS num_entries FROM $feeds_table_name",
|
|
ARRAY_A
|
|
);
|
|
return isset( $results[0]['num_entries'] ) ? (int) $results[0]['num_entries'] : 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* Query the sby_feeds table
|
|
*
|
|
* @param array $args
|
|
*
|
|
* @return array|bool
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function feeds_query( $args = array() ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$page = 0;
|
|
if ( isset( $args['page'] ) ) {
|
|
$page = (int) $args['page'] - 1;
|
|
unset( $args['page'] );
|
|
}
|
|
|
|
$offset = max( 0, $page * self::RESULTS_PER_PAGE );
|
|
|
|
if ( isset( $args['id'] ) ) {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $feeds_table_name
|
|
WHERE id = %d;
|
|
",
|
|
$args['id']
|
|
);
|
|
} else {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $feeds_table_name
|
|
LIMIT %d
|
|
OFFSET %d;",
|
|
self::RESULTS_PER_PAGE,
|
|
$offset
|
|
);
|
|
}
|
|
|
|
return $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
|
|
/**
|
|
* Update feed data in the sbi_feed table
|
|
*
|
|
* @param array $to_update
|
|
* @param array $where_data
|
|
*
|
|
* @return false|int
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function feeds_update( $to_update, $where_data ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
$data = array();
|
|
$where = array();
|
|
$format = array();
|
|
foreach ( $to_update as $single_insert ) {
|
|
if ( $single_insert['key'] ) {
|
|
$data[ $single_insert['key'] ] = $single_insert['values'][0];
|
|
$format[] = '%s';
|
|
}
|
|
}
|
|
|
|
if ( isset( $where_data['id'] ) ) {
|
|
$where['id'] = $where_data['id'];
|
|
$where_format = array( '%d' );
|
|
} elseif ( isset( $where_data['feed_name'] ) ) {
|
|
$where['feed_name'] = $where_data['feed_name'];
|
|
$where_format = array( '%s' );
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$data['last_modified'] = gmdate( 'Y-m-d H:i:s' );
|
|
$format[] = '%s';
|
|
|
|
$affected = $wpdb->update( $feeds_table_name, $data, $where, $format, $where_format );
|
|
|
|
return $affected;
|
|
}
|
|
|
|
/**
|
|
* New feed data is added to the sby_feeds table and
|
|
* the new insert ID is returned
|
|
*
|
|
* @param array $to_insert
|
|
*
|
|
* @return false|int
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function feeds_insert( $to_insert ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
$data = array();
|
|
$format = array();
|
|
foreach ( $to_insert as $single_insert ) {
|
|
if ( $single_insert['key'] ) {
|
|
$data[ $single_insert['key'] ] = $single_insert['values'][0];
|
|
$format[] = '%s';
|
|
}
|
|
}
|
|
|
|
$data['last_modified'] = gmdate( 'Y-m-d H:i:s' );
|
|
$format[] = '%s';
|
|
|
|
$data['author'] = get_current_user_id();
|
|
$format[] = '%d';
|
|
|
|
$wpdb->insert( $feeds_table_name, $data, $format );
|
|
return $wpdb->insert_id;
|
|
}
|
|
|
|
/**
|
|
* Query the sby_feeds table
|
|
* Porcess to define the name of the feed when adding new
|
|
*
|
|
* @param string $sourcename
|
|
*
|
|
* @return array|bool
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function feeds_query_name( $sourcename ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$sql = $wpdb->prepare(
|
|
"SELECT * FROM $feeds_table_name
|
|
WHERE feed_name LIKE %s;",
|
|
$wpdb->esc_like( $sourcename ) . '%'
|
|
);
|
|
$count = count( $wpdb->get_results( $sql, ARRAY_A ) );
|
|
return ( $count === 0 ) ? $sourcename : $sourcename . ' (' . ( $count + 1 ) . ')';
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Query to Remove Feeds from Database
|
|
*
|
|
* @param array $feed_ids_array
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function delete_feeds_query( $feed_ids_array ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$feed_caches_table_name = $wpdb->prefix . 'sbi_feed_caches';
|
|
$feed_ids_array = implode( ',', array_map( 'absint', $feed_ids_array ) );
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"DELETE FROM $feeds_table_name WHERE id IN ($feed_ids_array)"
|
|
)
|
|
);
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"DELETE FROM $feed_caches_table_name WHERE feed_id IN ($feed_ids_array)"
|
|
)
|
|
);
|
|
|
|
echo json_encode( SBI_Feed_Builder::get_feed_list() );
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Query to Remove Source from Database
|
|
*
|
|
* @param array $source_id
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function delete_source_query( $source_id ) {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"DELETE FROM $sources_table_name WHERE id = %d; ",
|
|
$source_id
|
|
)
|
|
);
|
|
|
|
echo json_encode( SBI_Feed_Builder::get_source_list() );
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Query to Remove Source from Database
|
|
*
|
|
* @param array $source_id
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function delete_source_by_account_id( $source_id ) {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"DELETE FROM $sources_table_name WHERE account_id = %s; ",
|
|
$source_id
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Query to Duplicate a Single Feed
|
|
*
|
|
* @param int $feed_id
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function duplicate_feed_query( $feed_id ) {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
$wpdb->query(
|
|
$wpdb->prepare(
|
|
"INSERT INTO $feeds_table_name (feed_name, settings, author, status)
|
|
SELECT CONCAT(feed_name, ' (copy)'), settings, author, status
|
|
FROM $feeds_table_name
|
|
WHERE id = %d; ",
|
|
$feed_id
|
|
)
|
|
);
|
|
|
|
echo json_encode( SBI_Feed_Builder::get_feed_list() );
|
|
wp_die();
|
|
}
|
|
|
|
|
|
/**
|
|
* Get cache records in the sbi_feed_caches table
|
|
*
|
|
* @param array $args
|
|
*
|
|
* @return array|object|null
|
|
*/
|
|
public static function feed_caches_query( $args ) {
|
|
global $wpdb;
|
|
$feed_cache_table_name = $wpdb->prefix . 'sbi_feed_caches';
|
|
|
|
if ( ! isset( $args['cron_update'] ) ) {
|
|
$sql = "
|
|
SELECT * FROM $feed_cache_table_name;";
|
|
} else {
|
|
if ( ! isset( $args['additional_batch'] ) ) {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $feed_cache_table_name
|
|
WHERE cron_update = 'yes'
|
|
ORDER BY last_updated ASC
|
|
LIMIT %d;",
|
|
self::RESULTS_PER_CRON_UPDATE
|
|
);
|
|
} else {
|
|
$sql = $wpdb->prepare(
|
|
"
|
|
SELECT * FROM $feed_cache_table_name
|
|
WHERE cron_update = 'yes'
|
|
AND last_updated < %s
|
|
ORDER BY last_updated ASC
|
|
LIMIT %d;",
|
|
gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS ),
|
|
self::RESULTS_PER_CRON_UPDATE
|
|
);
|
|
}
|
|
}
|
|
|
|
return $wpdb->get_results( $sql, ARRAY_A );
|
|
}
|
|
|
|
|
|
/**
|
|
* Creates all database tables used in the new admin area in
|
|
* the 6.0 update.
|
|
*
|
|
* TODO: Add error reporting
|
|
*
|
|
* @since 2.0
|
|
*/
|
|
public static function create_tables( $include_charset_collate = true ) {
|
|
if ( ! function_exists( 'dbDelta' ) ) {
|
|
require_once ABSPATH . '/wp-admin/includes/upgrade.php';
|
|
}
|
|
|
|
global $wpdb;
|
|
$max_index_length = 191;
|
|
$charset_collate = '';
|
|
if ( $include_charset_collate && method_exists( $wpdb, 'get_charset_collate' ) ) { // get_charset_collate introduced in WP 3.5
|
|
$charset_collate = $wpdb->get_charset_collate();
|
|
}
|
|
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
if ( $wpdb->get_var( "show tables like '$feeds_table_name'" ) !== $feeds_table_name ) {
|
|
$sql = "
|
|
CREATE TABLE $feeds_table_name (
|
|
id bigint(20) unsigned NOT NULL auto_increment,
|
|
feed_name text NOT NULL default '',
|
|
feed_title text NOT NULL default '',
|
|
settings longtext NOT NULL default '',
|
|
author bigint(20) unsigned NOT NULL default '1',
|
|
status varchar(255) NOT NULL default '',
|
|
last_modified datetime NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY author (author)
|
|
) $charset_collate;
|
|
";
|
|
$wpdb->query( $sql );
|
|
}
|
|
$error = $wpdb->last_error;
|
|
$query = $wpdb->last_query;
|
|
$had_error = false;
|
|
if ( $wpdb->get_var( "show tables like '$feeds_table_name'" ) !== $feeds_table_name ) {
|
|
$had_error = true;
|
|
}
|
|
|
|
if ( ! $had_error ) {
|
|
}
|
|
|
|
$feed_caches_table_name = $wpdb->prefix . 'sby_feed_caches';
|
|
|
|
if ( $wpdb->get_var( "show tables like '$feed_caches_table_name'" ) !== $feed_caches_table_name ) {
|
|
$sql = '
|
|
CREATE TABLE ' . $feed_caches_table_name . " (
|
|
id bigint(20) unsigned NOT NULL auto_increment,
|
|
feed_id varchar(255) NOT NULL default '',
|
|
cache_key varchar(255) NOT NULL default '',
|
|
cache_value longtext NOT NULL default '',
|
|
cron_update varchar(20) NOT NULL default 'yes',
|
|
last_updated datetime NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY feed_id (feed_id($max_index_length))
|
|
) $charset_collate;";
|
|
$wpdb->query( $sql );
|
|
}
|
|
$error = $wpdb->last_error;
|
|
$query = $wpdb->last_query;
|
|
$had_error = false;
|
|
if ( $wpdb->get_var( "show tables like '$feed_caches_table_name'" ) !== $feed_caches_table_name ) {
|
|
$had_error = true;
|
|
}
|
|
|
|
if ( ! $had_error ) {
|
|
}
|
|
|
|
$sources_table_name = $wpdb->prefix . 'sby_sources';
|
|
|
|
if ( $wpdb->get_var( "show tables like '$sources_table_name'" ) !== $sources_table_name ) {
|
|
$sql = '
|
|
CREATE TABLE ' . $sources_table_name . " (
|
|
id bigint(20) unsigned NOT NULL auto_increment,
|
|
account_id varchar(255) NOT NULL default '',
|
|
account_type varchar(255) NOT NULL default '',
|
|
privilege varchar(255) NOT NULL default '',
|
|
access_token varchar(1000) NOT NULL default '',
|
|
username varchar(255) NOT NULL default '',
|
|
info text NOT NULL default '',
|
|
error text NOT NULL default '',
|
|
expires datetime NOT NULL,
|
|
last_updated datetime NOT NULL,
|
|
author bigint(20) unsigned NOT NULL default '1',
|
|
PRIMARY KEY (id),
|
|
KEY account_type (account_type($max_index_length)),
|
|
KEY author (author)
|
|
) $charset_collate;";
|
|
$wpdb->query( $sql );
|
|
}
|
|
$error = $wpdb->last_error;
|
|
$query = $wpdb->last_query;
|
|
$had_error = false;
|
|
if ( $wpdb->get_var( "show tables like '$sources_table_name'" ) !== $sources_table_name ) {
|
|
$had_error = true;
|
|
}
|
|
|
|
if ( ! $had_error ) {
|
|
}
|
|
}
|
|
|
|
public static function create_sources_database() {
|
|
// not needed
|
|
}
|
|
|
|
public static function clear_sbi_feed_caches() {
|
|
global $wpdb;
|
|
$feed_caches_table_name = $wpdb->prefix . 'sbi_feed_caches';
|
|
|
|
if ( $wpdb->get_var( "show tables like '$feed_caches_table_name'" ) === $feed_caches_table_name ) {
|
|
$wpdb->query( "DELETE FROM $feed_caches_table_name" );
|
|
}
|
|
}
|
|
|
|
public static function clear_sbi_sources() {
|
|
global $wpdb;
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
|
|
if ( $wpdb->get_var( "show tables like '$sources_table_name'" ) === $sources_table_name ) {
|
|
$wpdb->query( "DELETE FROM $sources_table_name" );
|
|
}
|
|
}
|
|
|
|
public static function reset_tables() {
|
|
global $wpdb;
|
|
$feeds_table_name = $wpdb->prefix . 'sby_feeds';
|
|
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feeds_table_name" );
|
|
$feed_caches_table_name = $wpdb->prefix . 'sbi_feed_caches';
|
|
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feed_caches_table_name" );
|
|
|
|
$sources_table_name = $wpdb->prefix . 'sbi_sources';
|
|
$wpdb->query( "DROP TABLE IF EXISTS $sources_table_name" );
|
|
}
|
|
|
|
public static function reset_db_update() {
|
|
update_option( 'sbi_db_version', 1.9 );
|
|
delete_option( 'sbi_legacy_feed_settings' );
|
|
|
|
// are there existing feeds to toggle legacy onboarding?
|
|
$sbi_statuses_option = get_option( 'sbi_statuses', array() );
|
|
|
|
if ( isset( $sbi_statuses_option['legacy_onboarding'] ) ) {
|
|
unset( $sbi_statuses_option['legacy_onboarding'] );
|
|
}
|
|
if ( isset( $sbi_statuses_option['support_legacy_shortcode'] ) ) {
|
|
unset( $sbi_statuses_option['support_legacy_shortcode'] );
|
|
}
|
|
|
|
global $wpdb;
|
|
|
|
$table_name = $wpdb->prefix . 'usermeta';
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `meta_key` LIKE ('sbi\_%')
|
|
"
|
|
);
|
|
|
|
$feed_locator_table_name = $wpdb->prefix . SBI_INSTAGRAM_FEED_LOCATOR;
|
|
|
|
$results = $wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $feed_locator_table_name
|
|
WHERE feed_id LIKE '*%';"
|
|
);
|
|
|
|
update_option( 'sbi_statuses', $sbi_statuses_option );
|
|
}
|
|
|
|
public static function reset_legacy() {
|
|
|
|
//Settings
|
|
delete_option( 'sbi_statuses' );
|
|
delete_option( 'sb_instagram_settings' );
|
|
delete_option( 'sbi_ver' );
|
|
delete_option( 'sb_expired_tokens' );
|
|
delete_option( 'sbi_cron_report' );
|
|
delete_option( 'sb_instagram_errors' );
|
|
delete_option( 'sb_instagram_ajax_status' );
|
|
delete_option( 'sbi_db_version' );
|
|
|
|
// Clear backup caches
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . 'options';
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%!sbi\_%')
|
|
"
|
|
);
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_&sbi\_%')
|
|
"
|
|
);
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_timeout\_&sbi\_%')
|
|
"
|
|
);
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%sb_wlupdated_%')
|
|
"
|
|
);
|
|
|
|
//image resizing
|
|
$upload = wp_upload_dir();
|
|
$posts_table_name = $wpdb->prefix . 'sbi_instagram_posts';
|
|
$feeds_posts_table_name = $wpdb->prefix . 'sbi_instagram_feeds_posts';
|
|
|
|
$image_files = glob( trailingslashit( $upload['basedir'] ) . trailingslashit( SBI_UPLOADS_NAME ) . '*' ); // get all file names
|
|
foreach ( $image_files as $file ) { // iterate files
|
|
if ( is_file( $file ) ) {
|
|
unlink( $file );
|
|
} // delete file
|
|
}
|
|
|
|
//global $wp_filesystem;
|
|
|
|
//$wp_filesystem->delete( trailingslashit( $upload['basedir'] ) . trailingslashit( SBI_UPLOADS_NAME ) , true );
|
|
//Delete tables
|
|
$wpdb->query( "DROP TABLE IF EXISTS $posts_table_name" );
|
|
$wpdb->query( "DROP TABLE IF EXISTS $feeds_posts_table_name" );
|
|
$locator_table_name = $wpdb->prefix . SBI_INSTAGRAM_FEED_LOCATOR;
|
|
$wpdb->query( "DROP TABLE IF EXISTS $locator_table_name" );
|
|
|
|
$table_name = $wpdb->prefix . 'options';
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_\$sbi\_%')
|
|
"
|
|
);
|
|
$wpdb->query(
|
|
"
|
|
DELETE
|
|
FROM $table_name
|
|
WHERE `option_name` LIKE ('%\_transient\_timeout\_\$sbi\_%')
|
|
"
|
|
);
|
|
delete_option( 'sbi_hashtag_ids' );
|
|
delete_option( 'sb_instagram_errors' );
|
|
delete_option( 'sbi_usage_tracking_config' );
|
|
delete_option( 'sbi_usage_tracking' );
|
|
delete_option( 'sbi_oembed_token' );
|
|
delete_option( 'sbi_top_api_calls' );
|
|
delete_option( 'sbi_rating_notice' );
|
|
delete_option( 'sbi_refresh_report' );
|
|
delete_option( 'sbi_welcome_seen' );
|
|
delete_option( 'sbi_notifications' );
|
|
delete_option( 'sbi_newuser_notifications' );
|
|
|
|
global $wp_roles;
|
|
$wp_roles->remove_cap( 'administrator', 'manage_instagram_feed_options' );
|
|
wp_clear_scheduled_hook( 'sbi_feed_update' );
|
|
wp_clear_scheduled_hook( 'sbi_usage_tracking_cron' );
|
|
}
|
|
}
|