UserComments Action

Last edited by JavaWoman:
Modified links pointing to docs server
Mon, 28 Jan 2008 00:14 UTC [diff]


See also:
AdminModules
This action is meant as a module for the UserAdmin tool.
To use it as a standalone action simply add: {{usercomments user="UserName"}} in the page body.
 



This action displays a list of pages commented by the current user or by any other registered user specified either via a user action parameter of via a user GET variable . If no user is specified and the current user is logged in it displays a list of comments by the current user.

Save the code below as actions/usercomments.php.

The action

Current version: 0.4

Changes:

To do:



actions/usercomments.php



<?php

/**
 * Display a list of recent comments posted by a user.
 *
 * This action can be used to display a list of comments posted by a specific user. It
 * accepts a user value both as an action parameter and as a GET parameter. The
 * specified user must be an existing user. If no user parameter is specified
 * or the specified user is invalid, an error message is printed. If no user parameter
 * is specified or the specified user is invalid, and the current user is logged in,
 * the action will display a list of comments recently posted by the current user.
 *
 * @package     Actions
 * @name        Usercomments
 *
 * @author      {@link http://web.archive.org/web/20040616194824/http://www.wakkawiki.com/CarloZottmann Carlo Zottmann} (original code)
 * @author      {@link http://wikka.jsnx.com/DarTar Dario Taraborelli} (modified action)
 * @version     0.4
 * @since       Wikka 1.1.X.X
 * @output      list of comments recently posted by the specified user
 * @input       string  $user  optional: a valid user name;
 *              default: current user, if user is logged in;
 *              the default can be overridden by providing a URL parameter 'user';
 * @todo
 *              - (Optionally) create a config option allowing admins to decide whether users can
 *              display a list of comments by other users;
 */


$author =''; #initializing variable

switch(true) {
    case (isset($_GET['user']) && $this->LoadUser($_GET['user'])): # a valid user is specified as an URL parameter
    $author = $_GET['user'];
    break;

    case (isset($user) && $this->LoadUser($user)): # a valid user parameter is used
    $author = $user;
    break;

    case ($this->GetUser()):
    $author = $this->GetUserName();
    break;
}


$page = $this->GetPageTag();

if ($author)
{
    $user_comments_count = 0;

    if ($_GET["alpha"] == 1)
    {
        echo $this->Format("== Pages commented by [[".$author."]] == --- --- ");
        print("This is a list of pages commented by ".$this->Link($author).", along with the time of the comment (<a href=\"".$this->Href("", "", "user=".$author."&date=1&action=comments")."\">order by date</a>).<br /><br />\n");
        if ($comments = $this->LoadAll("SELECT id, page_tag, time FROM ".$this->config["table_prefix"]."comments WHERE user =
'"
.mysql_real_escape_string($author)."' ORDER BY page_tag ASC, time DESC"))

        {
            foreach ($comments as $comment)
            {
                if ($last_tag != $comment["page_tag"]) {
                    $last_tag = $comment["page_tag"];
                    $firstChar = strtoupper($comment["page_tag"][0]);
                    if (!preg_match("/[A-Z,a-z]/", $firstChar)) {
                        $firstChar = "#";
                    }
       
                    if ($firstChar != $curChar) {
                        if ($curChar) print("<br />\n");
                        print("<strong>$firstChar</strong><br />\n");
                        $curChar = $firstChar;
                    }
   
                    // print entry
                            print("&nbsp;&nbsp;&nbsp;(".$comment["time"].") <a href=\"".$this->href("", $comment["page_tag"], "show_comments=1")."#".$comment["id"]."\">".$comment["page_tag"]."</a><br />\n");
   
                    $user_comments_count++;
                }
            }
           
            if ($user_comments_count == 0)
            {
                print("<em>User has not commented any pages yet.</em>");
            }
        }
        else
        {
            print("<em>No comments found.</em>");
        }
    }
    else
    {

                echo $this->Format("== Pages commented by [[".$author."]] == --- --- ");
                print("This is a list of pages commented by ".$this->Link($author).", ordered by the time of the comment (<a href=\"".$this->Href("", "", "user=".$author."&alpha=1&action=comments")."\">order alphabetically</a>).<br /><br />\n");

        if ($comments = $this->LoadAll("SELECT id, page_tag, time FROM ".$this->config["table_prefix"]."comments WHERE user =
'"
.mysql_real_escape_string($author)."' ORDER BY time ASC, page_tag ASC"))
        {
            foreach ($comments as $comment)
            {
                $commented_pages[$comment["page_tag"]] = $comment["time"];
            }

            $commented_pages = array_reverse($commented_pages);

            foreach ($commented_pages as $comment["page_tag"] => $comment["time"])
            {
                // day header
                list($day, $time) = explode(" ", $comment["time"]);
                if ($day != $curday)
                {
                    if ($curday) print("<br />\n");
                    print("<strong>$day:</strong><br />\n");
                    $curday = $day;
                }

                // print entry
                    print("&nbsp;&nbsp;&nbsp;(".$time.") <a href=\"".$this->href("", $comment["page_tag"], "show_comments=1")."#".$comment["id"]."\">".$comment["page_tag"]."</a><br />\n");
                               
                $user_comments_count++;
            }
           
            if ($user_comments_count == 0)
            {
                print("<em>User has not commented any pages yet.</em>");
            }
        }
        else
        {
            print("<em>No comments found.</em>");
        }
    }
}
else
{
    print("<em>No user specified</em>");
}

?>




CategoryDevelopmentActions CategoryDevelopmentAdmin
Comments
Comment by WazoO
2006-04-12 20:12:27
Database modified. Code changed as follows;
LoadAll statements changed to include a new field like;
if ($comments = $this->LoadAll("SELECT id, page_tag, time, postipaddress FROM ".$this->config (truncaated for post)

//print entry lines changed like;
print("   (".$time.")  (".$comment["postipaddress"].") <a href (truncated for post)

The sort-by-alpha code displays as expected, i.e. the only entries with data show the IP address, those with no data only show the () ...
However, the sort-by-time bit fills in all the displayed IP address fields with the same IP address . which again, in the test phase, only one record has data, the remainder entries are set to Default Null ....
I'm lost (obviously) as to what's going on and why the results are different.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki