diff options
-rw-r--r-- | admin/duplicates.php | 26 | ||||
-rwxr-xr-x | docs/CHANGELOG | 1 | ||||
-rw-r--r-- | lib/class/catalog.class.php | 71 | ||||
-rw-r--r-- | lib/class/preference.class.php | 1 | ||||
-rw-r--r-- | lib/duplicates.php | 120 | ||||
-rw-r--r-- | login.php | 2 | ||||
-rw-r--r-- | server/ajax.server.php | 4 | ||||
-rw-r--r-- | server/song.ajax.php | 48 | ||||
-rw-r--r-- | templates/show_duplicate.inc.php | 43 | ||||
-rw-r--r-- | templates/show_duplicates.inc.php | 94 | ||||
-rw-r--r-- | templates/show_list_duplicates.inc.php | 103 | ||||
-rw-r--r-- | templates/sidebar_admin.inc.php | 1 | ||||
-rw-r--r-- | themes/classic/templates/default.css | 6 | ||||
-rw-r--r-- | themes/greysme/templates/default.css | 3 |
14 files changed, 249 insertions, 274 deletions
diff --git a/admin/duplicates.php b/admin/duplicates.php index 09602d53..aac0ceef 100644 --- a/admin/duplicates.php +++ b/admin/duplicates.php @@ -1,7 +1,7 @@ <?php /* - Copyright (c) 2001 - 2006 Ampache.org + Copyright (c) 2001 - 2007 Ampache.org All rights reserved. This program is free software; you can redistribute it and/or @@ -19,30 +19,24 @@ */ +require_once '../lib/init.php'; -// Allows users to search for duplicate songs in their catalogs - -require_once ('../lib/init.php'); -require_once( conf('prefix').'/lib/duplicates.php'); - -if (!$GLOBALS['user']->has_access(100)) { +if (!Access::check('interface','100')) { access_denied(); exit; } -$action = scrub_in($_REQUEST['action']); -$search_type = scrub_in($_REQUEST['search_type']); - -show_template('header'); +show_header(); /* Switch on Action */ -switch ($action) { - case 'search': - $flags = get_duplicate_songs($search_type); - show_duplicate_songs($flags,$search_type); +switch ($_REQUEST['action']) { + case 'find_duplicates': + $duplicates = Catalog::get_duplicate_songs($_REQUEST['search_type']); + require_once Config::get('prefix') . '/templates/show_duplicate.inc.php'; + require_once Config::get('prefix') . '/templates/show_duplicates.inc.php'; break; default: - show_duplicate_searchbox($search_type); + require_once Config::get('prefix') . '/templates/show_duplicate.inc.php'; break; } // end switch on action diff --git a/docs/CHANGELOG b/docs/CHANGELOG index 9204bb9b..4383e026 100755 --- a/docs/CHANGELOG +++ b/docs/CHANGELOG @@ -4,6 +4,7 @@ -------------------------------------------------------------------------- v.3.4-Alpha4 + - Fixed Find Duplicates Functionality - Added Highest Rated option to Advanced Random - Fixed incorrect mime type being set on ASX playlists - Fixed problem where you couldn't change playlist type diff --git a/lib/class/catalog.class.php b/lib/class/catalog.class.php index 39c2c7ea..d5e8535f 100644 --- a/lib/class/catalog.class.php +++ b/lib/class/catalog.class.php @@ -791,6 +791,77 @@ class Catalog { } //get_files /** + * get_duplicate_songs + * This function takes a search type and returns a list of all song_ids that + * are likely to be duplicates based on teh search method selected. + */ + public static function get_duplicate_songs($search_method) { + + // Setup the base SQL + $sql = "SELECT song.id AS song,artist.id AS artist,album.id AS album,title,COUNT(title) AS ctitle". + " FROM `song` LEFT JOIN `artist` ON `artist`.`id`=`song`.`artist` " . + " LEFT JOIN `album` ON `album`.`id`=`song`.`album` ". + " GROUP BY song.title"; + + // Add any Additional constraints + if ($search_method == "artist_title" OR $search_method == "artist_album_title") { + $sql = $sql.",artist.name"; + } + + if ($search_method == "artist_album_title") { + $sql = $sql.",album.name"; + } + + // Final componets + $sql = $sql." HAVING COUNT(title) > 1"; + $sql = $sql." ORDER BY `ctitle`"; + + $db_results = Dba::query($sql); + + $results = array(); + + while ($item = Dba::fetch_assoc($db_results)) { + $results[] = $item; + } // end while + + return $results; + + } // get_duplicate_songs + + /** + * get_duplicate_info + * This takes a song, search type and auto flag and returns the duplicate songs in the correct + * order, it sorts them by longest, higest bitrate, largest filesize, checking + * the last one as most likely bad + */ + public static function get_duplicate_info($item,$search_type) { + // Build the SQL + $sql = "SELECT `song`.`id`" . + " FROM song,artist,album". + " WHERE song.artist=artist.id AND song.album=album.id". + " AND song.title= '".Dba::escape($item['title'])."'"; + + if ($search_type == "artist_title" || $search_type == "artist_album_title") { + $sql .=" AND artist.id = '".Dba::escape($item['artist'])."'"; + } + if ($search_type == "artist_album_title" ) { + $sql .=" AND album.id = '".Dba::escape($item['album'])."'"; + } + + $sql .= " ORDER BY `time`,`bitrate`,`size` LIMIT 2"; + $db_results = Dba::query($sql); + + $results = array(); + + while ($item = Dba::fetch_assoc($db_results)) { + $results[] = $item['id']; + } // end while + + return $results; + + } // get_duplicate_info + + /** * dump_album_art (Added by Cucumber 20050216) * This runs through all of the albums and trys to dump the * art for them into the 'folder.jpg' file in the appropriate dir diff --git a/lib/class/preference.class.php b/lib/class/preference.class.php index 71b714fc..da4242c8 100644 --- a/lib/class/preference.class.php +++ b/lib/class/preference.class.php @@ -341,7 +341,6 @@ class Preference { Config::set_by_array($results,1); - } // init diff --git a/lib/duplicates.php b/lib/duplicates.php deleted file mode 100644 index c6af8c58..00000000 --- a/lib/duplicates.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php -/* - - Copyright (c) 2001 - 2006 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 v2 - as published by the Free Software Foundation. - - 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. - -*/ - -/** - * get_duplicate_songs - * This function takes a search type and returns a list of all songs that - * are likely to be duplicates based on the search type selected - */ -function get_duplicate_songs($search_type) { - - // Setup the base SQL - $sql = "SELECT song.id as song,artist.name,album.name,title,count(title) as ctitle". - " FROM song,artist,album ". - " WHERE song.artist=artist.id AND song.album=album.id AND song.title<>'' ". - " GROUP BY title"; - - // Additional constraints - if ($search_type=="artist_title"||$search_type=="artist_album_title") { - $sql = $sql.",artist"; - } - - if ($search_type=="artist_album_title") { - $sql = $sql.",album"; - } - - // Final componets - $sql = $sql." HAVING count(title) > 1"; - $sql = $sql." ORDER BY ctitle"; - - $db_results = mysql_query($sql, dbh()); - - $arr = array(); - - while ($flag = mysql_fetch_assoc($db_results)) { - $arr[] = $flag; - } // end while - - return $arr; - -} // get_duplicate_songs - -/** - * get_duplicate_info - * This takes a song, search type and auto flag and returns the duplicate songs in the correct - * order, if AUTO is selected it sorts them by longest, higest bitrate, largest filesize, checking - * the last one as most likely bad - */ -function get_duplicate_info($song,$search_type,$auto='') { - // Get the artist name - $artist = $song->get_artist_name(); - - // Build the SQL - $sql = "SELECT song.id as songid,song.title as song,file,bitrate,size,time," . - "album.name AS album,album.id as albumid, artist.name AS artist,artist.id as artistid". - " FROM song,artist,album ". - " WHERE song.artist=artist.id AND song.album=album.id ". - " AND song.title= '".sql_escape($song->title)."'"; - - if ($search_type == "artist_title" || $search_type == "artist_album_title") { - $sql .=" AND artist.id = '".$song->artist."'"; - } - if ($search_type == "artist_album_title" ) { - $sql .=" AND album.id = '".$song->album."'"; - } - - if ($auto) { - $sql .= " ORDER BY time,bitrate,size"; - } - - $db_results = mysql_query($sql, dbh()); - - $arr = array(); - - while ($flag = mysql_fetch_assoc($db_results)) { - $arr[] = $flag; - } // end while - - return $arr; - -} // get_duplicate_info - -/*! - @function show_duplicate_songs - @discussion -*/ -function show_duplicate_songs($flags,$search_type) { - - require_once(conf('prefix').'/templates/show_list_duplicates.inc.php'); - -} // show_duplicate_songs - -/*! - @function show_duplicate_searchbox - @discussion -*/ -function show_duplicate_searchbox($search_type) { - - require_once(conf('prefix') . '/templates/show_duplicates.inc.php'); - -} // show_duplicate_searchbox - -?> @@ -26,7 +26,7 @@ require_once 'lib/init.php'; * can't handle Cookie + Redirect */ vauth_session_cookie(); -Preference::init() +Preference::init(); /** * If Access Control is turned on then we don't diff --git a/server/ajax.server.php b/server/ajax.server.php index 09325883..c83a0328 100644 --- a/server/ajax.server.php +++ b/server/ajax.server.php @@ -61,6 +61,10 @@ switch ($_REQUEST['page']) { require_once Config::get('prefix') . '/server/stream.ajax.php'; exit; break; + case 'song': + require_once Config::get('prefix') . '/server/song.ajax.php'; + exit; + break; case 'democratic': require_once Config::get('prefix') . '/server/democratic.ajax.php'; exit; diff --git a/server/song.ajax.php b/server/song.ajax.php new file mode 100644 index 00000000..ae277675 --- /dev/null +++ b/server/song.ajax.php @@ -0,0 +1,48 @@ +<?php +/* + + Copyright (c) 2001 - 2007 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 v2 + as published by the Free Software Foundation. + + 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. + +*/ + +/** + * Sub-Ajax page, requires AJAX_INCLUDE as one + */ +if (AJAX_INCLUDE != '1') { exit; } + +switch ($_REQUEST['action']) { + case 'flip_state': + if (!Access::check('interface','75')) { + debug_event('DENIED',$GLOBALS['user']->username . ' attempted to change the state of a song','1'); + exit; + } + + $song = new Song($_REQUEST['song_id']); + $new_enabled = $song->enabled ? '0' : '1'; + $song->update_enabled($new_enabled,$song->id); + + //FIXME: Re-display this + + break; + default: + $results['rfc3514'] = '0x1'; + break; +} // switch on action; + +// We always do this +echo xml_from_array($results); +?> diff --git a/templates/show_duplicate.inc.php b/templates/show_duplicate.inc.php new file mode 100644 index 00000000..1f4ead8e --- /dev/null +++ b/templates/show_duplicate.inc.php @@ -0,0 +1,43 @@ +<?php +/* + + Copyright (c) 2001 - 2007 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; version 2 + of the License. + + 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. + +*/ +?> +<?php show_box_top(_('Find Duplicates')); ?> +<form name="duplicates" action="<?php echo Config::get('web_path'); ?>/admin/duplicates.php?action=find_duplicates" method="post" enctype="multipart/form-data" > +<table cellspacing="0" cellpadding="3"> +<tr> + <td valign="top"><strong><?php echo _('Search Type'); ?>:</strong></td> + <td> + <?php + $name = 'check_' . scrub_in($_REQUEST['search_type']); + ${$name} = ' checked="checked" '; + ?> + <input type="radio" name="search_type" value="title"<?php echo $check_title; ?>/><?php echo _('Title'); ?><br /> + <input type="radio" name="search_type" value="artist_title"<?php echo $check_artist_title; ?>/><?php echo _('Artist and Title'); ?><br /> + <input type="radio" name="search_type" value="artist_album_title"<?php echo $check_artist_album_title; ?>/><?php echo _('Artist, Album and Title'); ?><br /> + </td> +</tr> +</table> +<div class="formValidation"> + <input type="submit" value="<?php echo _('Find Duplicates'); ?>" /> +</div> +</form> +<?php show_box_bottom(); ?> diff --git a/templates/show_duplicates.inc.php b/templates/show_duplicates.inc.php index 731016ad..f93bbf83 100644 --- a/templates/show_duplicates.inc.php +++ b/templates/show_duplicates.inc.php @@ -1,13 +1,12 @@ <?php /* - Copyright (c) 2001 - 2005 Ampache.org + Copyright (c) 2001 - 2007 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. + modify it under the terms of the GNU General Public License v2 + as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,35 +18,68 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -$web_path = conf('web_path'); ?> -<?php show_box_top(_('Find Duplicates')); ?> -<form name="duplicates" action="<?php echo conf('web_path'); ?>/admin/duplicates.php" method="post" enctype="multipart/form-data" > -<table cellspacing="0" cellpadding="3" width="450"> - <tr> - <td valign="top"><?php echo _('Search Type'); ?>:</td> - <td> - <?php - $name = 'check_' . $_REQUEST['search_type']; - ${$name} = ' checked="checked" '; +<?php show_box_top(_('Duplicate Songs')); ?> +<form method="post" enctype="multipart/form-data" action="<?php echo $web_path; ?>/admin/flag.php?action=disable"> +<table class="tabledata" cellpadding="0" cellspacing="0"> +<colgroup> + <col id="col_disable" /> + <col id="col_song" /> + <col id="col_artist" /> + <col id="col_album" /> + <col id="col_length" /> + <col id="col_bitrate" /> + <col id="col_size" /> + <col id="col_filename" /> +</colgroup> +<tr class="th-top"> + <th class="cel_disable"><?php echo _('Disable'); ?></th> + <th class="cel_song"><?php echo _('Song'); ?></th> + <th class="cel_artist"><?php echo _('Artist'); ?></th> + <th class="cel_album"><?php echo _('Album'); ?></th> + <th class="cel_length"><?php echo _('Length'); ?></th> + <th class="cel_bitrate"><?php echo _('Bitrate'); ?></th> + <th class="cel_size"><?php echo _('Size'); ?></th> + <th class="cel_filename"><?php echo _('Filename'); ?></th> +</tr> +<?php + foreach ($duplicates as $item) { + // Gather the duplicates + $songs = Catalog::get_duplicate_info($item,$search_type); + + foreach ($songs as $key=>$song_id) { + $song = new Song($song_id); + $song->format(); + $row_key = 'duplicate_' . $song_id; + $current_class = ($key == '0') ? 'row-highlight' : flip_class(); + $button = $song->enabled ? 'disable' : 'enable'; ?> - <input type="radio" name="search_type" value="title"<?php echo $check_title; ?>/><?php echo _('Title'); ?><br /> - <input type="radio" name="search_type" value="artist_title"<?php echo $check_artist_title; ?>/><?php echo _('Artist and Title'); ?><br /> - <input type="radio" name="search_type" value="artist_album_title"<?php echo $check_artist_album_title; ?>/><?php echo _('Artist, Album and Title'); ?><br /> - </td> - </tr> - <tr> - <td> </td> - <td> - <?php if ($_REQUEST['auto']) { $auto_check = ' checked="checked"'; } ?> - <input type="checkbox" name="auto" value="1" <?php echo $auto_check; ?>/><?php echo _('Select Best Guess'); ?> - </td> - </tr> +<tr id="<?php echo $row_key; ?>" class="<?php echo $current_class; ?>"> + <td class="cel_disable"> + <?php echo Ajax::button('?page=song&action=flip_state&song_id=' . $song_id,$button,_(ucfirst($button)),'flip_state_' . $song_id); ?> + </td> + <td class="cel_song"><?php echo $song->f_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_length"><?php echo $song->f_time; ?></td> + <td class="cel_bitrate"><?php echo $song->f_bitrate; ?></td> + <td class="cel_size"><?php echo $song->f_size; ?>MB</td> + <td class="cel_filename"><?php echo scrub_out($song->file); ?></td> +</tr> +<?php + } // end foreach ($dinfolist as $dinfo) + } // end foreach ($flags as $flag) +?> +<tr class="th-bottom"> + <th class="cel_disable"><?php echo _('Disable'); ?></th> + <th class="cel_song"><?php echo _('Song'); ?></th> + <th class="cel_artist"><?php echo _('Artist'); ?></th> + <th class="cel_album"><?php echo _('Album'); ?></th> + <th class="cel_length"><?php echo _('Length'); ?></th> + <th class="cel_bitrate"><?php echo _('Bitrate'); ?></th> + <th class="cel_size"><?php echo _('Size'); ?></th> + <th class="cel_filename"><?php echo _('Filename'); ?></th> +</tr> </table> -<div class="formValidation"> - <input type="hidden" name="action" value="search" /> - <input type="submit" value="<?php echo _('Search'); ?>" /> -</div> </form> <?php show_box_bottom(); ?> diff --git a/templates/show_list_duplicates.inc.php b/templates/show_list_duplicates.inc.php deleted file mode 100644 index 25abeecc..00000000 --- a/templates/show_list_duplicates.inc.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php -/* - - Copyright (c) 2001 - 2006 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 v2 - as published by the Free Software Foundation. - - 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. - -*/ - -$web_path = conf('web_path'); -show_duplicate_searchbox($search_type); - -if (count($flags)) { ?> - <?php show_box_top(_('Duplicate Songs')); ?> - <form method="post" enctype="multipart/form-data" action="<?php echo $web_path; ?>/admin/flag.php?action=disable"> - <table class="tabledata" cellpadding="0" cellspacing="0"> - <colgroup> - <col id="col_disable" /> - <col id="col_song" /> - <col id="col_artist" /> - <col id="col_album" /> - <col id="col_length" /> - <col id="col_bitrate" /> - <col id="col_size" /> - <col id="col_filename" /> - </colgroup> - <tr class="th-top"> - <th class="cel_disable"><?php echo _('Disable'); ?></th> - <th class="cel_song"><?php echo _('Song'); ?></th> - <th class="cel_artist"><?php echo _('Artist'); ?></th> - <th class="cel_album"><?php echo _('Album'); ?></th> - <th class="cel_length"><?php echo _('Length'); ?></th> - <th class="cel_bitrate"><?php echo _('Bitrate'); ?></th> - <th class="cel_size"><?php echo _('Size'); ?></th> - <th class="cel_filename"><?php echo _('Filename'); ?></th> - </tr> - <?php - foreach ($flags as $flag) { - /* Build the Song */ - $song = new Song($flag['song']); - $song->format_song(); - - // Set some extra vars - $alt_title = $song->title; - $formated_title = $song->f_title; - $artist = $song->f_artist; - $alt_artist = $song->f_full_artist; - - // Gather the duplicates - $dinfolist = get_duplicate_info($song,$search_type,$_REQUEST['auto']); - - // Set the current class, only changes once per set of duplicates - $current_class = flip_class(); - - foreach ($dinfolist as $key=>$dinfo) { - $check_txt = ''; - if ($key == '0' AND $_REQUEST['auto']) { $check_txt = ' checked="checked"'; } - echo "<tr class=\"".$current_class."\">". - "<td class=\"cel_disable\"><input type=\"checkbox\" name=\"song_ids[]\" value=\"" . $dinfo['songid'] . "\" $check_txt/></td>". - "<td class=\"cel_song\"><a href=\"$web_path/stream.php?action=single_song&song_id=$song->id\">".scrub_out($formated_title)."</a> </td>". - "<td class=\"cel_artist\"><a href=\"$web_path/artists.php?action=show&artist=".$dinfo['artistid']."\" title=\"".scrub_out($dinfo['artist'])."\">".scrub_out($dinfo['artist'])."</a> </td>". - "<td class=\"cel_album\"><a href=\"$web_path/albums.php?action=show&album=".$dinfo['albumid']."\" title=\"".scrub_out($dinfo['album'])."\">".scrub_out($dinfo['album'])."</a> </td>". - "<td class=\"cel_length\">".floor($dinfo['time']/60).":".sprintf("%02d", ($dinfo['time']%60) )."</td>". - "<td class=\"cel_bitrate\">".intval($dinfo['bitrate']/1000)."</td>". - "<td class=\"cel_size\">".sprintf("%.2f", ($dinfo['size']/1048576))."MB</td>". - "<td class=\"cel_filename\">".$dinfo['file']."</td>"; - echo "</tr>\n"; - } // end foreach ($dinfolist as $dinfo) - - } // end foreach ($flags as $flag) - ?> - <tr class="th-bottom"> - <th class="cel_disable"><?php echo _('Disable'); ?></th> - <th class="cel_song"><?php echo _('Song'); ?></th> - <th class="cel_artist"><?php echo _('Artist'); ?></th> - <th class="cel_album"><?php echo _('Album'); ?></th> - <th class="cel_length"><?php echo _('Length'); ?></th> - <th class="cel_bitrate"><?php echo _('Bitrate'); ?></th> - <th class="cel_size"><?php echo _('Size'); ?></th> - <th class="cel_filename"><?php echo _('Filename'); ?></th> - </tr> - </table> - <div class="formValidation"> - <input type="submit" value="<?php echo _('Disable Songs'); ?>" /> - </div> - </form> - <?php show_box_bottom(); ?> -<?php } else { ?> -<p class="error"><?php echo _('No Records Found'); ?></p> -<?php } // end if ($flags) and else ?> - diff --git a/templates/sidebar_admin.inc.php b/templates/sidebar_admin.inc.php index c34de6bd..bc35e000 100644 --- a/templates/sidebar_admin.inc.php +++ b/templates/sidebar_admin.inc.php @@ -20,6 +20,7 @@ </li> <li><h4><?php echo _('Other Tools'); ?></h4> <ul class="sb3" id="sb_admin_ot"> + <li id="sb_admin_ot_Duplicates"><a href="<?php echo $web_path; ?>/admin/duplicates.php"><?php echo _('Find Duplicates'); ?></a></li> <li id="sb_admin_ot_ClearNowPlaying"><a href="<?php echo $web_path; ?>/admin/catalog.php?action=clear_now_playing"><?php echo _('Clear Now Playing'); ?></a></li> <li id="sb_admin_ot_ClearCatStats"><a href="<?php echo $web_path; ?>/admin/catalog.php?action=clear_stats"><?php echo _('Clear Catalog Stats'); ?></a></li> </ul> diff --git a/themes/classic/templates/default.css b/themes/classic/templates/default.css index ba71d503..b45857ee 100644 --- a/themes/classic/templates/default.css +++ b/themes/classic/templates/default.css @@ -507,13 +507,17 @@ a.button{padding:1px 3px;} /* table rows */
.odd, .odd td,
-.even, .even td {
+.even, .even td, .row-highlight {
font-size: 12px;
border-bottom:1px dotted #c0c0c0;
}
.even:hover, .odd:hover {
background:#99ccff;
}
+.row-highlight:hover {
+ background:#cc3333;
+}
+
/* Misc */
.border { background: #000; }
diff --git a/themes/greysme/templates/default.css b/themes/greysme/templates/default.css index 4b753ac2..3e01a519 100644 --- a/themes/greysme/templates/default.css +++ b/themes/greysme/templates/default.css @@ -557,10 +557,11 @@ input[type=checkbox] { border:0;background:none; } }
/* table rows */
-.odd, .even { background: url(../images/list_back.png) 0 50% repeat-x !important; background-image: none;}
+.odd, .even, .row-highlight { background: url(../images/list_back.png) 0 50% repeat-x !important; background-image: none;}
.odd { background-color: #111 !important;}
.even { }
.odd:hover, .even:hover { background-color: #2b293d !important;}
+.row-highlight:hover { background-color: #cc3333 !important;}
/* Misc */
.border { background: #000; }
|