commit c28d11cac8e25d9b0cf8322cf284fe05ce715d50 (tag: v0.40)
Author: Aaron J. Graves <>
Date:   Thu Nov 13 16:02:07 2014 -0600
    - DoRequest: Removed some commented code

commit 8d4a4ec810ad43722a77e628f40676c10b4301ce
Author: Aaron J. Graves <>
Date:   Thu Nov 13 16:00:17 2014 -0600
    - Added $PurgeDeletedPage

commit 0d026f7c267980c68be08ae2e73075846f8907f6
Author: Aaron J. Graves <>
Date:   Thu Nov 13 15:51:22 2014 -0600
    - InitVars: Check if a revision exists before offering to edit it, remove RegCommand on 'revision'
    - MarkupImage: Use $Url instead of $ShortUrl
    - DoSpecialPage: Return if a revision is involved
    - DoEdit: Show if currently editing the latest revision, also let the user know if the page is a special page
    - AdminForm: Form() now returns instead of prints
    - DoAdminBlock: Form() now returns instead of prints
    - DoAdminBannedContent: Form() now returns instead of prints
    - DoAdminCSS: Form() now returns instead of prints
    - DoAdminRobotsTxt: Form() now returns instead of prints
    - RedHerringForm: Return instead of print
    - Form: Return instead of print
    - DoDiscuss: RedHerringForm() now returns instead of prints
    - DoHistory: Instead of calling CommandLink for 'revision', call a blank CommandLink (DoRequest() now handles revisions)
    - PageExists: Allow revisions as well
    - Removed sub DoRevision - Now handled by DoRequest()
    - CommandLink: Change to allow for blank command
    - DoRequest: Removed some commented code, now handle displaying revisions of pages and files

commit 5e7a7ab66427d69ead5d25eb5081f361ea03d6ad
Author: Aaron J. Graves <>
Date:   Fri Nov 7 13:41:32 2014 -0600

    - Removed RewriteCond that QUERY_STRING be empty.

commit 09a8edabdd506b06c843446459a4850aac6737ac
Author: Aaron J. Graves <>
Date:   Fri Nov 7 13:38:01 2014 -0600
    - Removed some unneeded variables, changed @Plugins to %Plugins
    - Introduced $VERSIONID
    - Use $Url instead of $ShortUrl in several places throughout the script
    - InitVars: Changed the way $EditText was built, $RevisionsText and $RandomText now use CommandLink() and $AdminText uses AdminLink(). Changed call on RegCommand for 'revision'. Removed RegAdminPage 'getbannedcontentfile'. Removed RegShortCode call on 'blog'.
    - Removed sub DoBlog
    - MarkupBuildLink: Use methods to generate links. Call CommandLink() for the edit link.
    - Markup: Introduced triple-braces to generate <pre> tags, began preparing for triple-brace around inline no-wiki
    - Wrote sub RegPlugin - Registers a plugin and its description
    - GetPage: Added comment
    - Removed unneeded sub GetArchivePage
    - RefreshLock: Call StringToFile instead of manually writing.
    - UnLock: Untaint $pg
    - DoArchive: Untaint $file, $archive, and $F{revision}
    - WritePage: Corrected test for file upload
    - WriteDB: Untaint $filename
    - CommandDisplay: If there is a revision, append it to the end of the line
    - AdminForm: Call Form() now
    - DoAdminVersion: Change for @Plugins -> %Plugins
    - DoAdminIndex: Use methods for links
    - DoAdminRemoveLocks: Untaint variables
    - DoAdminClearVisits: Use methods, and call AdminLink()
    - DoAdminListVisitors: Call AdminLink() for removing limit
    - Removed unneeded sub DoAdminUnlock
    - DoAdminBlock: Add <br/> before save button
    - DoAdminBannedContent: Remove bit about pre-populating with default BannedContentFile, add <br/> before save button
    - DoAdminCSS: Call AdminLink() to restore default CSS, add <br/> before save button
    - DoAdminListFiles: Use methods for list and link
    - DoAdminRobotsTxt: Add <br/> before save button
    - Commented out sub DoAdminGetBannedContentFile - It wasn't working anyways.
    - DoAdmin: Minor change to back link, call AdminLink() for it, use methods for list
    - DoRecentChanges: Call CommandLink()
    - DoDownload: Now can handle revisions as well
    - DoHistory: Use methods, inform if page is scheduled to be deleted, call CommandLink()
    - DoVisit: If param 'revision' is set but $PageRevision is not, then populate the variable with the parameter
    - DoRevision: Properly display past revisions of uploaded files
    - Wrote sub CommandLink - will return a link to the command specified
    - Wrote sub AdminLink - will return an admin link to the admin page specified
    - CSS: Changed the <pre> style

commit 933add01c420629e4f3e5b8e13eb355068fb32e2
Author: Aaron J. Graves <>
Date:   Tue Oct 28 14:53:22 2014 -0500
    - Added variable $PurgeDeletedPage - timestamp for how long a page marked DeletedPage should hang around
    - InitVars: Initialize $PurgeDeletedPage to 2 weeks
    - InitVars: Include the quotes in 'search' RegCommand
    - InitVars: Removed the RegCommand for 'delete', added RegMaintAction 'deletepages'
    - GetPage: Changed the way variables are passed
    - DoEdit: Moved the preview above the start of the editing form, removed the link to "Delete Page"
    - WritePage: Check if the content is a file upload, and if it is, don't try to do signatures. Same thing for the diff
    - ReadDB: Introduced variable to increase readability of code
    - AppendPage: Pass along first 200 characters of comment instead of "Comment by"
    - DoRecentChanges: Don't split the summary onto its own line
    - DoHistory: Changed intro line to page
    - DoPostingUpload: Fixed bug that was causing upload revisions to not work. The fix was in the record separator.
    - Wrote sub DoMaintDeletePages - Deletes pages that have been marked DeletedPage and are older than $PurgeDeletedPage
    - DoDiff: Link to current revision of page (at the top), also don't show plain text contents if it's a file
    - Removed sub DoDelete

commit 3e9f78139f6aead5fba2110d3c355093bd4346a7
Author: Aaron J. Graves <>
Date:   Fri Oct 24 10:45:53 2014 -0500
    - Added var %CommandsDisplay - Display options for the given command in the visitor log
    - InitVars: If do=revision, we still want discussion and edit links. Also, if revision number specified, edit text will now include that.
    - InitVars: Changed all RegCommand calls to include display variables.
    - InitVars: Instead of building %MaintActions manually, use the new RegMaintAction API
    - DoHeader: Use "searchbox" as the id for the div around the search form.
    - MarkupBuildLink: Underline the page name in red dashed line if it doesn't yet exist
    - Markup: #NOWIKI is handled a little differently
    - RegCommand: Allow $display variable now, add that to %CommandsDisplay
    - UnRegCommand: Delete from %CommandsDisplay also
    - Wrote sub RegMaintAction - registers a maintenance action
    - Wrote sub UnregMaintAction - unregisters a maintenance action
    - GetPage: allow a revision to be passed to the sub, and if there is one, retrieve the revision instead of the latest version of a page
    - IsLoggedIn: Added additional comments
    - DoEdit: Allow revisions to be edited, use WriteDB and ReadDB instead of the hokey way temp files were being stored before.
    - WritePage: Instead of using GetParam('revision'), use NextRevision()
    - Wrote sub LatestRevision - Returns the latest revision number of a page.
    - Wrote sub NextRevision - Returns LatestRevision() + 1
    - Wrote sub CommandDisplay - will return the display text for a given command
    - DoAdminListVisitors: Removed all hard-coded command translation, call CommandDisplay now
    - DoSearchShortCode: Allow "extras" to be included that will be tacked on to the URL, such as "summary=0" etc
    - DoSearch: If param summary=0, don't show the text from the page (simply show the list of pages and their last modified time)
    - DoHistory: The revert button now sends you to edit for the particular revision
    - Preview: Changed to use the WriteDB function
    - DoRevision: use param 'revision' instead of 'rev'
    - Removed sub DoRevert - now handled by DoEdit with revision param set
    - DoRequest: Use param 'revision' instead of 'rev'
    - CSS: Rename #search to #searchbox

commit 6a019013c66e2495c6d8bd0be0b74afe3269f84e
Author: Aaron J. Graves <>
Date:   Wed Oct 15 10:43:12 2014 -0500
    - ADDED VARS $SpamLog and $LogSpam
    - InitVars: defined $LogSpam and $SpamLog
    - DoSearch: Remove "Nothing found!" comment, changed page titles to use <big> tag, added suggestion at the bottom of the search page to create a page if no results found.
    - DoRevert: Check for IsAdmin() while reverting (TEMPORARY FIX!!!)

commit 6a48c1a5cbd1c4896d44754346b64e075c63fbbd
Author: Aaron J. Graves <>
Date:   Tue Jun 10 16:02:51 2014 -0500

    - Added variable %HTTPHeader
    - InitConfig: $ConfFile is now './' due to some strange issues observed in another installation
    - InitVars: $ENV{'PATH'} now includes /usr/local/bin and /usr/pkg/bin, just in case.
    - InitVars: Check for %3B in requests, convert them to semicolons.
    - InitVars: Call RegCommand() for robotstxt, points to DoRobotsTxt()
    - InitVars: Call RegAdminPage for robotstxt and getbannedcontentfile
    - InitVars: Call RegPostAction for robotstxt, points to DoPostingRobotsTxt
    - InitVars: Call RegRawHandler for robotstxt, also if $Page eq "robots.txt" then call SetParam on 'do' to 'robotstxt'
    - ReadCookie: Re-written to use CGI
    - SetCookie: Re-written to use CGI
    - DoEdit: Don't call QuoteHTML on $contents for the default text of the textarea.
    - Wrote sub CountAllComments - Determines the list of discussion pages, and walks through them calling DiscussCount, returns total count
    - DoAdminListVisitors: Don't show the seperate list of IP's, changed the way the data break-out is done with named variables
    - DoAdminBlock: Surround the blocked count with <strong>
    - DoAdminBannedContent: Surround the blocked count with <strong>, added link to call getbannedcontentfile
    - DoAdminListFiles: Move the printing of the intro text down
    - Wrote sub DoAdminRobotsTxt - Admin page for editing the robots.txt file
    - Wrote sub DoAdminGetBannedContentFile - Supposed to retrieve the distrubted BannedContentFile from (not working yet)
    - DoAdmin: If the descriptive text for an admin page is empty, don't display it in the list
    - Wrote sub DoRobotsTxt - Sends text/plain robots.txt
    - QuoteHTML: Commented the & exchange for &amp, don't recall why right now
    - DoHistory: Only show page view count if $CountPageVisits is set
    - ReDirect: Include %HTTPHeader with $q->redirect() call
    - Wrote sub DoPostingRobotsTxt - Handles saving the robots.txt file
    - DoPosting: SetParam() do = 'posting'
    - DoVisit: Log entries are very simple now
    - ErrorPage: Changed the way the HTTP Status is set
    - DoRequest: Commented out the block that bans searching from outside the site. This really isn't a bad thing I don't think. It was just being abused previously.
    - DoRequest: If param 'do' is set, but a sub not associated with it, call 501 not implemented
    - DoRequest: Now use %HTTPStatus with $q->header()
    - CSS: Added "font-size: 1.05em;" to #content declaration

commit 8770d87d6623b14289412815147d92271aba557d
Author: Aaron J. Graves <>
Date:   Thu Apr 24 15:46:09 2014 -0500
    - Removed %FORM from use vars statement
    - Defined variables %ShortCodes and $BlogPattern
    - InitVars: Grab $Aneuch::VERSION instead of $VERSION in adding Aneuch to @Plugins
    - InitVars: Define $BlogPattern
    - InitVars: Removed unneeded code
    - InitVars: Changed the way $NavBar is built
    - InitVars: Register short codes 'blog' and 'search'
    - Wrote sub DoBlog - Returns a listing of blog entries
    - MarkupBuildLink: Add quotes around page name when building create page link
    - Wrote sub MarkupShortcode - Searches for defined shortcodes, then executes the associated sub
    - Markup: Check for shortcodes at the end
    - Wrote sub RegShortCode - Registers a shortcode and its associated sub
    - Wrote sub UnregShortCode - Unregisters a previously registered shortcode
    - DoEdit: Added checkbox to select if the page is a template (not complete yet)
    - DoEdit: Only show the link to upload a file if CanUpload()
    - DoAdminBlock: Call Form() instead of manually building the form
    - DoAdminBannedContent: Call Form() instead of manually building the form
    - DoAdminCSS: Call Form() instead of manually building the form
    - DoAdmin: If $CountPageVisits then show total page view count
    - Wrote sub Form - Generates an HTML form element based on input received
    - Wrote sub DoSearchShortCode - Returns a link to search for the text within the shortcode
    - DoPostingDiscuss: Check for attempted file upload
    - DiscussCount: Operate on a page name passed to the sub (if one is) rather than $Page
    - DoRevert: Add rel='nofollow' on "YES" link
    - StripMarkup: Added "-" to the list of items acceptable.
    - DoRequest: Removed hard-coded URL on $referer checking for search
    - CSS: Added .navigation li block

commit ef3d3535918af92b199cefd44e035ef1c81e34e2
Author: Aaron J. Graves <>
Date:   Thu Mar 13 15:13:38 2014 -0500

    - InitVars: Strip leading slashes from $Page right after it grabs path_info()
    - InitVars: Call RegAdminPage on 'files', which points to DoAdminListFiles()
    - MarkupImage: Fixed bug whereby external images (with http://) were getting clobbered. Also call ReplaceSpaces() on image name if local file.
    - Wrote sub DoAdminListFiles - Shows a list of all pages which contain an uploaded file
    - DoRequest: Call PageExists() instead of a manual test. Also, if 'filename' is set on an uploaded file, display that instead of the page name.

commit 686dd7561b92a09c8f0f9a624edb91af1027b377
Author: Aaron J. Graves <>
Date:   Tue Mar 11 21:12:50 2014 -0500

    - Removed $Header and $Footer
    - Added $UploadsAllowed and @UploadTypes

commit 8c0f22425256786a42a160ac6c751acc4935239e
Author: Aaron J. Graves <>
Date:   Tue Mar 11 14:30:46 2014 -0500

    - Changed hash-bang line to include the 'w' and 'T' switches. Not sure about keeping this in the future.
    - Added "use CGI" statement
    - Uncommented the "use CGI::Carp qw(fatalsToBrowser)" line. For now.
    - Added variables $q, $Hostname, @RawHandlers, $UploadsAllowed, and @UploadTypes
    - InitScript: Set $q = new CGI
    - InitVars: Set $UploadsAllowed to 0 by default, and set the default @UploadTypes to include 'image/gif', 'image/png', and 'image/jpeg'
    - InitVars: Removed a bunch of commented code, and changed the way $Page was determined
    - InitVars: Call SetParam on 'search' after replacing spaces
    - InitVars: Changed how redirect is done for trailing slash pages (for CGI)
    - InitVars: Attempt to determine $Hostname, set $Username to it if one isn't set already
    - InitVars: Call RegCommand on 'download', which calls DoDownload()
    - InitVars: Call RegPostAction on 'upload', which calls DoPoastingUpload()
    - InitVars: Call RegRawHandler on 'download' and 'random'
    - DoHeader: Change the call on PageExists from GetParam('page') to $Page... don't know if this is still needed.
    - MarkupBuildLink: Don't strip a query string from the link text anymore
    - Wrote sub MarkupImage - Handles the image stuff of the markup tag {{}}
    - Markup: Call MarkupImage() on image tags
    - Wrote sub PageIsFile - Returns 1 if the page is an uploaded file, 0 otherwise
    - Wrote sub IsRawHandler - Determines if an action should be done "raw"
    - Wrote sub RegRawHandler - Adds an action to the list of "raw" subroutines
    - GetParam: Changed to use CGI
    - Wrote sub SetParam - sets a named parameter to a value in CGI
    - SetCookie: Removed some commented code
    - Wrote sub CanUpload - Determines if uploads are allowed
    - DoEdit: Re-written to include the file upload form if 'upload' param = 1, and to utilize CGI calls
    - SetLock: Call StringToFile instead of writing directly to a file
    - WritePage: Remove all %FORM lookups, replace with GetParam (for CGI), also add 'hostname' and 'filename' elements
    - AppendPage: Added 'hostname' element
    - DoAdminPassword: Call CGI functions instead of direct printing HTML
    - DoAdminVersion: Call CGI functions instead of direct printing HTML
    - DoAdminListVisitors: Set the paragraph style to align left (instead of justify), added "download" to the list of items to word differently
    - DoAdmin: Instead of doing a javascript to go back, hard-link to ?do=admin
    - Removed sub ReadIn - No longer needed since the switch to CGI
    - Wrote sub StartForm - Returns the start of a multipart form
    - IsBannedContent: If the text is a file upload, return 0. Also replace %FORM with GetParam
    - PassesSpamCheck: Re-written to use GetParam (for CGI)
    - DoLinkedPages: If page does not exist, say so and return
    - Wrote sub DoDownload - Handles the sending out of uploaded files
    - DoSearch: Change to use 'grep -Prli' to get a list of pages that contain the search string, and then open only those pages (speeds up search)
    - StringToFile: Replace %FORM with GetParam (for CGI)
    - ReDirect: Re-written to use CGI
    - DoPostingSpam: use GetParam (for CGI)
    - DoPostingLogin: use GetParam (for CGI)
    - DoPostingEditing: use GetParam (for CGI), check if attempting to by-pass the ban on file uploads
    - DoPostingDiscuss: use GetParam (for CGI)
    - DoPostingBlockList: use GetParam (for CGI)
    - DoPostingBannedContent: use GetParam (for CGI)
    - DoPostinCSS: use GetParam (for CGI)
    - Wrote sub DoPostingUpload - Handles the file uploads
    - DoPosting: use GetParam (for CGI)
    - StringToFile: Attempt to untaint the file name (may need more work)
    - DoDiff: use GetParam (for CGI)
    - DoRevision: Instead of a giant header, use a smaller, friendlier paragraph to show revision number. Also link to the original.
    - DoRevert: use SetParam (for CGI)
    - ErrorPage: Added more http codes
    - DoRequest: Remove call to ReadIn(), remove hard-coded check for 'random' action, block any search request if referer isn't on the same domain (or is set to a blank search request), call IsRawHandler, and use GetParam (for CGI). Also if PageIsFile(), show a friendly page with a link to ?do=download rather than vomit on the screen.

commit db3ced225ae63717abd53a73096f333bb3daa828
Author: Aaron J. Graves <>
Date:   Tue Mar 4 10:29:01 2014 -0600

    - Updated $VERSION to 0.40
    - InitVars: Changed the way $DiscussPrefix is determined, allowing a blank value (which will disable discussion pages)
    - InitVars: Only build $DiscussLink and $DiscussText if $DiscussPrefix is not blank
    - InitVars: Call RegCommand on 'links', which calls DoLinkedPages()
    - InitVars: Only call RegSpecialPage on "$DiscussPrefix.*" if $DiscussPrefix is not blank
    - DoFooter: Only add $DiscussText to the list if $DiscussPrefix is not blank
    - DoAdminListVisitors: Added "links" to the list of items to display differently
    - Wrote sub DoLinkedPages: Displays a list of pages that link back to $Page
    - DoHistory: Add a link to the 'links' action on the history page, which will then show backlinks
    - IsDiscussionPage: If $Page matches $DiscussPrefix and $DiscussPrefix is not blank (otherwise every page was turning in to a discussion page)

commit a7920ed8eeb79243f0f88cb69684d1c9172ea8af
Author: Aaron J. Graves <>
Date:   Tue Mar 4 10:13:24 2014 -0600

    - Corrected a minor spelling mistake