[Home]WikiPatches/ListOrphans

UseModWiki | WikiPatches | RecentChanges | Preferences

The function below is the core for providing an "orphans" action that lists pages with no referring links. Sorry for not providing a diff-- this code is from a usemod wiki fork.

NOTE: this has not been tested with subpages.

NOTE: seems to work with SubPages --TomScanlan

    sub GetOrphanList? {
      my @found;

      my %seen = ();
      my @pglist = &AllPagesList();
      foreach my $name (@pglist) {
        $seen{$name} = 0;
      }
      # pages linked from menu bar aren't orphans
      $seen{$HomePage} = 1;
      $seen{$RCName} = 1;
      foreach my $name (@pglist) {
        my @links = &GetPageLinks($name, 1, 0, 0);
        foreach my $link (@links) {
         #don't include self links
         unless ($link eq $name) {
          $seen{$link}++ if exists $seen{$link};
         }
        }
      }
      foreach my $name (sort keys %seen) {
        push(@found, $name) if $seen{$name} < 1;
      }
      return @found;
    }

For display, use something like this within a pre tag:

    &PrintLinkList(&GetOrphanList?());


Here is a unified diff for adding an orphans link to the goto bar in version 1.0

-- TomScanlan

--- wiki.pl.orig	2004-09-11 08:21:02.000000000 -0400
+++ wiki.pl	2004-06-10 22:03:14.734384880 -0400
@@ -485,6 +485,9 @@
   } elsif ($action eq 'random') {
     &DoRandom();
     return 1;
+  } elsif ($action eq 'orphans') {
+    &DoOrphanList();
+    return 1;
   } elsif ($action eq 'history') {
     &DoHistory($id)   if &ValidIdOrDie($id);
     return 1;
@@ -973,6 +976,43 @@
   &DoRc(0);
 }
 
+sub GetOrphanList {
+	my @found;
+
+	my %seen = ();
+	my @pglist = &AllPagesList();
+
+	foreach my $name (@pglist) {
+		$seen{$name} = 0;
+	}
+
+	# pages linked from menu bar aren't orphans
+	$seen{$HomePage} = 1;
+	$seen{$RCName} = 1;
+	foreach my $name (@pglist) {
+		my @links = &GetPageLinks($name, 1, 0, 0);
+		foreach my $link (@links) {
+                #don't include self links
+                unless ($link eq $name) {
+                  $seen{$link}++ if exists $seen{$link};
+                }
+		}
+	}
+
+	foreach my $name (sort keys %seen) {
+		push(@found, $name) if $seen{$name} < 1;
+	}
+	return @found;
+}
+
+sub DoOrphanList {
+  print &GetHeader('', &QuoteHtml(T('Full Orphan List')), '');
+  print "<hr>\n\n\n\n\n";  # Extra lines to get below the logo
+  &PrintPageList(&GetOrphanList());
+  print "\n";
+  print &GetCommonFooter();
+} 
+
 sub DoRandom {
   my ($id, @pageList);
 
@@ -1219,6 +1256,11 @@
   return &ScriptLink("action=random", T('Random Page'));
 }
 
+sub GetOrphanLink {
+  return &ScriptLink("action=orphans", T('Orphans'));
+}
+
+
 sub ScriptLinkDiff {
   my ($diff, $id, $text, $rev) = @_;
 
@@ -1487,6 +1529,7 @@
   if (&GetParam("linkrandom", 0)) {
     $bartext .= " | " . &GetRandomLink();
   }
+  $bartext .= " | " . &GetOrphanLink();
   if ($UserGotoBar ne '') {
     $bartext .= " | " . $UserGotoBar;
   }

as an extra to the above, the orphan option can be made a preferences option...

apologies over not being in a real diff format

@ somewhere in the sub GetGotoBar
  if (&GetParam("linkrandom", 0)) {      
    $bartext .= " | " . &GetRandomLink();
  }                                      
+  if (&GetParam("linkorphan", 0)) {  			
+  $bartext .= " | " . &GetOrphanLink();		
+	}																				
  if ($UserGotoBar ne '') {              

@ somewhere in sub DoEditPrefs
                              T('Add "Random Page" link to link bar'));                                      
+  print '<br>', &GetFormCheck('linkorphan', 0,  
+                             T('Add "Ophans" link to link bar')); print '<br>' . T('StyleSheet URL:') . ' ',
        &GetFormText('stylesheet', "", 30, 150);                                                             

@ somewhere in sub DoUpdatePrefs
   &UpdatePrefCheckbox("linkrandom");                
+  &UpdatePrefCheckbox("linkorphan");	
   print &GetHeader('',T('Saving Preferences'), ''); 

--BrianHunter


I found that the original patch did not account for subpages which were not given full names (e.g., WikiPatches/ListOrphans versus /ListOrphans). The partially named subpages were being flagged as orphans, adding much clutter to the list. I made the following change to the original patch:

From

    foreach my $link (@links) {
      #don't include self links
To
    foreach my $link (@links) {
      if ( $link =~ /^\// ) {
         $link = (split('/',$name))[0].$link;
      }
      #don't include self links
-- JamesHodge?

Even better is this:
    foreach my $link (@links) {
      if ( $link =~ /^\// ) {
         $link = (split('/',$name))[0].$link;
      }
      #don't forget anchors
      $link =~ s/#.*$//;
      #don't include self links
--FerdinandIhringer?

I repaired the patch-file above (there was a wrong number in one @@ ... @@ command) and changed it to display the results as a list of pages instead of links.

-- ChristopherOezbek


UseModWiki | WikiPatches | RecentChanges | Preferences
Edit text of this page | View other revisions | Search MetaWiki
Last edited October 14, 2007 11:31 am by JuanmaMP (diff)
Search: