API: Fix documentation for ApiBase::require*OneParameter
[lhc/web/wiklou.git] / includes / MessageBlobStore.php
index 8a8142b..5725898 100644 (file)
  * constituent messages or the resource itself is changed.
  */
 class MessageBlobStore {
-
        /**
         * Get the message blobs for a set of modules
         *
-        * @param $resourceLoader ResourceLoader object
+        * @param ResourceLoader $resourceLoader
         * @param array $modules Array of module objects keyed by module name
         * @param string $lang Language code
         * @return array An array mapping module names to message blobs
@@ -68,9 +67,9 @@ class MessageBlobStore {
         * present, it is not regenerated; instead, the preexisting blob
         * is fetched and returned.
         *
-        * @param string $name module name
-        * @param $module ResourceLoaderModule object
-        * @param string $lang language code
+        * @param string $name Module name
+        * @param ResourceLoaderModule $module
+        * @param string $lang Language code
         * @return mixed Message blob or false if the module has no messages
         */
        public static function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
@@ -125,10 +124,11 @@ class MessageBlobStore {
        /**
         * Update the message blob for a given module in a given language
         *
-        * @param string $name module name
-        * @param $module ResourceLoaderModule object
-        * @param string $lang language code
-        * @return String Regenerated message blob, or null if there was no blob for the given module/language pair
+        * @param string $name Module name
+        * @param ResourceLoaderModule $module
+        * @param string $lang Language code
+        * @return string Regenerated message blob, or null if there was no blob for
+        *   the given module/language pair.
         */
        public static function updateModule( $name, ResourceLoaderModule $module, $lang ) {
                $dbw = wfGetDB( DB_MASTER );
@@ -195,7 +195,7 @@ class MessageBlobStore {
        /**
         * Update a single message in all message blobs it occurs in.
         *
-        * @param string $key message key
+        * @param string $key Message key
         */
        public static function updateMessage( $key ) {
                try {
@@ -242,8 +242,9 @@ class MessageBlobStore {
 
        public static function clear() {
                // TODO: Give this some more thought
-               // TODO: Is TRUNCATE better?
                try {
+                       // Not using TRUNCATE, because that needs extra permissions,
+                       // which maybe not granted to the database user.
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->delete( 'msg_resource', '*', __METHOD__ );
                        $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
@@ -255,9 +256,9 @@ class MessageBlobStore {
        /**
         * Create an update queue for updateMessage()
         *
-        * @param string $key message key
-        * @param array $prevUpdates updates queue to refresh or null to build a fresh update queue
-        * @return Array: updates queue
+        * @param string $key Message key
+        * @param array $prevUpdates Updates queue to refresh or null to build a fresh update queue
+        * @return array Updates queue
         */
        private static function getUpdatesForMessage( $key, $prevUpdates = null ) {
                $dbw = wfGetDB( DB_MASTER );
@@ -306,10 +307,10 @@ class MessageBlobStore {
        /**
         * Reencode a message blob with the updated value for a message
         *
-        * @param string $blob message blob (JSON object)
-        * @param string $key message key
-        * @param string $lang language code
-        * @return Message blob with $key replaced with its new value
+        * @param string $blob Message blob (JSON object)
+        * @param string $key Message key
+        * @param string $lang Language code
+        * @return string Message blob with $key replaced with its new value
         */
        private static function reencodeBlob( $blob, $key, $lang ) {
                $decoded = FormatJson::decode( $blob, true );
@@ -322,14 +323,15 @@ class MessageBlobStore {
         * Get the message blobs for a set of modules from the database.
         * Modules whose blobs are not in the database are silently dropped.
         *
-        * @param $resourceLoader ResourceLoader object
-        * @param array $modules of module names
-        * @param string $lang language code
+        * @param ResourceLoader $resourceLoader
+        * @param array $modules Array of module names
+        * @param string $lang Language code
         * @throws MWException
         * @return array Array mapping module names to blobs
         */
        private static function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) {
                global $wgCacheEpoch;
+
                $retval = array();
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'msg_resource',
@@ -344,10 +346,14 @@ class MessageBlobStore {
                                // This shouldn't be possible
                                throw new MWException( __METHOD__ . ' passed an invalid module name' );
                        }
+
                        // Update the module's blobs if the set of messages changed or if the blob is
                        // older than $wgCacheEpoch
-                       if ( array_keys( FormatJson::decode( $row->mr_blob, true ) ) !== array_values( array_unique( $module->getMessages() ) ) ||
-                                       wfTimestamp( TS_MW, $row->mr_timestamp ) <= $wgCacheEpoch ) {
+                       $keys = array_keys( FormatJson::decode( $row->mr_blob, true ) );
+                       $values = array_values( array_unique( $module->getMessages() ) );
+                       if ( $keys !== $values
+                               || wfTimestamp( TS_MW, $row->mr_timestamp ) <= $wgCacheEpoch
+                       ) {
                                $retval[$row->mr_resource] = self::updateModule( $row->mr_resource, $module, $lang );
                        } else {
                                $retval[$row->mr_resource] = $row->mr_blob;
@@ -360,9 +366,9 @@ class MessageBlobStore {
        /**
         * Generate the message blob for a given module in a given language.
         *
-        * @param $module ResourceLoaderModule object
-        * @param string $lang language code
-        * @return String: JSON object
+        * @param ResourceLoaderModule $module
+        * @param string $lang Language code
+        * @return string JSON object
         */
        private static function generateMessageBlob( ResourceLoaderModule $module, $lang ) {
                $messages = array();