On change le fonctionnement, on stocke dans le log la requete sql pour

etre capable de recalculer la chaine.

on passe en fonction la creation d'une chaine et d'une blochaine
This commit is contained in:
Christophe 2020-10-14 15:29:55 +02:00
parent 95d8da5595
commit 2fcf94bc55
6 changed files with 71 additions and 45 deletions

View file

@ -46,18 +46,19 @@ function blocklog_declarer_tables_objets_sql($tables) {
'type' => 'blocklog',
'principale' => 'oui',
'field'=> array(
'id_blocklog' => 'bigint(21) NOT NULL',
'id_objet' => 'bigint(21) DEFAULT "0" NOT NULL',
'objet' => 'VARCHAR(25) DEFAULT "" NOT NULL',
'num' => 'bigint(21) NOT NULL DEFAULT 0',
'blockchaine' => 'text NOT NULL DEFAULT ""',
'chaine' => 'text NOT NULL DEFAULT ""',
'maj' => 'TIMESTAMP'
'id_blocklog' => 'bigint(21) NOT NULL',
'id_objet' => 'bigint(21) DEFAULT "0" NOT NULL',
'objet' => 'VARCHAR(25) DEFAULT "" NOT NULL',
'num' => 'bigint(21) NOT NULL DEFAULT 0',
'blockchaine' => 'text NOT NULL DEFAULT ""',
'chaine' => 'text NOT NULL DEFAULT ""',
'requete' => 'text NOT NULL DEFAULT ""',
'maj' => 'TIMESTAMP'
),
'key' => array(
'PRIMARY KEY' => 'id_blocklog',
),
'champs_editables' => array('num', 'blockchaine', 'chaine','id_objet', 'objet'),
'champs_editables' => array('num', 'blockchaine', 'chaine','id_objet', 'objet', 'requete'),
);
return $tables;

View file

@ -27,7 +27,7 @@ function blocklog_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(array('maj_tables', array('spip_blocklogs')));
$maj['1.0.3'] = array(array('maj_tables', array('spip_blocklogs')));
$maj['1.0.7'] = array(array('maj_tables', array('spip_blocklogs')));
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);

View file

@ -118,9 +118,44 @@ function blocklog_verifier_blockchaines($objet, $date_debut = '', $date_fin = ''
}
}
}
var_dump($retour);
die;
return $retour;
}
function blocklog_creer_chaine($requete = ""){
if ( strlen($requete) < 5 ) {
return '';
}
$r = sql_query($requete);
$chaine = sql_fetch($r);
if (is_array($chaine)) {
$c = [];
foreach ($chaine as $i => $v) {
$c[] = $v;
}
$chaine = implode('|', $c);
}
if (defined('_DEBUG_BLOCKLOG')) {
spip_log($chaine, 'blocklog');
}
$chaine .= "|";
$chaine = hash(_BLOCKLOG_ALGO, $chaine);
return $chaine;
}
function blocklog_creer_blockchaine($chaine, $objet){
$where = array(
'objet='.sql_quote($objet)
);
$blockchaine = sql_getfetsel('blockchaine', 'spip_blocklogs', $where,'', 'id_blocklog DESC', '1');
$blockchaine .= "|" . $chaine;
$blockchaine = hash(_BLOCKLOG_ALGO, $blockchaine);
return $blockchaine;
}

View file

@ -16,3 +16,5 @@ if (!defined('_ECRIRE_INC_VERSION')) {
if (! defined("_BLOCKLOG_ALGO")) {
define("_BLOCKLOG_ALGO", 'sha256');
}
$GLOBALS['blocklog_select'] = [];

View file

@ -12,10 +12,12 @@ if (!defined('_ECRIRE_INC_VERSION')){
* @param string | array $chaine : ensemble des valeurs utilisées pour creer la chaine
* @return array [id_blocklog, chaine, blockchaine]
*/
function inc_blocklog_dist($objet, $id_objet = 0, $num = 0, $chaine = '') {
if (!$objet or !$id_objet or !$chaine) {
function inc_blocklog_dist($objet, $id_objet = 0, $num = 0, $requete = '') {
if (!$objet or !$id_objet or !$requete) {
return false;
}
include_spip('blocklog_fonctions');
if (defined('_DEBUG_BLOCKLOG')) {
spip_log('objet = '.$objet, 'blocklog');
@ -28,36 +30,16 @@ function inc_blocklog_dist($objet, $id_objet = 0, $num = 0, $chaine = '') {
define("_BLOCKLOG_ALGO", 'sha256');
}
if (is_array($chaine)) {
$c = [];
foreach ($chaine as $i => $v) {
$c[] = $v;
}
$chaine = implode('|', $c);
}
if (defined('_DEBUG_BLOCKLOG')) {
spip_log($chaine, 'blocklog');
}
$chaine .= "|";
$chaine = hash(_BLOCKLOG_ALGO, $chaine);
$where = array(
'objet='.sql_quote($objet)
);
$blockchaine = sql_getfetsel('blockchaine', 'spip_blocklogs', $where,'', 'id_blocklog DESC', '1');
$blockchaine .= "|" . $chaine;
$blockchaine = hash(_BLOCKLOG_ALGO, $blockchaine);
$chaine = blocklog_creer_chaine($requete);
$blockchaine = blocklog_creer_blockchaine($chaine, $objet);
$set = array (
'objet' => $objet,
'id_objet' => intval($id_objet),
'blockchaine' => $blockchaine,
'chaine' => $chaine,
'num' => intval($num)
'num' => intval($num),
'requete' => $requete
);
if (defined('_DEBUG_BLOCKLOG')) {
@ -65,12 +47,18 @@ function inc_blocklog_dist($objet, $id_objet = 0, $num = 0, $chaine = '') {
spip_log('================', 'blocklog');
}
include_spip('action/editer_objet');
set_request('id_auteur', null);
$r = objet_inserer("blocklog", null, $set);
if (!intval($r)) {
// test la presence en bdd du couple objet / id_objet, si c'est le cas,
// c'est pas bon signe
$id_blocklog = sql_getfetsel('id_blocklog', 'spip_blocklogs', [
'id_objet='.intval($id_objet),
'objet='.sql_quote($objet)
]);
if (intval($id_blocklog)) {
spip_log("Modification log $id_blocklog","blocklog_modif");
spip_log("la blockchaine pour $objet / $id_objet ne pas pas etre inserer en bdd", 'blocklog'._LOG_ERREUR);
} else {
$id_blocklog = sql_insertq('spip_blocklogs', $set);
}
return $r;
return $id_blocklog;
}

View file

@ -1,12 +1,12 @@
<paquet
prefix="blocklog"
categorie="outil"
version="1.1.2"
version="1.1.5"
etat="dev"
compatibilite="[3.2.0;3.3.*]"
logo="prive/themes/spip/images/blocklog-64.png"
documentation=""
schema="1.0.3"
schema="1.0.7"
>
<nom>Block Log</nom>