Difference between revisions of "Categories.php"

From Organic Design wiki
m
Line 59: Line 59:
 
# 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
Line 86: Line 87:
 
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*>/',xwArticleContent($title)))
+
elseif ($ul == 'XML' and preg_match('/<!DOCTYPE[^>]+?xmlwiki-properties.dtd"\\s*>/',$content)) $categories[] = 'Transforms';
$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
Line 102: Line 103:
 
}
 
}
  
# Remove duplicates and self, and sort categories
+
# Remove duplicates and sort categories
 
$tmp = array();
 
$tmp = array();
 
foreach ($categories as $cat) {
 
foreach ($categories as $cat) {
Line 108: Line 109:
 
if (!$tmp[$cat] = $sortkey) $tmp[$cat] = $t;
 
if (!$tmp[$cat] = $sortkey) $tmp[$cat] = $t;
 
}
 
}
 +
unset($categories[$title]);
 
ksort($tmp);
 
ksort($tmp);
  

Revision as of 23:36, 15 February 2007

<?

  1. XmlWiki Category Extension - 2005-08-25 - see discussion page

global $xwIsProperties,$xwSection,$xwSave,$xwUserName; $update = ($xwSave && ($xwSection<1)); $apply = true;

  1. Don't apply if page is a category, or if action isn't view or submit

if ( ($action != 'view') && ($action != ) && !$update ) $apply = false;

  1. 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( '/

(.( cont\\.)?<\\/h3>)/i', '

$1', $article ); } else xwSetProperty( $properties, 'xpath:/properties:view', $tTitle ); $apply = false; # Just let wiki-parser handle category-links for category pages } if ($apply) { # Begin extracting category-link info - first get stuff we'll be needing $db =& wfGetDB( DB_SLAVE ); $cur = $db->tableName( 'cur' ); $cl = $db->tableName( 'categorylinks' ); $category_match = "\\[{2}\\s*category\\s*:\\s*(.+?)\\s*]]\\n?"; $pt = $title; # Extract category information from article's content and properties if ( eregi( '^xml:(.+)$', $title, $match ) ) { $content = xwArticleContent( $title = $match[1], false ); preg_match_all( "/$category_match/i", $content, $match ); $categories = array_merge( xwGetListByTagname( $article, 'category' ), $match[1] ); xwGetProperty( $article, 'language', $language ); if ( !$language ) $language = xwArticleType( $title, $content ); } elseif ( eregi( '^sys:(.+)$', $title, $match ) ) { $title = $match[1]; $ns = NS_USER; $content = xwArticleContent( "User:$title", false ); preg_match_all( "/$category_match/i", $content, $match ); $categories = $match[1]; # Groups auto-categorisation foreach ( xwGetListByTagname( $article, 'groups' ) as $group ) $categories[] = "Group:$group"; $language = ; } else { $categories = xwGetListByTagname( $properties, 'category' ); # Must remove category-links from article so wiki-parser doesn't process them xwGetProperty( $properties, 'language', $language ); if ( !$language ) { $article = preg_replace( "/$category_match/ie", '($categories[]="$1")?"":""', $article ); if (ereg('
Cone.png This article or section is a stub. Stubs are articles that have not yet received substantial attention from the authors. They are short or insufficient pieces of information and require additions to further increase the article's usefulness. The project values stubs as useful first steps toward complete articles.

',$article)) $categories[] = 'Stubs'; } }

# Only do the rest if this is the top level article # - the embeds still have to have their cat-links removed if ($pt == $GLOBALS['xwArticleTitle']) {

$nt = Title::newFromText($title); $ns = $nt->getNamespace(); $t = addslashes($nt->getDBkey()); # Title used in db-tables $ul = strtoupper($language); $content = xwArticleContent($title);

# Auto-Category: Language 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 # - CSS and XSLT are included unconditionally # - PHP included if writable only by dev or admin # - XML included if DocType DTD is xmlwiki-properties (but not Xml:name) $transformExceptions = array( 'Xmlwiki.php', 'Default-properties.xml', 'Document.php', 'Geshi.php', 'Default-skin.php', 'LocalSettings.php', 'Transform-changes.php', 'Transform-all-pages-list.php', 'Categories.php', 'Properties.php', 'Calendar.php', 'Document.css' ); if ($ul == 'CSS' or $ul == 'XSLT') $categories[] = 'Transforms'; elseif (in_array($title, $transformExceptions)) 0; elseif ($ul == 'PHP' and count(preg_grep('/^(admin)|(dev)$/i',xwGetListByTagname(xwArticleProperties($title),'write')))) $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 if ($update) { $id = Title::makeTitle($ns,$t); $id = $update = $id->getArticleID(); }

# Delete all current category links from this title if ($update) { $db->query( "DELETE FROM $cl WHERE cl_from='$id'" ); # Stop parser from clearing them again after we repopulate it $GLOBALS['wgUseCategoryMagic'] = false; }

# Remove duplicates and sort categories $tmp = array(); foreach ($categories as $cat) { list($cat,$sortkey) = explode('|',ucfirst($cat)); if (!$tmp[$cat] = $sortkey) $tmp[$cat] = $t; } unset($categories[$title]); ksort($tmp);

# Loop through categories and process each 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')" ); } } } }

?>