1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-06 03:49:56 +02:00

Playlist reordering with drag'n drop working.

This commit is contained in:
SUTJael 2013-11-28 23:14:28 +01:00
parent 0599214703
commit 2e1ae29f17
7 changed files with 76 additions and 67 deletions

View file

@ -319,10 +319,10 @@ class Playlist extends playlist_object
* update_track_number * update_track_number
* This takes a playlist_data.id and a track (int) and updates the track value * This takes a playlist_data.id and a track (int) and updates the track value
*/ */
public function update_track_number($track_id,$track) public function update_track_number($track_id, $index)
{ {
$sql = "UPDATE `playlist_data` SET `track` = ? WHERE `id` = ? AND `playlist` = ?"; $sql = "UPDATE `playlist_data` SET `track` = ? WHERE `id` = ?";
$db_results = Dba::write($sql, array($track, $track_id, $this->id)); $db_results = Dba::write($sql, array($index, $track_id));
} // update_track_number } // update_track_number
@ -417,8 +417,7 @@ class Playlist extends playlist_object
} // end while results } // end while results
foreach ($results as $data) { foreach ($results as $data) {
$sql = "UPDATE `playlist_data` SET `track` = ? WHERE `id` = ?"; self::update_track_number($data['id'], $data['track']);
$db_results = Dba::write($sql, array($data['track'], $data['id']));
} // foreach re-ordered results } // foreach re-ordered results
return true; return true;

View file

@ -108,20 +108,29 @@ function check_inline_song_edit(type, song) {
$(document).ready(function () { $(document).ready(function () {
$('#sortableplaylist').sortable({ $('#sortableplaylist').sortable({
axis: 'y', axis: 'y',
delay: 200, delay: 200
start: function (event, ui) {
$(ui.item).data("startindex", ui.item.index());
},
stop: function (event, ui) {
playlistUpdatedIndex(ui.item);
}
}); });
}); });
function playlistUpdatedIndex(item) { function submitPlaylistOrder(playlistUrl, tableid) {
var startIndex = item.data("startindex");
var newIndex = item.index(); var table = document.getElementById(tableid);
if (newIndex != startIndex) { var rowLength = table.rows.length;
alert('Start index {' + startIndex + '} Stop index {' + newIndex + '}'); var finalOrder = '';
for (var i = 0; i < rowLength; ++i) {
var row = table.rows[i];
if (row.id != '') {
var songid = row.id.replace('track_', '');
finalOrder += songid + ";"
}
}
if (finalOrder != '') {
$.ajax({
url : playlistUrl,
type : 'GET',
data : 'order=' + finalOrder
});
} }
} }

View file

@ -37,7 +37,6 @@ if ($_REQUEST['action'] == 'delete_playlist') {
UI::show_header(); UI::show_header();
/* Switch on the action passed in */ /* Switch on the action passed in */
switch ($_REQUEST['action']) { switch ($_REQUEST['action']) {
case 'add_dyn_song': case 'add_dyn_song':
@ -49,7 +48,6 @@ switch ($_REQUEST['action']) {
$playlist->add_dyn_song(); $playlist->add_dyn_song();
$_SESSION['data']['playlist_id'] = $playlist->id; $_SESSION['data']['playlist_id'] = $playlist->id;
show_playlist($playlist);
break; break;
case 'create_playlist': case 'create_playlist':
/* Check rights */ /* Check rights */
@ -61,9 +59,9 @@ switch ($_REQUEST['action']) {
$playlist_name = scrub_in($_REQUEST['playlist_name']); $playlist_name = scrub_in($_REQUEST['playlist_name']);
$playlist_type = scrub_in($_REQUEST['type']); $playlist_type = scrub_in($_REQUEST['type']);
$playlist->create($playlist_name,$playlist_type); $playlist->create($playlist_name, $playlist_type);
$_SESSION['data']['playlist_id'] = $playlist->id; $_SESSION['data']['playlist_id'] = $playlist->id;
show_confirmation(T_('Playlist Created'), sprintf(T_('%1$s (%2$s) has been created'), $playlist_name, $playlist_type),'playlist.php'); show_confirmation(T_('Playlist Created'), sprintf(T_('%1$s (%2$s) has been created'), $playlist_name, $playlist_type), 'playlist.php');
break; break;
case 'delete_playlist': case 'delete_playlist':
// If we made it here, we didn't have sufficient rights. // If we made it here, we didn't have sufficient rights.
@ -76,7 +74,6 @@ switch ($_REQUEST['action']) {
break; break;
} }
$playlist->remove_songs($_REQUEST['song']); $playlist->remove_songs($_REQUEST['song']);
show_playlist($playlist);
break; break;
case 'show_playlist': case 'show_playlist':
$playlist = new Playlist($_REQUEST['playlist_id']); $playlist = new Playlist($_REQUEST['playlist_id']);
@ -115,20 +112,34 @@ switch ($_REQUEST['action']) {
show_confirmation($title, $body, Config::get('web_path') . '/playlist.php?action=' . $url); show_confirmation($title, $body, Config::get('web_path') . '/playlist.php?action=' . $url);
break; break;
case 'set_track_numbers': case 'set_track_numbers':
debug_event('playlist', 'Set track numbers called.', '5');
$playlist = new Playlist($_REQUEST['playlist_id']);
/* Make sure they have permission */ /* Make sure they have permission */
if (!$playlist->has_access()) { if (!$playlist->has_access()) {
UI::access_denied(); UI::access_denied();
break; break;
} }
$song_ids = scrub_in($_REQUEST['song']);
foreach ($song_ids as $song_id) { // Retrieving final song order from url
$track = scrub_in($_REQUEST['tr_' . $song_id]); foreach ($_GET as $key => $data) {
$changes[] = array('song_id' => $song_id, 'track' => $track); $_GET[$key] = unhtmlentities(scrub_in($data));
debug_event('playlist', $key.'='.$_GET[$key], '5');
} }
$playlist->update_track_numbers($changes); if (isset($_GET['order'])) {
$songs = explode(";", $_GET['order']);
$track = 1;
foreach ($songs as $song_id) {
if ($song_id != '') {
$playlist->update_track_number($song_id, $track);
++$track;
}
}
}
show_playlist($playlist); //require Config::get('prefix') . '/templates/show_playlist.inc.php';
break; break;
case 'prune_empty': case 'prune_empty':
/* Make sure they have permission */ /* Make sure they have permission */

View file

@ -40,6 +40,10 @@ UI::show_box_top('<div id="playlist_row_' . $playlist->id . '">' . $title .
<a href="<?php echo Config::get('web_path'); ?>/playlist.php?action=normalize_tracks&amp;playlist_id=<?php echo $playlist->id; ?>"><?php echo UI::get_icon('statistics', T_('Normalize Tracks')); ?></a> <a href="<?php echo Config::get('web_path'); ?>/playlist.php?action=normalize_tracks&amp;playlist_id=<?php echo $playlist->id; ?>"><?php echo UI::get_icon('statistics', T_('Normalize Tracks')); ?></a>
<?php echo T_('Normalize Tracks'); ?> <?php echo T_('Normalize Tracks'); ?>
</li> </li>
<li>
<a onclick="submitPlaylistOrder('<?php echo Config::get('web_path'); ?>/playlist.php?action=set_track_numbers&amp;playlist_id=<?php echo $playlist->id; ?>', 'reorder_playlist_table');"><?php echo UI::get_icon('download', T_('Save Tracks Order')); ?></a>
<?php echo T_('Save Tracks Order'); ?>
</li>
<?php if (Access::check_function('batch_download')) { ?> <?php if (Access::check_function('batch_download')) { ?>
<li> <li>
<a href="<?php echo Config::get('web_path'); ?>/batch.php?action=playlist&amp;id=<?php echo $playlist->id; ?>"><?php echo UI::get_icon('batch_download', T_('Batch Download')); ?></a> <a href="<?php echo Config::get('web_path'); ?>/batch.php?action=playlist&amp;id=<?php echo $playlist->id; ?>"><?php echo UI::get_icon('batch_download', T_('Batch Download')); ?></a>

View file

@ -31,7 +31,6 @@
<td class="cel_artist"><?php echo $song->f_artist_link; ?></td> <td class="cel_artist"><?php echo $song->f_artist_link; ?></td>
<td class="cel_album"><?php echo $song->f_album_link; ?></td> <td class="cel_album"><?php echo $song->f_album_link; ?></td>
<td class="cel_genre"><?php echo $song->f_tags; ?></td> <td class="cel_genre"><?php echo $song->f_tags; ?></td>
<td class="cel_track"><?php echo $song->f_track; ?></td>
<td class="cel_time"><?php echo $song->f_time; ?></td> <td class="cel_time"><?php echo $song->f_time; ?></td>
<?php if (Config::get('ratings')) { ?> <?php if (Config::get('ratings')) { ?>
<td class="cel_rating" id="rating_<?php echo $song->id; ?>_song"><?php Rating::show($song->id,'song'); ?></td> <td class="cel_rating" id="rating_<?php echo $song->id; ?>_song"><?php Rating::show($song->id,'song'); ?></td>

View file

@ -23,22 +23,8 @@
$web_path = Config::get('web_path'); $web_path = Config::get('web_path');
?> ?>
<?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?> <?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?>
<table class="tabledata" cellpadding="0" cellspacing="0"> <form method="post" id="reorder_playlist_<?php echo $playlist->id; ?>">
<colgroup> <table id="reorder_playlist_table" class="tabledata" cellpadding="0" cellspacing="0">
<col id="col_directplay" />
<col id="col_add" />
<col id="col_track" />
<col id="col_song" />
<col id="col_artist" />
<col id="col_album" />
<col id="col_genre" />
<col id="col_track" />
<col id="col_time" />
<col id="col_rating" />
<col id="col_userflag" />
<col id="col_action" />
</colgroup>
<tbody id="sortableplaylist">
<tr class="th-top"> <tr class="th-top">
<?php if (Config::get('directplay')) { ?> <?php if (Config::get('directplay')) { ?>
<th class="cel_directplay"><?php echo T_('Play'); ?></th> <th class="cel_directplay"><?php echo T_('Play'); ?></th>
@ -49,7 +35,6 @@ $web_path = Config::get('web_path');
<th class="cel_artist"><?php echo T_('Artist'); ?></th> <th class="cel_artist"><?php echo T_('Artist'); ?></th>
<th class="cel_album"><?php echo T_('Album'); ?></th> <th class="cel_album"><?php echo T_('Album'); ?></th>
<th class="cel_genre"><?php echo T_('Genre'); ?></th> <th class="cel_genre"><?php echo T_('Genre'); ?></th>
<th class="cel_track"><?php echo T_('Track'); ?></th>
<th class="cel_time"><?php echo T_('Time'); ?></th> <th class="cel_time"><?php echo T_('Time'); ?></th>
<?php if (Config::get('ratings')) { <?php if (Config::get('ratings')) {
Rating::build_cache('song', array_map(create_function('$i', 'return $i[\'object_id\'];'), $object_ids)); Rating::build_cache('song', array_map(create_function('$i', 'return $i[\'object_id\'];'), $object_ids));
@ -63,8 +48,9 @@ $web_path = Config::get('web_path');
<?php } ?> <?php } ?>
<th class="cel_action"><?php echo T_('Action'); ?></th> <th class="cel_action"><?php echo T_('Action'); ?></th>
</tr> </tr>
<?php
foreach ($object_ids as $object) { <tbody id="sortableplaylist">
<?php foreach ($object_ids as $object) {
$song = new Song($object['object_id']); $song = new Song($object['object_id']);
$song->format(); $song->format();
$playlist_track = $object['track']; $playlist_track = $object['track'];
@ -73,6 +59,8 @@ $web_path = Config::get('web_path');
<?php require Config::get('prefix') . '/templates/show_playlist_song_row.inc.php'; ?> <?php require Config::get('prefix') . '/templates/show_playlist_song_row.inc.php'; ?>
</tr> </tr>
<?php } ?> <?php } ?>
</tbody>
<tr class="th-bottom"> <tr class="th-bottom">
<?php if (Config::get('directplay')) { ?> <?php if (Config::get('directplay')) { ?>
<th class="cel_directplay"><?php echo T_('Play'); ?></th> <th class="cel_directplay"><?php echo T_('Play'); ?></th>
@ -83,7 +71,6 @@ $web_path = Config::get('web_path');
<th class="cel_artist"><?php echo T_('Artist'); ?></th> <th class="cel_artist"><?php echo T_('Artist'); ?></th>
<th class="cel_album"><?php echo T_('Album'); ?></th> <th class="cel_album"><?php echo T_('Album'); ?></th>
<th class="cel_genre"><?php echo T_('Genre'); ?></th> <th class="cel_genre"><?php echo T_('Genre'); ?></th>
<th class="cel_track"><?php echo T_('Track'); ?></th>
<th class="cel_time"><?php echo T_('Time'); ?></th> <th class="cel_time"><?php echo T_('Time'); ?></th>
<?php if (Config::get('ratings')) { ?> <?php if (Config::get('ratings')) { ?>
<th class="cel_rating"><?php echo T_('Rating'); ?></th> <th class="cel_rating"><?php echo T_('Rating'); ?></th>
@ -93,6 +80,6 @@ $web_path = Config::get('web_path');
<?php } ?> <?php } ?>
<th class="cel_action"><?php echo T_('Action'); ?></th> <th class="cel_action"><?php echo T_('Action'); ?></th>
</tr> </tr>
</tbody> </table>
</table> </form>
<?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?> <?php require Config::get('prefix') . '/templates/list_header.inc.php'; ?>