Si può impedire ad un utente di scegliere un avatar già utilizzato da qualcun altro, per evitare doppioni? Nel mio forum vedo che questa scelta si può fare anche se l'avatar è utilizzato già da qualcun altro... ???
Non esiste alcun modo (di default).
Se dai la possibilità di caricarli o di usare url esterne è sostanzialmente impossibile.
Se permetti solo avatar dalle gallerie si potrebbe fare qualcosa.
Sì in effetti mi interessa solo dalla galleria; cosa si può?
Ehhh...mah...potrebbe essere facile.
In Profile-Modify.php, cerca:
if ($value == 'none')
{
appena prima aggiungi:
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars['avatar']) != 0 && preg_match('/\.\./', $profile_vars['avatar']) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars['avatar']) ? ($profile_vars['avatar'] == 'blank.gif' ? '' : $profile_vars['avatar']) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT COUNT(*)
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
if ($smcFunc['db_num_rows']($avatar_request) != 0)
fatal_lang_error('attachments_duplicate', 'critical');
}
Quindi in Errors.english.php aggiungi:
$txt['attachments_duplicate'] = 'Sorry, you cannot select this avatar because someone else is already using it.';
e relativa traduzione in Errors.italian.php e/o Errors.italian-utf8.php.
Codice non provato, quindi potrebbe anche non funzionare...
Perfetto :D come sempre. funziona! Grazie!
Scusa Emanuele ma non funziona più. quando cambio la scelta dell'avatar mi da sempre "si è verificatouner...." anche se l'avatr non è in uso da nessuno. Tra l'altro ho notato che non trovo più i file Errors.english.php Errors.italian.php e Errors.italian-utf8.php.ma in che cartella sono, in /httpdocs/forum/Sources giusto?
Non è che sti problemi son dovuti a qualche mod che ho installato ultimam. (ho installato Ad Managment, Advanced Contact Form e Copyright and Footer Links)? ::)
Il messaggio d'errore completo sarebbe forse più utile. ;)
Quando tu cambi il tuo avatar ti da l'errore?
Nel log degli errori c'è per caso una descrizione più completa dell'errore stesso?
I file di lingua sono in Themes/default/languages.
Il log errori dà:
Tipo di errore: Critico
Applica filtro: Mostra solo i messaggi di errore di questo URL
http://psicologaonlinesalerno.it/forum/index.php?action=profile;area=forumprofile;u=1;save
Applica filtro: Mostra solo gli errori con lo stesso messaggio
Spiacenti, ma l'avatar scelto è utilizzato da un altro utente
il messaggio che esce (quando tento di cambiare avatar qualsiasi) è:
Si è verificato un errore!
Spiacenti, ma l'avatar scelto è utilizzato da un altro utente(la mia traduzione).
Ed invece quell'avatar non è in uso?
Sicuro?
Prova con:
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars['avatar']) != 0 && preg_match('/\.\./', $profile_vars['avatar']) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars['avatar']) ? ($profile_vars['avatar'] == 'blank.gif' ? '' : $profile_vars['avatar']) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
if ($smcFunc['db_num_rows']($avatar_request) != 0)
{
list($user_avat) = $smcFunc['db_fetch_row']($avatar_request);
if (allowedTo('admin_forum'))
fatal_lang_error('attachments_duplicate_admin', 'critical', array($user_avat));
fatal_lang_error('attachments_duplicate', 'critical');
}
}
ed aggiungi a Error.english:
$txt['attachments_duplicate'] = 'Sorry, you cannot select this avatar because is already in use by %1$s.';
Dovrebbe dirti chi sta usando l'avatar...spero (se sei admin).
Purtroppo non va, ho seguito alla lettera: ho sosituito i codici che mi hai dato ora con quelli della risposta precedente a questa che mi hai inviato.
esce: si è verificato un errore e non appare più "Spiacenti, ma l'avatar scelto è utilizzato da un altro utente"(la mia traduzione). appare campo vuoto e un link "indietro" :'(
Sorry, sbagliato una riga... :-[
$txt['attachments_duplicate'] = 'Sorry, you cannot select this avatar because is already in use by %1$s.';
Cambiala in:
$txt['attachments_duplicate_admin'] = 'Sorry, you cannot select this avatar because is already in use by %1$s.';
Se traduci questa stringa, ricordati di mettere il %1$s, è importante. ;)
Ma lascia anche il precedente:
$txt['attachments_duplicate'] = 'Sorry, you cannot select this avatar because someone else is already using it.';
Scusami di nuovo ma mi dà lo stesso errore e mi dice in uso da utente 1 che sarei io admin (Sorry, you cannot select this avatar because is already in use by 1.). Se invece mi loggo con un fake 8) mi ridà lo stesso errore di prima "Spiacenti, ma l'avatar scelto è utilizzato da un altro utente". Però se da admin carico una mia immagine me la fa mettere...
AHHHH....ops...ovviamente tu stai cambiando qualcosa nel tuo profilo ed ogni volta che salvi quello di dice picche...
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars['avatar']) != 0 && preg_match('/\.\./', $profile_vars['avatar']) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars['avatar']) ? ($profile_vars['avatar'] == 'blank.gif' ? '' : $profile_vars['avatar']) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
list($user_avat) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);
if ($smcFunc['db_num_rows']($avatar_request) != 0 && $user_avat != $memID)
fatal_lang_error('attachments_duplicate', 'critical');
}
Niente da fare..non riesco a capire forse sbaglio qualcosa, adesso mi ritrovo questo in profile.modify:
}
}
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars['avatar']) != 0 && preg_match('/\.\./', $profile_vars['avatar']) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars['avatar']) ? ($profile_vars['avatar'] == 'blank.gif' ? '' : $profile_vars['avatar']) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
list($user_avat) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);
if ($smcFunc['db_num_rows']($avatar_request) != 0 && $user_avat != $memID)
fatal_lang_error('attachments_duplicate', 'critical');
}
if ($value == 'none')
{
e in error.english questo:
<?php
// Version: 2.0; Errors
global $scripturl, $modSettings;
$txt['attachments_duplicate'] = 'Sorry, you cannot select this avatar because someone else is already using it.';
$txt['attachments_duplicate_admin'] = 'Sorry, you cannot select this avatar because is already in use by %1$s.';
$txt['no_access'] = 'You are not allowed to access this section';
cosa non va?
P.s. questa volta il messaggio di errore è Spiacenti, ma l'avatar scelto è utilizzato da un altro utente.( la mia traduzione)
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars_avatar) != 0 && preg_match('/\.\./', $profile_vars_avatar) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars_avatar) ? ($profile_vars_avatar == 'blank.gif' ? '' : $profile_vars_avatar) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
list($user_avat) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);
if ($smcFunc['db_num_rows']($avatar_request) != 0 && $user_avat != $memID)
fatal_lang_error('attachments_duplicate', 'critical');
}
Testato in un posto, suggerito di usarlo in un altro... ::)
Sorry.
Ok funziona grazie!
ehm...no, non funziona...c'è ancora un errore (scusa, ma tra il fuoco di fila di cose che devo fare sto lasciando scadere il supporto...)
elseif ($value == 'server_stored' && allowedTo('profile_server_avatar'))
{
$profile_vars_avatar = strtr(empty($_POST['file']) ? (empty($_POST['cat']) ? '' : $_POST['cat']) : $_POST['file'], array('&' => '&'));
$profile_vars_avatar = preg_match('~^([\w _!@%*=\-#()\[\]&.,]+/)?[\w _!@%*=\-#()\[\]&.,]+$~', $profile_vars_avatar) != 0 && preg_match('/\.\./', $profile_vars_avatar) == 0 && file_exists($modSettings['avatar_directory'] . '/' . $profile_vars_avatar) ? ($profile_vars_avatar == 'blank.gif' ? '' : $profile_vars_avatar) : '';
$avatar_request = $smcFunc['db_query']('', '
SELECT id_member
FROM {db_prefix}members
WHERE avatar = {string:avatar_name}',
array(
'avatar_name' => $profile_vars_avatar,
)
);
list($user_avat) = $smcFunc['db_fetch_row']($avatar_request);
if ($smcFunc['db_num_rows']($avatar_request) != 0 && $user_avat != $memID)
fatal_lang_error('attachments_duplicate', 'critical');
$smcFunc['db_free_result']($avatar_request);
}