[plugin] plnCalendrier

12346»

Réponses

  • cassius36cassius36 Member
    novembre 2017 modifié
    Bonjour,

    Je viens d'installer les deux plugins Calendrier et StaticPages et j'ai voulu enregistrer un événement mais rien ne se passe...
    Je n'ai pas non plus accès aux paramètres de configuration du Plugin Calendrier...
    Quelle étape aurais-je zappé ?
    (J'utilise la dernière version de PluXml)

    Cordialement,
    Cassius
  • Bonsoir,

    Je viens de trouver le moyen de configurer le plugin.
    Je parviens bien à ajouter des événements et à les faire apparaître dans le calendrier secondaire mais le calendrier principal de 6 mois et son bouton restent invisibles!

    Que se passe-t-il ?

    Cordialement,
    Cassius
  • Bonsoir,

    Avez vous activé le plugin !?
  • Bonjour,

    Oui, j'ai activé le plugin.

    Cordialement,
    Cassius
  • Bonjour, j'ai le même problème après passage de 5.4 à 5.6 tout le contenu du calendrier a été effacé quand on a jouté un événement dans la partie administration.
    J'avais fait un backup, j'ai remis le fichier plnCalendrier_contents.xml dans le répertoire data/configuration/plugins et j'ai de nouveau tous mes événements.

    MAIS je n'ose pas modifier quelque chose tant qu'il n'y a pas de correction !!! sans doute un détail dans la partie admin...
    ps j'utilise la version 2.0.1 du plugin

    je continue de regarder de mon côté et vous dirai si je trouve qqch mais si vous avez la solution... elle est bienvenue !
  • pas trouvé de solution... quelqu'un peut aider ? ^^
  • bon j'ai avancé dans ma recherche: il faut ajouter un passage par plxUtils::strCheck dans le fichier admin.php, ce qui donne à partir de la ligne 208:
    [== PHP ==]
    <?php
    	// On tri le tableau en ordre inverse
    	$Keys = array_keys($plxPlugin->Calendrier);
    	array_multisort($Keys,SORT_DESC,$plxPlugin->Calendrier);
    
    	foreach($plxPlugin->Calendrier as $Date => $Jour)
    		foreach($Jour as $NumEvent => $Event)
    		{
    			$Id = $Date."_".$NumEvent;
    ?>
    <tr>
    	<td><?php plxUtils::printInput("Date_".$Id,$Date,'text','10-10'); ?></td>
    	<td><?php plxUtils::printInput("Libelle_".$Id,plxUtils::strCheck($Event['Libelle']),'text','15-25'); ?></td>
    	<td><?php plxUtils::printInput("Texte_".$Id,plxUtils::strCheck($Event['Texte']),'text','40-255'); ?></td>
    	<td><?php plxUtils::printSelect("Style_".$Id,$arrayStyle,plxUtils::strCheck($Event['Style']),false,'select-style'); ?></td>
    	<td><?php plxUtils::printInput("Article_".$Id,plxUtils::strCheck($Event['Article']),'text','10-40'); ?></td>
    	<td><input type="checkbox" name="Destroy_<?php echo $Id;?>" value="True" /></td>
    </tr>
    <?php	
    

    Là les données sont bien affichées dans la liste. Pour faire les choses à fond, j'ai également ajouté l'appel à plxUtils::cdataCheck au moment de la sauvegarde.

    Le seul souci qui me reste, c'est qu'en faisant cela tous les caractères spéciaux sont échappés donc il faudrait les afficher "reconvertis" vers html sinon après deux sauvegardes on se retrouve avec des & partout et les données sont pourries.

    Une idée pour faire cela facilement ??

    Merci
  • OK voici la correction définitive du fichier admin.php (ci-dessous)
    Donc on utilise strCheck avant de sauvegarder, et lors de la lecture strRevCheck avant d'afficher les valeurs lues dans le fichier

    Par contre si on met des double guillemets ça ne fonctionne pas et le contenu derrière la première guillemet est perdu.
    J'espère que ça va servir pour d'autres parce que j'y ai passé pas mal d'heures !!
    [== PHP ==]
    <?php
    
    if (!defined('PLX_ROOT')) exit;
    
    plxToken::validateFormToken($_POST);
    
    function plnCalendrier_format_date($Date)
    {
    	if($Date == "")
    		return "";
    
    	// On lance la fonction deux fois, parce que sinon il peut louper un truc...
    	$Date = preg_replace("/(^|[^0-9])([0-9])([^0-9]|$)/","\${1}0$2$3",$Date);
    	$Date = preg_replace("/(^|[^0-9])([0-9])([^0-9]|$)/","\${1}0$2$3",$Date);
    
    	if(preg_match("/^[0-9]{2}[^0-9]/",$Date))
    	{
    		$Jour		= substr($Date,0,2);
    		$Mois 		= substr($Date,3,2);
    		$Annee		= substr($Date,6,4);
    	}
    	else
    	{
    		$Annee		= substr($Date,0,4);
    		$Mois 		= substr($Date,5,2);
    		$Jour		= substr($Date,8,2);
    	}
    	return $Annee."-".$Mois."-".$Jour;
    }
    
    # Si l'utilisateur vient de valider une saisie, on la traite
    if(!empty($_POST)) 
    {
    	$plxMotor=plxAdmin::getInstance();
    	// On enregistre les changements sur les dates existantes
    	foreach($_POST as $Type => $ValeurDummy)
    		if($Type != "Date_Nouveau" and substr($Type,0,5) == "Date_")
    		{
    			$Id    = substr($Type,5);
    			$Date  = substr($Type,5,10);
    			$Event = substr($Type,16);
    
    			if(isset($_POST["Destroy_".$Id]))
    				$plxPlugin->DestroyDate($Date,$Event);
    			else
    			{
    				$NewDate 	= plnCalendrier_format_date(trim(plxUtils::strCheck($_POST["Date_".$Id])));
    				$Libelle 	= trim(plxUtils::strCheck($_POST["Libelle_".$Id]));
    				$Texte	 	= trim(plxUtils::strCheck($_POST["Texte_".$Id]));
    				$Style	 	= trim(plxUtils::strCheck($_POST["Style_".$Id]));
    				$Article 	= trim(plxUtils::strCheck($_POST["Article_".$Id]));
    
    				// On essaie d'etre souple sur la date fournie par l'utilisateur. 
    				// On accepte : AAAA-MM-JJ et JJ-MM-AAAA, le tiret pouvant etre n'importe quoi en fait
    				// L'article demandé par l'utilisateur fait-il partie des articles actifs du site ?
    				if($Article != "")
    				{
    					$aArticlesActifs = array_keys($plxMotor->activeArts);
    					foreach($aArticlesActifs as $cle => $valeur)
    						$aArticlesActifs[$cle] = (int)$valeur;
    
    					if(!in_array((int)preg_replace("#/.*#","",$Article),$aArticlesActifs))
    						plxMsg::Error(preg_replace("/<ARTICLE>/",$Article,$plxPlugin->getlang('L_ERREUR_ARTICLE')));
    				}
    
    
    				if($plxPlugin->ChangeDate($Date,$Event,$NewDate,$Libelle,$Texte,$Style,$Article)==false)
    					plxMsg::Error(preg_replace("/<DATE>/",$_POST["Date_".$Date],$plxPlugin->getlang('L_ERREUR_DATE')));
    			}
    		}
    	
    	$NewDate 	= plnCalendrier_format_date(trim(plxUtils::strCheck($_POST["Date_Nouveau"])));
    	$Libelle	= trim(plxUtils::strCheck($_POST["Libelle_Nouveau"]));
    	$Texte	 	= trim(plxUtils::strCheck($_POST["Texte_Nouveau"]));
    	$Style	 	= trim(plxUtils::strCheck($_POST["Style_Nouveau"]));
    	$Article 	= trim(plxUtils::strCheck($_POST["Article_Nouveau"]));
    	$res 		= $plxPlugin->NewDate($NewDate,$Libelle,$Texte,$Style,$Article);
    	if($res == 1)
    		plxMsg::Error(preg_replace("/<DATE>/",$NewDate,$plxPlugin->getlang('L_ERREUR_DATE')));
    
    	// Maintenant qu'on a pris en compte les modifications sur les événements, on
    	// s'intéresse aux styles.
    	// On enregistre les changements sur les styles.
    	// Si le nom d'un style change ou est détruit, on répercute ce changement sur les événements qui
    	// utilisaient ce style.
    	foreach($_POST as $Type => $ValeurDummy)
    		if(preg_match("/StyleNom_.*/",$Type))
    		{
    			$Nom = substr($Type,9);
    			if(isset($_POST["StyleDestroy_".$Nom]))
    			{
    				$plxPlugin->DestroyStyle(trim(plxUtils::strCheck($Nom)));
    			}
    			else
    			{
    				$NewNom 	= plxUtils::title2url(trim(plxUtils::strCheck($_POST["StyleNom_".$Nom])));
    				$Valeur 	= trim(plxUtils::strCheck($_POST["StyleValeur_".$Nom]));
    				$BGColor 	= trim(plxUtils::strCheck($_POST["StyleBGColor_".$Nom]));
    				$TextColor 	= trim(plxUtils::strCheck($_POST["StyleTextColor_".$Nom]));
    				$Legende 	= trim(plxUtils::strCheck($_POST["StyleLegende_".$Nom]));
    				$plxPlugin->ChangeStyle($Nom,$NewNom,$BGColor,$TextColor,$Valeur,$Legende);
    			}
    		}
    	
    	$NewNom 	= plxUtils::title2url(trim(plxUtils::strCheck($_POST["StyleNom_Nouveau"])));
    	$Valeur		= trim(plxUtils::strCheck($_POST["StyleValeur_Nouveau"]));
    	$BGColor 	= trim(plxUtils::strCheck($_POST["StyleBGColor_Nouveau"]));
    	$TextColor 	= trim(plxUtils::strCheck($_POST["StyleTextColor_Nouveau"]));
    	$Legende 	= trim(plxUtils::strCheck($_POST["StyleLegende_Nouveau"]));
    	$plxPlugin->NewStyle($NewNom,$BGColor,$TextColor,$Valeur,$Legende);
    
    	$plxPlugin->saveCalendrierFile();
    
    	header('Location: plugin.php?p='.$plxPlugin->getName());
    	exit;
    }
    
    // Permet d'afficher une petite icone "détruire" accompagnée de son titre
    function displayDetruire() {	echo '<a class="plnCalendrierDetruire" title="Détruire"/>'; }
    ?>
    
    <div class="plnCalendrierAdmin">
    <h2><?php echo $plxPlugin->getlang('L_ADMIN_TITLE')?> (v<?php echo $plxPlugin->getInfo("version");?>)</h2>
    
    <form action="plugin.php?p=<?php echo $plxPlugin->getName(); ?>" method="post">
    <?php echo plxToken::getTokenPostMethod() ?>
    
    <h3><?php echo $plxPlugin->lang('L_STYLES')?></h3>
    <table id="plnCalendrierStyle">
    <tr>
    	<th></th>
    	<th><?php $plxPlugin->lang('L_STYLE_NAME')?></th>
    	<th><?php $plxPlugin->lang('L_BACKGROUNDCOLOR')?></th>
    	<th><?php $plxPlugin->lang('L_TEXTCOLOR')?></th>
    	<th><?php $plxPlugin->lang('L_CSS_COMMANDS')?></th>
    	<th title="<?php $plxPlugin->lang('L_HELP_LEGEND')?>"><?php $plxPlugin->lang('L_LEGEND')?></th>
    	<th><?php echo displayDetruire();?></th>
    </tr>
    <?php
    	foreach($plxPlugin->Styles as $Nom => $Style)
    	{
    		$BGColor 	= $Style["BGColor"];
    		$TextColor 	= $Style["TextColor"];
    		$Valeur 	= $Style["Valeur"];
    		$Legende 	= $Style["Legende"];
    ?>
    <tr>
    	<td>
    		<div class="plnCalendrierExample <?php echo $Nom;?>"><?php $plxPlugin->lang('L_EXAMPLE')?></div>
    	</td>
    	<td><?php plxUtils::printInput("StyleNom_".$Nom,$Nom,'text','20-20'); ?></td>
    	<td>
    		<input 	id="id_StyleBGColor_<?php echo $Nom;?>" 
    				name="StyleBGColor_<?php echo $Nom;?>" 
    				type="color" 
    				value="<?php echo $BGColor;?>"/>
    	</td>
    	<td>
    		<input 	id="id_StyleTextColor_<?php echo $Nom;?>" 
    				name="StyleTextColor_<?php echo $Nom;?>" 
    				type="color" 
    				value="<?php echo $TextColor;?>"/>
    	</td>
    	<td><?php plxUtils::printInput("StyleValeur_".$Nom,plxUtils::strRevCheck($Valeur),'text','40-555'); ?></td>
    	<td><?php plxUtils::printInput("StyleLegende_".$Nom,plxUtils::strRevCheck($Legende),'text','30-100'); ?></td>
    	<td><input type="checkbox" name="StyleDestroy_<?php echo $Nom;?>" value="True" /></td>
    </tr>
    <?php	
    	}
    ?>
    <tr>
    	<td></td>
    	<td><?php plxUtils::printInput("StyleNom_Nouveau","",'text','20-20'); ?></td>
    	<td><input id="id_StyleBGColor_Nouveau" name="StyleBGColor_Nouveau" type="color" value="#ffffff"/></td>
    	<td><input id="id_StyleTextColor_Nouveau" name="StyleTextColor_Nouveau" type="color" value=""/></td>
    	<td><?php plxUtils::printInput("StyleValeur_Nouveau","",'text','40-555'); ?></td>
    	<td><?php plxUtils::printInput("StyleLegende_Nouveau","",'text','30-100'); ?></td>
    	<td></td>
    </tr>
    </table>
    <input type="submit" name="submit" value="Enregistrer" />
    
    <h3><?php echo $plxPlugin->lang('L_EVENEMENTS')?></h3>
    
    <table id="plnCalendrierEvenements">
    <tr>
    	<th title="<?php $plxPlugin->lang('L_HELP_DATE')?>"><?php $plxPlugin->lang('L_DATE')?></th>
    	<th><?php $plxPlugin->lang('L_LABEL')?></th>
    	<th><?php $plxPlugin->lang('L_DESCRIPTION')?></th>
    	<th title="<?php $plxPlugin->lang('L_HELP_STYLE')?>"><?php $plxPlugin->lang('L_STYLE')?></th>
    	<th title="<?php $plxPlugin->lang('L_HELP_ARTICLE_ASSOCIE')?>"><?php $plxPlugin->lang('L_ASSOCIATED_ARTICLE')?></th>
    	<th><?php echo displayDetruire();?></th>
    </tr>
    <?php
    	// On construit l'array des styles
    	$arrayStyle=array("" => "");
    	foreach($plxPlugin->Styles as $Nom => $Style)
    		$arrayStyle[$Nom] = $Nom;
    ?>
    <tr>
    	<td><?php plxUtils::printInput("Date_Nouveau","",'text','10-10',false,'',$plxPlugin->getlang('L_YYYY-MM-DD')); ?></td>
    	<td><?php plxUtils::printInput("Libelle_Nouveau","",'text','15-25'); ?></td>
    	<td><?php plxUtils::printInput("Texte_Nouveau","",'text','40-255',false,'',$plxPlugin->getlang('L_INFOBULLE')); ?></td>
    	<td><?php plxUtils::printSelect("Style_Nouveau",$arrayStyle,'',false,'select-style'); ?></td>
    	<td><?php plxUtils::printInput("Article_Nouveau","",'text','10-40'); ?></td>
    	<td></td>
    </tr>
    <?php
    	// On tri le tableau en ordre inverse
    	$Keys = array_keys($plxPlugin->Calendrier);
    	array_multisort($Keys,SORT_DESC,$plxPlugin->Calendrier);
    
    	foreach($plxPlugin->Calendrier as $Date => $Jour)
    		foreach($Jour as $NumEvent => $Event)
    		{
    			$Id = $Date."_".$NumEvent;
    ?>
    <tr>
    	<td><?php plxUtils::printInput("Date_".$Id,$Date,'text','10-10'); ?></td>
    	<td><?php plxUtils::printInput("Libelle_".$Id,plxUtils::strRevCheck($Event['Libelle']),'text','15-25'); ?></td>
    	<td><?php plxUtils::printInput("Texte_".$Id,plxUtils::strRevCheck($Event['Texte']),'text','40-255'); ?></td>
    	<td><?php plxUtils::printSelect("Style_".$Id,$arrayStyle,plxUtils::strRevCheck($Event['Style']),false,'select-style'); ?></td>
    	<td><?php plxUtils::printInput("Article_".$Id,plxUtils::strRevCheck($Event['Article']),'text','10-40'); ?></td>
    	<td><input type="checkbox" name="Destroy_<?php echo $Id;?>" value="True" /></td>
    </tr>
    <?php	
    		}
    ?>
    
    </table>
    <input type="submit" name="submit" value="Enregistrer" />
    
    <?php 
    
    ?>
    
    </form>
    </div>
    
    <?php ############################ Le datePicker ############################ 
    
    // On construit l'intervalle des années
    $AnneeEnCours = new DateTime();
    $Annee1 = $AnneeEnCours->format("Y") - 1;
    $Annee2 = $Annee1 + 10;
    ?>
    
    <script src="<?php echo PLX_PLUGINS ?>plnCalendrier/pikaday/moment.js"></script>
    <script src="<?php echo PLX_PLUGINS ?>plnCalendrier/pikaday/pikaday.js"></script>
    <script>
    var a = document.getElementsByTagName("input");
    for (var i=0;i<a.length;i++) {
    	var id = a[i].id;
    	if(id.substring(0,7)=='id_Date') {
    		var picker = new Pikaday({ 
    			field: document.getElementById(id),
    			format: 'YYYY-MM-DD',
    			yearRange: [<?php echo $Annee1 ?>,<?php echo $Annee2 ?>],
    			i18n: {
    				previousMonth : <?php echo $plxPlugin->getLang('PREVIOUS_MONTH') ?>,
    				nextMonth     : <?php echo $plxPlugin->getLang('NEXT_MONTH') ?>,
    				months        : [<?php echo $plxPlugin->getLang('MONTH_LIST') ?>],
    				weekdays      : [<?php echo $plxPlugin->getLang('WEEKDAY_LIST') ?>],
    				weekdaysShort : [<?php echo $plxPlugin->getLang('WEEKDAY_SHORT_LIST') ?>]
    			}
    		});
    	}
    }
    </script>
    
    
  • Bonjour,

    Je suis nouvelle sur le forum et je débute avec pluxml pour construire le site de mon association.

    Tout d'abord, merci Fogg pour ta solution et ton code pour enregistrer les libellés des événements! il m'a beaucoup aidé car j'avais le même problème...

    Je me demandais si quelqu'un avait solutionné le fait de choisir l'emplacement du "Titre" Calendrier dans le menu ? j'ai vu que la question avait été posé dans le passé mais pas trouvé de réponse à priori. Aujourd'hui, le lien s'affiche en dessous du menu, et j'aurai aimé le placer au coeur du menu avec les autres liens vers mes pages, mais je n'ai pas réussi...

    D'avance merci pour votre aide!
  • Merci beaucoup Fogg pour cette correction !
  • Merci Fogg pour cette correction.

    Ce plugin est très pratique et simple d'utilisation, il mérite de survivre à la jungle des plugins :cool: .
  • SudwebdesignSudwebdesign Member
    mars 2019 modifié
    Après avoir reçu plnStaticPages-1.0.0 :)

    J'en ai profité pour mettre a jour ce magnifique outil et l'agrémenté d'un système d'onglet dans l'admin.

    Il et téléchargeable dans mon dépôt : ou en direct >>> plnCalendrier v2.1.0 ;)

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • Salut, j'ai essayé la version 2.1.0 sur un Pluxml 5.7 et ça ne fonctionne pas.

    • Le code php pour appeler le calendrier dans la sidebar ne fonctionne pas,

    <?php eval($plxShow->callHook('plxCalendrierCurrentMonth')); ?>

    • Le menu d'administration enregistre les dates mais aucune autre informations sur les événements.
    • La sélection de couleurs pour les styles ne fonctionne pas.

    J'ai chargé plnStaticPages juste après plncalendrier

Connectez-vous ou Inscrivez-vous pour répondre.