Re: SQL et Droits des forums Xoops - Module CBB 1.15 | Titre du sujet : Re: SQL et Droits des forums Xoops - Module CBB 1.15 par Tinyturtle sur 15/12/2005 16:23:14
Bon ben voilà, j'ai trouvé la solution moi-même en me faisant un script PHP maison répondant à MES besoins en fonction de mes analyses précédentes décrites plus haut.
J'ai testé ce script chez moi, il semble marcher mais reste à vérifier, valider et pourquoi pas optimiser dans son écriture.
Je conseille fortement de retirer ce script de votre site une fois utilisé car il est loin d'être sécurisé.
Ce script est libre d'utilisation et de diffusion tant que l'on concerve sa licence, et son origine. on peut le modifier à souhait mais il serait sympa de me faire part de toute modification utile.
J'espère également le voire ailleurs quand dans le fin fond du forum, histoire que mon expérience et mon travail ne tombe pas dans les oubliettes.
<?php
// Forums Perms Manager v0.2
// Created by Tinyturtle 2005/12/15
// Copyright (C) 2005
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 32, Boston, MA 02111-127, USA.
// Purpose:
//
// The script was designed to create or update forums permissions (included categories permissions)
// for your CBB/NewBB and perhaps others Forum modules for Xoops.
//
// Assumptions:
//
// - Have your Forum Module already installed et well-configured
// - Have all your forums and categories created
// - Edit the script for your custom wishes
//
// Directions:
//
// This script can be executed Aafter copying somewhere in the files structure of
// your web site using FTP client.
// Then simply enter the URI of the file just uploaded in your webbbrowser as for example:
// http://www.yourdomain.com/path_to_file/Forums_Perms.php
// No more to do. ;-)
// For more security, delete this file of your files structure after using it.
//
// Notes:
// This script is an alpha version, there is much cases where it c annot run properly.
// Use at your own risks. Save your database is recommanded before run this script.
//
// Changelog:
// v0.2: 2005/12/15
// - Add Categories Support
//
// For more support, go on https://www.frxoops.org/.
echo "<html>n<head>n<title>Script de mise à jour des permissions de forums Xoops</title>n</head>n<body>n";
echo "<h1>Script PHP used to create/update/delete Xoops forum's permissions</h1><h2>Written by Tinyturtle</h2><br><br>n";
$prefix="xoops";
$host="'localhost'";
$login="your_login";
$password="your_password";
$database_name="your_database_name";
// Affiche les requêtes SQL exécutées et des informations complémentaires si la variable vaut 1
$verbose_mode=0;
// On se connecte à la base MySQL
$db = mysql_connect($host, $login, $password) or die('Erreur : '.mysql_error());
// On sélectionne la base concernant xoops
mysql_select_db($database_name,$db) or die('Erreur : '.mysql_error());
// Concerne l'affectation de l'entier représentant le module Forum
$sql = "SELECT mid FROM ".$prefix."_modules WHERE dirname = 'newbb'";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Module Forum introuvable.<br>n";
else
{
$row = mysql_fetch_array($result);
$forum_module_id = $row['mid'];
if ($verbose_mode==1) echo "<b>Valeur de l'identifiant du module Forum</b>: ".$forum_module_id."<br>n";
}
mysql_free_result($result);
// Concerne le calcul du nombre de forums à modifier
$sql = "SELECT COUNT(*) AS number FROM `".$prefix."_bb_forums`";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Forums introuvables.<br>n";
else
{
$row = mysql_fetch_array($result);
$forums_count = $row['number'];
if ($verbose_mode==1) echo "<b>Nombre de forums à traiter</b>: ".$forums_count."<br>n";
}
mysql_free_result($result);
// Concerne le calcul du nombre de catégories de forums à modifier
$sql = "SELECT COUNT(*) AS number FROM `".$prefix."_bb_categories`";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Catégories de forums introuvables.<br>n";
else
{
$row = mysql_fetch_array($result);
$categories_count = $row['number'];
if ($verbose_mode==1) echo "<b>Nombre de catégories de forums à traiter</b>: ".$categories_count."<br>n";
}
mysql_free_result($result);
// Concerne l'affectation de l'entier représentant le groupe des administrateurs
$sql = "SELECT groupid FROM `".$prefix."_groups` WHERE group_type = 'Admin'";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Erreur dans la table ".$prefix."_groups cocnernant le groupe Administrateur.<br>n";
else
{
$row = mysql_fetch_array($result);
$admin_grp_id = $row['groupid'];
if ($verbose_mode==1) echo "<b>Valeur de l'identifiant du groupe Administrateurs</b>: ".$admin_grp_id."<br>n";
}
mysql_free_result($result);
// Concerne l'affectation de l'entier représentant le groupe des utilisateurs enregistrés
$sql = "SELECT groupid FROM `".$prefix."_groups` WHERE group_type = 'User'";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Erreur dans la table ".$prefix."_groups cocnernant le groupe Membres.<br>n";
else
{
$row = mysql_fetch_array($result);
$user_grp_id = $row['groupid'];
if ($verbose_mode==1) echo "<b>Valeur de l'identifiant du groupe Utilisateurs</b>: ".$user_grp_id."<br>n";
}
mysql_free_result($result);
// Concerne l'affectation de l'entier représentant le groupe des utilisateurs anonymes
$sql = "SELECT groupid FROM `".$prefix."_groups` WHERE group_type = 'Anonymous'";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
if(mysql_numrows($result) != 1)
echo "Erreur dans la table ".$prefix."_groups cocnernant le groupe Anonymes.<br>n";
else
{
$row = mysql_fetch_array($result);
$anonymous_grp_id = $row['groupid'];
if ($verbose_mode==1) echo "<b>Valeur de l'identifiant du groupe Anonymes</b>: ".$anonymous_grp_id."<br>n";
}
mysql_free_result($result);
// Concerne la liste de catégories de forums à modifier
$sql = "SELECT cat_id FROM `".$prefix."_bb_categories` ORDER BY `cat_id` ASC";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
while($row = mysql_fetch_array($result))
{
$categorie_id = $row['cat_id'];
// Concerne la gestion de l'accès des catégories du forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_cat_access' AND gperm_itemid = '".$categorie_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$categorie_id."', '".$forum_module_id."', 'forum_cat_access')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$categorie_id."', '".$forum_module_id."', 'forum_cat_access')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$categorie_id."', '".$forum_module_id."', 'forum_cat_access')";
}
mysql_free_result($result);
// Concerne la liste des forums à modifier
$sql = "SELECT forum_id FROM `".$prefix."_bb_forums` ORDER BY `forum_id` ASC";
$result = mysql_query($sql) or die('<font color=red><b>Erreur SQL : </b></font>'.$sql.'<br>'.mysql_error());
while($row = mysql_fetch_array($result))
{
$forum_id = $row['forum_id'];
// Concerne la gestion de l'accès du forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'global_forum_access' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'global_forum_access')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'global_forum_access')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'global_forum_access')";
// Concerne la gestion de la possibilité de créer un nouveau topic dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_post' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_post')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_post')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_post')";
// Concerne la gestion de la possibilité de visualiser le contenu du forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_view' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_view')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_view')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_view')";
// Concerne la gestion de la possibilité de répondre aux posts du forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_reply' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_reply')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_reply')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_reply')";
// Concerne la gestion de la possibilité d'éditer un post dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_edit' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_edit')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_edit')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_edit')";
// Concerne la gestion de la possibilité de supprimer un post dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_delete' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_delete')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_delete')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_delete')";
// Concerne la gestion de la possibilité d'ajouter un sondage à un topic dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_addpoll' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_addpoll')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_addpoll')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_addpoll')";
// Concerne la gestion de la possibilité de voter à un sondage dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_vote' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_vote')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_vote')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_vote')";
// Concerne la gestion de la possibilité d'attacher un fichier à un post dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_attach' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_attach')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_attach')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_attach')";
// Concerne la gestion de la possibilité de poster sans approbation dans le forum
$forums_perms_sql[] = "DELETE FROM ".$prefix."_group_permission WHERE gperm_modid = '".$forum_module_id."' AND gperm_name = 'forum_can_noapprove' AND gperm_itemid = '".$forum_id."'";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$admin_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_noapprove')";
$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$user_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_noapprove')";
//$forums_perms_sql[] = "INSERT INTO ".$prefix."_group_permission (gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES ('".$anonymous_grp_id."', '".$forum_id."', '".$forum_module_id."', 'forum_can_noapprove')";
}
mysql_free_result($result);
echo "<font color='blue'><b>Mise à jour des permissions des forums (catégories incluses) en cours...</b></font><br>n";
// Exécution des requêtes de mise à jour des permissions
for($i=0;$i<sizeof($forums_perms_sql);$i++) // tant que $i est inferieur au nombre de requêtes du tableau...
{
mysql_query($forums_perms_sql[$i]) or die('<font color=red><b>Erreur SQL : </b></font>'.$forums_perms_sql[$i].'<br>'.mysql_error());
if ($verbose_mode==1) echo "<b>Exécution de la requête SQL suivante :</b> ".$forums_perms_sql[$i]."<br>n";
}
echo "<font color='blue'><b>Exécution du script terminé avec succès.</b></font><br>n";
// Fermeture la connexion à MySQL
mysql_close();
?>
P.S.: J'aurais bien mis le fichier en pièce jointe mais je n'en ai aps la possibilité ici, donc obliger de faire un copier-coller de barbare, pas très propre en pise en page...
EDIT: Version modifiée ajoutant le support des catégories des forums.
|
|