From b979267c4c94205b06e264bf4036ccf0ac8792ec Mon Sep 17 00:00:00 2001 From: Garvin Hicking Date: Wed, 26 Nov 2008 12:33:29 +0000 Subject: [PATCH] Added new %parentname% category-permalink option --- docs/NEWS | 11 +++++++---- include/functions_entries.inc.php | 19 +++++++++++++++++++ include/functions_permalinks.inc.php | 22 ++++++++++++++++++---- lang/UTF-8/serendipity_lang_bg.inc.php | 2 +- lang/UTF-8/serendipity_lang_cn.inc.php | 2 +- lang/UTF-8/serendipity_lang_cs.inc.php | 2 +- lang/UTF-8/serendipity_lang_cz.inc.php | 2 +- lang/UTF-8/serendipity_lang_da.inc.php | 2 +- lang/UTF-8/serendipity_lang_de.inc.php | 4 ++-- lang/UTF-8/serendipity_lang_en.inc.php | 2 +- lang/UTF-8/serendipity_lang_es.inc.php | 2 +- lang/UTF-8/serendipity_lang_fi.inc.php | 2 +- lang/UTF-8/serendipity_lang_fr.inc.php | 2 +- lang/UTF-8/serendipity_lang_hu.inc.php | 2 +- lang/UTF-8/serendipity_lang_is.inc.php | 2 +- lang/UTF-8/serendipity_lang_it.inc.php | 2 +- lang/UTF-8/serendipity_lang_ja.inc.php | 2 +- lang/UTF-8/serendipity_lang_ko.inc.php | 2 +- lang/UTF-8/serendipity_lang_nl.inc.php | 2 +- lang/UTF-8/serendipity_lang_no.inc.php | 2 +- lang/UTF-8/serendipity_lang_pl.inc.php | 2 +- lang/UTF-8/serendipity_lang_pt.inc.php | 2 +- lang/UTF-8/serendipity_lang_pt_PT.inc.php | 2 +- lang/UTF-8/serendipity_lang_ro.inc.php | 2 +- lang/UTF-8/serendipity_lang_sa.inc.php | 2 +- lang/UTF-8/serendipity_lang_se.inc.php | 2 +- lang/UTF-8/serendipity_lang_ta.inc.php | 2 +- lang/UTF-8/serendipity_lang_tn.inc.php | 2 +- lang/UTF-8/serendipity_lang_tr.inc.php | 2 +- lang/UTF-8/serendipity_lang_tw.inc.php | 2 +- lang/UTF-8/serendipity_lang_zh.inc.php | 2 +- lang/serendipity_lang_bg.inc.php | 2 +- lang/serendipity_lang_cn.inc.php | 2 +- lang/serendipity_lang_cs.inc.php | 2 +- lang/serendipity_lang_cz.inc.php | 2 +- lang/serendipity_lang_da.inc.php | 2 +- lang/serendipity_lang_de.inc.php | 2 +- lang/serendipity_lang_en.inc.php | 2 +- lang/serendipity_lang_es.inc.php | 2 +- lang/serendipity_lang_fi.inc.php | 2 +- lang/serendipity_lang_fr.inc.php | 2 +- lang/serendipity_lang_hu.inc.php | 2 +- lang/serendipity_lang_is.inc.php | 2 +- lang/serendipity_lang_it.inc.php | 2 +- lang/serendipity_lang_ja.inc.php | 2 +- lang/serendipity_lang_ko.inc.php | 2 +- lang/serendipity_lang_nl.inc.php | 2 +- lang/serendipity_lang_no.inc.php | 2 +- lang/serendipity_lang_pl.inc.php | 2 +- lang/serendipity_lang_pt.inc.php | 2 +- lang/serendipity_lang_pt_PT.inc.php | 2 +- lang/serendipity_lang_ro.inc.php | 2 +- lang/serendipity_lang_sa.inc.php | 2 +- lang/serendipity_lang_se.inc.php | 2 +- lang/serendipity_lang_ta.inc.php | 2 +- lang/serendipity_lang_tn.inc.php | 2 +- lang/serendipity_lang_tr.inc.php | 2 +- lang/serendipity_lang_tw.inc.php | 2 +- lang/serendipity_lang_zh.inc.php | 2 +- 59 files changed, 101 insertions(+), 65 deletions(-) diff --git a/docs/NEWS b/docs/NEWS index a1e755a6..679b8757 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,12 +3,16 @@ Version 1.4 () ------------------------------------------------------------------------ + * Added %parentname% permalink property to category structure, + so that a full category name path can be used instead of only + %name%. (garvinhicking) [1.4-beta2] + * Made entrypropertie's password plugin form use "autocomplete=off" to prevent inserting badly stored passwords. Thanks to sbauer! - [1.4-beta1] + [1.4-beta2] * Added full plugin name and links to documentation/changelog for - plugins on installation and configuration [1.4-beta1]: + plugins on installation and configuration [1.4-beta2]: You can provide Documentation for your plugins by supplying a local file called documentation_XX.html inside the plugin directory, which Serendipity @@ -26,10 +30,9 @@ Version 1.4 () configuring or installing a plugin. (garvinhicking) - * Fix not properly counting trackbacks or resetting comment/tb - counter when editing an entry [1.4-beta1] (garvinhicking) + counter when editing an entry [1.4-beta2] (garvinhicking) * Added experimental Serendipity importer (for merging installations, fore example). (Garvinhicking) diff --git a/include/functions_entries.inc.php b/include/functions_entries.inc.php index 63c6e6f9..79d7bb28 100644 --- a/include/functions_entries.inc.php +++ b/include/functions_entries.inc.php @@ -1626,3 +1626,22 @@ function serendipity_getTotalCount($what) { } } + +/** + * Get a path of all parent categories to a given category. + * + * @access public + * @param string The id of the category, whose parents you want to fetch + * @return array An Array with all category information, ordered from root to the ID you supplied. + */ +function serendipity_getCategoryRoot($id) { + global $serendipity; + + $r = serendipity_db_query("SELECT p.* + FROM {$serendipity['dbPrefix']}category n, + {$serendipity['dbPrefix']}category p + WHERE n.category_left BETWEEN p.category_left AND p.category_right + AND n.categoryid = " . (int)$id . " + ORDER BY n.category_left DESC, p.category_left ASC"); + return $r; +} \ No newline at end of file diff --git a/include/functions_permalinks.inc.php b/include/functions_permalinks.inc.php index 7a820a54..8dbf7514 100644 --- a/include/functions_permalinks.inc.php +++ b/include/functions_permalinks.inc.php @@ -255,6 +255,7 @@ function serendipity_initPermalinks() { */ @define('PAT_FILENAME', '0-9a-z\.\_!;,\+\-\%'); @define('PAT_FILENAME_MATCH', '[' . PAT_FILENAME . ']+'); + @define('PAT_DIRNAME_MATCH', '[' . PAT_FILENAME . '/]*'); @define('PAT_CSS', '@/(serendipity\.css|serendipity_admin\.css)@'); @define('PAT_FEED', '@/(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml)@'); @define('PAT_COMMENTSUB', '@/([0-9]+)[_\-][' . PAT_FILENAME . ']*\.html@i'); @@ -503,7 +504,7 @@ function serendipity_makePermalink($format, $data, $type = 'entry') { global $serendipity; static $entryKeys = array('%id%', '%lowertitle%', '%title%', '%day%', '%month%', '%year%'); static $authorKeys = array('%id%', '%username%', '%realname%', '%email%'); - static $categoryKeys = array('%id%', '%name%', '%description%'); + static $categoryKeys = array('%id%', '%name%', '%parentname%', '%description%'); switch($type) { case 'entry': @@ -546,10 +547,23 @@ function serendipity_makePermalink($format, $data, $type = 'entry') { break; case 'category': + $parent_path = array(); + + // This is expensive. Only lookup if required. + if (strstr($format, '%parentname%')) { + $parents = serendipity_getCategoryRoot($data['categoryid']); + if (is_array($parents)) { + foreach($parents AS $parent) { + $parent_path[] = serendipity_makeFilename($parent['category_name'], true); + } + } + } + $replacements = array( (int)$data['categoryid'], serendipity_makeFilename($data['category_name'], true), + implode('/', $parent_path), serendipity_makeFilename($data['category_description'], true) ); return str_replace($categoryKeys, $replacements, $format); @@ -571,11 +585,11 @@ function serendipity_makePermalinkRegex($format, $type = 'entry') { static $entryKeys = array('%id%', '%lowertitle%', '%title%', '%day%', '%month%', '%year%'); static $entryRegexValues = array('([0-9]+)', PAT_FILENAME_MATCH, PAT_FILENAME_MATCH, '[0-9]{1,2}', '[0-9]{1,2}', '[0-9]{4}'); - static $authorKeys = array('%id%', '%username%', '%realname%', '%email%'); + static $authorKeys = array('%id%', '%username%', '%realname%', '%email%'); static $authorRegexValues = array('([0-9]+)', PAT_FILENAME_MATCH, PAT_FILENAME_MATCH, PAT_FILENAME_MATCH); - static $categoryKeys = array('%id%', '%name%', '%description%'); - static $categoryRegexValues = array('([0-9;]+)', PAT_FILENAME_MATCH, PAT_FILENAME_MATCH); + static $categoryKeys = array('%id%', '%name%', '%parentname%', '%description%'); + static $categoryRegexValues = array('([0-9;]+)', PAT_FILENAME_MATCH, PAT_DIRNAME_MATCH, PAT_FILENAME_MATCH); switch($type) { case 'entry': diff --git a/lang/UTF-8/serendipity_lang_bg.inc.php b/lang/UTF-8/serendipity_lang_bg.inc.php index dc0fd3f1..f3ab4020 100644 --- a/lang/UTF-8/serendipity_lang_bg.inc.php +++ b/lang/UTF-8/serendipity_lang_bg.inc.php @@ -684,7 +684,7 @@ $i18n_filename_to = array('-', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D @define('INSTALL_PERMALINK_AUTHOR', 'Структура на постоянна връзка към автор'); @define('INSTALL_PERMALINK_AUTHOR_DESC', 'Тук можете да определите относителна структура на URL спрямо основния URL, откъдето са налични статиите на определен автор. Можете да използвате променливите %id%, %realname%, %username%, %email% и всички други знаци.'); @define('INSTALL_PERMALINK_CATEGORY', 'Структура на постоянна връзка към категория'); -@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Тук можете да определите относителна структура на URL спрямо основния URL, откъдето са налични статиите от определена категория. Можете да използвате променливите %id%, %name%, %description% и всички други знаци.'); +@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Тук можете да определите относителна структура на URL спрямо основния URL, откъдето са налични статиите от определена категория. Можете да използвате променливите %id%, %name%, %parentname%, %description% и всички други знаци.'); @define('INSTALL_PERMALINK_FEEDCATEGORY', 'Структура на постоянна връзка към емисия на RSS'); @define('INSTALL_PERMALINK_FEEDCATEGORY_DESC', 'Тук можете да определите относителна структура на URL спрямо основния URL, откъдето са налични статиите от определена категория. Можете да използвате променливите %id%, %name%, %description% и всички други знаци.'); @define('INSTALL_PERMALINK_ARCHIVESPATH', 'Път до архиви'); diff --git a/lang/UTF-8/serendipity_lang_cn.inc.php b/lang/UTF-8/serendipity_lang_cn.inc.php index 5b4ca81c..996fe250 100644 --- a/lang/UTF-8/serendipity_lang_cn.inc.php +++ b/lang/UTF-8/serendipity_lang_cn.inc.php @@ -697,7 +697,7 @@ @define('INSTALL_PERMALINK_AUTHOR', '作者的静态连接'); @define('INSTALL_PERMALINK_AUTHOR_DESC', '这里可以让你设定以基本位置来计算文章的相对连接。你可以用以下参数:%id%, %realname%, %username%, %email% 或其它字符。'); @define('INSTALL_PERMALINK_CATEGORY', '类别的静态连接'); -@define('INSTALL_PERMALINK_CATEGORY_DESC', '这里可以让你设定以基本位置来计算文章的相对连接。你可以用以下参数:%id%, %name%, %description% 或其它字符。'); +@define('INSTALL_PERMALINK_CATEGORY_DESC', '这里可以让你设定以基本位置来计算文章的相对连接。你可以用以下参数:%id%, %name%, %parentname%, %description% 或其它字符。'); @define('INSTALL_PERMALINK_FEEDCATEGORY', 'RSS-Feed 类别的静态连接'); @define('INSTALL_PERMALINK_FEEDCATEGORY_DESC', '这里可以让你设定以基本位置来计算 RSS-Feed 类别文章的相对连接。你可以用以下参数:%id%, %name%, %description% 或其它字符。'); @define('INSTALL_PERMALINK_ARCHIVESPATH', '保存文件路径'); diff --git a/lang/UTF-8/serendipity_lang_cs.inc.php b/lang/UTF-8/serendipity_lang_cs.inc.php index a1cab8e7..91882feb 100644 --- a/lang/UTF-8/serendipity_lang_cs.inc.php +++ b/lang/UTF-8/serendipity_lang_cs.inc.php @@ -706,7 +706,7 @@ $i18n_filename_to = array ( @define('INSTALL_PERMALINK_AUTHOR', 'Struktura URL autorů'); @define('INSTALL_PERMALINK_AUTHOR_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné příspěvky určitých autorů. Můžete použít proměnné %id%, %realname%, %username%, %email% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_CATEGORY', 'Struktura URL kategorií'); -@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné určité kategorie. Můžete použít proměnné %id%, %name%, %description% a jakékoli jiné znaky.'); +@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné určité kategorie. Můžete použít proměnné %id%, %name%, %parentname%, %description% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_FEEDCATEGORY', 'Struktura URL trvalých odkazů kategorií RSS'); @define('INSTALL_PERMALINK_FEEDCATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné RSS kanály z určitých kategorií. Můžete použít proměnné %id%, %name%, %description% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_ARCHIVESPATH', 'Cesta k archivům'); diff --git a/lang/UTF-8/serendipity_lang_cz.inc.php b/lang/UTF-8/serendipity_lang_cz.inc.php index 2d52dd3b..bbcc2d89 100644 --- a/lang/UTF-8/serendipity_lang_cz.inc.php +++ b/lang/UTF-8/serendipity_lang_cz.inc.php @@ -706,7 +706,7 @@ $i18n_filename_to = array ( @define('INSTALL_PERMALINK_AUTHOR', 'Struktura URL autorů'); @define('INSTALL_PERMALINK_AUTHOR_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné příspěvky určitých autorů. Můžete použít proměnné %id%, %realname%, %username%, %email% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_CATEGORY', 'Struktura URL kategorií'); -@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné určité kategorie. Můžete použít proměnné %id%, %name%, %description% a jakékoli jiné znaky.'); +@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné určité kategorie. Můžete použít proměnné %id%, %name%, %parentname%, %description% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_FEEDCATEGORY', 'Struktura URL trvalých odkazů kategorií RSS'); @define('INSTALL_PERMALINK_FEEDCATEGORY_DESC', 'Zde můžete definovat relativní strukturu URL, kde začátek je vaše base URL, z níž mohou být dostupné RSS kanály z určitých kategorií. Můžete použít proměnné %id%, %name%, %description% a jakékoli jiné znaky.'); @define('INSTALL_PERMALINK_ARCHIVESPATH', 'Cesta k archivům'); diff --git a/lang/UTF-8/serendipity_lang_da.inc.php b/lang/UTF-8/serendipity_lang_da.inc.php index ad4862e0..734e0c78 100644 --- a/lang/UTF-8/serendipity_lang_da.inc.php +++ b/lang/UTF-8/serendipity_lang_da.inc.php @@ -694,7 +694,7 @@ @define('INSTALL_PERMALINK_AUTHOR', 'Permalink forfatter URL struktur'); @define('INSTALL_PERMALINK_AUTHOR_DESC', 'Her kan du angive den relative URL struktur fra din grund URL til hvor artikler fra bestemte forfattere bliver tilgængelige. Du kan bruge variablene %id%, %realname%, %username%, %email% samt alle andre karakterer.'); @define('INSTALL_PERMALINK_CATEGORY', 'Permalink kategori URL struktur'); -@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Her kan du angive den relative URL struktur fra din grund URL til hvor artikler fra bestemte kategorier bliver tilgængelige. Du kan anvende de variable %id%, %name%, %description% samt alle andre karakterer.'); +@define('INSTALL_PERMALINK_CATEGORY_DESC', 'Her kan du angive den relative URL struktur fra din grund URL til hvor artikler fra bestemte kategorier bliver tilgængelige. Du kan anvende de variable %id%, %name%, %parentname%, %description% samt alle andre karakterer.'); @define('INSTALL_PERMALINK_FEEDCATEGORY', 'Permalink RSS-Feed kategori URL struktur'); @define('INSTALL_PERMALINK_FEEDCATEGORY_DESC', 'Her kan du angive den relative URL struktur fra din grund URL til hvor RSS-feeds fra bestemte kategorier bliver tilgængelige. Du kan anvende de variable %id%, %name%, %description% samt alle andre karakterer.'); @define('INSTALL_PERMALINK_ARCHIVESPATH', 'Sti til arkiver'); diff --git a/lang/UTF-8/serendipity_lang_de.inc.php b/lang/UTF-8/serendipity_lang_de.inc.php index de05f611..238fd3e7 100644 --- a/lang/UTF-8/serendipity_lang_de.inc.php +++ b/lang/UTF-8/serendipity_lang_de.inc.php @@ -1,4 +1,4 @@ -