#!/usr/bin/perl # ============================= # GREYMATTER - Main Program # Weblog/Journal Software # version one point two # Copyright (c)2000 Noah Grey # http://noahgrey.com/greysoft/ # ============================= # *** Your possession of this software indicates that you agree to the terms *** # *** specified under the "Copyright & Usage" heading in the "manual.txt" file. *** eval { ($0 =~ m,(.*)/[^/]+,) && unshift (@INC, "$1"); ($0 =~ m,(.*)\\[^\\]+,) && unshift (@INC, "$1"); }; use CGI::Carp qw(fatalsToBrowser); require "gm-library.cgi"; # ---------------------------------------- # gathering the input & checking for login # ---------------------------------------- print "Content-type: text/html\n\n"; $authorIP = $ENV{'REMOTE_ADDR'}; $logindeletednotice = ""; if ($ENV{'REQUEST_METHOD'} eq "GET") { $getin = $ENV{'QUERY_STRING'}; } else { read(STDIN, $getin, $ENV{'CONTENT_LENGTH'}); } @pairs = split(/&/, $getin); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; unless (($name eq "logtext") || ($name eq "loglink")) { $value =~ tr/+/ /; } $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $IN{$name} = $value; } &gm_bancheck; &gm_readconfig; if ($IN{'thomas'} eq "") { &gm_login; } if ($IN{'thomas'} eq "Re-Login") { &gm_login; } &gm_validate; if ($IN{'thomas'} eq "login") { &gm_writetocplog("$IN{'authorname'} logged in"); &gm_versioncheck; &gm_readcounter; $statusnote = qq(Welcome, $IN{'authorname'}.

); if ($newentrynumber eq "0") { open (FUNNYFEET, "gm-cplog.cgi") || &gm_dangermouse("Can't read the control panel log. Please make sure that gm-cplog.cgi is CHMODed to 666 and is in the same place as all your other Greymatter CGI files; also try running Diagnostics & Repair from the Configuration screen."); @cploglines = ; close (FUNNYFEET); $cplogtext = join (" ", @cploglines); unless ($cplogtext =~ /successfully performed diagnostics/) { $statusnote = qq(Welcome to Greymatter! Please enter Configuration first, check your paths,
and run Diagnostics & Repair to validate your installation.

); } } &gm_frontpage; } if ($IN{'thomas'} eq "rebuildupdate") { &gm_rebuildupdate; } if ($IN{'thomas'} eq "Update Now") { &gm_versionupgrading; } if ($IN{'thomas'} eq "gmbmpost") { &gm_addentrypopup; } if ($IN{'thomas'} eq "Return To Main Menu") { &gm_frontpage; } if ($IN{'thomas'} eq "Add A New Entry") { &gm_addentry; } if ($IN{'thomas'} eq "Edit An Entry") { &gm_editentryselection; } if ($IN{'thomas'} eq "Configuration") { &gm_configuration; } if ($IN{'thomas'} eq "Edit Templates") { &gm_edittemplates; } if ($IN{'thomas'} eq "Edit Authors") { &gm_editauthors; } if ($IN{'thomas'} eq "Edit Banned IP List") { &gm_editbanlist; } if ($IN{'thomas'} eq "Add Bookmarklets") { &gm_addbookmarklets; } if ($IN{'thomas'} eq "Upload Files") { &gm_uploadfiles; } if ($IN{'thomas'} eq "Rebuild Files") { &gm_rebuildfilesmenu; } if ($IN{'thomas'} eq "View Control Panel Log") { &gm_viewcplog; } if ($IN{'thomas'} eq "Add This Entry") { &gm_savenewentry; } if ($IN{'thomas'} eq "Preview Before Posting") { &gm_previewentry; } if ($IN{'thomas'} eq "Re-Edit This Entry") { if ($IN{'gmbmspecial'} eq "popupblog") { &gm_addentrypopup; } else { &gm_addentry; } } if ($IN{'thomas'} eq "Change View") { &gm_editentryselection; } if ($IN{'thomas'} eq "Search") { &gm_editentryselection; } if ($IN{'thomas'} eq "Edit Selected Entry") { &gm_editthisentry; } if ($IN{'thomas'} eq "Open/Close Selected Entry") { &gm_changeentryopenstatus; } if ($IN{'thomas'} eq "Search And Replace Across All Entries") { &gm_editentrysearchandreplace; } if ($IN{'thomas'} eq "Edit Selected Comment") { &gm_editselectedcomment; } if ($IN{'thomas'} eq "Delete Selected Comment") { &gm_deleteselectedcomment; } if ($IN{'thomas'} eq "Save Changes To This Entry") { &gm_saveentrychanges; } if ($IN{'thomas'} eq "Select Another Entry") { &gm_editentryselection; } if ($IN{'thomas'} eq "Return To Entry Selection") { &gm_editentryselection; } if ($IN{'thomas'} eq "Perform Search And Replace") { &gm_performsearchandreplace; } if ($IN{'thomas'} eq "Save Changes To This Comment") { &gm_savecommentchanges; } if ($IN{'thomas'} eq "Return To Entry Editing") { &gm_editthisentry; } if ($IN{'thomas'} eq "Add New IP") { &gm_addbannedip; } if ($IN{'thomas'} eq "Delete Selected IP") { &gm_deletebannedip; } if ($IN{'thomas'} eq "Diagnostics & Repair") { &gm_diagnosticscheck; } if ($IN{'thomas'} eq "Save Configuration") { &gm_saveconfiguration; } if ($IN{'thomas'} eq "Perform Diagnostics & Repair") { &gm_diagnosticsperform; } if ($IN{'thomas'} eq "Return To Configuration") { &gm_configuration; } if ($IN{'thomas'} eq "Edit Main Index-Related Templates") { &gm_editmainindextemplates; } if ($IN{'thomas'} eq "Edit Archive-Related Templates") { &gm_editarchivetemplates; } if ($IN{'thomas'} eq "Edit Entry Page-Related Templates") { &gm_editentrypagetemplates; } if ($IN{'thomas'} eq "Edit Karma & Comments-Related Templates") { &gm_editkarmacommentstemplates; } if ($IN{'thomas'} eq "Edit Header, Footer & Sidebar Templates") { &gm_editheaderfootertemplates; } if ($IN{'thomas'} eq "Edit Miscellaneous Templates") { &gm_editmisctemplates; } if ($IN{'thomas'} eq "Return To Templates Menu") { &gm_edittemplates; } if ($IN{'thomas'} eq "Save Template Changes") { &gm_savetemplatechanges; } if ($IN{'thomas'} eq "Edit Selected Author") { &gm_editselectedauthor; } if ($IN{'thomas'} eq "Delete Selected Author") { &gm_deleteselectedauthor; } if ($IN{'thomas'} eq "Create New Author") { &gm_createnewauthor; } if ($IN{'thomas'} eq "Save Changes To This Author") { &gm_saveauthorchanges; } if ($IN{'thomas'} eq "Return To Author Panel") { &gm_editauthors; } if ($IN{'thomas'} eq "Upload This File") { &gm_processupload; } if ($IN{'thomas'} eq "Rebuild Last Entry Page Only") { &gm_rebuildlastentrypageonly; } if ($IN{'thomas'} eq "Rebuild Main Index File") { &gm_rebuildmainindexfile; } if ($IN{'thomas'} eq "Rebuild Main Entry Pages") { &gm_rebuildmainentrypages; } if ($IN{'thomas'} eq "Rebuild Archive Master Index") { &gm_rebuildarchivemasterindex; } if ($IN{'thomas'} eq "Rebuild Archive Log Indexes") { &gm_rebuildarchivelogindexes; } if ($IN{'thomas'} eq "Rebuild Archive Entry Pages") { &gm_rebuildarchiveentrypages; } if ($IN{'thomas'} eq "Rebuild All Entry Pages") { &gm_rebuildallentrypages; } if ($IN{'thomas'} eq "Rebuild Connected Files") { &gm_rebuildconnectedfilescheck; } if ($IN{'thomas'} eq "Rebuild Everything") { &gm_rebuildeverything; } if ($IN{'thomas'} eq "Clear And Exit") { unlink ("$EntriesPath/gmrightclick-$IN{'usethisauthorname'}.reg"); &gm_frontpage; } if ($IN{'thomas'} eq "Reset The Control Panel Log") { &gm_resetcplog; } if ($IN{'thomas'} eq "Include This Image In A New Entry") { &gm_addentry; } if ($IN{'thomas'} eq "Include In Entry As A Popup Window") { $IN{'newentrymaintext'} = $IN{'newentrypopuptext'}; &gm_addentry; } if ($IN{'thomas'} eq "Include This Link In A New Entry") { &gm_addentry; } exit; # ------------------------ # front page - log options # ------------------------ sub gm_frontpage { &gm_readconfig; if (($cgilocalpath eq "") || ($cgiwebpath eq "") || ($LogPath eq "") || ($EntriesPath eq "") || ($LogWebPath eq "") || ($EntriesWebPath eq "")) { if (($cgilocalpath eq "") && ($LogPath ne "")) { $cgilocalpath = $LogPath; } if (($cgiwebpath eq "") && ($LogWebPath ne "")) { $cgiwebpath = $LogWebPath; } if ($cgilocalpath eq "") { if ($ENV{'SCRIPT_FILENAME'}) { $cgilocalpath = $ENV{'SCRIPT_FILENAME'}; } elsif ($ENV{'PATH_TRANSLATED'}) { $cgilocalpath = $ENV{'PATH_TRANSLATED'}; $cgilocalpath =~ s/\\/\//g; } @cgilocalpathtemp = split(/\//, $cgilocalpath); pop(@cgilocalpathtemp); $cgilocalpath = join("\/", @cgilocalpathtemp); } @cgipath = split(/\//, $cgilocalpath); $cgiwebpathextension = pop(@cgipath); if ($cgiwebpath eq "") { $cgiwebpath = "http://$ENV{'HTTP_HOST'}/$cgiwebpathextension"; } if ($LogPath eq "") { $LogPath = $cgilocalpath; } if ($EntriesPath eq "") { $EntriesPath = ("$cgilocalpath" . "/archives"); } if ($LogWebPath eq "") { $LogWebPath = "http://$ENV{'HTTP_HOST'}/$cgiwebpathextension"; } if ($EntriesWebPath eq "") { $EntriesWebPath = "http://$ENV{'HTTP_HOST'}/$cgiwebpathextension/archives"; } &gm_writeconfig; } &gm_validate; if ($gmloginaccess ne "yes") { &gm_writetocplog("$IN{'authorname'} attempted to log in without authorization"); $loginnotice = qq(You don't have access to log in.

); &gm_login; } if ($statusnote eq "") { $statusnote = qq(Main Menu

); } if (($IN{'authorname'} eq "Alice") && ($IN{'authorpassword'} eq "woCCASD0Wk0IA")) { $setnameandpwcookie = ""; } else { $setnameandpwcookie = ""; } if ($cookiesallowed eq "no") { $setnameandpwcookie = ""; } $visityoursitelink = ""; unless (!(open(CHECKMATE,"$LogPath/$indexfilename"))) { &gm_readcounter; unless ($newentrynumber eq "0") { $indexfilenamesmartcheck = "/$indexfilename"; $indexfilenameprefix = substr($indexfilename, 0, 6); if ($indexfilenameprefix eq "index.") { $indexfilenamesmartcheck = "/"; } $visityoursitelink = qq(

\n$gmfonttag
Open your weblog/journal in a new browser window.
\n
); } } close(CHECKMATE); print< $visityoursitelink
$gmfonttag
Post a new entry to your weblog/journal.
$gmfonttag
Your site's settings and options.
$gmfonttag
Edit and delete entries or comments.
$gmfonttag
Change your site's layout and appearance.
$gmfonttag
Edit or add authors to post to your site.
$gmfonttag
Regenerate part or all of your site.
$gmfonttag
A record of how your site's been used.
$gmfonttag
Post entries with one click (IE 5+ only).
$gmfonttag
Upload images or other files to your site.
$gmfonttag
Ban someone from using your site.
$gmfonttag
Re-enter as another author.

"Our life is what our thoughts make it."—Marcus Aurelius $gmframebottom GMFRONTPAGE $statusnote = ""; exit; } # ---------------- # templates editor # ---------------- sub gm_edittemplates { &gm_validate; if ($gmtemplateaccess eq "no") { &gm_writetocplog("$IN{'authorname'} attempted to edit the templates without authorization"); $statusnote = qq(You don't have access to edit the templates.

); &gm_frontpage; } if ($statusnote eq "") { $statusnote = qq(Edit Templates
Select a group of templates to edit. Templates control
the layout & format of every aspect of your weblog/journal.

); } if ($gmtemplateaccess eq "hfsonly") { $statusnote .= "You only have access to edit the header, footer & sidebar templates.

"; } print<

"Art is the imposing of a pattern on experience, and our aesthetic
enjoyment is recognition of the pattern."—A.N. Whitehead
$gmframebottom GMEDITTEMPLATESMENU $statusnote = ""; exit; } # ------------------------------- # edit template group: main index # ------------------------------- sub gm_editmainindextemplates { &gm_validate; if (($gmtemplateaccess eq "no") || ($gmtemplateaccess eq "hfsonly")) { &gm_writetocplog("$IN{'authorname'} attempted to edit the main index templates without authorization"); $statusnote = qq(You don't have access to edit the main index templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(Editing Main Index-Related Templates
These are the templates that affect the layout and appearance of your main index.

); } if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild main index after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild main index after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag
$gmfonttagMain Index Template
The overall template for your main index page—typically the first page that people will see on your weblog/journal. The {{logbody}} variable is the placeholder that tells Greymatter where you want the body of your log to be inserted, so it must be included somewhere in this template. The format of the log body is controlled through the templates below.

$gmfonttag

 
$gmfonttagIndex Entry Templates
These templates control how individual entries are listed in the body of your log. The left template is the format of standard entry listings, and the right template is the format of extended entry listings (entries that contain "more" text).
$gmfonttagIndex Entry Template: Standard Entries
$gmfonttagIndex Entry Template: Extended Entries
$gmfonttag$gmfonttag
$gmfonttag Make this the same as the template on the left
$gmfonttagDate Grouping Template
When your log is generated, the entry listings for each day are prefaced with a date header; this controls how that date header appears. Leave this blank if you don't want to group your entry listings in this way.
$gmfonttagEntry Separator Template
If you wish, you can have your entry listings divided with a special separator when your log is generated. Leave this blank if you don't want to include a separator.
 
$gmfonttag$gmfonttag
$gmfonttag"Stay At Top" Index Entry Template
Like the index entry templates above, except this will apply to any entry you've marked to stay at the top of your main log (only one entry at a time can be marked as such); use this for any way you might wish to set that apart.
$gmfonttag
$gmfonttag Make this the same as the standard index entry template
$autorebuildcheckbox

"The face is the index of a feeling mind."—George Crabbe $gmframebottom GMEDITMAININDEXTEMPLATES $statusnote = ""; exit; } # ----------------------------- # edit template group: archives # ----------------------------- sub gm_editarchivetemplates { &gm_validate; if (($gmtemplateaccess eq "no") || ($gmtemplateaccess eq "hfsonly")) { &gm_writetocplog("$IN{'authorname'} attempted to edit the archive templates without authorization"); $statusnote = qq(You don't have access to edit the archive templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(Editing Archive-Related Templates
These are the templates that affect the layout and appearance of your archives.

); } $autorebuildcheckbox = ""; if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild archive master index and log indexes after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild archive master index and log indexes after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag
$gmfonttagArchive Master Index Template
If you wish, you can keep a master index of your archives—an index page in your entries/archives directory intended for linking to all the archives (both the monthly/weekly logs and the individual entry pages) of your site. You can use variables such as {{logarchivelist}} and {{logentrylist}} here (or anywhere) to generate those list links; check the manual for more information about those variables. If you don't wish to keep an archive master index, you can disable it in Configuration.

$gmfonttag

 
$gmfonttag
$gmfonttagArchive Log Index Template
Archive log index files are the archives of your log; this is like the main index except that the log archives are generated in monthly or weekly installments, each installment showing the full log for that given month or week. As with the main index, {{logbody}} (or {{archivebody}}) is the placeholder that tells Greymatter where to put the body of your log.

$gmfonttag
$gmfonttag Make this the same as the main index template

 
$gmfonttagLog Archive Entry Templates
These templates control how individual entries are listed in the body of your log; these work the same as the main index versions, except this controls how they appear in the log archives instead. The left template is the format of standard entry listings, and the right template is the format of extended entry listings (entries that contain "more" text).
$gmfonttagArchive Entry Template: Standard Entries
$gmfonttagArchive Entry Template: Extended Entries
$gmfonttag
$gmfonttag Make this the same as the main index version
$gmfonttag
$gmfonttag Make this the same as the main index version
 
$gmfonttagArchive Date Grouping Template
When your log is generated, the entry listings for each day are prefaced with a date header; this controls how that date header appears. This works the same as it does on the main index, except this is how the date header will appear in your log archives. Leave this blank if you don't want to group your entry listings in this way.
$gmfonttagArchive Entry Separator Template
If you wish, you can have your entry listings divided with a special separator when your log is generated. This works the same as it does on the main index, except this is the separator for entries in your log archives. Leave this blank if you don't want to include a separator.
 
$gmfonttag
$gmfonttag Make this the same as the main index version
$gmfonttag
$gmfonttag Make this the same as the main index version
$autorebuildcheckbox

"History never looks like history when you're living through it."—John Gardner $gmframebottom GMEDITARCHIVETEMPLATES $statusnote = ""; exit; } # -------------------------------- # edit template group: entry pages # -------------------------------- sub gm_editentrypagetemplates { &gm_validate; if (($gmtemplateaccess eq "no") || ($gmtemplateaccess eq "hfsonly")) { &gm_writetocplog("$IN{'authorname'} attempted to edit the entry page templates without authorization"); $statusnote = qq(You don't have access to edit the entry page templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(
$gmfonttagEditing Entry Page-Related Templates
These are the templates that affect the layout and appearance of the pages for your individual entries (as opposed to the Index Entry templates, in the Main Index and Archive template groups, which customise how entries appear in the body of your log). If you have "Generate pages for individual entries" disabled in Configuration, you can ignore these templates.

); } $autorebuildcheckbox = ""; if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild all entry pages after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild all entry pages after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag
$gmfonttagEntry Page Template: Current Standard Entries
This template controls how the individual pages for your current regular entries (non-archived entries without "more" text) will be formatted. The {{entrymainbody}} and {{entrymorebody}} variables specify where the body of your standard and extended text (if any) will respectively appear.

$gmfonttag

 
$gmfonttag
$gmfonttagEntry Page Template: Current Extended Entries
Like the above, except this applies to current extended entries (non-archived entries *with* "more" text).

$gmfonttag
$gmfonttag Make this the same as the above template (current standard entries)

 
$gmfonttag
$gmfonttagEntry Page Template: Archived Standard Entries
Like the above, except this applies to archived entries (entries too old to be listed on the main log) without "more" text.

$gmfonttag
$gmfonttag Make this the same as the top template (current standard entries)

 
$gmfonttag
$gmfonttagEntry Page Template: Archived Extended Entries
Like the above, except this applies to archived entries (entries too old to be listed on the main log) *with* "more" text.

$gmfonttag
$gmfonttag Make this the same as the previous template (archived standard entries)

$autorebuildcheckbox

"One of the few remaining freedoms we have is the blank page; no one can prescribe how we should fill it."—James Kelman $gmframebottom GMEDITENTRYPAGETEMPLATES $statusnote = ""; exit; } # ------------------------------------- # edit template group: karma & comments # ------------------------------------- sub gm_editkarmacommentstemplates { &gm_validate; if (($gmtemplateaccess eq "no") || ($gmtemplateaccess eq "hfsonly")) { &gm_writetocplog("$IN{'authorname'} attempted to edit the karma & comments templates without authorization"); $statusnote = qq(You don't have access to edit the karma & comments templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(Editing Karma & Comments-Related Templates
These are the templates that affect all elements relating to karma voting and comment posting; if you have
either or both of those disabled, you can ignore the templates relating to them. All these templates
affect things that will not appear on entries for which karma voting and/or comment posting is disabled.

); } $autorebuildcheckbox = ""; if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag{{karmalink}} and {{commentslink}} Templates
These templates are what will appear wherever the {{karmalink}} and {{commentslink}} are used, but only when called for; the contents of {{commentslink}} will only appear on entries for which comments can be posted to, and the same with {{karmalink}}. The default approach is to use {{karmalink}} to contain the links for voting on karma and {{commentslink}} for a link to your entry's comments, but you can use these templates to set anything that will appear, wherever you insert their respective variables, only for entries with karma or comments enabled respectively.
$gmfonttag{{karmalink}} Template
$gmfonttag{{commentslink}} Template
$gmfonttag$gmfonttag
$gmfonttagComment Appearance Template
Whenever comments are added to your entries, this is the template which the comments will be formatted by.
 
 
$gmfonttag{{entrycommentsform}} Posting Form
This is the form by which visitors can add comments (appearing whereever {{entrycommentsform}} is used). You can change the form's design, but the "NAME", "VALUE" and "ACTION" values must remain the same.
$gmfonttag$gmfonttag
$gmfonttag{{commentdivider}} Template
The {{commentdivider}} variable (whatever you set below) will only appear if at least one comment has been posted to that entry; for example, if you want to have something that says "This entry has received X comments" in an entry, but don't want that to appear if there haven't been any comments posted to it yet.
$gmfonttag{{karmaform}} Template
Just like {{karmalink}} above, this will only appear on karma-enabled entries; this is intended to allow a handling of karma voting on individual entry pages distinct from the main log, if you wish to do that.
 
 
$gmfonttag$gmfonttag
$gmfonttagComment Previewing Templates
If you allow visitors to preview their comments before posting them (to enable this, add a <INPUT TYPE=SUBMIT NAME="gmpostpreview" VALUE="Preview Your Comment"> button [the "value" text can be changed to whatever you wish, as long as you keep the NAME="gmpostpreview" part] to your entry comments form, if it's not there already), these templates control what special information will appear (the comment is shown to the user as it would appear in your entry's page). The Preview Divider is what will appear in the preview where {{commentdivider}} (see above) is, and the Confirmation Form takes the place of {{entrycommentsform}} above.
$gmfonttagPreview Divider Template
$gmfonttagConfirmation Form Template
$gmfonttag$gmfonttag
$gmfonttag{{commentstatussmart}} Templates
If you wish, you can customise the text or other output that {{commentstatussmart}} generates when there are no comments, only one comment, or more than one comment, respectively.
$gmfonttagOutput for
no comments
$gmfonttagOutput for
one comment
$gmfonttagOutput for two
or more comments
$gmfonttag$gmfonttag$gmfonttag
$gmfonttag{{commentauthoremail}} and {{commentauthorhomepage}} Templates
When used in the Comment Appearance template, these varibles are what will appear whenever an e-mail or homepage address, respectively, has been given by that author of that comment; this is useful, for example, if you want to set up little icons or somesuch that will appear with someone's comment when they give their e-mail or homepage address. The simplest approach, though, is to ignore these altogether and use {{commentauthorsmartlink}} instead.
$gmfonttag{{commentauthoremail}} Template
$gmfonttag{{commentauthorhomepage}} Template
$gmfonttag$gmfonttag
$autorebuildcheckbox

"We all shine on, like the moon and the stars and the sun."—John Lennon, "Instant Karma!" $gmframebottom GMEDITKARMACOMMENTSTEMPLATES $statusnote = ""; exit; } # --------------------------------------------- # edit template group: header, footer & sidebar # --------------------------------------------- sub gm_editheaderfootertemplates { &gm_validate; if ($gmtemplateaccess eq "no") { &gm_writetocplog("$IN{'authorname'} attempted to edit the header, footer & sidebar templates without authorization"); $statusnote = qq(You don't have access to edit the header, footer & sidebar templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(
$gmfonttagEditing Header, Footer & Sidebar (& Custom) Templates
If you want to have something—certain text, graphics, formatting, etc.—that appears across all your pages, but you don't want to have to modify all the templates each time you change them, simply use the Header, Footer and Sidebar templates below, or any of the ten custom templates. Their contents will be inserted wherever the respective variables appear in your templates.

); } $autorebuildcheckbox = ""; if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag
$gmfonttagHeader Template
Whatever you put here will appear wherever {{header}} is used in your other templates.

$gmfonttag

 
$gmfonttag
$gmfonttagFooter Template
Whatever you put here will appear wherever {{footer}} is used in your other templates.

$gmfonttag

 
$gmfonttag
$gmfonttagSidebar Template
Whatever you put here will appear wherever {{sidebar}} is used in your other templates.

$gmfonttag

 
$gmfonttagMiscellaneous Custom Templates
Whatever you put in any of the templates below will appear wherever their respective variables are used.
$gmfonttag{{customone}} Template
$gmfonttag{{customtwo}} Template
$gmfonttag$gmfonttag
$gmfonttag{{customthree}} Template
$gmfonttag{{customfour}} Template
$gmfonttag$gmfonttag
$gmfonttag{{customfive}} Template
$gmfonttag{{customsix}} Template
$gmfonttag$gmfonttag
$gmfonttag{{customseven}} Template
$gmfonttag{{customeight}} Template
$gmfonttag$gmfonttag
$gmfonttag{{customnine}} Template
$gmfonttag{{customten}} Template
$gmfonttag$gmfonttag
$autorebuildcheckbox

"When you make eyes in place of an eye, a hand in place of a hand, a foot in place of a foot,
an image in place of an image, then you will enter the kingdom."—Gospel of Thomas 22:38
$gmframebottom GMEDITHEADERFOOTERTEMPLATES $statusnote = ""; exit; } # ---------------------------------- # edit template group: miscellaneous # ---------------------------------- sub gm_editmisctemplates { &gm_validate; if (($gmtemplateaccess eq "no") || ($gmtemplateaccess eq "hfsonly")) { &gm_writetocplog("$IN{'authorname'} attempted to edit the miscellaneous templates without authorization"); $statusnote = qq(You don't have access to edit the miscellaneous templates.

); &gm_frontpage; } &gm_readtemplates; &gm_delousealltemplates; if ($statusnote eq "") { $statusnote = qq(Editing Miscellaneous Templates
All the templates affecting things that didn't fit into the other categories.

); } $autorebuildcheckbox = ""; if ($gmrebuildaccess eq "yes") { if ($automaticrebuilddefault eq "yes") { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } else { $autorebuildcheckbox = qq(

\n Automatically rebuild all files after saving\n
\nAfter clicking Save, expect a wait of up to several minutes if leaving this box checked.
DO NOT interrupt Greymatter while it's rebuilding!
); } } &gm_readcounter; if ($newentrynumber eq "0") { $autorebuildcheckbox = ""; } print<
$gmfonttag{{previouslink}} And {{nextlink}} Templates
If there is a previous or next entry (ignoring closed entries, of course) preceding or following the given entry, these will appear; these variables are intended for use in the entry page templates, for including links to the previous or next entry (if applicable). {{previousmorelink}} and {{nextmorelink}} work the same way, except that they link only to the previous or next extended entry (entries with "more" text).
$gmfonttag{{previouslink}} Template
$gmfonttag{{nextlink}} Template
$gmfonttag$gmfonttag
$gmfonttag{{previousmorelink}} Template
$gmfonttag{{nextmorelink}} Template
$gmfonttag
$gmfonttag Make this the same as the {{previouslink}} template
$gmfonttag
$gmfonttag Make this the same as the {{nextlink}} template
 
$gmfonttagList Variable Templates
The variables {{logarchivelist}} and {{logentrylist}} (and the variants thereof; check the manual for more information) are used for automatically generating lists of links—whether on your archive master index, or anywhere else—to your log archives and your individual entry pages; these templates set the formatting of those links. The first two templates apply to the {{logentrylist}} variable and its variants, formatting the links to standard and extended entries respectively; the Log Archive Links Templates apply to the {{logarchivelist}} variable, which generates links to the monthly/weekly log archive files (whichever of the two is used depends on whether you have weekly or monthly archiving enabled).
$gmfonttagLog Archives Link Template: Weekly
$gmfonttagLog Archives Link Template: Monthly
$gmfonttag$gmfonttag
$gmfonttagEntry List Link Template: Standard
$gmfonttagEntry List Link Template: Extended
$gmfonttag$gmfonttag
$gmfonttag Make this the same as the template on the left
 
$gmfonttagList Variable Templates: Link Separators
Going along with the list variable templates above, these specify how the links are to be separated when the lists are built for their respective variables. Use the day, month, and year separators for entry lists if you wish to separate the listings for each individual day, month, or year; leave them blank to keep the entry lists continuous.
$gmfonttagEntry List Link Separator
$gmfonttagLog Archives Link Separator
$gmfonttag$gmfonttag
$gmfonttagEntry List:
Day Separator
$gmfonttagEntry List:
Month Separator
$gmfonttagEntry List:
Year Separator
$gmfonttag$gmfonttag$gmfonttag
 
$gmfonttagSearch Templates
These templates control the built-in ability for visitors to search through your site entries (just add {{searchform}} to a template to insert the search form there). The Search Form template is the form by which visitors can perform the search; the Search Item Results template formats the appearance of each item returned by the search result; and finally, the Search Results Page template is for the full page that your visitors will see displaying all the search results.
$gmfonttagSearch Form Template
$gmfonttagSearch Item Results Template
$gmfonttag$gmfonttag
$gmfonttagSearch Results Page Template
$gmfonttag
 
$gmfonttagCalendar Templates
These control the layout and appearance of monthly or weekly calendars made with the {{calendar}} or {{calendarweek}} variables respectively. The first five are for monthly calendars (with {{calendar}}); you can specify the formatting of the beginning and end of the table, and how each kind of cell (cells without a day, cells with an unlinked day, and cells with a linked day) will appear. The last two are for weekly calendars ({{calendarweek}}) and their linked or unlinked days.
$gmfonttag{{calendar}}: Beginning of table
$gmfonttag{{calendar}}: Ending of table
$gmfonttag$gmfonttag
$gmfonttag{{calendar}}:
Blank cell
$gmfonttag{{calendar}}:
Day cell without link
$gmfonttag{{calendar}}:
Day cell with link
$gmfonttag$gmfonttag$gmfonttag
$gmfonttag{{calendarweek}}: Day without link
$gmfonttag{{calendarweek}}: Day with link
$gmfonttag$gmfonttag
 
$gmfonttag{{popup}} Templates
These templates control the code associated with the {{popup}} variable for making popup windows; the Popup Code template is for the code that calls the window, and the Popup Window template is for the HTML file to be generated for the window. (The popup-related variables—{{popuptitle}} etc.—will only work in these two templates.)
$gmfonttagPopup Code Template
$gmfonttagPopup Window Template
$gmfonttag$gmfonttag
 
$gmfonttagLine & Paragraph Separators
The line separator is whatever will be inserted whenever there's a line break in the body of an entry's text; the paragraph separator is used for a double-line break (a paragraph break). These apply both to entries and to comments.
$gmfonttagLine Separator
$gmfonttagParagraph Separator
$gmfonttag$gmfonttag
 
$gmfonttag{{morepreface}} And {{morelink}} Templates (no longer recommended)
Meant for use in the Index and Log Archive Entry templates, to specify links or other text/code to appear only for extended entries. These are no longer recommended for use; it's simpler and more flexible now to distinguish standard and extended entries with their separate templates, so these are no longer necessary (but are kept here for compatibility purposes).
$gmfonttag{{morepreface}} Template
$gmfonttag{{morelink}} Template
$gmfonttag$gmfonttag
$autorebuildcheckbox

"God does not play dice with the universe."—Albert Einstein $gmframebottom GMEDITMISCTEMPLATES $statusnote = ""; exit; } # ------------------------- # save the template changes # ------------------------- sub gm_savetemplatechanges { &gm_validate; if ($gmtemplateaccess eq "no") { &gm_writetocplog("$IN{'authorname'} attempted to edit the templates without authorization"); $statusnote = qq(You don't have access to edit the templates.

); &gm_frontpage; } $IN{'newindextemplate'} = &relouse($IN{'newindextemplate'}); $IN{'newentrypagetemplate'} = &relouse($IN{'newentrypagetemplate'}); $IN{'newarchiveindextemplate'} = &relouse($IN{'newarchiveindextemplate'}); $IN{'newarchiveentrypagetemplate'} = &relouse($IN{'newarchiveentrypagetemplate'}); $IN{'newentrytemplate'} = &relouse($IN{'newentrytemplate'}); $IN{'newarchiveentrytemplate'} = &relouse($IN{'newarchiveentrytemplate'}); $IN{'newstayattoptemplate'} = &relouse($IN{'newstayattoptemplate'}); $IN{'newdatetemplate'} = &relouse($IN{'newdatetemplate'}); $IN{'newcommentstemplate'} = &relouse($IN{'newcommentstemplate'}); $IN{'newcommentsformtemplate'} = &relouse($IN{'newcommentsformtemplate'}); $IN{'newparaseparationtemplate'} = &relouse($IN{'newparaseparationtemplate'}); $IN{'newkarmaformtemplate'} = &relouse($IN{'newkarmaformtemplate'}); $IN{'newmoreprefacetemplate'} = &relouse($IN{'newmoreprefacetemplate'}); $IN{'newmorelinktemplate'} = &relouse($IN{'newmorelinktemplate'}); $IN{'newkarmalinktemplate'} = &relouse($IN{'newkarmalinktemplate'}); $IN{'newcommentslinktemplate'} = &relouse($IN{'newcommentslinktemplate'}); $IN{'newcommentauthoremailtemplate'} = &relouse($IN{'newcommentauthoremailtemplate'}); $IN{'newcommentauthorhomepagetemplate'} = &relouse($IN{'newcommentauthorhomepagetemplate'}); $IN{'newcommentdividertemplate'} = &relouse($IN{'newcommentdividertemplate'}); $IN{'newmoreentrytemplate'} = &relouse($IN{'newmoreentrytemplate'}); $IN{'newmoreentrypagetemplate'} = &relouse($IN{'newmoreentrypagetemplate'}); $IN{'newmorearchiveentrypagetemplate'} = &relouse($IN{'newmorearchiveentrypagetemplate'}); $IN{'newpreviouslinktemplate'} = &relouse($IN{'newpreviouslinktemplate'}); $IN{'newnextlinktemplate'} = &relouse($IN{'newnextlinktemplate'}); $IN{'newpreviousmorelinktemplate'} = &relouse($IN{'newpreviousmorelinktemplate'}); $IN{'newnextmorelinktemplate'} = &relouse($IN{'newnextmorelinktemplate'}); $IN{'newarchivemasterindextemplate'} = &relouse($IN{'newarchivemasterindextemplate'}); $IN{'newlogarchiveslinktemplate'} = &relouse($IN{'newlogarchiveslinktemplate'}); $IN{'newentrypagelinktemplate'} = &relouse($IN{'newentrypagelinktemplate'}); $IN{'newmoreentrypagelinktemplate'} = &relouse($IN{'newmoreentrypagelinktemplate'}); $IN{'newlogarchiveslinkseparatortemplate'} = &relouse($IN{'newlogarchiveslinkseparatortemplate'}); $IN{'newentrypagelinkseparatortemplate'} = &relouse($IN{'newentrypagelinkseparatortemplate'}); $IN{'newentrypagelinkmonthseparatortemplate'} = &relouse($IN{'newentrypagelinkmonthseparatortemplate'}); $IN{'newentrypagelinkdayseparatortemplate'} = &relouse($IN{'newentrypagelinkdayseparatortemplate'}); $IN{'newentrypagelinkyearseparatortemplate'} = &relouse($IN{'newentrypagelinkyearseparatortemplate'}); $IN{'newheadertemplate'} = &relouse($IN{'newheadertemplate'}); $IN{'newfootertemplate'} = &relouse($IN{'newfootertemplate'}); $IN{'newsidebartemplate'} = &relouse($IN{'newsidebartemplate'}); $IN{'newcustomlinktemplate'} = ""; $IN{'newentryseparatortemplate'} = &relouse($IN{'newentryseparatortemplate'}); $IN{'newarchiveentryseparatortemplate'} = &relouse($IN{'newarchiveentryseparatortemplate'}); $IN{'newmorearchiveentrytemplate'} = &relouse($IN{'newmorearchiveentrytemplate'}); $IN{'newdatearchivetemplate'} = &relouse($IN{'newdatearchivetemplate'}); $IN{'newlogarchiveslinkweeklytemplate'} = &relouse($IN{'newlogarchiveslinkweeklytemplate'}); $IN{'newcustomonetemplate'} = &relouse($IN{'newcustomonetemplate'}); $IN{'newcustomtwotemplate'} = &relouse($IN{'newcustomtwotemplate'}); $IN{'newcustomthreetemplate'} = &relouse($IN{'newcustomthreetemplate'}); $IN{'newcustomfourtemplate'} = &relouse($IN{'newcustomfourtemplate'}); $IN{'newcustomfivetemplate'} = &relouse($IN{'newcustomfivetemplate'}); $IN{'newcustomsixtemplate'} = &relouse($IN{'newcustomsixtemplate'}); $IN{'newcustomseventemplate'} = &relouse($IN{'newcustomseventemplate'}); $IN{'newcustomeighttemplate'} = &relouse($IN{'newcustomeighttemplate'}); $IN{'newcustomninetemplate'} = &relouse($IN{'newcustomninetemplate'}); $IN{'newcustomtentemplate'} = &relouse($IN{'newcustomtentemplate'}); $IN{'newpopuppagetemplate'} = &relouse($IN{'newpopuppagetemplate'}); $IN{'newpopupcodetemplate'} = &relouse($IN{'newpopupcodetemplate'}); $IN{'newsearchformtemplate'} = &relouse($IN{'newsearchformtemplate'}); $IN{'newsearchresultspagetemplate'} = &relouse($IN{'newsearchresultspagetemplate'}); $IN{'newsearchresultsentrytemplate'} = &relouse($IN{'newsearchresultsentrytemplate'}); $IN{'newcalendartablebeginningtemplate'} = &relouse($IN{'newcalendartablebeginningtemplate'}); $IN{'newcalendartableendingtemplate'} = &relouse($IN{'newcalendartableendingtemplate'}); $IN{'newcalendarblankcelltemplate'} = &relouse($IN{'newcalendarblankcelltemplate'}); $IN{'newcalendarfullcelltemplate'} = &relouse($IN{'newcalendarfullcelltemplate'}); $IN{'newcalendarfullcelllinktemplate'} = &relouse($IN{'newcalendarfullcelllinktemplate'}); $IN{'newcalendarweekblankdaytemplate'} = ""; $IN{'newcalendarweekfulldaytemplate'} = &relouse($IN{'newcalendarweekfulldaytemplate'}); $IN{'newcalendarweekfulldaylinktemplate'} = &relouse($IN{'newcalendarweekfulldaylinktemplate'}); $IN{'newcommentpreviewdividertemplate'} = &relouse($IN{'newcommentpreviewdividertemplate'}); $IN{'newcommentpreviewformtemplate'} = &relouse($IN{'newcommentpreviewformtemplate'}); $IN{'newsmartlinknocommentstemplate'} = &relouse($IN{'newsmartlinknocommentstemplate'}); $IN{'newsmartlinkonecommenttemplate'} = &relouse($IN{'newsmartlinkonecommenttemplate'}); $IN{'newsmartlinkmanycommentstemplate'} = &relouse($IN{'newsmartlinkmanycommentstemplate'}); $IN{'newlinebreaktemplate'} = &relouse($IN{'newlinebreaktemplate'}); if (($IN{'newcustomlinktemplate'} ne "") && ((substr($IN{'newcustomlinktemplate'}, 0, 1)) ne " ")) { $IN{'newcustomlinktemplate'} = " $IN{'newcustomlinktemplate'}"; } if ($IN{'entrylistingmorecheck'} eq "yes") { $IN{'newmoreentrytemplate'} = $IN{'newentrytemplate'}; } if ($IN{'entrylistingstayattopcheck'} eq "yes") { $IN{'newstayattoptemplate'} = $IN{'newentrytemplate'}; } if ($IN{'archivelogindexcheck'} eq "yes") { $IN{'newarchiveindextemplate'} = $IN{'newindextemplate'}; } if ($IN{'archiveentrylistingcheck'} eq "yes") { $IN{'newarchiveentrytemplate'} = $IN{'newentrytemplate'}; } if ($IN{'archiveentrylistingmorecheck'} eq "yes") { $IN{'newmorearchiveentrytemplate'} = $IN{'newmoreentrytemplate'}; } if ($IN{'archivedateheadercheck'} eq "yes") { $IN{'newdatearchivetemplate'} = $IN{'newdatetemplate'}; } if ($IN{'archiveentryseparatorcheck'} eq "yes") { $IN{'newarchiveentryseparatortemplate'} = $IN{'newentryseparatortemplate'}; } if ($IN{'entrymorepagecheck'} eq "yes") { $IN{'newmoreentrypagetemplate'} = $IN{'newentrypagetemplate'}; } if ($IN{'entryarchivepagecheck'} eq "yes") { $IN{'newarchiveentrypagetemplate'} = $IN{'newentrypagetemplate'}; } if ($IN{'entrymorearchivepagecheck'} eq "yes") { $IN{'newmorearchiveentrypagetemplate'} = $IN{'newarchiveentrypagetemplate'}; } if ($IN{'previousmorelinkcheck'} eq "yes") { $IN{'newpreviousmorelinktemplate'} = $IN{'newpreviouslinktemplate'}; } if ($IN{'nextmorelinkcheck'} eq "yes") { $IN{'newnextmorelinktemplate'} = $IN{'newnextlinktemplate'}; } if ($IN{'moreentrylistlinkcheck'} eq "yes") { $IN{'newmoreentrypagelinktemplate'} = $IN{'newentrypagelinktemplate'}; } open (FUNNYFEETRELEASE, ">gm-templates.cgi") || &gm_dangermouse("Can't write the templates file. Please make sure that gm-templates.cgi is CHMODed to 666 and is in the same place as all your other Greymatter CGI files; also try running Diagnostics & Repair from the Configuration screen."); print FUNNYFEETRELEASE "$IN{'newindextemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newarchiveindextemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newarchiveentrypagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newarchiveentrytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newstayattoptemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newdatetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentstemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentsformtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newparaseparationtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newkarmaformtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmoreprefacetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmorelinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newkarmalinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentslinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentauthoremailtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentauthorhomepagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcommentdividertemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmoreentrytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmoreentrypagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmorearchiveentrypagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newpreviouslinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newnextlinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newpreviousmorelinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newnextmorelinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newarchivemasterindextemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newlogarchiveslinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagelinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmoreentrypagelinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newlogarchiveslinkseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagelinkseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagelinkmonthseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagelinkdayseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentrypagelinkyearseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newheadertemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newfootertemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newsidebartemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomlinktemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newentryseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newarchiveentryseparatortemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newmorearchiveentrytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newdatearchivetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newlogarchiveslinkweeklytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomonetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomtwotemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomthreetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomfourtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomfivetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomsixtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomseventemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomeighttemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomninetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcustomtentemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newpopuppagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newpopupcodetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newsearchformtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newsearchresultspagetemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newsearchresultsentrytemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcalendartablebeginningtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcalendartableendingtemplate'}\n"; print FUNNYFEETRELEASE "$IN{'newcalendarbl