Aviso de Caixa de PMs cheia ou quase cheia

Started by margarett, June 15, 2007, 05:28:24 AM

Previous topic - Next topic

margarett

Boas.

Já todos devem ter reparado, se tentarem enviar uma MP a um membro que tem a caixa de PMs cheia, vocês recebem um erro, mas o dito membro não tem qualquer aviso. Claro que deve ser cada membro a zelar pela disponibilidade da própria caixa, mas também sabemos que isso não acontece...

Portanto, e por necessidade própria, criei uma espécie de MOD (que nem sequer vou enviar para análise como MOD porque não tenho tempo - e não sei o suficiente :D - para criar um pacote como manda o figurino), que cria um aviso no topo da página, sempre que o membro tiver menos de 2 mensagens "livres" na sua caixa, e outro aviso quando a caixa estiver esgotada. Admins, visitantes e membros com PMs desabilitadas não vêm nada.

Este problema foi lançado no quadro do "Coding" mas nunca tive qualquer resposta:
http://www.simplemachines.org/community/index.php?topic=171608.0

Acabei por martelar um bocado e descobrir por mim. Fica aqui a alteração "manual".

Abrir o index.template.php do vosso tema.

Encontrar:

/* Show sticky and lock status seperate from topic icons? Leave true, icons don't exist for false.*/
$settings['seperate_sticky_lock'] = true;
}


Adicionar depois:
function PMIndex()
{
global $txt, $scripturl, $sourcedir, $context, $user_info, $user_settings, $db_prefix, $ID_MEMBER;


// Load up the members maximum message capacity.
if (!$user_info['is_admin'])
{
// !!! Why do we do this?  It seems like if they have any limit we should use it.
$request = db_query("
SELECT MAX(maxMessages) AS topLimit, MIN(maxMessages) AS bottomLimit
FROM {$db_prefix}membergroups
WHERE ID_GROUP IN (" . implode(', ', $user_info['groups']) . ')', __FILE__, __LINE__);
list ($maxMessage, $minMessage) = mysql_fetch_row($request);
mysql_free_result($request);

$context['message_limit'] = $minMessage == 0 ? 0 : $maxMessage;
}
else
$context['message_limit'] = 0;
}


Encontrar:
<body>';

Adicionar depois:

PMIndex();

if ($context['user']['is_logged'] && $context['allow_pm'] && $context['message_limit'] > 0)
{
$aux_calc = $context['message_limit'] - $context['user']['messages'];
if (($aux_calc <= 2) && ($aux_calc != 0))
echo' <div align="center"; style="font-size: 20pt; color: #ffffff">LIMITE DA CAIXA DE MENSAGENS QUASE A SER ATINGIDO</div>';
elseif ($aux_calc == 0 )
echo' <div align="center"; style="font-size: 20pt; color: #ffffff">LIMITE DA CAIXA DE MENSAGENS ATINGIDO. NÃO VAI RECEBER MAIS MPs!!!!</div>';

}


Neste ultimo "bocado de código" podem alterar as definições do aviso. Tamanho da letra, cor da letra e claro, o texto do aviso.

No meu fórum, o resultado foi este:
Com a caixa tendo apenas 1 ou 2 mensagens disponíveis:

Com a caixa esgotada aparece isto:



Foi testado em FF e IE6, mas deve trabalhar em qualquer browser.

Enjoy ;)
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

O Cobra

Bravo amigo, realmente é um belo trabalho que nos apresenta aqui, que de certeza vem ajudar e muito alguns amigos

Tjda


N3lson

#3
Muitos parabéns ... boa ideia...

Com uma pequena alteração poderia-se colocar um pouco de grafismos tipo colocar uma barra de progresso a avisar, por baixo dos posts não lidos...

-------



I´m Portuguese Yeah

uni

Nice work mate, isto ainda pode vir a dar jeito!

Meira

No meu index, só aparece isso:

"/* Show sticky and lock status seperate from topic icons? */
   $settings['seperate_sticky_lock'] = true;"


Se eu colocar esses códigos ai, funcionará?

Abs!
Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Basicamente, o que se pretende é criar essa função "PMIndex()" a seguir à função "function template_init()"

Ou seja, procuras:
function template_init()
{

E depois tens de encontrar a "chaveta" - } - correspondente do final dessa função.

Se tiveres dificuldades, podes adicionar antes de:

// The main sub template above the content.
function template_main_above()
{
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Meira

Mais quais dos códigos da primeira mensagem devo adicionar antes do código que citara na mensagem acima?
Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Deves executar TODOS os procedimentos da primeira mensagem. Mas, em vez de encontrares:
/* Show sticky and lock status seperate from topic icons? Leave true, icons don't exist for false.*/
$settings['seperate_sticky_lock'] = true;
}

E adicionares a seguir o código indicado,
Encontras:
// The main sub template above the content.
function template_main_above()
{

E adicionas antes esse dito código
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Meira

Ai como ficou no meu arquivo, do ultimo código ao primeiro:


Quote<body>';
PMIndex();

if ($context['user']['is_logged'] && $context['allow_pm'] && $context['message_limit'] > 0)
{
   $aux_calc = $context['message_limit'] - $context['user']['messages'];
   if (($aux_calc <= 2) && ($aux_calc != 0))
      echo' <div align="center"; style="font-size: 20pt; color: #ffffff">LIMITE DA CAIXA DE MENSAGENS QUASE A SER ATINGIDO</div>';
   elseif ($aux_calc == 0 )
      echo' <div align="center"; style="font-size: 20pt; color: #ffffff">LIMITE DA CAIXA DE MENSAGENS ATINGIDO. NÃO VAI RECEBER MAIS MPs!!!!</div>';

}


Quotefunction PMIndex()
{
   global $txt, $scripturl, $sourcedir, $context, $user_info, $user_settings, $db_prefix, $ID_MEMBER;


   // Load up the members maximum message capacity.
   if (!$user_info['is_admin'])
   {
      // !!! Why do we do this?  It seems like if they have any limit we should use it.
      $request = db_query("
         SELECT MAX(maxMessages) AS topLimit, MIN(maxMessages) AS bottomLimit
         FROM {$db_prefix}membergroups
         WHERE ID_GROUP IN (" . implode(', ', $user_info['groups']) . ')', __FILE__, __LINE__);
      list ($maxMessage, $minMessage) = mysql_fetch_row($request);
      mysql_free_result($request);

      $context['message_limit'] = $minMessage == 0 ? 0 : $maxMessage;
   }
   else
      $context['message_limit'] = 0;
}

// The main sub template above the content.
function template_main_above()

Eu mudei a ordem para facilitar a postagem pra mim, tá certo ai o processo?

Obrigado, Margarret.
Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Meira

Margarett, como faço pra testar esse aviso na caixa de mensagens pessoais para ver se está funcionando tudo certo?

Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Crias um user de testes com um limite de mensagens qualquer, e envias do teu user "normal" um monte de MP's :P
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Meira

Criei e fiz o teste colocando com limite de max. de mensagens pessoais "3" e enviei 5, recebeu-as e não houve nenhuma mensagem. Porque será?

Fiz isso em permissões por grupos, tá certo?
Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Tá certo sim.

Agora, se entrares com esse user de teste, ele deve ver o aviso lá em cima. Se não vir, algo não está bem...
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Meira

Pois é, entrei com o tester e não apareceu.
Estou mandando o meu arquivo com a modificação para aparecer a mensagem e verifique pra mim qual é o erro, por favor.

Obrigado.
Fórum PC Gamers venha fazer parte.
(Come to do part.)

margarett

Parece estar bem.

Envia mais mensagens do teu user para esse "teste", até receberes o erro de caixa cheia. Depois de a caixa estar cheia, entra com o "teste" e verifica.
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

segrob

#17
boas margarett !
este teu tópico a muito interecence e estou com esse problema das mensagens !
fiz como tens no manual !
mas meti o maximo de mansagens 10 e o membro continua a receber as mensagens e a e ja tem 18 na caixa e consegues lelas todos!

segrob

#18
deixo aqui como eu meti no meu que ficou mais visivel

http://img49.imageshack.us/img49/3610/screenshotde3.jpg



Encontar
   // Show a random news item? (or you could pick one from news_lines...)
   if (!empty($settings['enable_news']))
      echo '

                  <td class="smalltext" style="vertical-align:middle;padding-left:10px; padding-top:0px; padding-bottom:0px;">
                     <strong>', $txt[102], '</strong>: ', $context['random_news_line'], '
                  </td>';
   echo '
                  <td class="smalltext" style="vertical-align:middle;text-align:right;padding-right:10px; padding-top:0px; padding-bottom:0px;font-weight:bold">
                        ' , $context['current_time'], '
                  </td>
               </tr>
            </table>
         </div>';



Adicionar depois
PMIndex();

if ($context['user']['is_logged'] && $context['allow_pm'] && $context['message_limit'] > 0)
{
$aux_calc = $context['message_limit'] - $context['user']['messages'];
if (($aux_calc <= 2) && ($aux_calc != 0))
echo' <div align="center"; style="font-size: 14pt; color: #8B0000"> Faça uma limpeza á sua caixa de mensagens porque já se encontra no limite   </div>';
elseif ($aux_calc == 0 )
echo' <div align="center"; style="font-size: 13pt; color: #8B0000">VÓCE NÃO VAI RECEBER MAIS PMS SEU LIMITE DA CAIXA DE MENSAGENS ESTÁ ATINGIDO.</div>';

}

margarett

E o problema anterior, já solucionaste?

PS: bom trabalho ;) é bom ver que o pessoal não se limita a copiar.
Se forem conduzir, não bebam. Se forem beber... CHAMEM-ME!!!! :D

QuoteOver 90% of all computer problems can be traced back to the interface between the keyboard and the chair

Advertisement: