52 lines
1.6 KiB
PHP
Executable File
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
|
|
));
|
|
|
|
?>
|