PurpleWiki

 view release on metacpan or  search on metacpan

wiki.pl  view on Meta::CPAN

  return $result;
}

sub GetRemoteHost {
  my ($doMask) = @_;
  my ($rhost, $iaddr);

  $rhost = $ENV{REMOTE_HOST};
  if ($rhost eq "") {
    # Catch errors (including bad input) without aborting the script
    eval 'use Socket; $iaddr = inet_aton($ENV{REMOTE_ADDR});'
         . '$rhost = gethostbyaddr($iaddr, AF_INET)';
  }
  if ($rhost eq "") {
    $rhost = $ENV{REMOTE_ADDR};
    $rhost =~ s/\d+$/xxx/  if ($doMask);      # Be somewhat anonymous
  }
  return $rhost;
}

sub FreeToNormal {
  my ($id) = @_;

  $id =~ s/ /_/g;
  $id = ucfirst($id);
  if (index($id, '_') > -1) {  # Quick check for any space/underscores
    $id =~ s/__+/_/g;
    $id =~ s/^_//;
    $id =~ s/_$//;
    if ($config->UseSubpage) {
      $id =~ s|_/|/|g;
      $id =~ s|/_|/|g;
    }
  }
  if ($config->FreeUpper) {
    # Note that letters after ' are *not* capitalized
    if ($id =~ m|[-_.,\(\)/][a-z]|) {    # Quick check for non-canonical case
      $id =~ s|([-_.,\(\)/])([a-z])|$1 . uc($2)|ge;
    }
  }
  return $id;
}
#END_OF_BROWSE_CODE

# == Page-editing and other special-action code ========================

sub DoOtherRequest {
  my ($id, $action, $text, $search);

  $action = GetParam("action", "");
  $id = GetParam("id", "");
  my $iname = &GetParam("xri_iname", "");
  if ($action ne "") {
    $action = lc($action);
    if ($action eq "edit") {
      DoEdit($id, 0, 0, "", 0)  if ValidIdOrDie($id);
    } elsif ($action eq "unlock") {
      DoUnlock();
    } elsif ($action eq "index") {
      DoIndex();
    } elsif ($action eq "editprefs") {
      DoEditPrefs();
    } elsif ($config->UseINames && $action eq "getiname") {
      if (!$user) {
          &DoGetIname();
      }
      else { # return an error
      }
    } elsif ($action eq "login") {
      DoEnterLogin();
    } elsif ($action eq "newlogin") {
      $user = undef;
      DoEditPrefs();  # Also creates new ID
    } elsif ($action eq "logout") {
      &DoLogout;
    } elsif ($action eq 'rss') {
      require PurpleWiki::Syndication::Rss;
      my $rss = new PurpleWiki::Syndication::Rss;
      print $q->header(-type => 'text/xml') .
          $rss->getRSS;
    } else {
      # Later improve error reporting
      $wikiTemplate->vars(&globalTemplateVars,
                          action => $action);
      print GetHttpHeader() . $wikiTemplate->process('errors/actionInvalid');
    }
    return;
  }
  elsif ($config->UseINames && $iname) {
    my $xsid = &GetParam('xri_xsid', '');
    &DoIname($iname, $xsid);
    return;
  }

  $iname = &GetParam("iname", "");
  if ($config->UseINames && $iname) {
      my $localId = &GetParam("local_id", "");
      my $rrsid = &GetParam("rrsid", "");
      &DoAssociateIname($iname, $localId, $rrsid);
      return;
  }
  
  if (&GetParam("edit_prefs", 0)) {
    &DoUpdatePrefs();
    return;
  }
  if (GetParam("enter_login", 0)) {
    DoLogin();
    return;
  }
  $search = GetParam("search", "");
  if (($search ne "") || (GetParam("dosearch", "") ne "")) {
    DoSearch($search);
    return;
  }
  # Handle posted pages
  if (GetParam("oldtime", "") ne "") {
    $id = GetParam("title", "");
    DoPost()  if ValidIdOrDie($id);
    return;
  }
  # Later improve error message
  $wikiTemplate->vars(&globalTemplateVars);
  print GetHttpHeader() . $wikiTemplate->process('errors/urlInvalid');
}

sub DoEdit {
  my ($id, $isConflict, $oldTime, $newText, $preview) = @_;
  my ($header, $editRows, $editCols, $revision, $oldText);
  my ($summary, $isEdit, $pageTime);

  my $page;
  my $section;
  my $text;
  my $keptRevision;

  my $pageName = $id;
  if ($config->FreeLinks) {
      $pageName =~ s/_/ /g;
  }

  if (!$acl->canEdit($user, $id)) {
      $wikiTemplate->vars(&globalTemplateVars);
      print GetHttpHeader() . $wikiTemplate->process('errors/editBlocked');
      return;
  }
  elsif (!$config->EditAllowed || -f $config->DataDir . "/noedit") {
      $wikiTemplate->vars(&globalTemplateVars);
      print GetHttpHeader() . $wikiTemplate->process('errors/editSiteReadOnly');
      return;
  }

  $page = new PurpleWiki::Database::Page('id' => $id);

  if (-f $page->getLockedPageFile()) {
      $wikiTemplate->vars(&globalTemplateVars);
      print GetHttpHeader() . $wikiTemplate->process('errors/editNotAllowed');
      return;
  }

  $keptRevision = new PurpleWiki::Database::KeptRevision(id => $id);
  my ($username, $userId);
  if ($user) {

wiki.pl  view on Meta::CPAN


sub logSession {
    open FH, ">>$CONFIG_DIR/session_log";
    print FH time . "\t" . $session->id . "\t" . $q->request_method . "\t";
    print FH $q->query_string if ($q->request_method ne 'POST');
    print FH "\t" . $q->remote_host . "\t" . $session->param('userId') . "\t" .
        $q->referer . "\n";
    close FH;
}

sub updateVisitedPagesCache {
    my $id = shift;

    my @pages = keys %{$visitedPagesCache};
    if (!defined $visitedPagesCache->{$id} &&
        (scalar @pages - 1 >= $visitedPagesCacheSize)) {
        my @oldestPages = sort {
            $visitedPagesCache->{$a} <=> $visitedPagesCache->{$b}
        } @pages;
        my $remove = scalar @pages - $visitedPagesCacheSize + 1;
        for (my $i = 0; $i < $remove; $i++) {
            delete $visitedPagesCache->{$oldestPages[$i]};
        }
    }
    $visitedPagesCache->{$id} = time;
    $session->param('visitedPagesCache', $visitedPagesCache);
}

sub visitedPages {
    my @pages = sort { $visitedPagesCache->{$b} <=> $visitedPagesCache->{$a} }
        keys %{$visitedPagesCache};
    my $i = 0;
    foreach my $id (@pages) {
        my $pageName = $id;
        $pageName =~ s/_/ /g if ($config->FreeLinks);
        $pages[$i] = {
            'id' => $id,
            'pageName' => $pageName,
        };
        $i++;
    };
    return @pages;
}

sub expandPageName {
    my $pageName = shift;

    if ($pageName !~ / /) {
        $pageName =~ s/([a-z])([A-Z])/$1 $2/g;
        $pageName =~ s/([0-9])([A-Z])/$1 $2/g;
        $pageName =~ s/([a-z])([0-9])/$1 $2/g;
    }
    return $pageName;
}

sub globalTemplateVars {
    return (siteName => $config->SiteName,
            baseUrl => $config->ScriptName,
            homePage => $config->HomePage,
            userName => $user ? $user->username : undef,
            preferencesUrl => $config->ScriptName . '?action=editprefs');
}

&DoWikiRequest()  if ($config->RunCGI && ($_ ne 'nocgi'));   # Do everything.
1; # In case we are loaded from elsewhere
# == End of UseModWiki script. ===========================================



( run in 1.702 second using v1.01-cache-2.11-cpan-98e64b0badf )