1<?php
2/* vim:set softtabstop=4 shiftwidth=4 expandtab: */
3/**
4 *
5 * LICENSE: GNU Affero General Public License, version 3 (AGPL-3.0-or-later)
6 * Copyright 2001 - 2020 Ampache.org
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20 *
21 */
22
23/**
24 * Playlist Box
25 * This box is used for actions on the main screen and on a specific playlist page
26 * It changes depending on where it is
27 */
28
29use Ampache\Config\AmpConfig;
30use Ampache\Repository\Model\Playlist;
31use Ampache\Repository\Model\Rating;
32use Ampache\Repository\Model\Search;
33use Ampache\Repository\Model\User;
34use Ampache\Repository\Model\Userflag;
35use Ampache\Module\Api\RefreshReordered\RefreshPlaylistMediasAction;
36use Ampache\Module\Authorization\Access;
37use Ampache\Module\Api\Ajax;
38use Ampache\Module\Playback\Stream_Playlist;
39use Ampache\Module\System\Core;
40use Ampache\Repository\Model\Browse;
41use Ampache\Module\Util\Ui;
42use Ampache\Module\Util\ZipHandlerInterface;
43
44/** @var Playlist $playlist */
45
46?>
47<?php
48ob_start();
49require Ui::find_template('show_playlist_title.inc.php');
50$title = ob_get_contents();
51ob_end_clean();
52Ui::show_box_top('<div id="playlist_row_' . $playlist->id . '">' . $title . '</div>', 'info-box'); ?>
53<?php if (User::is_registered()) { ?>
54    <?php if (AmpConfig::get('ratings')) { ?>
55    <span id="rating_<?php echo $playlist->id; ?>_playlist">
56        <?php echo Rating::show($playlist->id, 'playlist'); ?>
57    </span>
58    <?php } ?>
59    <?php if (AmpConfig::get('userflags')) { ?>
60    <span id="userflag_<?php echo $playlist->id; ?>_playlist">
61        <?php echo Userflag::show($playlist->id, 'playlist'); ?>
62    </span>
63    <?php } ?>
64<?php } ?>
65<div id="information_actions">
66    <ul>
67    <?php if (Core::get_global('user')->has_access('50') || $playlist->user == Core::get_global('user')->id) { ?>
68        <li>
69            <a onclick="submitNewItemsOrder('<?php echo $playlist->id; ?>', 'reorder_playlist_table', 'track_',
70                                            '<?php echo AmpConfig::get('web_path'); ?>/playlist.php?action=set_track_numbers&playlist_id=<?php echo $playlist->id; ?>', '<?php echo RefreshPlaylistMediasAction::REQUEST_KEY ?>')">
71                <?php echo Ui::get_icon('save', T_('Save Track Order')); ?>
72                <?php echo T_('Save Track Order'); ?>
73            </a>
74        </li>
75        <li>
76            <a href="<?php echo AmpConfig::get('web_path'); ?>/playlist.php?action=sort_tracks&playlist_id=<?php echo $playlist->id; ?>">
77                <?php echo Ui::get_icon('sort', T_('Sort Tracks by Artist, Album, Song')); ?>
78                <?php echo T_('Sort Tracks by Artist, Album, Song'); ?>
79            </a>
80        </li>
81        <li>
82            <a href="<?php echo AmpConfig::get('web_path'); ?>/playlist.php?action=remove_duplicates&playlist_id=<?php echo $playlist->id; ?>">
83                <?php echo Ui::get_icon('wand', T_('Remove Duplicates')); ?>
84                <?php echo T_('Remove Duplicates'); ?>
85            </a>
86        </li>
87    <?php } ?>
88    <?php
89    // @todo remove after refactoring
90    global $dic;
91    $zipHandler = $dic->get(ZipHandlerInterface::class);
92    if (Access::check_function('batch_download') && $zipHandler->isZipable('playlist')) { ?>
93        <li>
94            <a class="nohtml" href="<?php echo AmpConfig::get('web_path'); ?>/batch.php?action=playlist&amp;id=<?php echo $playlist->id; ?>">
95                <?php echo Ui::get_icon('batch_download', T_('Batch download')); ?>
96                <?php echo T_('Batch download'); ?>
97            </a>
98        </li>
99    <?php } ?>
100    <?php if (AmpConfig::get('share')) { ?>
101        <a onclick="showShareDialog(event, 'playlist', '<?php echo $playlist->id; ?>');">
102                <?php echo UI::get_icon('share', T_('Share playlist')); ?>
103        &nbsp;&nbsp;<?php echo T_('Share playlist'); ?>
104        </a>
105    <?php } ?>
106    <?php if (AmpConfig::get('directplay')) { ?>
107        <li>
108            <?php echo Ajax::button_with_text('?page=stream&action=directplay&object_type=playlist&object_id=' . $playlist->id, 'play', T_('Play All'), 'directplay_full_' . $playlist->id); ?>
109        </li>
110    <?php } ?>
111    <?php if (Stream_Playlist::check_autoplay_next()) { ?>
112        <li>
113            <?php echo Ajax::button_with_text('?page=stream&action=directplay&object_type=playlist&object_id=' . $playlist->id . '&playnext=true', 'play_next', T_('Play All Next'), 'nextplay_playlist_' . $playlist->id); ?>
114        </li>
115    <?php } ?>
116    <?php if (Stream_Playlist::check_autoplay_append()) { ?>
117        <li>
118            <?php echo Ajax::button_with_text('?page=stream&action=directplay&object_type=playlist&object_id=' . $playlist->id . '&append=true', 'play_add', T_('Play All Last'), 'addplay_playlist_' . $playlist->id); ?>
119        </li>
120    <?php } ?>
121        <li>
122            <?php echo Ajax::button_with_text('?action=basket&type=playlist&id=' . $playlist->id, 'add', T_('Add All to Temporary Playlist'), 'play_playlist'); ?>
123        </li>
124        <li>
125            <?php echo Ajax::button_with_text('?action=basket&type=playlist_random&id=' . $playlist->id, 'random', T_('Random All to Temporary Playlist'), 'play_playlist_random'); ?>
126        </li>
127    <?php if (Core::get_global('user')->has_access('50') && AmpConfig::get('channel')) { ?>
128        <li>
129            <a href="<?php echo AmpConfig::get('web_path'); ?>/channel.php?action=show_create&type=playlist&id=<?php echo $playlist->id; ?>">
130                <?php echo Ui::get_icon('flow'); ?>
131                <?php echo T_('Create Channel'); ?>
132            </a>
133        </li>
134    <?php } ?>
135    <?php if ($playlist->has_access()) { ?>
136        <?php $search_id = $playlist->has_search($playlist->user);
137        if ($search_id > 0) { ?>
138            <li>
139                <a href="<?php echo AmpConfig::get('web_path'); ?>/playlist.php?action=refresh_playlist&type=playlist&user_id=<?php echo $playlist->user; ?>&playlist_id=<?php echo $playlist->id; ?>&search_id=<?php echo $search_id; ?>">
140                    <?php echo Ui::get_icon('file_refresh'); ?>
141                    <?php echo T_('Refresh from Smartlist'); ?>
142                </a>
143            </li>
144        <?php } ?>
145        <li>
146            <a id="<?php echo 'edit_playlist_' . $playlist->id ?>" onclick="showEditDialog('playlist_row', '<?php echo $playlist->id ?>', '<?php echo 'edit_playlist_' . $playlist->id ?>', '<?php echo addslashes(T_('Playlist Edit')) ?>', '')">
147                <?php echo Ui::get_icon('edit', T_('Edit')); ?>
148                <?php echo T_('Edit'); ?>
149            </a>
150        </li>
151        <li>
152            <a href="javascript:NavigateTo('<?php echo AmpConfig::get('web_path'); ?>/playlist.php?action=delete_playlist&playlist_id=<?php echo $playlist->id; ?>');" onclick="return confirm('<?php echo T_('Do you really want to delete this Playlist?'); ?>');">
153                <?php echo Ui::get_icon('delete'); ?>
154                <?php echo T_('Delete'); ?>
155            </a>
156        </li>
157    <?php } ?>
158    </ul>
159</div>
160<?php Ui::show_box_bottom(); ?>
161<div id='reordered_list_<?php echo $playlist->id; ?>'>
162<?php
163    $browse = new Browse();
164    $browse->set_type('playlist_media');
165    $browse->add_supplemental_object('playlist', $playlist->id);
166    $browse->set_static_content(true);
167    $browse->duration = Search::get_total_duration($object_ids);
168    $browse->show_objects($object_ids, true);
169    $browse->store(); ?>
170</div>
171