Files
szkoleniauryzaj.pl/wp-content/plugins/youtube-feed-pro/inc/Services/Integrations/Analytics/SB_Analytics.php
2026-04-26 23:47:49 +02:00

362 lines
7.4 KiB
PHP

<?php
/**
* SB_Analytics plugin integration
* Class to impelement filters to return
* data needed in the SB_Analytics plugin
*/
namespace SmashBalloon\YouTubeFeed\Services\Integrations\Analytics;
use Smashballoon\Customizer\Feed_Builder;
use SmashBalloon\YouTubeFeed\SBY_Feed;
use SmashBalloon\YouTubeFeed\Pro\SBY_Feed_Pro;
use SmashBalloon\YouTubeFeed\SBY_Settings;
use SmashBalloon\YouTubeFeed\Pro\SBY_Settings_Pro;
use SmashBalloon\YouTubeFeed\SBY_Parse;
class SB_Analytics
{
/**
* Summary of current_plugin
* @var string
*/
private static $current_plugin = 'youtube';
/**
* Constructor.
*
* @since x.x.x
*/
public function register()
{
$this->load();
}
/**
* Indicate if current integration is allowed to load.
*
* @since x.x.x
*
* @return bool
*/
public function allow_load()
{
//return defined( 'SB_ANALYTICS_NAMESPACE' ); -- Need to ask regarding this condition.
return true;
}
/**
* Load an integration.
*
* @since x.x.x
*/
public function load()
{
if ($this->allow_load()) {
$this->hooks();
}
}
/**
* Hooks.
*
* @since x.x.x
*/
public function hooks()
{
//Filter Top Posts
add_filter(
'sb_analytics_filter_top_posts',
[$this, 'filter_top_posts'],
10,
3
);
//Filter Profile Details
add_filter(
'sb_analytics_filter_profile_details',
[$this, 'filter_profile_details'],
10,
3
);
//Filter Feed Lists
add_filter(
'sb_analytics_filter_feed_list',
[$this, 'filter_feed_list'],
10,
3
);
}
/**
* Summary of filter_top_posts
*
* @param array $posts
* @param array $post_ids
* @param string $plugin_slug
*
* @return array
*/
public function filter_top_posts($posts, $post_ids, $plugin_slug)
{
if ($plugin_slug !== self::$current_plugin) {
return $posts;
}
if (empty($post_ids)) {
return [];
}
return self::get_posts_by_ids($post_ids);
}
/**
* Filters and modifies profile details based on the current plugin.
*
* @param array $profile_details
* @param int $feed_id
* @param string $plugin_slug
*
* @since x.x.x
*
* @return array
*/
function filter_profile_details($profile_details, $feed_id, $plugin_slug)
{
if ($plugin_slug !== self::$current_plugin) {
return $profile_details;
}
$info = self::get_feed_source_info($feed_id);
if (empty($info)) {
return [];
}
return $info;
}
/**
* Summary of filter_feed_list
*
* @param array $feeds
* @param string $plugin_slug
*
* @since x.x.x
*
* @return array
*/
public function filter_feed_list($feeds, $plugin_slug)
{
if ($plugin_slug !== self::$current_plugin) {
return $feeds;
}
return $this->get_all_feeds();
}
/**
* Get posts by id.
*
* @param array $post_ids Posts id.
*
* @since x.x.x
*
* @return array
*/
public function get_posts_by_ids($post_ids)
{
if (empty($post_ids)) {
return [];
}
$records = [];
$feeds = Feed_Builder::instance()->get_feed_list();
foreach ($feeds as $feed) {
$feed_id = $feed['id'];
if (empty($feed_id)) {
continue;
}
$atts = ['feed' => $feed_id];
$database_settings = sby_get_database_settings();
$youtube_feed_settings =
sby_is_pro()
? new SBY_Settings_Pro($atts, $database_settings, false)
: new SBY_Settings($atts, $database_settings, false);
$youtube_feed_settings->set_feed_type_and_terms();
$youtube_feed_settings->set_transient_name();
$transient_name = $youtube_feed_settings->get_transient_name();
$youtube_feed =
sby_is_pro()
? new SBY_Feed_Pro($transient_name)
: new SBY_Feed($transient_name);
$youtube_feed->set_post_data_from_cache();
$posts = $youtube_feed->get_post_data();
foreach ($posts as $post) {
$youtube_id = '';
if (!empty($post['snippet']['liveBroadcastContent'])) {
$youtube_id = !empty($post['id']) ? $post['id'] : '';
} else {
$youtube_id = !empty($post['snippet']['resourceId']['videoId']) ? $post['snippet']['resourceId']['videoId'] : '';
}
if (in_array($youtube_id, $post_ids, true)) {
$records[$youtube_id] = [
'plugin' => [
'slug' => self::$current_plugin,
],
'feed_id' => $feed_id,
'feed_post_id' => $youtube_id,
'text' => !empty($post['snippet']['title']) ? $post['snippet']['title'] : '',
'imageSrc' => !empty($post['snippet']['thumbnails']['medium']) ? $post['snippet']['thumbnails']['medium']['url'] : '',
'updated_time_ago' => !empty($post['snippet']['publishedAt']) ? sprintf('%s ago', human_time_diff(strtotime($post['snippet']['publishedAt']), time())) : '',
'profile' => [
'label' => !empty($post['snippet']['channelTitle']) ? $post['snippet']['channelTitle'] : '',
'url' => '',
'id' => !empty($post['snippet']['channelId']) ? $post['snippet']['channelId'] : '',
],
];
}
}
}
return $records;
}
/**
* Get all feeds by using the classes from the YouTube plugin.
*
* @since x.x.x
*
* @return array
*/
public function get_all_feeds()
{
$records = [];
$feeds = Feed_Builder::instance()->get_feed_list();
if (empty($feeds)) {
return $records;
}
foreach ($feeds as $feed) {
$feed_id = $feed['id'];
$records[] = [
'value' => [
'feed_id' => !empty($feed_id) ? $feed_id : '',
],
'label' => ! empty($feed['feed_title']) ? $feed['feed_title'] : $feed['feed_name'],
];
}
return $records;
}
/**
* Retrieves source information for a specific feed.
*
* @param int $feed_id
*
* @since x.x.x
*
* @return array
*/
public function get_feed_source_info($feed_id)
{
if (empty($feed_id)) {
return [];
}
$header_data = self::get_header_data($feed_id);
if (empty($header_data)) {
return [];
}
$channel_title = SBY_Parse::get_channel_title( $header_data );
$avatar = SBY_Parse::get_avatar( $header_data, [] );
$source_id = null;
if ( ! empty( $header_data['items'][0]['id'] ) ) {
$source_id = $header_data['items'][0]['id'];
}
return [
'id' => $source_id,
'pluginSlug' => self::$current_plugin,
'profile' => [
'label' => !empty($channel_title) ? $channel_title : '',
'imageSrc' => !empty($avatar) ? $avatar : '',
],
];
}
/**
* Get header data.
*
* @param int $feed_id.
*
* @since x.x.x
*
* @return array
*/
public static function get_header_data($feed_id)
{
$atts = ['feed' => $feed_id];
$database_settings = sby_get_database_settings();
$youtube_feed_settings = sby_is_pro() ? new SBY_Settings_Pro($atts, $database_settings) : new SBY_Settings($atts, $database_settings);
if (empty($database_settings['connected_accounts']) && empty($database_settings['api_key'])) {
return [];
}
$youtube_feed_settings->set_feed_type_and_terms();
$youtube_feed_settings->set_transient_name();
$transient_name = $youtube_feed_settings->get_transient_name();
$youtube_feed = sby_is_pro()
? new SBY_Feed_Pro($transient_name)
: new SBY_Feed($transient_name);
$youtube_feed->set_header_data_from_cache();
$header_data = $youtube_feed->get_header_data();
if ($header_data) {
return $header_data;
}
$youtube_feed->set_remote_header_data(
$youtube_feed_settings,
$youtube_feed_settings->get_feed_type_and_terms(),
$youtube_feed_settings->get_connected_accounts_in_feed()
);
$header_data = $youtube_feed->get_header_data();
}
}