Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour,
J'aimerai que tout le monde puisse poster un billet, avec une publication par activation par un admin dans le pannel.
Est ce possible ?
Merci d'avance.
Hors ligne
N'y a t'il pas de pluguin pour ca ?
Hors ligne
A ma connaissance il n'y a pas de plug-in pour cela.
Il y a quelques temps j'avais fait cela :
http://www.dotclear.net/forum/viewtopic.php?id=12916
Je l'ai depuis un peu modifié pour fonctionner sous Dotclear 1.2.7 (voir en fonctionnement ici : http://passemontagne.sortira.info/dotcl … starticle)
C'est un formulaire appelé par le plug-in related.
Attention, il y a peut-être des failles de sécurité et adaptations à faire !!!
Voici le code du fichier connexe visitor-post.php :
<?php
#-----------------------------------------------------------------------------------
# Visitor_Post.php
#-----------------------------------------------------------------------------------
# Formulaire de post ouvert aux utilisateur
#-----------------------------------------------------------------------------------
# Les billets sont saisis à travers un formulaire et ajoutés dans le base de donnée
# de DotClear sous le nom d'un rédacteur prédéfinit.
#
# Les caractéristiques du billet sont définies dans le profil du rédacteur employé
# (format d'édition, adresse mail d'avertissement, etat de publication (en/hors ligne)
# Par défaut, cet utilisateur possède l'ID Robot. C'est modifiable ci dessous.
#
# Je n'ai pas réusssi à utiliser les fichier langue ! donc les textes sont codés en dur !!!
#
# Have Fun whith this !!!!
#-----------------------------------------------------------------------------------
# Important : L'appel de ce fichier se fait à travers le plugin Related !!!
# Donc le plugin Related est indispensable !!!
#-----------------------------------------------------------------------------------
# Auteur : Franck Jandot.
# Site : http://sortira.info
# Contact : par le forum de DotClear( pseudo fjandot)
#-----------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------
# Eléments à p personnaliser
#-----------------------------------------------------------------------------------
$titre_page = "Rédaction de votre article"; // Titre de la page
$user_id = "Visiteur"; // Id du rédacteur
$autorise_date_billets_passe = FALSE; // Autorise ou non les billets à une date passée
$emplacement_ecrire = '/dotclear/themes/default'; // Emplacement du theme pour utilisation de la wikibar de Kozlika
// La wikibar doit être installée dans le theme, cad :
// Les fichiers wikibar.js et wikihelp.html copiés dans la racine du thème (au même niveau que post.php)
#-----------------------------------------------------------------------------------
# Initialisaions diverses et automatiques. Ne rien modifier ci dessous !!!
#-----------------------------------------------------------------------------------
# L'utilisateur par défaut
$rsUser = $blog->getUser($user_id);
# Les catégories existantes du Blog
$cat_id = (!empty($_GET['cat_id'])) ? $_GET['cat_id'] : $rsUser->f('user_pref_cat');
$rsCat = $blog->getCat();
$arry_cat['----------'] = 0;
while (!$rsCat->EOF())
{
$arry_cat[$rsCat->f('cat_libelle')] = $rsCat->f('cat_id');
$rsCat->moveNext();
}
# Tableau des jours
$arry_dt_d['--'] = 0;
for ($i=1; $i<=31; $i++) {
$d = sprintf('%02d', $i);
$arry_dt_d[$d] = $i;
}
# Tableau des mois de l'année
$arry_dt_m['---------'] = 0;
for ($i=1; $i<=12; $i++) {
$m = sprintf('%02d', $i);
$arry_dt_m[dt::str('%B', strtotime('2000-'.$m.'-01'))] = $m;
}
# Tableau des années
$arry_dt_y['--'] = 0;
for ($i=2007; $i<=2010; $i++) {
$y = sprintf('%04d', $i);
$arry_dt_y[$y] = $i;
}
#-----------------------------------------------------------------------------------
# Valeurs par défaut
#-----------------------------------------------------------------------------------
$err = '';
$saved = '';
$titre = '';
$titre_url = '';
//$cat_id = 10;
$dt_m = $dt_d = $dt_y = '';
$chapo = $preview_chapo = '';
$content = $preview_content = '';
$notes = '';
$is_editable = true;
$format = $rsUser->f('user_post_format');;
$etat = $rsUser->f('user_post_pub');
$open_comment = 1;
$open_tb = 0;
$lang = DC_LANG;
$selected = 0;
$return_link = 'index.php';
$do_trackbacks = 0;
$delta = $rsUser->f('user_delta');;
$email_webmaster = $rsUser->f('user_email');
(!empty($POST['nom_expediteur']))?$p_nom_exp = $_POST['nom_expediteur']:$p_nom_exp='';
(!empty($POST['mail_expediteur']))?$p_mail_exp = $_POST['email_expediteur']:$p_mail_exp='';
$objWiki = new wiki2xhtml();
if (dc_encoding != 'UTF-8') {
$objWiki->setOpt('active_fix_word_entities',1);
}
#-----------------------------------------------------------------------------------
# Validation des données pour insertion et prévisualisation
#-----------------------------------------------------------------------------------
if (!empty($_POST['preview']) || !empty($_POST['publish']))
{
# Vérification que tous les champs requis soient biens remplis
if(empty($_POST['nom_expediteur'])) $err .= "* Saisissez votre nom <br />";
if(empty($_POST['email_expediteur'])) $err .= "* Saisissez votre email <br />";
if($_POST['p_cat'] == 0) $err .= "* Choisissez une catégorie <br />";
if(empty($_POST['p_dt_d']) || $_POST['p_dt_m'] == 0 || empty($_POST['p_dt_y'])) $err .= "* Saisissez une date valide <br />";
if(empty($_POST['p_titre'])) $err .= "* Saisissez un titre <br />";
if(empty($_POST['p_content'])) $err .= "* Saisissez votre article <br />";
# Vérfication de l'email
if(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*.([a-z]{2,4})$`', $_POST['email_expediteur']))
{
$err.= "* Votre email ne semble pas valide. <br />";
}
# Vérfications de la date du billet
if(!checkdate($_POST['p_dt_m'],$_POST['p_dt_d'],$_POST['p_dt_y']))
{
$err.= "* La date choisie n'existe pas.<br />";
}
# vérification de l'existance de l'id redacteur
if ($blog->checkUser($user_id) === false )
{
$err .= "Le rédacteur .'$user_id'. n'existe pas !<br />";
}
# Vérification de la postérioritée de la date
if(!$autorise_date_billets_passe)
{
$stamp_now = strtotime(date("d F Y"));
$stamp_art = strtotime($_POST['p_dt_m'].'/'.$_POST['p_dt_d'].'/'.$_POST['p_dt_y']);
if( $stamp_art < $stamp_now)
{
$err .= "* La date saisie est révolue. <br />";
}
}
}
# Valeurs pour la prévisualisation, la création ou la modification d'un billet
if (!empty($_POST['preview']) || !empty($_POST['publish']))
{
$p_nom_exp = $_POST['nom_expediteur'];
$p_mail_exp = $_POST['email_expediteur'];
$titre = $_POST['p_titre'];
$titre_url = $blog->str2url($titre);
$cat_id = $_POST['p_cat'];
$content = $_POST['p_content'];
$notes = $_POST['p_notes'];
$chapo = $_POST['p_chapo'];
$dt_y = (string) sprintf('%04d',$_POST['p_dt_y']);
$dt_m = (string) sprintf('%02d',$_POST['p_dt_m']);
$dt_d = (string) sprintf('%02d',$_POST['p_dt_d']);
$dt_h = (string) sprintf('%02d',0);
$dt_i = (string) sprintf('%02d',0);
$dt_s = (string) sprintf('%02d',0);
$new_date = strtotime($dt_y.'-'.$dt_m.'-'.$dt_d.' '.$dt_h.':'.$dt_i.':'.$dt_s);
if (strpos($lang,'fr') === 0) {
$objWiki->setOpt('active_fr_syntax',1);
}
if (!empty($_POST['transform'])) {
$format = 'html';
$content = $objWiki->transform($content);
$chapo = $objWiki->transform($chapo);
}
if ($format == 'wiki') {
$preview_content = $objWiki->transform($content);
$preview_chapo = $objWiki->transform($chapo);
} else {
$preview_content = $content;
$preview_chapo = $chapo;
}
}
else{
# définition de la date du jour par défaut
$dt_y = date('Y');
$dt_m = date('m');
$dt_d = date('d');
}
#-----------------------------------------------------------------------------------
# Gestion de l'insertion du billet
#-----------------------------------------------------------------------------------
if (!empty($_POST['publish']) && empty($err))
{
# Sauvegarde dans la Base de donnée
if (($post_id = $blog->addPost($user_id,$titre,$titre_url,$chapo,$content,
$notes,$cat_id,$format,$etat,$open_comment,$open_tb,$lang,$selected,$delta)) !== false) {
# Modification de la date
if ($blog->updPost($post_id,$titre,$titre_url,$chapo,$content,$notes,$cat_id,
$format,$etat,$open_comment,$open_tb,$new_date,$lang,$selected,
$_SESSION['sess_user_delta']) !== false )
{
$saved = 'ok';
}
}
if($saved != 'ok')
{
$err .= "* Une erreur est survenue lors de l'enregistrement, veuiller réésayer. <br />" ;
}
}
#-----------------------------------------------------------------------------------
# Affichage du message de confirmation de l'enregistrement
#-----------------------------------------------------------------------------------
if ($saved == 'ok')
{
# Mail au contact mensionné dans le mail du rédacteur utilisé
$rsCat = $blog->getCat($cat_id);
@mail($email_webmaster, "Billet no ".$post_id." a valider", "Le billet \"".$titre."\" est a valider dans la categorie \"".$rsCat->f('cat_libelle')."\".\nhttp://passemontagne.sortira.info/dotclear/poster.php?post_id=".$post_id."\n\n".
"L'auteur du billet est : ".$_POST['nom_expediteur']." (".
$_POST['email_expediteur'].")\n\nCOMMENTAIRES : \n".$_POST['p_notes']);
# Mail au visiteur
// Non implémenté mais vous pouvez le faire ici si vous le souhaitez.
# Page de confirmation
?>
<div class="post">
<h2 class="post-title"><?php echo $titre_page; ?></h2>
<p>Votre article a bien été enregistré.<br />
Il sera mis en ligne dans les 48 heures, lorsque nous aurons vérifié son contenu.</p>
<p>
Nous vous remercions de votre collaboration.
</p>
</div>
<?php
}
#-----------------------------------------------------------------------------------
# Affichage par défaut de la page (formulaire de saisie)
#-----------------------------------------------------------------------------------
else
{
?>
<div class="post">
<h2 class="post-title"><?php echo $titre_page; ?></h2>
<?php
# Si une prévisualisation est demandée et qu'il n'y a pas d'erreur
if(!empty($_POST['preview']) && empty($err))
{
echo '<div class="preview">';
printf('Expéditeur : <a href="mailto:%s">%s</a><br />',$_POST['email_expediteur'],$_POST['nom_expediteur']);
echo '<hr class="thin"></div>';
$preview_titre = htmlspecialchars($titre);
$preview_titre = $titre;
echo '<div id="preview">'.
'<h2 class="post-title">'.$titre.'</h2>'.
((trim($preview_chapo) != '') ? '<div class="post-chapo">'.$preview_chapo.'</div>' : '').
'<div class="post-content">'.$preview_content.'</div></div>';
}
# Si une erreur existe, on affiche
if(!empty($err))
{
printf('<div class="warning"><h2 class="warning">Erreur(s) :</h2><p class="warning">%s</p></div>', $err);
}
?>
<div>
<form method="post" accept-charset="utf-8" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
<!-- Informations (minimalistes) sur l'auteur du billet pour les confirmations par mail -->
<fieldset class="contact">
<p class="form-help"><a href="http://sms.informatiquefrance.com/" onclick="window.open(this.href,'popup'); return false;"><img src="<?php dcInfo('theme'); ?>/img/sms_11.png" alt="Stop au langage SMS et aux fautes volontaires sur internet !" title="Stop au langage SMS et aux fautes volontaires sur internet !" /></a><br />Utilisez la <a href="<?php dcInfo('theme'); ?>/wikihelp.html" onclick="window.open(this.href,'popup','location=0,directories=0,status=0,scrollbars=1,resizable=1,copyhistory=0,menuBar=0,width=380,height=380'); return false;">Syntaxe Wiki</a> pour la mise en forme de votre article.<br />Le code HTML sera affiché comme du texte.<br />Les adresses internet seront converties automatiquement.</p>
<?php
echo
'<p><br /><label for="nom_expediteur"><strong>Votre nom :</strong></label><br />'
.form::field('nom_expediteur',30,255,htmlspecialchars($p_nom_exp, ENT_QUOTES),1).'</p>';
# email
echo
'<p><label for="email_expediteur"><strong>Votre email :</strong></label><br />'
.form::field('email_expediteur',30,255,$p_mail_exp,2).'</p>';
?>
</fieldset>
<!-- Informations concernant le message -->
<fieldset class="contact">
<?php
# Catégorie
echo
'<p style="display:none"><label for="p_cat"><strong>Catégorie de l\'article : </strong></label>'
.form::combo('p_cat',$arry_cat,$cat_id,'','',3).'</p>';
#Date
echo
'<p><label class="inline" for="p_dt_d"><strong>Date : </strong></label>'.
form::combo('p_dt_d',$arry_dt_d,$dt_d,'','',5).' '.
form::combo('p_dt_m',$arry_dt_m,$dt_m,'','',5).' '.
form::combo('p_dt_y',$arry_dt_y,$dt_y,'','',6).' </p>';
# Bloc-note transformé en commentaire
echo
'<p><label for="p_notes">Commentaires pour le Webmaster (non affiché)</label><br />'.
form::textArea('p_notes',45,6,htmlspecialchars($notes),7,'class="max"').'</p>';
?>
</fieldset>
<!-- Maintenant le message -->
<fieldset class="contact">
<?php
# titre
echo
'<p><label for="p_titre"><strong>Titre de l\'article :</strong></label><br />'.
form::field('p_titre',50,255,$titre,8,'class="max"').'</p>';
# chapo
echo
'<p><label for="p_chapo">Introduction (optionnel) : </label><br />'.
form::textArea('p_chapo',45,4,htmlspecialchars($chapo),9,'class="max"').'</p>';
# contenu
echo
'<p id="message">'.
'<label for="p_content"><strong>Contenu :</strong></label>'.
form::textArea('p_content',45,10,
htmlspecialchars($content),10,'class="max"').'</p>';
echo
'<p style="display:none"><label for="p_format">'.
__('Format').'</label><br /> '.form::combo('p_format',array('HTML'=>'html','Wiki'=>'wiki'),$format,'','',2).'</p>';
# Toolbar
echo
//SmiliesManager::smSmiliesToolbar('p_content').
'<script type="text/javascript" src="'.$emplacement_ecrire.'/wikibar.js"></script>'.
'<script type="text/javascript">'.
"if (document.getElementById) {
var tb = new dcWikiBar(document.getElementById('p_content'),'".$emplacement_ecrire."/img/wikibtns/');
tb.btStrong('".str_replace("'","\'",__('Strong emphasis'))."');
tb.btEm('".str_replace("'","\'",__('Emphasis'))."');
tb.btIns('".str_replace("'","\'",__('Inserted'))."');
tb.btDel('".str_replace("'","\'",__('Deleted'))."');
tb.addSpace(10);
tb.btQ('".str_replace("'","\'",__('Inline quote'))."');
tb.btCode('".str_replace("'","\'",__('Code'))."');
tb.btBr('".str_replace("'","\'",__('Line break'))."');
tb.addSpace(10);
tb.btBquote('".str_replace("'","\'",__('Blockquote'))."');
tb.btPre('".str_replace("'","\'",__('Preformated text'))."');
tb.btList('".str_replace("'","\'",__('Unordered list'))."','ul');
tb.btList('".str_replace("'","\'",__('Ordered list'))."','ol');
tb.addSpace(10);
tb.btLink('".str_replace("'","\'",__('Link'))."',
'".str_replace("'","\'",__('URL?'))."',
'".str_replace("'","\'",__('Language?'))."',
'".DC_LANG."');
tb.draw('".str_replace("'","\'",'')."');
}
</script>";
# Fin toolbar
?>
</fieldset>
<!-- Boutons de soumission -->
<?php
echo
'<p>'.
'<input name="preview" type="submit" class="submit" '.
'value="Aperçu" accesskey="a" tabindex="11" /> ';
if(!empty($_POST['preview']) && empty($err))
{
echo
'<input name="publish" type="submit" class="submit" '.
'value="Envoyer" accesskey="s" tabindex="12" />';
}
echo
'</p>';
?>
</form>
</div>
</div>
<?php
}
?>
Plus de réponse concernant ModifTri ou DefaultCat sans le rapport du plug AskingHelp !
Hors ligne
Merci :)
Hors ligne
Et pour un DC2 il faudrait modifier quoi ? Je ne m'y connait pas trop, mais je veux bien mettre les mains dedans si je savais quoi faire pour l'adapter. Merci de votre aide.
Hors ligne
il "suffit" de voir comment sont créés les billets dans le DC2 et de reprendre le code en automatisant (rédacteur autoimatique, catégorie, etc.) et en contrôlant le plus possible afin de limiter au maximum les portes ouvertes ... Simple non ??
Plus de réponse concernant ModifTri ou DefaultCat sans le rapport du plug AskingHelp !
Hors ligne
heu non, enfin pas pour moi je ne m'y connais pas assez, mais je vais essayer de déchiffrer ;) Merci quand même.
Hors ligne
Bonjour,
Je me permets de relancer ce sujet.
Est-ce quelqu'un à trouvé une solution ?
Merci,
Fabrice.
Hors ligne
Hors ligne
Vous n'êtes pas identifié(e).