Difference between revisions of "Categories.php"
From Organic Design wiki
(er to ar in exceptions) |
m |
||
(40 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | <? | + | {{legacy}} |
− | # XmlWiki Category Extension - 2005-08-25 | + | <php><? |
− | + | # XmlWiki Category Extension - 2005-08-25 - see discussion page | |
− | + | global $xwIsProperties,$xwSection,$xwSave,$xwUserName; | |
− | + | $update = ($xwSave && ($xwSection<1)); | |
− | global $xwIsProperties; | ||
− | $update = $ | ||
$apply = true; | $apply = true; | ||
Line 13: | Line 11: | ||
# If a category page, add class attribute to table since the MediaWiki fellas didn't for some reason | # If a category page, add class attribute to table since the MediaWiki fellas didn't for some reason | ||
if ( ereg( '^Category:.+$', $title ) ) { | if ( ereg( '^Category:.+$', $title ) ) { | ||
− | # | + | # If event is view, adjust rendered output, else add this to view event |
− | if ( $event == ' | + | if ( $event == 'view' ) { |
− | + | # Add CSS class to headings (see, not just me who hard-wires styles!) | |
+ | $article = preg_replace( '/<h3>(.( cont\\.)?<\\/h3>)/i', '<h3 class="category-heading">$1', $article ); | ||
+ | } | ||
+ | else xwSetProperty( $properties, 'xpath:/properties:view', $tTitle ); | ||
$apply = false; # Just let wiki-parser handle category-links for category pages | $apply = false; # Just let wiki-parser handle category-links for category pages | ||
} | } | ||
− | if ( $apply ) { | + | if ($apply) { |
# Begin extracting category-link info - first get stuff we'll be needing | # Begin extracting category-link info - first get stuff we'll be needing | ||
− | + | $db =& wfGetDB( DB_SLAVE ); | |
− | $db =& wfGetDB(DB_SLAVE); | + | $cur = $db->tableName( 'cur' ); |
− | $cur = $db->tableName('cur'); | + | $cl = $db->tableName( 'categorylinks' ); |
− | $cl = $db->tableName('categorylinks'); | ||
$category_match = "\\[{2}\\s*category\\s*:\\s*(.+?)\\s*]]\\n?"; | $category_match = "\\[{2}\\s*category\\s*:\\s*(.+?)\\s*]]\\n?"; | ||
$pt = $title; | $pt = $title; | ||
Line 37: | Line 37: | ||
if ( !$language ) $language = xwArticleType( $title, $content ); | if ( !$language ) $language = xwArticleType( $title, $content ); | ||
} | } | ||
− | elseif ( eregi('^sys:(.+)$', $title, $match) ) { | + | elseif ( eregi( '^sys:(.+)$', $title, $match ) ) { |
$title = $match[1]; | $title = $match[1]; | ||
$ns = NS_USER; | $ns = NS_USER; | ||
Line 43: | Line 43: | ||
preg_match_all( "/$category_match/i", $content, $match ); | preg_match_all( "/$category_match/i", $content, $match ); | ||
$categories = $match[1]; | $categories = $match[1]; | ||
− | foreach ( xwGetListByTagname($article, 'groups') as $group ) | + | # Groups auto-categorisation |
− | + | foreach ( xwGetListByTagname( $article, 'groups' ) as $group ) | |
− | + | $categories[] = "Group:$group"; | |
$language = ''; | $language = ''; | ||
} | } | ||
else { | else { | ||
− | $categories = xwGetListByTagname( $properties, 'category' ); | + | $categories = xwGetListByTagname($properties, 'category'); |
# Must remove category-links from article so wiki-parser doesn't process them | # Must remove category-links from article so wiki-parser doesn't process them | ||
− | xwGetProperty( $properties, 'language', $language ); | + | xwGetProperty($properties, 'language', $language); |
− | if ( !$language ) $article = preg_replace( "/$category_match/ie", '($categories[]="$1")?"":""', $article ); | + | if (!$language) { |
+ | $article = preg_replace("/$category_match/ie", '($categories[]="$1")?"":""', $article); | ||
+ | if (ereg('{'.'{stub}}',$article)) $categories[] = 'Stubs'; | ||
+ | } | ||
} | } | ||
# Only do the rest if this is the top level article | # Only do the rest if this is the top level article | ||
# - the embeds still have to have their cat-links removed | # - the embeds still have to have their cat-links removed | ||
− | if ( $pt == $GLOBALS['xwArticleTitle'] ) { | + | if ($pt == $GLOBALS['xwArticleTitle']) { |
− | $nt = Title::newFromText( $title ); | + | $nt = Title::newFromText($title); |
$ns = $nt->getNamespace(); | $ns = $nt->getNamespace(); | ||
− | $t = addslashes( $nt->getDBkey() ); # Title used in db-tables | + | $t = addslashes($nt->getDBkey()); # Title used in db-tables |
− | $ul = strtoupper( $language ); | + | $ul = strtoupper($language); |
+ | $content = xwArticleContent($title); | ||
# Auto-Category: Language | # Auto-Category: Language | ||
if ( $language ) $categories[] = $ul; | if ( $language ) $categories[] = $ul; | ||
+ | |||
+ | if (ereg('^(.+/)?[0-9]+ ([A-Z][a-z]+) [0-9]{4}$',$title,$m)) $categories[] = $m[1].'Date|'.$m[2]; | ||
# Auto-Category: Transforms | # Auto-Category: Transforms | ||
Line 75: | Line 81: | ||
'Geshi.php', 'Default-skin.php', 'LocalSettings.php', | 'Geshi.php', 'Default-skin.php', 'LocalSettings.php', | ||
'Transform-changes.php', 'Transform-all-pages-list.php', | 'Transform-changes.php', 'Transform-all-pages-list.php', | ||
− | 'Categories.php', 'Properties.php', 'Calendar.php' | + | 'Categories.php', 'Properties.php', 'Calendar.php', |
+ | 'Document.css' | ||
); | ); | ||
− | if ( $ul == 'CSS' or $ul == 'XSLT' ) $categories[] = 'Transforms'; | + | if ($ul == 'CSS' or $ul == 'XSLT') $categories[] = 'Transforms'; |
− | elseif ( in_array( $title, $transformExceptions ) ) 0; | + | elseif (in_array($title, $transformExceptions)) 0; |
− | elseif ( $ul == 'PHP' and count( preg_grep( '/^(admin)|(dev)$/i', xwGetListByTagname( xwArticleProperties( $title ), 'write' ) | + | elseif ($ul == 'PHP' and count(preg_grep('/^(admin)|(dev)$/i',xwGetListByTagname(xwArticleProperties($title),'write')))) |
− | |||
$categories[] = 'Transforms'; | $categories[] = 'Transforms'; | ||
+ | elseif ($ul == 'XML' and preg_match('/<!DOCTYPE[^>]+?xmlwiki-properties.dtd"\\s*>/',$content)) $categories[] = 'Transforms'; | ||
+ | if (preg_match('/<div\\s+class=["\']?tree-view["\']?.*?\\s*>/',$content)) $categories[] = 'Articles containing trees'; | ||
# Get the db-key of this article | # Get the db-key of this article | ||
− | if ( $update ) { | + | if ($update) { |
− | $ | + | $id = Title::makeTitle($ns,$t); |
− | + | $id = $update = $id->getArticleID(); | |
− | |||
} | } | ||
# Delete all current category links from this title | # Delete all current category links from this title | ||
− | if ( $update ) { | + | if ($update) { |
$db->query( "DELETE FROM $cl WHERE cl_from='$id'" ); | $db->query( "DELETE FROM $cl WHERE cl_from='$id'" ); | ||
# Stop parser from clearing them again after we repopulate it | # Stop parser from clearing them again after we repopulate it | ||
Line 99: | Line 106: | ||
# Remove duplicates and sort categories | # Remove duplicates and sort categories | ||
$tmp = array(); | $tmp = array(); | ||
− | foreach ( $categories as $cat ) { | + | foreach ($categories as $cat) { |
− | list( $cat, $sortkey ) = explode( '|', ucfirst($cat) ); | + | list($cat,$sortkey) = explode('|',ucfirst($cat)); |
− | if ( !$tmp[$cat] = $sortkey ) $tmp[$cat] = $t; | + | if (!$tmp[$cat] = $sortkey) $tmp[$cat] = $t; |
} | } | ||
+ | unset($categories[$title]); | ||
ksort($tmp); | ksort($tmp); | ||
# Loop through categories and process each | # Loop through categories and process each | ||
− | foreach ( $tmp as $cat => $sortkey ) { | + | if (is_object($GLOBALS['wgParser']->mOptions)) { |
− | + | $sk =& $GLOBALS['wgParser']->mOptions->getSkin(); | |
− | + | foreach ( $tmp as $cat => $sortkey ) { | |
− | + | ||
− | + | # Add to wiki-output | |
− | + | $nt = Title::makeTitle( NS_CATEGORY, $cat ); | |
− | + | $GLOBALS[wgParser]->mOutput->addCategoryLink( $sk->makeLinkObj($nt, $cat) ); | |
+ | |||
+ | # Update db if saving and db-key known | ||
+ | $cat = addslashes( str_replace( ' ', '_', $cat ) ); | ||
+ | if ( $update ) $db->query( "INSERT INTO $cl (cl_from,cl_to,cl_sortkey) VALUES('$id','$cat','$sortkey')" ); | ||
+ | } | ||
} | } | ||
} | } | ||
} | } | ||
− | ?> | + | |
+ | ?></php> |
Latest revision as of 09:37, 27 April 2007
<php><?
- XmlWiki Category Extension - 2005-08-25 - see discussion page
global $xwIsProperties,$xwSection,$xwSave,$xwUserName; $update = ($xwSave && ($xwSection<1)); $apply = true;
- Don't apply if page is a category, or if action isn't view or submit
if ( ($action != 'view') && ($action != ) && !$update ) $apply = false;
- If a category page, add class attribute to table since the MediaWiki fellas didn't for some reason
if ( ereg( '^Category:.+$', $title ) ) { # If event is view, adjust rendered output, else add this to view event if ( $event == 'view' ) { # Add CSS class to headings (see, not just me who hard-wires styles!)
$article = preg_replace( '/