Skip to content

Commit

Permalink
Fix catalog actions without Ajax (fix ampache#947)
Browse files Browse the repository at this point in the history
  • Loading branch information
Afterster committed Sep 11, 2015
1 parent a70d83d commit 7fa6e5c
Show file tree
Hide file tree
Showing 8 changed files with 326 additions and 216 deletions.
34 changes: 12 additions & 22 deletions admin/catalog.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,36 +45,32 @@
}
}
}
$sse_catalogs = urlencode(serialize($catalogs));


/* Big switch statement to handle various actions */
switch ($_REQUEST['action']) {
case 'add_to_all_catalogs':
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=add_to_all_catalogs";
sse_worker($sse_url);
catalog_worker('add_to_all_catalogs');
show_confirmation(T_('Catalog Update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'add_to_catalog':
if (AmpConfig::get('demo_mode')) {
break;
}

$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=add_to_catalog&catalogs=" . $sse_catalogs;
sse_worker($sse_url);
catalog_worker('add_to_catalog', $catalogs);
show_confirmation(T_('Catalog Update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'update_all_catalogs':
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=update_all_catalogs";
sse_worker($sse_url);
catalog_worker('update_all_catalogs');
show_confirmation(T_('Catalog Update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'update_catalog':
if (AmpConfig::get('demo_mode')) {
break;
}

$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=update_catalog&catalogs=" . $sse_catalogs;
sse_worker($sse_url);
catalog_worker('update_catalog', $catalogs);
show_confirmation(T_('Catalog Update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'full_service':
Expand All @@ -83,8 +79,7 @@
break;
}

$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=full_service&catalogs=" . $sse_catalogs;
sse_worker($sse_url);
catalog_worker('full_service', $catalogs);
show_confirmation(T_('Catalog Update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'delete_catalog':
Expand Down Expand Up @@ -136,13 +131,11 @@
show_confirmation($title,$body,$url);
break;
case 'clean_all_catalogs':
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=clean_all_catalogs";
sse_worker($sse_url);
catalog_worker('clean_all_catalogs');
show_confirmation(T_('Catalog Clean started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'clean_catalog':
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=clean_catalog&catalogs=" . $sse_catalogs;
sse_worker($sse_url);
catalog_worker('clean_catalog', $catalogs);
show_confirmation(T_('Catalog Clean started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'update_catalog_settings':
Expand All @@ -164,8 +157,7 @@
break;
}

$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=update_from&add_path=" . scrub_in($_POST['add_path']) . "&update_path=" . $_POST['update_path'];
sse_worker($sse_url);
catalog_worker('update_from', null, $_POST);
show_confirmation(T_('Subdirectory update started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'add_catalog':
Expand Down Expand Up @@ -198,9 +190,8 @@
break;
}

$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=add_catalog&catalog_id=" . $catalog_id . "&options=" . urlencode(serialize($_POST));
sse_worker($sse_url);

$catalogs[] = $catalog_id;
catalog_worker('add_to_catalog', $catalogs, $_POST);
show_confirmation(T_('Catalog Creation started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
} else {
require AmpConfig::get('prefix') . UI::find_template('show_add_catalog.inc.php');
Expand Down Expand Up @@ -258,8 +249,7 @@
require_once AmpConfig::get('prefix') . UI::find_template('show_edit_catalog.inc.php');
break;
case 'gather_media_art':
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=gather_media_art&catalogs=" . $sse_catalogs;
sse_worker($sse_url);
catalog_worker('gather_media_art', $catalogs);
show_confirmation(T_('Media Art Search started...'), '', AmpConfig::get('web_path') . '/admin/catalog.php', 0, 'confirmation', false);
break;
case 'show_catalogs':
Expand Down
108 changes: 108 additions & 0 deletions lib/class/catalog.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -2090,6 +2090,114 @@ public static function can_remove($libitem, $user = null)

return (Access::check('interface','75') || ($libitem->get_user_owner() == $user && AmpConfig::get('upload_allow_remove')));
}

public static function process_action($action, $catalogs, $options = null)
{
if (!$options || !is_array($options)) {
$options = array();
}

switch ($action) {
case 'add_to_all_catalogs':
$catalogs = Catalog::get_catalogs();
case 'add_to_catalog':
if ($catalogs) {
foreach ($catalogs as $catalog_id) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
$catalog->add_to_catalog($options);
}
}

if (!defined('SSE_OUTPUT')) {
Error::display('catalog_add');
}
}
break;
case 'update_all_catalogs':
$catalogs = Catalog::get_catalogs();
case 'update_catalog':
if ($catalogs) {
foreach ($catalogs as $catalog_id) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
$catalog->verify_catalog();
}
}
}
break;
case 'full_service':
if (!$catalogs) {
$catalogs = Catalog::get_catalogs();
}

/* This runs the clean/verify/add in that order */
foreach ($catalogs as $catalog_id) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
$catalog->clean_catalog();
$catalog->verify_catalog();
$catalog->add_to_catalog();
}
}
Dba::optimize_tables();
break;
case 'clean_all_catalogs':
$catalogs = Catalog::get_catalogs();
case 'clean_catalog':
if ($catalogs) {
foreach ($catalogs as $catalog_id) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
$catalog->clean_catalog();
}
} // end foreach catalogs
Dba::optimize_tables();
}
break;
case 'update_from':
$catalog_id = 0;
// First see if we need to do an add
if ($options['add_path'] != '/' && strlen($options['add_path'])) {
if ($catalog_id = Catalog_local::get_from_path($options['add_path'])) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
$catalog->add_to_catalog(array('subdirectory'=>$options['add_path']));
}
}
} // end if add

// Now check for an update
if ($options['update_path'] != '/' && strlen($options['update_path'])) {
if ($catalog_id = Catalog_local::get_from_path($options['update_path'])) {
$songs = Song::get_from_path($options['update_path']);
foreach ($songs as $song_id) {
Catalog::update_single_item('song',$song_id);
}
}
} // end if update

if ($catalog_id <= 0) {
Error::add('general', T_("This subdirectory is not part of an existing catalog. Update cannot be processed."));
}
break;
case 'gather_media_art':
if (!$catalogs) {
$catalogs = Catalog::get_catalogs();
}

// Iterate throught the catalogs and gather as needed
foreach ($catalogs as $catalog_id) {
$catalog = Catalog::create_from_id($catalog_id);
if ($catalog !== null) {
require AmpConfig::get('prefix') . UI::find_template('show_gather_art.inc.php');
flush();
$catalog->gather_art();
}
}
break;
}
}
}

// end of catalog class
Expand Down
5 changes: 2 additions & 3 deletions lib/themes.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ function get_themes()
}

$results = array();
$theme_cfg = '/theme.cfg.php';

while (($f = readdir($handle)) !== false) {
debug_event('theme', "Checking $f", 5);
$cfg = get_theme($f);
Expand Down Expand Up @@ -77,7 +75,8 @@ function get_theme($name)
$results = parse_ini_file($config_file);
$results['path'] = $name;
$results['base'] = explode(',', $results['base']);
for ($i = 0; $i < count($results['base']); $i++) {
$nbbases = count($results['base']);
for ($i = 0; $i < $nbbases; $i++) {
$results['base'][$i] = explode('|', $results['base'][$i]);
}
$results['colors'] = explode(',', $results['colors']);
Expand Down
13 changes: 13 additions & 0 deletions lib/ui.lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,19 @@ function show_confirmation($title,$text,$next_url,$cancel=0,$form_name='confirma
require AmpConfig::get('prefix') . UI::find_template('show_confirmation.inc.php');
} // show_confirmation

function catalog_worker($action, $catalogs = null, $options = null)
{
if (AmpConfig::get('ajax_load')) {
$sse_url = AmpConfig::get('web_path') . "/server/sse.server.php?worker=catalog&action=" . $action . "&catalogs=" . urlencode(serialize($catalogs));
if ($options) {
$sse_url .= "&options=" . urlencode(serialize($_POST));
}
sse_worker($sse_url);
} else {
Catalog::process_action($action, $catalogs, $options);
}
}

function sse_worker($url)
{
echo '<script type="text/javascript">';
Expand Down
Loading

0 comments on commit 7fa6e5c

Please sign in to comment.