Fork me on GitHub

Rapport de message :*
 

Wordbook "evolution" - hack admin

Titre du sujet : Wordbook "evolution" - hack admin
par aquaportail sur 06/08/2007 16:43:04

Ce sujet fait suite à : https://www.frxoops.org/modules/newbb/ ... p?topic_id=22576&forum=12
Mais le thème abordé est tellement différent du corps du sujet précédent que je préfère en ouvrir un nouveau.

Sur mon site www.aquaportail.com, nous utilisons un système de Newsletter fait maison car il y a des envois très réguliers et les modules existants étaient soient trop lourds, soient... buggués.

Par rapport à WordBook v1.16, voici un fichier d'administration qui permet de connaître la liste des entrées dans le glossaire (sans gestion de catégorie) entre 2 dates données. L'intérêt est évident lorsqu'on veut, par exemple, communiquer les dernières entrées dans le glossaire selon une périodicité fixe, typiquement toutes les semaines.

Le fichier suivant demande une date de début (fixée par défaut à J-7) et une date de fin (aujourd'hui par défaut) et un nombre de colonnes (2 par défaut) pour l'affichage de la liste.

Ceci n'est pas une opération à effectuer sans de bonnes connaissances en PHP!!!

Comme il s'agit d'une nouvelle fonction d'administration, il faut modifier le fichier /modules/wordbook/include/functions.php et ajouter le code suivant à la ligne 226 :
echo "<li style="list-stylenonemargin0displayinline"><a href="latestdays.php" style="padding3px 0.5emmargin-left3pxborder1px solid #778; background: ".$tblColors[6]."; text-decoration: none; white-space: nowrap; ">Derniers jours</a></li>";

L'accès à un nouveau fichier nommé 'latestdays.php' est créé dans l'administration.

Ensuite, il faut sauvegarder le contenu suivant dans un fichier nommé "latestdays.php" dans le dossier (répertoire) /admin du module.
<?php
/**
 * Module: WordBook
 * Version: v1.16
 * Derniere MAJ : August 2007
 * Developer: Jef aka 'anemone-clown' www.aquaportail.com
 * Licence: GNU
 */

include("admin_header.php"); 

global 
$Menu$xoopsConfig$xoopsModuleConfig$xoopsDB;

xoops_cp_header();
adminMenu();

$aujourdhui date("d/m/Y");
list(
$jour$mois$annee) = explode('/'$aujourdhui);
$timestamp mktime(000$mois$jour 7$annee); // par defaut : 7 jours

$fin = (!isset($_POST['fin'])) ? $aujourdhui $_POST['fin'];
$debut = (!isset($_POST['debut'])) ? date('d/m/Y',$timestamp) : $_POST['debut'];
$nbcolumns = (!isset($_POST['nbcolumns']) && ($_POST['nbcolumns'] < 1)) ? $_POST['nbcolumns'];

list(
$jour$mois$annee) = explode('/'$debut);
$timestampdebut mktime(000$mois$jour$annee);
list(
$jour$mois$annee) = explode('/'$fin);
$timestampfin mktime(000$mois$jour$annee) + 86399;

echo 
"<br />date début = ".$timestampdebut." -> ".formatTimestamp($timestampdebut,"m")."
      <br />date fin = "
.$timestampfin." -> ".formatTimestamp($timestampfin,"m")."
      <br /><br />"
;

// formulaire
$my_form = new XoopsThemeForm('Selection de la période'"periode""latestdays.php");
$my_form -> addElement(new XoopsFormText("Date début :""debut"1510$debut), true);
$my_form -> addElement(new XoopsFormText("Date fin :""fin"1510$fin), true);
$my_form -> addElement(new XoopsFormText("Nombre de colonnes :""nbcolumns"55$nbcolumns), true);
$button_tray = new XoopsFormElementTray('');
$button_tray->addElement(new XoopsFormButton('''ok''OK''submit'));
$my_form -> addElement($button_tray);
$my_form -> display();
// Fin formulaire

$pubwords $xoopsDB -> query"SELECT * FROM " $xoopsDB -> prefix"wbentries" ) . " WHERE submit = '0' AND offline ='0' ");
$publishedwords $xoopsDB -> getRowsNum $pubwords );

$result $xoopsDB -> query"SELECT * FROM " $xoopsDB -> prefix"wbentries" ) . " WHERE (datesub >= " $timestampdebut") AND (datesub <= " $timestampfin ") AND (submit='0') AND (offline ='0') ORDER BY datesub DESC");
$nbweekwords $xoopsDB -> getRowsNum($result);

echo 
'<br /><table class="outer" summary="" cellspacing="1" width="100%"><tr>';

$entetecolonne '<td valign="top"><table><tr><th style="text-align: center; width: 100px;">Date</th><th>&nbsp;<b>Terme</b></th></tr>';

if (!
$result) {
    echo 
'<td><b class="head">Aucune entrée</b></td>';
}
else {    
    
$nb 0;
    
$nbt $nbweekwords;
  
$division ceil($nbweekwords $nbcolumns);
  
$sos $entetecolonne;
    while(
$myrow $xoopsDB -> fetchArray($result)) {
        
$nb++;
        
$nbt--;
        
$sos .= '<tr><td class="even" style="text-align: center;">'.formatTimestamp($myrow['datesub'],"s").'</td>';
        
$sos .= '<td>&nbsp;<b>'.$myrow['term'].'</b></td></tr>';
        if ((
$nb == $division) && ($nbt 0)) {
          
$nb 0;
          
$sos .= '</table></td>'.$entetecolonne;
        }
    }
    
$sos .= '</table></td>';
    echo 
$sos;
}
echo 
'</tr></table>';

echo 
'<br /><fieldset><legend><b>Infos</b></legend><br />
- <b>'
.$nbweekwords.'</b> définitions ont été saisies durant les 'ceil(($timestampfin-$timestampdebut)/86400) .' derniers jours.<br /><br />
- Le Glossaire totalise <b>'
.$publishedwords.'</b> entrées le 'date("d/m/Y") .'<br /><br /></fieldset>';

xoops_cp_footer();

?>


Le fichier créé affichera ce genre de résultats :

Open in new window

J'ai fait ça rapidemment aujourd'hui, j'espère que c'est compréhensible pour les profanes.
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

40 Personne(s) en ligne (29 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 40 | Plus ...