API: Avoid caching when prop=info&intestactions=... is used
authorBrad Jorsch <bjorsch@wikimedia.org>
Mon, 6 Jul 2015 16:07:45 +0000 (12:07 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Mon, 6 Jul 2015 16:16:34 +0000 (12:16 -0400)
Whether the actions pass or not depends on the current user, including
the results of several hooks and whether the current user is blocked.

Also, we can clean up the test for public inprops slightly.

Change-Id: I7e2610dd609c52711355b640778f795520a4ff8c

includes/api/ApiQueryInfo.php

index eee5dae..c45e0ef 100644 (file)
@@ -799,6 +799,7 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        public function getCacheMode( $params ) {
+               // Other props depend on something about the current user
                $publicProps = array(
                        'protection',
                        'talkid',
@@ -807,13 +808,15 @@ class ApiQueryInfo extends ApiQueryBase {
                        'preload',
                        'displaytitle',
                );
-               if ( !is_null( $params['prop'] ) ) {
-                       foreach ( $params['prop'] as $prop ) {
-                               if ( !in_array( $prop, $publicProps ) ) {
-                                       return 'private';
-                               }
-                       }
+               if ( array_diff( (array)$params['prop'], $publicProps ) ) {
+                       return 'private';
                }
+
+               // testactions also depends on the current user
+               if ( $params['testactions'] ) {
+                       return 'private';
+               }
+
                if ( !is_null( $params['token'] ) ) {
                        return 'private';
                }