Browse Source

Le plugin de podcast développé à l'origine pour MediaSPIP

v1
kent1@arscenic.info 10 years ago
commit
44bd1794fc
  1. 23
      .gitattributes
  2. 23
      base/podcast_base.php
  3. 31
      base/podcast_upgrade.php
  4. 15
      controleurs/explicit.html
  5. 13
      controleurs/podcast.html
  6. 8
      fonds/cfg_podcast.html
  7. 111
      formulaires/config_podcast.html
  8. BIN
      images/icon_channels.png
  9. BIN
      images/icon_miro.png
  10. BIN
      images/podcast_100.png
  11. BIN
      images/podcast_24.png
  12. BIN
      images/podcast_64.png
  13. 15
      inclure/formulaire_document_saisies.html
  14. 61
      inclure/podcast_item_mrss.html
  15. 3
      inclure/podcast_items.html
  16. 34
      inclure/podcasts_liens.html
  17. 3
      lang/podcast.xml
  18. 126
      lang/podcast_en.php
  19. 124
      lang/podcast_fr.php
  20. 49
      plugin.xml
  21. 46
      podcast.html
  22. 92
      podcast_pipelines.php
  23. 126
      saisies/itunes_categories.html

23
.gitattributes vendored

@ -0,0 +1,23 @@
* text=auto !eol
base/podcast_base.php -text
base/podcast_upgrade.php -text
controleurs/explicit.html -text
controleurs/podcast.html -text
fonds/cfg_podcast.html -text
formulaires/config_podcast.html -text
images/icon_channels.png -text svneol=unset#image/png
images/icon_miro.png -text svneol=unset#image/png
images/podcast_100.png -text svneol=unset#image/png
images/podcast_24.png -text svneol=unset#image/png
images/podcast_64.png -text svneol=unset#image/png
inclure/formulaire_document_saisies.html -text
inclure/podcast_item_mrss.html -text
inclure/podcast_items.html -text
inclure/podcasts_liens.html -text
lang/podcast.xml -text
lang/podcast_en.php -text
lang/podcast_fr.php -text
/plugin.xml -text
/podcast.html -text
/podcast_pipelines.php -text
saisies/itunes_categories.html -text

23
base/podcast_base.php

@ -0,0 +1,23 @@
<?php
/**
* Plugin Podcast
* par kent1
*
* Copyright (c) 2010
* Logiciel libre distribué sous licence GNU/GPL.
*
* Définition des tables
*
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
function podcast_declarer_tables_principales($tables_principales){
$tables_principales['spip_documents']['field']['explicit'] = "VARCHAR(5) DEFAULT 'clean' NOT NULL";
$tables_principales['spip_documents']['field']['podcast'] = "VARCHAR(3) DEFAULT 'oui' NOT NULL";
return $tables_principales;
}
?>

31
base/podcast_upgrade.php

@ -0,0 +1,31 @@
<?php
/**
* Plugin Podcast
* par kent1
*
* Copyright (c) 2010
* Logiciel libre distribué sous licence GNU/GPL.
*
* Installation
*
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
function podcast_upgrade($nom_meta_base_version,$version_cible){
$current_version = 0.0;
if ((!isset($GLOBALS['meta'][$nom_meta_base_version]) )
|| (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
if (version_compare($current_version,'0.0','<=')){
include_spip('base/create');
maj_tables('spip_documents');
ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
}
}
}
function podcast_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
}
?>

15
controleurs/explicit.html

@ -0,0 +1,15 @@
[(#REM)
Controleur pour le crayon 'explicit' sur un document
]<BOUCLE_d(DOCUMENTS){id_document}{tout}>
<select class="crayon-active" name="#ENV{name_explicit}"
style="width:#ENV{largeur}px;#ENV{style}">
<option value="yes"[
(#EXPLICIT|=={oui}|?{selected="selected"})]><:item_oui:></option>
<option value="clean"[
(#EXPLICIT|=={clean}|?{selected="selected"})]><:podcast:valeur_clean:></option>
<option value="no"[
(#EXPLICIT|=={no}|?{selected="selected"})]><:item_non:></option>
</select>
</BOUCLE_d>

13
controleurs/podcast.html

@ -0,0 +1,13 @@
[(#REM)
Controleur pour le crayon 'podcast' sur un document
]<BOUCLE_d(DOCUMENTS){id_document}{tout}>
<select class="crayon-active" name="#ENV{name_podcast}"
style="width:#ENV{largeur}px;#ENV{style}">
<option value="oui"[
(#PODCAST|=={oui}|?{selected="selected"})]><:item_oui:></option>
<option value="non"[
(#PODCAST|=={non}|?{selected="selected"})]><:item_non:></option>
</select>
</BOUCLE_d>

8
fonds/cfg_podcast.html

@ -0,0 +1,8 @@
<!-- titre=<:podcast:cfg_titre_podcast:> -->
<!-- icone=images/podcast_24.png -->
<!-- logo=images/podcast_64.png -->
#CACHE{0}
<div class="ajax">
#FORMULAIRE_CONFIG_PODCAST
</div>

111
formulaires/config_podcast.html

@ -0,0 +1,111 @@
<!-- autoriser=webmestre -->
<!-- refus=<:cfg:refus_configuration_webmestre:> -->
<!-- nom=podcast -->
<div class="formulaire_spip formulaire_config formulaire_config_podcast">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
[(#SAISIE{radio, podcast_auto,
label=<:podcast:label_podcast_auto:>,
explication=<:podcast:explication_podcast_auto:>,
defaut=oui,
datas=#ARRAY{
oui,<:item_oui:>,
non,<:item_non:>}})]
[(#SAISIE{checkbox, podcast_types,
label=<:podcast:label_podcast_types:>,
explication=<:podcast:explication_podcast_types:>,
datas=#ARRAY{
channels,<:podcast:valeur_channels:>,
itunes,<:podcast:valeur_itunes:>,
miro,<:podcast:valeur_miro:>,
mrss,<:podcast:valeur_mrss:>}})]
[(#SAISIE{input,titre_podcast,
explication=<:podcast:explication_titre:>,
label=<:podcast:label_titre:>,
class=multilang,
obligatoire=non})]
[(#SAISIE{input,nom_auteur_podcast,
explication=<:podcast:explication_nom_auteur:>,
class=multilang,
label=<:podcast:label_nom_auteur:>,
obligatoire=non})]
[(#SAISIE{input,email_auteur_podcast,
explication=<:podcast:explication_email_auteur:>,
label=<:podcast:label_email_auteur:>,
obligatoire=non})]
[(#SAISIE{input,copyright_podcast,
explication=<:podcast:explication_copyright:>,
class=multilang,
label=<:podcast:label_copyright:>,
obligatoire=non})]
[(#SAISIE{textarea, resume_podcast,
explication=<:podcast:explication_resume:>,
class=multilang,
label=<:podcast:label_resume:>,
rows=4,
obligatoire=non})]
[(#SAISIE{textarea, description_podcast,
explication=<:podcast:explication_description:>,
class=multilang,
label=<:podcast:label_description:>,
obligatoire=non})]
[(#SAISIE{textarea, keywords_podcast,
class=multilang,
explication=<:podcast:explication_keywords:>,
label=<:podcast:label_keywords:>,
rows=4,
obligatoire=non})]
<li class="fieldset">
<fieldset>
<h3 class="legend"><:podcast:legend_itunes:></h3>
<ul>
[(#SAISIE{radio, explicit_defaut,
label=<:podcast:label_explicit:>,
explication=<:podcast:explication_explicit:>,
defaut=clean,
datas=#ARRAY{
yes,<:item_oui:>,
clean,<:podcast:valeur_clean:>,
no,<:item_non:>}})]
#SET{itunes_categories_hassub,#ARRAY{
0,Arts,
1,Business,
2,Education,
3,Games & Hobbies,
4,Government & Organizations,
5,Health,
6,Religion & Spirituality,
7,Science & Medicine,
8,Society & Culture,
9,Sports & Recreation,
10,Technology}}
[(#SAISIE{itunes_categories,itunes_categories_principales,
explication=<:podcast:explication_itunes_categories_principales:>,
label=<:podcast:label_itunes_categories_principales:>,
type=main})]
<BOUCLE_souscategories(POUR){tableau #CONFIG{podcast/itunes_categories_principales}}>
[(#VALEUR|in_array{#GET{itunes_categories_hassub}}|oui)
[(#SET{type,[(#VALEUR|strtolower|replace{' ','_'})]})]
[(#SET{cat,[(#VAL{podcast:itunes_cat_[(#VALEUR|strtolower|replace{' ','_'}|replace{'_&',''})]}_T)]})]
[(#SET{label,[(#VAL{podcast:label_itunes_sous_categories}_T{#ARRAY{cat,#GET{cat}}})]})]
[(#SAISIE{itunes_categories,itunes_categories_#GET{type},
label=#GET{label},
type=#GET{type}})]
]
</BOUCLE_souscategories>
</ul>
</fieldset>
</li>
</ul>
<p class="boutons">
<input type="submit" name="_cfg_ok" class="submit" value="<:bouton_valider:>" />
</p>
</div>
</form>
</div>

BIN
images/icon_channels.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

BIN
images/icon_miro.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
images/podcast_100.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
images/podcast_24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/podcast_64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

15
inclure/formulaire_document_saisies.html

@ -0,0 +1,15 @@
<BOUCLE_doc(DOCUMENTS){id_document}{tout}>
[(#SAISIE{radio, podcast,
label=<:podcast:label_dans_podcast:>,
defaut=#PODCAST,
datas=#ARRAY{
oui,<:item_oui:>,
non,<:item_non:>}})]
[(#SAISIE{radio, explicit,
label=<:podcast:label_contenu_explicit:>,
defaut=#EXPLICIT,
datas=#ARRAY{
yes,<:item_oui:>,
clean,<:podcast:valeur_clean:>,
no,<:item_non:>}})]
</BOUCLE_doc>

61
inclure/podcast_item_mrss.html

@ -0,0 +1,61 @@
<BOUCLE_document(DOCUMENTS){id_document}>
#SET{id_article,''}
#SET{category_string,' '}
#SET{url_document,#URL_DOCUMENT|url_absolue}
#SET{itunes_formats,#ARRAY|push{pdf}|push{m4a}|push{mov}|push{mp3}|push{mp4}}
<B_article>
<item>
<BOUCLE_article(ARTICLES){id_document}{0,1}>
<title>[(#TITRE|texte_backend)]</title>
[<link>(#URL_ARTICLE|url_absolue)</link>]
[<guid>(#URL_ARTICLE|parametre_url{id_document,#_document:ID_DOCUMENT}|url_absolue)</guid>]
[<comments>(#URL_ARTICLE|url_absolue)#comments</comments>]
[<pubDate>(#DATE|affdate{r})</pubDate>]
[(#SET{description,[(#_document:DESCRIPTIF|?{[(#_document:DESCRIPTIF|supprimer_tags|filtrer_entites)],[(#TEXTE|?{[(#TEXTE|supprimer_tags|filtrer_entites)],''})]})]})]
<BOUCLE_desc(CONDITION){si #GET{description}|strlen}>
<description><![CDATA[#GET{description}]]></description></BOUCLE_desc>
<BOUCLE_mots(MOTS){id_article}>[(#COMPTEUR_BOUCLE|=={#TOTAL_BOUCLE}|non)#SET{category_string,#GET{category_string}|concat{#TITRE|texte_backend}|concat{', '}}][(#COMPTEUR_BOUCLE|=={#TOTAL_BOUCLE}|oui) #SET{category_string,#GET{category_string}|concat{#TITRE|texte_backend}}]
<category><![CDATA[#TITRE]]></category></BOUCLE_mots>
[<itunes:keywords>(#GET{category_string}|trim)</itunes:keywords>]
[<media:keywords>(#GET{category_string}|trim)</media:keywords>]
<BOUCLE_type(CONDITION){si #ENV{type}|=={itunes}|et{#_document:EXTENSION|in_array{#GET{itunes_formats}}|non}}>
<BOUCLE_doc_itunes(DOCUMENTS){id_orig=#_document:ID_DOCUMENT}{extension IN #GET{itunes_formats}}{0,1}>
[<enclosure url="(#URL_DOCUMENT|url_absolue)"[ length="(#_document:TAILLE)"][ type="(#_document:MIME_TYPE)"] />]
</BOUCLE_doc_itunes>
[<enclosure url="(#URL_DOCUMENT|url_absolue)"[ length="(#_document:TAILLE)"][ type="(#_document:MIME_TYPE)"] />]
<//B_doc_itunes>
</BOUCLE_type>
[<enclosure url="(#GET{url_document})"[ length="(#_document:TAILLE)"][ type="(#_document:MIME_TYPE)"] />]
<//B_type>
#SET{id_article,#ID_ARTICLE}
<media:hash algo="md5">[(#FICHIER|md5)]</media:hash>
<media:content
url="[(#GET{url_document})]"[
fileSize="(#_document:TAILLE)"][
type="(#_document:MIME_TYPE)"]
isDefault="true"
expression="full"[
width="(#_document:LARGEUR|>{0}|?{#_document:LARGEUR,''})"][
height="(#_document:HAUTEUR|>{0}|?{#_document:HAUTEUR,''})"][
lang="(#LANG)"]
/>
<BOUCLE_auteurs(AUTEURS){id_article}>
<media:credit>#NOM</media:credit>
</BOUCLE_auteurs>[
<itunes:author>(#LESAUTEURS|supprimer_tags|texte_backend)</itunes:author>][
[<itunes:explicit>(#EXPLICIT)</itunes:explicit>]
<media:thumbnail url="(#LOGO_DOCUMENT|extraire_attribut{src}|url_absolue)" />]
[(#PLUGIN{licence}|oui)#MODELE{licence,id_licence=#ID_LICENCE,modele_type=mrss,cacher_defaut=oui}]
<BOUCLE_point(GIS?){id_article}{0,1}>
<media:location[ description="(#TITRE|texte_script)"]>
<georss:where>
<gml:Point>
<gml:pos>#LAT #LON</gml:pos>
</gml:Point>
</georss:where>
</media:location>
</BOUCLE_point>
</BOUCLE_article>
</item>
</B_article>
</BOUCLE_document>

3
inclure/podcast_items.html

@ -0,0 +1,3 @@
<BOUCLE_documents_podcasts(DOCUMENTS){podcast=oui}{par date}{inverse}{0,25}>
#INCLURE{fond=inclure/podcast_item_mrss,id_document=#ID_DOCUMENT,env}
</BOUCLE_documents_podcasts>

34
inclure/podcasts_liens.html

@ -0,0 +1,34 @@
[(#REM)
Squelette affichant les liens de podcasts
Paramètres d'environnement utilisés si disponibles :
- podcast_types : un array des type de flux à mettre à disposition
]#SET{podcast_flux,#ENV{podcast_types,#CONFIG{podcast/podcast_types,#ARRAY}}}[(#GET{podcast_flux}|count|>{0}|oui)
<ul class="menu-liste">
[(#VAL{channels}|in_array{#GET{podcast_flux}}|oui)
<li class="item">
<a href="http://www.channels.com/autosubscribe?feed_url=#URL_PAGE{podcast}">
[(#CHEMIN{images/icon_channels.png}|image_reduire{16,16}|inserer_attribut{alt,''})]&nbsp;Channels.com
</a>
</li>]
[(#VAL{itunes}|in_array{#GET{podcast_flux}}|oui)
<li class="item">
<a href="[(#URL_PAGE{podcast}|parametre_url{type,itunes}|url_absolue|replace{http://,itpc://})]">
[(#CHEMIN{images/podcast_24.png}|image_reduire{16,16}|inserer_attribut{alt,''})]&nbsp;iTunes
</a>
</li>]
[(#VAL{miro}|in_array{#GET{podcast_flux}}|oui)
<li class="item">
<a href="http://subscribe.getmiro.com/?url1=[(#URL_PAGE{podcast}|url_absolue)]">
[(#CHEMIN{images/icon_miro.png}|image_reduire{16,16}|inserer_attribut{alt,''})]&nbsp;Miro
</a>
</li>]
[(#VAL{mrss}|in_array{#GET{podcast_flux}}|oui)
<li class="item">
<a href="[(#URL_PAGE{podcast}|url_absolue)]">
[(#CHEMIN{feed.png}|image_reduire{16,16}|inserer_attribut{alt,''})]&nbsp;Media RSS
</a>
</li>]
</ul>]

3
lang/podcast.xml

@ -0,0 +1,3 @@
<traduction module="podcast" gestionnaire="salvatore" url="http://trad.mediaspip.net" source="http://svn.aires-de-confluxence.info/svn/plugins_spip/podcast/lang" reference="fr">
<langue code="en" />
</traduction>

126
lang/podcast_en.php

@ -0,0 +1,126 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.mediaspip.net/spip.php?page=tradlang
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_titre_podcast' => 'Podcasts',
// D
'descriptif_flux_defaut' => '@site@ - Recents medias',
// E
'explication_copyright' => 'A sentence explaining the rights of the podcast feed.',
'explication_description' => 'Description of the podcast feed. If this field is not filled, the description of the site will be used. Otherwise a generic sentence is used.',
'explication_email_auteur' => 'Generic email address of the author / owner of the podcast. If this field is left blank, the email of the webmaster of the site will be used.',
'explication_explicit' => 'Default value for the "explicit" value in the podcast feed for each item.',
'explication_itunes_categories_principales' => 'These categories allow you to classify feeds into the Apple Store. Some of them may contain sub-categories.',
'explication_keywords' => 'Keywords associated with the feed. Limit to 12 and separate them by commas.',
'explication_nom_auteur' => 'Generic name of the author and owner of the podcast. Useful for its referencing.',
'explication_podcast_auto' => 'Documents added to the site are automatically included in the podcast feed (It is possible to delete or add them later).',
'explication_podcast_types' => 'What types of feeds are available to visitors.',
'explication_resume' => 'Short summary of the content of the podcast feed. If this field is not filled, the slogan of the site will be used. If the latter is not available, a default sentence take their place.',
'explication_titre' => 'If this field is left blank, the name of the site will be used.',
// I
'itunes_cat_alternative_health' => 'Alternative Health',
'itunes_cat_amateur' => 'Amateur',
'itunes_cat_arts' => 'Arts',
'itunes_cat_automotive' => 'Automotive',
'itunes_cat_aviation' => 'Aviation',
'itunes_cat_buddhism' => 'Buddhism',
'itunes_cat_business' => 'Business',
'itunes_cat_business_news' => 'Business News',
'itunes_cat_business_shopping' => 'Shopping',
'itunes_cat_careers' => 'Careers',
'itunes_cat_christianity' => 'Christianity',
'itunes_cat_college_high_school' => 'College & High School',
'itunes_cat_comedy' => 'Comedy',
'itunes_cat_design' => 'Design',
'itunes_cat_education' => 'Education',
'itunes_cat_education_technology' => 'Education Technology',
'itunes_cat_fashion_beauty' => 'Fashion & Beauty',
'itunes_cat_fitness_nutrition' => 'Fitness & Nutrition',
'itunes_cat_food' => 'Food',
'itunes_cat_gadgets' => 'Gadgets',
'itunes_cat_games_hobbies' => 'Games & Hobbies',
'itunes_cat_government_organizations' => 'Government & Organizations',
'itunes_cat_health' => 'Health',
'itunes_cat_higher_education' => 'Higher Education',
'itunes_cat_hinduism' => 'Hinduism',
'itunes_cat_history' => 'History',
'itunes_cat_hobbies' => 'Hobbies',
'itunes_cat_investing' => 'Investing',
'itunes_cat_islam' => 'Islam',
'itunes_cat_judaism' => 'Judaism',
'itunes_cat_k_12' => 'K-12',
'itunes_cat_kids_family' => 'Kids & Family',
'itunes_cat_language_courses' => 'Language Courses',
'itunes_cat_literature' => 'Literature',
'itunes_cat_local' => 'Local',
'itunes_cat_management_marketting' => 'Management & Marketing',
'itunes_cat_medicine' => 'Medicine',
'itunes_cat_music' => 'Music',
'itunes_cat_national' => 'National',
'itunes_cat_natural_sciences' => 'Natural Sciences',
'itunes_cat_news_politics' => 'News & Politics',
'itunes_cat_non_profit' => 'Non-Profit',
'itunes_cat_other' => 'Other',
'itunes_cat_other_games' => 'Other Games',
'itunes_cat_outdoor' => 'Outdoor',
'itunes_cat_performing_arts' => 'Performing Arts',
'itunes_cat_personnal_journals' => 'Personal Journals',
'itunes_cat_philosophy' => 'Philosophy',
'itunes_cat_places_travel' => 'Places & Travel',
'itunes_cat_podcasting' => 'Podcasting',
'itunes_cat_professional' => 'Professional',
'itunes_cat_regional' => 'Regional',
'itunes_cat_religion_spirituality' => 'Religion & Spirituality',
'itunes_cat_science_medicine' => 'Science & Medicine',
'itunes_cat_self_help' => 'Self-Help',
'itunes_cat_sexuality' => 'Sexuality',
'itunes_cat_social_sciences' => 'Social Sciences',
'itunes_cat_society_culture' => 'Society & Culture',
'itunes_cat_software_how_to' => 'Software How-To',
'itunes_cat_spirituality' => 'Spirituality',
'itunes_cat_sports_recreation' => 'Sports & Recreation',
'itunes_cat_tech_news' => 'Tech News',
'itunes_cat_technology' => 'Technology',
'itunes_cat_training' => 'Training',
'itunes_cat_tv_film' => 'TV & Film',
'itunes_cat_video_games' => 'Video Games',
'itunes_cat_visual_arts' => 'Visual Arts',
// L
'label_contenu_explicit' => 'Explicit content',
'label_copyright' => 'Feed copyright',
'label_dans_podcast' => 'In the podcast feed',
'label_description' => 'Description of the podcast feed',
'label_email_auteur' => 'Author\'s email / owner',
'label_explicit' => 'Explicit content',
'label_itunes_categories_principales' => 'Main categories for iTunes',
'label_itunes_sous_categories' => 'Subcategories of "@cat@"',
'label_keywords' => 'Keywords',
'label_nom_auteur' => 'Author\'s name / owner',
'label_podcast_auto' => 'Automatic podcast',
'label_podcast_types' => 'Feeds types enabled',
'label_resume' => 'Summary of the podcast feed',
'label_titre' => 'Title of the podcast feed',
'legend_itunes' => 'Specific configuration for iTunes',
'legend_mrss' => 'Specific configuration for Media RSS',
// V
'valeur_channels' => 'Channels.com',
'valeur_clean' => 'clean',
'valeur_itunes' => 'iTunes',
'valeur_miro' => 'Miro',
'valeur_mrss' => 'Media RSS',
'valeur_no' => 'No',
'valeur_yes' => 'Yes'
);
?>

124
lang/podcast_fr.php

@ -0,0 +1,124 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans http://svn.aires-de-confluxence.info/svn/plugins_spip/podcast/lang
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_titre_podcast' => 'Podcasts',
// D
'descriptif_flux_defaut' => '@site@ - Médias récents',
// E
'explication_copyright' => 'Une phrase explicitant les droits du flux de podcast',
'explication_description' => 'Description du flux de podcast. Si ce champ n\'est pas rempli, le descriptif du site sera utilisé. À défaut une phrase générique sera utilisée.',
'explication_email_auteur' => 'Email générique de l\'auteur / propriétaire du podcast. Si ce champ est laissé vide, l\'email du webmaster du site sera utilisé.',
'explication_explicit' => 'Valeur par défaut pour la valeur "explicit" dans le flux de podcast pour chaque élément.',
'explication_itunes_categories_principales' => 'Ces catégories permettent de classifier votre flux dans l\'Apple Store. Elles agrémentent les balises &gt;itunes:category&lt; des flux. Certaines d\'entre elles peuvent contenir des sous-catégories.',
'explication_keywords' => 'Mots clés associés au flux. Limitez les à 12 et séparez les par des virgules.',
'explication_nom_auteur' => 'Nom générique de l\'auteur et propriétaire du podcast. Utile pour son référencement.',
'explication_podcast_auto' => 'Les documents ajoutés au site sont automatiquement intégrés au flux de podcast (Il reste possible de les y supprimer ou ajouter par la suite).',
'explication_podcast_types' => 'Quels types de flux sont mis à disposition des visiteurs.',
'explication_resume' => 'Court résumé du contenu du flux de podcast. Si ce champ n\'est pas rempli, le slogan du site sera utilisé. Si ce dernier n\'est pas disponible, une phrase par défaut prendra leur place.',
'explication_titre' => 'Si ce champ est laissé vide, le nom du site sera utilisé.',
// I
'itunes_cat_alternative_health' => 'Médecine parallèle',
'itunes_cat_amateur' => 'Sports amateur',
'itunes_cat_arts' => 'Arts',
'itunes_cat_automotive' => 'Automobile',
'itunes_cat_aviation' => 'Aviation',
'itunes_cat_buddhism' => 'Bouddhisme',
'itunes_cat_business' => 'Économie et entreprise',
'itunes_cat_business_news' => 'L\'actualité commerciale',
'itunes_cat_business_shopping' => 'Shopping',
'itunes_cat_careers' => 'Emplois',
'itunes_cat_christianity' => 'Christianisme',
'itunes_cat_college_high_school' => 'Sports scolaires et universitaires',
'itunes_cat_comedy' => 'Comédie',
'itunes_cat_design' => 'Design',
'itunes_cat_education' => 'Enseignement',
'itunes_cat_education_technology' => 'Formation en ligne',
'itunes_cat_fashion_beauty' => 'Mode et beauté',
'itunes_cat_fitness_nutrition' => 'Fitness et nutrition',
'itunes_cat_food' => 'Gastronomie',
'itunes_cat_gadgets' => 'Gadgets',
'itunes_cat_games_hobbies' => 'Jeux et loisirs',
'itunes_cat_government_organizations' => 'Gouvernement et ONG',
'itunes_cat_health' => 'Santé',
'itunes_cat_higher_education' => 'Enseignement supérieur',
'itunes_cat_hinduism' => 'Hindouisme',
'itunes_cat_history' => 'Histoire',
'itunes_cat_hobbies' => 'Loisirs',
'itunes_cat_investing' => 'Investissements',
'itunes_cat_islam' => 'Islam',
'itunes_cat_judaism' => 'Judaïsme',
'itunes_cat_k_12' => 'Primaire et secondaire',
'itunes_cat_kids_family' => 'Enfants et famille',
'itunes_cat_language_courses' => 'Cours de langue',
'itunes_cat_literature' => 'Littérature',
'itunes_cat_local' => 'Locaux',
'itunes_cat_management_marketting' => 'Gestion et marketting',
'itunes_cat_medicine' => 'Médecine',
'itunes_cat_music' => 'Musique',
'itunes_cat_national' => 'Nationaux',
'itunes_cat_natural_sciences' => 'Sciences naturelles',
'itunes_cat_news_politics' => 'Actualités et politique',
'itunes_cat_non_profit' => 'À but non lucratif',
'itunes_cat_other' => 'Autres',
'itunes_cat_other_games' => 'Autres jeux',
'itunes_cat_outdoor' => 'Plein air',
'itunes_cat_performing_arts' => 'Arts du spectacle',
'itunes_cat_personnal_journals' => 'Journaux personnels',
'itunes_cat_philosophy' => 'Philosophie',
'itunes_cat_places_travel' => 'Destinations et voyages',
'itunes_cat_podcasting' => 'Podcasts',
'itunes_cat_professional' => 'Sports professionnels',
'itunes_cat_regional' => 'Régionaux',
'itunes_cat_religion_spirituality' => 'Religion et spiritualité',
'itunes_cat_science_medicine' => 'Science et médecine',
'itunes_cat_self_help' => 'Autothérapie',
'itunes_cat_sexuality' => 'Sexualité',
'itunes_cat_social_sciences' => 'Sciences sociales',
'itunes_cat_society_culture' => 'Culture et société',
'itunes_cat_software_how_to' => 'Didacticiels',
'itunes_cat_spirituality' => 'Spiritualité',
'itunes_cat_sports_recreation' => 'Sport',
'itunes_cat_tech_news' => 'L\'actualité techno',
'itunes_cat_technology' => 'Technologie',
'itunes_cat_training' => 'Formation',
'itunes_cat_tv_film' => 'Séries TV et films',
'itunes_cat_video_games' => 'Jeux vidéos',
'itunes_cat_visual_arts' => 'Arts visuels',
// L
'label_contenu_explicit' => 'Contenu explicite',
'label_copyright' => 'Copyright du flux',
'label_dans_podcast' => 'Dans le flux de podcast',
'label_description' => 'Description du podcast',
'label_email_auteur' => 'Email de l\'auteur / propriétaire',
'label_explicit' => 'Contenu explicite',
'label_itunes_categories_principales' => 'Catégories principales iTunes',
'label_itunes_sous_categories' => 'Sous catégories de "@cat@"',
'label_keywords' => 'Mots clés',
'label_nom_auteur' => 'Nom de l\'auteur / propriétaire',
'label_podcast_auto' => 'Podcast automatique',
'label_podcast_types' => 'Types de flux mis à disposition',
'label_resume' => 'Résumé du flux de podcast',
'label_titre' => 'Titre du flux de podcast',
'legend_itunes' => 'Configuration spécifique pour iTunes',
'legend_mrss' => 'Configuration spécifique pour Media RSS',
// V
'valeur_channels' => 'Channels.com',
'valeur_clean' => 'clean',
'valeur_itunes' => 'iTunes',
'valeur_miro' => 'Miro',
'valeur_mrss' => 'Media RSS',
'valeur_no' => 'Non',
'valeur_yes' => 'Oui'
);
?>

49
plugin.xml

@ -0,0 +1,49 @@
<plugin>
<nom>
<multi>
[fr]Podcast
[en]Podcasts
</multi>
</nom>
<auteur>[kent1->http://www.kent1.info]</auteur>
<licence>(c) 2010-2012 GPL</licence>
<version>0.1.2</version>
<version_base>0.1.0</version_base>
<etat>dev</etat>
<slogan>
<multi>
[fr]Un ou plusieurs flux de podcast sur son site
[en]One or several podcasts feeds on the site
</multi>
</slogan>
<description>
<multi>
[fr]Un plugin pour mettre à disposition un ou plusieurs flux de podcast sur son site
[en]A plugin to provide one or several podcasts feeds on the site
</multi>
</description>
<icon>images/podcast_64.png</icon>
<prefix>podcast</prefix>
<install>base/podcast_upgrade.php</install>
<pipeline>
<nom>declarer_tables_principales</nom>
<inclure>base/podcast_base.php</inclure>
</pipeline>
<pipeline>
<nom>pre_edition</nom>
<inclure>podcast_pipelines.php</inclure>
</pipeline>
<pipeline>
<nom>post_edition</nom>
<inclure>podcast_pipelines.php</inclure>
</pipeline>
<pipeline>
<nom>editer_contenu_objet</nom>
<inclure>podcast_pipelines.php</inclure>
</pipeline>
<necessite id="saisies" version='[1.7.6;]' />
<necessite id="SPIP" version="[2.1.1;2.1.99]" />
<necessite id='spip_bonux' version='[1.8.10;]' />
<necessite id='cfg' version='[1.13.0;]' />
<categorie>multimedia</categorie>
</plugin>

46
podcast.html

@ -0,0 +1,46 @@
#CACHE{3600}[(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]<?xml version="1.0" encoding="#CHARSET" ?>
<rss version="2.0"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
[<title>(#CONFIG{podcast/titre_podcast,#NOM_SITE_SPIP}|supprimer_tags|texte_backend)</title>]
<atom:link href="[(#SELF|url_absolue)]" rel="self" type="application/rss+xml" />
[<link>(#URL_SITE_SPIP)</link>]
[<lastBuildDate>(#ENV{date}|affdate{r})</lastBuildDate>]
[<pubDate>(#ENV{date}|affdate{r})</pubDate>]
[<itunes:image href="(#LOGO_SITE_SPIP|extraire_attribut{src}|url_absolue)"/>][
[<itunes:explicit>(#CONFIG{podcast/explicit_defaut,clean})</itunes:explicit>]
<image>
<url>(#LOGO_SITE_SPIP|image_passe_partout{144,400}|image_aplatir{jpg,ffffff}|extraire_attribut{src}|url_absolue)</url>
[<height>(#LOGO_SITE_SPIP|image_passe_partout{144,400}|extraire_attribut{height})</height>]
[<width>(#LOGO_SITE_SPIP|image_passe_partout{144,400}|extraire_attribut{width})</width>]
[<title>(#NOM_SITE_SPIP)</title>]
[<link>(#URL_SITE_SPIP)</link>]
</image>][
<managingEditor>(#CONFIG{podcast/email_auteur_podcast,#EMAIL_WEBMASTER}|supprimer_tags|texte_backend)[ ((#CONFIG{podcast/nom_auteur_podcast}|supprimer_tags|texte_backend))]</managingEditor>][
<itunes:author>(#CONFIG{podcast/nom_auteur_podcast}|supprimer_tags|texte_backend)</itunes:author>][
<itunes:owner>[
<itunes:name>(#CONFIG{podcast/nom_auteur_podcast}|supprimer_tags|texte_backend)</itunes:name>]
<itunes:email>(#CONFIG{podcast/email_auteur_podcast,#EMAIL_WEBMASTER}|supprimer_tags|texte_backend)</itunes:email>
</itunes:owner>][
<copyright>(#CONFIG{podcast/copyright_podcast}|supprimer_tags|texte_backend)</copyright>][
<description>(#CONFIG{podcast/description_podcast,#DESCRIPTIF_SITE_SPIP}|sinon{<:podcast:descriptif_flux_defaut{site=#NOM_SITE_SPIP}:>}|supprimer_tags|texte_backend)</description>][
<itunes:summary>(#CONFIG{podcast/description_podcast,#DESCRIPTIF_SITE_SPIP}|sinon{<:podcast:descriptif_flux_defaut{site=#NOM_SITE_SPIP}:>}|supprimer_tags|texte_backend)</itunes:summary>][
<itunes:subtitle>(#CONFIG{podcast/resume_podcast,#SLOGAN_SITE_SPIP}|sinon{<:podcast:resume_flux_defaut{site=#NOM_SITE_SPIP}:>}|supprimer_tags|texte_backend)</itunes:subtitle>][
<language>(#ENV{lang})</language>]
<generator>#NOM_SITE_SPIP (SPIP - http://www.spip.net)</generator>
<ttl>3600</ttl>[
<itunes:keywords>(#CONFIG{podcast/keywords_podcast}|supprimer_tags|texte_backend)</itunes:keywords>]
<BOUCLE_categories_principales(POUR){tableau #CONFIG{podcast/itunes_categories_principales,#ARRAY}}>
[(#SET{type,[(#VALEUR|strtolower|replace{' ','_'})]})]
<B_categories_enfants>[
<itunes:category text="(#VALEUR|texte_backend)">]
<BOUCLE_categories_enfants(POUR){tableau #CONFIG{podcast/itunes_categories_#GET{type},#ARRAY}}>[
<itunes:category text="(#VALEUR|texte_backend)"/>]</BOUCLE_categories_enfants>
</itunes:category></B_categories_enfants>[
<itunes:category text="(#VALEUR|texte_backend)"/>]<//B_categories_enfants>
</BOUCLE_categories_principales>
<INCLURE{fond=inclure/podcast_items,env}>
</channel>
</rss>

92
podcast_pipelines.php

@ -0,0 +1,92 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Insertion dans le pipeline editer_contenu_objet
*
* Affiche les boutons supplémentaires de :
* - changement de la valeur de podcast
* - changement de la valeur de explicit
*
* @param array $flux Le contexte du pipeline
* @return $flux Le contexte du pipeline complété
*/
function podcast_editer_contenu_objet($flux){
$type_form = $flux['args']['type'];
$id_document = $flux['args']['id'];
if(in_array($type_form,array('document'))){
if(preg_match(",<li [^>]*class=[\"']editer_credits.*>(.*)<\/li>,Uims",$flux['data'],$regs)){
$ajouts .= recuperer_fond('inclure/formulaire_document_saisies',array('id_document'=>$id_document));
$flux['data'] = preg_replace(",($regs[1]),Uims","\\1".$ajouts,$flux['data']);
}
}
return $flux;
}
/**
* Insertion dans le pipeline pre_edition
*/
function podcast_pre_edition($flux){
if(($flux['args']['type'] == 'document') && ($flux['args']['action'] == 'modifier') && _request('podcast')){
$flux['data']['podcast'] = _request('podcast');
$flux['data']['explicit'] = _request('explicit');
}
return $flux;
}
/**
* Insertion dans le pipeline post-edition
*
* Intervient à chaque modification d'un objet de SPIP
* notamment lors de l'ajout d'un document
*
* - On met la valeur de podcast en fonction de la conf (oui/non)
* - On met la valeur de explicit en fonction de la conf (oui/non)
*
* @return $flux Le contexte de pipeline complété
* @param array $flux Le contexte du pipeline
*/
function podcast_post_edition($flux){
/**
* On n'intervient que sur les actions d'ajout de document
*/
if(in_array($flux['args']['operation'], array('ajouter_document'))){
$id_document = $flux['args']['id_objet'];
$infos_doc = sql_fetsel('fichier,mode,distant','spip_documents','id_document='.intval($id_document));
$valeur_podcast = lire_config('podcast/podcast_auto'); // oui ou non
$valeur_explicit = lire_config('podcast/explicit_defaut'); // yes / clean / no
/**
* On intervient uniquement lorsque :
* - les valeurs sont différentes de celles par défaut
* - que l'on ne soit pas en mode vignette
*/
if(($infos_doc['mode'] != 'vignette') &&
((isset($valeur_podcast) && ($valeur_podcast != 'oui'))
OR (isset($valeur_explicit) && ($valeur_explicit != 'clean')))){
/**
* Mise à jour du document
*/
include_spip('inc/modifier');
if(isset($valeur_explicit) && ($valeur_explicit != 'clean')){
$infos['explicit'] = $valeur_explicit;
}
if(isset($valeur_podcast) && ($valeur_podcast != 'oui')){
$infos['podcast'] = $valeur_podcast;
}
revision_document($id_document, $infos);
/**
* On invalide le cache de cet élément si nécessaire
*/
include_spip('inc/invalideur');
suivre_invalideur("id='id_document/$id'");
}
}
return $flux;
}
?>

126
saisies/itunes_categories.html

@ -0,0 +1,126 @@
[(#REM)
### /!\ boucle POUR (spip Bonux) ###
Parametres :
- ** datas : tableau de donnees cle=>valeur
- option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
- cacher_option_intro : pas de premier option vide (defaut:"")
- class : classe(s) css ajoutes au select
Exemple d'appel :
[(#SAISIE{itunes_categories,category,
label=<:podcast:label_categories:>,
type=main})]
]
[(#SET{datas_main, [(#ARRAY{
Arts,<:podcast:itunes_cat_arts:>,
Business,<:podcast:itunes_cat_business:>,
Comedy,<:podcast:itunes_cat_comedy:>,
Education,<:podcast:itunes_cat_education:>,
Games &amp; Hobbies,<:podcast:itunes_cat_games_hobbies:>,
Government &amp; Organizations,<:podcast:itunes_cat_government_organizations:>,
Health,<:podcast:itunes_cat_health:>,
Kids &amp; Family,<:podcast:itunes_cat_kids_family:>,
Music,<:podcast:itunes_cat_music:>,
News &amp; Politics,<:podcast:itunes_cat_news_politics:>,
Religion &amp; Spirituality,<:podcast:itunes_cat_religion_spirituality:>,
Science &amp; Medicine,<:podcast:itunes_cat_science_medicine:>,
Society &amp; Culture,<:podcast:itunes_cat_society_culture:>,
Sports &amp; Recreation,<:podcast:itunes_cat_sports_recreation:>,
Technology,<:podcast:itunes_cat_technology:>,
TV &amp; Film,<:podcast:itunes_cat_tv_film:>
})]})]
[(#SET{datas_arts, [(#ARRAY{
Design,<:podcast:itunes_cat_design:>,
Fashion & Beauty,<:podcast:itunes_cat_fashion_beauty:>,
Food,<:podcast:itunes_cat_food:>,
Literature,<:podcast:itunes_cat_literature:>,
Performing Arts,<:podcast:itunes_cat_performing_arts:>,
Visual Arts,<:podcast:itunes_cat_visual_arts:>
})]})]
[(#SET{datas_business, [(#ARRAY{
Business News,<:podcast:itunes_cat_business_news:>,
Careers,<:podcast:itunes_cat_careers:>,
Investing,<:podcast:itunes_cat_investing:>,
Management & Marketing,<:podcast:itunes_cat_management_marketting:>,
Shopping,<:podcast:itunes_cat_business_shopping:>
})]})]
[(#SET{datas_education, [(#ARRAY{
Education Technology,<:podcast:itunes_cat_education_technology:>,
Higher Education,<:podcast:itunes_cat_higher_education:>,
K-12,<:podcast:itunes_cat_k_12:>,
Language Courses,<:podcast:itunes_cat_language_courses:>,
Training,<:podcast:itunes_cat_training:>
})]})]
[(#SET{datas_games_&amp;_hobbies, [(#ARRAY{
Automotive,<:podcast:itunes_cat_automotive:>,
Aviation,<:podcast:itunes_cat_aviation:>,
Hobbies,<:podcast:itunes_cat_hobbies:>,
Other Games,<:podcast:itunes_cat_other_games:>,
Video Games,<:podcast:itunes_cat_video_games:>
})]})]
[(#SET{datas_government_&amp;_organizations, [(#ARRAY{
Local,<:podcast:itunes_cat_local:>,
National,<:podcast:itunes_cat_national:>,
Non-Profit,<:podcast:itunes_cat_non_profit:>,
Regional,<:podcast:itunes_cat_regional:>
})]})]
[(#SET{datas_health, [(#ARRAY{
Alternative Health,<:podcast:itunes_cat_alternative_health:>,
Fitness & Nutrition,<:podcast:itunes_cat_fitness_nutrition:>,
Self-Help,<:podcast:itunes_cat_self_help:>,
Sexuality,<:podcast:itunes_cat_sexuality:>
})]})]
[(#SET{datas_religion_&amp;_spirituality, [(#ARRAY{
Buddhism,<:podcast:itunes_cat_buddhism:>,
Christianity,<:podcast:itunes_cat_christianity:>,
Hinduism,<:podcast:itunes_cat_hinduism:>,
Islam,<:podcast:itunes_cat_islam:>,
Judaism,<:podcast:itunes_cat_judaism:>,
Other,<:podcast:itunes_cat_other:>,
Spirituality,<:podcast:itunes_cat_spirituality:>
})]})]
[(#SET{datas_science_&amp;_medicine, [(#ARRAY{
Medicine,<:podcast:itunes_cat_medicine:>,
Natural Sciences,<:podcast:itunes_cat_natural_sciences:>,
Social Sciences,<:podcast:itunes_cat_social_sciences:>
})]})]
[(#SET{datas_society_&amp;_culture, [(#ARRAY{
History,<:podcast:itunes_cat_history:>,
Personal Journals,<:podcast:itunes_cat_personnal_journals:>,
Philosophy,<:podcast:itunes_cat_philosophy:>,
Places & Travel,<:podcast:itunes_cat_places_travel:>
})]})]
[(#SET{datas_sports_&amp;_recreation, [(#ARRAY{
Amateur,<:podcast:itunes_cat_amateur:>,
College & High School,<:podcast:itunes_cat_college_high_school:>,
Outdoor,<:podcast:itunes_cat_outdoor:>,
Professional,<:podcast:itunes_cat_professional:>
})]})]
[(#SET{datas_technology, [(#ARRAY{
Gadgets,<:podcast:itunes_cat_gadgets:>,
Tech News,<:podcast:itunes_cat_tech_news:>,
Podcasting,<:podcast:itunes_cat_podcasting:>,
Software How-To,<:podcast:itunes_cat_software_how_to:>
})]})]
#SET{datas,#GET{datas_#ENV{type}}}
<select name="#ENV{nom}[]" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"] multiple="multiple">
<BOUCLE_categorie(POUR){tableau #GET{datas}}>
<option value="#CLE"[(#CLE|in_array{#ENV{valeur,#ARRAY}}|oui) selected="selected"]>#VALEUR</option>
</BOUCLE_categorie>
</select>
Loading…
Cancel
Save