microTECHing
18May/110

Error visualizando la ficha de un ítem como editor de backend en K2 de Joomla

Enlazando con el post anterior, resulta que al actualizar la versión del plugin K2fields a la 0.4.8, ocurre que cuando un usuario de tipo ‘editor’ de backend intenta editar un ítem, al cabo de un tiempo de espera la página se queda en blanco.

Como en el post anterior, solo que ahora solo le pasa a los usuarios de back que no son administradores y antes de que se muestre el formulario. No al guardar.

Depurando el plugin, vemos que hay una parte del código que parece encargarse de alguna forma, de que ese editor solo pueda modificar los filtros de los artículos que sean suyos o modificados por él, o una cosa así.

Por ahora, a falta de disponer de más información, simplemente hemos evitado que los usuarios editores ejecuten el trozo de 'código corrupto', igual que lo evitan los administradores.

Para ello, tenemos que ir a la carpeta ‘\plugins\k2\’ y editar el archivo ‘k2fields.php’.
Buscamos la función ‘static function getUserAddedExtraFieldValues($filter = null, $jsonEncoded = true)’.
Y en el trozo:

if ($filter) {
    $user = & JFactory::getUser();
    $userId = $user->get ('id');
    $db = & JFactory::getDBO();
    $query = "SELECT extra_fields FROM #__k2_items WHERE created_by = {$userId} OR modified_by = {$userId}";
    $db->setQuery($query);
    $rows = $db->loadObjectList();

    foreach ($rows as $row) {
        $values = $json->decode($row->extra_fields);

        if (!is_array($values)) continue;
        
        foreach ($values as $value) {
            $exists = isset($nonSaveableFields[$value->id])
                 && !is_object($value->value) // need to check how multiple select saves values
                 && isset($nonSaveableFields[$value->id][$value->value]);

            if ($filter == plgk2k2fields::FILTER_NOT_ADDED_BY_USER && $exists
             || $filter == plgk2k2fields::FILTER_ADDED_BY_USER && !$exists) {
                unset($nonSaveableFields[$value->id][$value->value]);
            }
        }
    }

    foreach ($nonSaveableFields as $n => $nonSaveableField) {
        if (sizeof($nonSaveableField) == 0) {
            unset($nonSaveableFields[$n]);
        }
    }
}

Cogemos el primer if, y le ponemos:

if (false){//($filter) {

Con esto por el momento se soluciona el problema.

Vamos a intentar ponernos en contacto con el autor para comentarle el ‘bug’, y a ver si se puede resolver en la siguiente versión.

Si detectáis algún efecto colateral, no dudéis en comentarlo.

Etiquetado con: , Deja un comentario
Si te ha sido útil el post y no te importa animar a que sigamos escribiendo, solo son unos segundillos invitarnos a un café ;-)
Gracias de antebrazo!
Comentarios (0) Trackbacks (0)

Aún no hay comentarios.


Leave a comment

Aún no hay trackbacks.