|
37 | 37 | use Illuminate\Validation\Rule; |
38 | 38 | use PKP\affiliation\Affiliation; |
39 | 39 | use PKP\citation\Citation; |
| 40 | +use PKP\citation\enum\CitationProcessingStatus; |
40 | 41 | use PKP\components\forms\FormComponent; |
41 | 42 | use PKP\components\forms\publication\PKPMetadataForm; |
42 | 43 | use PKP\components\forms\publication\PKPPublicationIdentifiersForm; |
@@ -121,8 +122,8 @@ class PKPSubmissionController extends PKPBaseController |
121 | 122 | 'changeVersion', |
122 | 123 | 'getNextAvailableVersion', |
123 | 124 | 'importAdditionalCitations', |
124 | | - 'editCitationsMetadataLookup', |
125 | 125 | 'deleteCitationsByPublicationId', |
| 126 | + 'reprocessCitationsByPublicationId' |
126 | 127 | ]; |
127 | 128 |
|
128 | 129 | /** @var array Handlers that must be authorized to write to a publication */ |
@@ -371,17 +372,17 @@ public function getGroupRoutes(): void |
371 | 372 | Role::ROLE_ID_AUTHOR, |
372 | 373 | ]), |
373 | 374 | ])->group(function () { |
374 | | - Route::put('{submissionId}/publications/{publicationId}/citations/metadataLookup', $this->editCitationsMetadataLookup(...)) |
375 | | - ->name('submission.citations.import') |
376 | | - ->whereNumber(['submissionId', 'publicationId']); |
377 | | - |
378 | 375 | Route::post('{submissionId}/publications/{publicationId}/citations/importAdditionalCitations', $this->importAdditionalCitations(...)) |
379 | 376 | ->name('submission.citations.import') |
380 | 377 | ->whereNumber(['submissionId', 'publicationId']); |
381 | 378 |
|
382 | 379 | Route::delete('{submissionId}/publications/{publicationId}/citations/deleteCitationsByPublicationId', $this->deleteCitationsByPublicationId(...)) |
383 | 380 | ->name('submission.citations.delete') |
384 | 381 | ->whereNumber(['submissionId', 'publicationId']); |
| 382 | + |
| 383 | + Route::post('{submissionId}/publications/{publicationId}/citations/reprocessCitationsByPublicationId', $this->reprocessCitationsByPublicationId(...)) |
| 384 | + ->name('submission.citations.reprocess') |
| 385 | + ->whereNumber(['submissionId', 'publicationId']); |
385 | 386 | }); |
386 | 387 | } |
387 | 388 |
|
@@ -2335,9 +2336,9 @@ protected function validateVersionIsMinor(Request $illuminateRequest): ?bool |
2335 | 2336 | } |
2336 | 2337 |
|
2337 | 2338 | /** |
2338 | | - * Update citationsMetadataLookup of a publication, reprocess citations if enabled. |
| 2339 | + * Import / add citations from a raw citation string of a publication. |
2339 | 2340 | */ |
2340 | | - protected function editCitationsMetadataLookup(Request $illuminateRequest): JsonResponse |
| 2341 | + protected function importAdditionalCitations(Request $illuminateRequest): JsonResponse |
2341 | 2342 | { |
2342 | 2343 | $publication = Repo::publication()->get((int)$illuminateRequest->route('publicationId')); |
2343 | 2344 |
|
@@ -2365,39 +2366,17 @@ protected function editCitationsMetadataLookup(Request $illuminateRequest): Json |
2365 | 2366 | ], Response::HTTP_FORBIDDEN); |
2366 | 2367 | } |
2367 | 2368 |
|
2368 | | - $citationsMetadataLookup = (bool)$illuminateRequest->input('citationsMetadataLookup'); |
2369 | | - |
2370 | | - $processCitation = false; |
2371 | | - if ($citationsMetadataLookup && !$publication->getData('citationsMetadataLookup')) { |
2372 | | - $processCitation = true; |
2373 | | - } |
2374 | | - |
2375 | | - /** @var Citation $citation */ |
2376 | | - foreach ($publication->getData('citations') as &$citation) { |
2377 | | - $citation->setIsProcessed(!$processCitation); |
2378 | | - if ($processCitation) { |
2379 | | - Repo::citation()->reprocessCitation($citation); |
2380 | | - } |
2381 | | - } |
2382 | | - unset($citation); |
2383 | | - |
2384 | | - $publication->setData('citationsMetadataLookup', $citationsMetadataLookup); |
2385 | | - Repo::publication()->edit($publication, []); |
| 2369 | + $rawCitations = (string)$illuminateRequest->input('rawCitations'); |
2386 | 2370 |
|
2387 | | - $publication = Repo::publication()->get($publication->getId()); |
| 2371 | + $result = Repo::citation()->importAdditionalCitations($publication->getId(), $rawCitations); |
2388 | 2372 |
|
2389 | | - return response()->json( |
2390 | | - [ |
2391 | | - 'citationsMetadataLookup' => $publication->getData('citationsMetadataLookup') |
2392 | | - ], |
2393 | | - Response::HTTP_OK |
2394 | | - ); |
| 2373 | + return response()->json($result, Response::HTTP_OK); |
2395 | 2374 | } |
2396 | 2375 |
|
2397 | 2376 | /** |
2398 | | - * Import / add citations from a raw citation string of a publication. |
| 2377 | + * Delete a publication's citations. |
2399 | 2378 | */ |
2400 | | - protected function importAdditionalCitations(Request $illuminateRequest): JsonResponse |
| 2379 | + protected function deleteCitationsByPublicationId(Request $illuminateRequest): JsonResponse |
2401 | 2380 | { |
2402 | 2381 | $publication = Repo::publication()->get((int)$illuminateRequest->route('publicationId')); |
2403 | 2382 |
|
@@ -2425,17 +2404,24 @@ protected function importAdditionalCitations(Request $illuminateRequest): JsonRe |
2425 | 2404 | ], Response::HTTP_FORBIDDEN); |
2426 | 2405 | } |
2427 | 2406 |
|
2428 | | - $rawCitations = (string)$illuminateRequest->input('rawCitations'); |
| 2407 | + $existingCitations = []; |
| 2408 | + /** @var Citation $citation */ |
| 2409 | + foreach ($publication->getData('citations') as $citation) { |
| 2410 | + $existingCitations[] = Repo::citation()->getSchemaMap()->map($citation); |
| 2411 | + } |
2429 | 2412 |
|
2430 | | - $result = Repo::citation()->importAdditionalCitations($publication->getId(), $rawCitations); |
| 2413 | + Repo::citation()->deleteByPublicationId($publication->getId()); |
2431 | 2414 |
|
2432 | | - return response()->json($result, Response::HTTP_OK); |
| 2415 | + return response()->json([ |
| 2416 | + 'itemsMax' => count($existingCitations), |
| 2417 | + 'items' => $existingCitations |
| 2418 | + ], Response::HTTP_OK); |
2433 | 2419 | } |
2434 | 2420 |
|
2435 | 2421 | /** |
2436 | | - * Delete a publication's citations. |
| 2422 | + * Reprocess a publication's citations. |
2437 | 2423 | */ |
2438 | | - protected function deleteCitationsByPublicationId(Request $illuminateRequest): JsonResponse |
| 2424 | + protected function reprocessCitationsByPublicationId(Request $illuminateRequest): JsonResponse |
2439 | 2425 | { |
2440 | 2426 | $publication = Repo::publication()->get((int)$illuminateRequest->route('publicationId')); |
2441 | 2427 |
|
@@ -2463,17 +2449,19 @@ protected function deleteCitationsByPublicationId(Request $illuminateRequest): J |
2463 | 2449 | ], Response::HTTP_FORBIDDEN); |
2464 | 2450 | } |
2465 | 2451 |
|
2466 | | - $existingCitations = []; |
2467 | | - /** @var Citation $citation */ |
2468 | | - foreach ($publication->getData('citations') as $citation) { |
2469 | | - $existingCitations[] = Repo::citation()->getSchemaMap()->map($citation); |
| 2452 | + $citations = $publication->getData('citations'); |
| 2453 | + $citationsMapped = []; |
| 2454 | + foreach ($citations as &$citation) { |
| 2455 | + $citation->setProcessingStatus(CitationProcessingStatus::NOT_PROCESSED->value); |
| 2456 | + Repo::citation()->edit($citation, []); |
| 2457 | + Repo::citation()->reprocessCitation($citation); |
| 2458 | + $citationsMapped[] = Repo::citation()->getSchemaMap()->map($citation); |
2470 | 2459 | } |
2471 | | - |
2472 | | - Repo::citation()->deleteByPublicationId($publication->getId()); |
| 2460 | + unset($citation); |
2473 | 2461 |
|
2474 | 2462 | return response()->json([ |
2475 | | - 'itemsMax' => count($existingCitations), |
2476 | | - 'items' => $existingCitations |
| 2463 | + 'itemsMax' => count($citationsMapped), |
| 2464 | + 'items' => $citationsMapped |
2477 | 2465 | ], Response::HTTP_OK); |
2478 | 2466 | } |
2479 | 2467 | } |
0 commit comments