fix colour handling in user account search results
authorDenis Ovsienko <denis@ovsienko.info>
Wed, 28 Nov 2018 12:22:07 +0000 (12:22 +0000)
committerDenis Ovsienko <denis@ovsienko.info>
Wed, 28 Nov 2018 12:22:07 +0000 (12:22 +0000)
setEntityColors() caused the following log messages when the search
results included any local user accounts:

PHP Notice:  Undefined index: etags in .../inc/interface-lib.php on
line 1344
PHP Warning:  Invalid argument supplied for foreach() in
.../inc/interface-lib.php on line 1344

This was caused by getAccountSearchResult() constructing and returning
a mock user cell structure, which through the search results eventually
ended up in renderCell(). The latter used to have a workaround for that
specific case (see commit 573214e), but only after the call to
setEntityColors(), which needs the 'etags' data, even when it is an
empty list.

Remove the workaround from renderCell() and remove the unnecessary
custom code from getAccountSearchResult(), which now just calls
spotEntity() like other similar search functions. That delivers 'etags'
to renderCell(), which now has input for getObjectClass(), which now
yields another log message:

PHP Notice:  Undefined index: id in .../interface-lib.php on line 1302

To fix that update getObjectClass() to use the proper index for user
cells like mkCellA() does.

[skip ci]

wwwroot/inc/database.php
wwwroot/inc/interface-lib.php
wwwroot/inc/interface.php

index 0c1b9ed..6f40e34 100644 (file)
@@ -2888,7 +2888,7 @@ function getAccountSearchResult ($terms)
        $byUsername = getSearchResultByField
        (
                'UserAccount',
-               array ('user_id', 'user_name', 'user_realname'),
+               array ('user_id'),
                'user_name',
                $terms,
                'user_name'
@@ -2896,7 +2896,7 @@ function getAccountSearchResult ($terms)
        $byRealname = getSearchResultByField
        (
                'UserAccount',
-               array ('user_id', 'user_name', 'user_realname'),
+               array ('user_id'),
                'user_realname',
                $terms,
                'user_name'
@@ -2905,11 +2905,7 @@ function getAccountSearchResult ($terms)
        $ret = array();
        foreach (array ($byRealname, $byUsername) as $array)
                foreach ($array as $user)
-               {
-                       $user['realm'] = 'user';
-                       $user['id'] = $user['user_id'];
-                       $ret[$user['user_id']] = $user;
-               }
+                       $ret[$user['user_id']] = spotEntity ('user', $user['user_id']);
        return $ret;
 }
 
index 2d802e3..b2bbaf7 100644 (file)
@@ -1299,7 +1299,9 @@ function getObjectClass ($object, $context)
                $percent += $step;
        }
        $style .= "background-image:linear-gradient(135deg," . trim ($gradient, ',') . ") !important;";
-       return getCachedCSSClassForStyle ("objectcolor-${object['id']}", $style);
+       $cell = $object;
+       $cell_id = $cell[$cell['realm'] == 'user' ? 'user_id' : 'id'];
+       return getCachedCSSClassForStyle ("cellcolor-${cell_id}", $style);
 }
 
 function getTagClass ($taginfo)
index 00487fc..24cf059 100644 (file)
@@ -5095,8 +5095,6 @@ function renderCell ($cell)
                else
                        echo "<tr><td class=sparenetwork>no name</td></tr>";
                echo '<td>';
-               if (!isset ($cell['etags']))
-                       $cell['etags'] = getExplicitTagsOnly (loadEntityTags ('user', $cell['user_id']));
                echo count ($cell['etags']) ? ("<small>" . serializeTags ($cell['etags']) . "</small>") : '&nbsp;';
                echo "</td></tr></table>";
                break;