Conflicto al adaptar Activity Bar a PersonalMessage.template

Started by FirstName LastName, March 15, 2016, 04:10:07 PM

Previous topic - Next topic

FirstName LastName

Buenas tardes. Como bien mencionaba en el título, se me está complicando adaptar el Activity Bar a PersonalMessage.template (busco integrarlo, digamos, como si fuera en el display mostrado en los mensajes privados).

Lo adapté al Display.template usando la variable $message, y a Profile.template usando $context. Pero en PersonalMessage.template no sabría cómo, ya que intentando con ambas variables, en el lugar donde se deben usar, probando con un var_dump() arriba del primer if, todas dan como resultado null, y por ende no puedo ver la barra de ninguna manera. Quisiera saber qué debería modificar, agregar o quitar para adaptarlo ahí también.

/* Activity Bar Mod */
if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($message['Activity_Bar']))
echo '
<li class="activity_li">', !empty($modSettings['Activity_Bar_label']) , '
<div class="activity_holder" style="width: ', !empty($modSettings['Activity_Bar_max_width']) ? $modSettings['Activity_Bar_max_width'] : 139, 'px;">
<div class="activity_bar" style="width: ', $message['Activity_Bar']['width'], 'px;">
<div class="activity_percentage">', $message['Activity_Bar']['percentage'], '%
</div></div></div></li>';

FirstName LastName

Acabo de hacer un var_dump($message); en PersonalMessage.template y no me devuelve lo mismo que si lo hago en Display.template, allá obtengo la información del Activity Bar (usando por ejemplo $message['Activity_Bar']), pero en el template de los mensajes ni figura eso, ¿cómo puedo hacer para también hacerlo en PM.template y también obtener ahí la información?

FirstName LastName

Si alguien sabe algo sobre esto le agradeceré mucho que deje una respuesta, gracias. :laugh:

Suki

Tienes que aplicar lo mismo que se hace En Sources/Display:

'Activity_Bar' => Activity_Bar($message['id_member']),


En el query que se usa para obtener los mensajes personales, fíjate cómo se hace en Display.php y adaptalo PersonalMessages.php::prepareMessageContext()
Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

FirstName LastName

Quote from: Suki on March 17, 2016, 10:51:54 AM
Tienes que aplicar lo mismo que se hace En Sources/Display:

'Activity_Bar' => Activity_Bar($message['id_member']),


En el query que se usa para obtener los mensajes personales, fíjate cómo se hace en Display.php y adaptalo PersonalMessages.php::prepareMessageContext()

Gracias por comentar, Suki.

Encontré la función y comparé ambos archivos, efectivamente no tenía nada en PersonalMessages.php, por lo que procedí a usar el mismo formato, solo que utilizando al variable $subject, que según vi debería ser la adecuada.

function prepareMessageContext($type = 'subject', $reset = false)
{
global $txt, $scripturl, $modSettings, $context, $messages_request, $memberContext, $recipients, $smcFunc;
global $user_info, $subjects_request;

// Count the current message number....
static $counter = null;
if ($counter === null || $reset)
$counter = $context['start'];

static $temp_pm_selected = null;
if ($temp_pm_selected === null)
{
$temp_pm_selected = isset($_SESSION['pm_selected']) ? $_SESSION['pm_selected'] : array();
$_SESSION['pm_selected'] = array();
}

// If we're in non-boring view do something exciting!
if ($context['display_mode'] != 0 && $subjects_request && $type == 'subject')
{
$subject = $smcFunc['db_fetch_assoc']($subjects_request);
if (!$subject)
{
$smcFunc['db_free_result']($subjects_request);
return false;
}

$subject['subject'] = $subject['subject'] == '' ? $txt['no_subject'] : $subject['subject'];
censorText($subject['subject']);

$output = array(
'id' => $subject['id_pm'],
'member' => array(
'id' => $subject['id_member_from'],
'name' => $subject['from_name'],
'link' => $subject['not_guest'] ? '<a href="' . $scripturl . '?action=profile;u=' . $subject['id_member_from'] . '">' . $subject['from_name'] . '</a>' : $subject['from_name'],
),
'recipients' => &$recipients[$subject['id_pm']],
'subject' => $subject['subject'],
'time' => timeformat($subject['msgtime']),
'timestamp' => forum_time(true, $subject['msgtime']),
'number_recipients' => count($recipients[$subject['id_pm']]['to']),
'labels' => &$context['message_labels'][$subject['id_pm']],
'fully_labeled' => count($context['message_labels'][$subject['id_pm']]) == count($context['labels']),
'is_replied_to' => &$context['message_replied'][$subject['id_pm']],
'is_unread' => &$context['message_unread'][$subject['id_pm']],
'is_selected' => !empty($temp_pm_selected) && in_array($subject['id_pm'], $temp_pm_selected),
'Activity_Bar' => Activity_Bar($subject['id_member_from']), // Esto fue lo que procedí a agregar.
);

return $output;
}


Comparando con la definición del id más arriba pensé que sería adecuado ponerlo así. Sin embargo, una vez en PersonalMessages.template.php, hice un var_dump para ver qué me devolvía con $subject, y nada, NULL.

Incluso, en el PM.template.php pasé todas las variables de $context o $message a $subject, como correspondía:

/* Activity Bar Mod */
if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($subject['Activity_Bar']))
echo '
<li class="activity_li">', !empty($modSettings['Activity_Bar_label']) , '
<div class="activity_holder" style="width: ', !empty($modSettings['Activity_Bar_max_width']) ? $modSettings['Activity_Bar_max_width'] : 139, 'px;">
<div class="activity_bar" style="width: ', $subject['Activity_Bar']['width'], 'px;">
<div class="activity_percentage">', $subject['Activity_Bar']['percentage'], '%
</div></div></div></li>';
/* Activity Bar Mod */


¿Qué podrá estar ocurriendo?

Desde ya, muchas gracias.


Irisado

Por favor, evita revivir tu tema dentro de 24 horas en el futuro.  Alguien te contestará tan pronto como sea posible.
Soñando con una playa donde brilla el sol, un arco iris ilumina el cielo, y el mar espejea iridescentemente

FirstName LastName

Quote from: Irisado on March 18, 2016, 05:58:49 AM
Por favor, evita revivir tu tema dentro de 24 horas en el futuro.  Alguien te contestará tan pronto como sea posible.

Te pido disculpas, así será, gracias.

Suki

Si revisas tu archivo PersonalMessage.template verás que la variable que debes de usar es: $message, no $subject.

Línea 177 de tu archivo:


while ($message = $context['get_pmessage']('message'))

Ahí comienza el código para mostrar los mensajes.

Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

FirstName LastName

Quote from: Suki on March 19, 2016, 03:01:10 PM
Si revisas tu archivo PersonalMessage.template verás que la variable que debes de usar es: $message, no $subject.

Línea 177 de tu archivo:


while ($message = $context['get_pmessage']('message'))

Ahí comienza el código para mostrar los mensajes.

Gracias por tu respuesta.

Aún así, sigue sin aparecer la barra, al hacer el var_dump de $message no aparecen las variables de la misma. No sé qué podría estar llegando a suceder.

'Activity_Bar' => Activity_Bar($message['member']['id']),

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($message['Activity_Bar']))
echo '
<li class="activity_li">', !empty($modSettings['Activity_Bar_label']) , '
<div class="activity_holder" style="width: ', !empty($modSettings['Activity_Bar_max_width']) ? $modSettings['Activity_Bar_max_width'] : 139, 'px;">
<div class="activity_bar" style="width: ', $message['Activity_Bar']['width'], 'px;">
<div class="activity_percentage">', $message['Activity_Bar']['percentage'], '%
</div></div></div></li>';

Suki

No.........

en tu archivo de template usa $message

En tu archivo de Sources usa $subject.
Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

FirstName LastName

Quote from: Suki on March 19, 2016, 03:11:06 PM
No.........

en tu archivo de template usa $message

En tu archivo de Sources usa $subject.

Si no estoy mal debería ser así entonces, ya que más arriba vi definido lo siguiente:

'id' => $subject['id_member_from'],

...

'Activity_Bar' => Activity_Bar($subject['id_member_from']),

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($message['Activity_Bar']))
echo '
<li class="activity_li">', !empty($modSettings['Activity_Bar_label']) , '
<div class="activity_holder" style="width: ', !empty($modSettings['Activity_Bar_max_width']) ? $modSettings['Activity_Bar_max_width'] : 139, 'px;">
<div class="activity_bar" style="width: ', $message['Activity_Bar']['width'], 'px;">
<div class="activity_percentage">', $message['Activity_Bar']['percentage'], '%
</div></div></div></li>';


Pero sigue sin aparecer.

Suki

¿Tienes algún error en tu log de errores referente a este mod?
Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

FirstName LastName

Quote from: Suki on March 20, 2016, 11:43:14 AM
¿Tienes algún error en tu log de errores referente a este mod?

Sinceramente hasta el momento no, incluso intenté enviar un mensaje para probar, recibir, pero no aparece ningún error con respecto al mod.

FirstName LastName

Lo raro es justamente eso, si se supone que el código es el adecuado, no se muestra y tampoco da algún error... :-\


Suki

Lamentablemente no he tenido tiempo de crear un foro de pruebas y no he podido ver cuál es el error.

Prueba eliminando los condicionante uno por uno, en lugar de esto:

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($message['Activity_Bar']))

Ve eliminando uno a uno para ver si uno de ellos causa el problema:

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']))

if(!empty($modSettings['Activity_Bar_enable']))


Y por ultimo quita todos los condicionantes, también haz un var_dump() en la va riable $message apra ver si contiene o no la info del mod.
Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

FirstName LastName

Quote from: Suki on March 25, 2016, 11:37:56 AM
Lamentablemente no he tenido tiempo de crear un foro de pruebas y no he podido ver cuál es el error.

Prueba eliminando los condicionante uno por uno, en lugar de esto:

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']) && !empty($message['Activity_Bar']))

Ve eliminando uno a uno para ver si uno de ellos causa el problema:

if(!empty($modSettings['Activity_Bar_enable']) && !empty($modSettings['Activity_Bar_show_in_posts']))

if(!empty($modSettings['Activity_Bar_enable']))


Y por ultimo quita todos los condicionantes, también haz un var_dump() en la va riable $message apra ver si contiene o no la info del mod.

Hola Suki.

Probé eliminando uno a uno cada condicionante pero sigue igual, siempre con el var_dump() presente para ver si algo cambiaba, pero no, en ningún momento muestra la info del mod. Cuando saqué el if(!empty($modSettings['Activity_Bar_enable'])) se empezó a mostrar únicamente el caracter "%" (sin comillas, vacío y sin ningún estilo de progressbar, únicamente ese signo "suelto"). Cuando saqué todos los condicionantes, igual, quedaba solo el %. Pero como bien mencionaba anteriormente, en ningún momento se mostró la info del mod en el var_dump(), a diferencia de que si lo hago en el Display.template.php, ahí si se muestra tanto la info como la visualización de la barra de actividad.

Saludos y gracias.

FirstName LastName

Es bastante raro esto. ¿Alguien intentó hacer algo similar y lo consiguió?

Suki

Puedes ser un poco más proactivo, ver lo que el mod hace y como lo hace, ver que cambios realiza, hacer tus propios cambios, ver que archivos incluye, ver si hay errores en tu log de errores, en el log de errores de tu servidor etc.... lamento no poder ayudarte y seguramente es algo muy simple de resolver pero simplemente no tengo timepo suficiente para hacerlo por ti.
Disclaimer: unless otherwise stated, all my posts are personal and does not represent any views or opinions held by Simple Machines.

Advertisement: