mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 07:23:13 +00:00
Update templates
This commit is contained in:
@@ -18,7 +18,10 @@
|
||||
<script type="text/javascript" src="/assets/tinymce/tinymce.js"></script>
|
||||
<script type="text/javascript" src="{{ path('minifier', { 'g' : 'admin' }) }}"></script>
|
||||
<script type="text/javascript">
|
||||
var p4 = {users:{sel:[]}};
|
||||
var p4 = p4 || {};
|
||||
p4.users = {
|
||||
sel:[]
|
||||
};
|
||||
var bodySize = {x:0,y:0};
|
||||
|
||||
var language = {
|
||||
@@ -104,17 +107,21 @@
|
||||
var dest = link.attr('href');
|
||||
|
||||
if(dest && dest.indexOf('#') !== 0) {
|
||||
$('#right-ajax').empty().addClass('loading').parent().show();
|
||||
|
||||
$.get(dest, function(data) {
|
||||
enableFormsCallback(data);
|
||||
});
|
||||
loadRightAjax(dest);
|
||||
return false;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function loadRightAjax(url)
|
||||
{
|
||||
$('#right-ajax').empty().addClass('loading').parent().show();
|
||||
$.get(url, function(data) {
|
||||
enableFormsCallback(data);
|
||||
});
|
||||
}
|
||||
|
||||
function activeTree(click)
|
||||
{
|
||||
$('#FNDR').treeview({
|
||||
@@ -126,11 +133,8 @@
|
||||
var dest = $(this).attr('href');
|
||||
|
||||
$(this).bind('click',function(){
|
||||
$('#right-ajax').empty().addClass('loading').parent().show();
|
||||
|
||||
$.get(dest, function(data) {
|
||||
enableFormsCallback(data);
|
||||
});
|
||||
loadRightAjax(dest);
|
||||
$('#tree .selected').removeClass('selected');
|
||||
$(this).parent().addClass('selected');
|
||||
|
||||
|
205
templates/web/admin/task-manager/list.html.twig
Normal file
205
templates/web/admin/task-manager/list.html.twig
Normal file
@@ -0,0 +1,205 @@
|
||||
<div class="page-header">
|
||||
<h1>{% trans 'admin::tasks: planificateur de taches' %}
|
||||
<small style="font-size:16px;">
|
||||
{% trans 'Last update at' %} <span id="pingTime"></span>
|
||||
</small>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<form id="taskManagerForm" method="get" name="taskManager" action="{{ path('admin_tasks_list') }}"></form>
|
||||
|
||||
<form id="createTask" method="post" name="createTask" action="{{ path('admin_tasks_task_create') }}">
|
||||
<input type="hidden" name="tcl" value="" />
|
||||
<input type="hidden" name="view" value="GRAPHIC" />
|
||||
</form>
|
||||
|
||||
<table id="task-manager" class="admintable task_manager" cellpadding="0" cellSpacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th style="text-align:center; width:40px;">ID</th>
|
||||
<th style="text-align:center; width:30px;">Informations</th>
|
||||
<th style="text-align:center; width:80px;">{% trans 'admin::tasks: statut de la tache' %}</th>
|
||||
<th style="text-align:center; width:60px;">{% trans 'admin::tasks: process_id de la tache' %}</th>
|
||||
<th style="width:auto;">{% trans 'admin::tasks: nom de la tache' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="TR_SCHED" class="sched even">
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="schedMenuItem" id="schedulerStart"><a href="#">start</a></li>
|
||||
<li class="schedMenuItem" id="schedulerStop"><a href="#">stop</a></li>
|
||||
<li class="schedMenuItem" id="schedulerLog"><a href="#">log</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td style="text-align:center" id="STATUS_SCHED"></td>
|
||||
<td id="PID_SCHED" style="text-align:center;"> </td>
|
||||
<td style="font-weight:900" class="taskname">TaskManager</td>
|
||||
</tr>
|
||||
{% for task in tasks %}
|
||||
<tr id="task_{{ task.getID() }}" class="task {% if loop.index is odd %}odd{% else %}even{% endif %}">
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="taskMenuItem" id="taskEdit_{{ task.getID() }}"><a href="#">edit</a></li>
|
||||
<li class="taskMenuItem" id="taskStart_{{ task.getID() }}"><a href="#">start</a></li>
|
||||
<li class="taskMenuItem" id="taskStop_{{ task.getID() }}"><a href="#">stop</a></li>
|
||||
<li class="taskMenuItem" id="taskDelete_{{ task.getID() }}"><a href="#">delete</a></li>
|
||||
<li class="taskMenuItem" id="taskLog_{{ task.getID() }}"><a href="#">log</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td style="text-align:center; font-weight:900">{{ task.getID() }}</td>
|
||||
<td style="text-align:center" class="information"></td>
|
||||
<td style="text-align:center" class="status">{{ task.getStatus() }}</td>
|
||||
<td style="text-align:center" class="pid"></td>
|
||||
<td class="taskname">{{ task.getName() }} [{{ task.getName() }}]</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
<select id="newTaskMenu" style="margin:20px 0;">
|
||||
<option value="">{% trans 'admin::tasks: Nouvelle tache' %}...</option>
|
||||
{% for job in available_jobs %}
|
||||
<option value="{{ job.getClassname() }}">{{ job.getName() }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
$(".schedMenuItem").bind("click", function() {
|
||||
var action = $(this).attr("id");
|
||||
|
||||
switch(action)
|
||||
{
|
||||
case "schedulerStart":
|
||||
$.ajax({
|
||||
url: "../admin/task-manager/scheduler/start",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
}
|
||||
});
|
||||
break;
|
||||
break;
|
||||
|
||||
case "schedulerStop":
|
||||
$.ajax({
|
||||
url: "../admin/task-manager/scheduler/stop",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "schedulerLog":
|
||||
window.open("../admin/task-manager/scheduler/log", "scheduler_log");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
$(".taskMenuItem").bind("click", function() {
|
||||
var action = $(this).attr("id").split('_');
|
||||
|
||||
switch(action[0])
|
||||
{
|
||||
case "taskEdit":
|
||||
var a = "../admin/task-manager/task/"+action[1]+"";
|
||||
$("#taskManagerForm").attr("action", a);
|
||||
$("#taskManagerForm").submit();
|
||||
break;
|
||||
|
||||
case "taskStart":
|
||||
// first reset the crash counter, then set to 'tostart'
|
||||
$.ajax({
|
||||
url: "../admin/task-manager/task/"+action[1]+"/resetcrashcounter",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
$.ajax({
|
||||
url: "../admin/task-manager/task/"+action[1]+"/tostart",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "taskStop":
|
||||
$.ajax({
|
||||
url: "../admin/task-manager/task/"+action[1]+"/tostop",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {signal:15},
|
||||
success: function(data)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "taskDelete":
|
||||
if(confirm("{% trans 'admin::tasks: supprimer la tache ?' %}"))
|
||||
{
|
||||
var a = "../admin/task-manager/task/"+action[1]+"/delete";
|
||||
$("#taskManagerForm").attr("action", a);
|
||||
$("#taskManagerForm").submit();
|
||||
}
|
||||
break;
|
||||
|
||||
case "taskLog":
|
||||
window.open("../admin/task-manager/task/"+action[1]+"/log", "task"+action[1]+"_log");
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
$("#newTaskMenu").bind("change", function() {
|
||||
var task_class = $(this).children("option:selected").attr("value");
|
||||
|
||||
$("#createTask INPUT[name=\"tcl\"]").attr("value", task_class);
|
||||
$("#createTask").submit();
|
||||
|
||||
$(this).children("option:first").attr("selected", "selected");
|
||||
});
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
@@ -85,7 +85,7 @@
|
||||
data["taskid"]={{ task.getId() }};
|
||||
data["cls"]="RecordMover";
|
||||
data["xml"] = xml;
|
||||
$.ajax({ url: "{{ path('admin_tasks_task_facility2', { 'id' : task.getID() }) }}"
|
||||
$.ajax({ url: "{{ path('admin_tasks_task_facility', { 'task' : task.getID() }) }}"
|
||||
, data: data
|
||||
, dataType:'json'
|
||||
, type:"POST"
|
||||
@@ -127,7 +127,7 @@
|
||||
data["taskid"]={{ task.getId() }};
|
||||
data["cls"]="RecordMover";
|
||||
data["xml"] = xml;
|
||||
$.ajax({ url: "{{ path('admin_tasks_task_facility2', { 'id' : task.getID() }) }}"
|
||||
$.ajax({ url: "{{ path('admin_tasks_task_facility', { 'task' : task.getID() }) }}"
|
||||
, data: data
|
||||
, dataType:'json'
|
||||
, type:"POST"
|
||||
|
@@ -2,11 +2,10 @@
|
||||
{% block css %}{% endblock %}
|
||||
<div>
|
||||
<form
|
||||
name="passwordRenewForm"
|
||||
name="task-edit"
|
||||
method="POST"
|
||||
action="{{ path('admin_tasks_task_save2', {'id' : task.getId()}) }}"
|
||||
onsubmit="return(false);"
|
||||
class="form-inline"
|
||||
action="{{ path('admin_tasks_task_save', {'task' : task.getId()}) }}"
|
||||
class="form-inline no-ajax"
|
||||
>
|
||||
{% if form.vars.errors|length > 0 %}
|
||||
{{ form_errors(form) }}
|
||||
@@ -14,7 +13,7 @@
|
||||
|
||||
{{ form_rest(form) }}
|
||||
|
||||
<a href="{{ path('admin_tasks_list2') }}">{% trans 'Cancel' %}</a>
|
||||
<a href="{{ path('admin_tasks_list') }}">{% trans 'Cancel' %}</a>
|
||||
<button type="submit" class="btn btn-success btn-trigger " id="taskSaveButton">
|
||||
{% trans "Save" %}
|
||||
</button>
|
||||
@@ -113,7 +112,7 @@
|
||||
$("#taskResetCrashCounterButton").click(function()
|
||||
{
|
||||
$.ajax({
|
||||
"url" : "{{ path('admin_tasks_task_reset2', {'id' : task.getId()}) }}",
|
||||
"url" : "{{ path('admin_tasks_task_reset', {'task' : task.getId()}) }}",
|
||||
"dataType" : "json",
|
||||
"type" : "POST",
|
||||
success:function(data) {
|
||||
@@ -129,7 +128,7 @@
|
||||
function xmlFromForm(callback) {
|
||||
var data = $("#graphicForm").serializeJSON();
|
||||
data["xml"] = $("#txtareaxml").val();
|
||||
$.ajax({ url: "{{ path('admin_tasks_xml_from_form', {'id' : task.getId()}) }}"
|
||||
$.ajax({ url: "{{ path('admin_tasks_xml_from_form', {'task' : task.getId()}) }}"
|
||||
, data: data
|
||||
, dataType:'text'
|
||||
, type:"POST"
|
||||
@@ -146,26 +145,25 @@
|
||||
});
|
||||
}
|
||||
|
||||
$("#taskSaveButton").click(function()
|
||||
$("form[name='task-edit']").on('submit', function()
|
||||
{
|
||||
xmlFromForm(function () {
|
||||
$.ajax({ url: "../admin/task-manager2/task/{{task.getID()}}/save/"
|
||||
, data: {
|
||||
title:$("#taskTaskname").val(),
|
||||
active:!!$("#taskTaskActive").attr("checked"),
|
||||
xml:data
|
||||
}
|
||||
xmlFromForm(function (data) {
|
||||
$("form[name='task-edit'] input[name='settings']").val(data);
|
||||
formData = $("form[name='task-edit']").serializeArray();
|
||||
$.ajax({
|
||||
url: "{{ path('admin_tasks_task_save', { 'task' : task.getID() }) }}"
|
||||
, data: formData
|
||||
, dataType:'json'
|
||||
, type:"POST"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
if (data.success) {
|
||||
$("#taskFormByeBye").submit();
|
||||
loadRightAjax("{{ path('admin_tasks_list') }}");
|
||||
} else {
|
||||
if (window.console) {
|
||||
console.log(data.message);
|
||||
}
|
||||
alert("{% trans %}An error occured{% endtrans %}");
|
||||
alert("{% trans %}An error occured{% endtrans %} "+data.message);
|
||||
}
|
||||
}
|
||||
, error:function(jqXHR, textStatus, errorThrown) {
|
||||
@@ -173,6 +171,8 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@@ -1,226 +0,0 @@
|
||||
<div id="taskBody">
|
||||
<!-- _____________ head added part of graphic interface of '{{task.getName()}}' _____________ -->
|
||||
{{task.printInterfaceHEAD()}}
|
||||
<!-- ______________ end of head part of graphic interface of '{{task.getName()}}' ______________ -->
|
||||
|
||||
<!-- _____________ javascript of graphic interface of '{{task.getName()}}' _____________ -->
|
||||
{{task.printInterfaceJS()}}
|
||||
<!-- _____________ end javascript of graphic interface of '{{task.getName()}}' _____________ -->
|
||||
|
||||
<div>
|
||||
|
||||
{{task.getName()}} <span id="taskid">id : {{task.getID()}}</span>
|
||||
|
||||
<form name="__ftask" onsubmit="return(false);" method="post" class="form-inline">
|
||||
<label for="taskTaskname">{% trans 'admin::tasks: nom de la tache' %}</label>
|
||||
<input type="text" id="taskTaskname" value="{{task.getTitle()}}" onchange="setDirty();" />
|
||||
<label for="taskTaskActive" class="checkbox">
|
||||
<input type="checkbox" id="taskTaskActive" {% if task.isActive() %}checked="checked"{% endif %} onchange="setDirty();" />
|
||||
{% trans 'admin::tasks: lancer au demarrage du scheduler' %}
|
||||
</label>
|
||||
</form>
|
||||
<div id="idCrashLine" style="display:{% if task.getCrashCounter() == 0 %}none{% endif %}">
|
||||
{% trans 'admin::tasks: Nombre de crashes : ' %} {{task.getCrashCounter()}}
|
||||
|
||||
<button class="btn btn-warning" id="taskResetCrashCounterButton">
|
||||
{% trans 'admin::tasks: reinitialiser el compteur de crashes' %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="taskTabs">
|
||||
<ul>
|
||||
<li><a href="#taskXmlTab">{% trans 'boutton::vue xml' %}</a></li>
|
||||
<li><a href="#taskGuiTab">{% trans 'boutton::vue graphique' %}</a></li>
|
||||
</ul>
|
||||
|
||||
<!-- ______________ graphic interface '{{task.getName()}}' ___________________ -->
|
||||
<div id="taskGuiTab" >
|
||||
{{task.getInterfaceHTML()|raw}}
|
||||
</div>
|
||||
<!-- _____________ end graphic interface '{{task.getName()}}' _________________ -->
|
||||
|
||||
<!-- _____________ xml interface _____________ -->
|
||||
<div id="taskXmlTab">
|
||||
<form onsubmit="return(false);" name="fxml" method="post">
|
||||
<textarea nowrap id="txtareaxml" style="white-space:pre; width:100%; height:250px" name="txtareaxml" >{{task.getSettings()}}</textarea>
|
||||
</form>
|
||||
</div>
|
||||
<!-- ___________ end xml interface ___________ -->
|
||||
</div>
|
||||
|
||||
|
||||
<!-- ___________ form to go back on list ___________ -->
|
||||
<form id="taskFormByeBye" action="./task-manager/tasks/" method="get">
|
||||
</form>
|
||||
<!-- __________ end form to go back on list __________ -->
|
||||
|
||||
|
||||
<button class="btn" id="taskCancelButton">{% trans 'boutton::annuler' %}</button>
|
||||
<button class="btn btn-warning" id="taskSaveButton">{% trans 'boutton::valider' %}</button>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function setDirty()
|
||||
{
|
||||
// jsTaskObj.SettingsIsDirty = true;
|
||||
}
|
||||
|
||||
|
||||
(function( $ ){
|
||||
$.fn.serializeJSON=function() {
|
||||
var json = {};
|
||||
jQuery.map($(this).serializeArray(), function(n, i){
|
||||
json[n['name']] = n['value'];
|
||||
});
|
||||
|
||||
return json;
|
||||
};
|
||||
})( jQuery );
|
||||
|
||||
$(document).ready(function(){
|
||||
$("#taskTabs").tabs({
|
||||
create: function(event, ui) {
|
||||
{% if task.getInterfaceHTML() is empty %}
|
||||
$("#taskTabs").tabs({ disabled: [1], active: 0 });
|
||||
{% else %}
|
||||
$("#taskTabs").tabs({ active: 1 });
|
||||
{% endif %}
|
||||
}
|
||||
,
|
||||
beforeActivate: function(event, ui) {
|
||||
switch($(ui.newPanel).attr("id"))
|
||||
{
|
||||
{% if task.getInterfaceHTML() is not empty %}
|
||||
case "taskGuiTab":
|
||||
var context = { acceptTab: true };
|
||||
// click on gui tab : fill the gui from xml, then switch to the gui view
|
||||
$.ajax({ url: "/admin/task-manager/task/checkxml/"
|
||||
, context:context
|
||||
, data: {xml:$("#txtareaxml").val()}
|
||||
, dataType:'text'
|
||||
, type:"POST"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
if(typeof(taskFillGraphic_{{task.getClass()}}) === "function")
|
||||
{
|
||||
var x = $("#txtareaxml").val();
|
||||
try
|
||||
{
|
||||
taskFillGraphic_{{task.getClass()}}(x);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
alert("{% trans "An error occured" %}");
|
||||
console.log(e);
|
||||
context.acceptTab = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
, error:function(jqXHR, textStatus, errorThrown) {
|
||||
this.acceptTab = false;
|
||||
alert("Erreur XML:\n\n" + jqXHR.responseText);
|
||||
}
|
||||
});
|
||||
|
||||
return context.acceptTab;
|
||||
|
||||
break;
|
||||
{% endif %}
|
||||
case "taskXmlTab":
|
||||
// click on xml tab : fill the xml from gui, then switch to the xml view
|
||||
var data = $("form[name='graphicForm']").serializeJSON();
|
||||
data["__action"] = "FORM2XML";
|
||||
data["__xml"] = $("#txtareaxml").val();
|
||||
$.ajax({ url: "/admin/task-manager/task/{{task.getID()}}/facility/"
|
||||
, data: data
|
||||
, dataType:'text'
|
||||
, type:"POST"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
$("#txtareaxml").val(data);
|
||||
}
|
||||
, error:function(jqXHR, textStatus, errorThrown) {
|
||||
alert(jqXHR.responseText);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#taskResetCrashCounterButton").click(function()
|
||||
{
|
||||
// click on resetCrashCounter button
|
||||
$.ajax({ url: "/admin/task-manager/task/{{task.getID()}}/resetcrashcounter/"
|
||||
, data: {}
|
||||
, dataType:'json'
|
||||
, type:"GET"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
if(data)
|
||||
{
|
||||
$("#idCrashLine").hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$("#taskSaveButton").click(function()
|
||||
{
|
||||
// click on save button
|
||||
|
||||
var data = $("form[name='graphicForm']").serializeJSON();
|
||||
data["__action"] = "FORM2XML";
|
||||
data["__xml"] = $("#txtareaxml").val();
|
||||
$.ajax({ url: "/admin/task-manager/task/{{task.getID()}}/facility/"
|
||||
, data: data
|
||||
, dataType:'text'
|
||||
, type:"POST"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
$("#txtareaxml").val(data);
|
||||
$.ajax({ url: "/admin/task-manager/task/{{task.getID()}}/save/"
|
||||
, data: {
|
||||
title:$("#taskTaskname").val(),
|
||||
active:!!$("#taskTaskActive").attr("checked"),
|
||||
xml:data
|
||||
}
|
||||
, dataType:'json'
|
||||
, type:"POST"
|
||||
, async:false
|
||||
, success:function(data) {
|
||||
if (data.success) {
|
||||
$("#taskFormByeBye").submit();
|
||||
} else {
|
||||
if (window.console) {
|
||||
console.log(data.message);
|
||||
}
|
||||
alert("{% trans %}An error occured{% endtrans %}");
|
||||
}
|
||||
}
|
||||
, error:function(jqXHR, textStatus, errorThrown) {
|
||||
alert("Erreur XML:\n\n" + jqXHR.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
, error:function(jqXHR, textStatus, errorThrown) {
|
||||
alert(jqXHR.responseText);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$("#taskCancelButton").click(function()
|
||||
{
|
||||
// click on cancel button
|
||||
$("#taskFormByeBye").submit();
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
@@ -1,352 +0,0 @@
|
||||
<div class="page-header">
|
||||
<h1>{% trans 'admin::tasks: planificateur de taches' %}
|
||||
<small style="font-size:16px;">
|
||||
{% trans 'Last update at' %} <span id="pingTime"></span>
|
||||
</small>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<form id="taskManagerForm" method="get" name="taskManager" action="{{ path('admin_tasks_list') }}"></form>
|
||||
|
||||
<form id="createTask" method="post" name="createTask" action="{{ path('admin_tasks_task_create') }}">
|
||||
<input type="hidden" name="tcl" value="" />
|
||||
<input type="hidden" name="view" value="GRAPHIC" />
|
||||
</form>
|
||||
|
||||
<table class="admintable task_manager" cellpadding="0" cellSpacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th style="text-align:center; width:40px;">ID</th>
|
||||
<th style="text-align:center; width:30px;">!</th>
|
||||
<th style="text-align:center; width:80px;">{% trans 'admin::tasks: statut de la tache' %}</th>
|
||||
<th style="text-align:center; width:60px;">{% trans 'admin::tasks: process_id de la tache' %}</th>
|
||||
<th style="text-align:center; width:120px;">{% trans 'admin::tasks: etat de progression de la tache' %}</th>
|
||||
<th style="width:auto;">{% trans 'admin::tasks: nom de la tache' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="TR_SCHED" class="sched even">
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="schedMenuItem" id="schedulerStart"><a href="#">start</a></li>
|
||||
<li class="schedMenuItem" id="schedulerStop"><a href="#">stop</a></li>
|
||||
<li class="schedMenuItem" id="schedulerLog"><a href="#">log</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
<td style="text-align:center" id="STATUS_SCHED"></td>
|
||||
<td id="PID_SCHED" style="text-align:center;"> </td>
|
||||
<td> </td>
|
||||
<td style="font-weight:900" class="taskname">TaskManager</td>
|
||||
</tr>
|
||||
{% for task in task_manager.getTasks() %}
|
||||
<tr id="TR_{{ task.getID() }}" class="task {% if loop.index is odd %}odd{% else %}even{% endif %}">
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="taskMenuItem" id="taskEdit_{{ task.getID() }}"><a href="#">{% trans 'Edit' %}</a></li>
|
||||
<li class="taskMenuItem" id="taskStart_{{ task.getID() }}"><a href="#">{% trans 'Start' %}</a></li>
|
||||
<li class="taskMenuItem" id="taskStop_{{ task.getID() }}"><a href="#">{% trans 'Stop' %}</a></li>
|
||||
<li class="taskMenuItem" id="taskDelete_{{ task.getID() }}"><a href="#">{% trans 'Delete' %}</a></li>
|
||||
<li class="taskMenuItem" id="taskLog_{{ task.getID() }}"><a href="#">{% trans 'Logs' %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td style="text-align:center; font-weight:900">{{ task.getID() }}</td>
|
||||
<td style="text-align:center"><img id="WARNING_{{ task.getID() }}" src="/skins/icons/alert.png" title="" style="display:none;"/></td>
|
||||
<td style="text-align:center" id="STATUS_{{ task.getID() }}"></td>
|
||||
<td style="text-align:center" id="PID_{{ task.getID() }}"> </td>
|
||||
<td>
|
||||
<div style="position:relative; top:0px; left:0px; right:0px;" >
|
||||
<div id="COMPBOX_{{ task.getID() }}" style="position:absolute; top:1px; left:3px; right:3px; height:5px; background-color:#787878">
|
||||
<div id="COMP_{{ task.getID() }}" style="position:absolute; top:1px; left:0px; width:0%; height:3px; background-color:#FFFF80">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="taskname">{{ task.getTitle() }} [{{ task.getName() }}]</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="7">
|
||||
<select id="newTaskMenu" style="margin:20px 0;">
|
||||
<option value="">{% trans 'admin::tasks: Nouvelle tache' %}...</option>
|
||||
{% for t in task_manager.getAvailableTasks() %}
|
||||
<option value="{{ t.class }}" {% if t.err %}disabled="disabled"{% endif %}>{{ t.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function pingScheduler(repeatTimeout)
|
||||
{
|
||||
if(typeof window.TMTimer == 'number')
|
||||
{
|
||||
window.clearTimeout(window.TMTimer);
|
||||
delete window.TMTimer;
|
||||
}
|
||||
|
||||
// if the page is unloaded, no need to ping nor repeat
|
||||
if($("#STATUS_SCHED").length == 0)
|
||||
return;
|
||||
|
||||
$.ajax(
|
||||
{
|
||||
url:'/admin/task-manager/tasks/',
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data:{rnd:Math.random()},
|
||||
contentType:"application/json; charset=utf-8",
|
||||
success:function(ret)
|
||||
{
|
||||
if(ret.time)
|
||||
$("#pingTime").empty().append(ret.time);
|
||||
|
||||
if(ret.scheduler)
|
||||
{
|
||||
if(ret.scheduler.status)
|
||||
$("#STATUS_SCHED").html(ret.scheduler.status);
|
||||
else
|
||||
$("#STATUS_SCHED").html('');
|
||||
}
|
||||
if(ret.scheduler && ret.scheduler.pid)
|
||||
{
|
||||
$("#PID_SCHED").html(ret.scheduler.pid);
|
||||
$("#schedulerStart").addClass("disabled");
|
||||
$("#schedulerStop").removeClass("disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#PID_SCHED").html('-');
|
||||
$("#schedulerStart").removeClass("disabled");
|
||||
$("#schedulerStop").addClass("disabled");
|
||||
}
|
||||
|
||||
|
||||
if(ret.tasks)
|
||||
{
|
||||
for(id in ret.tasks)
|
||||
{
|
||||
if(ret.tasks[id].status)
|
||||
{
|
||||
$("#STATUS_"+id).html(ret.tasks[id].status);
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#STATUS_"+id).html('');
|
||||
}
|
||||
|
||||
if(ret.tasks[id].pid)
|
||||
{
|
||||
$("#PID_"+id).html(ret.tasks[id].pid);
|
||||
|
||||
$("#taskEdit_"+id).addClass("disabled");
|
||||
$("#taskStop_"+id).removeClass("disabled");
|
||||
$("#taskStart_"+id).addClass("disabled");
|
||||
$("#taskDelete_"+id).addClass("disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#PID_"+id).html('-');
|
||||
|
||||
$("#taskEdit_"+id).removeClass("disabled");
|
||||
$("#taskDelete_"+id).removeClass("disabled");
|
||||
|
||||
if(ret.tasks[id].status == 'started' || ret.tasks[id].status == 'torestart')
|
||||
{
|
||||
$("#taskStop_"+id).removeClass("disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#taskStop_"+id).addClass("disabled");
|
||||
}
|
||||
|
||||
if(ret.scheduler && ret.scheduler.pid && !(ret.tasks[id].status == 'started' || ret.tasks[id].status == 'torestart'))
|
||||
{
|
||||
$("#taskStart_"+id).removeClass("disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#taskStart_"+id).addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
if(ret.tasks[id].crashed)
|
||||
{
|
||||
// $("#WARNING_"+id).show().setAttribute("src", "/skins/icons/alert.png");
|
||||
$("#WARNING_"+id).show().attr("title", "crashed "+ret.tasks[id].crashed+" times");
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#WARNING_"+id).hide();
|
||||
}
|
||||
|
||||
if(ret.tasks[id].completed && ret.tasks[id].completed>0 && ret.tasks[id].completed<=100)
|
||||
{
|
||||
$("#COMP_"+id).width(ret.tasks[id].completed + "%");
|
||||
$("#COMPBOX_"+id).show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#COMPBOX_"+id).hide();
|
||||
$("#COMP_"+id).width('0px');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(repeatTimeout > 0)
|
||||
{
|
||||
window.TMTimer = self.setTimeout(function() {pingScheduler(repeatTimeout);}, 1000*repeatTimeout);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
$(".schedMenuItem").bind("click", function() {
|
||||
var action = $(this).attr("id");
|
||||
|
||||
switch(action)
|
||||
{
|
||||
case "schedulerStart":
|
||||
$.ajax({
|
||||
url: "/admin/task-manager/scheduler/start",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
}
|
||||
});
|
||||
break;
|
||||
break;
|
||||
|
||||
case "schedulerStop":
|
||||
$.ajax({
|
||||
url: "/admin/task-manager/scheduler/stop",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "schedulerLog":
|
||||
window.open("/admin/task-manager/scheduler/log", "scheduler_log");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
$(".taskMenuItem").bind("click", function() {
|
||||
if ($(this).hasClass('disabled')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var action = $(this).attr("id").split('_');
|
||||
|
||||
switch(action[0])
|
||||
{
|
||||
case "taskEdit":
|
||||
var a = "/admin/task-manager/task/"+action[1]+"";
|
||||
$("#taskManagerForm").attr("action", a);
|
||||
$("#taskManagerForm").submit();
|
||||
break;
|
||||
|
||||
case "taskStart":
|
||||
// first reset the crash counter, then set to 'tostart'
|
||||
$.ajax({
|
||||
url: "/admin/task-manager/task/"+action[1]+"/resetcrashcounter",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
$.ajax({
|
||||
url: "/admin/task-manager/task/"+action[1]+"/tostart",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {},
|
||||
success: function(data)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "taskStop":
|
||||
$.ajax({
|
||||
url: "/admin/task-manager/task/"+action[1]+"/tostop",
|
||||
type:"GET",
|
||||
dataType:"json",
|
||||
data : {signal:15},
|
||||
success: function(data)
|
||||
{
|
||||
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case "taskDelete":
|
||||
if(confirm("{% trans 'admin::tasks: supprimer la tache ?' %}"))
|
||||
{
|
||||
var a = "/admin/task-manager/task/"+action[1]+"/delete";
|
||||
$("#taskManagerForm").attr("action", a);
|
||||
$("#taskManagerForm").submit();
|
||||
}
|
||||
break;
|
||||
|
||||
case "taskLog":
|
||||
window.open("/admin/task-manager/task/"+action[1]+"/log", "task"+action[1]+"_log");
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
$("#newTaskMenu").bind("change", function() {
|
||||
|
||||
var task_class = $(this).children("option:selected").attr("value");
|
||||
console.log(task_class);
|
||||
|
||||
if(task_class.substr(0,5) == "task_") // sanity check
|
||||
{
|
||||
$("#createTask INPUT[name=\"tcl\"]").attr("value", task_class);
|
||||
$("#createTask").submit();
|
||||
}
|
||||
|
||||
$(this).children("option:first").attr("selected", "selected");
|
||||
});
|
||||
|
||||
|
||||
window.TMTimer = self.setTimeout(function() {pingScheduler(2);}, 100); // loop forever every 2 sec
|
||||
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
Reference in New Issue
Block a user