News:

Wondering if this will always be free?  See why free is better.

Main Menu

Souci avec le mod Hide Tag Special 3.0

Started by grandseb59, April 04, 2020, 01:21:54 PM

Previous topic - Next topic

grandseb59

Bonjour,
Bon pour ceux qui suivent mes soucis, mon problème principal était que le theme que j'avais choisi n'etait pas compatible avec la v 2.0.17.... d'où mes nombreux problèmes.
J'ai suis donc reparti de zero, même pas un large upgrade.... la complète  ;D

jusqu'à aujourd'hui, aucun souci, je chargeais mes mod les uns après les autres.

Mais arrive le mod hide tag special....

à l'instalation un truc à corriger
dans le fichier subs.php
mettre avant : static $disabled;
je n'ai pas trouvé exactement ça, mais cela: static $disabled, $default_disabled, $parse_tag_cache;
donc j'ai mis ce qui suis (entre start et end) avant cette ligne.

// Parse bulletin board code in a string, as well as smileys optionally.
function parse_bbc($message, $smileys = true, $cache_id = '', $parse_tags = array())
{
global $txt, $scripturl, $context, $modSettings, $user_info, $smcFunc;
static $bbc_codes = array(), $itemcodes = array(), $no_autolink_tags = array();

//Start of mod hide tag special
// On the first Parsing i will gernerate all things i need ;) after that it's not needable :)
if (!isset($modSettings['hide_preparedOption']))
{
// First there is nothing in it ;)
$modSettings['hide_preparedOption']['hiddentext'] = ' ';
$modSettings['hide_preparedOption']['unhiddentext'] = ' ';

if (empty($modSettings['hide_noinfoforguests']) || !$user_info['is_guest'])
{
// Prepare the hidden information :)
$modSettings['hide_preparedOption']['hiddentext'] = isset($modSettings['hide_hiddentext']) ? $modSettings['hide_hiddentext'] : '';
$modSettings['hide_preparedOption']['hiddentext'] = str_replace('$language', $user_info['language'], $modSettings['hide_preparedOption']['hiddentext']);
if (!empty($modSettings['hide_MUIswitch']) && isset($txt['hide_hiddentext']))
$modSettings['hide_preparedOption']['hiddentext'] = str_replace('$txtvariable', $txt['hide_hiddentext'], $modSettings['hide_preparedOption']['hiddentext']);
if (!empty($modSettings['hide_enableHTML']))
$modSettings['hide_preparedOption']['hiddentext'] = un_htmlspecialchars($modSettings['hide_preparedOption']['hiddentext']);

// Prepare the unhidden infomation?
if (!empty($modSettings['hide_enableUnhiddenText']))
{
$modSettings['hide_preparedOption']['unhiddentext'] = isset($modSettings['hide_unhiddentext']) ? $modSettings['hide_unhiddentext'] : '';
$modSettings['hide_preparedOption']['unhiddentext'] = str_replace('$language', $user_info['language'], $modSettings['hide_preparedOption']['unhiddentext']);
if (!empty($modSettings['hide_MUIswitch']) && isset($txt['hide_unhiddentext']))
$modSettings['hide_preparedOption']['unhiddentext'] = str_replace('$txtvariable', $txt['hide_unhiddentext'], $modSettings['hide_preparedOption']['unhiddentext']);
if (!empty($modSettings['hide_enableHTML']))
$modSettings['hide_preparedOption']['unhiddentext'] = un_htmlspecialchars($modSettings['hide_preparedOption']['unhiddentext']);
}
}

// So prepare the unhidden Option for the Parser ;)
if (!empty($modSettings['hide_useSpanTag']))
{
$modSettings['hide_preparedOption']['before_info'] = '<span class="hiddencontent">';
$modSettings['hide_preparedOption']['after_info'] = '</span>';
}
else
{
$modSettings['hide_preparedOption']['before_info'] = '<div class="hiddencontent">';
$modSettings['hide_preparedOption']['after_info'] = '</div>';
}

// Okay Let's see where i must put the unhidden Informations :)
if (!empty($modSettings['hide_enableUnhiddenText']) && empty($modSettings['hide_onlyonetimeinfo']))
{
if (empty($modSettings['hide_posUnhiddenText']) || $modSettings['hide_posUnhiddenText'] == 4)
$modSettings['hide_preparedOption']['after_info'] .= $modSettings['hide_preparedOption']['unhiddentext'];
elseif ($modSettings['hide_posUnhiddenText'] == 3)
$modSettings['hide_preparedOption']['after_info'] = $modSettings['hide_preparedOption']['unhiddentext'].$modSettings['hide_preparedOption']['after_info'];
elseif ($modSettings['hide_posUnhiddenText'] == 2)
$modSettings['hide_preparedOption']['before_info'] .= $modSettings['hide_preparedOption']['unhiddentext'];
elseif ($modSettings['hide_posUnhiddenText'] == 1)
$modSettings['hide_preparedOption']['before_info'] = $modSettings['hide_preparedOption']['unhiddentext'].$modSettings['hide_preparedOption']['before_info'];
else
$modSettings['hide_preparedOption']['after_info'] .= $modSettings['hide_preparedOption']['unhiddentext'];
}

$modSettings['hide_preparedOption']['parse_content'] = !empty($modSettings['hide_enableUnhiddenText']) && empty($modSettings['hide_onlyonetimeinfo']);

// Okay this is the check up if he is allowed to unhide it everytime! (Risky if wrong setup or diffrent mods can handle hide tag)
$modSettings['hide_preparedOption']['auto_unhide_parser'] = false;
if (!empty($modSettings['hide_unhideparser']) && !empty($modSettings['hide_autounhidegroups']))
{
$modSettings['hide_autounhidegroups'] = !is_array($modSettings['hide_autounhidegroups']) ? explode(',', $modSettings['hide_autounhidegroups']) : $modSettings['hide_autounhidegroups'];
foreach ($user_info['groups'] as $group_id)
if (in_array($group_id, $modSettings['hide_autounhidegroups']))
{
$modSettings['hide_preparedOption']['auto_unhide_parser'] = true;
break; //One is enouph ;D
}
}
}

// Hide Mod.. i remove the code before i do anything...
if ($message !== false && !empty($message))
{
if ($modSettings['hide_preparedOption']['auto_unhide_parser'])
$context['user_post_avaible'] = 1;
// Add the Hidden Text at the end of the post :)
if ((empty($context['user_post_avaible']) || !isset($context['user_post_avaible'])) && !empty($modSettings['hide_onlyonetimeinfo']) && hideTagExists($message, $cache_id))
$message .= '[br]'.$modSettings['hide_preparedOption']['hiddentext'];
// Here i remove this content :) or show onetime unhide info :)
if (!isset($context['user_post_avaible']) || empty($context['user_post_avaible']))
{
// Remove it ;D
$message = preg_replace("/\[hide\](.+?)\[\/hide\]/i", (empty($modSettings['hide_onlyonetimeinfo']) ? $modSettings['hide_preparedOption']['hiddentext'] : "&nbsp"), $message);
$message = preg_replace(array('~\n?\[hide.*?\].+?\[/hide\]\n?~is', '~^\n~', '~\[/hide\]~'), (empty($modSettings['hide_onlyonetimeinfo']) ? $modSettings['hide_preparedOption']['hiddentext'] : "&nbsp"), $message);
}
// Okay i need to add the unhidden information at the end of the post :)
elseif (!empty($context['user_post_avaible']) && !empty($modSettings['hide_onlyonetimeinfo']) && !empty($modSettings['hide_enableUnhiddenText']) && hideTagExists($message, $cache_id))
$message .= '[br]'.$modSettings['hide_preparedOption']['unhiddentext'];
}
//End of mod hide tag special

static $disabled, $default_disabled, $parse_tag_cache;


Après cette modif j'ai donc forcer l'installation mais lors de l'ouverture de la page admin du Hide tag special
j'ai une erreur SQL: Call to undefined function mysql_free_result()

peut être que ça n'a rien à voir avec la correction du subs.php,  mais c'etait pour vous donner la marche que j'ai suivi.

Si vous avez besoin d'un fichier autre que ceux ci dessous dites le moi.

Merci d'avance

alexetgus

Salut,

L'erreur est pourtant simple, la fonction mysql_free_result() n'existe pas.
Il te faut demander à ton hébergeur. Ca dépend peut-être du SGBD qu'il utilise ou c'est carrément lui qui a désactivé cette fonction (ce qui serait étonnant, mais bon).
Depuis PHP7, mysql peut présenter des soucis, voir même être inutilisable si c'est le SGBD MySQL...

Sinon, tente de passer ton mode en MySQLi si tu ne peux vraiment pas t'en passer (désinstalle le d'abord).

grandseb59

Salut alexetgus,

Si je me rappelle bien une discussion avec maximus, le forum de base est en mysqli, donc si ce n'était pas activer, ça devrai être le forum lui même qui n'aurait pas du s'afficher.
Je suis donc aller sur mon panel d'admin et j'ai bien mysql et mysqli de cocher, mais peut être qu'il y a une autre case à cocher, parce que je me suis baser sur mon forum en production qui est , lui en php5.6 sur un autre serveur.




Mais au départ je pensais plus à une erreur dû, peut être, à la vétusté de ce mod (vu que vous l'avez effacé de ce forum et que je l'ai récupérer dans les packages de mon forum en production) et en modifiant quelques lignes, il m'afficherai ma page admin de ce mod.
Ou alors une fonction mysql à changer en mysqli,....mais dans les différents fichiers que le mod à modifier, je ne retrouve pas de fonctions sql ou alors à force d'avoir les yeux dessus, je n'arrive pas à le voir peut être.



alexetgus

Oui, ça ne se voit pas, mais SMF cherche à utiliser MySQLi en priorité si disponible.

Le truc, c'est que les mods ne tiennent pas compte de ça. Si un mod utilise MySQL c'est pas SMF qui va faire le boulot à sa place en MySQLi.
Certains ne prennent même pas la peine d'utiliser les fonctions SMF et y vont direct avec leurs fonctions MySQL en dépit de toutes les règles de sécurité...

Tu dis avoir PHP 5.6 mais tu affiches une capture PHP 7.1, tu es sûr que c'est 5.6 sur ton forum ?
Sinon, ce mod est vraiment indispensable ? Il n'existe pas d'alternative ?

Ta capture indique que PDO_MySQL est actif. Mais si le mod utilise MySQL, c'est complètement différent !
PDO, c'est les requêtes préparées. Et beaucoup ne connaissent pas. Il préfèrent passer leurs requêtes directement en MySQL en négligeant la sécurité apportées par PDO.
C'est peut-être pour ça que le mod a été retiré du "store" SMF, il était vulnérable... Il faudrait demander à Max.

grandseb59

Quote from: alexetgus on April 06, 2020, 11:46:09 AM
Oui, ça ne se voit pas, mais SMF cherche à utiliser MySQLi en priorité si disponible.

Le truc, c'est que les mods ne tiennent pas compte de ça. Si un mod utilise MySQL c'est pas SMF qui va faire le boulot à sa place en MySQLi.
Certains ne prennent même pas la peine d'utiliser les fonctions SMF et y vont direct avec leurs fonctions MySQL en dépit de toutes les règles de sécurité...

Ok

Quote from: alexetgus on April 06, 2020, 11:46:09 AMTu dis avoir PHP 5.6 mais tu affiches une capture PHP 7.1, tu es sûr que c'est 5.6 sur ton forum ?

je t'ai fais le screen du serveur où j'ai le souci, celui où je travaille pour faire une v2 et le mettre à jour.
celui en production (public) est en V2.0.11 et donc en php5.6 mais à part qu'il n'est pas à jour.... il fonctionne sans problème.
L'ancien webmaster m'a laissé un forum qui tourne tout seul.... faut juste qu'il n'y ai pas de gros souci en attendant que je soit vraiment competent dans le codage  ;D

Quote from: alexetgus on April 06, 2020, 11:46:09 AMSinon, ce mod est vraiment indispensable ? Il n'existe pas d'alternative ?

Disons que la balise Hide est fortement utilisé, mais je ne suis pas accroché à ce mod en particulier. Si tu en connais un autre qui fait la même chose  sans souci.... je suis preneur ;)

Quote from: alexetgus on April 06, 2020, 11:46:09 AMTa capture indique que PDO_MySQL est actif. Mais si le mod utilise MySQL, c'est complètement différent !
PDO, c'est les requêtes préparées. Et beaucoup ne connaissent pas. Il préfèrent passer leurs requêtes directement en MySQL en négligeant la sécurité apportées par PDO.
C'est peut-être pour ça que le mod a été retiré du "store" SMF, il était vulnérable... Il faudrait demander à Max.

faut il alors que je coche une autre case? et si oui laquel?

ironside.legende

je ne vais pas t'aider en disant ceci , mais je n'ai pas de soucis avec ce hide: "HideContent_1.1.4" alors tu peux toujours l'essayer.
Il est bien configurable , je l'ai bien sur fait a ma sauce avec le css de chaque thème, et traduit aussi.
SMF: 2.0.19
portail: 2.3.8 Bêta

grandseb59

Bon j'ai viré le hide tag special

merci iron pour le mod que tu proposes, malheureusement je n'arrive pas à le configurer comme je veux :(
des que je clic sur le bouton, il m'apparaît une fenêtre reprenant tout les réglage que je venais de faire en partie admin et ne me met pas les balises... et en plus si chaque membre peut faire ce genre de réglage.... ça va être vite fait le bordel  ;D )
pourtant au début j'étais super content car il prenait en compte le mod say thank (que je suis enfin arrivé à installer sur ce thème  ;D )

ce que j'aimerai, c'est d'avoir des balises "hide" que l'on puisse mettre quand on veux comme on veux sauf en MP
qu'il y ai un bouton "hide" qui nous fait apparaître les balises (d'ouverture et de fermeture)
Que le contenu entre les deux balises soit cacher tant que l'on a pas répondu au topic (disons remercié donc si c'est compatible avec say thank, encore mieux)
et réglable dans les permissions pour que mon staff n'ai pas cette contrainte.

Bon je vais de ce pas, rechercher si il existe un autre mod, mais si entre temps quelqu'un en trouve un qui correspond.... je suis preneur ;)



ironside.legende

il faut faire les réglages dans le panneau d'administration.
Tu peux le régler en fonction du nombre de messages , en fonction de l'appartenance a un group , en fonction du karma etc...
Tout dépend de ce que tu veux.
je vais t'envoyer la traduction peut-être tu seras plus a l'aise.
dans ton FTP répertoire principal/Themes/default/languages/Modifications.english.php
cherche :// Hide Content Mod ensuite tu insère le code en dessous en remplacement du code Anglais.
// Hide Content Mod
$txt['hidecontent_required_conditions'] = '<b>Vous devez remplir les conditions ci-dessous:</b>';
$txt['hidecontent_passed_required_conditions'] = 'Hide actif';
$txt['hidecontent_hide'] = 'Masquer le contenu dans les messages';
$txt['hidepost_title'] = 'Hide par messages au compteur';
$txt['hidepost_text'] = 'Vous devez avoir un minimum de {posts_needed} messages à votre compteur , il vous en manque encore {posts_left}.';
$txt['hidepost_desc'] = 'Masque le contenu des publications en fonction du nombre de publications.';
$txt['hidepost_input_title'] = 'Messages minimun que vous devez avoir';
$txt['hidelogin_title'] = 'Masquer par connexion';
$txt['hidelogin_only_for_guest_text'] = 'Vous devez vous déconnecter pour voir ce contenu, s\'il vous plaît <a href="{logout_link}">log out</a>.';
$txt['hidelogin_only_for_registered_text'] = 'Vous devez vous connecter pour voir ce contenu, veuillez <a href="{login_link}">login</a> or <a href="{register_link}">register</a>.';
$txt['hidelogin_desc'] = 'Masque le contenu de la publication selon que l\'utilisateur est connecté ou non.';
$txt['hidegroup_title'] = 'Hide par groupe (<font color="#67c1cd">les groupes cochés verront le contenu</a>)';
$txt['hidegroup_text'] = 'Vous devez être soit:</br></br> {groups_needed}</br></br> et vous être présenté pour voir les liens.';
$txt['hidegroup_desc'] = 'Masque le contenu des publications en fonction du groupe.';
$txt['hidegroup_input_title'] = 'Groupes';
$txt['hidekarma_title'] = 'Hide par le karma';
$txt['hidekarma_text'] = 'Vous avez besoin d\'un karma d\'au moins {karma_needed}.';
$txt['hidekarma_desc'] = 'Masque le contenu des publications basé sur le karma.';
$txt['hidekarma_input_title'] = 'Minimum karma';
$txt['hidecontent_enable_plugin_settings_desc'] = 'Activer le plugin: ';
$txt['hidecontent_settings'] = "Masquer le contenu";
$txt['hidecontent_error_1'] = "%le champ doit être uniquement numérique";
$txt['hidecontent_error_2'] = "%Champ requis";
$txt['hidecontent_error_3'] = "Au moins une option est requise";
$txt['hidecontent_apply'] = "Appliquer";
$txt['hidecontent_modal_description'] = 'Options du hide <font color="red" size="1">(traduit par ironside)</font>';
$txt['hidecontent_modal_close'] = "Fermer <b>X</b>";
$txt['hidecontent_admin_default_value'] = 'Valeur par défaut';
$txt['hidecontent_admin_no_value'] = 'Si vous entrez 0 ou aucune valeur, la valeur par défaut du plugin sera utilisée';
$txt['hidecontent_settings_checkbox_default'] = 'Par défaut pour l\'option ';
$txt['hidecontent_quote_hidden'] = 'Ce contenu est caché et ne peut pas être cité.';
$txt['hidecontent_disable_on_pm'] = 'Désactivé dans les messages privés';
$txt['hidecontent_disable_on_boards'] = 'Désactivé dans les sections';
$txt['hidecontent_checked_by_default'] = 'Coché par défaut';
$txt['permissionname_hide_content'] = 'Contenu du "hide"';
$txt['permissionhelp_hide_content'] = 'Cette autorisation permet à l\'utilisateur d\'utiliser la balise de contenu masquée';
$txt['permissionname_pm_hide_content'] = 'Masquer le contenu';
$txt['permissionhelp_pm_hide_content'] = 'Cette autorisation permet à l\'utilisateur d\'utiliser la balise de contenu masquée';
$txt['hidecontent_uninstall_permssions_and_settings'] = 'Autorisations et paramètres';
// Hide Content Mod
SMF: 2.0.19
portail: 2.3.8 Bêta

grandseb59

merci iron ;)

Après quelques galère de paramétrage, en fait c'est un très bon mod qui s'accorde avec le mod say thanks

pour une fois, problème résolu  ;D

ironside.legende

SMF: 2.0.19
portail: 2.3.8 Bêta

Advertisement: