From 4e65d9af4667f3d8556522843f776f1fa074ea21 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sun, 23 Sep 2012 11:19:26 +0000 Subject: feature 2614: pagination on albums git-svn-id: http://piwigo.org/svn/trunk@18165 68402e56-0260-453c-a942-63ccdbb3a9ee --- include/category_cats.inc.php | 38 ++++++++++++++-------------------- include/functions.inc.php | 4 ++-- include/functions_url.inc.php | 5 +++++ include/section_init.inc.php | 47 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 68 insertions(+), 26 deletions(-) (limited to 'include') diff --git a/include/category_cats.inc.php b/include/category_cats.inc.php index c8b728e5a..b09f4eaec 100644 --- a/include/category_cats.inc.php +++ b/include/category_cats.inc.php @@ -22,11 +22,19 @@ // +-----------------------------------------------------------------------+ /** - * This file is included by the main page to show thumbnails for a category - * that have only subcategories or to show recent categories + * This file is included by the main page to show subcategories of a category + * or to show recent categories or main page categories list * */ +$selection = array_slice( + $page['categories'], + $page['starta'], + $conf['nb_categories_page'] + ); + +$selection = trigger_event('loc_index_categories_selection', $selection); + // $user['forbidden_categories'] including with USER_CACHE_CATEGORIES_TABLE $query = ' SELECT @@ -38,27 +46,11 @@ SELECT count_images, count_categories FROM '.CATEGORIES_TABLE.' c - INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.' ucc ON id = cat_id AND user_id = '.$user['id']; - -if ('recent_cats' == $page['section']) -{ - $query.= ' - WHERE date_last >= '.pwg_db_get_recent_period_expression($user['recent_period']); -} -else -{ - $query.= ' - WHERE id_uppercat '.(!isset($page['category']) ? 'is NULL' : '= '.$page['category']['id']); -} - -$query.= ' - '.get_sql_condition_FandF( - array( - 'visible_categories' => 'id', - ), - 'AND' - ); - + INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.' ucc + ON id = cat_id + AND user_id = '.$user['id'].' + WHERE c.id IN('.implode(',', $selection).')'; + if ('recent_cats' != $page['section']) { $query.= ' diff --git a/include/functions.inc.php b/include/functions.inc.php index 0be5ec9ef..031ee652a 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -1429,13 +1429,13 @@ function verify_ephemeral_key($key, $aditionnal_data_to_hash = '') /** * return an array which will be sent to template to display navigation bar */ -function create_navigation_bar($url, $nb_element, $start, $nb_element_page, $clean_url = false) +function create_navigation_bar($url, $nb_element, $start, $nb_element_page, $clean_url = false, $param_name='start') { global $conf; $navbar = array(); $pages_around = $conf['paginate_pages_around']; - $start_str = $clean_url ? '/start-' : (strpos($url, '?')===false ? '?':'&').'start='; + $start_str = $clean_url ? '/'.$param_name.'-' : (strpos($url, '?')===false ? '?':'&').$param_name.'='; if (!isset($start) or !is_numeric($start) or (is_numeric($start) and $start < 0)) { diff --git a/include/functions_url.inc.php b/include/functions_url.inc.php index 8d9dba93e..7a3853e25 100644 --- a/include/functions_url.inc.php +++ b/include/functions_url.inc.php @@ -458,6 +458,7 @@ function parse_section_url( $tokens, &$next_token) and strpos($tokens[$current_token], 'created-')!==0 and strpos($tokens[$current_token], 'posted-')!==0 and strpos($tokens[$next_token], 'start-')!==0 + and strpos($tokens[$next_token], 'starta-')!==0 and $tokens[$current_token] != 'flat') { if (empty($maybe_permalinks)) @@ -651,6 +652,10 @@ function parse_well_known_params_url($tokens, &$i) { $page['start'] = $matches[1]; } + elseif (preg_match('/^starta-(\d+)/', $tokens[$i], $matches)) + { + $page['starta'] = $matches[1]; + } $i++; } return $page; diff --git a/include/section_init.inc.php b/include/section_init.inc.php index 2bfb1e9b5..25712a0bb 100644 --- a/include/section_init.inc.php +++ b/include/section_init.inc.php @@ -41,7 +41,11 @@ // 'start' => 24 // ); -$page['items'] = array(); +// exemple of dynamic nb_categories_page (%2 for nice display) +// $conf['nb_categories_page'] = 2*round($user['nb_image_page']/4); + +$page['items'] = $page['categories'] = array(); +$page['start'] = $page['starta'] = 0; // some ISPs set PATH_INFO to empty string or to SCRIPT_FILENAME while in the // default apache implementation it is not set @@ -246,8 +250,11 @@ if ('categories' == $page['section']) else $page['title'] = ''; // will be set later + + // GET IMAGES LIST if ( + $page['starta'] == 0 and (!isset($page['chronology_field'])) and ( (isset($page['category'])) or @@ -310,6 +317,44 @@ SELECT DISTINCT(image_id) $page['items'] = array_from_query($query, 'image_id'); } //otherwise the calendar will requery all subitems + + // GET CATEGORIES LIST + if ( 0==$page['start'] + and !isset($page['flat']) + and !isset($page['chronology_field']) + and ('recent_cats'==$page['section'] or 'categories'==$page['section']) + and (!isset($page['category']['count_categories']) or $page['category']['count_categories']>0 ) + ) + { + $query = ' +SELECT c.id + FROM '.CATEGORIES_TABLE.' c + INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.' ucc + ON id = cat_id + AND user_id = '.$user['id']; + + if ('recent_cats' == $page['section']) + { + $query.= ' + WHERE date_last >= '.pwg_db_get_recent_period_expression($user['recent_period']); + } + else + { + $query.= ' + WHERE id_uppercat '.(!isset($page['category']) ? 'is NULL' : '= '.$page['category']['id']); + } + + $query.= ' + '.get_sql_condition_FandF( + array('visible_categories' => 'id'), + 'AND' + ); + + $query.= ' + ;'; + + $page['categories'] = array_from_query($query, 'id'); + } } // special sections else -- cgit v1.2.3