Welcome to Geeklog, Anonymous Tuesday, December 24 2024 @ 07:55 am EST

Geeklog Forums

Plugin: gl_showroom

Page navigation


Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Original Thread Name: Membership Directory? Is their one? If not would anyone want one?


Samstone, what are you looking for, a member directory type setup or for a company intranet? The reason I ask is that its been my experience that in a corporate enviroment, with a Intranet Address Book or Directory normally you want to only allow HR, a Manager, or designated person to update/add/administrate the information where as users can only view the data?

If you looking for a membership directory i.e. something that will display all members of the site, and thier info (if they opt for it to be public) I can make a few modifications, well alot really but easy ones (and fun to me hehe, yes I'm a sick coding freak lol) and have it pull directly from GL infact this may be something that might become part of the GL Core? Currently you can view a members profile if you click their name from a post, but I have not seen any view all members and scroll through to find or search for a member plugins. Is there a pre-existing one? If not I'll spit one out in a few hours? Is anyone interested in something like this?

If I were to make one it would tie into the existings GL tables and would replicate many of the features there plus add optional contact fields, search the user tables by name, location, title (add a list of designators incorporating the Site Titles and a volunteer list where the user could list themselves and being avalible as a programmer etc..), and other feilds as they are suggested.
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
awake
Great plan! I would love it if I could add about 10 extra fields to the membership info and a way to display this information. You see, my members are companies, and this way I could make a list of the companies selected by ZIP code, products or whatsoever, and display their adress, openinghours etc etc.
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Ok let me think on how to approach this, my intial thought was to continue on the path I have been taking and keep its isolated from GL content wise. Would you prefer this method? Advantages are that it could be moved out of GL if you had reason to do so in the future, the only changes needed would be to change the security checks.

The Advantage to full integration with GL is that you only have enter data once. However this will require altering some of the core code, ie adding a include to the Preferances screen to cuase the new tables to update with new data when a new member added to the site, this could be turned off via a config file entry if you wished to add them manually.

Third option which I thought of as I type this, is probably the best to to go with, we can go with both options, it would cause some data replication between tables, however unless your talking about 1000+ users its not much data and even then it might add 1-4k per use to the db size.

Also this will leverage the existing Intraab plugin as many of the fields are already present and extra feilds are already provided. I'll have to add a new table gl_intraab_products with a primary_keys based on the 'uid' and 'productid' field. Will also add a gl_intraab_cinfo primary_keys 'uid' and 'cloc' which will allow for multiple store locations and differant hours etc.. at each.

Will take me a little while to punch this out, the intial Intraab plugin was designed for the company I work for (and yes they knew I'd post it as Open-source so no Copyright issues) ..back the point I have more work to do to our intranet so this will not have top priority. that and my wife would like to see me away from the computer now and then hehe.
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
My portal will have about 200 members/companies. But I also want to use a mailinglist with possibly thousands of subscribers, so I think I will have to start looking for a separate mailinglist script, wich should not be that hard.
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Plenty of those out there, Geeklog.net (here hehe) has several maling lists I haven't looked at what they are using but you might take a look.
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Ok what are the Field requests?
I may leave this as for example: cmisc_1, cmisc_2, cmisc_3, etc... so that they are not static fields and can be altered as needed. Using the language files facilitates this quite nicely. Though I add a few fields purely as discription fields as we really don't want every field to have a length of 500 (most would say my setting everything to 50 is a bad way to do it to start with.


The basic integration will be very light so as to provide for deintegration if you so desired.

Here is a list of the scripts that I will be setting up
1. Replication
a. Anytime a change is made in the Account Information Screen the Intrrab tables will be updated.
b. Admin Only- Import All from GL Users

Replication will not update the firstname lastname fields, unless someone can submit a query that will split te full name field from gl for direct importation. I know it can be done but is not high prority). The Exception to the above will be a Admin import will place the Full name into the firstname field.

2. Deletion Scripts, there will be two maybe more. None automatic. Though you could always add your own include to call one when a account is deleted.
a. Admin Only- Purge all records with no association in gl_users (primary key uid)
b. Purge selected Record(s)

Once the accounts are imported any changes to a field that has a mirror in the main gl_users tables will replicate back to gl_users when a change its made.
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
Ok what are the Field requests?
I may leave this as for example: cmisc_1, cmisc_2, cmisc_3, etc... so that they are not static fields and can be altered as needed. Using the language files facilitates this quite nicely.

Looks fine to me. I would like to present my new customers a form to fill in the data. Guess I could use PHP Form generator for this.
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

destr0yr

Forum User
Full Member
Registered: 07/06/02
Posts: 324
Quote by mthomas:but I have not seen any view all members and scroll through to find or search for a member plugins.

Text Formatted Code

<?php

/* Reminder: always indent with 4 spaces (no tabs). */
// +---------------------------------------------------------------------------+
// | Geeklog 1.3                                                               |
// +---------------------------------------------------------------------------+
// | userlist.php  v2                                                            |
// | Lists the registered users of a Geeklog site in alphabetical oder and<br>
// |    include a simple search function                             |
// |                                                                           |
// +---------------------------------------------------------------------------+
// | Copyright (C) 2002 by the following authors:                              |
// |                                                                           |
// | Author: Dirk Haun <dirk@haun-online.de>                                   |
// |         based on code taken from Geeklog 1.3.x  
// |             changed by Yulia Parkanska
// |                                                                                                                       |
// +---------------------------------------------------------------------------+
// |                                                                           |
// | This program is free software; you can redistribute it and/or             |
// | modify it under the terms of the GNU General Public License               |
// | as published by the Free Software Foundation; either version 2            |
// | of the License, or (at your option) any later version.                    |
// |                                                                           |
// | This program is distributed in the hope that it will be useful,           |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
// | GNU General Public License for more details.                              |
// |                                                                           |
// | You should have received a copy of the GNU General Public License         |
// | along with this program; if not, write to the Free Software Foundation,   |
// | Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           |
// |                                                                           |
// +---------------------------------------------------------------------------+
//
// You can change the number of users displayed per page by adjusting the
// value $limit = 50; below accordingly ...

require_once ("lib-common.php");
function listusers($offset,$curpage, $query = '', $query_limit = 75)
{  
    global $_TABLES, $_CONF, $LANG01, $LANG04, $LANG28;

    $limit = 50; // this is the number of users listed per page
       
    $retval = COM_startBlock($LANG01[17]);
        $retval .= '<p align="center">You can do simple searches by entering parts of a username, email address or fullname(e.g. *son* or *.edu) in the form below.</p>'. LB;
        $retval .= '<table border="0" cellspacing="1" cellpadding="1" width="100%" align="center" class="globalSolidOutline">' . LB;
        $retval .= '<tr><td colspan="5" align="center" class="globalCellText">
       
    <form action="'.$_CONF['site_url'].'/userlist.php" method="post">'
    .$LANG28[26]. ': <input class="searchGadget" type="text" size="20" name="q" value="'.$query.'">
      
    <input class="context" type="submit" value="    Search    ">
    </form></td></tr>'. LB;
                                                       
    $retval .= '<tr><td class="globalCellTitle"><b>' . $LANG04[2] . '</b></td><td class="globalCellTitle"><b>' . $LANG04[3] . '</b></td><td class="globalCellTitle"><b>' . $LANG04[81] .'</b></td><td class="globalCellTitle"><b>' . $LANG28[35] .'</b></td></tr>' . LB;

  //  $num_pages = ceil(DB_getItem($_TABLES['users'],'count(*)','uid > 1') / $limit);
   // $offset = ($curpage - 1) * $limit;
    if (empty($query_limit)) {
        $limit = 75;
    } else {
        $limit = $query_limit;
    }
       
    if (!empty($query)) {
        $query = str_replace('*','%',$query);
        $num_pages = ceil(DB_getItem($_TABLES['users'],'count(*)',"uid > 1 AND username LIKE '$query'") / $limit);
        if ($num_pages < $curpage) {
            $curpage = 1;
        }
    } else {
        $num_pages = ceil(DB_getItem($_TABLES['users'],'count(*)','uid > 1') / $limit);
    }

    $offset = ($curpage - 1) * $limit;
   // $sql = "SELECT uid,username,fullname,email,photo FROM {$_TABLES['users']} WHERE uid > 1 order by username LIMIT $offset,$limit";
    if (!empty($query)) {
        $sql = "SELECT {$_TABLES['users']}.uid,username,fullname,email,photo,lastlogin FROM {$_TABLES['users']},{$_TABLES['userinfo']} WHERE {$_TABLES['users']}.uid > 1 AND {$_TABLES['users']}.uid={$_TABLES['userinfo']}.uid AND (username LIKE '$query' OR email LIKE '$query' OR fullname LIKE '$query' OR {$_TABLES['userinfo']}.pgpkey LIKE '$query' ) order by username LIMIT $offset,$limit";
    } else {
        $sql = "SELECT uid,username,fullname,email,photo FROM {$_TABLES['users']} WHERE uid > 1 order by username LIMIT $offset,$limit";
    }
               
        $result = DB_query($sql);
    $nrows = DB_numRows($result);

    for ($i = 0; $i < $nrows; $i++) {
        $A = DB_fetchArray($result);
        $retval .= '<tr><td class="globalCellText" style="line-height: 1.5em"><a href="' . $_CONF['site_url']
                . '/users.php?mode=profile&uid=' . $A['uid'] . '">'
                . $A['username'] . '</a>';
        if (!empty($A['photo']))
                //AND $_CONF['allow_user_photo'] == 1)
               
        {$retval .= ' <a href="' . $_CONF['site_url'] . '/users.php?mode=profile&uid=' . $A['uid'] . '"><img src="' . $_CONF['layout_url'] . '/images/smallcamera.gif" border="0" alt="" /></a>';
        }
        $curtime = COM_getUserDateTimeFormat($A["lastlogin"]);
        $A['lastlogin'] = $curtime[0];
        $retval .= '</td><td class="globalCellText">' . $A['fullname']
                . '</td><td class="globalCellText"><a href="' . $_CONF['site_url']
                . '/profiles.php?uid=' . $A['uid']
                . '">' . $LANG04[81] .'</a></td><td class="globalCellText" align="right">' . $A['lastlogin']
                . '</td></tr>' . LB;
    }

    $retval .= '</table>' . LB;
 if (!empty($query)) {
        $query = str_replace('%','*',$query);
        $base_url = $_CONF['site_url'] . '/userlist.php?q=' . urlencode($query) . '&query_limit=' . $query_limit;
    } else {
        $base_url = $_CONF['site_url'] . '/userlist.php?query_limit=' . $query_limit;
    }
    if ($num_pages > 1) {
        $retval .= '<p>' . COM_printPageNavigation ($base_url, $curpage, $num_pages) . '</p>';
    }

    $retval .= COM_endBlock();

    return $retval;
}

// MAIN

$display = COM_siteHeader ('menu');

if (empty ($_USER['username'])) { // prevent anon users from viewing the list

  // The following will only work in Geeklog 1.3.6rc1 and up
    $display .= COM_startBlock($LANG_LOGIN[1]);
    $login = new Template($_CONF['path_layout'] . 'submit');
    $login->set_file (array ('login'=>'submitloginrequired.thtml'));
    $login->set_var ('login_message', $LANG_LOGIN[2]);
    $login->set_var ('site_url', $_CONF['site_url']);
    $login->set_var ('lang_login', $LANG_LOGIN[3]);
    $login->set_var ('lang_newuser', $LANG_LOGIN[4]);
    $login->parse ('output', 'login');
    $display .= $login->finish ($login->get_var('output'));
    $display .= COM_endBlock();

if (empty($offset)) {
        $offset = 0;
    }
   
} else {
if (empty($offset)) {
        $offset = 0;
    }
       
    if (empty($page)) {
        $page = 1;
    }
      $display .= listusers($offset,$page,$q,$query_limit);
}

$display .= COM_siteFooter();

echo $display;

?>

 

-- destr0yr
"I love deadlines. I like the whooshing sound they make as they fly by." -- Douglas Adams
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Beewee, so what your looking for in essance is a standalone set of screens that has user rights based on the gl_users and/or gl_groups for administration rights? UserX from gl_users has rights to X company. UserX can set compnay info (address, phone, hours etc..) to be viewed by a site visitor. UserX can also input product information which when a visitor clicks on X Company they get first store info followed by a list of products with basic info perhaps a picture? Sounds like a Online store hehe. I can put togeather the basic frame work for that as I listed above. I'm working on it a little at a time.

Destr0yr thanks for the code link.
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
Man, you're fantastic, that's what I actually need but did not dare to mention...

I want to use that extra userfields to make a kind of dealer-locator (select by brand, product or state/zipcode) and company-profiles. Guess I would need 2 pictures in such a screen: for the logo/vignette and a picture of the company-building.


Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
hehe remember anything programmed as open source is useabel by others others make stuff I need, I make stuff others need. Some use it for personal sites others for business. What goes around comes around. Though I'm sure very few ever reject an offer to be paid :-). I have use for what I'm writing too, though I don't get directly paid for it by my company, hehe it falls under the banner of "Thats what we pay you for anyway"
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
Don't worry, I understand perfectly what you mean, and was expecting it already. If I can use your plug-in for a commercial site I'll donate for it of course, and would be offended if you rejected a donation.

By the way, I've asked a programmer for a quotation for developing a kind of online-catalogue GL plug-in for the same commercial site, members can show/sell their second hand cars/motorhomes or real estate etc.

When it's not too expensive and the site with that catalogue plug-in is ready, tested and running (and that plug-in of course) we will publish it as open source. Planning: autumn 2004.

Or do you think dat you could make such a plug-in as well?

Hope that the moderator doesn't have any problem about our commercial conversation...perhaps you better send me an e-mail if you're interested.
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
I think as long as its opensource in the end its never an issue :-)

Would it be setup to actually accept payment via the net or handled through an external method.

I'll work on what I mentioned earlier first and give some though to how it could be tweaked as a full blown online store plugin. It wouldn't be too hard but would require a bit of research.
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
It's not an online store, just a showroom. There's no actually vending online.

Let me explain: we want to make a portal about camping and outdoor. In this branche are mostly 2 kinds of companies, (who both also have a company profile):

a) Companies who promote their products to consumers but sell their product by retailers. They must have the possibility to show their new products in a small catalogue. Also: a dealerlist/dealerlocator.

b) Retailers: they sell new and used products. For the new products I will link to the catalogue of company a) as above. For the second hand products I want to use the online catalogue as well.

The companies a) and b) are both in the same adressbook but in different categories, and are 'linked' by their brand(s) in a dealerlist/locator.

As a dealerlocator I thought I would make:

- a link/query near the page from company a) to find companies b) who sell the brand from company a).

- a separate dealerlist/locator-block/link where people can search by brand and/or state.

So online payment is no issue, but every advertised product must have a feedback button where visitors can send their name/adress etc, directly to the member or a link to find the nearest dealer.

There must be a short description of the advertised item in the subject-line of this e-mail.

A shown product should have about 3 pictures (1 large, 2 smaller) and some fields for brand, type, dimensions, price, description, some vendor info (from the company profile) etc.. The used products will have the earlier mentioned feedback button and a link to a company a) from the corresponding brand. New products and the corresponding company a) will have a button to a dealerlist/locator.

The advertised items should also be listed as a right box near the company profile, like the GL block What's New. And a similar block on the homepage would be perfect.

Userrights etc. are all based on the Geeklog userdatabase, the members/companies must maintain their own company profile and catalogue and can also submit newsarticles and events.
I don't mind copying/pasting some userinfo from the userdatabase to another database, but that would make it impossible for users to change their password, or they would have to change it in 2 or 3 separate databases, or have separate passwords...

Hope it's a bit clear this way, and my apologies for my poor english and my crazy wishes. I hope it's not becoming too complicated.
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
It's not an online store, just a showroom. There's no actually vending online.

That makes life simplier


A shown product should have about 3 pictures (1 large, 2 smaller) and some fields for brand, type, dimensions, price, description, some vendor info (from the company profile) etc.. The used products will have the earlier mentioned feedback button and a link to a company a) from the corresponding brand. New products and the corresponding company a) will have a button to a dealerlist/locator.

Again simple, Basicly each product page would generate a name based on companyid productid and picture number ie xxxxyyyygg.gif for example. Or we could use the filmgmt pulgin as an example and make folders, but I don't think its and issue with pictures.

Userrights etc. are all based on the Geeklog userdatabase, the members/companies must maintain their own company profile and catalogue and can also submit newsarticles and events.
I don't mind copying/pasting some userinfo from the userdatabase to another database, but that would make it impossible for users to change their password, or they would have to change it in 2 or 3 separate databases, or have separate passwords...


Thats what I thought you were looking for.


Proposed DB structure:

Table_1: gl_showroom
cname
clogo (pict file name)
cslogan
cid (primary key) Company ID

Table_2: gl_showroom_sec (Security linking table)
cid (1st Primary Field) Company ID
uid (2nd Primary Field) User ID
The above will allow a singe uid from gl_users to access multiple cid (companys) making both Primary Keys allows multiple users to access a given company or a single user to access multiple companies

Table_3: gl_showroom_caddr
cid Company ID
lid Location ID (One Cid link to Multiple Addresses, hours, phone etc..)
addr_1
addr_2
addr_3
addr_4
addr_5
phone_1
phone_2
fax_1
fax_2
email_cus (customer service)
email_sales (sales)

Table_4: gl_showroom_cprod
cid (Primary Key) Company ID
pid (Primary Key) Product ID
lid (Primary Key) Location ID
pname
pdescription
pdescription2
pdescription3
pimage_1
pimage_2
pimage_3
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
freakingout
No, you make life simplier!

I'm no MySQL expert, but have some experience with Filemaker Pro so I think I understand your database structure.

Table 1: OK

Table 2: OK, but I that does not mean that companies can change eachothers information, right?

Table 3: please add addr_6, url_1 and url_2 (url's are also in the userprofile, but this way you can separate the company info from the user info. Some companies have several url's.

Table 4: please add pdescription4, pdescription5 and pdescription6, just to be sure for the future.


Man, such a plug-in would be awesome for the GL community!

Greetz, Beewee
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Table 2: OK, but I that does not mean that companies can change eachothers information, right?

No, it means that if you give yourself for example the rights to do so you can administer all, some or none.
Think of it in terms of NAT protocals for networking
One External IP Address can represent many Internal IP Addresses, or One External can represent one Internal. It will allow flexility of administration, so that if a company has two devisions and both are posting products and their are two differant persons making changes they don't have to share a username/password.

Table 3: please add addr_6, url_1 and url_2 (url's are also in the userprofile, but this way you can separate the company info from the user info. Some companies have several url's.


Ok

Table 4: please add pdescription4, pdescription5 and pdescription6, just to be sure for the future.


Ok

The hardest part of all of this is layout. As a generality I work with tables for layout simply becuase they are supported on more platforms and browsers, however we can make this open ended and add db stored pages similar to static pages, or for that matter use static pages if you felt like it for the front end. This would allow you to generate your own forms with Dreamweaver using the php plugin or something along those lines. If we go the db page route basicly will just be adding a table gl_showroom_pages, this would not be accessable with write permissions to anyone but you. Adding a cid and lid feild to this will allow you to have custom pages for each company (thus you can charge them more for hosting)
 Quote

Status: offline

beewee

Forum User
Full Member
Registered: 08/05/03
Posts: 969
Location:The Netherlands, where else?
Personally I would have chosen the simple tables (foolproof), but perhaps your plug-in will be more complete using the db generated pages.

The db pages are also easier to expand I guess.

I've no experience with the PHP plugin from DW, but it's never too late to learn....
Dutch Geeklog sites about camping/hiking:
www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 Quote

Status: offline

samstone

Forum User
Full Member
Registered: 09/29/02
Posts: 820
Hi mthomas, sorry for not seeing your question for me, as I was busy with my site messed up by CVS files. I shouldn't have upgraded it until these CVS files are stable.

Anyway, to answer your question. I think both ideas are quite useful. Your intranet style will be good for the company directory and the account profile style will be useful for maintaining website members purpose.

I am using GL for a non-profile organization, which has an annual conference that are attended by the elected 'commissioners'. So by having a more detail information in the account information page, the administrator can identify who are commissionors and put them in the 'group' so that they have special access to the areas that are only for the commissioners.

That's my 2 cents. In fact, your conversation with beewee is very productive. I am impressed with your programming expertise. I am sure the GL team is very happy to have you on board.

Sam
 Quote

Status: offline

mthomas

Forum User
Full Member
Registered: 04/18/04
Posts: 148
Personally I would have chosen the simple tables (foolproof), but perhaps your plug-in will be more complete using the db generated pages.


Err. I misspoke ..well didn't expand on that my thought. the db side is simple to store the page instead of making a statis page 'page1.php' instead all the code in would be placed in side of gl_showroom_pages like this:

gl_showroom_pages
cid (Primary Key)
lid (Primary Key)
pid (Primary Key)
pagedata (page code is stored here)


Why thanke Samstone!

So lets see my current list of plugins in planning or release are:

gl_showroom --Planning Stage--Gallery Type Plugin

gl_intraab --Released--Intranet Address Book

gl_timecard --Development Stage--Timecard (this is straight up I worked 9 hours so I have 1 hour overtime and I took half of Tuesday off becuase I was sick stuff, not time and materials or workorder driven. Includes approval process.)

gl_memberlookup --Planning Stage--Extension to the GL profile pages with member search, will include support for plugin specific groups and group admins.

gl_gradebook --Planning Stage--Tracking of Assignment Grades, Test Grades, Essays etc.. category weighting... Over-all Grade, Further break downs so that there can be multiple periods and/or terms ie a Enghlish teacher teaching English 101 10am-11am and 12a-1pm on tuesday and 10am-11am on Thursday without getting the students mixed up or grouped togeather.
 Quote

Page navigation

All times are EST. The time is now 07:55 am.

  • Normal Topic
  • Sticky Topic
  • Locked Topic
  • New Post
  • Sticky Topic W/ New Post
  • Locked Topic W/ New Post
  •  View Anonymous Posts
  •  Able to post
  •  Filtered HTML Allowed
  •  Censored Content