diff --git a/lib/Alchemy/Phrasea/WorkerManager/Controller/AdminConfigurationController.php b/lib/Alchemy/Phrasea/WorkerManager/Controller/AdminConfigurationController.php index 332fa78761..487410c6f0 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Controller/AdminConfigurationController.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Controller/AdminConfigurationController.php @@ -17,12 +17,14 @@ use Alchemy\Phrasea\WorkerManager\Form\WorkerSearchengineType; use Alchemy\Phrasea\WorkerManager\Form\WorkerValidationReminderType; use Alchemy\Phrasea\WorkerManager\Queue\AMQPConnection; use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher; +use Alchemy\Phrasea\WorkerManager\Worker\RecordMoverWorker; use Doctrine\ORM\OptimisticLockException; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Form\Form; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; @@ -400,6 +402,35 @@ class AdminConfigurationController extends Controller ]); } + public function recordMoverFacilityAction(PhraseaApplication $app, Request $request) + { + $ret = ['tasks' => []]; + $job = new RecordMoverWorker($app); + switch ($request->get('ACT')) { + case 'PLAYTEST': + $sxml = simplexml_load_string($request->get('xml')); + if (isset($sxml->tasks->task)) { + foreach ($sxml->tasks->task as $sxtask) { + $ret['tasks'][] = $job->calcSQL($app, $sxtask, true); + } + } + break; + case 'CALCTEST': + case 'CALCSQL': + $sxml = simplexml_load_string($request->get('xml')); + if (isset($sxml->tasks->task)) { + foreach ($sxml->tasks->task as $sxtask) { + $ret['tasks'][] = $job->calcSQL($app, $sxtask, false); + } + } + break; + default: + throw new NotFoundHttpException('Route not found.'); + } + + return $app->json($ret); + } + public function populateStatusAction(PhraseaApplication $app, Request $request) { $databoxIds = $request->get('sbasIds'); diff --git a/lib/Alchemy/Phrasea/WorkerManager/Provider/ControllerServiceProvider.php b/lib/Alchemy/Phrasea/WorkerManager/Provider/ControllerServiceProvider.php index 290cff39b3..8ffae4951e 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Provider/ControllerServiceProvider.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Provider/ControllerServiceProvider.php @@ -109,6 +109,10 @@ class ControllerServiceProvider implements ControllerProviderInterface, ServiceP ->method('GET|POST') ->bind('worker_admin_recordMover'); + $controllers->match('/record-mover/facility', 'controller.worker.admin.configuration:recordMoverFacilityAction') + ->method('POST') + ->bind('worker_admin_recordMover_facility'); + /** @uses AdminConfigurationController::queueMonitorAction */ $controllers->match('/queue-monitor', 'controller.worker.admin.configuration:queueMonitorAction') ->method('GET') diff --git a/lib/Alchemy/Phrasea/WorkerManager/Worker/RecordMoverWorker.php b/lib/Alchemy/Phrasea/WorkerManager/Worker/RecordMoverWorker.php index 8f612a7577..590c636197 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Worker/RecordMoverWorker.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Worker/RecordMoverWorker.php @@ -216,7 +216,7 @@ class RecordMoverWorker implements WorkerInterface return $this; } - private function calcSQL(Application $app, $sxtask, $playTest = false) + public function calcSQL(Application $app, $sxtask, $playTest = false) { $sbas_id = (int) $sxtask['sbas_id']; diff --git a/templates/web/admin/worker-manager/worker_record_mover.html.twig b/templates/web/admin/worker-manager/worker_record_mover.html.twig index c9594dff1c..afd2c34b08 100644 --- a/templates/web/admin/worker-manager/worker_record_mover.html.twig +++ b/templates/web/admin/worker-manager/worker_record_mover.html.twig @@ -1,3 +1,55 @@ +{% block css %} + +{% endblock %} +

{{ 'admin::workermanager:tab:record mover: description' |trans }}

{{ form_start(form, {'action': path('worker_admin_recordMover')}) }} @@ -6,10 +58,18 @@ {{ form_row(form.ttl_retry) }} +
+ +
+
{{ form_row(form.xmlSetting, {'attr': {'style': 'width:99%;height:250px;'}}) }}
+
+
{{ 'Graphic view' | trans }}
+
+
{{ form_row(form.apply) }}
@@ -47,4 +107,113 @@ form.submit(); } }); + + $("#worker-record-mover").on('click', '.show-graphic-view', function (e) { + e.preventDefault(); + $(".graphic-view ").show(); + + $.ajax({ + "url": "{{ path('admin_tasks_validate_xml') }}", + "data": $("#worker_recordMover_xmlSetting").val(), + "processData": false, + "dataType": "json", + "type": "POST", + "async": false, + success: function (data) { + if (data.success == true) { + var x = $("#worker_recordMover_xmlSetting").val(); + try { + taskFillGraphic(x); + } catch (e) { + console.log(e); + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + // todo add notification + } + }); + }); + + function taskFillGraphic(xml) + { + // $("#sqlu").text(""); + // $("#sqls").text(""); + if (xml) { + xml2 = $.parseXML(xml); + xml2 = $(xml2); + + var data = {}; + data["ACT"] = "CALCTEST"; + data["cls"]="RecordMover"; + data["xml"] = xml; + $.ajax({ url: "{{ path('worker_admin_recordMover_facility') }}" + , data: data + , dataType:'json' + , type:"POST" + , async:true + , success:function(data) { + t = ""; + for (i in data.tasks) { + t += "
 "; + if(data.tasks[i].active) + t += " X  "; + else + t += " X  "; + if(data.tasks[i].name_htmlencoded) + t += "" + data.tasks[i].name_htmlencoded + ""; + else + t += "sans nom"; + + if(data.tasks[i].basename_htmlencoded) + t += " (action=" + data.tasks[i].action + ' on ' + data.tasks[i].basename_htmlencoded + ')'; + else + t += " (action=" + data.tasks[i].action + ' on Unknown)'; + t += "
"; + + if(data.tasks[i].err_htmlencoded) ; + t += "
" + data.tasks[i].err_htmlencoded + "
"; + + t += "
"; + + if(data.tasks[i].sql && data.tasks[i].sql.test.sql_htmlencoded) + t += "
" + data.tasks[i].sql.test.sql_htmlencoded + "
"; + t += "--> wait...
"; + + t += "
"; + } + $("#sqla").html(t); + + var data = {}; + data["ACT"] = "PLAYTEST"; + data["cls"]="RecordMover"; + data["xml"] = xml; + $.ajax({ url: "{{ path('worker_admin_recordMover_facility') }}" + , data: data + , dataType:'json' + , type:"POST" + , async:true + , success:function(data) { + for (i in data.tasks) { + if (data.tasks[i].sql) { + if (data.tasks[i].sql.test.err) { + $("#SQLRET"+i).html("err: " + data.tasks[i].sql.test.err); + } else { + t = ''; + for(j in data.tasks[i].sql.test.result.rids) + t += (t?', ':'') + data.tasks[i].sql.test.result.rids[j]; + if(data.tasks[i].sql.test.result.rids.length < data.tasks[i].sql.test.result.n) + t += ', ...'; + $("#SQLRET"+i).html("n=" + data.tasks[i].sql.test.result.n + ", rids:(" + t + ")"); + } + } else { + $("#SQLRET"+i).html(""); + } + } + } + }); + } + }); + } + }