cyrilleinvalides/choupas/www/admin/order.php

52 lines
1.6 KiB
PHP
Executable File

<?php
$func = include('includes/auth.php');
$k = Index::get($_REQUEST['model'] . '.PRIMARY')->getData();
$mm = Model::get($_REQUEST['model']);
$model = $mm->getName();
$key = $k['fields'][1];
$p = $mm->getParent();
$clause = ' ';
if ( !empty($_REQUEST['match']) )
foreach ( $_REQUEST['match'] as $k => $v )
$clause .= sprintf(' AND `%1$s` = "%2$s" ', $k, $v);
// reorder
if ( !$p->queryValue(sprintf('SELECT ( COUNT(DISTINCT position) = COUNT(*) ) AND ( MIN(position) = 0 ) FROM %1$s WHERE 1 %2$s', $model, $clause)) ) {
$lst = $p->queryList(sprintf('SELECT id FROM %1$s WHERE 1 %2$s ORDER BY position', $model, $clause));
//~ while ( !$lst[0]['position'] )
//~ array_push($lst, array_shift($lst));
foreach ( $lst as $poss => $item )
$p->query(sprintf('UPDATE %1$s SET position = %4$s WHERE id = %3$s %2$s ORDER BY position', $model, $clause, $item['id'], $poss));
}
$result = $p->query(sprintf(
'SELECT * FROM %1$s WHERE %3$s = %2$u LIMIT 1;',
$model,
$_REQUEST['id'],
$key
));
$pos = $result[0][0]['position'];
if ( $pos < $_REQUEST['position'] )
$presql = 'UPDATE %4$s SET position = position - 1 WHERE %2$s < position AND position < %3$u + 1 ' . $clause;
else $presql = 'UPDATE %4$s SET position = position + 1 WHERE %3$s - 1 < position AND position < %2$u ' . $clause;
if ( $pos !== $_GET['position'] )
$p->query(sprintf(
$presql . ';' .
'UPDATE %4$s SET position = %3$s WHERE %5$s = %1$s;',
$_REQUEST['id'],
$pos,
$_REQUEST['position'],
$model,
$key
));
?>