diff options
author | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2005-06-09 16:34:40 +0000 |
---|---|---|
committer | Karl 'vollmerk' Vollmer <vollmer@ampache.org> | 2005-06-09 16:34:40 +0000 |
commit | bcad40a05ab2dc2a341a3227e30b96668bce4500 (patch) | |
tree | 6fca27588d53a1b24705bd2834e9e643bb729bd1 /lib/flag.php | |
download | ampache-bcad40a05ab2dc2a341a3227e30b96668bce4500.tar.gz ampache-bcad40a05ab2dc2a341a3227e30b96668bce4500.tar.bz2 ampache-bcad40a05ab2dc2a341a3227e30b96668bce4500.zip |
New Import
Diffstat (limited to 'lib/flag.php')
-rw-r--r-- | lib/flag.php | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/lib/flag.php b/lib/flag.php new file mode 100644 index 00000000..01b3ba9f --- /dev/null +++ b/lib/flag.php @@ -0,0 +1,348 @@ +<?php +/* + + Copyright (c) 2004 Ampache.org + All rights reserved. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +// +// + +function add_to_edit_queue($flags=0) +{ + $oldflags = 0; + if(empty($flags)) $flags = 0; + if($_SESSION['edit_queue']) + { + $oldflags = $_SESSION['edit_queue']; + if(!is_array($oldflags)) $oldflags = array($oldflags); + } + + if(!is_array($flags)) + { + if($flags !== 0) $flags = array($flags); + } + + if(is_array($flags)) + { + if(is_array($oldflags)) $new_array = array_merge($flags, $oldflags); + else $new_array = $flags; + } + elseif (is_array($oldflags)) $new_array = $oldflags; + + if(count($new_array)) + { + $_SESSION['edit_queue'] = $new_array; + return count($new_array); + } + else + { + unset($_SESSION['edit_queue']); + return 0; + } +} + +function show_edit_flagged($flag=0) +{ + if(empty($flag)||$flag === 0) + { + $flag = array_pop($_SESSION['edit_queue']); + } + $flaginfo = get_flag($flag); + if($flaginfo['type'] === 'badid3') + { + show_edit_badid3($flaginfo['song'],$flag); + } + else + { + echo "I don't know how to edit already edited songs yet: $flag.<br />"; + } +} + +function show_edit_badid3($songid,$flagid) +{ + $song = get_song_info($songid); + require(conf('prefix')."/templates/song_edit.inc"); +} + +function get_flag($id) +{ + if(!is_array($id)) $id = array($id); + $results = array(); + $newid = array_pop($id); + $sql = "SELECT flagged.id,user.username,type,song,date,comment" . + " FROM flagged,user WHERE flagged.user = user.id AND (flagged.song = '$newid'"; + foreach($id as $num) + { + $sql .= " OR flagged.song = '$num'"; + } + $sql .= ")"; + $result = mysql_query($sql, dbh()); + while ($row = mysql_fetch_array($result)) + { + $results[] = $row; + } + if(count($results) == 1) return $results[0]; + else return $results; +} + + +function get_flagged_songs($user = 0) +{ + $sql = "SELECT flagged.id,user.username,type,song,date,comment" . + " FROM flagged,user WHERE flagged.user = user.id AND flagged.type <> 'notify' AND flagged.type <> 'done'"; + + // If the user is not an admin, they can only see songs they've flagged + if($user) + { + if($_SESSION['userdata']['access'] === 'admin') + { + $sql .= " AND user.id = '$user'"; + } + else + { + $sql .= " AND user.id = '".$_SESSION['userdata']['id']."'"; + } + } + + $sql .= " ORDER BY date"; + $result = mysql_query($sql, dbh()); + + $arr = array(); + + while ($flag = mysql_fetch_array($result)) + { + $arr[] = $flag; + } + return $arr; +} + +function show_flagged_songs($flags) +{ + require_once(conf('prefix').'/templates/list_flagged.inc'); +} + +function accept_new_tags($flags) +{ + if(!is_array($flags)) $flags = array($flags); + foreach($flags as $flag) + { + copy_updated_tag($flag); + } + set_flag_value($flags, 'setid3'); +} + + +function reject_new_tags($flags) +{ + if(!is_array($flags)) $flags = array($flags); + $oldflags = $flags; + $flag = array_pop($flags); + $sql = "DELETE FROM flagged_songs WHERE song = '$flag'"; + + foreach($flags as $flag) + { + $sql .= " OR song = '$flag'"; + } + $result = mysql_query($sql, dbh()); + $user = $_SESSION['userdata']['username']; + set_flag_value($oldflags, 'notify', "Tag changes rejected by $user"); +} + +function set_flag_value($flags, $val, $comment = '') +{ + if(!is_array($flags)) $flags = array($flags); + $user = $_SESSION['userdata']['id']; +/* $flagid = array_pop($flags);*/ + $dbh = dbh(); + foreach($flags as $flagid) + { + $sql = "REPLACE INTO flagged (type,song,comment,user,date)". + " VALUES ('$val','$flagid','$comment','$user','".time()."')"; + $result = mysql_query($sql, $dbh); + } + return $result; +} + +function copy_updated_tag($flag) +{ + $flagdata = get_flag($flag); + $sql = "SELECT * FROM flagged_song WHERE song = '".$flagdata['song']."'"; + $result = mysql_query($sql, dbh()); + $newtag = mysql_fetch_array($result); + + if($newtag['new_artist']) + { + $newtag['artist'] = insert_artist($newtag['new_artist']); + } + if($newtag['new_album']) + { + $newtag['album'] = insert_album($newtag['new_album']); + } + + $sql = "UPDATE song SET ". + "title = '".$newtag['title']."',". + "artist = '".$newtag['artist']."',". + "album = '".$newtag['album']."',". + "track = '".$newtag['track']."',". + "genre = '".$newtag['genre']."',". + "year = '".$newtag['year']."' ". + "WHERE song.id = '".$newtag['song']."'"; + $result = mysql_query($sql, dbh()); + if($result) + { + $sql2 = "DELETE FROM flagged_song WHERE song='".$flagdata['song']."'"; + $result2 = mysql_query($sql2, dbh()); + } + return ($result && $result2); + +} + +function update_flags($songs) +{ + $accepted = array(); + $rejected = array(); + $newflags = array(); + foreach($songs as $song) + { + $accept = scrub_in($_REQUEST[$song.'_accept']); + if($accept === 'accept') $accepted[] = $song; + elseif ($accept === 'reject') $rejected[] = $song; + else + { + $newflag = scrub_in($_REQUEST[$song.'_newflag']); + $newflags[$song] = $newflag; + } + } + + if(count($accepted)) + { + accept_new_tags($accepted); + } + if(count($rejected)) + { + reject_new_tags($rejected); + } + if(count($newflags)) + { + foreach($newflags as $flag=>$type) + { + set_flag_value($flag, $type); + } + } + +} + + +function update_song_info($song) +{ + $user = $_SESSION['userdata']; + + $title = scrub_in($_REQUEST['title']); + $track = scrub_in($_REQUEST['track']); + $genre = scrub_in($_REQUEST['genre']); + $year = scrub_in($_REQUEST['year']); + + if(isset($_REQUEST['update_id3'])) + $update_id3 = 1; + + if(isset($_REQUEST['new_artist']) && $_REQUEST['new_artist'] !== '') + { + $create_artist = 1; + $artist = scrub_in($_REQUEST['new_artist']); + } + else + $artist = scrub_in($_REQUEST['artist']); + + if(isset($_REQUEST['new_album']) && $_REQUEST['new_album'] !== '') + { + $create_album = 1; + $album = scrub_in($_REQUEST['new_album']); + } + else + $album = scrub_in($_REQUEST['album']); + + if(is_array($_REQUEST['genre'])) { + $genre = $genre[0]; + } + + if($user['access'] == 'admin') + // Update the file directly + { + if($create_artist) + { + $artist = insert_artist($artist); + } + if($create_album) + { + $album = insert_album($album); + } + // Escape data (prevent " or ' snafu's) + $title = sql_escape($title); + $artist = sql_escape($artist); + $album = sql_escape($album); + $genre = sql_escape($genre); + $year = sql_escape($year); + + $sql = "UPDATE song SET" . + " title = '$title'," . + " track = '$track'," . + " genre = '$genre'," . + " year = '$year'," . + " artist = '$artist',". + " album = '$album'," . + " update_time = '".time()."'" . + " WHERE id = '$song' LIMIT 1"; + $result = mysql_query($sql, dbh() ); + if($result && $update_id3 ) + { + //Add to flagged table so we can fix the id3 tags + $date = time(); + $sql = "REPLACE INTO flagged SET " . + " type = 'setid3', song = '$song', date = '$date', user = '".$user['id']."'"; + $result = mysql_query($sql, dbh()); + } + } + + else + // Stick in the flagged_songs table to be updated by an admin + { + if($create_artist) $artist_field = 'new_artist'; + else $artist_field = 'artist'; + + if($create_album) $album_field = 'new_album'; + else $album_field = 'album'; + + $sql = "INSERT INTO flagged_song(song,title,track,genre,year,$artist_field,$album_field,update_time) " . + "VALUES ('$song','$title','$track','$genre','$year','$artist','$album','".time()."')"; + $result = mysql_query($sql, dbh() ); + + if($result && $update_id3 ) + { + //Add to flagged table so we can fix the id3 tags + $date = time(); + $sql = "REPLACE INTO flagged SET " . + " type = 'newid3', song = '$song', date = '$date', user = '".$user['id']."'"; + $result = mysql_query($sql, dbh()); + } + echo "Thanks for helping to keep the catalog up to date. Someone will review your changes, and you will be notified on the main page when they're approved."; + + } +} + |