Skip to content

Commit 7e236c0

Browse files
Merge pull request #3 from victorandeloci/dev
multi feed support
2 parents 28302fc + 36c6de3 commit 7e236c0

File tree

3 files changed

+76
-36
lines changed

3 files changed

+76
-36
lines changed

js/main.js

+20-2
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,16 @@ if (form) {
2626
form.addEventListener('submit', function(e) {
2727
e.preventDefault();
2828

29-
let feed_url = document.getElementsByName('one_wp_feed_rss_monitor_feed_url')[0].value;
29+
let feed_url_list = [];
30+
document.getElementsByName('one_wp_feed_rss_monitor_feed_url').forEach(input => {
31+
feed_url_list.push(input.value);
32+
});
3033
let default_category_id = document.querySelector('input[name="one_wp_feed_rss_monitor_default_cat"]:checked').value;
3134

3235
// settings save fetch
3336
let formData = new FormData();
3437
formData.append('action', 'one_wp_feed_rss_monitor_save');
35-
formData.append('feed_url', feed_url);
38+
formData.append('feed_url_list', JSON.stringify(feed_url_list));
3639
formData.append('default_category_id', default_category_id);
3740
formData.append('ids_to_terms', JSON.stringify(idsToTerms));
3841

@@ -70,4 +73,19 @@ if (jobBtn) {
7073
document.getElementById('one_wp_feed_rss_monitor_job_response').innerHTML = text;
7174
});
7275
});
76+
}
77+
78+
var addFeedBtn = document.getElementById('one_wp_feed_rss_monitor_add_btn');
79+
if (addFeedBtn) {
80+
addFeedBtn.addEventListener('click', function(e) {
81+
e.preventDefault();
82+
83+
let input = document.createElement('input');
84+
input.setAttribute('type', 'text');
85+
input.setAttribute('name', 'one_wp_feed_rss_monitor_feed_url');
86+
input.classList.add('regular-text');
87+
88+
let container = document.getElementById('one_wp_feed_rss_monitor_feeds_container');
89+
container.appendChild(input);
90+
});
7391
}

one_wp_feed_rss_monitor.php

+39-26
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/*
44
* Plugin Name: One WP Feed RSS Monitor
55
* Description: Monitor and auto-publish podcast episodes as wordpress posts
6-
* Version: 1.0.2
6+
* Version: 1.1.0
77
* Author: Victor Andeloci
88
* Author URI: https://github.com/victorandeloci
99
*/
@@ -33,12 +33,12 @@ function one_wp_feed_rss_monitor_page() {
3333
'one_wp_feed_rss_monitor_main_js',
3434
plugin_dir_url(__FILE__) . 'js/main.js',
3535
[],
36-
'1.0.2',
36+
'1.1.0',
3737
true
3838
);
3939

4040
$options = [
41-
'feed_url' => get_option('one_wp_feed_rss_monitor_feed_url', ''),
41+
'feed_url_list' => get_option('one_wp_feed_rss_monitor_feed_url_list', ''),
4242
'default_category_id' => get_option('one_wp_feed_rss_monitor_default_cat', ''),
4343
'ids_to_terms' => get_option('one_wp_feed_rss_monitor_ids_to_terms', ''),
4444
];
@@ -56,7 +56,7 @@ function one_wp_feed_rss_monitor_page() {
5656

5757
function one_wp_feed_rss_monitor_save() {
5858
try {
59-
update_option('one_wp_feed_rss_monitor_feed_url', sanitize_text_field($_POST['feed_url']));
59+
update_option('one_wp_feed_rss_monitor_feed_url_list', stripslashes($_POST['feed_url_list']));
6060
update_option('one_wp_feed_rss_monitor_default_cat', sanitize_text_field($_POST['default_category_id']));
6161
update_option('one_wp_feed_rss_monitor_ids_to_terms', stripslashes($_POST['ids_to_terms']));
6262

@@ -93,17 +93,25 @@ function one_wp_feed_rss_monitor_get_podcast_episodes($feed_url) {
9393
foreach ($rss->channel->item as $item) {
9494
$episode = [];
9595
$episode['default_title'] = (string) $item->title;
96-
$episode['title'] = (string) str_replace('', '"',
97-
str_replace('', '"',
98-
str_replace('', "'",
99-
str_replace('', '...',
100-
str_replace('', "'",
101-
str_replace('', '-',
102-
trim($item->title)))))));
96+
97+
// title tricky chars removal
98+
$unwanted = [
99+
'' => '"',
100+
'' => '"',
101+
'' => "'",
102+
'' => '...',
103+
'' => "'",
104+
'' => '-'
105+
];
106+
$episode['title'] = strtr( $item->title, $unwanted );
107+
103108
$episode['description'] = (string) $item->description;
104109
$episode['link'] = (string) $item->link;
105110
$episode['mp3_url'] = (string) one_wp_feed_rss_monitor_xml_attribute($item->enclosure, 'url');
106111
$episode['duration'] = (string) $item->children('itunes', true)->duration;
112+
$episode['season'] = (string) $item->children('itunes', true)->season;
113+
$episode['number'] = (string) $item->children('itunes', true)->episode;
114+
$episode['type'] = (string) $item->children('itunes', true)->episodeType;
107115
$episode['image_url'] = (string) $item->children('itunes', true)->image->attributes()->href;
108116
$episode['pub_date'] = (string) $item->pubDate;
109117
$episode['tags'] = [];
@@ -125,7 +133,7 @@ function one_wp_feed_rss_monitor_get_podcast_episodes($feed_url) {
125133
$tags_str = substr($description, $tags_start, $tags_end - $tags_start);
126134
$tags = explode(' ', $tags_str);
127135
foreach ($tags as $tag) {
128-
$episode['tags'][] = str_replace('ç', 'c', str_replace('ã', 'a', str_replace('#', '', $tag)));
136+
$episode['tags'][] = iconv('UTF-8', 'ASCII//TRANSLIT', str_replace('#', '', $tag));
129137
}
130138
}
131139

@@ -143,12 +151,15 @@ function one_wp_feed_rss_monitor_create_podcast_post($episode) {
143151
'post_content' => $episode['description'],
144152
'post_status' => 'publish',
145153
'post_type' => 'post',
146-
'post_date' => date('Y-m-d', strtotime($episode['pub_date'])),
154+
'post_date' => date('Y-m-d H:i:s', strtotime($episode['pub_date'])),
147155
'post_author' => (get_current_user_id() ?? 1),
148156
'meta_input' => array(
149157
'episode_link' => $episode['link'],
150158
'episode_mp3_url' => $episode['mp3_url'],
151159
'episode_duration' => $episode['duration'],
160+
'episode_season' => $episode['season'],
161+
'episode_number' => $episode['number'],
162+
'episode_type' => $episode['type'],
152163
'episode_cover' => $episode['image_url']
153164
)
154165
);
@@ -201,20 +212,22 @@ function one_wp_feed_rss_monitor_create_podcast_post($episode) {
201212
}
202213

203214
function one_wp_feed_rss_monitor_update_posts_episodes() {
204-
$feed_url = get_option('one_wp_feed_rss_monitor_feed_url', '');
205-
if (!empty($feed_url)) {
206-
// get feed RSS eps
207-
$episodes = one_wp_feed_rss_monitor_get_podcast_episodes($feed_url);
208-
if (!empty($episodes)) {
209-
// create posts foreach ep
210-
$podcastPostCount = 0;
211-
foreach ($episodes as $episode) {
212-
if (one_wp_feed_rss_monitor_create_podcast_post($episode))
213-
$podcastPostCount++;
215+
$feed_url_list = get_option('one_wp_feed_rss_monitor_feed_url_list', '');
216+
if (!empty($feed_url_list)) {
217+
foreach (json_decode($feed_url_list) as $i => $feed_url) {
218+
// get feed RSS eps
219+
$episodes = one_wp_feed_rss_monitor_get_podcast_episodes($feed_url);
220+
if (!empty($episodes)) {
221+
// create posts foreach ep
222+
$podcastPostCount = 0;
223+
foreach ($episodes as $episode) {
224+
if (one_wp_feed_rss_monitor_create_podcast_post($episode))
225+
$podcastPostCount++;
226+
}
227+
echo $podcastPostCount . ' post(s) created!';
228+
} else {
229+
echo 'Could not find new episodes on feed ' . ($i + 1) . '...<br>';
214230
}
215-
echo $podcastPostCount . ' post(s) created!';
216-
} else {
217-
echo 'Could not find new episodes...';
218231
}
219232
} else {
220233
echo 'Feed RSS URL not defined!';

templates/settings_form.php

+17-8
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,24 @@
33
<form method="post" action="" id="one_wp_feed_rss_monitor_form">
44
<table class="form-table">
55
<tr>
6-
<th scope="row"><label for="one_wp_feed_rss_monitor_feed_url">Feed RSS URL:</label></th>
6+
<th scope="row"><label for="one_wp_feed_rss_monitor_feed_url">Feed RSS URLs:</label></th>
7+
<td id="one_wp_feed_rss_monitor_feeds_container">
8+
<?php if (!empty(esc_attr($options['feed_url_list']))) : ?>
9+
<?php
10+
$feedUrlList = json_decode($options['feed_url_list']);
11+
foreach ($feedUrlList as $feedUrl) :
12+
?>
13+
<input
14+
type="text"
15+
name="one_wp_feed_rss_monitor_feed_url"
16+
value="<?= $feedUrl ?>"
17+
class="regular-text"
18+
/>
19+
<?php endforeach; ?>
20+
<?php endif; ?>
21+
</td>
722
<td>
8-
<input
9-
type="text"
10-
id="one_wp_feed_rss_monitor_feed_url"
11-
name="one_wp_feed_rss_monitor_feed_url"
12-
value="<?= esc_attr($options['feed_url']) ?>"
13-
class="regular-text"
14-
/>
23+
<button class="button-secondary" id="one_wp_feed_rss_monitor_add_btn">Add feed</button>
1524
</td>
1625
</tr>
1726
<tr>

0 commit comments

Comments
 (0)