Skip to content
Extraits de code Groupes Projets
Valider 77605564 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

meilleur fonctionnement de l'analyse auto : on represente le formulaire avec...

meilleur fonctionnement de l'analyse auto : on represente le formulaire avec remplissage des valeurs issues de l'analyse, cela permet un controle de saisie
le logo est recupere a l'analyse et insere en hidden pour recuperation lors de l'action
parent 5a84fac3
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#ACTION_FORMULAIRE{#ENV{action}} #ACTION_FORMULAIRE{#ENV{action}}
<input type='hidden' name='id_syndic' value='#ENV{id_syndic}' /> <input type='hidden' name='id_syndic' value='#ENV{id_syndic}' />
<input type='hidden' name='syndication_old' value="#ENV**{syndication}" /> <input type='hidden' name='syndication_old' value="#ENV**{syndication}" />
[<input type='hidden' name='logo' value='(#ENV**{logo,''})' />]
[<input type='hidden' name='format_logo' value='(#ENV**{format_logo,''})' />]
<fieldset> <fieldset>
<ol class="formfx"> <ol class="formfx">
[(#ENV{id_syndic}||?{'',' '}) [(#ENV{id_syndic}||?{'',' '})
...@@ -16,6 +18,7 @@ ...@@ -16,6 +18,7 @@
<li><fieldset><legend><img src='#EVAL{_DIR_IMG_PACK}site-24.gif' /></legend><ol><li> <li><fieldset><legend><img src='#EVAL{_DIR_IMG_PACK}site-24.gif' /></legend><ol><li>
<label for='url_auto'><:texte_referencement_automatique:></label> <label for='url_auto'><:texte_referencement_automatique:></label>
<input type="text" name="url_auto" id="url_auto" class='fondl' size='40' value="http://" /> <input type="text" name="url_auto" id="url_auto" class='fondl' size='40' value="http://" />
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{url_auto})</span>]
</li></ol> </li></ol>
<div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_ajouter:>' /></div> <div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_ajouter:>' /></div>
</fieldset> </fieldset>
......
...@@ -17,6 +17,9 @@ include_spip('inc/editer'); ...@@ -17,6 +17,9 @@ include_spip('inc/editer');
function formulaires_editer_site_charger_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){ function formulaires_editer_site_charger_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('site',$id_syndic,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); $valeurs = formulaires_editer_objet_charger('site',$id_syndic,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
# pour recuperer le logo issu d'analyse auto
$valeurs['logo']='';
$valeurs['format_logo']='';
return $valeurs; return $valeurs;
} }
...@@ -35,12 +38,127 @@ function sites_edit_config($row) ...@@ -35,12 +38,127 @@ function sites_edit_config($row)
} }
function formulaires_editer_site_verifier_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){ function formulaires_editer_site_verifier_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){
include_spip('inc/filtres');
$erreurs = formulaires_editer_objet_verifier('site',$id_syndic,_request('url_auto')?array():array('nom_site','url_site')); $oblis = array('nom_site','url_site');
// Envoi depuis le formulaire d'analyse automatique d'un site
if (strlen(vider_url($u = _request('url_auto')))) {
if ($auto = analyser_site($u)) {
foreach($auto as $k=>$v){
set_request($k,$v);
}
$erreurs['message_erreur'] = ' '; # provoquer la resaisie de controle
}
else{
$erreurs['url_auto'] = _L('Site introuvable');
}
}
else
$erreurs = formulaires_editer_objet_verifier('site',$id_syndic,$oblis);
return $erreurs; return $erreurs;
} }
function formulaires_editer_site_traiter_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){ function formulaires_editer_site_traiter_dist($id_syndic='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='sites_edit_config', $row=array(), $hidden=''){
return formulaires_editer_objet_traiter('site',$id_syndic,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); return formulaires_editer_objet_traiter('site',$id_syndic,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden);
} }
// http://doc.spip.org/@analyser_site
function analyser_site($url) {
include_spip('inc/filtres');
include_spip('inc/distant');
// Accepter les URLs au format feed:// ou qui ont oublie le http://
$url = preg_replace(',^feed://,i', 'http://', $url);
if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url;
$texte = recuperer_page($url, true);
if (!$texte) return false;
if (preg_match(',<(channel|feed)([:[:space:]][^>]*)?'
.'>(.*)</\1>,ims', $texte, $regs)) {
$result['syndication'] = 'oui';
$result['url_syndic'] = $url;
$channel = $regs[3];
// Pour recuperer l'entete, on supprime tous les items
$b = array_merge(
extraire_balises($channel, 'item'),
extraire_balises($channel, 'entry')
);
$header = str_replace($b,array(),$channel);
if ($t = extraire_balise($header, 'title'))
$result['nom_site'] = supprimer_tags($t);
if ($t = extraire_balises($header, 'link')) {
foreach ($t as $link) {
$u = supprimer_tags(filtrer_entites($link));
if (!strlen($u))
$u = extraire_attribut($link, 'href');
if (strlen($u)) {
// on installe l'url comme url du site
// si c'est non vide, en donnant la priorite a rel=alternate
if (preg_match(',\balternate\b,', extraire_attribut($link, 'rel'))
OR !isset($result['url_site']))
$result['url_site'] = filtrer_entites($u);
}
}
}
$result['url_site'] = url_absolue($result['url_site'], $url);
if ($a = extraire_balise($header, 'description')
OR $a = extraire_balise($header, 'tagline')) {
$result['descriptif'] = supprimer_tags($a);
}
if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims',
$header, $r)
AND preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r)
AND $image = recuperer_infos_distantes($r[1])) {
if (in_array($image['extension'], array('gif', 'jpg', 'png'))) {
$result['format_logo'] = $image['extension'];
$result['logo'] = $image['fichier'];
}
else if ($image['fichier']) {
spip_unlink($image['fichier']);
}
}
}
else {
$result['syndication'] = 'non';
$result['url_site'] = $url;
if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) {
$head = filtrer_entites($regs[1]);
} else
$head = $texte;
if (preg_match(',<title[^>]*>(.*),i', $head, $regs))
$result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*,i', '', $regs[1])));
if ($a = array_merge(
extraire_balises($head, 'meta'),
extraire_balises($head, 'http-equiv')
)) {
foreach($a as $meta) {
if (extraire_attribut($meta, 'name') == 'description') {
$desc = trim(extraire_attribut($meta, 'content'));
if (!strlen($desc))
$desc = trim(extraire_attribut($meta, 'value'));
$result['descriptif'] = $desc;
}
}
}
// Cherchons quand meme un backend
include_spip('inc/distant');
include_spip('inc/feedfinder');
$feeds = get_feed_from_url($url, $texte);
// si on a a trouve un (ou plusieurs) on le note avec select:
// ce qui constitue un signal pour exec=sites qui proposera de choisir
// si on syndique, et quelle url.
if (count($feeds)>=1) {
spip_log("feedfinder.php :\n".join("\n", $feeds));
$result['url_syndic'] = "select: ".join(' ',$feeds);
}
}
return $result;
}
?> ?>
\ No newline at end of file
...@@ -48,29 +48,15 @@ function action_editer_site_dist() { ...@@ -48,29 +48,15 @@ function action_editer_site_dist() {
set_request('reload', 'oui'); set_request('reload', 'oui');
$id_syndic = insert_syndic(_request('id_parent')); $id_syndic = insert_syndic(_request('id_parent'));
revisions_sites($id_syndic); revisions_sites($id_syndic);
if ($logo = _request('logo')
AND $format_logo = _request('format_logo'))
@rename($logo,
_DIR_IMG . 'siteon'.$id_syndic.'.'.$format_logo);
} else { } else {
include_spip('inc/headers'); include_spip('inc/headers');
return array(0,redirige_formulaire(generer_url_ecrire('sites_edit', 'id_rubrique='._request('id_parent'),'&'))); return array(0,redirige_formulaire(generer_url_ecrire('sites_edit', 'id_rubrique='._request('id_parent'),'&')));
} }
} }
// Envoi depuis le formulaire d'analyse automatique d'un site
else if (strlen(vider_url($u = _request('url_auto')))) {
if ($auto = analyser_site($u)) {
$id_syndic = insert_syndic(_request('id_parent'));
revisions_sites($id_syndic, $auto);
if ($auto['syndication'] == 'oui')
set_request('reload', 'oui');
// Enregistrer le logo s'il existe
if ($auto['logo'] AND $auto['format_logo'])
@rename($auto['logo'],
_DIR_IMG . 'siteon'.$id_syndic.'.'.$auto['format_logo']);
}
else{
include_spip('inc/headers');
return array(0,redirige_formulaire(generer_url_ecrire('sites_edit', 'id_rubrique='._request('id_parent'),'&')));
}
}
// Erreur // Erreur
else { else {
redirige_url_ecrire(); redirige_url_ecrire();
...@@ -249,106 +235,6 @@ function revisions_sites ($id_syndic, $c=false) { ...@@ -249,106 +235,6 @@ function revisions_sites ($id_syndic, $c=false) {
} }
// http://doc.spip.org/@analyser_site
function analyser_site($url) {
include_spip('inc/filtres');
include_spip('inc/distant');
// Accepter les URLs au format feed:// ou qui ont oublie le http://
$url = preg_replace(',^feed://,i', 'http://', $url);
if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url;
$texte = recuperer_page($url, true);
if (!$texte) return false;
if (preg_match(',<(channel|feed)([:[:space:]][^>]*)?'
.'>(.*)</\1>,ims', $texte, $regs)) {
$result['syndication'] = 'oui';
$result['url_syndic'] = $url;
$channel = $regs[3];
// Pour recuperer l'entete, on supprime tous les items
$b = array_merge(
extraire_balises($channel, 'item'),
extraire_balises($channel, 'entry')
);
$header = str_replace($b,array(),$channel);
if ($t = extraire_balise($header, 'title'))
$result['nom_site'] = supprimer_tags($t);
if ($t = extraire_balises($header, 'link')) {
foreach ($t as $link) {
$u = supprimer_tags(filtrer_entites($link));
if (!strlen($u))
$u = extraire_attribut($link, 'href');
if (strlen($u)) {
// on installe l'url comme url du site
// si c'est non vide, en donnant la priorite a rel=alternate
if (preg_match(',\balternate\b,', extraire_attribut($link, 'rel'))
OR !isset($result['url_site']))
$result['url_site'] = filtrer_entites($u);
}
}
}
$result['url_site'] = url_absolue($result['url_site'], $url);
if ($a = extraire_balise($header, 'description')
OR $a = extraire_balise($header, 'tagline')) {
$result['descriptif'] = supprimer_tags($a);
}
if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims',
$header, $r)
AND preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r)
AND $image = recuperer_infos_distantes($r[1])) {
if (in_array($image['extension'], array('gif', 'jpg', 'png'))) {
$result['format_logo'] = $image['extension'];
$result['logo'] = $image['fichier'];
}
else if ($image['fichier']) {
spip_unlink($image['fichier']);
}
}
}
else {
$result['syndication'] = 'non';
$result['url_site'] = $url;
if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) {
$head = filtrer_entites($regs[1]);
} else
$head = $texte;
if (preg_match(',<title[^>]*>(.*),i', $head, $regs))
$result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*,i', '', $regs[1])));
if ($a = array_merge(
extraire_balises($head, 'meta'),
extraire_balises($head, 'http-equiv')
)) {
foreach($a as $meta) {
if (extraire_attribut($meta, 'name') == 'description') {
$desc = trim(extraire_attribut($meta, 'content'));
if (!strlen($desc))
$desc = trim(extraire_attribut($meta, 'value'));
$result['descriptif'] = $desc;
}
}
}
// Cherchons quand meme un backend
include_spip('inc/distant');
include_spip('inc/feedfinder');
$feeds = get_feed_from_url($url, $texte);
// si on a a trouve un (ou plusieurs) on le note avec select:
// ce qui constitue un signal pour exec=sites qui proposera de choisir
// si on syndique, et quelle url.
if (count($feeds)>=1) {
spip_log("feedfinder.php :\n".join("\n", $feeds));
$result['url_syndic'] = "select: ".join(' ',$feeds);
}
}
return $result;
}
// Enregistrre les options et retourne True s'il faut syndiquer. // Enregistrre les options et retourne True s'il faut syndiquer.
// http://doc.spip.org/@editer_site_options // http://doc.spip.org/@editer_site_options
......
...@@ -57,13 +57,18 @@ function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_ ...@@ -57,13 +57,18 @@ function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_
if (!$row) { if (!$row) {
if ($select = charger_fonction($type."_select",'inc',true)){ if ($select = charger_fonction($type."_select",'inc',true)){
$row = $select($id, $id_parent, $lier_trad); $row = $select($id, $id_parent, $lier_trad);
if (!$row) return '';
} }
else { else {
$row = sql_fetsel('*',$table_objet_sql,$id_table_objet."=".intval($id)); $row = sql_fetsel('*',$table_objet_sql,$id_table_objet."=".intval($id));
} }
if (is_numeric($id)) $new = ''; if (is_numeric($id)) $new = '';
else $new = $id; else $new = $id;
if (!$row) {
$trouver_table = charger_fonction('trouver_table','base');
if ($desc = base_trouver_table_dist($table_objet))
foreach($desc['field'] as $k=>$v)
$row[$k]='';
}
} }
// Gaffe: sans ceci, on ecrase systematiquement l'article d'origine // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
// (et donc: pas de lien de traduction) // (et donc: pas de lien de traduction)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter