function wppa_get_albums()
{
    global $wpdb;
    global $wppa_session;
    wppa_dbg_msg('get_albums entered: ' . wppa('mocc') . ' Start_album=' . wppa('start_album') . ', Cover=' . wppa('is_cover'));
    if (wppa('is_topten')) {
        return false;
    }
    if (wppa('is_lasten')) {
        return false;
    }
    if (wppa('is_comten')) {
        return false;
    }
    if (wppa('is_featen')) {
        return false;
    }
    if (wppa('is_tag')) {
        return false;
    }
    if (wppa('photos_only')) {
        return false;
    }
    if (wppa('src') && wppa_switch('photos_only')) {
        return false;
    }
    if (wppa('is_owner') && !wppa('start_album')) {
        return false;
    }
    // No owner album( s )
    if (wppa('calendar') == 'exifdtm') {
        return false;
    }
    if (wppa('calendar') == 'timestamp') {
        return false;
    }
    if (wppa('calendar') == 'modified') {
        return false;
    }
    // Supersearch?
    if (wppa('supersearch')) {
        $ss_data = explode(',', wppa('supersearch'));
        $data = $ss_data['3'];
        switch ($ss_data['1']) {
            // Category
            case 'c':
                $catlist = wppa_get_catlist();
                if (strpos($data, '.')) {
                    $temp = explode('.', $data);
                    $ids = $catlist[$temp['0']]['ids'];
                    $i = '1';
                    while ($i < count($temp)) {
                        $ids = array_intersect($ids, $catlist[$temp[$i]]['ids']);
                        $i++;
                    }
                } else {
                    $ids = $catlist[$data]['ids'];
                }
                if (empty($ids)) {
                    $ids = array('0');
                    // Dummy
                }
                $query = "SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `id` IN (" . implode(',', $ids) . ")";
                $albums = $wpdb->get_results($query, ARRAY_A);
                wppa_dbg_q('Q_SS');
                break;
                // Name. Name is converted to number or enum
            // Name. Name is converted to number or enum
            case 'n':
                $query = $wpdb->prepare("SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `name` = %s", $data);
                $albums = $wpdb->get_results($query, ARRAY_A);
                wppa_dbg_q('Q_SS');
                break;
                // Text
            // Text
            case 't':
                if (strpos($data, '.')) {
                    $temp = explode('.', $data);
                    $query = $wpdb->prepare("SELECT * FROM `" . WPPA_INDEX . "` WHERE `slug` = %s", $temp['0']);
                    $indexes = $wpdb->get_row($query, ARRAY_A);
                    wppa_dbg_q('Q_SS');
                    $ids = explode('.', wppa_expand_enum($indexes['albums']));
                    $i = '1';
                    while ($i < count($temp)) {
                        $query = $wpdb->prepare("SELECT * FROM `" . WPPA_INDEX . "` WHERE `slug` = %s", $temp[$i]);
                        $indexes = $wpdb->get_row($query, ARRAY_A);
                        wppa_dbg_q('Q_SS');
                        $ids = array_intersect($ids, explode('.', wppa_expand_enum($indexes['albums'])));
                        $i++;
                    }
                } else {
                    $query = $wpdb->prepare("SELECT * FROM `" . WPPA_INDEX . "` WHERE `slug` = %s", $data);
                    $indexes = $wpdb->get_row($query, ARRAY_A);
                    wppa_dbg_q('Q_SS');
                    $ids = explode('.', wppa_expand_enum($indexes['albums']));
                }
                if (empty($ids)) {
                    $ids = array('0');
                    // Dummy
                }
                $query = "SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `id` IN (" . implode(',', $ids) . ")";
                $albums = $wpdb->get_results($query, ARRAY_A);
                wppa_dbg_q('Q_SS');
                break;
        }
    } elseif (wppa('src')) {
        $final_array = array();
        $chunks = explode(',', stripslashes(strtolower(wppa('searchstring'))));
        // all chunks
        foreach ($chunks as $chunk) {
            if (strlen(trim($chunk))) {
                $words = wppa_index_raw_to_words($chunk);
                $album_array = array();
                // all words in the searchstring
                foreach ($words as $word) {
                    $word = trim($word);
                    if (strlen($word) > 1) {
                        if (strlen($word) > 10) {
                            $word = substr($word, 0, 10);
                        }
                        if (wppa_switch('wild_front')) {
                            $aidxs = $wpdb->get_results("SELECT `slug`, `albums` FROM `" . WPPA_INDEX . "` WHERE `slug` LIKE '%" . $word . "%'", ARRAY_A);
                        } else {
                            $aidxs = $wpdb->get_results("SELECT `slug`, `albums` FROM `" . WPPA_INDEX . "` WHERE `slug` LIKE '" . $word . "%'", ARRAY_A);
                        }
                        $albums = '';
                        if ($aidxs) {
                            foreach ($aidxs as $ai) {
                                $albums .= $ai['albums'] . ',';
                            }
                        }
                        $album_array[] = wppa_index_string_to_array(trim($albums, ','));
                    }
                }
                // Must meet all words: intersect photo sets
                foreach (array_keys($album_array) as $idx) {
                    if ($idx > '0') {
                        $album_array['0'] = array_intersect($album_array['0'], $album_array[$idx]);
                    }
                }
                // Save partial result
                if (isset($album_array['0'])) {
                    $final_array = array_merge($final_array, $album_array['0']);
                }
            }
        }
        // Compose WHERE clause
        $selection = " `id` = '0' ";
        foreach (array_keys($final_array) as $p) {
            $selection .= "OR `id` = '" . $final_array[$p] . "' ";
        }
        // Get them
        $albums = $wpdb->get_results("SELECT * FROM `" . WPPA_ALBUMS . "` WHERE " . $selection . " " . wppa_get_album_order('0'), ARRAY_A);
        wppa_dbg_q('Q10');
        // Exclusive separate albums?
        if (wppa_switch('excl_sep')) {
            foreach (array_keys($albums) as $idx) {
                if (wppa_is_separate($albums[$idx]['id'])) {
                    unset($albums[$idx]);
                }
            }
        }
        // Rootsearch?
        if (wppa('is_rootsearch')) {
            $root = $wppa_session['search_root'];
            if (is_array($albums)) {
                $c1 = count($albums);
                foreach (array_keys($albums) as $idx) {
                    if (!wppa_is_ancestor($root, $albums[$idx]['id'])) {
                        unset($albums[$idx]);
                    }
                }
                $c2 = count($albums);
                wppa_dbg_msg('Rootsearch albums:' . $c1 . ' -> ' . $c2);
            }
        }
        // Check maximum
        if (is_array($albums) && count($albums) > wppa_opt('max_search_albums') && wppa_opt('max_search_albums') != '0') {
            $alert_text = sprintf(__('There are %s albums found. Only the first %s will be shown. Please refine your search criteria.', 'wp-photo-album-plus'), count($albums), wppa_opt('max_search_albums'));
            wppa_alert($alert_text);
            foreach (array_keys($albums) as $idx) {
                if ($idx >= wppa_opt('max_search_albums')) {
                    unset($albums[$idx]);
                }
            }
        }
        if (is_array($albums)) {
            wppa('any', true);
        }
    } else {
        // Its not search
        $id = wppa('start_album');
        if (!$id) {
            $id = '0';
        }
        // Do the query
        if ($id == '-2') {
            // All albums
            if (wppa('is_cover')) {
                $q = "SELECT * FROM `" . WPPA_ALBUMS . "` " . wppa_get_album_order();
                wppa_dbg_q('Q11d');
                $albums = $wpdb->get_results($q, ARRAY_A);
            } else {
                $albums = false;
            }
        } elseif (wppa('last_albums')) {
            // is_cover = true. For the order sequence, see remark in wppa_albums()
            if (wppa('last_albums_parent')) {
                $q = $wpdb->prepare("SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `a_parent` = %s ORDER BY `timestamp` DESC LIMIT %d", wppa('last_albums_parent'), wppa('last_albums'));
            } else {
                $q = $wpdb->prepare("SELECT * FROM `" . WPPA_ALBUMS . "` ORDER BY `timestamp` DESC LIMIT %d", wppa('last_albums'));
            }
            wppa_dbg_q('Q11a');
            $albums = $wpdb->get_results($q, ARRAY_A);
        } elseif (wppa_is_int($id)) {
            if (wppa('is_cover')) {
                $q = $wpdb->prepare('SELECT * FROM ' . WPPA_ALBUMS . ' WHERE `id` = %s', $id);
            } else {
                $q = $wpdb->prepare('SELECT * FROM ' . WPPA_ALBUMS . ' WHERE `a_parent` = %s ' . wppa_get_album_order($id), $id);
            }
            wppa_dbg_q('Q11b');
            $albums = $wpdb->get_results($q, ARRAY_A);
            if (!wppa('is_cover')) {
                wppa_verify_treecounts($id, 'albums', count($albums));
            }
        } elseif (strpos($id, '.') !== false) {
            // Album enum
            $ids = wppa_series_to_array($id);
            if (wppa('is_cover')) {
                $q = "SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `id` = " . implode(" OR `id` = ", $ids) . " " . wppa_get_album_order();
            } else {
                $q = "SELECT * FROM `" . WPPA_ALBUMS . "` WHERE `a_parent` = " . implode(" OR `a_parent` = ", $ids) . " " . wppa_get_album_order();
            }
            wppa_dbg_q('Q11c');
            wppa_dbg_msg($q, 'red');
            $albums = $wpdb->get_results($q, ARRAY_A);
        } else {
            $albums = false;
        }
    }
    // Check for empty albums
    if (wppa_switch('skip_empty_albums')) {
        $user = wppa_get_user();
        if (is_array($albums)) {
            foreach (array_keys($albums) as $albumkey) {
                $albumid = $albums[$albumkey]['id'];
                $albumowner = $albums[$albumkey]['owner'];
                $treecount = wppa_treecount_a($albums[$albumkey]['id']);
                $photocount = $treecount['photos'];
                if (!$photocount && !wppa_user_is('administrator') && $user != $albumowner) {
                    unset($albums[$albumkey]);
                }
            }
        }
    }
    // Copy data into secondary cache
    if ($albums) {
        wppa_cache_album('add', $albums);
    }
    wppa('album_count', count($albums));
    return $albums;
}
function wppa_album_select_a($args)
{
    global $wpdb;
    $args = wp_parse_args($args, array('exclude' => '', 'selected' => '', 'disabled' => '', 'addpleaseselect' => false, 'addnone' => false, 'addall' => false, 'addgeneric' => false, 'addblank' => false, 'addselected' => false, 'addseparate' => false, 'addselbox' => false, 'disableancestors' => false, 'checkaccess' => false, 'checkowner' => false, 'checkupload' => false, 'addmultiple' => false, 'addnumbers' => false, 'path' => false, 'root' => false, 'content' => false, 'sort' => true));
    // Provide default selection if no selected given
    if ($args['selected'] === '') {
        $args['selected'] = wppa_get_last_album();
    }
    // See if selection is valid
    if ($args['selected'] == $args['exclude'] || $args['checkupload'] && !wppa_allow_uploads($args['selected']) || $args['disableancestors'] && wppa_is_ancestor($args['exclude'], $args['selected'])) {
        $args['selected'] = '0';
    }
    $albums = $wpdb->get_results("SELECT * FROM `" . WPPA_ALBUMS . "` " . wppa_get_album_order($args['root']), ARRAY_A);
    // Add to secondary cache
    if ($albums) {
        wppa_cache_album('add', $albums);
    }
    if ($albums) {
        // Filter for root
        if ($args['root']) {
            $root = $args['root'];
            switch ($root) {
                // case '0': all, will be skipped as it returns false in 'if ( $args['root'] )'
                case '-2':
                    // Generic only
                    foreach (array_keys($albums) as $albidx) {
                        if (wppa_is_separate($albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
                case '-1':
                    // Separate only
                    foreach (array_keys($albums) as $albidx) {
                        if (!wppa_is_separate($albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
                default:
                    foreach (array_keys($albums) as $albidx) {
                        if (!wppa_is_ancestor($root, $albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
            }
        }
        // Filter for must have content
        if ($args['content']) {
            foreach (array_keys($albums) as $albidx) {
                if (wppa_get_photo_count($albums[$albidx]['id']) <= wppa_get_mincount()) {
                    unset($albums[$albidx]);
                }
            }
        }
        // Add paths
        if ($args['path']) {
            $albums = wppa_add_paths($albums);
        } else {
            foreach (array_keys($albums) as $index) {
                $albums[$index]['name'] = __(stripslashes($albums[$index]['name']));
            }
        }
        // Sort
        if ($args['sort']) {
            $albums = wppa_array_sort($albums, 'name');
        }
    }
    // Output
    $result = '';
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addpleaseselect']) {
        $result .= '<option value="0" disabled="disabled" ' . $selected . ' >' . (is_admin() ? __('- select an album -', 'wppa') : __a('- select an album -')) . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addnone']) {
        $result .= '<option value="0"' . $selected . ' >' . (is_admin() ? __('--- none ---', 'wppa') : __a('--- none ---')) . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addall']) {
        $result .= '<option value="0"' . $selected . ' >' . (is_admin() ? __('--- all ---', 'wppa') : __a('--- all ---')) . '</option>';
    }
    $selected = $args['selected'] == '-2' ? ' selected="selected"' : '';
    if ($args['addall']) {
        $result .= '<option value="-2"' . $selected . ' >' . (is_admin() ? __('--- generic ---', 'wppa') : __a('--- generic ---')) . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addblank']) {
        $result .= '<option value="0"' . $selected . ' >' . '</option>';
    }
    $selected = $args['selected'] == '-99' ? ' selected="selected"' : '';
    if ($args['addmultiple']) {
        $result .= '<option value="-99"' . $selected . ' >' . (is_admin() ? __('--- multiple see below ---', 'wppa') : __a('--- multiple see below ---')) . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addselbox']) {
        $result .= '<option value="0"' . $selected . ' >' . (is_admin() ? __('--- a selection box ---', 'wppa') : __a('--- a selection box ---')) . '</option>';
    }
    if ($albums) {
        foreach ($albums as $album) {
            if ($args['disabled'] == $album['id'] || $args['exclude'] == $album['id'] || $args['checkupload'] && !wppa_allow_uploads($album['id']) || $args['disableancestors'] && wppa_is_ancestor($args['exclude'], $album['id'])) {
                $disabled = ' disabled="disabled"';
            } else {
                $disabled = '';
            }
            if ($args['selected'] == $album['id'] && !$disabled) {
                $selected = ' selected="selected"';
            } else {
                $selected = '';
            }
            $ok = true;
            // Assume this will be in the list
            if ($args['checkaccess'] && !wppa_have_access($album['id'])) {
                $ok = false;
            }
            if ($args['checkowner'] && wppa_switch('upload_owner_only')) {
                // Need to check
                if ($album['owner'] != wppa_get_user() && $album['owner'] != '--- public ---') {
                    // Not 'mine'
                    if (!wppa_user_is('administrator')) {
                        // No admin
                        $ok = false;
                    }
                }
            }
            if ($selected && $args['addselected']) {
                $ok = true;
            }
            if ($ok) {
                if ($args['addnumbers']) {
                    $number = ' ( ' . $album['id'] . ' )';
                } else {
                    $number = '';
                }
                $result .= '<option value="' . $album['id'] . '" ' . $selected . $disabled . '>' . $album['name'] . $number . '</option>';
            }
        }
    }
    $selected = $args['selected'] == '-1' ? ' selected="selected"' : '';
    if ($args['addseparate']) {
        $result .= '<option value="-1"' . $selected . '>' . (is_admin() ? __('--- separate ---', 'wppa') : __a('--- separate ---')) . '</option>';
    }
    return $result;
}
function wppa_album_select_a($args)
{
    global $wpdb;
    $args = wp_parse_args($args, array('exclude' => '', 'selected' => '', 'disabled' => '', 'addpleaseselect' => false, 'addnone' => false, 'addall' => false, 'addgeneric' => false, 'addblank' => false, 'addselected' => false, 'addseparate' => false, 'addselbox' => false, 'addowner' => false, 'disableancestors' => false, 'checkaccess' => false, 'checkowner' => false, 'checkupload' => false, 'addmultiple' => false, 'addnumbers' => false, 'path' => false, 'root' => false, 'content' => false, 'sort' => true, 'checkarray' => false, 'array' => array(), 'optionclass' => ''));
    // Provide default selection if no selected given
    if ($args['selected'] === '') {
        $args['selected'] = wppa_get_last_album();
    }
    // See if selection is valid
    if ($args['selected'] == $args['exclude'] || $args['checkupload'] && !wppa_allow_uploads($args['selected']) || $args['disableancestors'] && wppa_is_ancestor($args['exclude'], $args['selected'])) {
        $args['selected'] = '0';
    }
    // Get roughly the albums that might be in the selection
    if ($args['checkarray'] && !empty($args['array'])) {
        $albums = $wpdb->get_results("SELECT `id`, `name` " . "FROM `" . WPPA_ALBUMS . "` " . "WHERE `id` IN (" . implode(',', $args['array']) . ") " . ($args['checkowner'] && wppa_switch('upload_owner_only') && !wppa_user_is('administrator') ? "AND `owner` IN ( '--- public ---', '" . wppa_get_user() . "' ) " : "") . wppa_get_album_order($args['root']), ARRAY_A);
    } else {
        $albums = $wpdb->get_results("SELECT `id`, `name` " . "FROM `" . WPPA_ALBUMS . "` " . ($args['checkowner'] && wppa_switch('upload_owner_only') && !wppa_user_is('administrator') ? "WHERE `owner` IN ( '--- public ---', '" . wppa_get_user() . "' ) " : "") . wppa_get_album_order($args['root']), ARRAY_A);
    }
    /* Can not add to cache because only "SELECT * " can be added
    	// Add to secondary cache
    	if ( $albums ) {
    		wppa_cache_album( 'add', $albums );
    	}
    	*/
    if ($albums) {
        // Filter for root
        if ($args['root']) {
            $root = $args['root'];
            switch ($root) {
                // case '0': all, will be skipped as it returns false in 'if ( $args['root'] )'
                case '-2':
                    // Generic only
                    foreach (array_keys($albums) as $albidx) {
                        if (wppa_is_separate($albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
                case '-1':
                    // Separate only
                    foreach (array_keys($albums) as $albidx) {
                        if (!wppa_is_separate($albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
                default:
                    foreach (array_keys($albums) as $albidx) {
                        if (!wppa_is_ancestor($root, $albums[$albidx]['id'])) {
                            unset($albums[$albidx]);
                        }
                    }
                    break;
            }
        }
        // Filter for must have content
        if ($args['content']) {
            foreach (array_keys($albums) as $albidx) {
                if (wppa_get_photo_count($albums[$albidx]['id']) <= wppa_get_mincount()) {
                    unset($albums[$albidx]);
                }
            }
        }
        // Add paths
        if ($args['path']) {
            $albums = wppa_add_paths($albums);
        } else {
            foreach (array_keys($albums) as $index) {
                $albums[$index]['name'] = __(stripslashes($albums[$index]['name']));
            }
        }
        // Sort
        if ($args['sort']) {
            $albums = wppa_array_sort($albums, 'name');
        }
    }
    // Output
    $result = '';
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addpleaseselect']) {
        $result .= '<option value="0" disabled="disabled" ' . $selected . ' >' . __('- select an album -', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addnone']) {
        $result .= '<option value="0"' . $selected . ' >' . __('--- none ---', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addall']) {
        $result .= '<option value="0"' . $selected . ' >' . __('--- all ---', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '-2' ? ' selected="selected"' : '';
    if ($args['addall']) {
        $result .= '<option value="-2"' . $selected . ' >' . __('--- generic ---', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '-3' ? ' selected="selected"' : '';
    if ($args['addowner']) {
        $result .= '<option value="-3"' . $selected . ' >' . __('--- owner/public ---', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addblank']) {
        $result .= '<option value="0"' . $selected . ' >' . '</option>';
    }
    $selected = $args['selected'] == '-99' ? ' selected="selected"' : '';
    if ($args['addmultiple']) {
        $result .= '<option value="-99"' . $selected . ' >' . __('--- multiple see below ---', 'wp-photo-album-plus') . '</option>';
    }
    $selected = $args['selected'] == '0' ? ' selected="selected"' : '';
    if ($args['addselbox']) {
        $result .= '<option value="0"' . $selected . ' >' . __('--- a selection box ---', 'wp-photo-album-plus') . '</option>';
    }
    // In case multiple
    if (strpos($args['selected'], ',') !== false) {
        $selarr = explode(',', $args['selected']);
    } else {
        $selarr = array($args['selected']);
    }
    if ($albums) {
        foreach ($albums as $album) {
            if ($args['disabled'] == $album['id'] || $args['exclude'] == $album['id'] || $args['checkupload'] && !wppa_allow_uploads($album['id']) || $args['disableancestors'] && wppa_is_ancestor($args['exclude'], $album['id'])) {
                $disabled = ' disabled="disabled"';
            } else {
                $disabled = '';
            }
            if (in_array($album['id'], $selarr, true) && !$disabled) {
                $selected = ' selected="selected"';
            } else {
                $selected = '';
            }
            $ok = true;
            // Assume this will be in the list
            if ($args['checkaccess'] && !wppa_have_access($album['id'])) {
                $ok = false;
            }
            /* This is in the query now
            		if ( $args['checkowner'] && wppa_switch( 'upload_owner_only' ) ) { 							// Need to check
            			if ( $album['owner'] != wppa_get_user() && $album['owner']  != '--- public ---' ) { 	// Not 'mine'
            				if ( ! wppa_user_is( 'administrator' ) ) {											// No admin
            					$ok = false;
            				}
            			}
            		}
            		*/
            /* This is in the query now
            		if ( $args['checkarray'] ) {
            			if ( ! in_array( $album['id'], $args['array'] ) ) {
            				$ok = false;
            			}
            		}
            		*/
            if ($selected && $args['addselected']) {
                $ok = true;
            }
            if ($ok) {
                if ($args['addnumbers']) {
                    $number = ' ( ' . $album['id'] . ' )';
                } else {
                    $number = '';
                }
                $result .= '<option class="' . $args['optionclass'] . '" value="' . $album['id'] . '" ' . $selected . $disabled . '>' . $album['name'] . $number . '</option>';
            }
        }
    }
    $selected = $args['selected'] == '-1' ? ' selected="selected"' : '';
    if ($args['addseparate']) {
        $result .= '<option value="-1"' . $selected . '>' . __('--- separate ---', 'wp-photo-album-plus') . '</option>';
    }
    return $result;
}