mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 20:43:25 +00:00
Fix Basket/Story sorting
This commit is contained in:
@@ -278,6 +278,48 @@ class Basket implements ControllerProviderInterface
|
|||||||
);
|
);
|
||||||
})->assert('basket_id', '\d+');
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
|
|
||||||
|
$controllers->post(
|
||||||
|
'/{basket_id}/reorder/'
|
||||||
|
, function(Application $app, $basket_id)
|
||||||
|
{
|
||||||
|
$ret = array('success' => false, 'message' => _('An error occured'));
|
||||||
|
try
|
||||||
|
{
|
||||||
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
|
$em = $app['Core']->getEntityManager();
|
||||||
|
|
||||||
|
$basket = $em->getRepository('\Entities\Basket')
|
||||||
|
->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser(), true);
|
||||||
|
|
||||||
|
|
||||||
|
$order = $app['request']->get('element');
|
||||||
|
|
||||||
|
|
||||||
|
/* @var $basket \Entities\Basket */
|
||||||
|
foreach ($basket->getElements() as $basketElement)
|
||||||
|
{
|
||||||
|
if (isset($order[$basketElement->getId()]))
|
||||||
|
{
|
||||||
|
$basketElement->setOrd($order[$basketElement->getId()]);
|
||||||
|
|
||||||
|
$em->merge($basketElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$em->flush();
|
||||||
|
$ret = array('success' => true, 'message' => _('Basket updated'));
|
||||||
|
}
|
||||||
|
catch (\Exception $e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
$Serializer = $app['Core']['Serializer'];
|
||||||
|
|
||||||
|
return new Response($Serializer->serialize($ret, 'json'), 200, array('Content-type' => 'application/json'));
|
||||||
|
})->assert('basket_id', '\d+');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggle the status of a Basket
|
* Toggle the status of a Basket
|
||||||
*
|
*
|
||||||
|
@@ -20,7 +20,8 @@ use Symfony\Component\HttpFoundation\Request,
|
|||||||
Symfony\Component\HttpKernel\Exception\HttpException,
|
Symfony\Component\HttpKernel\Exception\HttpException,
|
||||||
Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Alchemy\Phrasea\RouteProcessor\Basket as BasketRoute,
|
use Alchemy\Phrasea\RouteProcessor\Basket as BasketRoute,
|
||||||
Alchemy\Phrasea\Helper;
|
Alchemy\Phrasea\Helper,
|
||||||
|
Alchemy\Phrasea\Controller\Exception as ControllerException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -226,108 +227,94 @@ class Story implements ControllerProviderInterface
|
|||||||
->assert('child_sbas_id', '\d+')
|
->assert('child_sbas_id', '\d+')
|
||||||
->assert('child_record_id', '\d+');
|
->assert('child_record_id', '\d+');
|
||||||
|
|
||||||
// $controllers->post('/{basket_id}/delete/', function(Application $app, Request $request, $basket_id)
|
|
||||||
// {
|
/**
|
||||||
// $em = $app['Core']->getEntityManager();
|
* Get the Basket reorder form
|
||||||
//
|
*/
|
||||||
// $basket = $em->getRepository('\Entities\Basket')
|
$controllers->get(
|
||||||
// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser());
|
'/{sbas_id}/{record_id}/reorder/'
|
||||||
//
|
, function(Application $app, $sbas_id, $record_id)
|
||||||
// $em->remove($basket);
|
{
|
||||||
// $em->flush();
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
//
|
$em = $app['Core']->getEntityManager();
|
||||||
// $data = array(
|
|
||||||
// 'success' => true
|
$story = new \record_adapter($sbas_id, $record_id);
|
||||||
// , 'message' => _('Basket has been deleted')
|
|
||||||
// );
|
if (!$story->is_grouping())
|
||||||
//
|
{
|
||||||
// if ($request->getRequestFormat() == 'json')
|
throw new \Exception('This is not a story');
|
||||||
// {
|
}
|
||||||
//
|
|
||||||
// $datas = $app['Core']['Serializer']->serialize($data, 'json');
|
/* @var $twig \Twig_Environment */
|
||||||
//
|
$twig = $app['Core']->getTwig();
|
||||||
// return new Response($datas, 200, array('Content-type' => 'application/json'));
|
|
||||||
// }
|
return new Response(
|
||||||
// else
|
$twig->render(
|
||||||
// {
|
'prod/Story/Reorder.html.twig'
|
||||||
// return new RedirectResponse('/');
|
, array('story' => $story)
|
||||||
// }
|
)
|
||||||
// });
|
);
|
||||||
//
|
})
|
||||||
//
|
->assert('sbas_id', '\d+')
|
||||||
//
|
->assert('record_id', '\d+');
|
||||||
//
|
|
||||||
// $controllers->post('/{basket_id}/update/', function(Application $app, Request $request, $basket_id)
|
|
||||||
// {
|
$controllers->post(
|
||||||
// $em = $app['Core']->getEntityManager();
|
'/{sbas_id}/{record_id}/reorder/'
|
||||||
//
|
, function(Application $app, $sbas_id, $record_id)
|
||||||
// $basket = $em->getRepository('\Entities\Basket')
|
{
|
||||||
// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser());
|
$ret = array('success' => false, 'message' => _('An error occured'));
|
||||||
//
|
try
|
||||||
// $basket->setName($request->get('name'));
|
{
|
||||||
// $basket->setDescription($request->get('description'));
|
$user = $app['Core']->getAuthenticatedUser();
|
||||||
//
|
/* @var $user \User_Adapter */
|
||||||
// $em->merge($basket);
|
|
||||||
// $em->flush();
|
$story = new \record_adapter($sbas_id, $record_id);
|
||||||
//
|
|
||||||
// $data = array(
|
if (!$story->is_grouping())
|
||||||
// 'success' => true
|
{
|
||||||
// , 'message' => _('Basket has been updated')
|
throw new \Exception('This is not a story');
|
||||||
// , 'basket' => array('id' => $basket->getId())
|
}
|
||||||
// );
|
|
||||||
//
|
if (!$user->ACL()->has_right_on_base($story->get_base_id(), 'canmodifrecord'))
|
||||||
// if ($request->getRequestFormat() == 'json')
|
{
|
||||||
// {
|
throw new ControllerException(_('You can not edit this story'));
|
||||||
//
|
}
|
||||||
// $datas = $app['Core']['Serializer']->serialize($data, 'json');
|
|
||||||
//
|
$sql = 'UPDATE regroup SET ord = :ord
|
||||||
// return new Response($datas, 200, array('Content-type' => 'application/json'));
|
WHERE rid_parent = :parent_id AND rid_child = :children_id';
|
||||||
// }
|
$stmt = $story->get_databox()->get_connection()->prepare($sql);
|
||||||
// else
|
|
||||||
// {
|
foreach ($app['request']->get('element') as $record_id => $ord)
|
||||||
// return new RedirectResponse('/');
|
{
|
||||||
// }
|
$params = array(
|
||||||
// });
|
':ord' => $ord,
|
||||||
//
|
':parent_id' => $story->get_record_id(),
|
||||||
//
|
':children_id' => $record_id
|
||||||
// $controllers->get('/{basket_id}/update/', function(Application $app, $basket_id)
|
);
|
||||||
// {
|
$stmt->execute($params);
|
||||||
// /* @var $em \Doctrine\ORM\EntityManager */
|
}
|
||||||
// $em = $app['Core']->getEntityManager();
|
|
||||||
//
|
$stmt->closeCursor();
|
||||||
// $basket = $em->getRepository('\Entities\Basket')
|
|
||||||
// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser());
|
$ret = array('success' => true, 'message' => _('Story updated'));
|
||||||
//
|
}
|
||||||
// $twig = new \supertwig();
|
catch (ControllerException $e)
|
||||||
//
|
{
|
||||||
// return new Response(
|
$ret = array('success' => false, 'message' => $e->getMessage());
|
||||||
// $twig->render(
|
}
|
||||||
// 'prod/Baskets/Update.html.twig'
|
catch (\Exception $e)
|
||||||
// , array('basket' => $basket)
|
{
|
||||||
// )
|
|
||||||
// );
|
}
|
||||||
// });
|
|
||||||
//
|
$Serializer = $app['Core']['Serializer'];
|
||||||
//
|
|
||||||
// $controllers->get(
|
return new Response($Serializer->serialize($ret, 'json'), 200, array('Content-type' => 'application/json'));
|
||||||
// '/{basket_id}/reorder/'
|
})
|
||||||
// , function(Application $app, $basket_id)
|
->assert('sbas_id', '\d+')
|
||||||
// {
|
->assert('record_id', '\d+');
|
||||||
// /* @var $em \Doctrine\ORM\EntityManager */
|
|
||||||
// $em = $app['Core']->getEntityManager();
|
|
||||||
//
|
|
||||||
// $basket = $em->getRepository('\Entities\Basket')
|
|
||||||
// ->findUserBasket($basket_id, $app['Core']->getAuthenticatedUser());
|
|
||||||
//
|
|
||||||
// $twig = new \supertwig();
|
|
||||||
//
|
|
||||||
// return new Response(
|
|
||||||
// $twig->render(
|
|
||||||
// 'prod/Baskets/Reorder.html.twig'
|
|
||||||
// , array('basket' => $basket)
|
|
||||||
// )
|
|
||||||
// );
|
|
||||||
// });
|
|
||||||
|
|
||||||
return $controllers;
|
return $controllers;
|
||||||
}
|
}
|
||||||
|
@@ -47,11 +47,11 @@ class BasketRepository extends EntityRepository
|
|||||||
|
|
||||||
if ($sort == 'date')
|
if ($sort == 'date')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.created DESC';
|
$dql .= ' ORDER BY b.created DESC, e.ord ASC';
|
||||||
}
|
}
|
||||||
elseif ($sort == 'name')
|
elseif ($sort == 'name')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.name ASC';
|
$dql .= ' ORDER BY b.name ASC, e.ord ASC';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
@@ -81,7 +81,8 @@ class BasketRepository extends EntityRepository
|
|||||||
(b.usr_id = :usr_id_owner AND b.is_read = false)
|
(b.usr_id = :usr_id_owner AND b.is_read = false)
|
||||||
OR (b.usr_id != :usr_id_ownertwo AND p.usr_id = :usr_id_participant
|
OR (b.usr_id != :usr_id_ownertwo AND p.usr_id = :usr_id_participant
|
||||||
AND p.is_aware = false)
|
AND p.is_aware = false)
|
||||||
)';
|
)
|
||||||
|
ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$params = array(
|
$params = array(
|
||||||
'usr_id_owner' => $user->get_id(),
|
'usr_id_owner' => $user->get_id(),
|
||||||
@@ -119,11 +120,11 @@ class BasketRepository extends EntityRepository
|
|||||||
|
|
||||||
if ($sort == 'date')
|
if ($sort == 'date')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.created DESC';
|
$dql .= ' ORDER BY b.created DESC, e.ord ASC';
|
||||||
}
|
}
|
||||||
elseif ($sort == 'name')
|
elseif ($sort == 'name')
|
||||||
{
|
{
|
||||||
$dql .= ' ORDER BY b.name ASC';
|
$dql .= ' ORDER BY b.name ASC, e.ord ASC';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
@@ -151,7 +152,8 @@ class BasketRepository extends EntityRepository
|
|||||||
LEFT JOIN e.validation_datas v
|
LEFT JOIN e.validation_datas v
|
||||||
LEFT JOIN b.validation s
|
LEFT JOIN b.validation s
|
||||||
LEFT JOIN s.participants p
|
LEFT JOIN s.participants p
|
||||||
WHERE b.id = :basket_id';
|
WHERE b.id = :basket_id
|
||||||
|
ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
$query->setParameters(array('basket_id' => $basket_id));
|
$query->setParameters(array('basket_id' => $basket_id));
|
||||||
@@ -199,7 +201,8 @@ class BasketRepository extends EntityRepository
|
|||||||
FROM Entities\Basket b
|
FROM Entities\Basket b
|
||||||
JOIN b.elements e
|
JOIN b.elements e
|
||||||
WHERE e.record_id = :record_id AND e.sbas_id = e.sbas_id
|
WHERE e.record_id = :record_id AND e.sbas_id = e.sbas_id
|
||||||
AND b.usr_id = :usr_id';
|
AND b.usr_id = :usr_id
|
||||||
|
ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$params = array(
|
$params = array(
|
||||||
'record_id' => $record->get_record_id(),
|
'record_id' => $record->get_record_id(),
|
||||||
@@ -282,6 +285,8 @@ class BasketRepository extends EntityRepository
|
|||||||
$params['description'] = '%' . $query . '%';
|
$params['description'] = '%' . $query . '%';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dql .= ' ORDER BY e.ord ASC';
|
||||||
|
|
||||||
$query = $this->_em->createQuery($dql);
|
$query = $this->_em->createQuery($dql);
|
||||||
$query->setParameters($params);
|
$query->setParameters($params);
|
||||||
|
|
||||||
|
@@ -1,5 +1,15 @@
|
|||||||
{% import 'common/thumbnail.html' as thumbnail %}
|
{% import 'common/thumbnail.html' as thumbnail %}
|
||||||
|
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
||||||
|
<span>{% trans 'Reordonner automatiquement' %}</span>
|
||||||
|
<select id="auto_order">
|
||||||
|
<option value="">{% trans 'Choisir' %}</option>
|
||||||
|
<option value="default">{% trans 'Re-initialiser' %}</option>
|
||||||
|
<option value="title">{% trans 'Titre' %}</option>
|
||||||
|
</select>
|
||||||
|
<button type="button" class="autoorder">{% trans 'Re-ordonner' %}</button>
|
||||||
|
<button type="button" class="reverseorder">{% trans 'Inverser' %}</button>
|
||||||
|
</div>
|
||||||
|
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB">
|
||||||
<div class="elements">
|
<div class="elements">
|
||||||
{% for element in basket.getElements() %}
|
{% for element in basket.getElements() %}
|
||||||
<div id="ORDER_{{ element.getId() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
<div id="ORDER_{{ element.getId() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
||||||
@@ -21,13 +31,129 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
<button>{% trans 'boutton::valider' %}</button>
|
<button>{% trans 'boutton::valider' %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
var container = $('#DIALOG');
|
var container = p4.Dialog.get(1).getDomElement();
|
||||||
|
|
||||||
|
|
||||||
|
$('button.autoorder', container).bind('click', function(){
|
||||||
|
autoorder();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$('button.reverseorder', container).bind('click', function(){
|
||||||
|
reverse_order();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function autoorder()
|
||||||
|
{
|
||||||
|
var val = $.trim($('#auto_order').val());
|
||||||
|
if(val == '')
|
||||||
|
return;
|
||||||
|
|
||||||
|
var sorter = {};
|
||||||
|
|
||||||
|
$('#reorder_box .diapo form').each(function(i,n){
|
||||||
|
var id = $('input[name=id]',n).val();
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'title':
|
||||||
|
default:
|
||||||
|
var data = $('input[name=title]',n).val();
|
||||||
|
break;
|
||||||
|
case 'default':
|
||||||
|
var data = $('input[name=default]',n).val();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sorter[id] = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
var data_type = 'string';
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'default':
|
||||||
|
var data_type = 'integer';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sorter = arraySortByValue(sorter, data_type);
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
for(i in sorter)
|
||||||
|
{
|
||||||
|
var elem = $('#ORDER_'+i);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertAfter(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').prepend(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function arraySortByValue(datas, data_type) {
|
||||||
|
|
||||||
|
var tmp = new Array();
|
||||||
|
for (i in datas) {
|
||||||
|
tmp.push({
|
||||||
|
v: i,
|
||||||
|
c: datas[i].toUpperCase(),
|
||||||
|
o: datas[i]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
switch(data_type)
|
||||||
|
{
|
||||||
|
case 'string':
|
||||||
|
tmp.sort(function (x, y) {
|
||||||
|
return y.c < x.c;
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 'integer':
|
||||||
|
tmp.sort(function (x, y) {
|
||||||
|
return parseInt(y.c) < parseInt(x.c);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var out = {};
|
||||||
|
for (i in tmp) {
|
||||||
|
out[tmp[i].v] = tmp[i].o;
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function reverse_order()
|
||||||
|
{
|
||||||
|
var elems = $('#reorder_box .diapo');
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
elems.each(function(i,n){
|
||||||
|
var elem = $(n);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertBefore(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').append(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('.elements', container).sortable({
|
$('.elements', container).sortable({
|
||||||
appendTo : container,
|
appendTo : container,
|
||||||
@@ -118,17 +244,24 @@
|
|||||||
|
|
||||||
}).disableSelection();
|
}).disableSelection();
|
||||||
|
|
||||||
var OrderSelection = new Selectable($('#DIALOG .elements'), {
|
var OrderSelection = new Selectable($('.elements', container), {
|
||||||
selector : '.CHIM'
|
selector : '.CHIM'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$('#DIALOG form[name="reorder"]').bind('submit', function(event){
|
$('form[name="reorder"]', container).bind('submit', function(event){
|
||||||
|
|
||||||
//$this.SetLoader(true);
|
//$this.SetLoader(true);
|
||||||
|
|
||||||
|
|
||||||
var $form = $(this);
|
var $form = $(this);
|
||||||
|
|
||||||
|
$('.elements form', container).each(function(i, el){
|
||||||
|
var id = $('input[name="id"]', $(el)).val();
|
||||||
|
|
||||||
|
$('input[name="element[' + id + ']"]', $form).val(i+1);
|
||||||
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: $form.attr('method'),
|
type: $form.attr('method'),
|
||||||
url: $form.attr('action'),
|
url: $form.attr('action'),
|
||||||
@@ -138,9 +271,12 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
success: function(data){
|
success: function(data){
|
||||||
|
if(!data.success)
|
||||||
|
{
|
||||||
|
alert(data.message);
|
||||||
|
}
|
||||||
p4.WorkZone.refresh('current');
|
p4.WorkZone.refresh('current');
|
||||||
$('#DIALOG').dialog('close').empty();
|
p4.Dialog.get(1).Close();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
294
templates/web/prod/Story/Reorder.html.twig
Normal file
294
templates/web/prod/Story/Reorder.html.twig
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
{% import 'common/thumbnail.html' as thumbnail %}
|
||||||
|
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
||||||
|
<span>{% trans 'Reordonner automatiquement' %}</span>
|
||||||
|
<select id="auto_order">
|
||||||
|
<option value="">{% trans 'Choisir' %}</option>
|
||||||
|
<option value="default">{% trans 'Re-initialiser' %}</option>
|
||||||
|
<option value="title">{% trans 'Titre' %}</option>
|
||||||
|
</select>
|
||||||
|
<button type="button" class="autoorder">{% trans 'Re-ordonner' %}</button>
|
||||||
|
<button type="button" class="reverseorder">{% trans 'Inverser' %}</button>
|
||||||
|
</div>
|
||||||
|
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB">
|
||||||
|
<div class="elements">
|
||||||
|
{% for element in story.get_children() %}
|
||||||
|
<div id="ORDER_{{ element.get_record_id() }}" class="CHIM diapo" style="height:130px;overflow:hidden;">
|
||||||
|
<div class="title" title="{{ element.get_title() }}" style="position:relative;z-index:1200;height:30px;overflow:visible;text-align:center;">
|
||||||
|
<span>{{ element.get_title() }}</span>
|
||||||
|
{{ thumbnail.format(element.get_thumbnail(), 80, 80, '', session) }}
|
||||||
|
<form style="display:none;">
|
||||||
|
<input type="hidden" name="id" value="{{ element.get_record_id() }}"/>
|
||||||
|
<input type="hidden" name="title" value="{{ element.get_title() }}"/>
|
||||||
|
<input type="hidden" name="default" value="{{ element.get_number() }}"/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<form name="reorder" method="POST" action="/prod/story/{{story.get_sbas_id() }}/{{story.get_record_id() }}/reorder/">
|
||||||
|
{% for element in story.get_children() %}
|
||||||
|
<input type="hidden" name="element[{{ element.get_record_id() }}]" value="{{ element.get_number() }}"/>
|
||||||
|
{% endfor %}
|
||||||
|
<button>{% trans 'boutton::valider' %}</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
var container = p4.Dialog.get(1).getDomElement();
|
||||||
|
|
||||||
|
|
||||||
|
$('button.autoorder', container).bind('click', function(){
|
||||||
|
autoorder();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$('button.reverseorder', container).bind('click', function(){
|
||||||
|
reverse_order();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
function autoorder()
|
||||||
|
{
|
||||||
|
var val = $.trim($('#auto_order').val());
|
||||||
|
if(val == '')
|
||||||
|
return;
|
||||||
|
|
||||||
|
var sorter = {};
|
||||||
|
|
||||||
|
$('#reorder_box .diapo form').each(function(i,n){
|
||||||
|
var id = $('input[name=id]',n).val();
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'title':
|
||||||
|
default:
|
||||||
|
var data = $('input[name=title]',n).val();
|
||||||
|
break;
|
||||||
|
case 'default':
|
||||||
|
var data = $('input[name=default]',n).val();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sorter[id] = data;
|
||||||
|
});
|
||||||
|
|
||||||
|
var data_type = 'string';
|
||||||
|
|
||||||
|
switch(val)
|
||||||
|
{
|
||||||
|
case 'default':
|
||||||
|
var data_type = 'integer';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sorter = arraySortByValue(sorter, data_type);
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
for(i in sorter)
|
||||||
|
{
|
||||||
|
var elem = $('#ORDER_'+i);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertAfter(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').prepend(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function arraySortByValue(datas, data_type) {
|
||||||
|
|
||||||
|
var tmp = new Array();
|
||||||
|
for (i in datas) {
|
||||||
|
tmp.push({
|
||||||
|
v: i,
|
||||||
|
c: datas[i].toUpperCase(),
|
||||||
|
o: datas[i]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
switch(data_type)
|
||||||
|
{
|
||||||
|
case 'string':
|
||||||
|
tmp.sort(function (x, y) {
|
||||||
|
return y.c < x.c;
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 'integer':
|
||||||
|
tmp.sort(function (x, y) {
|
||||||
|
return parseInt(y.c) < parseInt(x.c);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var out = {};
|
||||||
|
for (i in tmp) {
|
||||||
|
out[tmp[i].v] = tmp[i].o;
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function reverse_order()
|
||||||
|
{
|
||||||
|
var elems = $('#reorder_box .diapo');
|
||||||
|
|
||||||
|
var last_moved = false;
|
||||||
|
|
||||||
|
elems.each(function(i,n){
|
||||||
|
var elem = $(n);
|
||||||
|
if(last_moved)
|
||||||
|
{
|
||||||
|
elem.insertBefore(last_moved);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#reorder_box .elements').append(elem);
|
||||||
|
}
|
||||||
|
last_moved = elem;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.elements', container).sortable({
|
||||||
|
appendTo : container,
|
||||||
|
placeholder: 'diapo ui-sortable-placeholder',
|
||||||
|
distance:20,
|
||||||
|
cursorAt: {
|
||||||
|
top:10,
|
||||||
|
left:-20
|
||||||
|
},
|
||||||
|
items:'div.diapo',
|
||||||
|
scroll:true,
|
||||||
|
scrollSensitivity:40,
|
||||||
|
scrollSpeed:30,
|
||||||
|
start:function(event, ui){
|
||||||
|
var selected = $('.selected',container);
|
||||||
|
|
||||||
|
selected.each(function(i,n){
|
||||||
|
$(n).attr('position',i);
|
||||||
|
});
|
||||||
|
|
||||||
|
var n = selected.length - 1;
|
||||||
|
|
||||||
|
$('.selected:visible', container).hide();
|
||||||
|
|
||||||
|
while(n > 0)
|
||||||
|
{
|
||||||
|
$('<div style="height:130px;" class="diapo ui-sortable-placeholderfollow"></div>').insertAfter($('.diapo.ui-sortable-placeholder', cont));
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stop:function(event, ui){
|
||||||
|
|
||||||
|
$('.diapo.ui-sortable-placeholderfollow', container).remove();
|
||||||
|
|
||||||
|
var main_id = $(ui.item[0]).attr('id');
|
||||||
|
|
||||||
|
var selected = $('.selected',container);
|
||||||
|
var sorter = new Array();
|
||||||
|
|
||||||
|
|
||||||
|
selected.each(function(i,n){
|
||||||
|
|
||||||
|
var position = parseInt($(n).attr('position'));
|
||||||
|
|
||||||
|
if(position !== '')
|
||||||
|
{
|
||||||
|
sorter[position] = $(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = $(n).attr('id');
|
||||||
|
if(id == main_id)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var before = true;
|
||||||
|
var last_moved = $(ui.item[0]);
|
||||||
|
$(sorter).each(function(i,n){
|
||||||
|
$(n).show().removeAttr('position');
|
||||||
|
if($(n).attr('id') == main_id)
|
||||||
|
{
|
||||||
|
before = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(before)
|
||||||
|
$(n).insertBefore($(ui.item[0]));
|
||||||
|
else
|
||||||
|
$(n).insertAfter($(last_moved));
|
||||||
|
|
||||||
|
}
|
||||||
|
last_moved = sorter[i];
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
change:function(){
|
||||||
|
$('.diapo.ui-sortable-placeholderfollow', container).remove();
|
||||||
|
|
||||||
|
var n = OrderSelection.length() - 1 ;
|
||||||
|
while(n > 0)
|
||||||
|
{
|
||||||
|
$('<div style="height:130px;" class="diapo ui-sortable-placeholderfollow"></div>').insertAfter($('.diapo.ui-sortable-placeholder', container));
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}).disableSelection();
|
||||||
|
|
||||||
|
var OrderSelection = new Selectable($('.elements', container), {
|
||||||
|
selector : '.CHIM'
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('form[name="reorder"]', container).bind('submit', function(event){
|
||||||
|
|
||||||
|
//$this.SetLoader(true);
|
||||||
|
|
||||||
|
|
||||||
|
var $form = $(this);
|
||||||
|
|
||||||
|
$('.elements form', container).each(function(i, el){
|
||||||
|
var id = $('input[name="id"]', $(el)).val();
|
||||||
|
|
||||||
|
$('input[name="element[' + id + ']"]', $form).val(i+1);
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: $form.attr('method'),
|
||||||
|
url: $form.attr('action'),
|
||||||
|
data: $form.serializeArray(),
|
||||||
|
dataType: 'json',
|
||||||
|
beforeSend:function(){
|
||||||
|
|
||||||
|
},
|
||||||
|
success: function(data){
|
||||||
|
if(!data.success)
|
||||||
|
{
|
||||||
|
alert(data.message);
|
||||||
|
}
|
||||||
|
p4.WorkZone.refresh('current', null, false, 'story');
|
||||||
|
p4.Dialog.get(1).Close();
|
||||||
|
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
error: function(){
|
||||||
|
|
||||||
|
},
|
||||||
|
timeout: function(){
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
@@ -1091,18 +1091,6 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="dialog_dwnl" title="{% trans 'action : exporter' %}" style="display:none;"></div>
|
<div id="dialog_dwnl" title="{% trans 'action : exporter' %}" style="display:none;"></div>
|
||||||
<div title="{% trans 'Re-ordonner' %}" id="reorder_dialog" style="position:relative;overflow:hidden;">
|
|
||||||
<div id="reorder_options" class="PNB" style="height:30px;bottom:auto;">
|
|
||||||
<span>{% trans 'Reordonner automatiquement' %}</span>
|
|
||||||
<select id="auto_order">
|
|
||||||
<option value="">{% trans 'Choisir' %}</option>
|
|
||||||
<option value="default">{% trans 'Re-initialiser' %}</option>
|
|
||||||
<option value="title">{% trans 'Titre' %}</option>
|
|
||||||
</select>
|
|
||||||
<input type="button" onclick="autoorder();return false;" value="{% trans 'Re-ordonner' %}"/>
|
|
||||||
<input type="button" onclick="reverse_order();return false;" value="{% trans 'Inverser' %}" style="float:right;"/></div>
|
|
||||||
<div style="top:30px;overflow:auto;" id="reorder_box" class="PNB loading"></div>
|
|
||||||
</div>
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% include "prod/thesaurus.js" %}
|
{% include "prod/thesaurus.js" %}
|
||||||
</script>
|
</script>
|
||||||
|
@@ -3083,59 +3083,6 @@ function autoorder()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function arraySortByValue(datas, data_type) {
|
|
||||||
|
|
||||||
var tmp = new Array();
|
|
||||||
for (i in datas) {
|
|
||||||
tmp.push({
|
|
||||||
v: i,
|
|
||||||
c: datas[i].toUpperCase(),
|
|
||||||
o: datas[i]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
switch(data_type)
|
|
||||||
{
|
|
||||||
case 'string':
|
|
||||||
tmp.sort(function (x, y) {
|
|
||||||
return y.c < x.c;
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
case 'integer':
|
|
||||||
tmp.sort(function (x, y) {
|
|
||||||
return parseInt(y.c) < parseInt(x.c);
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var out = new Array();
|
|
||||||
for (i in tmp) {
|
|
||||||
out[tmp[i].v] = tmp[i].o;
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function reverse_order()
|
|
||||||
{
|
|
||||||
var elems = $('#reorder_box .diapo');
|
|
||||||
|
|
||||||
var last_moved = false;
|
|
||||||
|
|
||||||
elems.each(function(i,n){
|
|
||||||
var elem = $(n);
|
|
||||||
if(last_moved)
|
|
||||||
{
|
|
||||||
elem.insertBefore(last_moved);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$('#reorder_box').append(elem);
|
|
||||||
}
|
|
||||||
last_moved = elem;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_up_feed_box(data)
|
function set_up_feed_box(data)
|
||||||
{
|
{
|
||||||
var $feed_box = $('#modal_feed');
|
var $feed_box = $('#modal_feed');
|
||||||
|
Reference in New Issue
Block a user