I solved with the following code,
At Admin class
public function getTemplate($name) {
switch ($name) {
case 'list': return 'admin/backend/contact/contact_batch_reply.html.twig';
break;
default : return parent::getTemplate($name);
break;
}
}
and at admin/backend/contact/contact_batch_reply.html.twig
{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %}
{% block batch_actions %}
<label class="checkbox" for="{{ admin.uniqid }}_all_elements">
<input type="checkbox" name="all_elements" id="{{ admin.uniqid }}_all_elements"/>
{{ 'all_elements'|trans({},'SonataAdminBundle') }} ({{ admin.datagrid.pager.nbresults }})
</label>
<div id="fz_reply_msg" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button>
<h4 class="modal-title">Replay Message</h4>
</div>
<div class="modal-body">
<div class="box box-success">
<div class="box-header"><h3 class="box-title">Message: </h3></div>
<div class="box-body">
<div class="fz_reply_msg form-group col-xs-12">{{ form_widget(actionForm.msg) }}</div>
<div class="clearfix"></div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="fz_reply_msg_submit" class="btn btn-primary" type="submit">Submit</button>
<button class="btn btn-default" type="reset">Clear</button>
</div>
</div>
</div>
</div>
<select name="action" style="width:auto;height: auto" class="form-control">
{% for action, options in batchactions %}
<option value="{{ action }}">{{ options.label }}</option>
{% endfor %}
</select>
{% endblock batch_actions %}
JQuery code
$('input[type=submit]').click(function (e) {
e.preventDefault();
var value = $('select[name="action"] option:selected').val();
if (value === 'batchReply') {
$('#fz_reply_msg').modal('show');
}
});
$('button[type=submit]').click(function () {
var v = $('textarea#msg').val();
if ((v !== null) && (v.length > 0)) {
return true;
} else {
$('textarea#msg').select();
return false;
}
});
and at custom CRUDController class
public function batchActionBatchReply(ProxyQueryInterface $selectedModelQuery) {
if (!$this->admin->isGranted('EDIT')) {
throw new AccessDeniedException();
}
$selectedModels = $selectedModelQuery->execute();
$r = [];
try {
foreach ($selectedModels as $selectedModel) {
$r = [$selectedModel->getName() => $selectedModel->getEmail()];
}
} catch (\Exception $e) {
$this->addFlash('sonata_flash_error', 'ERROR : ' . $e->getMessage());
return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters()));
}
// PROCESS CODE ...
$this->addFlash('sonata_flash_success', 'The selected items has been Replayed');
return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters()));
}