diff options
author | rvelices <rv-github@modusoptimus.com> | 2006-04-06 02:23:54 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2006-04-06 02:23:54 +0000 |
commit | d700a5917233fb8049589a9e0aef3d94e87fb320 (patch) | |
tree | 81f8c53ccf908e900638abd117f3dc8719ca67a1 /include | |
parent | b9a37cd6f06a19fd48d4a8e546b10c8fb3ff5b33 (diff) |
improvement: urls for tags can contain now only the tag or the id and tag
improvement: urls for category can be now id and category names (instead
of only id)
improvement: added 2 indexes (#image_tag.tag_id and #tags.url_name)
improvement: identification, register, search pages automatically set focus
on first form input
improvement: focus, nofocus css class now valid for all forms
fix: category comment is tag stripped in category_subcats.inc.php
(otherwise issues with html/scripts inside category comment)
git-svn-id: http://piwigo.org/svn/trunk@1131 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'include')
-rw-r--r-- | include/category_subcats.inc.php | 19 | ||||
-rw-r--r-- | include/config_default.inc.php | 25 | ||||
-rw-r--r-- | include/functions.inc.php | 6 | ||||
-rw-r--r-- | include/functions_html.inc.php | 29 | ||||
-rw-r--r-- | include/functions_url.inc.php | 34 | ||||
-rw-r--r-- | include/section_init.inc.php | 86 |
6 files changed, 135 insertions, 64 deletions
diff --git a/include/category_subcats.inc.php b/include/category_subcats.inc.php index 57fe73cec..8deef5711 100644 --- a/include/category_subcats.inc.php +++ b/include/category_subcats.inc.php @@ -28,7 +28,7 @@ /** * This file is included by the main page to show thumbnails for a category * that have only subcategories - * + * */ $query = ' @@ -90,6 +90,12 @@ SELECT representative_picture_id } } + $comment = null; + if ( isset($row['comment']) ) + { + $comment = strip_tags( $row['comment'] ); + } + if (isset($image_id)) { array_push( @@ -99,7 +105,7 @@ SELECT representative_picture_id 'picture' => $image_id, 'name' => $row['name'], 'date_last' => @$row['date_last'], - 'comment' => @$row['comment'], + 'comment' => $comment, 'nb_images' => $row['nb_images'], ) ); @@ -111,7 +117,7 @@ SELECT representative_picture_id if (count($cat_thumbnails) > 0) { $images = array(); - + foreach ($cat_thumbnails as $item) { $images[$item['picture']] = ''; @@ -129,7 +135,7 @@ SELECT id, path, tn_ext } $template->assign_block_vars('categories', array()); - + foreach ($cat_thumbnails as $item) { $template->assign_block_vars( @@ -139,10 +145,11 @@ SELECT id, path, tn_ext 'ALT' => $item['name'], 'TITLE' => $lang['hint_category'], 'ICON' => get_icon(@$item['date_last']), - + 'URL' => make_index_url( array( 'category' => $item['category'], + 'cat_name' => $item['name'], ) ), 'NAME' => $item['name'], @@ -152,4 +159,4 @@ SELECT id, path, tn_ext ); } } -?> +?>
\ No newline at end of file diff --git a/include/config_default.inc.php b/include/config_default.inc.php index 72363d85d..655b13d76 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -424,20 +424,29 @@ $conf['history_admin'] = false; // (depends on the server AcceptPathInfo directive configuration) $conf['question_mark_in_urls'] = true; -// picture_url_style : one of 'id' 'id-file' or 'file'. 'id-file' or 'file' -// mean that the file name (without extension will appear in the url). -// Note that one aditionnal sql query will occur if 'file' is choosen. -// Note that you might experience navigation issues if you choose 'file' -// and your file names are not unique -$conf['picture_url_style'] = 'id'; - - // php_extension_in_urls : if true, the urls generated for picture and // category will not contain the .php extension. This will work only if // .htaccess defines Options +MultiViews parameter or url rewriting rules // are active. $conf['php_extension_in_urls'] = true; +// category_url_style : one of 'id' (default) or 'id-name'. 'id-name' +// means that an simplified ascii represntation of the category name will +// appear in the url +$conf['category_url_style'] = 'id'; + +// picture_url_style : one of 'id' (default), 'id-file' or 'file'. 'id-file' +// or 'file' mean that the file name (without extension will appear in the +// url). Note that one aditionnal sql query will occur if 'file' is choosen. +// Note that you might experience navigation issues if you choose 'file' +// and your file names are not unique +$conf['picture_url_style'] = 'id'; + +// tag_url_style : one of 'id-tag' (default), 'id' or 'tag'. +// Note that if you choose 'tag' and the url (ascii) representation of your +// tags is not unique, all tags with the same url representation will be shown +$conf['tag_url_style'] = 'id-tag'; + // +-----------------------------------------------------------------------+ // | tags | // +-----------------------------------------------------------------------+ diff --git a/include/functions.inc.php b/include/functions.inc.php index d8b86743f..5a1245c4b 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -290,10 +290,10 @@ function str2url($str) $str = str_replace('¼', 'OE', $str); $str = str_replace('½', 'oe', $str); - $str = preg_replace('/[^a-z0-9_\s\'\:\/\[\]-]/','',strtolower($str)); - $str = preg_replace('/[\s\'\:\/\[\]-]+/',' ',trim($str)); + $str = preg_replace('/[^a-z0-9_\s\'\:\/\[\],-]/','',strtolower($str)); + $str = preg_replace('/[\s\'\:\/\[\],-]+/',' ',trim($str)); $res = str_replace(' ','_',$str); - + return $res; } diff --git a/include/functions_html.inc.php b/include/functions_html.inc.php index 13c3dc206..b217f01d9 100644 --- a/include/functions_html.inc.php +++ b/include/functions_html.inc.php @@ -278,7 +278,14 @@ function get_cat_display_name($cat_informations, elseif ($url == '') { $output.= '<a class=""'; - $output.= ' href="'.make_index_url( array('category'=>$id) ).'">'; + $output.= ' href="' + .make_index_url( + array( + 'category'=>$id, + 'cat_name'=>$name + ) + ) + .'">'; $output.= $name.'</a>'; } else @@ -353,7 +360,14 @@ SELECT id,name { $output.= ' <a class="" - href="'.make_index_url( array('category'=>$category_id) ).'">'.$name.'</a>'; + href="' + .make_index_url( + array( + 'category'=>$category_id, + 'cat_name'=>$name + ) + ) + .'">'.$name.'</a>'; } else { @@ -423,7 +437,12 @@ function get_html_menu_category($categories) } $menu.= '>'; - $url = make_index_url(array('category' => $category['id'])); + $url = make_index_url( + array( + 'category'=>$category['id'], + 'cat_name'=>$category['name'] + ) + ); $menu.= "\n".'<a href="'.$url.'"'; if ($page_cat != 0 @@ -509,7 +528,7 @@ function get_html_tag_selection( ) { global $conf; - + $output = '<ul class="tagSelection">'; foreach ($tags as $tag) { @@ -524,7 +543,7 @@ function get_html_tag_selection( { $output.= ' checked="checked"'; } - + $output.= ' />' .' '.$tag['name'] diff --git a/include/functions_url.inc.php b/include/functions_url.inc.php index a50f789c8..63316d4d5 100644 --- a/include/functions_url.inc.php +++ b/include/functions_url.inc.php @@ -256,6 +256,7 @@ function add_well_known_params_in_url($url, $params) */ function make_section_in_URL($params) { + global $conf; $section_string = ''; $section_of = array( @@ -289,6 +290,19 @@ function make_section_in_URL($params) else { $section_string.= '/category/'.$params['category']; + if ($conf['category_url_style']=='id-name' and isset($params['cat_name']) ) + { + if ( is_string($params['cat_name']) ) + { + $section_string.= '-'.str2url($params['cat_name']); + } + elseif ( is_array( $params['cat_name'] ) and + isset( $params['cat_name'][$params['category']] ) ) + { + $section_string.= '-' + .str2url($params['cat_name'][$params['category']]); + } + } } break; @@ -304,11 +318,23 @@ function make_section_in_URL($params) foreach ($params['tags'] as $tag) { - $section_string.= '/'.$tag['id']; - - if (isset($tag['url_name'])) + switch ( $conf['tag_url_style'] ) { - $section_string.= '-'.$tag['url_name']; + 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']; + } } } diff --git a/include/section_init.inc.php b/include/section_init.inc.php index e22979e69..c29686e6f 100644 --- a/include/section_init.inc.php +++ b/include/section_init.inc.php @@ -70,7 +70,7 @@ else } $page['root_path'] = PHPWG_ROOT_PATH; } -//phpinfo(); + // deleting first "/" if displayed $tokens = explode( '/', @@ -147,33 +147,58 @@ else if (0 === strpos($tokens[$next_token], 'tag')) $next_token++; $i = $next_token; + $requested_tag_ids = array(); + $requested_tag_url_names = array(); + while (isset($tokens[$i])) { - preg_match('/^(\d+)(?:-(.*))?/', $tokens[$i], $matches); - if (!isset($matches[1])) + if ( preg_match('/^(created-|posted-|start-(\d)+)/', $tokens[$i]) ) + break; + + if ( preg_match('/^(\d+)(?:-(.*))?/', $tokens[$i], $matches) ) { - if (0 == count($page['tags'])) - { - die('Fatal: at least one tag required'); - } - else - { - break; - } + array_push($requested_tag_ids, $matches[1]); + } + else + { + array_push($requested_tag_url_names, "'".$tokens[$i]."'"); } - - array_push( - $page['tags'], - array( - 'id' => $matches[1], - 'url_name' => isset($matches[2]) ? $matches[2] : '', - ) - ); - $i++; } - $next_token = $i; + + if ( empty($requested_tag_ids) && empty($requested_tag_url_names) ) + { + die('Fatal: at least one tag required'); + } + // tag infos + $query = ' +SELECT name, url_name, id + FROM '.TAGS_TABLE.' + WHERE '; + if ( !empty($requested_tag_ids) ) + { + $query.= 'id IN ('.implode(',', $requested_tag_ids ).')'; + } + if ( !empty($requested_tag_url_names) ) + { + if ( !empty($requested_tag_ids) ) + { + $query.= ' OR '; + } + $query.= 'url_name IN ('.implode(',', $requested_tag_url_names ).')'; + } + $result = pwg_query($query); + $tag_infos = array(); + while ($row = mysql_fetch_array($result)) + { + $tag_infos[ $row['id'] ] = $row; + array_push($page['tags'], $row );//we loose given tag order; is it important? + } + if ( empty($page['tags']) ) + { + die('Fatal: no existing tag'); + } } else if (0 === strpos($tokens[$next_token], 'fav')) { @@ -239,7 +264,7 @@ while (isset($tokens[$i])) $page['start'] = $matches[1]; } - if (preg_match('/^posted|created/', $tokens[$i] )) + if (preg_match('/^(posted|created)/', $tokens[$i] )) { $chronology_tokens = explode('-', $tokens[$i] ); @@ -359,7 +384,7 @@ else // permissions depends on category, so to only keep images that are // reachable to the connected user, we need to check category // associations - if (!empty($user['forbidden_categories']) and !empty($items) ) + if (!empty($items) ) { $query = ' SELECT image_id @@ -373,21 +398,6 @@ SELECT image_id ); } - // tag names - $query = ' -SELECT name, url_name, id - FROM '.TAGS_TABLE.' - WHERE id IN ('.implode(',', $page['tag_ids']).') -;'; - $result = pwg_query($query); - $tag_infos = array(); - - while ($row = mysql_fetch_array($result)) - { - $tag_infos[ $row['id'] ]['name'] = $row['name']; - $tag_infos[ $row['id'] ]['url_name'] = $row['url_name']; - } - $title = count($page['tags']) > 1 ? l10n('Tags') : l10n('Tag'); $title.= ' '; |