4 This plugin makes virtual page aliases from and to plural and non-plural
5 page names. Then "WikiWord" and "WikiWords" link to the same page.
7 (Best practice, btw, is to always give page names only in singular.)
11 $ewiki_config["plural"] = array("s", "en", "n");
12 # (one may want to add "e" and others)
14 #-- plugin registration
15 $ewiki_plugins["format_prepare_linking"][] = "ewiki_plural_linking_patch";
16 $ewiki_plugins["handler"][] = "ewiki_handler_plural";
19 /* this function tries to cross-convert from singular to plural, and
20 returns possible permutations as array() result;
21 you will wish to rewrite this function for better results
23 function ewiki_plural_variants($id) {
30 foreach ($ewiki_config["plural"] as $app) {
31 if (substr($id, $n_id - strlen($app)) == $app) {
32 $base_id = substr($id, 0, $n_id - strlen($app));
37 #-- make array of variants
39 if ($id != $base_id) {
42 foreach ($ewiki_config["plural"] as $app) {
44 if ($id != $base_id) {
53 /* returns the first (plural/singular permutation) alternative for $id
56 function ewiki_plural_alternative($id) {
57 #-- make possible plural/singular $id versions
58 $variants = ewiki_plural_variants($id);
59 array_shift($variants); # skip original
62 $variants = ewiki_db::FIND($variants);
63 foreach ($variants as $new_id=>$exists) {
65 if ($new_id && $exists) {
75 /* searches for and loads another page, if requested $id not found
77 function ewiki_handler_plural(&$id, &$data, &$action) {
79 #-- current page not found, but an alternative exists in DB
80 if (!$data["version"] && ($new_id = ewiki_plural_alternative($id))) {
83 return(ewiki_page($id = $new_id));
88 /* fakes existing pages by creating ["page"] plugin entries
90 function ewiki_plural_linking_patch(&$src) {
92 global $ewiki_links, $ewiki_plugins;
95 #-- search for not-found entries
96 foreach ($ewiki_links as $missing_id=>$exists) {
98 if (!$exists && ewiki_plural_alternative($missing_id)) {
99 $ewiki_plugins["page"][$missing_id] = "ewiki_page";