diff options
Diffstat (limited to 'BSF/include/functions_url.inc.php')
-rw-r--r-- | BSF/include/functions_url.inc.php | 740 |
1 files changed, 0 insertions, 740 deletions
diff --git a/BSF/include/functions_url.inc.php b/BSF/include/functions_url.inc.php deleted file mode 100644 index fa7114dea..000000000 --- a/BSF/include/functions_url.inc.php +++ /dev/null @@ -1,740 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | Piwigo - a PHP based picture gallery | -// +-----------------------------------------------------------------------+ -// | Copyright(C) 2008 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. | -// +-----------------------------------------------------------------------+ - - -/** - * returns a prefix for each url link on displayed page - * and return an empty string for current path - * @return string - */ -function get_root_url() -{ - global $page; - if ( isset($page['root_path']) ) - { - $root_url = $page['root_path']; - } - else - {// TODO - add HERE the possibility to call PWG functions from external scripts - $root_url = PHPWG_ROOT_PATH; - } - if ( dirname($root_url)!='.' ) - { - return $root_url; - } - else - { - return (string)substr($root_url, 2); - } -} - -/** - * returns the absolute url to the root of PWG - * @param boolean with_scheme if false - does not add http://toto.com - */ -function get_absolute_root_url($with_scheme=true) -{ - // TODO - add HERE the possibility to call PWG functions from external scripts - $url = ''; - if ($with_scheme) - { - if (empty($_SERVER['HTTPS'])) - { - $url .= 'http://'; - } - else - { - $url .= 'https://'; - } - $url .= $_SERVER['HTTP_HOST']; - if ($_SERVER['SERVER_PORT'] != 80) - { - $url_port = ':'.$_SERVER['SERVER_PORT']; - if (strrchr($url, ':') != $url_port) - { - $url .= $url_port; - } - } - } - $url .= cookie_path(); - return $url; -} - -/** - * adds one or more _GET style parameters to an url - * example: add_url_params('/x', array('a'=>'b')) returns /x?a=b - * add_url_params('/x?cat_id=10', array('a'=>'b')) returns /x?cat_id=10&a=b - * @param string url - * @param array params - * @return string - */ -function add_url_params($url, $params) -{ - if ( !empty($params) ) - { - assert( is_array($params) ); - $is_first = true; - foreach($params as $param=>$val) - { - if ($is_first) - { - $is_first = false; - $url .= ( strstr($url, '?')===false ) ? '?' :'&'; - } - else - { - $url .= '&'; - } - $url .= $param; - if (isset($val)) - { - $url .= '='.$val; - } - } - } - return $url; -} - -/** - * build an index URL for a specific section - * - * @param array - * @return string - */ -function make_index_url($params = array()) -{ - global $conf; - $url = get_root_url().'index'; - if ($conf['php_extension_in_urls']) - { - $url .= '.php'; - } - if ($conf['question_mark_in_urls']) - { - $url .= '?'; - } - $url.= make_section_in_url($params); - $url = add_well_known_params_in_url($url, $params); - return $url; -} - -/** - * build an index URL with current page parameters, but with redefinitions - * and removes. - * - * duplicate_index_url( array( - * 'category' => array('id'=>12, 'name'=>'toto'), - * array('start') - * ) will create an index URL on the current section (categories), but on - * a redefined category and without the start URL parameter. - * - * @param array redefined keys - * @param array removed keys - * @return string - */ -function duplicate_index_url($redefined = array(), $removed = array()) -{ - return make_index_url( - params_for_duplication($redefined, $removed) - ); -} - -/** - * returns $page global array with key redefined and key removed - * - * @param array redefined keys - * @param array removed keys - * @return array - */ -function params_for_duplication($redefined, $removed) -{ - global $page; - - if (count($removed) > 0) - { - $params = array(); - - foreach ($page as $page_item_key => $page_item_value) - { - if (!in_array($page_item_key, $removed)) - { - $params[$page_item_key] = $page_item_value; - } - } - } - else - { - $params = $page; - } - - foreach ($redefined as $redefined_param => $redefined_value) - { - $params[$redefined_param] = $redefined_value; - } - - return $params; -} - -/** - * create a picture URL with current page parameters, but with redefinitions - * and removes. See duplicate_index_url. - * - * @param array redefined keys - * @param array removed keys - * @return string - */ -function duplicate_picture_url($redefined = array(), $removed = array()) -{ - return make_picture_url( - params_for_duplication($redefined, $removed) - ); -} - -/** - * create a picture URL on a specific section for a specific picture - * - * @param array - * @return string - */ -function make_picture_url($params) -{ - global $conf; - if (!isset($params['image_id'])) - { - die('make_picture_url: image_id is a required parameter'); - } - - $url = get_root_url().'picture'; - if ($conf['php_extension_in_urls']) - { - $url .= '.php'; - } - if ($conf['question_mark_in_urls']) - { - $url .= '?'; - } - $url.= '/'; - switch ( $conf['picture_url_style'] ) - { - case 'id-file': - $url .= $params['image_id']; - if ( isset($params['image_file']) ) - { - $url .= '-'.get_filename_wo_extension($params['image_file']); - } - break; - case 'file': - if ( isset($params['image_file']) ) - { - $fname_wo_ext = get_filename_wo_extension($params['image_file']); - if (! preg_match('/^\d+(-|$)/', $fname_wo_ext) ) - { - $url .= $fname_wo_ext; - break; - } - } - default: - $url .= $params['image_id']; - } - if ( !isset($params['category'] ) ) - {// make urls shorter ... - unset( $params['flat'] ); - } - $url .= make_section_in_url($params); - $url = add_well_known_params_in_url($url, $params); - return $url; -} - -/** - *adds to the url the chronology and start parameters -*/ -function add_well_known_params_in_url($url, $params) -{ - if ( isset($params['chronology_field']) ) - { - $url .= '/'. $params['chronology_field']; - $url .= '-'. $params['chronology_style']; - if ( isset($params['chronology_view']) ) - { - $url .= '-'. $params['chronology_view']; - } - if ( !empty($params['chronology_date']) ) - { - $url .= '-'. implode('-', $params['chronology_date'] ); - } - } - - if (isset($params['flat'])) - { - $url.= '/flat'; - } - - if (isset($params['start']) and $params['start'] > 0) - { - $url.= '/start-'.$params['start']; - } - return $url; -} - -/** - * return the section token of an index or picture URL. - * - * Depending on section, other parameters are required (see function code - * for details) - * - * @param array - * @return string - */ -function make_section_in_url($params) -{ - global $conf; - $section_string = ''; - - $section_of = array( - 'category' => 'categories', - 'tags' => 'tags', - 'list' => 'list', - 'search' => 'search', - ); - - foreach ($section_of as $param => $section) - { - if (isset($params[$param])) - { - $params['section'] = $section; - } - } - - if (!isset($params['section'])) - { - $params['section'] = 'none'; - } - - switch($params['section']) - { - case 'categories' : - { - if (!isset($params['category'])) - { - $section_string.= '/categories'; - } - else - { - is_array($params['category']) or trigger_error( - 'make_section_in_url wrong type for category', E_USER_WARNING - ); - is_numeric($params['category']['id']) or trigger_error( - 'make_section_in_url category id not numeric', E_USER_WARNING - ); - isset($params['category']['name']) or trigger_error( - 'make_section_in_url category name not set', E_USER_WARNING - ); - - array_key_exists('permalink', $params['category']) or trigger_error( - 'make_section_in_url category permalink not set', E_USER_WARNING - ); - - $section_string.= '/category/'; - if ( empty($params['category']['permalink']) ) - { - $section_string.= $params['category']['id']; - if ( $conf['category_url_style']=='id-name' ) - { - $section_string.= '-'.str2url($params['category']['name']); - } - } - else - { - $section_string.= $params['category']['permalink']; - } - } - - break; - } - case 'tags' : - { - if (!isset($params['tags']) or count($params['tags']) == 0) - { - die('make_section_in_url: require at least one tag'); - } - - $section_string.= '/tags'; - - foreach ($params['tags'] as $tag) - { - switch ( $conf['tag_url_style'] ) - { - case 'id': - $section_string.= '/'.$tag['id']; - break; - case 'tag': - if (isset($tag['url_name']) and !is_numeric($tag['url_name']) ) - { - $section_string.= '/'.$tag['url_name']; - break; - } - default: - $section_string.= '/'.$tag['id']; - if (isset($tag['url_name'])) - { - $section_string.= '-'.$tag['url_name']; - } - } - } - - break; - } - case 'search' : - { - if (!isset($params['search'])) - { - die('make_section_in_url: require a search identifier'); - } - - $section_string.= '/search/'.$params['search']; - - break; - } - case 'list' : - { - if (!isset($params['list'])) - { - die('make_section_in_url: require a list of items'); - } - - $section_string.= '/list/'.implode(',', $params['list']); - - break; - } - case 'none' : - { - break; - } - default : - { - $section_string.= '/'.$params['section']; - } - } - - return $section_string; -} - -/** - * the reverse of make_section_in_url - * returns the 'section' (categories/tags/...) and the data associated with it - * - * Depending on section, other parameters are returned (category/tags/list/...) - * - * @param array of url tokens to parse - * @param int the index in the array of url tokens; in/out - * @return array - */ -function parse_section_url( $tokens, &$next_token) -{ - $page=array(); - if (0 === strpos(@$tokens[$next_token], 'categor')) - { - $page['section'] = 'categories'; - $next_token++; - - if (isset($tokens[$next_token]) ) - { - if (preg_match('/^(\d+)(?:-(.+))?$/', $tokens[$next_token], $matches)) - { - if ( isset($matches[2]) ) - $page['hit_by']['cat_url_name'] = $matches[2]; - $page['category'] = $matches[1]; - $next_token++; - } - else - {// try a permalink - $maybe_permalinks = array(); - $current_token = $next_token; - while ( isset($tokens[$current_token]) - and strpos($tokens[$current_token], 'created-')!==0 - and strpos($tokens[$current_token], 'posted-')!==0 - and strpos($tokens[$next_token], 'start-')!==0 - and $tokens[$current_token] != 'flat') - { - if (empty($maybe_permalinks)) - { - array_push($maybe_permalinks, $tokens[$current_token]); - } - else - { - array_push($maybe_permalinks, - $maybe_permalinks[count($maybe_permalinks)-1] - . '/' . $tokens[$current_token] - ); - } - $current_token++; - } - - if ( count($maybe_permalinks) ) - { - $cat_id = get_cat_id_from_permalinks($maybe_permalinks, $perma_index); - if ( isset($cat_id) ) - { - $next_token += $perma_index+1; - $page['category'] = $cat_id; - $page['hit_by']['cat_permalink'] = $maybe_permalinks[$perma_index]; - } - else - { - page_not_found('Permalink for album not found'); - } - } - } - } - - if (isset($page['category'])) - { - $result = get_cat_info($page['category']); - if (empty($result)) - { - page_not_found('Requested category does not exist' ); - } - $page['category']=$result; - } - } - else if (0 === strpos(@$tokens[$next_token], 'tag')) - { - $page['section'] = 'tags'; - $page['tags'] = array(); - - $next_token++; - $i = $next_token; - - $requested_tag_ids = array(); - $requested_tag_url_names = array(); - - while (isset($tokens[$i])) - { - if ( preg_match('/^(created-|posted-|start-(\d)+)/', $tokens[$i]) ) - break; - - if ( preg_match('/^(\d+)(?:-(.*))?/', $tokens[$i], $matches) ) - { - array_push($requested_tag_ids, $matches[1]); - } - else - { - array_push($requested_tag_url_names, $tokens[$i]); - } - $i++; - } - $next_token = $i; - - if ( empty($requested_tag_ids) && empty($requested_tag_url_names) ) - { - bad_request('at least one tag required'); - } - - $page['tags'] = find_tags($requested_tag_ids, $requested_tag_url_names); - if ( empty($page['tags']) ) - { - page_not_found('Requested tag does not exist', get_root_url().'tags.php' ); - } - } - else if (0 === strpos(@$tokens[$next_token], 'fav')) - { - $page['section'] = 'favorites'; - $next_token++; - } - else if ('most_visited' == @$tokens[$next_token]) - { - $page['section'] = 'most_visited'; - $next_token++; - } - else if ('best_rated' == @$tokens[$next_token]) - { - $page['section'] = 'best_rated'; - $next_token++; - } - else if ('recent_pics' == @$tokens[$next_token]) - { - $page['section'] = 'recent_pics'; - $next_token++; - } - else if ('recent_cats' == @$tokens[$next_token]) - { - $page['section'] = 'recent_cats'; - $next_token++; - } - else if ('search' == @$tokens[$next_token]) - { - $page['section'] = 'search'; - $next_token++; - - preg_match('/(\d+)/', @$tokens[$next_token], $matches); - if (!isset($matches[1])) - { - bad_request('search identifier is missing'); - } - $page['search'] = $matches[1]; - $next_token++; - } - else if ('list' == @$tokens[$next_token]) - { - $page['section'] = 'list'; - $next_token++; - - $page['list'] = array(); - - // No pictures - if (empty($tokens[$next_token])) - { - // Add dummy element list - array_push($page['list'], -1); - } - // With pictures list - else - { - if (!preg_match('/^\d+(,\d+)*$/', $tokens[$next_token])) - { - bad_request('wrong format on list GET parameter'); - } - foreach (explode(',', $tokens[$next_token]) as $image_id) - { - array_push($page['list'], $image_id); - } - } - $next_token++; - } - return $page; -} - -/** - * the reverse of add_well_known_params_in_url - * parses start, flat and chronology from url tokens -*/ -function parse_well_known_params_url($tokens, &$i) -{ - $page = array(); - while (isset($tokens[$i])) - { - if (preg_match('/^start-(\d+)/', $tokens[$i], $matches)) - { - $page['start'] = $matches[1]; - } - - if ( 'flat' == $tokens[$i] ) - { - // indicate a special list of images - $page['flat'] = true; - } - - if (preg_match('/^(posted|created)/', $tokens[$i] )) - { - $chronology_tokens = explode('-', $tokens[$i] ); - - $page['chronology_field'] = $chronology_tokens[0]; - - array_shift($chronology_tokens); - $page['chronology_style'] = $chronology_tokens[0]; - - array_shift($chronology_tokens); - if ( count($chronology_tokens)>0 ) - { - if ('list'==$chronology_tokens[0] or - 'calendar'==$chronology_tokens[0]) - { - $page['chronology_view'] = $chronology_tokens[0]; - array_shift($chronology_tokens); - } - $page['chronology_date'] = $chronology_tokens; - } - } - $i++; - } - return $page; -} - -/** - * Indicate to build url with full path - * - * @param null - * @return null - */ -function set_make_full_url() -{ - global $page; - - if (!isset($page['save_root_path'])) - { - if (isset($page['root_path'])) - { - $page['save_root_path']['path'] = $page['root_path']; - } - $page['save_root_path']['count'] = 1; - $page['root_path'] = get_absolute_root_url(); - } - else - { - $page['save_root_path']['count'] += 1; - } -} - -/** - * Restore old parameter to build url with full path - * - * @param null - * @return null - */ -function unset_make_full_url() -{ - global $page; - - if (isset($page['save_root_path'])) - { - if ($page['save_root_path']['count'] == 1) - { - if (isset($page['save_root_path']['path'])) - { - $page['root_path'] = $page['save_root_path']['path']; - } - else - { - unset($page['root_path']); - } - unset($page['save_root_path']); - } - else - { - $page['save_root_path']['count'] -= 1; - } - } -} - -/** - * Embellish the url argument - * - * @param $url - * @return $url embellished - */ -function embellish_url($url) -{ - return str_replace('/./', '/', $url); -} - -?>
\ No newline at end of file |