Fork me on GitHub

Rapport de message :*
 

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 &agrave; 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 &agrave; 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&eacute;gories de forums &agrave; 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 &agrave; jour des permissions des forums (cat&eacute;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&eacute;cution de la requ&ecirc;te SQL suivante :</b> ".$forums_perms_sql[$i]."<br>n";
}
echo 
"<font color='blue'><b>Ex&eacute;cution du script termin&eacute; avec succ&egrave;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.
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

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