Browse Source

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

svn/root/tags/v0.3.2
kent1@arscenic.info 10 years ago
commit
ee9aedcb63
  1. 24
      .gitattributes
  2. 34
      base/podcast_base.php
  3. 15
      controleurs/explicit.html
  4. 13
      controleurs/podcast.html
  5. 107
      formulaires/configurer_podcast.html
  6. BIN
      images/icon_channels.png
  7. BIN
      images/icon_miro.png
  8. BIN
      images/podcast_100.png
  9. BIN
      images/podcast_24.png
  10. BIN
      images/podcast_64.png
  11. 15
      inclure/formulaire_document_saisies.html
  12. 61
      inclure/podcast_item_mrss.html
  13. 3
      inclure/podcast_items.html
  14. 34
      inclure/podcasts_liens.html
  15. 13
      lang/paquet-podcast_en.php
  16. 13
      lang/paquet-podcast_fr.php
  17. 126
      lang/podcast_en.php
  18. 124
      lang/podcast_fr.php
  19. 29
      paquet.xml
  20. 46
      podcast.html
  21. 34
      podcast_administrations.php
  22. 92
      podcast_pipelines.php
  23. 6
      prive/squelettes/contenu/configurer_podcast.html
  24. 126
      saisies/itunes_categories.html

24
.gitattributes vendored

@ -0,0 +1,24 @@
* text=auto !eol
base/podcast_base.php -text
controleurs/explicit.html -text
controleurs/podcast.html -text
formulaires/configurer_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/paquet-podcast_en.php -text
lang/paquet-podcast_fr.php -text
lang/podcast_en.php -text
lang/podcast_fr.php -text
/paquet.xml -text
/podcast.html -text
/podcast_administrations.php -text
/podcast_pipelines.php -text
prive/squelettes/contenu/configurer_podcast.html -text
saisies/itunes_categories.html -text

34
base/podcast_base.php

@ -0,0 +1,34 @@
<?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;
}
/**
* Insertion dans le pipeline declarer_tables_objets_sql (SPIP)
* On ajoute nos champs dans les champs editables de la table spip_documents
*/
function podcast_declarer_tables_objets_sql($tables){
$tables['spip_documents']['champs_editables'][] = 'explicit';
$tables['spip_documents']['champs_editables'][] = 'podcast';
return $tables;
}
?>

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>

107
formulaires/configurer_podcast.html

@ -0,0 +1,107 @@
<div class="formulaire_spip formulaire_config formulaire_#FORM">
[<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 inserer_barre_edition,
label=<:podcast:label_resume:>,
rows=4,
obligatoire=non})]
[(#SAISIE{textarea, description_podcast,
explication=<:podcast:explication_description:>,
class=multilang inserer_barre_edition,
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" 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){objet = document}{id_objet=#_document:ID_DOCUMENT}{extension IN #GET{itunes_formats}}{tout}{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}|url_absolue)]">
[(#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>]

13
lang/paquet-podcast_en.php

@ -0,0 +1,13 @@
<?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(
// P
'podcast_description' => 'A plugin to provide one or several podcasts feeds on the site',
'podcast_nom' => 'Podcasts',
'podcast_slogan' => 'One or several podcasts feeds on the site',
);
?>

13
lang/paquet-podcast_fr.php

@ -0,0 +1,13 @@
<?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(
// P
'podcast_description' => 'Un plugin pour mettre à disposition un ou plusieurs flux de podcast sur son site',
'podcast_nom' => 'Podcasts',
'podcast_slogan' => 'Un ou plusieurs flux de podcast sur son site',
);
?>

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'
);
?>

29
paquet.xml

@ -0,0 +1,29 @@
<paquet
prefix="podcast"
categorie="multimedia"
version="0.2.0"
etat="stable"
compatibilite="[3.0.0;3.0.99]"
logo="images/podcast_64.png"
schema="0.1.0"
documentation="http://www.mediaspip.net/technical-documentation/plugins-used-by-mediaspip/article/le-plugin-podcasts"
demonstration="http://www.mediaspip.net"
developpement="http://www.mediaspip.net/spip.php?page=tickets&amp;composant=plugins%20-%20podcasts"
>
<nom>Podcasts</nom>
<auteur lien="http://www.kent1.info" mail="kent1@arscenic.info">kent1</auteur>
<copyright>2010-2012</copyright>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="declarer_tables_principales" inclure="base/podcast_base.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/podcast_base.php" />
<pipeline nom="pre_edition" inclure="podcast_pipelines.php" />
<pipeline nom="post_edition" inclure="podcast_pipelines.php" />
<pipeline nom="editer_contenu_objet" inclure="podcast_pipelines.php" />
<necessite nom="saisies" compatibilite='[1.7.6;[' />
</paquet>

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>

34
podcast_administrations.php

@ -0,0 +1,34 @@
<?php
/**
* Plugin Podcast
* par kent1
*
* Copyright (c) 2010-2012
* Logiciel libre distribué sous licence GNU/GPL.
*
* Installation
*
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
function podcast_upgrade($nom_meta_base_version,$version_cible){
$maj = array();
$maj['create'] = array(
array('maj_tables',array('spip_documents'))
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation
* - on vire la meta d'installation
* - on vire la meta de configuration
*/
function podcast_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
effacer_meta('podcast');
}
?>

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;
}
?>

6
prive/squelettes/contenu/configurer_podcast.html

@ -0,0 +1,6 @@
[(#AUTORISER{configurer,podcast}|sinon_interdire_acces)]
<h1 class="grostitre"><:podcast:cfg_titre_podcast:></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_PODCAST
</div>

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