Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

getUsersAccessFromSite has a different behaviour if only one member #3349

Closed
anonymous-piwik-user opened this Issue · 3 comments

3 participants

@anonymous-piwik-user

As explained on the forum (http://forum.piwik.org/read.php?2,92955), there is a weird behaviour when using getUsersAccessFromSite when there is only on user who has rights on a website.

Expected output, with only one user (named admin):

[{"admin":"view"}]

Actual output:

$ curl 'http://www.myinternaltest.net/?module=API&method=UsersManager.getUsersAccessFromSite&format=JSON&token_auth=b9848776994b4111d8d010f7ed9b3ca5&idSite=1'
[["view"]]

Two users:

$ curl 'http://www.myinternaltest.net/?module=API&method=UsersManager.getUsersAccessFromSite&format=JSON&token_auth=b9848776994b4111d8d010f7ed9b3ca5&idSite=1'
[{"admin":"view","miaou":"view"}]

A test I made was to wrap $return with an array definition, which looks like working for the API, but breaks other features in the core piwik obviously (for instance on the user listing page).
Nevertheless, the patch is

--- API.php.old 2012-08-27 13:25:22.000000000 +0000
+++ API.php     2012-08-27 13:26:14.000000000 +0000
@@ -172,7 +172,7 @@
                {
                        $return[$user['login']][] = $user['idsite'];
                }
-               return $return;
+               return array($return);

        }

which produces the output:

$ curl 'http://www.myinternaltest.net/?module=API&method=UsersManager.getUsersAccessFromSite&format=JSON&token_auth=b9848776994b4111d8d010f7ed9b3ca5&idSite=1'
[{"miaou":"view"}]

Keywords: usersmanager accessfromsite

@mattab
Owner

A related issue was described in: http://forum.piwik.org/read.php?2,89606
"Fatal error: Call to a member function getFirstRow() on widgets "

I think these are both the same root cause, the wrong re-write of the data when there's only one element.



Removing and adding widget solves problem. But only for a short time, until user selects one column(metrics) for graph. For example (avg_time_on_site).

1) Then calling API VisitsSummary.get results in table with single column. avg_time_on_site
2) After that API\ResponseBuilder collapses it according to

$columns = $dataTable->getFirstRow()->getColumns();
                if(count($columns) == 1)
                {
                    $values = array_values($columns);
                    return $values[0];
                }


3) The result is non-object and have no getFirstRow() function

I solved it adding some extra columns to visits summary to be present all the time:

file: plugins/VisitsSummary/API.php line 62
$columns = array_merge($columns, $tempColumns, array('nb_visits', 'nb_uniq_visitors'));


But it may cause some bugs I believe. So if this bug explanation makes sense - please tell how to fix that correct.


@mattab
Owner

This is a bug that will be great to have fixed as it could strike in the most unexpected moments. @capedfuzz let me know what you think about this.

@diosmosis
Collaborator

(In [7648]) Refs #1253, fixes #3349, fix bugs and regressions in annotations and tweaked the UI a bit.

@anonymous-piwik-user anonymous-piwik-user added this to the 1.10 - Piwik 1.10 milestone
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.