Simple Machines Community Forum

SMF Support => Language Specific Support => Français (French) => Topic started by: DanielSan34 on January 14, 2016, 04:31:43 AM

Title: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 14, 2016, 04:31:43 AM
Bonjour à vous,

nous avons mis en place le système d'abonnement payant pour les adhésions à notre fédération.
ça marche nickel ! et ça nous facilite grandement la vie, merci aux développeurs !

cependant dans la page de configuration d'un abonnement, le textarea "description" est trop petit pour nous ...
j'ai bien cherché dans le fichier ManagePaid.php, trouvé ce qui attrait à "description" mais je n'arrive pas à savoir ce qu'il faut modifier pour que ça enregistre plus de caractère dans la bdd. J'ai bien modifié des 255 en 500 mais en vain :(

Quelqu'un a une petite idée ?

Merci à vous
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 14, 2016, 10:59:04 AM
Bonsoir,

Tu dois changer la valeur du champ "description" qui est à 255 dans la table "subscriptions" .

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 14, 2016, 11:10:56 AM
Hello

via MySQL ?
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 14, 2016, 11:26:33 AM
Bonjour,

Pour changer la valeur d'un champ cela se fait via phpmyadmin c'est le plus simple.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 14, 2016, 12:52:31 PM
en effet c'est plus simple, merci ;D

j'en profite pour préciser une modification pour avoir les accents sur le nom de l'abonnement chez paypal :
dans Sources/Subscriptions-Paypal.php / fonction fetchGatewayFields()
rajouter dans le tableau $return_data['hidden']
Code: [Select]
$return_data['hidden']['charset'] = 'UTF-8';ou alors importer la valeur paramétrée dans SMF mais je ne sais pas comment ;D

et quitte à avoir les mains dans l'abonnement,
nous avons ajouté des champs "privés" (visible par l'admin et le membre) concernant les adresses de facturation.
Nous aimerions envoyer ces champs à Paypal ...

au même endroit :
Code: [Select]
public function fetchGatewayFields($unique_id, $sub_data, $value, $period, $return_url)
{
global $modSettings, $txt, $boardurl;

$return_data = array(
'form' => 'https://www.' . (!empty($modSettings['paidsubs_test']) ? 'sandbox.' : '') . 'paypal.com/cgi-bin/webscr',
'id' => 'paypal',
'hidden' => array(),
'title' => $txt['paypal'],
'desc' => $txt['paid_confirm_paypal'],
'submit' => $txt['paid_paypal_order'],
'javascript' => '',

'address1'=> '', // valeur du champ privé adresse
'zip'=> '', // valeur du champ privé code postal
'city'=> '', // valeur du champ privé ville
'first_name'=> '', // valeur du champ privé prénom
'last_name'=> '', // valeur du champ privé nom
);

etc.
}

j'ai entraperçu une fonction loadCustomFields($memID, 'account') ... est-ce par là qu'il faille creuser ??

et dans l'idéal, ne faire apparaître le bouton 'commander' que si le membre a renseigné ces champs :P

merci de votre aide
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 24, 2016, 01:15:31 PM
bonsoir,

je reviens sur le dernier point : interroger les champs personnalisés.
J'essaie d'utiliser la fonction loadCustomFields($context['id_member']) mais en vain :(
est-ce la bonne ? c'est le dernier gros point pour que notre forum soit tip-top, et là je bloque ???
une petite aide ? merci !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 24, 2016, 01:38:54 PM
Bonsoir,

Pour commencer est-ce que le format Gateway Paypal accepte ces valeurs supplémentaires ?

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 24, 2016, 04:34:13 PM
Bonsoir,

j'ai déjà implémenté des formulaires paypal avec ces valeurs
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/formbasics/
Quote
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="business" value="seller@designerfotos.com">
<input type="hidden" name="item_name" value="hat">
<input type="hidden" name="item_number" value="123">
<input type="hidden" name="amount" value="15.00">
<input type="hidden" name="first_name" value="John">
<input type="hidden" name="last_name" value="Doe">
<input type="hidden" name="address1" value="9 Elm Street">
<input type="hidden" name="address2" value="Apt 5">
<input type="hidden" name="city" value="Berwyn">
<input type="hidden" name="state" value="PA">
<input type="hidden" name="zip" value="19312">
<input type="hidden" name="night_phone_a" value="610">
<input type="hidden" name="night_phone_b" value="555">
<input type="hidden" name="night_phone_c" value="1234">
<input type="hidden" name="email" value="jdoe@zyzzyu.com">
<input type="image" name="submit" border="0"
src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif"
alt="PayPal - The safer, easier way to pay online">
</form>
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 25, 2016, 09:27:11 AM
Bonjour,

Donc tu veux définir une nouvelle fonction pour faire un envoi vers paypal ?

Tu vas l'utiliser comment car cela ne doit pas entrer en conflit avec l'envoi de Smf.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 25, 2016, 10:14:57 AM
Bonjour,

je n'utilise pas une nouvelle fonction, je complète celle existante par les champs manquants ;)

Il faut que j'arrive à interroger les champs personnalisés pour :
je m'y connais un peu en PHP, je bute sur le SQL (j'ai plutôt l'habitude du XML ;D )

Merci pour ton aide
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 25, 2016, 08:11:36 PM
Bonsoir,

Je regarderai ce week-end car cette semaine très peu de temps.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 25, 2016, 11:50:06 PM
okay merci !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 26, 2016, 03:08:51 PM
Bonsoir,

Je suppose que l'on ne sait pas tester le formulaire sans compte Paypal même en utilisant le bac à sable de test ?

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 26, 2016, 07:30:26 PM
bonsoir

bonne question ! je pense que si tu n'as pas d'email paypal, ça ne devrait pas le faire ...
au pire j'ai le forum en miroir pour le développement (ou alors je te file en MP une email PP ..? je ne pense pas que ça craigne )
merci
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 27, 2016, 06:39:29 PM
Bonsoir,

Bon voici une solution à tester avec ton forum de test en bac à sable Paypal. Ici je te mets la solution passe partout avec un exemple ou j'ai défini trois champs dans les champs additionnels de Smf. Donc j'ai ajouté le champ Rue, le champ Commune, le champ Code Postal.

Moi pour tester mon code je l'ai mis dans indextemplate du thème de Smf.

Donc j'ai recréé une fonction que tu vas mettre avant la fin du fichier Sources/Load/


Code: [Select]
// Load mycustom fields for this area => 'summary' loads all public ones.
function loadMyCustomFields($memID, $area = 'summary')
{
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl;


// Did we get the user by name...
if (isset($_REQUEST['user']))
$memberResult = loadMemberData($_REQUEST['user'], true, 'profile');
// ... or by id_member?
elseif (!empty($_REQUEST['u']))
$memberResult = loadMemberData((int) $_REQUEST['u'], false, 'profile');
// If it was just ?action=profile, edit your own profile.
else
$memberResult = loadMemberData($user_info['id'], false, 'profile');

// Check if loadMemberData() has returned a valid result.
if (!is_array($memberResult))
fatal_lang_error('not_a_user', false);

// If all went well, we have a valid member ID!
list ($memID) = $memberResult;
$context['id_member'] = $memID;
$cur_profile = $user_profile[$memID];

// Let's have some information about this member ready, too.
loadMemberContext($memID);
$context['member'] = $memberContext[$memID];

// Is this the profile of the user himself or herself?
$context['user']['is_owner'] = $memID == $user_info['id'];

// Get the right restrictions in place...
$where = 'active = 1';

if (!allowedTo('admin_forum') && $area != 'register')
{
// If it's the owner they can see two types of private fields, regardless.
if ($memID == $user_info['id'])
$where .= $area == 'summary' ? ' AND private < 3' : ' AND (private = 0 OR private = 2)';
else
$where .= $area == 'summary' ? ' AND private < 2' : ' AND private = 0';
}

if ($area == 'register')
$where .= ' AND show_reg != 0';
elseif ($area != 'summary')
$where .= ' AND show_profile = {string:area}';

// Load all the relevant fields - and data.
$request = $smcFunc['db_query']('', '
SELECT
col_name, field_name, field_desc, field_type, field_length, field_options,
default_value, bbc, enclose, placement
FROM {db_prefix}custom_fields
WHERE ' . $where,
array(
'area' => $area,
)
);

$context['custom_myprofile_fields'] = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$curField = 'cust_' . $row['col_name'];

// Collect the column info and some extra.
$context['custom_myprofile_fields']['columns'][$curField] = array(
'label' => $row['field_name'],
'type' => $row['field_type'],
'bbc' => !empty($row['bbc']),
);

// Build up sort queries.
if ($row['field_type'] != 'check')
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 'LENGTH(t' . $curField . '.value) > 0 ASC, IFNULL(t' . $curField . '.value, 1=1) DESC, t' . $curField . '.value DESC',
'up' => 'LENGTH(t' . $curField . '.value) > 0 DESC, IFNULL(t' . $curField . '.value, 1=1) ASC, t' . $curField . '.value ASC'
);
else
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 't' . $curField . '.value DESC',
'up' => 't' . $curField . '.value ASC'
);


if (isset($_REQUEST['sort']) && $_REQUEST['sort'] == $curField)
{
$context['custom_myprofile_fields']['join'] = 'LEFT JOIN {db_prefix}themes AS t' . $curField . ' ON (t' . $curField . '.variable = {string:t' . $curField . '} AND t' . $curField . '.id_theme = 1 AND t' . $curField . '.id_member = mem.id_member)';
$context['custom_myprofile_fields']['parameters']['t' . $curField] = $row['col_name'];
}


// Shortcut.
$exists = $memID && isset($user_profile[$memID], $user_profile[$memID]['options'][$row['col_name']]);
$value = $exists ? $user_profile[$memID]['options'][$row['col_name']] : '';

// If this was submitted already then make the value the posted version.
if (isset($_POST['customfield']) && isset($_POST['customfield'][$row['col_name']]))
{
$value = $smcFunc['htmlspecialchars']($_POST['customfield'][$row['col_name']]);
if (in_array($row['field_type'], array('select', 'radio')))
$value = ($options = explode(',', $row['field_options'])) && isset($options[$value]) ? $options[$value] : '';
}

// HTML for the input form.
$output_html = $value;
if ($row['field_type'] == 'check')
{
$true = (!$exists && $row['default_value']) || $value;
$input_html = '<input type="checkbox" name="customfield[' . $row['col_name'] . ']" ' . ($true ? 'checked="checked"' : '') . ' class="input_check" />';
$output_html = $true ? $txt['yes'] : $txt['no'];
}
elseif ($row['field_type'] == 'select')
{
$input_html = '<select name="customfield[' . $row['col_name'] . ']"><option value="-1"></option>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<option value="' . $k . '"' . ($true ? ' selected="selected"' : '') . '>' . $v . '</option>';
if ($true)
$output_html = $v;
}

$input_html .= '</select>';
}
elseif ($row['field_type'] == 'radio')
{
$input_html = '<fieldset>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<label for="customfield_' . $row['col_name'] . '_' . $k . '"><input type="radio" name="customfield[' . $row['col_name'] . ']" class="input_radio" id="customfield_' . $row['col_name'] . '_' . $k . '" value="' . $k . '" ' . ($true ? 'checked="checked"' : '') . '>' . $v . '</label><br />';
if ($true)
$output_html = $v;
}
$input_html .= '</fieldset>';
}
elseif ($row['field_type'] == 'text')
{
$input_html = '<input type="text" name="customfield[' . $row['col_name'] . ']" ' . ($row['field_length'] != 0 ? 'maxlength="' . $row['field_length'] . '"' : '') . ' size="' . ($row['field_length'] == 0 || $row['field_length'] >= 50 ? 50 : ($row['field_length'] > 30 ? 30 : ($row['field_length'] > 10 ? 20 : 10))) . '" value="' . $value . '" class="input_text" />';
}
else
{
@list ($rows, $cols) = @explode(',', $row['default_value']);
$input_html = '<textarea name="customfield[' . $row['col_name'] . ']" ' . (!empty($rows) ? 'rows="' . $rows . '"' : '') . ' ' . (!empty($cols) ? 'cols="' . $cols . '"' : '') . '>' . $value . '</textarea>';
}

// Parse BBCode
if ($row['bbc'])
$output_html = parse_bbc($output_html);
elseif($row['field_type'] == 'textarea')
// Allow for newlines at least
$output_html = strtr($output_html, array("\n" => '<br />'));

// Enclosing the user input within some other text?
if (!empty($row['enclose']) && !empty($output_html))
$output_html = strtr($row['enclose'], array(
'{SCRIPTURL}' => $scripturl,
'{IMAGES_URL}' => $settings['images_url'],
'{DEFAULT_IMAGES_URL}' => $settings['default_images_url'],
'{INPUT}' => $output_html,
));

$context['mycustom_fields'][] = array(
'name' => $row['field_name'],
'desc' => $row['field_desc'],
'type' => $row['field_type'],
'input_html' => $input_html,
'output_html' => $output_html,
'placement' => $row['placement'],
'colname' => $row['col_name'],
'value' => $value,
);
}
$smcFunc['db_free_result']($request);
}

Voilà donc ce sera la fonction principale.

Maintenant moi ici je me sert de l'indextemplate pour afficher mais le code sera indentique dans ton fichier Paypal

Donc tu auras une sécurité de connexion pour les guests obligatoire et après tu auras ton appel de fonction.

Après tu auras la récupération des champs et leurs valeurs.

Moi ici j'ai mis tout mais toi tu devras simplement récupérer la valeur du champ pour mettre dans ton formulaire.

Attention code brut de développement :

Code: [Select]
if ($context['user']['is_logged'])

{

loadMyCustomFields($memID, $area = 'summary');
//FormFields();

echo'<br/><br/>';

//print_r($context);

echo'<br/><br/>';

echo 'Nom : ' .$context['mycustom_fields'][0]['name'];

echo '<br/>Description : ' .$context['mycustom_fields'][0]['desc'];

echo '<br/>Mon Adresse : ' .$context['mycustom_fields'][0]['value'];

echo'<br/><br/>';

echo 'Nom : ' .$context['mycustom_fields'][1]['name'];

echo '<br/>Description : ' .$context['mycustom_fields'][1]['desc'];

echo '<br/>Mon Adresse : ' .$context['mycustom_fields'][1]['value'];

echo'<br/><br/>';

echo 'Nom : ' .$context['mycustom_fields'][2]['name'];

echo '<br/>Description : ' .$context['mycustom_fields'][2]['desc'];

echo '<br/>Mon Adresse : ' .$context['mycustom_fields'][2]['value'];


echo'<br/><br/>';
echo'<br/><br/>';
echo'<br/><br/>';
echo'<br/><br/>';

}

Si tu veux tester et voir si cela fonctionne tu peux mettre le code dans ton thème fichier IndexTemplate

insérer le code avant :

Code: [Select]
// If the user is logged in, display stuff like their name, new messages, etc.

Je l'ai mis là pour plus de visibilité.

et cela donne ceci :


Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 27, 2016, 07:34:18 PM
oh yeah du grand Maximus ! Merciiii !

quand je vois ta fonction loadMyCustomFields, jamais je n'y serai arrivé ou alors pas sans risque ;D
demain je fais les essais sur les différentes pages et j'espère que ça va marcher.
on a dû faire une relance aux adhérents, et on se paluche les factures à la main, ggrrrr

je te tiens au jus, mille mercimus !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 27, 2016, 08:47:30 PM
arg, pas sommeil avec ces bêtises !  ;D

reste plus qu'à attendre les prochains abonnements pour voir si le formulaire paypal fonctionne bien (les infos sont bien transmises)

je m'atèle à l'insertion dans la notification au service adhésion
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 27, 2016, 09:35:34 PM
je m'atèle à l'insertion dans la notification au service adhésion
buen, j'ai réussi à rajouter des "Global Pre-Set" dans manage.template.editor que j'ai associé dans la fonction de remplacement de subscriptions.php ... ne pouvant tester l'email de bonne souscription, j'ai fait la même pour la notification de relance ... et ça fonctionne. Y'a plus qu'à croiser les doigts et une bonne nuit bien méritée !
je tiens au jus.

Merci encore.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 27, 2016, 09:49:51 PM
Bonsoir,

Nouvelle Fonction :

Insomnie();

:) :) :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 07:06:36 AM
bonjour/bonsoir, je sais plus lol

nouvel adhérent pendant que je ronquais ... la modif faite dans subscriptions.php n'a pas fonctionné.
L'abonnement a bien été pris en compte mais l'email n'est pas parti :(
Arg, c'était trop beau ! Je viens de voir que j'avais oublié de rajouter global $context dans la fonction ???

voici ce que j'ai maintenant dans subscriptions.php :
Code: [Select]
// Send a receipt?
if (!empty($modSettings['paid_email']) && $modSettings['paid_email'] == 2 && $notify)
{
global $context;

# récupération des champs perso
loadMyCustomFields($memID, $area = 'summary');

$replacements = array(
'NAME' => $subscription_info['name'],
'SUBNAME' => $member_info['member_name'],
'SUBUSER' => $member_info['real_name'],
'SUBEMAIL' => $member_info['email_address'],
'PRICE' => sprintf($modSettings['paid_currency_symbol'], $total_cost),
'PROFILELINK' => $scripturl . '?action=profile;u=' . $member_id,
'DATE' => timeformat(time(), false),
'CUST_PRENOM' => $context['mycustom_fields'][7]['value'],
'CUST_NOM' => $context['mycustom_fields'][8]['value'],
'CUST_ETB' => $context['mycustom_fields'][6]['value'],
'CUST_RUE' => $context['mycustom_fields'][4]['value'],
'CUST_CP' => $context['mycustom_fields'][2]['value'],
'CUST_VILLE' => $context['mycustom_fields'][9]['value'],
'CUST_TEL' => $context['mycustom_fields'][5]['value']
);

emailAdmins('paid_subscription_new', $replacements, $notify_users);
}

avec dans EmailTemplateEditor.php
Code: [Select]
// Global Pre-Set Variables...
$context['email_templates']['preset_variables']['global'] = array(
'forumname' => '{FORUMNAME}',
'scripturl' => '{SCRIPTURL}',
'themeurl' => '{THEMEURL}',
'imagesurl' => '{IMAGESURL}',
'default_themeurl' => '{DEFAULT_THEMEURL}',
'regards' => '{REGARDS}',
'custprenom' => '{CUST_PRENOM}',
'custnom' => '{CUST_NOM}',
'custetb' => '{CUST_ETB}',
'custrue' => '{CUST_RUE}',
'custcp' => '{CUST_CP}',
'custville' => '{CUST_VILLE}',
'custtel' => '{CUST_TEL}'
);

J'attends une nouvelle adhésion pour voir si ça marche ???
Merci :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 09:56:08 AM
je fais part de l'avancée :

après entretien avec Paypal :
comme nous sommes dans le cas d'un abonnement,
il n'y a pas de gestion d'adresse de livraison,
c'est pourquoi nous ne retrouvons pas ces informations dans l'administration paypal.

J'ai donc créé un bouton "acheter" que j'ai intégré à la place de "s'abonner",
à partir de là les coordonnées apparaissent bien chez paypal et la notification de paiement que reçoit le "client".
Sauf que lors du retour sur le forum, l'abonnement n'est pas pris en compte ! >:(
Je n'arrive pas à afficher les informations envoyées par paypal sur le forum pour éventuellement les mettre en force dans le script ...
(ce sont les champs a3, t3, p3 qui définissent une transaction de type "abonnement" ).

Pour ce qui est de la facturation via l'admin de Paypal, elle ne vaut que si on envoie une demande de paiement via l'admin de paypal.

Donc soit :

sinon l'ajout des champs personnalisés dans la notification de "nouvelle souscription" ne fonctionne pas :(
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 28, 2016, 10:17:25 AM
Bonjour,

Code: [Select]
sinon l'ajout des champs personnalisés dans la notification de "nouvelle souscription" ne fonctionne pas :(
Donc les variables ne passent pas dans le formulaire c'est cela ?

Je vois que c'est du SSI si c'est le cas je ferai un test SSI car la fonction s'opère autrement via le SSI elle doit y être intégrée directement via l'appel SSI bien entendu car c'est externe à Smf.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 10:25:04 AM
Bonjour,

ah okay merci.

j'ai mal à la tête là ;D
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 28, 2016, 01:31:48 PM
Bonsoir,

Bon on progresse effectivement ce foutu fichier est en mode SSI.

Donc tu vas ajouter avant la fin du fichier SSI.php la fonction SSI suivante :

Code: [Select]
// Load mycustom fields for this area => 'summary' loads all public ones.
function ssi_loadMyCustomFields($area = 'summary')
{
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl;


// Did we get the user by name...
if (isset($_REQUEST['user']))
$memberResult = loadMemberData($_REQUEST['user'], true, 'profile');
// ... or by id_member?
elseif (!empty($_REQUEST['u']))
$memberResult = loadMemberData((int) $_REQUEST['u'], false, 'profile');
// If it was just ?action=profile, edit your own profile.
else
$memberResult = loadMemberData($user_info['id'], false, 'profile');

// Check if loadMemberData() has returned a valid result.
if (!is_array($memberResult))
fatal_lang_error('not_a_user', false);

// If all went well, we have a valid member ID!
list ($memID) = $memberResult;
$context['id_member'] = $memID;
$cur_profile = $user_profile[$memID];

// Get the right restrictions in place...
$where = 'active = 1';

// Load all the relevant fields - and data.
$request = $smcFunc['db_query']('', '
SELECT
col_name, field_name, field_desc, field_type, field_length, field_options,
default_value, bbc, enclose, placement
FROM {db_prefix}custom_fields
WHERE ' . $where,
array(
'area' => $area,
)
);

$context['custom_myprofile_fields'] = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$curField = 'cust_' . $row['col_name'];

// Collect the column info and some extra.
$context['custom_myprofile_fields']['columns'][$curField] = array(
'label' => $row['field_name'],
'type' => $row['field_type'],
'bbc' => !empty($row['bbc']),
);

// Build up sort queries.
if ($row['field_type'] != 'check')
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 'LENGTH(t' . $curField . '.value) > 0 ASC, IFNULL(t' . $curField . '.value, 1=1) DESC, t' . $curField . '.value DESC',
'up' => 'LENGTH(t' . $curField . '.value) > 0 DESC, IFNULL(t' . $curField . '.value, 1=1) ASC, t' . $curField . '.value ASC'
);
else
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 't' . $curField . '.value DESC',
'up' => 't' . $curField . '.value ASC'
);


if (isset($_REQUEST['sort']) && $_REQUEST['sort'] == $curField)
{
$context['custom_myprofile_fields']['join'] = 'LEFT JOIN {db_prefix}themes AS t' . $curField . ' ON (t' . $curField . '.variable = {string:t' . $curField . '} AND t' . $curField . '.id_theme = 1 AND t' . $curField . '.id_member = mem.id_member)';
$context['custom_myprofile_fields']['parameters']['t' . $curField] = $row['col_name'];
}


// Shortcut.
$exists = $memID && isset($user_profile[$memID], $user_profile[$memID]['options'][$row['col_name']]);
$value = $exists ? $user_profile[$memID]['options'][$row['col_name']] : '';

// If this was submitted already then make the value the posted version.
if (isset($_POST['customfield']) && isset($_POST['customfield'][$row['col_name']]))
{
$value = $smcFunc['htmlspecialchars']($_POST['customfield'][$row['col_name']]);
if (in_array($row['field_type'], array('select', 'radio')))
$value = ($options = explode(',', $row['field_options'])) && isset($options[$value]) ? $options[$value] : '';
}

// HTML for the input form.
$output_html = $value;
if ($row['field_type'] == 'check')
{
$true = (!$exists && $row['default_value']) || $value;
$input_html = '<input type="checkbox" name="customfield[' . $row['col_name'] . ']" ' . ($true ? 'checked="checked"' : '') . ' class="input_check" />';
$output_html = $true ? $txt['yes'] : $txt['no'];
}
elseif ($row['field_type'] == 'select')
{
$input_html = '<select name="customfield[' . $row['col_name'] . ']"><option value="-1"></option>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<option value="' . $k . '"' . ($true ? ' selected="selected"' : '') . '>' . $v . '</option>';
if ($true)
$output_html = $v;
}

$input_html .= '</select>';
}
elseif ($row['field_type'] == 'radio')
{
$input_html = '<fieldset>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<label for="customfield_' . $row['col_name'] . '_' . $k . '"><input type="radio" name="customfield[' . $row['col_name'] . ']" class="input_radio" id="customfield_' . $row['col_name'] . '_' . $k . '" value="' . $k . '" ' . ($true ? 'checked="checked"' : '') . '>' . $v . '</label><br />';
if ($true)
$output_html = $v;
}
$input_html .= '</fieldset>';
}
elseif ($row['field_type'] == 'text')
{
$input_html = '<input type="text" name="customfield[' . $row['col_name'] . ']" ' . ($row['field_length'] != 0 ? 'maxlength="' . $row['field_length'] . '"' : '') . ' size="' . ($row['field_length'] == 0 || $row['field_length'] >= 50 ? 50 : ($row['field_length'] > 30 ? 30 : ($row['field_length'] > 10 ? 20 : 10))) . '" value="' . $value . '" class="input_text" />';
}
else
{
@list ($rows, $cols) = @explode(',', $row['default_value']);
$input_html = '<textarea name="customfield[' . $row['col_name'] . ']" ' . (!empty($rows) ? 'rows="' . $rows . '"' : '') . ' ' . (!empty($cols) ? 'cols="' . $cols . '"' : '') . '>' . $value . '</textarea>';
}

// Parse BBCode
if ($row['bbc'])
$output_html = parse_bbc($output_html);
elseif($row['field_type'] == 'textarea')
// Allow for newlines at least
$output_html = strtr($output_html, array("\n" => '<br />'));

// Enclosing the user input within some other text?
if (!empty($row['enclose']) && !empty($output_html))
$output_html = strtr($row['enclose'], array(
'{SCRIPTURL}' => $scripturl,
'{IMAGES_URL}' => $settings['images_url'],
'{DEFAULT_IMAGES_URL}' => $settings['default_images_url'],
'{INPUT}' => $output_html,
));

$context['mycustom_fields'][] = array(
'name' => $row['field_name'],
'desc' => $row['field_desc'],
'type' => $row['field_type'],
'input_html' => $input_html,
'output_html' => $output_html,
'placement' => $row['placement'],
'colname' => $row['col_name'],
'value' => $value,
);
}
$smcFunc['db_free_result']($request);
}

Dans ce même fichier au début tu cherches :

Code: [Select]
require_once($sourcedir . '/Security.php');
et tu ajoutes après ceci :

Code: [Select]
require_once($sourcedir . '/Profile-Modify.php');
Puis tu vas créer un fichier test.php  que tu exécuteras à la racine du site avec ceci de cette façon tu auras les éléments pour faire ton appel de fonction car attention différente de l'appel de fonction globale de Smf.

Code: [Select]
<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');


header'content-type: text/html; charset=utf-8' );


// Exemple de l'appel de Fonction à mettre dans Subscriptions


global $db_connection$modSettings$context$sc$user_info$topic$board$txt;

ssi_loadMyCustomFields();

echo
'<br/><br/>';

// print_r($context);

echo'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][0]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][0]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][0]['value'];

echo
'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][1]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][1]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][1]['value'];

echo
'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][2]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][2]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][2]['value'];


echo
'<br/><br/>';
echo
'<br/><br/>';

?>



Voilà fais le test avec le fichier test dis moi si tout est bon et seulement après tu feras les modifs dans le fichier adéquat.

Attention à la fonction insomnie();

:)


Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 04:21:17 PM
bonsoir,

ok merci ! Le fichier test fonctionne.

j'ai malheureusement un souci d'encodage d'url de retour qui est apparu (j'ai dû faire quelque chose quelque part mais où ?? )
Me rappel un pb d'accent dans le titre de l'abonnement, en passant le charset à UTF-8 ça a réglé ce pb mais engendré celui de l'url ???

   forum/index.php?action=profile%3bu%3d13293%3barea%3dsubscriptions%3bsub_id%3d3%3bdone
au lieu de
   forum/index.php?action=profile;u=13293;area=subscriptions;sub_id=3;done

il est pourtant bien indiqué dans le formulaire paypal que le charset est UTF-8
Code: [Select]
<input type="hidden" id="paypal_charset" name="charset" value="UTF-8" />
et un test sur les variables $gateway['hidden']
Code: [Select]
echo $name." : ".mb_detect_encoding($value)."<br/>\n";me renvoie ASCII, donc pas de souci normalement ?

donc comme l'email de retour est faux, ça n'envoie pas l'email dans lequel j'ai rajouté les champs persos ! arg !

je creuse
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 28, 2016, 05:33:55 PM
Bonsoir,

J'avais vu quelque part que tu avais modifié l'encodage mais je ne me rappelle plus ou.

Tu as cela avec tout les liens du forum ?

Quand tu fais le test avec le fichier ssi tes accentués sont corrects ?

Car je sais que certains on déjà eu des problèmes à ce niveau.

Retour ascii pour ton encodage url si ton forum est uft8 tu devrais être utf8 pour tout ?

Ps : manque un morceau de mon message >>

Sinon tu peux forcer le ré-encodage de ton url :

Code: [Select]
$str = utf8_encode($str);
:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 06:57:26 PM
quand je teste avec le fichier test.php tout est ok.

J'ai trouvé où j'avais rajouté le charset (en fait par défaut le module n'en met pas)
dans Subscriptions-Paypal.php / function fetchGatewayFields
du coup je me retrouve avec un nom d'abonnement bizarroïde et une url inexacte :(
ça me saoule !

Code: [Select]
// All the standard bits.
$return_data['hidden']['business'] = $modSettings['paypal_email'];
$return_data['hidden']['item_name'] = $sub_data['name'] . ' ' . $txt['subscription'];
$return_data['hidden']['item_number'] = $unique_id;
$return_data['hidden']['currency_code'] = strtoupper($modSettings['paid_currency_code']);
$return_data['hidden']['no_shipping'] = 1;
$return_data['hidden']['no_note'] = 1;
$return_data['hidden']['amount'] = $value;
$return_data['hidden']['cmd'] = !$sub_data['repeatable'] ? '_xclick' : '_xclick-subscriptions';
$return_data['hidden']['return'] = $return_url;
$return_data['hidden']['a3'] = $value;
$return_data['hidden']['src'] = 1;
$return_data['hidden']['notify_url'] = $boardurl . '/subscriptions.php';
// $return_data['hidden']['charset'] = 'UTF-8';


d'ailleurs c'est plutôt dans ce fichier que j'ai rajouté les champs perso pour qu'ils complètent le formulaire paypal.
Code: [Select]
if ($context['user']['is_logged'])
{
# champs persos
loadMyCustomFields($memID, $area = 'summary');
$return_data['hidden']['first_name'] = $context['mycustom_fields'][7]['value'];
$return_data['hidden']['last_name'] = $context['mycustom_fields'][8]['value'];
$return_data['hidden']['address1'] = $context['mycustom_fields'][4]['value'];
$return_data['hidden']['city'] = $context['mycustom_fields'][9]['value'];
$return_data['hidden']['zip'] = $context['mycustom_fields'][2]['value'];
$return_data['hidden']['night_phone_b'] = $context['mycustom_fields'][5]['value'];
$return_data['hidden']['email'] = $context['user']['email'];
}

j'ai pu copier le formulaire de retour avant d'être redirigé, là le charset était Windows-1252, va savoir ...
Quand l'état annonce la subvention d'un clavier avec des accents, on rigole ! ;D

Malgré des tests avec la sandbox, je ne reçois plus de notification "nouvelle souscription"
faut que je dorme
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 07:06:38 PM
Sinon tu peux forcer le ré-encodage de ton url :
Code: [Select]
$str = utf8_encode($str);
ça me sort ça pour le nom d'abonnement "test d'adhésion fédé" au lieu de "test d'adhésion fédé" avec ta ligne
pour l'url, il n'y a pas de différence, elle a l'air bien
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 28, 2016, 07:15:11 PM
Bonsoir,

Avec les retours d'encodage donc c'est correct en charset :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 28, 2016, 07:27:39 PM
Bonsoir,

je viens de faire un nouvel essai pour de vrai avec un abonnement à 1€
(je pensais qu'en le faisant sur un forum miroir + en mode bac à sable ça pourrait être la cause)

nom de l'abonnement avec accent : OK,
champs perso : OK,
paiement : OK,
url de retour : PAS OK

en parallèle dans ton fichier test qui est devenu :
Code: [Select]
<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');
require_once(
$sourcedir '/Subs-Admin.php');


header'content-type: text/html; charset=utf-8' );


// Exemple de l'appel de Fonction à mettre dans Subscriptions


global $db_connection$modSettings$context$sc$user_info$topic$board$txt;

ssi_loadMyCustomFields();
$notify_users = array('email'=>'mon@email.com','name'=>'DanielSan','id'=>0);

$replacements = array(
'NAME' => "rahan",
'SUBNAME' => "raoul c'est cool",
'SUBUSER' => "daniel",
'SUBEMAIL' => "mon@email.com",
'PRICE' => sprintf('&euro;''69'),
'PROFILELINK' => 'lien_profil',
'DATE' => 'demain',

//modifs
'CUST_PRENOM' => $context['mycustom_fields'][7]['value'],
'CUST_NOM' => $context['mycustom_fields'][8]['value'],
'CUST_ETB' => $context['mycustom_fields'][6]['value'],
'CUST_RUE' => $context['mycustom_fields'][4]['value'],
'CUST_CP' => $context['mycustom_fields'][2]['value'],
'CUST_VILLE' => $context['mycustom_fields'][9]['value'],
'CUST_TEL' => $context['mycustom_fields'][5]['value']
);

emailAdmins('paid_subscription_new'$replacements$notify_users);
?>

ça m'a bien envoyé un email avec les champs persos !
donc j'imagine que tout est bon dans le cochon code, et qu'il me reste à régler ce pb d'encodage d'url de retour
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 28, 2016, 08:18:26 PM
Bonsoir,

C'est Paypal qui te renvoi le mail ou c'est une notification Smf ?

:)



Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 03:34:54 AM
Hello,

c'est une fois de retour sur le forum que les notifications sont envoyées :
une à l'adhérent et l'autre au service adhésion (celui avec les champs perso).
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 29, 2016, 06:24:52 AM
Bonjour,

Donc l'adresse Email incorrecte vient de Paypal ?

Aucun des deux mails n'est envoyé ?

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 06:42:06 AM
Bonjour,

Ce n'est pas l'adresse email mais l'url de retour qui merde.
Donc le visiteur n'arrive pas au bon endroit, donc les notifications envoyées par le forum ne se font pas.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 29, 2016, 09:39:20 AM
Bonsoir,

Dans ton log Smf tu as un report erreur ?

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 12:16:12 PM
Dans ton log Smf tu as un report erreur ?
disons que ce mois-ci j'en quelques unes ... ;D
Toutes les erreurs (162534) | Critiques (14) | Générale (95) | Modèles (7) | Éléments indéfinis (162371) | Utilisateurs (47)
faudrait peut-être que je m'y penche à ces trucs ...

sinon j'ai contacté le support technique de paypal,
il manquait le paramètre "rm" dans le formulaire
Allowable values are:
0 – all shopping cart payments use the GET method
1 – the buyer's browser is redirected to the return URL by using the GET method, but no payment variables are included
2 – the buyer's browser is redirected to the return URL by using the POST method, and all payment variables are included

j'ai bien entendu essayé les 3, mais en vain.
Je vais télécharger une version propre de SMF, mettre les fichiers là où il faut et on verra bien ...
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 12:28:24 PM
si j'installe une version propre de SMF avec ma bdd SQL actuelle, ça ferait quoi ?
car avec toutes ces modifs, peut plus installer de mod ;D

Maintenant que j'ai mis les mains dans le cambouis, si c'était à refaire je m'y prendrais pas pareil
notamment pour les modifs de template : j'ai modifié des fichiers du thème par défaut alors que j'aurai dû le dupliquer dans mon propre thème ...
et pour les fichiers du dossier source, s'il y a une méthode pour ne pas faire de connerie ...

qu'en penses-tu ?
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 12:32:12 PM
ah je viens de m'apercevoir d'un truc plutôt cool,
je ne sais pas comment, mais si je rembourse un abonnement via l'admin de paypal,
je reçois une notif du forum :o
va savoir !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 29, 2016, 01:17:54 PM
Bonsoir,

Si tu installes Smf en propre et que tu remets ta bdd tu auras juste ce qui est accessible par smf. Donc Mods et Thèmes à 0.

Moi quand je fais des modifications je fais toujours un backup du forum pour garder celui de base et quand je modifie les fichiers je les numérotes et je renvois le numéro vers la modification apportée ainsi j'ai l'historique des modifications.

Pour faire de grosses modif je les fais directement sur des fichiers propres de Smf pas de duplication on risque des erreurs car on est en dehors du thème par défaut de Smf.
 
Pour les fichiers Sources identiques numérotations et historique des modifs donc chaque modifications se trouvent dans un fichier qui correspond au numéro de modification se trouvant dans les fichiers.

Oui là la façon de travailler de chacun diffère surtout que moi je programme à la volée lol alors si un autre passe après pas la peine il ne s'y retrouvera pas ... :) :)

Tiens oui hors sujet => je ne me rappelle pas avoir mis des accentués sur les majuscules quand j'allais à l'école donc ce fameux clavier prôné et repensé par le ministère pour moi ils peuvent se le mettre ou je pense  :laugh:

Bon en ce qui concerne PayPal même là j'ai difficile de t'aider car j'utilise pas ce genre de chose pour le reste pas de soucis même si tu me fais perdre un de mes deux derniers cheveux.... ;D ;D



Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 03:06:46 PM
ok je n'ai pas tout très bien compris à ta méthode mais j'te crois ! ;D
vu que niveau thème il est maintenant assez stable, je pense que je vais repartir d'un truc propre est le faire bien.
Après je verrais pour le dossier "source" ...
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 29, 2016, 06:32:08 PM
niveau procédure, me conseilles-tu
ou
?

pour rappel le forum à 7 ans et a eu plusieurs mises à jour, dont la dernière avec le large upgrade et repair_settings
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 29, 2016, 09:07:06 PM
Bonsoir,

Quand on garde une base correcte on remet simplement les fichiers du large upgrade sans les fichiers sql.

On remet le pack de langue adéquat.

Puis on remet les mods à l'identique et seulement après on remet son thème personnalisé configuré.

Donc simple à faire.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 30, 2016, 05:15:29 AM
Bonjour,
pour être sûr d'avoir bien compris, désolé de te solliciter mais là faut pas que je me rate lol

l'intérêt de vouloir tout supprimer est que j'ai des dossiers dont je ne sais pas à quoi ils correspondent
Code: [Select]
<?php
if (file_exists(dirname(dirname(__FILE__)) . '/index.php'))
include (dirname(dirname(__FILE__)) . '/index.php');
else
exit;

ça sent le printemps ;D
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 30, 2016, 08:19:27 AM
Bonjour,

Somme toute c'est le large upgrade sans lancer l'upgrade :)

Les fichiers index de la sorte c'est normal c'est une sécurité.

Les fichiers Tp c'est pour un portail le TinyPortal.

Les dossiers mgal cela va avec le mod aeva ne pas les supprimer.

Dossier SmfHack cela vient de mods et il y en a quelques uns qui l'utilise.

:)



Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 30, 2016, 09:24:50 AM
ok merci pour ces précisions.
je n'ai pas tinyPortal mais simplePortal > dossiers tp supprimés
je n'ai plus aeva (on ne l'a jamais utilisé, pas de trace dans le forum) > mgal supprimé (il n'y avait rien dedans)

du coup j'ai tout réinstallé sur un hébergement à part, ça va ça plante pas, pour le moment :D

j'ai retenté la souscription à un abonnement, toujours le pb d'encodage d'url :(
J'ai tenté avec le forum en français et en anglais.
là je comprends pas.
Soit ça vient de la bdd, soit d'un paramétrage chez paypal.

Je réinstalle un nouveau forum, avec une nouvelle bdd et on verra bien. :o
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 30, 2016, 10:24:42 AM
dernier résultat de test de la journée, par ce que là j'en ai marre !

installe fraîche + nouvelle bdd + aucun mod + aucun thème
toujours l'erreur de l'URL de retour :(

j'ai tenté (on ne sait jamais) d'ajouter au fichier Subscriptions-PayPal.php :
Code: [Select]
<?php
$return_data['hidden']['return'] = utf8_encode($return_url);
$return_data['hidden']['charset'] = 'utf-8';
$return_data['hidden']['lc'] = 'FR';
$return_data['hidden']['rm'] = 1;
?>

donc à priori pas d'erreur de la part de SMF.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 30, 2016, 11:56:33 AM
Bonjour,

Voici le problème :

Encodage des point-virgule.

Fichier Sources/Profile-Actions.php

Chercher :

Code: [Select]
$fields = $gateways[$id]->fetchGatewayFields($context['sub']['id'] . '+' . $memID, $context['sub'], $context['value'], $period, $scripturl . '?action=profile;u=' . $memID . ';area=subscriptions;sub_id=' . $context['sub']['id'] . ';done');

Remplacer par :

Code: [Select]
$fields = $gateways[$id]->fetchGatewayFields($context['sub']['id'] . '+' . $memID, $context['sub'], $context['value'], $period, $scripturl . '?action=profile&u=' . $memID . '&area=subscriptions&sub_id=' . $context['sub']['id'] . '&done');

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 30, 2016, 06:30:29 PM
Code: [Select]
Paiement Effectué
Merci pour votre paiement. Une fois que la transaction aura été vérifiée, la souscription sera activée.
oh yeah merci ! pas bête l'astuce ;D ça avance bien !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 30, 2016, 06:42:13 PM
Bonsoir,

Je pense que le principal est résolu  8)

Reste juste quelques détails à voir peut-être.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 30, 2016, 07:05:11 PM
bonsoir

carrément !
avant les admins recevaient une notification (celle dans laquelle je voulais insérer les champs perso)
je vais mater la bdd pour voir s'il n'y a pas un paramètre bizarre (comme les relance) qui fait qu'elles ne partent plus.
Pourtant avant chaque essai je me supprime de la liste ...
mais là déjà c'est bien, l'adhérent est informé de la bonne souscription, le reste est le pb de l'admin, pas le sien ;)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 30, 2016, 08:59:38 PM
Bonsoir,

Ok tiens moi au courant pour la suite.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 04:24:23 AM
Bonjour,

oh yeah ! J'ai enfin reçu une notification de paypal et du forum !

Il faut savoir qu'en utilisant le mode "test" (sandbox de paypal), le statut du paiement est en attente
[payment_status] => Pending au lieu de [payment_status] => Completed
ça change la donne ;D

D'autre part,
comme SMF utilise la method GET et POST, le champ "rm" doit-être sur 2
(par défaut il est à 0 s'il n'est pas renseigné, ce que fais SMF :o bizarre)
Donc dans le fichier Subscription-PayPal.php / function fetchGatewayFields(), j'ai rajouté
Code: [Select]
# V1.0
$return_data['hidden']['return'] = utf8_encode($return_url);
$return_data['hidden']['charset'] = 'utf-8';
$return_data['hidden']['lc'] = 'FR';

# rm
# 0 – all shopping cart payments use the GET method - default
# 1 – the buyer's browser is redirected to the return URL by using the GET method, but no payment variables are included
# 2 – the buyer's browser is redirected to the return URL by using the POST method, and all payment variables are included
$return_data['hidden']['rm'] = 2;

Je m'atèle à l'ajout des champs perso maintenant

@+
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 05:00:01 AM
Bonjour,

Ok logiquement cela ne doit pas poser problème.

Pour les retours "rm" il y a déjà eu des fluctuations de variable côté PayPal donc à chacun un peu de voir ce qu'il veut faire.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 06:21:09 AM
Re,

alors ça avance.

L'ajout des champs perso dans le template d'email fonctionne :
*/ installation du mod' "Email Template Editor"
*/ ajout dans le fichier "EmailTemplateEditor.php", après "// Global Pre-Set Variables...",
dans le tableau $context['email_templates']['preset_variables']['global']
Code: [Select]
#V1 : ajout champs personnalisés
'custprenom' => '{CUST_PRENOM}',
'custnom' => '{CUST_NOM}',
'custetb' => '{CUST_ETB}',
'custrue' => '{CUST_RUE}',
'custcp' => '{CUST_CP}',
'custville' => '{CUST_VILLE}',
'custtel' => '{CUST_TEL}',

*/ puis création d'un email personnalisé "Paid Subscription New" (envoyé à l'admin)
Code: [Select]
{REALNAME},

{SUBNAME} ({SUBUSER}) a adhéré à {FORUMNAME}.
Voici les détails de cet abonnement :

Nom de l'abonnement : {NAME}
Nom de l'utilisateur : {SUBNAME} ({SUBUSER})
Son adresse e-mail : {SUBEMAIL}
Prix : {PRICE}
Date : {DATE}

Coordonnées
Prénom : {CUST_PRENOM}
Nom : {CUST_NOM}
Établissement : {CUST_ETB}
Rue : {CUST_RUE}
Code postal : {CUST_CP}
Ville : {CUST_VILLE}
Téléphone : {CUST_TEL}

Vous pouvez afficher le profil de cet utilisateur via le lien ci-dessous :
{PROFILELINK}

{REGARDS}

sauf que c'est la modification dans subscriptions.php qui ne fonctionne pas ;D
après
Code: [Select]
// Send a receipt?
if (!empty($modSettings['paid_email']) && $modSettings['paid_email'] == 2 && $notify)
{

Code: [Select]
# récupération des champs perso
// global $context;
// loadMyCustomFields($memID, $area = 'summary'); // dans le fichier /Sources/Load.php
// ssi_loadMyCustomFields($area = 'summary'); // dans le fichiers /SSI.php
j'ai essayé les 2 appels de fonctions, l'une après l'autre, en vain.
Alors qu'elles fonctionnent dans un fichier test.php comme sus-conseillé.

et dans le tableau $replacements, ajout de
Quote
#ajout champs persos dans notification admin
'CUST_PRENOM'   => $context['mycustom_fields'][1]['value'],
'CUST_NOM'         => $context['mycustom_fields'][0]['value'],
'CUST_ETB'         => $context['mycustom_fields'][7]['value'],
'CUST_RUE'         => $context['mycustom_fields'][2]['value'],
'CUST_CP'         => $context['mycustom_fields'][4]['value'],
'CUST_VILLE'      => $context['mycustom_fields'][5]['value'],
'CUST_TEL'         => $context['mycustom_fields'][6]['value'],
j'ai remplacé $context['mycustom_fields'][2]['value'] par "2 rue de ma ville" et ça fonctionne.
Donc c'est $context['mycustom_fields'] qui pose problème ...

on va y arriver ! Merci de ton aide !
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 06:28:55 AM
Bonjour,

Seulement une seule déclaration de fonction.

Tu as bien ajouté la déclaration d'appel du fichier sans le ssi require profile-modify ?

Ton global n'est pas complet.

Le fichier test fonctionne bien ?

La fonction ssi doit-être seule : ssi_loadMyCustomFields();

 :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 06:37:17 AM
en effet lorsque je suis retourné dans le fichier SSI.php, j'ai vu mon oublie
voici donc l'extrait de code, ma seule modif' dans ce fichier subscriptions.php
Code: [Select]
<?php
// Send a receipt?
if (!empty($modSettings['paid_email']) && $modSettings['paid_email'] == && $notify)
{
# récupération des champs perso
global $db_connection$modSettings$context$sc$user_info$topic$board$txt;
ssi_loadMyCustomFields();

$replacements = array(
'NAME' => $subscription_info['name'],
'SUBNAME' => $member_info['member_name'],
'SUBUSER' => $member_info['real_name'],
'SUBEMAIL' => $member_info['email_address'],
'PRICE' => sprintf($modSettings['paid_currency_symbol'], $total_cost),
'PROFILELINK' => $scripturl '?action=profile;u=' $member_id,
'DATE' => timeformat(time(), false),

#ajout champs persos dans notification admin
'CUST_PRENOM' => $context['mycustom_fields'][1]['value'],
'CUST_NOM' => $context['mycustom_fields'][0]['value'],
'CUST_ETB' => $context['mycustom_fields'][7]['value'],
// 'CUST_RUE' => "2 rue de ma ville",
'CUST_RUE' => $context['mycustom_fields'][2]['value'],
'CUST_CP' => $context['mycustom_fields'][4]['value'],
'CUST_VILLE' => $context['mycustom_fields'][5]['value'],
'CUST_TEL' => $context['mycustom_fields'][6]['value'],
);

emailAdmins('paid_subscription_new'$replacements$notify_users);
}
?>

Je ne comprends pas
Tu as bien ajouté la déclaration d'appel du fichier sans le ssi require profile-modify ?

oui le fichier test.php parfaitement
Code: [Select]
<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');


header'content-type: text/html; charset=utf-8' );


// Exemple de l'appel de Fonction à mettre dans Subscriptions


global $db_connection$modSettings$context$sc$user_info$topic$board$txt;

ssi_loadMyCustomFields();

// echo "<pre>";
// print_r($context['mycustom_fields']);
// echo "</pre>";

for($i=0;$i<sizeof($context['mycustom_fields']);$i++){
echo $context['mycustom_fields'][$i]['name']." : ".$context['mycustom_fields'][$i]['value']."<br/>\n";
}

?>
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 06:46:07 AM
Bonjour,

Cela à l'air correct réessaye et dis moi si les variables passent :)

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 06:55:23 AM
l'email n'est même pas envoyé :(
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 07:06:17 AM
Bonjour,

Regarde dans ton log smf le retour erreur le cas échéant. Donc vide ton log Smf avant le test.

:)
Tu retires la fonction et tu fais un test simple. donc tu mets des slash devant tout ce qui doit-être retiré.

Pour faire un test ajoute au début de ton fichier donc après loadLanguage('ManagePaid');
 fais une déclaration de variable par ex : $test_rue ='ma rue'; et tu mes la variable dans un champ de récupération de ton mail pour savoir si la variable passe

Si cela passe on va faire juste une petite modif.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 07:16:49 AM
http://mon-site.com/smf_fresh/index.php?action=profile;u=1;area=subscriptions;confirm
8: Undefined variable: memberContext
Fichier: /home/bdd_name/www/smf_fresh/Sources/Load.php
Ligne: 2828
fonction loadMyCustomFields
Code: [Select]
// Let's have some information about this member ready, too.
loadMemberContext($memID);
$context['member'] = $memberContext[$memID];


http://mon-site.com/smf_fresh/index.php?action=profile;u=1;area=subscriptions;confirm
8: Undefined variable: memID
Fichier: /home/bdd_name/www/smf_fresh/Sources/Subscriptions-PayPal.php
Ligne: 87
Code: [Select]
if ($context['user']['is_logged']){
loadMyCustomFields($memID, $area = 'summary');
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 07:25:39 AM
Bonjour,

Tu as mis la fonction dans load et ssi ? elle est dupliquée... celle du load tu retires car tu utilises celle du ssi.

Tu as bien mis require Profile-Modify dans le fichier SSI après require Security ?

Fais le test indiqué au dessus :)

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 08:10:23 AM
Bonjour,

Bon là je dois m'absenter un moment le plus important est le test avec une variable comme indiqué le reste ne sera pas compliqué.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 08:19:00 AM
en effet j'avais 2 fonctions, mais avec des noms différents,
m'enfin l'appel de ssi_loadMyCustomFields() via le fichier Subscriptions-PayPal.php me provoque une page blanche, sans log SMF

j'ai bien
Code: [Select]
require_once($sourcedir . '/Security.php');
require_once($sourcedir . '/Profile-Modify.php');

ok moi aussi vais prendre l'air, @tout et bonne aprem'
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 10:28:17 AM
Bonjour,

Fais le test de variable :

Tu retires la fonction dans le fichier subscriptions et tu fais un test simple.

Pour faire un test ajoute au début de ton fichier donc après loadLanguage('ManagePaid'); une déclaration de variable par ex : $test_rue ='ma rue'; et tu mets la variable dans un champ de récupération de ton mail pour savoir si la variable passe

Par exemple : 'CUST_RUE'      => $test_rue,

Si cela passe on va faire juste une petite modif.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 03:24:28 PM
Bonsoir,

dans Subscriptions-PayPal.php,
en utilisant seulement la fonction ssi_loadMyCustomFields(); avec
Code: [Select]
global $db_connection, $modSettings, $context, $sc, $user_info, $topic, $board, $txt;j'ai une page blanche et aucune erreur dans le log SMF

si par contre j'utilise la fonction
Code: [Select]
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl;
loadMyCustomFields($memID, $area = 'summary'); // fichier /Sources/Load.php
là la page d'abonnement s'affiche bien avec le formulaire en entier

sauf que ça génère 2 erreurs :

en ajoutant $memID avant l'appel de la fonction dans Subscriptions-PayPal.php
Code: [Select]
$memID = $context['user']['id'];
loadMyCustomFields($memID, $area = 'summary'); // fichier /Sources/Load.php

ça génère une seule erreur :
si je rajoute $memberContext dans la liste des global de la fonction loadMyCustomFields() de Load.php
je n'ai plus d'erreur dans le log SMF.

je fais donc un essai d'abonnement ... ET TU SAIS QUOI ?
Ma carte bancaire est bloquée !
J'peux plus faire d'essai ! ;D >:( :( ;D ;D ;D

raz le bol de cette histoire lol
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 04:06:04 PM
Bonsoir,

Quelle idée tu as peut-être une limite de transaction par jour quelque soit le montant.

Moi le test que j'aurais voulu que tu fasses est celui de la variable comme indiqué dans les postes précédent le reste ce n'est pas grave juste un détail à ajuster. Le plus important est de savoir si la variable passe comme demandé.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 04:27:49 PM
vivi, la variable été bien placée, c'est juste que j'avais une page blanche avec les fonctions.
demain je fais un test et j'irai auquel cas à la banque ...
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on January 31, 2016, 04:53:26 PM
Bonsoir,

Ok mais juste un test avec la variable au début du fichier subscriptions et rien d'autre pour savoir si tu la récupères bien dans le mail.

Après on verra la suite.

En attendant repose toi ce sera une bonne chose moi j'ai pas le choix lol :)

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on January 31, 2016, 05:20:36 PM
le mail n'est envoyé que lorsque le paiement est validé ;)
repos forcé ;)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 10:44:35 AM
Bonjour,

ça y est, pb de cb résolu ;D
j'ai pu faire un test, qui fonctionne, notification envoyée à l'admin et la variable indiquée est bien insérée !

pour rappel, en début de fichier subscriptions.php
Code: [Select]
loadLanguage('ManagePaid');
$test_rue ='ma rue';

et dans la portion de code liée à l'envoi de l'email (après // Send a receipt? ),
sans la fonction ssi_loadMyCustomFields() ni loadMyCustomFields
Quote
$replacements = array(
[...]
'CUST_RUE'      => $test_rue,);

 :D
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 11:10:32 AM
Bonjour,

Alors ok c'est simple tu inserts la fonction ou tu as mis la variable.

Code: [Select]
loadLanguage('ManagePaid');

global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl, $memberContext ;
ssi_loadMyCustomFields($memID, $area = 'summary');

Tu déclares des variables pour le $context donc on aura

Code: [Select]
$rue = $context['mycustom_fields'][1]['value'];
$rue = trim($rue);

donc reste plus qu'a mettre :

Code: [Select]
'cust_rue' => $rue,
Voilà tu testes le minimum pour voir si c'est bon et si c'est ok tu fais le même pour le reste.

Dis moi ce qu'il en est :)

Vérifie que le fichier test fonctionne correctement.

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 11:34:15 AM
Bonjour,

en faisant ce que tu m'as dit, le statut du paiement est "en attente", donc pas d'email envoyé.
(j'ai refait le test précédent pour être sûr)

$memID est-il déclaré en amont ?

voici ce que j'ai en début de fichier subscriptions.php
Code: [Select]
// Start things rolling by getting SMF alive...
$ssi_guest_access = true;
if (!file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(dirname(__FILE__) . '/SSI.php');
require_once($sourcedir . '/ManagePaid.php');

// For any admin emailing.
require_once($sourcedir . '/Subs-Admin.php');

loadLanguage('ManagePaid');
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 12:30:03 PM
avec

Code: [Select]
# récupérationd des champs perso pour insértion dans notification admin
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl, $memberContext ;
$memID = $context['user']['id'];
ssi_loadMyCustomFields($memID, $area = 'summary'); // fichier /SSI.php
c'est pareil
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 12:50:28 PM
Bonsoir,

Quand tu exécutes le fichier subscritions directement tu dois avoir le même que ton fichier test avec un arrêt sur données d'entrée.

Donc à tester avec un echo sur une variable.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 01:03:54 PM
Code: [Select]
loadLanguage('ManagePaid');
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl, $memberContext ;
ssi_loadMyCustomFields($memID, $area = 'summary');

en fait c'est ssi_loadMyCustomFields(); plutôt ;D
et oui si je fais
Code: [Select]
for($i=0;$i<sizeof($context['mycustom_fields']);$i++){
echo $context['mycustom_fields'][$i]['name']." : ".$context['mycustom_fields'][$i]['value']."<br/>\n";
}
ça affiche bien les variables.

Je pense qu'il doit se passer quelque chose car chaque fois le statut du paiement se met en attente au lieu de confirmé.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 01:18:34 PM
Bonsoir,

Encore un truc de dingue lol :)

Bon ne bloque pas ta carte inutilement un peu de patience je regarde une autre piste en output direct pour voir ce qu'il en est un peu de patience :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 01:57:50 PM
Bonsoir,

Bon tu retires tout ce qui est fonction etc .....On fait tout simple

Voila tu mets cela dans ton fichier test pour voir comment cela fonctionne.

Code: [Select]
   $request = $smcFunc['db_query']('', 'SELECT col_name, field_name, bbc, enclose FROM {db_prefix}custom_fields', array() );
   $custom_fields = array();
   while ($row = $smcFunc['db_fetch_assoc']($request))
   {
      $custom_fields[] = array(
         'colname' => $row['col_name'],
         'title' => $row['field_name'],
         'bbc' => $row['bbc'],
         'enclose' => $row['enclose'],
      );
   }
   foreach ($custom_fields as $cf)
   {
      $value = $options[$cf['colname']];

      $memberContext[$user_info['id']]['cfs'][] = array(
         'title' => $cf['title'],
         'colname' => $cf['colname'],
         'value' => $value,
      );
   }
   $custom_fields = $memberContext[$user_info['id']]['cfs'];


// variable directe


echo  $memberContext[$user_info['id']]['cfs'][1]['title'];

echo ' : ';

echo  $memberContext[$user_info['id']]['cfs'][1]['value'];


Puis tu intègres cela directement dans ta fonction d'envoi de mail le code complet et bien sur l'adaptation des variables.

Tu testes et tu me dis si cela est bon :)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 02:20:03 PM
Bonsoir,

Cela te donne ceci pour ta suscriptions.php


Code: [Select]
// Send a receipt?
if (!empty($modSettings['paid_email']) && $modSettings['paid_email'] == 2 && $notify)
{


$request = $smcFunc['db_query']('', 'SELECT col_name, field_name, bbc, enclose FROM {db_prefix}custom_fields', array() );
$custom_fields = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$custom_fields[] = array(
'colname' => $row['col_name'],
'title' => $row['field_name'],
'bbc' => $row['bbc'],
'enclose' => $row['enclose'],
);
}
foreach ($custom_fields as $cf)
{
$value = $options[$cf['colname']];

$memberContext[$user_info['id']]['cfs'][] = array(
'title' => $cf['title'],
'colname' => $cf['colname'],
'value' => $value,
);
}
   $custom_fields = $memberContext[$user_info['id']]['cfs'];

$replacements = array(
'NAME' => $subscription_info['name'],
'SUBNAME' => $member_info['member_name'],
'SUBUSER' => $member_info['real_name'],
'SUBEMAIL' => $member_info['email_address'],
'PRICE' => sprintf($modSettings['paid_currency_symbol'], $total_cost),
'PROFILELINK' => $scripturl . '?action=profile;u=' . $member_id,
'DATE' => timeformat(time(), false),
'CUST_PRENOM' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_NOM' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_ETB' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_RUE' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_CP' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_VILLE' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_TEL' => $memberContext[$user_info['id']]['cfs'][1]['value'],
);

emailAdmins('paid_subscription_new', $replacements, $notify_users);
}

Cela et rien d'autre.

Avec le fichier test tu fais un print_r pour avoir les bonnes valeurs de retour de ton tableau.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 03:16:19 PM
Bonsoir,

alors le paiement est bien confirmé, l'email bien envoyé mais pourtant les champs sont vides :(

Pourtant en insérant ce code en haut du fichier subscriptions.php,
en affichant direct les variables, ça marche.



Lorsqu'en haut je les associe
Code: [Select]
$prenom = $memberContext[$user_info['id']]['cfs'][1]['value'];
puis en bas
Code: [Select]
'CUST_PRENOM' => $memberContext[$user_info['id']]['cfs'][1]['value'],c'est vide >:D
c'est à n'y rien comprendre ! Et à perdre le peu de cheveux qu'il nous reste O0



Du coup j'ai fait un autre test, dans la fonction d'envoi d'email :
Code: [Select]
$replacements = array(
'NAME' => $subscription_info['name'],
'SUBNAME' => $member_info['member_name'],
'SUBUSER' => $member_info['real_name'],
'SUBEMAIL' => $member_info['email_address'],
'PRICE' => sprintf($modSettings['paid_currency_symbol'], $total_cost),
'PROFILELINK' => $scripturl . '?action=profile;u=' . $member_id,
'DATE' => timeformat(time(), false),
'CUST_PRENOM' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_NOM' => $memberContext[$user_info['id']]['cfs'][0]['value'],
'CUST_ETB' => trim($memberContext[$user_info['id']]['cfs'][7]['value']),
'CUST_RUE' => $memberContext[$user_info['id']]['cfs'][2]['value'],
// 'CUST_CP' => $memberContext[$user_info['id']]['cfs'][4]['value'],
'CUST_CP' => "test de code postal",
'CUST_VILLE' => $memberContext[$user_info['id']]['cfs'][5]['value'],
'CUST_TEL' => $memberContext[$user_info['id']]['cfs'][6]['value'],
);


et l'email reçu :
Quote
Coordonnées
Prénom :
Nom :
Établissement :
Rue :
Code postal : test de code postal
Ville :
Téléphone

honnêtement je suis perdu, y'a un loup quelque part ...
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 03:21:52 PM
Bonsoir,

En haut ?

Tu as bien mis le code comme indiqué dans // Send a receipt? ?

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 03:26:29 PM
ouiii j'ai fait tout comme tu m'as dit.
Sauf que comme ça ne marchait pas, j'ai tenté autre chose ;D
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 03:36:18 PM
Bonsoir,

Bon là on a fait le tour tu pourrais faire un dernier test si tu peux sans bloquer ta carte. C'est de mettre la variable sur un champs qui est prédéfini pas un que tu as défini. ok ?Dis moi si tu sais encore le faire car après selon le résultat je vais m'attaquer à la fonction mail.

Donc sur name => $memberContext[$user_info['id']]['cfs'][0]['value'],  tout ce qui est cust tu retires pas de // devant retirer :)

Ok reste la fonction mail alors qui déconne je vais isoler la fonction mail qui se trouve elle dans subs-admin et faire une page test ssi avec cette fonction pour voir si le mail part avec les infos ou pas.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 03:48:35 PM
Bonsoir,

ok merci.
j'ai fait ton test, email bien reçu mais le champ {name} est vide.

T'inquiète pas pour ma carte, j'ai trouvé un n° SOS carte bloquée 24H/24 7J/7 O:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 03:58:18 PM
Bonsoir,

Ok donc un truc de fou la variable ne veut pas passer mais elle est là.  :o

Bon je vais voir si l'email fonctionne en faisant passer les variables je vais donc faire un fichier test.

Je te tiens au courant là il me faut un peu de temps pour analyser tout cela.

Donc demain soir je pense sauf si un flash faisait son apparition lol :)

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 04:04:29 PM
ok, je te remercies
bizarre cette fonction mail.
bonne soirée, @demain
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 07:04:42 PM
Bonsoir,

Moi ici les mails sont ok.

As tu bien fait la déclaration de tes variables dans le fichier EmailTempate.french.php ou EmailTempate.french-utf8.php  tu dois avoir un truc de ce genre pour que cela s'affiche sinon les champs sont vides.

Code: [Select]
'paid_subscription_new' => array(
/*
@additional_params: paid_subscription_new
NAME: Subscription title.
REALNAME: Recipients name
SUBEMAIL: Email address of the user who took out the subscription
SUBUSER: Username who took out the subscription.
SUBNAME: User's display name who took out the subscription.
DATE: Today's date.
PROFILELINK: Link to members profile.
@description:
*/
'subject' => 'Nouvelle souscription',
'body' => '{REALNAME},

Un membre s\'est abonn&#233; &#224; votre forum. Voici les d&#233;tails de cet abonnement :

Nom de l\'abonnement : {NAME}
Nom de l\'utilisateur : {SUBNAME} ({SUBUSER})
Son adresse e-mail : {SUBEMAIL}
Prix : {PRICE}
Date : {DATE}
Commune : {CUST_VILLE}
Rue : {CUST_RUE}
Code Postal : {CUST_CP}

Vous pouvez afficher le profil de cet utilisateur via le lien ci-dessous :
{PROFILELINK}

{REGARDS}',
),

Moi j'ai ajouté 3 champs pour tester vérifie bien cela.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 07:52:35 PM
Bonsoir,

j'utilise le mod EmailTemplateEditor.

Je viens de faire un essai comme toi, c'est vide.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 08:00:09 PM
Bonsoir,

Je me demande si c'est pas ton mod Template editor qui met le souk.

Moi ici tout fonctionne pour tester en mode mail ceci :


Code: [Select]
<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');
require_once(
$sourcedir '/Subs-Admin.php');


header'content-type: text/html; charset=utf-8' );





//   require_once('SSI.php'); si pas déclaré

   
$request $smcFunc['db_query']('''SELECT col_name, field_name, bbc, enclose FROM {db_prefix}custom_fields', array() );
   
$custom_fields = array();
   while (
$row $smcFunc['db_fetch_assoc']($request))
   {
      
$custom_fields[] = array(
         
'colname' => $row['col_name'],
         
'title' => $row['field_name'],
         
'bbc' => $row['bbc'],
         
'enclose' => $row['enclose'],
      );
   }
   foreach (
$custom_fields as $cf)
   {
      
$value $options[$cf['colname']];

      
$memberContext[$user_info['id']]['cfs'][] = array(
         
'title' => $cf['title'],
         
'colname' => $cf['colname'],
         
'value' => $value,
      );
   }
   
$custom_fields $memberContext[$user_info['id']]['cfs'];


// variable directe


echo  $memberContext[$user_info['id']]['cfs'][1]['title'];

echo 
' : ';

echo  
$memberContext[$user_info['id']]['cfs'][1]['value'];


$replacements = array(
'NAME' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'SUBNAME' => "raoul c'est cool",
'SUBUSER' => "daniel",
'SUBEMAIL' => "mon@email.com",
'PRICE' => sprintf('&euro;''69'),
'PROFILELINK' => 'lien_profil',
'DATE' => 'demain',

'CUST_PRENOM' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_NOM' => $memberContext[$user_info['id']]['cfs'][2]['value'],
'CUST_ETB' => $memberContext[$user_info['id']]['cfs'][0]['value'],
'CUST_RUE' => $memberContext[$user_info['id']]['cfs'][1]['value'],
'CUST_CP' => $memberContext[$user_info['id']]['cfs'][2]['value'],
'CUST_VILLE' => $memberContext[$user_info['id']]['cfs'][0]['value'],
'CUST_TEL' => $memberContext[$user_info['id']]['cfs'][1]['value'],
);

emailAdmins('paid_subscription_new'$replacements$notify_users);

echo 
'Mail Envoyé';

?>



Fichier Mail_test.php et tu testes à la racine sur un site ou tu es le seul membre lol
:)


Voici le mail que je reçois :

maximus23,

Un membre s'est abonné à votre forum. Voici les détails de cet abonnement :

   Nom de l'abonnement : Administrateur
   Nom de l'utilisateur : raoul sans printf c'est cool (daniel)
   Son adresse e-mail : mon@email.com
   Prix : &euro;
   Date : demain
   Commune : Mons
   Rue : Ferrer 35
   Code Postal : 7000

Vous pouvez afficher le profil de cet utilisateur via le lien ci-dessous :
lien_profil

Cordialement,
L'équipe Test Smf

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 08:09:16 PM
ce fichier test fonctionne.

J'ai cru un moment que c'était par ce que ces champs n'étaient visibles que par l'admin et l'utilisateur ...
en faisant la modif' rien n'a changé

je viens de désinstallé le mod' EmailTemplateEditor, et souscrit un nouvel abonnement, les champs sont vides

en PJ mon fichier subscriptions.php
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 08:16:21 PM
Bonsoir,

Ton fichier attaché est bon.

Si ton fichier EmailTemplate est correct et que ton fichier mail test t'envoie bien l'email cela doit fonctionner ....:)

:)

Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 08:24:06 PM
c'est ça que je ne comprends pas.
je suis sur une install' fraîche de SMF, seul utilisateur, pas de mod', pas de template, juste le paquet french-utf8
sur le forum la seule chose qui a changé sont les champs perso et l'abonnement.

en pj mon fichier EmailTemplate
le fichier test_email.php fonctionne bien, j'ai l'affichage
Quote
Prénom : DanielMail Envoyé
et l'email est bien reçu.
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 01, 2016, 08:42:56 PM
Bonsoir,

Non ton fichier est correct du moins avec les trois champs à afficher.

De plus si tu reçois un mail test correct tout doit passer.

Là je ne vois pas comment tester autrement tout y est passé lol :)

On verra demain je regarderai un peu dans tout le forum si je trouve quelque chose.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 01, 2016, 08:47:49 PM
okay merci pour tout
bonne nuit
function insomnie(off); >:D
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 02, 2016, 05:44:00 AM
Bonjour,

je refais l'ensemble de la procédure sur un forum miroir,
le résultat est toujours le même :-[
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 02, 2016, 06:05:45 AM
Bonjour,

Pour le moment à cours d'idée je donne ma langue au chat  ;D

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 02, 2016, 06:33:07 AM
tu m'étonnes :D
trop bizarre tout ça.

je suis en train de faire une fonction totalement à part.
Je te tiens au jus.
Merci pour tout
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 02, 2016, 06:38:28 AM
Bonjour,

On pourrait ajouter un
Code: [Select]
global $memberContext; des deux côtés pour globaliser les variables.

Donc un avant :

Code: [Select]
$request = $smcFunc['db_query']('', 'SELECT col_name, field_name, bbc, enclose FROM {db_prefix}custom_fields', array() );
Dans le fichier suscriptions.

et en mettre un dans le fichier Subs-Admin

Code: [Select]
function emailAdmins($template, $replacements = array(), $additional_recipients = array())
{
global $smcFunc, $sourcedir, $language, $modSettings;


à ajouter à la fin du global déjà défini.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 02, 2016, 07:18:42 AM
toujours rien >:D

et si on appelait test_mail.php dans subscriptions.php ?
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 02, 2016, 07:32:57 AM
Bonjour,

Oui tu peux définir une fonction d'appel dans le fichier mail test qui s'exécuterait avant la fonction email normale.

Cela ne coute rien d'essayer.

:)
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: DanielSan34 on February 02, 2016, 08:46:53 AM
arg, l'abonnement passe bien, l'email est bien envoyé ... mais vide

J'ai pourtant utilisé en plus une class PHP d'envoi d'email ( class.phpmailer.php - qui fonctionne, testé/approuvé à maintes reprises sur différents sites),
je ne passe donc pas par celle de SMF, c'est comme si tout se vidait avant l'envoi ...

là ça m'ennuie énormément car si tout se vide, je ne peux rien faire.
Je dois envoyer une facture à l'adhésion,
la génération de la facture PDF fonctionne,
l'attachement en pièce jointe fonctionne,
l'envoi de l'ensemble fonctionne.

Mais dès que je l'insère dans subscriptions.php ça ne fonctionne plus ppffff
Title: Re: taille d'un champ d'enregistrement dans abonnement payant
Post by: maximus23 on February 02, 2016, 09:12:02 AM
Bonjour,

C'est certainement une connerie qui emmerde le monde donc laisse moi voire un peu côté anglais si on trouve quelque chose :)

:)