Revision [3201]

This is an old revision of GmBowen made by GmBowen on 2004-12-14 22:37:45.

 

I'm a university prof who is modifying parts of wikka so that it can be used by high school kids to collaborate on school project work and writing. I chose wakka/wikka because it seemed to be the wiki with the most flexibility for doing the sorts of things I was interested in. I'm not a programmer myself, although I do understand lots about programming, and so I've hired a recent grad from my university to implement some features for me that I think my target audience for using the wiki will need. The wiki is only one of the central tools they'll be using, and has to coordinate with numerous other tools (such as a graph drawing and an on-line drawing tool).

One of our first modifications was completed by my programming guy (Mark Kasper) in June '04 and was a modification of the pageindex.php code that has now been modified and incorporated into wikka as part of the release [Mod041fPageIndexByLetter] .....it should make the wiki's more useable for high-use sites because it provides a letter index for pageindex.php. It can either be used as usual, {{pageindex}}, or using a parameter indicating which letter you would like to see a listing for (for example, {{pageindex start="a"}}...or whatever letter you wish to show a listing for). If you enter a letter that there is not yet a listing for, then it defaults to "all".

Graphic Oriented Mods

I have a modified file-upload utility (just for graphic images)......The "upload" script is a mod of one of the ones at wakka or wikka (can't remember which)....I've made it available at http://131.202.167.33/wiki/actions/uploadimage.phps .... to use it you will of course have to change phps to php. This script only allows 10 uploaded files with the users prefix in the upload directory (although you can change that easily), and checks the wikka_users database to see (a) how many files are allowed in total and (b) what number the user is at.

The changes in the wikka_users table are adding these two fields....
+-----------------------------------------------------------------------------------------------------------+
| wikka_users                                                                                               |
+-----------------------------------------------------------------------------------------------------------+
+-----------------+------------------+------+-----+-------------------------------------------------+-------+
| Field           | Type             | Null | Key | Default                                         | Extra |
+-----------------+------------------+------+-----+-------------------------------------------------+-------+
+ images_allowed  + smallint(4)      +      +     + 30                                              +       +
+ images_uploaded + int(6)           +      + PRI + 0                                               +       +
+-----------------+------------------+------+-----+-------------------------------------------------+-------+


The current max allowed image upload is "30"...set at the database level. When the images are uploaded to the directory the username is concatonated to the front of the filename. I have a modified version of OTF Gallery that allows you to preview and "approve" each image and will then copy the files to a directory that exists for each individual user and strip the user name from the front of the file (this is from a modification of a registration script extraneous to Wikka that makes a directory for each registrant)[Modified OTF] (note that this will require some fiddling as they were not really modified for release purposes....I've included comments about the things we've changed in the PHP scripts, but you should probably read the instructions for OTF gallery in general). Or, if you're not interested in doing that, I have a modified version of the "gallery" action available for wikka that you could change so it would just shows thumbnails of images of the logged in user and allows erasing images...currently it just goes to the users personal directory, but you could change that (my programming guy modded this so it generates thumbnails using GD....the original version of the gallery required you to generate the thumbnails yourself)[Code Available Here]. Hope this helps. If you're interested in the gallery software for wikka let me know....you'd be on your own for modifying it to only show files with the username prefix cuz my php skills aren't good enough to do those changes.

For a "user resources" page we created an action that would just list the graphical images in the directory (and let the user delete them if so desired).....needs code added so ONLY works for registered & logged in user (otherwise for unregistered users writes errors into the server logs)

<?php
$dst = '../../../approvalgallery/userdeletegallery/';
if(empty($owner)){ $username = $this->GetUserName();} else {$username = $owner;}
if(empty($owner)){ $username2 = $this->GetUserName();} else {$username2 = $owner;}
$username = strtolower($username);
$fl = substr($username,0,1);
$homelink = $this->config["base_url"].$this->MiniHref($method, $tag);

$imgstr = "graphicsgallery/".$fl."/".$username."/";
$tmbstr = "thumbnailgallery/".$fl."/".$username."/";

if(!empty($_REQUEST[action])){
            $file = $_REQUEST['file'];
            chdir($imgstr);
            unlink($file);
            chdir("../../../");
            chdir($tmbstr);
            unlink($file);
            chdir("../../../");
        }
///     if(!empty($_REQUEST[image])){
//          $file = $_REQUEST['file'];
//          echo "<div align=left><img src=".$imgstr.$file."></div>";
//      }

    $dir = opendir($imgstr);
echo "<b>$username2's Image Files: </b>";
    while ($file = readdir($dir)) {
        if ($file != '.' && $file != '..') {
                        $num++;
                 if ($this->HasAccess('write')) {
//              if ($this->IsAdmin()) {
                        $delete_link = "<a href=\"$homelink&action=delete&amp;file=$file&tmbnail=\" onmouseover=\"this.T_WIDTH=130;this.T_BGCOLOR='#FF3300';this.T_FONTCOLOR='#000000';this.T_FONTWEIGHT='bold';return escape('Delete this image file')\">x</a>";
//                      $delete_link = "<a href=\"".$this->href('files.xml',$this->GetPageTag(),'action=delete&amp;file='.urlencode($file))."\">x</a>";


                    } else {
                        $delete_link = "";
                }
// <a href='$homelink&image=show&file=$file' onmouseover=\"return escape('<img src='$imgstr'.'$file'>')\">{$file}</a>
                        print  "

                                        <tr>
                                          <td valign='top' align='center'>
                                                &nbsp;
                                                {$delete_link}
                                                 {$file}
                                                &nbsp;
                                          </td>
                                        </tr>

                                "
;
        }
    }
   - closedir($dir);

// below added by GMB
echo "<script language=\"JavaScript\" type=\"text/javascript\" src=\"./actions/wz_tooltip.js\"></script>";

        // print n/a if no files currently exist
        if (!$num)  print "<tr><td>&nbsp;</td><td colspan='3' align='center'><font color='gray' size='-1'><i>You have no image files yet!</i></font></td></tr>";
        else  print "<tr><td>&nbsp;</td></tr>";
?>


The action uses a javascript tool (in the actions directory on my system) that allows a "hover" window in bright red that shows that the "x" is to delete the files. The wz_tooltip.js allows "better" tooltips (in this case, more visible) & is available at http://www.walterzorn.com/tooltip/tooltip_e.htm as a free download.

"Erase History" Actions

When I'm developing pages I find I generate lots of "history" that I don't care to remain in the database. Or, as is sometimes the case, sometimes some of the actions I'm developing cause the "history" feature to crap out. Rather than just erasing the rows manually, I thought it might be easier to do it from a simple menu. Another way this is useful for me is that I might have users who write "inappropriate" information in the wiki (racist, sexist etc) and I'd like to be able to easily expunge the record for this (I know, I know, this is anti-wiki....but things are different when you're working at a publicly funded institution and providing a site for kids to use). One action automatically erases history every time the page loads (for the "flakey" actions I've developed that cause the history feature to blow up (the task manager we're working on, for instance)). The other code (see GmBowenAdminPageControlTool now) is to support an administrator being able to delete the history of a page by clicking on a button.

auto erasing of history.....has the potential to be a security risk. The admin should probably name the file something obscure, place it in the actions directory, and then enter the file name into the showpagecode.php and pagecode.php actions (so that the filename is not displayed when those actions are used).

<?
// code developed by GMBowen to allow automatically erasing the history of a given page
$thispage=$this->GetPageTag();
$sql = "DELETE FROM ".$this->config["table_prefix"]."pages WHERE tag='$thispage' AND latest='N'";
mysql_query($sql) or die("Unable to process query: " . mysql_error());
?>


ANOTHER approach is to have an Erase History feature included as part of the footer code (for Admins only)....(moved to GmBowenAdminPageControlTool and extended in functionality to include "page hiding" and page erasing)

Calendar Action

A useful little action is found at GmBowenCalendar....it's a calendar that you can embed in a wikipage....

Modified Mypages action --> menu

Much of what we do is designed to help students work collaboratively in teams. I modified the mypages action into one that students can use as a simple menu....which I've called mypagesmenu.php .... basically it just lists the pages you own horizontally (although you can designate not having a title AND specify a menu list for a specific user....for us the latter will allow a listing of pages owned by different members all on the same project by just listing the action multiple times with different owners). It's not anything that the DarTar's & Jason's and JavaWoman's of the world couldn't do....but nine months ago I couldn't have done it myself & so I'm posting it for the more "casual" wikka user that I used to be (and, the DT's etc are welcome to do any fixes that they see necessary {grin}). -- Mike

<?php /*dotmg modifications : contact m.randimbisoa@dotmg.net*/ ?>
<?php
//  modification by GMBowen of actions/mypages.php written by Carlo Zottmann for wakkawiki
// parameter title="no" or title="off"; can list pages for a specific person by using parameter owner="username"
$title = strtolower($title);
$username = $this->UserName();
if ($owner != '')
{
  $username=$owner;
}
if ($user = $this->GetUser())
{
    if ($title != 'off' && $title !='no')
    {
    print("<strong>Pages owned by $username:</strong>\n");
    }
    $my_pages_count = 0;

    if ($pages = $this->LoadAllPages())
    {
        foreach ($pages as $page)
        {
            //#dotmg [1 line modified]: added [0-9]+$ to regular expression
            if ($username == $page["owner"] && !preg_match("/^Comment[0-9]+$/", $page["tag"]))
            {
                print("[".$this->Link($page["tag"])."]"."\n");
               
                $my_pages_count++;
            }
        }
       
        if ($my_pages_count == 0)
        {
            print("<em>$username does not own any pages.</em>");
        }
    }
    else
    {
        print("<em>No pages found.</em>");
    }
}
else
{
    print("<em>You're not logged in, thus the list of your pages couldn't be retrieved.</em>");
}

?>

Language Translation

Hmmm....neat. I found that you can include two small actions that allow you to have your page translated using alta vista's SYSTRAN service. You can just include both in your actions directory. Kinda inelegant, but better than paying for your own translation service.

translateenglish.php
<hr>
<table>
<tr><strong><font size="-2">English Translation</font></strong></tr>
<tr><script language="JavaScript1.2" src="http://www.altavista.com/static/scripts/translate_engl.js"></script></tr>
<tr><font size="-2">Note that translation sometimes works better if you right-click the flag and open the translation in a new window.</font></tr>
</table>


translatefrench.php
<hr>
<table>
<tr><strong><font size="-2">Traduction Française</font></strong></tr>
<tr><script language="JavaScript1.2" src="http://www.altavista.com/static/scripts/translate_french.js"></script></tr>
<tr><font size="-2">Notez que la traduction semble fonctionner mieux si vous right-clic le drapeau et ouvrir la traduction dans une nouvelle fenêtre.</font></tr>
</table>

(I used the translation tool to translate into the French in the second one. If it's incorrect, please feel free to fix it)
Um, okay, weird. This works fine on my version of wikka 1.0.2, but not at all on 1.1.5.3 ....anybody have any sense as to why?? I'd appreciate any insights. On further investigation, even if I go to http://babelfish.altavista.com/ and enter http://131.202.167.33/helpwiki/wikka.php?wakka=HomePage it won't translate the page, whereas if I enter http://wikka.jsnx.com/HomePage (which are both the same version of Wikka) it will translate that page. Since my using the feature that allows Jason to have the "shortform" of the web address is not an option for me (as far as I know...although I'm happy to be corrected on this), is there any solution?? [I chatted with the people at SYSTRAN who provide the engine and they say there's no reason that they know of that it shouldn't work]

Okay, hey, it works using a different "engine" for translation (google). I've put the following code into my footer.php file (and associated images in the images directory in the wiki root) and everything works just peachy. (it goes after line 44 after </div> and before <div class="smallprint">)

<?
// Added by GMB to provide language translation
echo "<a href='"."http://translate.google.com/translate?u=".$this->GetConfigValue("base_url").$this->MiniHref($method, $tag)."&show_comments=1&langpair=en%7Cfr&hl=en&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools"."' title=\"Translate Page to French from English.\"><IMG SRC=\"./images/frflag.gif\" BORDER=0></a>";
echo "<a href='"."http://translate.google.com/translate?u=".$this->GetConfigValue("base_url").$this->MiniHref($method, $tag)."&show_comments=1&langpair=fr%7Cen&hl=en&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools"."' title=\"Translate Page to English from French.\"><IMG SRC=\"./images/gb.png\" BORDER=0></a>";
?>


(Thanks to FlashChatWikifor evidence this was possible)

Show Code


Sometimes I want to know how the page creator did something in wikka code (like, how does Jason make the HomePage here so that there's that wizard lined up parallel with the text)...but the page isn't "open" for editing so I can't (logic being, that if users wanted to know they could note that in the comments and the page author could add the action eh). So, I hacked together this little action (it's kinda at the starting phase) so that it was possible for me to drop it in at the end of a page and let the reader see how the coding was done (my site is for kids remember....so "by example" will be better for many of them than a "how to" sheet....see what I mean at http://131.202.167.33/wiki/wakka.php?wakka=ExampleHomePage ). Another version (farther down) is available as a link so that the page code is visible (it requires the showpagecode.php handler code to be in the handler directory).

place showpagecode.php in the actions directory
<?php
// if there is any code you want to be ignored by this action
$ignorecode = Array ('/{{simpleshowcode}}/i', '/{{showpagecode}}/i');
$changeto = ' ';
?>
<TABLE BORDER=1 WIDTH="90%">
   <TR>
          <TD>
             <P>The wiki code which generated this page...</P>
          </TD>
   </TR>
   <TR>
          <TD BGCOLOR="#FFFFCC">
             <P>
<?php
$thisbody = preg_replace($ignorecode, $changeto, $this->page["body"]);
print(nl2br(htmlspecialchars($thisbody, ENT_QUOTES))); ?>
</P>
          </TD>
   </TR>
</TABLE>


(thanks to Jason who showed me a much much simpler way of accessing the body code....I gotta learn more about the functions etc in wikka)

Mike, the idea is intriguing: I proposed something in this direction in this draft for IncludeRemote fetching online Wikka Documentation.
Basically, if a rawcontent method (identical to the current raw method, but with header and footer stripped) is available, you can get the source of the page by simply appending "/rawcontent" to the pagename (much as you append "/edit" to edit the page). -- DarTar

Ah, I see what your suggestion is now...and I can see for you guys how that would suit your purposes. From my perspective tho', that might need an ACLS feature then because there are some pages I'll code that I won't want them to see the code for....like, for instance, whatever I've called the action to automatically erase the history (see above).....I don't actually want them to know the name of that file because I don't want them being able to erase their own history....I've subsequently solved this (see below) by having the "action" call for that file removed from the code being displayed through a simple modification of Jason's ShowPageCodeHandler -- Mike

JsnX says: It's interesting to me above you say that "like, how does Jason make the HomePage here so that there's that wizard lined up parallel with the text". It's interesting because Hendrik Mans used to have a hotscripts.com voting dropdown on the Wakka homepage and I used to wonder how he did it. I never did find out how he did it....

So, I'm adding an handler to the standard Wikka distribution that does what you are looking for. See Mod042fShowPageCodeHandler :) -- JsnX (thanks Jason)

I've modified Jason's modification to ignore a couple of files...and to add a return link and a bit of a title (so it works more transparently with the action described below...).....now called showcode.php and placed in the handlers directory
<?php
if ($this->HasAccess("read") && $this->page) {
        // display raw page, slightly formatted for viewing
// if there is any code you want to be ignored by this action
$ignorecode = Array ('/{{nameoffiletoerasehistory}}/i', '/{{showpagecode}}/i');
$changeto = ' ';
$thisbody = preg_replace($ignorecode, $changeto, $this->page["body"]);
Echo "<strong>This is the wiki code that generated the original page....</strong></p>";
print(nl2br(htmlspecialchars($thisbody, ENT_QUOTES)));  
}
?>
<? $site_base = $this->GetConfigValue("base_url").$this->GetPageTag();?>
<P><small>[</small><A HREF="<? echo $site_base; ?>"><small><strong>Return To Original Page</strong></small></A><small>]</small></P>


And I wrote a small action (to go in the actions directory) that can be placed on a page to provide a link to call the code output (which I've called showpagecode.php)....
<? $site_base = $this->GetConfigValue("base_url").$this->GetPageTag();?>
<P><small>[</small><A HREF="<? echo $site_base."/showpagecode"; ?>"><small>ShowCode</small></A><small>]</small></P>

As per my remarks on WikkaDevelopment, I think a "search comments" feature needs to be returned to wikka. Until a formal re-working of this, I present the following solution.....
This code was used to replace the code in textsearch.php and provides a separate listing for the pages and the comments (in two different columns)...
<?php echo $this->FormOpen("", "", "GET") ?>
        <td>Search for:&nbsp;</td>
        <td><input name="phrase" size="35" value="<?php echo htmlspecialchars($_REQUEST["phrase"]) ?>" class="searchbox" /> <input type="submit" value="Search" class="btn" /></td>
<?php echo $this->FormClose();
?>
<table border="0" cellpadding="5" cellspacing="0" width="100%"><tr><td valign="top">
<?php
if ($phrase = $_REQUEST["phrase"])
{
    print("<br />");
    $results = $this->FullTextSearch($phrase);
    if ($results)
    {
        print("<strong>Search results for pages containing \"$phrase\":</strong><br /><br />\n");
        foreach ($results as $i => $page)
        {
            print(($i+1).". ".$this->Link($page["tag"])."<br />\n");
        }
        print("<BR>Not sure which page to choose?<BR>Try the <a href=\"".$this->href("", "TextSearchExpanded", "phrase=$phrase")."\">Expanded Text Search</a> which shows surrounding text.");
    }
    else
    {
        print("No pages contained the word(s) \"$phrase\". :-(");
    }
}

?>
</td><td valign="top"><img src="/icons/blank.png" alt=" " width="10" height="1"></td><td valign="top">
<?php
if ($phrase = $_REQUEST["phrase"])
{
    print("<br />");
    $results = $this->CommentTextSearch($phrase);
    if ($results)
    {
        print("<strong>Search results for comments containing \"$phrase\":</strong><br /><br />\n");
        foreach ($results as $i => $page_tag)
        {
$link = "<a href=".$this->GetConfigValue("base_url").$page_tag["page_tag"]."&show_comments=1#comments>".$page_tag["page_tag"]."</a>";
            print(($i+1).". ".$link."<br />\n");
        }
    }
    else
    {
        print("No comments contained the word(s) \"$phrase\". :-(");
    }
}

?>
</td></tr></table>

And the following function added to wakka.php (I added it right under the one for textsearch)[SEE NOTE BELOW]
    function CommentTextSearch($phrase)
    {
        $data = "";
        if ($this->CheckMySQLVersion(4,00,01))
        {  
            $data = $this->LoadAll("(select * from "
            .$this->config["table_prefix"]
            ."comments where page_tag like('%".mysql_escape_string($phrase)."%'))
                UNION (select * from "
.$this->config["table_prefix"]
                ."comments where match(page_tag, comment) against('".mysql_escape_string($phrase)."'))");
        }
        /* if no results perform a more general search */
        if (!$data)  {
                $data = $this->LoadAll("select * from "
                .$this->config["table_prefix"]
                ."comments where (page_tag like '%".mysql_escape_string($phrase)."%' or
                   comment like '%"
.mysql_escape_string($phrase)."%')
                   order by time DESC"
);
        }
       
        return($data);
    }

NOTE: On the server running MYSQL 3.23.56 this code works just fine. But on a more recent version of MYSQL (4.0.20) it crashes. To make it work there one must remove the "If" statement (and all code in it) that checks the MYSQL version. Doesn't make any sense to me since the same code is in the page text search code and work there, but at least it works searching comments if I take it out. Note that the code still needs work....if the search word appears in 3 comments, then the pagename is listed 3 times. I tried to figure out how to get a MYSQL filter ("distinct") take care of this, but had no luck.
Feel free to adapt and modify as you'd like.

Search for Pages Owned

Somebody, somewhere mentioned that they were interested in searching for pages owned by a particular user. I thought, why re-invent the whole wheel, and wrote some code that'll be part of the search page. It only shows results IF it's a user name that's entered (so, you'll see output for the presence in comments, in pages, and for page ownership with a single search).

The following is added at the BOTTOM of the textsearch.php file....
<?php
if (($phrase = $_REQUEST["phrase"]) && ($phrase = $this->LoadUser( $phrase )))
    {
$pageowner2 = $_REQUEST["phrase"];
$site_base = $this->GetConfigValue("base_url");
$count = 0;
$query = "SELECT tag,owner,latest FROM ".$this->config['table_prefix']."pages WHERE latest = 'Y' ORDER BY tag asc";
$result = mysql_query($query);
           echo "</p><strong>".$pageowner2." owns these pages.....</strong>";
$pageowner2 = strtolower($pageowner2);
            echo "<BR><TABLE width='200' border='0'>";
while($row=mysql_fetch_array($result)) {
        $pageowner = strtolower($row['owner']);
        if ($pageowner == $pageowner2){
        $count = ($count + 1);
        $urltag = $site_base.$row['tag'];
        echo "<TR BGCOLOR='#DDDDDD'><TD valign='top' ALIGN='center'>&nbsp;".$count."&nbsp;</TD>";
        echo "<TD ALIGN='left'>&nbsp;<A HREF=\"".$urltag."\">".$row['tag']."</a>&nbsp;</TD>";
        echo "</TR>";
        }
    }
echo "</table>";
            if ($count < 1)
            {
            echo "(oops, no pages yet)";
            }
}
?>


Simple Column Codes

You can make columns with three simple actions (I originally got these at wakkawiki). You place {{colstart}} at the start of the text you want in a column, {{colmiddle}} in the middle where you want the break (or you can have more than one of these), and {{colend}} at the end of the text. When you save, voila, 2 (or more) columns.

save as colstart.php in actions directory
<table border="0" cellpadding="5" cellspacing="10" width="100%"><tr><td valign="top">

replace cellspacing="0" by cellspacing="10" ...

save as colmid.php in actions directory
</td><td valign="top">

...and remove <td valign="top"><img src="/icons/blank.png" alt=" " width="10" height="1"></td>here - same effect, no silly blank image needed! (whoops....I'd taken that out elsewhere, forgot to here when I copied over) (Of course layout tables should be avoided, but if you must, do it cleanly!) --JavaWoman
thanks for the suggestions. Thought the code might help with the FormattingRules page. --GmBowen

save as colend.php in actions directory
</td></tr></table>

Database Status Action

(see here for example.) This action is modified from one by Charles Népote at wikini which is part of an administration interface. Simply, it shows you each table, the # of entries, and the total size of the table. Probably inessential, but interesting to monitor what's going on.
<?php
// dbstatus.php
// originally developed by Charles Népote (charles@nepote.org) for wikini
// Version 0.1 du 10/09/2004
// License GPL.
// slightly modified by GMBowen for wikka wiki. (if you want the action usable by only admin,
// remove the double slashes on line 17 & 46) Use: {{dbstatus [details="yes"]}}

/*
Si vous souhaitez avoir un tableau joliment encadré il faut ajouter
les styles suivant à wakka.css

.simple_table { border-collapse: collapse; }
.simple_table th, td { border: 1px solid #666; padding: 0.5em; }
*/

//if ($this->IsAdmin()) {

$status = $this->LoadAll('SHOW TABLE STATUS LIKE \''.$this->config["table_prefix"].'%\'');

echo    "<strong>Status of Wiki Database....</strong><br><small>(if you want to see <strong>all</strong> the details, use {{dbstatus details=\"yes\"}})</small>\n",
    "<table class=\"simple_table\">\n",
    "<tr>\n",
    "<th>Name</th>\n",
    "<th># Records</th>\n",
    "<th>Size</th>\n",
    "</tr>\n";

foreach ($status as $table)
{
    echo
    "<tr>\n",
    "<td>", $table['Name'], "</td>\n",
    "<td>", $table['Rows'], "</td>\n",
    "<td>", round($table['Data_length']/1024, 2), " Ko</td>\n",
    "</tr>\n";
}

echo    "</table>\n";

// Details
if ($details=="yes"){
echo "<pre>";
print_r ($status);
echo "</pre>";}
//}
?>

Other Mods in development

Many current mods in development...a "chat" that as an embedded flash chat (vchat modded from flatfile to database)....altho' it's difficult to pass to someone else cuz the fla file needs to be edited for each website (we've not been able to solve the absolute/relative path statement issue). Another action in development is the interactive table action which is a "big" one for our interests...it is like a *very* simple spreadsheet tool -- an interactive table actually -- that will do sum, count, frequency & average on the column entries....but we're currently having a problem with the foreach() statement which is why we've not released it yet). As we complete various tools I'll post them here when completed. Another thing we're working on is a wiki-based internal messaging system (both tikiwiki & the wakka derived comawiki have IMS's in place now)....but that'll be awhile before it shows up as I'm trying to do it myself from more or less scratch (it'll allow kids to send messages to each other w/o using email.....a security issue eh?) to help learn programming better. As you've probably noticed, I'm trying to develop tools that are portal-like but embedded in the wiki so it can expand beyond its traditional use. Another thing I'm playing with is graphing software.....see (here and here) and trying to get the latter (a) working in wikka (b) able to save the graphic to the hard drive (c) save the form, etc to the hard drive so one can re-edit one's graphs.....no luck so far, even with (a) (sigh). We've "mostly" finished a "pagewatches" action that allows you to keep a list of pages that you're looking to see if changes have been made on. The code for the action and the table info for it will be posted soonish...... And what's my dream with regarding the wiki?? A rich text editor choice with wysiwyg (in addition to wikiedit)...it'll make it more user friendly for kids, but methinks that must be a hard thing to accomplish (since nobody has progressed with the idea much). -- Mike.....almost ready for release....BANNERMAKER.....see here for an example of it at work....I'll tweak it a bit more, play with fonts some (to see how they work & where they need to be) and then release the code to wikka. Mike, make sure you specify that GD is required for this - not every PHP installation has it! --JavaWoman

Other Recent Code Releases/Submissions


[Show Code]

CategoryUsers
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki