piwigo/index.php
rvelices dc17fc9ba9 bug 3056: quick search OR operator priority taken into account
search for 'mary qwerty' will ignore 'qwerty' and return only results for 'mary' if there is no such thing as 'qwerty' in the photos (if there was 'mary' and 'qwerty', the results for both 'mary' AND 'qwerty' would be shown)

git-svn-id: http://piwigo.org/svn/trunk@27882 68402e56-0260-453c-a942-63ccdbb3a9ee
2014-03-22 13:03:45 +00:00

375 lines
12 KiB
PHP

<?php
// +-----------------------------------------------------------------------+
// | Piwigo - a PHP based photo gallery |
// +-----------------------------------------------------------------------+
// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org |
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
// +-----------------------------------------------------------------------+
// | 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 |
// | |
// | 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. |
// +-----------------------------------------------------------------------+
//--------------------------------------------------------------------- include
define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
include(PHPWG_ROOT_PATH.'include/section_init.inc.php');
// Check Access and exit when user status is not ok
check_status(ACCESS_GUEST);
// access authorization check
if (isset($page['category']))
{
check_restrictions($page['category']['id']);
}
if ($page['start']>0 && $page['start']>=count($page['items']))
{
page_not_found('', duplicate_index_url(array('start'=>0)));
}
trigger_action('loc_begin_index');
//---------------------------------------------- change of image display order
if (isset($_GET['image_order']))
{
if ( (int)$_GET['image_order'] > 0)
{
pwg_set_session_var('image_order', (int)$_GET['image_order']);
}
else
{
pwg_unset_session_var('image_order');
}
redirect(
duplicate_index_url(
array(), // nothing to redefine
array('start') // changing display order goes back to section first page
)
);
}
if (isset($_GET['display']))
{
$page['meta_robots']['noindex']=1;
if (array_key_exists($_GET['display'], ImageStdParams::get_defined_type_map()))
{
pwg_set_session_var('index_deriv', $_GET['display']);
}
}
//-------------------------------------------------------------- initialization
// navigation bar
$page['navigation_bar'] = array();
if (count($page['items']) > $page['nb_image_page'])
{
$page['navigation_bar'] = create_navigation_bar(
duplicate_index_url(array(), array('start')),
count($page['items']),
$page['start'],
$page['nb_image_page'],
true, 'start'
);
}
$template->assign('thumb_navbar', $page['navigation_bar'] );
// caddie filling :-)
if (isset($_GET['caddie']))
{
fill_caddie($page['items']);
redirect(duplicate_index_url());
}
if (isset($page['is_homepage']) and $page['is_homepage'])
{
$canonical_url = get_gallery_home_url();
}
else
{
$start = $page['nb_image_page'] * round($page['start'] / $page['nb_image_page']);
if ($start>0 && $start >= count($page['items']) )
{
$start -= $page['nb_image_page'];
}
$canonical_url = duplicate_index_url(array('start' => $start));
}
$template->assign('U_CANONICAL', $canonical_url);
//-------------------------------------------------------------- page title
$title = $page['title'];
$template_title = $page['section_title'];
if (count($page['items']) > 0)
{
$template_title.= ' ['.count($page['items']).']';
}
$template->assign('TITLE', $template_title);
//-------------------------------------------------------------- menubar
include( PHPWG_ROOT_PATH.'include/menubar.inc.php');
$template->set_filename('index', 'index.tpl');
// +-----------------------------------------------------------------------+
// | index page (categories, thumbnails, search, calendar, random, etc.) |
// +-----------------------------------------------------------------------+
if ( empty($page['is_external']) or !$page['is_external'] )
{
//----------------------------------------------------- template initialization
$page['body_id'] = 'theCategoryPage';
if (isset($page['flat']) or isset($page['chronology_field']))
{
$template->assign(
'U_MODE_NORMAL',
duplicate_index_url( array(), array('chronology_field', 'start', 'flat') )
);
}
if ($conf['index_flat_icon'] and !isset($page['flat']) and 'categories' == $page['section'])
{
$template->assign(
'U_MODE_FLAT',
duplicate_index_url(array('flat' => ''), array('start', 'chronology_field'))
);
}
if (!isset($page['chronology_field']))
{
$chronology_params = array(
'chronology_field' => 'created',
'chronology_style' => 'monthly',
'chronology_view' => 'list',
);
if ($conf['index_created_date_icon'])
{
$template->assign(
'U_MODE_CREATED',
duplicate_index_url( $chronology_params, array('start', 'flat') )
);
}
if ($conf['index_posted_date_icon'])
{
$chronology_params['chronology_field'] = 'posted';
$template->assign(
'U_MODE_POSTED',
duplicate_index_url( $chronology_params, array('start', 'flat') )
);
}
}
else
{
if ($page['chronology_field'] == 'created')
{
$chronology_field = 'posted';
}
else
{
$chronology_field = 'created';
}
if ($conf['index_'.$chronology_field.'_date_icon'])
{
$url = duplicate_index_url(
array('chronology_field'=>$chronology_field ),
array('chronology_date', 'start', 'flat')
);
$template->assign(
'U_MODE_'.strtoupper($chronology_field),
$url
);
}
}
if ('search' == $page['section'])
{
$template->assign(
'U_SEARCH_RULES',
get_root_url().'search_rules.php?search_id='.$page['search']
);
}
if (isset($page['category']) and is_admin())
{
$template->assign(
'U_EDIT',
get_root_url().'admin.php?page=album-'.$page['category']['id']
);
}
if (is_admin() and !empty($page['items']))
{
$template->assign(
'U_CADDIE',
add_url_params(duplicate_index_url(), array('caddie'=>1) )
);
}
if ( $page['section']=='search' and $page['start']==0 and
!isset($page['chronology_field']) and isset($page['qsearch_details']) )
{
$template->assign('QUERY_SEARCH',
htmlspecialchars($page['qsearch_details']['q']) );
$cats = array_merge(
(array)@$page['qsearch_details']['matching_cats_no_images'],
(array)@$page['qsearch_details']['matching_cats'] );
if (count($cats))
{
usort($cats, 'name_compare');
$hints = array();
foreach ( $cats as $cat )
{
$hints[] = get_cat_display_name( array($cat), '' );
}
$template->assign( 'category_search_results', $hints);
}
$tags = (array)@$page['qsearch_details']['matching_tags'];
foreach ( $tags as $tag )
{
$tag['URL'] = make_index_url(array('tags'=>array($tag)));
$template->append( 'tag_search_results', $tag);
}
if (empty($page['items']))
{
$template->append( 'no_search_results', $page['qsearch_details']['q']);
}
elseif (!empty($page['qsearch_details']['unmatched_terms']))
{
$template->assign( 'no_search_results', $page['qsearch_details']['unmatched_terms']);
}
}
// image order
if ( $conf['index_sort_order_input']
and count($page['items']) > 0
and $page['section'] != 'most_visited'
and $page['section'] != 'best_rated')
{
$preferred_image_orders = get_category_preferred_image_orders();
$order_idx = pwg_get_session_var( 'image_order', 0 );
// get first order field and direction
$first_order = substr($conf['order_by'], 9);
if (($pos = strpos($first_order, ',')) !== false)
{
$first_order = substr($first_order, 0, $pos);
}
$first_order = trim($first_order);
$url = add_url_params(
duplicate_index_url(),
array('image_order' => '')
);
$tpl_orders = array();
$order_selected = false;
foreach ($preferred_image_orders as $order_id => $order)
{
if ($order[2])
{
// force select if the field is the first field of order_by
if (!$order_selected && $order[1]==$first_order)
{
$order_idx = $order_id;
$order_selected = true;
}
$tpl_orders[ $order_id ] = array(
'DISPLAY' => $order[0],
'URL' => $url.$order_id,
'SELECTED' => $order_idx==$order_id,
);
}
}
$tpl_orders[0]['SELECTED'] = !$order_selected; // unselect "Default" if another one is selected
$template->assign('image_orders', $tpl_orders);
}
// category comment
if ($page['start']==0 and !isset($page['chronology_field']) and !empty($page['comment']) )
{
$template->assign('CONTENT_DESCRIPTION', $page['comment'] );
}
if ( isset($page['category']['count_categories']) and $page['category']['count_categories']==0 )
{// count_categories might be computed by menubar - if the case unassign flat link if no sub albums
$template->clear_assign('U_MODE_FLAT');
}
//------------------------------------------------------ main part : thumbnails
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 )
)
{
include(PHPWG_ROOT_PATH.'include/category_cats.inc.php');
}
if ( !empty($page['items']) )
{
include(PHPWG_ROOT_PATH.'include/category_default.inc.php');
$url = add_url_params(
duplicate_index_url(),
array('display' => '')
);
$selected_type = $template->get_template_vars('derivative_params')->type;
$template->clear_assign( 'derivative_params' );
$type_map = ImageStdParams::get_defined_type_map();
unset($type_map[IMG_XXLARGE], $type_map[IMG_XLARGE]);
foreach($type_map as $params)
{
$template->append(
'image_derivatives',
array(
'DISPLAY' => l10n($params->type),
'URL' => $url.$params->type,
'SELECTED' => ($params->type == $selected_type ? true:false),
)
);
}
}
// slideshow
// execute after init thumbs in order to have all picture informations
if (!empty($page['cat_slideshow_url']))
{
if (isset($_GET['slideshow']))
{
redirect($page['cat_slideshow_url']);
}
elseif ($conf['index_slideshow_icon'])
{
$template->assign('U_SLIDESHOW', $page['cat_slideshow_url']);
}
}
}
//------------------------------------------------------------ end
include(PHPWG_ROOT_PATH.'include/page_header.php');
trigger_action('loc_end_index');
flush_page_messages();
$template->parse_index_buttons();
$template->pparse('index');
//------------------------------------------------------------ log informations
pwg_log();
include(PHPWG_ROOT_PATH.'include/page_tail.php');
?>