Skip to content

Commit 0bd4d2f

Browse files
committed
Fix update on embedded docs
1 parent e2deb0f commit 0bd4d2f

File tree

5 files changed

+18
-20
lines changed

5 files changed

+18
-20
lines changed

index.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Capsule\Factory\ServerRequestFactory;
77
use Limber\Exceptions\NotFoundHttpException;
88

9-
const VERSION = '1.2.7';
9+
const VERSION = '1.2.8';
1010

1111
/**
1212
* Absolute path, without trailing slash.

source/js/jsonViewModified.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,8 @@ var JsonView = (function (exports) {
191191
} else {
192192

193193
// XXX Modification made for MongoDB PHP GUI.
194-
if ( node.key === '_id' ) {
194+
if ( node.key === '_id' && node.depth === 2 ) {
195195
MPG.documentId = node.value;
196-
MPG.documentIdType = _typeof(node.value);
197196
}
198197
if ( node.depth >= 2 && node.depth <= 5 && node.key !== '_id' ) {
199198
var documentFieldIsUpdatable = true;

source/js/queryDatabase.js

+1-13
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,6 @@ MPG.collectionFields = [];
4343
*/
4444
MPG.documentId = '';
4545

46-
/**
47-
* Type of document ID.
48-
* XXX Used by JsonView parser.
49-
*
50-
* @type {string}
51-
*/
52-
MPG.documentIdType = '';
53-
5446
/**
5547
* Cached output.
5648
*
@@ -517,11 +509,7 @@ MPG.eventListeners.addUpdate = function() {
517509
documentFieldNewValue, documentField.dataset.documentFieldType
518510
);
519511

520-
if ( MPG.documentIdType === 'number' ) {
521-
var documentId = parseInt(documentField.dataset.documentId);
522-
} else {
523-
var documentId = documentField.dataset.documentId;
524-
}
512+
var documentId = documentField.dataset.documentId;
525513

526514
var requestBody = {
527515
'databaseName': MPG.databaseName,

source/php/MPG/DocumentsController.php

+8-4
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,14 @@ public function updateOne() : JsonResponse {
287287
return new JsonResponse(400, ErrorNormalizer::normalize($th, __METHOD__));
288288
}
289289

290-
if ( isset($decodedRequestBody['filter']['_id'])
291-
&& preg_match(MongoDBHelper::OBJECT_ID_REGEX, $decodedRequestBody['filter']['_id']) ) {
292-
$decodedRequestBody['filter']['_id'] =
293-
new \MongoDB\BSON\ObjectId($decodedRequestBody['filter']['_id']);
290+
if ( isset($decodedRequestBody['filter']['_id']) ) {
291+
292+
if ( preg_match(MongoDBHelper::OBJECT_ID_REGEX, $decodedRequestBody['filter']['_id']) ) {
293+
$decodedRequestBody['filter']['_id'] = new \MongoDB\BSON\ObjectId($decodedRequestBody['filter']['_id']);
294+
} elseif ( preg_match(MongoDBHelper::UINT_REGEX, $decodedRequestBody['filter']['_id']) ) {
295+
$decodedRequestBody['filter']['_id'] = intval($decodedRequestBody['filter']['_id']);
296+
}
297+
294298
}
295299

296300
foreach ($decodedRequestBody['update']['$set'] as &$updateValue) {

source/php/MPG/MongoDBHelper.php

+7
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ class MongoDBHelper {
2525
*/
2626
public const OBJECT_ID_REGEX = '/^[a-f\d]{24}$/i';
2727

28+
/**
29+
* Regular expression for an unsigned integer.
30+
*
31+
* @var string
32+
*/
33+
public const UINT_REGEX = '/^(0|[1-9][0-9]*)$/';
34+
2835
/**
2936
* Regular expression for an ISO date-time.
3037
*

0 commit comments

Comments
 (0)