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 )); ?>