Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Deskcom

Pages: [1]
1
Mods & Plugins (Releases & Support) / [MOD] Support Ticket System
« on: September 03, 2008, 06:31:55 AM »
NOTE: Nov 26 2012
All further support and development for this addon have been moved over to Sumale.nin. Which will provide support and furture development. Thank you for all your support guys and wish you all the best of luck.


Description:
This script is designed to give your users the ability to make trouble tickets when problems occur on your gallery. All data is kept in MYSQL tables and can be viewed later for future reference in case the problem arises again. Below is a list of features and tested version(s) of the 4image gallery.

Features:
--Individual User Access(Only the user that makes the ticket can view it, except in control panel)
--Customizable Category Fields
--Logs User's IP(s) of all replies and tickets
--Able to Close,Open Tickets
--Lock Tickets from being reopen
--When ticket is close, it may be allowed to reopen in case if problem is not completed.
--Remove specific users from using ticket system
--Supports Captcha to reduce spamming
--Able to hide closed tickets by default in the ticket console.
--Separate Ticket Console to View/Edit tickets.
--Status Marker Posts to show any changes to the physical ticket.
--Enable and Disable Ticket System via Admin Settings.
--Ability to upload images(JPG only) for screenshot purposes
--Ability to search for tickets by(Priority, Status, Category, Ticket ID, User ID, Subject, Date Created)
--Paging on Ticket List
--View Ticket Link will blink when tickets have been updated, but not read yet.

Tested on:
1.7.6 - 1.7.7


Updated on: 9/5/08
9/2 - Simplified Step 7a(Thanks to:Phisker B)
9/3 - Added German Translation(Thanks to:Phisker B)
9/3 - Supports Backup of the table files
9/5 - Blinking indication of an updated ticket.


Add On:
Spellchecker Mod by Phisker B


Modded Files:
include/constants.php
include/page_header.php
include/functions.php

admin/settings.php
admin/index.php
admin/users.php
admin/backup.php

lang/english/admin.php
lang/english/main.php

/template/YOUR TEMPLATE/style.css
/template/YOUR TEMPLATE/user_logininfo.html


New Files:
/template/YOUR TEMPLATE/Support.html
/template/YOUR TEMPLATE/ticket_bit.html
/template/YOUR TEMPLATE/support_new_ticket.html
/template/YOUR TEMPLATE/support_menu.html
/template/YOUR TEMPLATE/support_read_ticket.html
/template/YOUR TEMPLATE/reply_bit.html

support.php
support_install.php
admin/support.php


Mods You Will Need:
[MOD] Drop down options for custom database fields




WARNING: PLEASE BACKUP DATABASE AND WEBSITE DATA.




Step 1. Download the file support_files at the bottom of this post and place the files in the order below.

./template/YOUR TEMPLATE/Support.html
./template/YOUR TEMPLATE/ticket_bit.html
./template/YOUR TEMPLATE/support_new_ticket.html
./template/YOUR TEMPLATE/support_menu.html
./template/YOUR TEMPLATE/support_read_ticket.html
./template/YOUR TEMPLATE/reply_bit.html

./support.php
./support_install.php

./admin/support.php



Step 2. Openincludes/constants.php

Find:
Code: [Select]
define('LIGHTBOXES_TABLE', $table_prefix.'lightboxes');
Paste After:
Code: [Select]
define('SUPPORT_TABLE', $table_prefix.'support');

Step 3a. Open includes/page_header.php

Find:
Code: [Select]
 "url_lightbox" => $site_sess->url(ROOT_PATH."lightbox.php"),
Paste After:
Code: [Select]
  "url_support_ticket" => (!empty($url_support_check_ticket)) ? $site_sess->url($url_support_check_ticket) : "<a href=\"".$site_sess->url(ROOT_PATH."support.php")."\">".$lang['support_view']."</a>",
   "url_support_ticket_new" => (!empty($url_support_ticket)) ? $site_sess->url($url_support_ticket) : $site_sess->url(ROOT_PATH."support.php?action=newticket"),
   "support_ticket_activ" => $config['trouble_ticket_activate'],


Step 3b.

Find:
Code: [Select]
 "lang_advanced_search" => $lang['advanced_search'],
  "lang_lightbox" => $lang['lightbox'],

Paste After:
Code: [Select]
 "lang_support_new" => $lang['support_new'],

Step 3c.

Find:
Code: [Select]
 $total_categories = $data['total_categories'];
  $auth_cat_sql['auth_viewcat']['IN'] = $data['auth_viewcat']['IN'];
  $auth_cat_sql['auth_viewcat']['NOTIN'] = $data['auth_viewcat']['NOTIN'];
}

Paste After:
Code: [Select]
$url_support_check_ticket = "";
if(new_ticket_check($user_info['user_id'],$user_info['user_name'])){
  $url_support_check_ticket .= "<script language=\"JavaScript\">\n<!--\n var flg2=0;\n function new_tick_blink(){\n var myElement=document.getElementById('blnk2');\n flg2^=1;\n if(flg2==1){\n myElement.style.visibility='hidden';\n }\n else{\n myElement.style.visibility='visible';\n }\n timerID = setTimeout( 'new_tick_blink()' , 500 );\n }\n //-->\n</script>\n";
  $url_support_check_ticket .= "<span id=\"blnk2\"><a href=\"".$site_sess->url(ROOT_PATH."support.php")."\">".$lang['support_view']."</a></span></a><script language=\"JavaScript\">new_tick_blink();</script>";
  }


Step 4. Open includes/functions.php

Before ?> at the end of the file. Paste:
Code: [Select]
function post_ticket($id="",$status="",$subject="none",$message="none",$priority="low",$catagory="none",$attachment="") {
  global $user_info, $site_db, $session_info, $config;
  $user_info_id = "";
  $current_time = "";
  $user_name = $user_info['user_name'];
  $user_info_id = $user_info['user_id'];
  if($id==$user_info['user_name']){$current_time = time();}
  if($config['trouble_ticket_ip_log'] && $user_info['user_level'] != ADMIN){$ip_info=$session_info['session_ip'];}
  else{$ip_info="";}
  $sql = "INSERT INTO ".SUPPORT_TABLE." (`id` ,`status` ,`create_date` ,`last_update` ,`user_id` ,`catagory` ,`message` ,`priority` ,`ip`,`attachment`,`last_reply`,`subject`,`reply_id`)
          VALUES('','$status','$current_time','".time()."','$user_info_id','$catagory','$message','$priority','$ip_info','$attachment','$user_name','$subject','$id')";  
  if ($site_db->query($sql)) {
  if ($id=="") {return true;}
  else{
  $sql = "UPDATE ".SUPPORT_TABLE."
            SET last_update = ".time()." , last_reply = '".$user_info['user_name']."', is_read = '0'
            WHERE id = $id";
  if ($site_db->query($sql)){return true;}
  else{return false;}
  }
  }
  else{return false;}
  }

function get_total_user_tickets($user) {
global $site_db;
  $sql = "SELECT *
          FROM ".SUPPORT_TABLE."
          WHERE user_id = $user AND reply_id = 0";  
$result = $site_db->query($sql);
return $site_db->get_numrows($result);
}

function check_closed_ticket($id) {
global $site_db;
  $sql = "SELECT status
          FROM ".SUPPORT_TABLE."
          WHERE id = $id";  
$status_row = $site_db->query_firstrow($sql);
return ($status_row['status'] == "Closed") ? 1 : 0;
}
function reopen_ticket($id) {
global $site_db,$user_info;
  $sql = "UPDATE ".SUPPORT_TABLE."
            SET status = 'Reopen'
            WHERE id = $id";
  $ticket_msg = "***Reopend Request Placed By: ".$user_info['user_name']."***";
  if ($site_db->query($sql)){
  if (post_ticket($id,"","**REOPENED**",$ticket_msg,"","","")){
  return true;
  }
  else{return false;}
  }
  else{return false;}
}
function new_ticket_check($user_id,$user_name){
global $site_db;
  $sql = "SELECT *
          FROM ".SUPPORT_TABLE."
          WHERE user_id = '$user_id' AND is_read = '0' AND last_reply != '$user_name'";  
$result = $site_db->query($sql);
$num_tick = $site_db->get_numrows($result);
if($num_tick != 0){
return true;
}
else{
return false;
}

}


Step 5. Open admin/settings.php

The XX need to be replaced with 8, BUT if you have installed other mods that have been placed in here look for the last "show_table_separator($setting_group" and there will be a number in the [] brackets. Take that number and add one to it and place it in place of the XX. Make sure you keep the number, you will need it later.

Find:
Code: [Select]
 show_form_footer($lang['save_changes'], "", 2);
Before it Paste:
Code: [Select]
 show_table_separator($setting_group[XX], 2, "setting_group_XX");
  show_setting_row("trouble_ticket_activate", "radio");
  show_setting_row("trouble_ticket_ip_log", "radio");
  show_setting_row("trouble_ticket_attachment", "radio");
  show_setting_row("trouble_ticket_captcha", "radio");
  show_setting_row("hide_closed_tickets", "radio");
  show_setting_row("trouble_ticket_img_size");
  show_setting_row("trouble_ticket_catagories");
  show_setting_row("trouble_ticket_priority");


Step 6. Open admin/index.php

Find:
Code: [Select]
         show_nav_option($lang['nav_general_settings'], "settings.php?action=modifysettings");
Paste After:
Code: [Select]
 show_nav_option($lang['nav_general_tickets'], "support.php");

Step 7a. Open admin/users.php

Find:
Code: [Select]
 $user_invisible = intval($HTTP_POST_VARS['user_invisible']);
Paste After:
Code: [Select]
 $user_support = intval($HTTP_POST_VARS['user_support']);


Step 7b. (Updated 9/3/08 Step Simplified)

Find:
Code: [Select]
"user_icq")." = '$user_icq'
Paste After:
Code: [Select]
, user_support = '$user_support'


Step 7c.

Find:
Code: [Select]
 show_radio_row($lang['field_invisible'], "user_invisible", $user_row['user_invisible']);
Paste After:
Code: [Select]
 show_radio_row($lang['nav_general_tickets'], "user_support", $user_row['user_support']);

Step 8.

English: Open lang/LANGUAGE/main.php

Before the ?> at the end of the file paste:
Code: [Select]
//-----------------------------------------------------
//--- Sopport Ticket ----------------------------------
//-----------------------------------------------------
$lang['support_register_no_priv'] = "You must register or log in to view your support ticket(s)";
$lang['stream_support'] = "Support Ticket System";
$lang['support_view'] = "View Support Ticket(s)";
$lang['support_new'] = "Start New Ticket";
$lang['new_support_ticket'] = "New Ticket";
$lang['catagory'] = "Catagory";
$lang['priority'] = "Priority";
$lang['ticket_status'] = "Current ticket status:";
$lang['attachments'] = "Attachemnts";
$lang['support_register_no_activ'] = "Trouble Ticket System is Disabled";
$lang['ticket_subject_required'] = "Subject is required before submiting";
$lang['ticket_message_required'] = "Message is required before submiting";
$lang['ticket_error_upload'] = "Error: A problem occurred during file upload!";
$lang['ticket_error_rename'] = "Error: Please rename your file.";
$lang['ticket_error_size'] = "Error: Only .jpg images under {max_size} are accepted for upload";
$lang['ticket_error_unknown'] = "Error: Please Contact Admin or Try back later";
$lang['ticket_new_passed'] = "<center>Your ticket has been successfully added. We process tickets as they come in. Please be patient. To view your tickets <a href=\"{url_support_ticket}\">Click Here</a>  or visit the `View Support Ticket(s)` in your control panel.</center>";
$lang['ticket_last_reply'] = "Last Replier";
$lang['ticket_last_update'] = "Last Update Date";
$lang['ticket_create_date'] = "Ticket Create Date";
$lang['ticket_last_reply'] = "Replied By:";
$lang['click_for_img'] = "Click for attached Image";
$lang['ticket_reopen_passed'] = "Your ticket has been reopened. An Administrator will view it as soon as possible.";
$lang['ticket_error_reopen'] = "There was an error when reopening your ticket. Try again later";
$lang['close_ticket_disclose'] = "<p style=\"font-weight:bold\" align=\"center\">Your ticket is currently closed out. This states that the problem has been corrected and this ticket no longer needs to be noticed. The admin will no longer view this ticket and all methods of replying have been disabled.</br></br>If you feel the problem has not been corrected or the problem continues. Click the button bellow to reopen the ticket and reply with the description of the problem. An Administrator will view it as soon as possible.</p></br>";
$lang['perm_locked'] = "<p style=\"font-weight:bold\" align=\"center\">Your ticket has been closed and locked from any type of reopening. The information will continue to be stored here for future reference if the problem would occur in the future. DO NOT submit another ticket in reference to this problem. Thank you for notifing us of this problem.</p></br>";
$lang['support_register_ban'] = "You have been locked out of the Support Ticket System, this may have occured due to harassment or spamming of the system. You will be locked out until further notice from the admin. Please contact admin for questions on the reason for the ban.";


German: Open lang/LANGUAGE/main.php

Before the ?> at the end of the file paste:
Code: [Select]
$lang['support_register_no_priv'] = "Du musst eingeloggt sein um deine Support Tickets zu sehen!";
$lang['stream_support'] = "Support Ticket System";
$lang['support_view'] = "Support Tickes ansehen";
$lang['support_new'] = "Neues Ticket starten";
$lang['new_support_ticket'] = "Neues Ticket";
$lang['catagory'] = "Kategorie";
$lang['priority'] = "Priorit&auml;t";
$lang['ticket_status'] = "Aktueller Ticketstatus:";
$lang['attachments'] = "Attachemnts";
$lang['support_register_no_activ'] = "Support Ticket System ist deaktiviert!";
$lang['ticket_subject_required'] = "Es muss ein Betreff gew&auml;lt werden!";
$lang['ticket_message_required'] = "Es muss eine Nachricht angegeben werden!";
$lang['ticket_error_upload'] = "Ooops!: Ein Problem beim Upload ist aufgetreten!";
$lang['ticket_error_rename'] = "Ooops!: Benenne deine Datei um.";
$lang['ticket_error_size'] = "Ooops!: Nur *.jpg Dateien unter {max_size} sind erlaubt!";
$lang['ticket_error_unknown'] = "Ooops!: Kontaktiere den Webmaster oder versuche es sp&auml;ter nocheinmal!";
$lang['ticket_new_passed'] = "<center>Dein Ticket wurde erfolgreich aufgenommen. Wir bearbeiten die Tickets schnellst m&ouml;glich. Bitte habe etwas Geduld. Um deine Tickets anzusehen, <a href=\"{url_support_ticket}\">Klicke hier</a>  oder klicke im Controlpanel auf `Support Tickets ansehen`!</center>";
$lang['ticket_last_reply'] = "Letzte Antwort";
$lang['ticket_last_update'] = "Letzter Update Tag";
$lang['ticket_create_date'] = "Tag der erstellung";
$lang['ticket_last_reply'] = "Geantwortet von:";
$lang['click_for_img'] = "Klicke f&uuml;r beigef&uuml;gte Datei";
$lang['ticket_reopen_passed'] = "Dein Ticket ist wieder eröffnet worden. Ein Administrator betrachtet es sobald wie m&ouml;glich.";
$lang['ticket_error_reopen'] = "Ooops! Es gab ein Fehler beim &ouml;ffnen deines Tickets. Bitte komme sp&auml;ter wieder!";
$lang['close_ticket_disclose'] = "<p style=\"font-weight:bold\" align=\"center\">Dein Ticket wurde nun geschlossen. Dies gibt an, dass das Problem korrigiert worden ist, und dieses Ticket nicht mehr beachtet werden muss. Wenn du der Meinung bist, dass dein Problem nicht gel&ouml;st worden ist, dann klicke auf auf wieder &ouml;ffnen des Tickets mit Angabe warum und ein Admin wird sich um das Problem bem&uuml;hen!</p></br>";
$lang['perm_locked'] = "<p style=\"font-weight:bold\" align=\"center\">Dein Ticket wurde gscchlossen und kann nicht mehr ge&ouml;ffnet werden! Das Ticket wird aber f&uuml;r eine Gewisse Zeit gespeichert, falls ein Problem gleichermassen auftreten sollte, damit man dieses Ticket noch einmal abfangen kann! Bitte er&ouml;ffne kein weiteres Ticket f&ouml;r das gleiche Problem. Wir danken f&uuml;r dein Verst&auml;ndniss!</p></br>";
$lang['support_register_ban'] = "Du wurdest vom Ticketsystem ausgeschlossen! Dies kann mehrere Gr&uuml;nde haben und liegt allein im Interesse der Administration!";


Step 9.

English: Open lang/LANGUAGE/admin.php

The number in the step 5, I aksed you to remember, replace the XX with that number.
Before the ?> at the end of the file paste:
Code: [Select]
/*-- Setting-Group XX --*/
$setting_group[XX]="Trouble Ticket System";
$setting['trouble_ticket_activate'] = "Enable Trouble Ticket System";
$setting['trouble_ticket_catagories'] = "Trouble Ticket Catagories List<br /><span class=\"smalltext\">Seperate catagories with a , between them</span>";
$setting['trouble_ticket_priority'] = "Trouble Ticket Priority List<br /><span class=\"smalltext\">Seperate catagories with a , between them and they will be sorted based on the order they are in</span>";
$setting['trouble_ticket_ip_log'] = "Log IP Address on all submited tickets";
$setting['trouble_ticket_attachment'] = "Allow users to upload attachments<br /><span class=\"smalltext\">JPEG attachments only, Just for screenshot purposes</span>";
$setting['trouble_ticket_captcha'] = "Uses Captcha when submiting a new ticket<br /><span class=\"smalltext\">Enabling helps reduce spam tickets showing up in the list</span>";
$setting['trouble_ticket_img_size'] = "MAX File size that can be uploaded in KB's";
$setting['hide_closed_tickets'] = "Hide closed tickets by default<br /><span class=\"smalltext\">This feature will auto hide all closed tickets. If you use search to view closed tickets it will show closed tickets the results.</span>";

$lang['nav_general_tickets'] = "Trouble Ticket System";
$lang['ticket_id'] = "Ticket ID";
$lang['ticket_subject'] = "Subject";
$lang['date_created'] = "Date Created";
$lang['date_updated'] = "Last Updated";
$lang['ticket_user_id'] = "User ID";
$lang['ticket_status'] = "Status";
$lang['ticket_cat'] = "Catagory";
$lang['ticket_prio'] = "Priority";
$lang['ticket_ip'] = "User IP";
$lang['ticket_replies'] = "Ticket Replies";
$lang['ticket_reply_to'] = "Rpley To Ticket";
$lang['ticket_search_header'] = "Search Ticket System";
$lang['status_any'] = "Any";
$lang['status_open'] = "Open";
$lang['field_closed'] = "Closed";
$lang['no_log_ip'] = "No Loged IP";
$lang['status_reopen'] = "Reopen";
$lang['update_ticket'] = "Update Ticket";
$lang['ticket_attachment'] = "Attachment";
$lang['perm_lock'] = "Permanently Locked";


German: Open lang/LANGUAGE/admin.php

The number in the step 5, I aksed you to remember, replace the XX with that number.
Before the ?> at the end of the file paste:
Code: [Select]
/*-- Setting-Group xx --*/
$setting_group[xx]="Support Ticket System";
$setting['trouble_ticket_activate'] = "Schalte das Ticket System ein";
$setting['trouble_ticket_catagories'] = "Ticket Kategorien<br /><span class=\"smalltext\">Mit einem , (KOMMA) werden die Kategorien getrennt</span>";
$setting['trouble_ticket_priority'] = "Ticket Pr&auml;oritäts Liste<br /><span class=\"smalltext\">Mit einem , (KOMMA) werden die Pr&auml;orit&auml;ten getrennt und sie werden auf Grundlage von der ausgew&auml;hlten Kategorie sortiert</span>";
$setting['trouble_ticket_ip_log'] = "Logge bei jedem Ticke die IP mit";
$setting['trouble_ticket_attachment'] = "Erlaube den Usern ein Datei mitzusenden<br /><span class=\"smalltext\">Nur JPG Dateien sind erlaubt, da nur Screenshots akzeptiert werden</span>";
$setting['trouble_ticket_captcha'] = "Benutze den Captchacode f&uuml;r die Tickets<br /><span class=\"smalltext\">Dies beugt Spam vor und sollte eingeschaltet sein</span>";
$setting['trouble_ticket_img_size'] = "MAXIMALE Dateigr&ouml;sse die erlaubt ist. Angabe in KB";
$setting['hide_closed_tickets'] = "Blende geschlossene Tickets aus<br /><span class=\"smalltext\">Diese Option blendet geschlossen Tickest aus. K&ouml;nnen aber dennoch eingesehen werden!</span>";

$lang['nav_general_tickets'] = "Support Ticket System";
$lang['ticket_id'] = "Ticket ID";
$lang['ticket_subject'] = "Betreff";
$lang['date_created'] = "Erstellungsdatum";
$lang['date_updated'] = "Letztes Update";
$lang['ticket_user_id'] = "User ID";
$lang['ticket_status'] = "Status";
$lang['ticket_cat'] = "Kategorie";
$lang['ticket_prio'] = "Pr&auml;riot&auml;t";
$lang['ticket_ip'] = "User IP";
$lang['ticket_replies'] = "Ticket Antworten";
$lang['ticket_reply_to'] = "Rpley To Ticket";
$lang['ticket_search_header'] = "Durchsuche das Ticket System";
$lang['status_any'] = "Irgendwelche";
$lang['status_open'] = "Offen";
$lang['field_closed'] = "Geschlossen";
$lang['no_log_ip'] = "Keine IP geloggt";
$lang['status_reopen'] = "Neu-&Ouml;ffnen";
$lang['update_ticket'] = "Update Ticket";
$lang['ticket_attachment'] = "Upload";
$lang['perm_lock'] = "Permanent schliessen";


Step 10. Open /template/YOUR TEMPLATE/style.css

Paste this at the end of the file:
Code: [Select]
.open {
  font-family: Tahoma,Verdana,Arial,Helvetica,sans-serif;
  font-size: 11px;
  color: #32cd32;
}
.close {
  font-family: Tahoma,Verdana,Arial,Helvetica,sans-serif;
  font-size: 12px;
  font-weight:bold;
  color: #ff0000;
}
.wait_reply {
  font-family: Tahoma,Verdana,Arial,Helvetica,sans-serif;
  font-size: 12px;
  font-weight:bold;
}


Step 11.
Open /template/YOUR TEMPLATE/user_logininfo.html

Find:
Code: [Select]
 &raquo; <a href="{url_control_panel}">{lang_control_panel}</a><br />
      &raquo; <a href="{url_logout}">{lang_logout}</a><br />

Paste After:
Code: [Select]
 {if support_ticket_activ}
 <br />
 &raquo; {url_support_ticket}<br />
 &raquo; <a href="{url_support_ticket_new}">{lang_support_new}</a><br />
 <br />
 {endif support_ticket_activ}


Step 12. Open admin/backup.php
 (Updated 9/3/08 Added Step for Backup)
Find:
Code: [Select]
 WORDLIST_TABLE,
Paste After:
Code: [Select]
 SUPPORT_TABLE,

Step 13.

Go to your root directory where your 4image gallery is installed go to the data folder and make a folder called "support_media". This is where all images that are sent in your tickets will be stored.

Now run the support_install.php and make sure it goes thought with no errors. Once done your ready. Go to you settings section in you admin control panel and adjust the settings to suit your needs. I hope you enjoy the addition and just give a shout out if you would like to see an other mods on it.

2
I been hearing alot about some people having a problem with hackers getting into there gallerys by loading molisiaus php files. To help protect beef up the security use the following code in you .htaccess file in all your 777chmod folders, this will help keep them from placing php perl and cgi files in ther and help protect your gallery. If you have a .htaccess file already just add this to it. Try not to copy the same commands again. Hope this helps. I will try to post some more stuff in here to help protect. But thi is just the start.

Code: [Select]
php_flag engine off
<Files ~ "\.(php*|s?p?html|cgi|pl)$">
deny from all
</Files>

3
Mods & Plugins (Requests & Discussions) / Avatar Commands
« on: August 19, 2008, 02:47:24 PM »
What I mean in by this. I can place a command like :iconkodi wolf: on the site and the it will automatically grab that data remove :icon and : out of it leaving the user name and then look up the avatar for them and place the avatar where that command was in the sentence. I know the system does that with any emails on the site. If I put a email in anywhere it takes it and turns it into a mailto link. I want to be able to do that with avatars. I think others will like to see that as well.

4
NOTE: Nov 26 2012
All further support and development for this addon have been moved over to Sumale.nin. Which will provide support and furture development. Thank you for all your support guys and wish you all the best of luck.


NOTE:
I been working on the script for about 2 days now, It has been tested for 1.7.6 Gallery only, no other gallery versions have been tested. If others do work. Please let me know so I may update this post. This idea was started from b.o.fan orignal design and still contains code from his design as well. So I still credit b.o.fan for the original script. I hope you enjoy.

Features:
-- Display/Post shouts on a users profile
-- Notifies you of new shouts in the Shouts Tab
-- Mark shouts that you have read in the Shouts Tab
-- Delete Controls for ease of deletion on the profile page.
-- View new shouts in the control panel.

Version Changes:
-- 1.1 Fixed guest view bug.
-- 1.0 Original Release.

More Features to come.

WARNING: PLEASE BACKUP DATABASE AND WEBSITE DATA. I can not stress this enough.


Below is a list of new files and changed files.

Changed Files:
./includes/constants.php
./includes/db_mysql.php
./includes/page_header.php
./member.php
./lang/YOUR LANG/main.php
./template/YOUR TEMPLATE/member_profile.html
./template/YOUR TEMPLATE/user_logininfo.html

New Files:
./template/YOUR TEMPLATE/user_gb_bit.html
./template/YOUR TEMPLATE/user_gb_new.html
./template/YOUR TEMPLATE/user_gb_delete.html
./template/YOUR TEMPLATE/user_gb_showgb.html

Step 1.First use you sql editor or phpmyadmin to insert this table into you database.

Code: [Select]
CREATE TABLE `4images_users_gb` (
  `users_gb_id` smallint(5) NOT NULL auto_increment,
  `user_id_gb` smallint(5) NOT NULL default '0',
  `user_id_ein` smallint(5) NOT NULL default '0',
  `user_name_gb` varchar(50) NOT NULL default '',
  `user_gb_text` text NOT NULL,
  `user_gb_date` timestamp NOT NULL default '0000-00-00 00:00:00',
  `user_gb_read` timestamp NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`users_gb_id`)
) TYPE=MyISAM;

Or download this package, place install_gd.php in your root directory and run it. It will auto install the database for you.


Step2. Open ./includes/constants.php and Find:

Code: [Select]
define('LIGHTBOXES_TABLE', $table_prefix.'lightboxes');
After it paste:
Code: [Select]
define('USERS_GB_TABLE', $table_prefix.'users_gb');


Step 3. Open ./includes/db_mysql.php and Find:

Code: [Select]
 function get_fieldname($query_id = -1, $offset) {
    if ($query_id != -1) {
      $this->query_id = $query_id;
    }
    return @mysql_field_name($this->query_id, $offset);
  }

Paste After:

Code: [Select]
 function fetch_object($offset) {
    return @mysql_fetch_object($offset);
  }



Step 4. Open ./lang/english/main.php and paste code before the ?> at the end of the file

Code: [Select]
//-----------------------------------------------------
//--- Shout Mod ---------------------------------------
//-----------------------------------------------------
$lang['user_gb'] = "Shouts from ";
$lang['user_gb_entry'] = " Shout";
$lang['user_gb_entrys'] = " Shouts";
$lang['user_gb_back'] = "To the Overview";
$lang['user_gb_delete'] = "The entry was deleted";
$lang['user_gb_delete_quest'] = "Do you want to delete this Shout-Entry? ";
$lang['user_gb_delete_yes'] = "Yes";
$lang['user_gb_delete_no'] = "No";
$lang['user_gb_delete_click'] = "Delete Entry?";
$lang['user_gb_delete_ok'] = "Entry deleted!";
$lang['user_gb_delete_not'] = "Entry not deleted";
$lang['user_gb_new'] = "New Shout-Entry";
$lang['user_gb_new_ok'] = "The entry was successful";
$lang['user_gb_new_to'] = "To the new entry";
$lang['user_gb_new_wait'] ="Please you wait 5 seconds up to the automatic forwarding! <br> Or you klick\n";
$lang['user_gb_too_gb'] = "Too the Shouts from ";
$lang['user_gb_at'] = " at ";
$lang['error_no_text'] = "Entry is missing!";
$lang['bug'] = "Error";
$lang['user_gb_er'] = "received  Entrys:";
$lang['user_gb_ge'] = "written Entrys:";
$lang['user_gb_next'] = "next";
$lang['user_gb_prev'] = "prev";
$lang['level_user'] = "Member";
$lang['level_admin'] = "Administrator";
$lang['read_shout'] = "Mark as Read";



Step 5a. Open ./member.php and Find:

Code: [Select]
 }

  $sql = "DELETE FROM ".COMMENTS_TABLE."
          WHERE comment_id = $comment_id";
  $result = $site_db->query($sql);
  $msg = ($result) ? $lang['comment_delete_success'] : $lang['comment_delete_error'];
}

Paste after it:

Code: [Select]
/////////////////////////////////////////////////////////////////
if ($action == "showgb_read")
{
  $update_query = "UPDATE ".USERS_GB_TABLE." SET user_gb_read = NOW() WHERE user_id_gb =".$user_info['user_id']." AND users_gb_id = ".@$_GET['entry'];
  $sql = $site_db->query($update_query);
  $action = "showgb_new";
}
if ($action == "showgb_new")
{
    if ($user_info['user_level'] == GUEST) {
    show_error_page($lang['no_permission']);
    exit;
  }

  if($_GET['user_id'] == "") $id = $user_info[user_id]; else $id = $_GET['user_id'];
  if(isset($id))
  {
   $query = "SELECT user_id, user_name FROM ".USERS_TABLE." WHERE user_id = ".$id."";
   $sql = $site_db->query($query);
   $ds = $site_db->fetch_object($sql);
   $user_name = "<a href='member.php?action=showprofile&user_id=".$ds->user_id."' target=_self>".$ds->user_name."</a>";
   $user_name2 = $ds->user_name;
  } else {
  $user_name = $user_info['user_name'];
  $user_name2 = $user_info['user_name'];
  }
  if(isset($id)) {$abf_id = $id;} else {$abf_id = $user_info['user_id'];}
  $user_gb_own = $lang['user_gb'].$user_name2."";
  $query2 = "SELECT COUNT(*) FROM ".USERS_GB_TABLE." WHERE user_id_gb = ".$abf_id."";
  $erg = $site_db->query_firstrow($query2);
  if($erg == "0"){$user_gb_entry = $erg.$lang['user_gb_entry'];}
  elseif($erg == "1"){$user_gb_entry = $erg.$lang['user_gb_entrys'];}
  elseif($erg > "1"){$user_gb_entry = $erg.$lang['user_gb_entrys'];}

  $offset = @$_GET['off'];
  if(isset($offset)) {$offset = $_GET['off'];} else {$offset = "0";}
    $gb_query = "SELECT users_gb_id,user_id_gb,user_id_ein,user_name_gb,user_gb_text,user_gb_date,DATE_FORMAT(user_gb_date,'%e.%c.%Y') AS user_gb_datum,DATE_FORMAT(user_gb_date,'%H:%i:%s') AS user_gb_uhr, user_id, user_name, user_level
                  FROM (".USERS_GB_TABLE." i)
                  LEFT JOIN ".USERS_TABLE." u ON (".get_user_table_field("u.", "user_id")." = i.user_id_ein)
                  WHERE user_id_gb = ".$abf_id." AND user_gb_read = '0000-00-00 00:00:00'
                  ORDER BY user_gb_date DESC
                  LIMIT $offset, 10";
  
  $gb_sql = $site_db->query($gb_query);
  while($ds = $site_db->fetch_object($gb_sql))
    {
    if($ds->user_id_ein == $user_info[user_id] AND $ds->user_id != $ds->user_id_gb)
    {
      $user_link_del = "<a href='member.php?action=showgb_read&entry=".$ds->users_gb_id."&user_id=".$ds->user_id_gb."'>".$lang['read_shout']."</a>";} else {$user_link_del ="";
    }
    if($abf_id == $user_info[user_id])
    {
      $user_gb_delete = "<a href='member.php?action=showgb_read&entry=".$ds->users_gb_id."&user_id=".$ds->user_id_gb."'>".$lang['read_shout']."</a> ".$user_link_del;
    }
    else {$user_gb_delete = $user_link_del;}

    if ($ds->user_id == "")
    {
      $user = $ds->user_name_gb;
      $gb_link = "";
      $gender = "";
    }
    else
    {
      $user = "<b><a href='member.php?action=showprofile&user_id=".$ds->user_id_ein."'>".$ds->user_name_gb."</a></b>";
    }


    $text = $ds->user_gb_text;

    $gb_time = $ds->user_gb_datum.$lang['user_gb_at'].$ds->user_gb_uhr;
    $level = $ds->user_level;
    if($level == "9") {$level = $lang['level_admin'];}
    elseif($level == "2") {$level = $lang['level_user'];}
    else {$level = "";}

  $site_template->register_vars(array(
    "user" => $user,
    "gb_time" => $gb_time,
    "admin_link" => $user_gb_delete,
    "userpic" => $user_pic,
    "gender" => $gender,
    "level" => $level,
    "text" => format_text($text, $config['html_comments'], $config['wordwrap_comments'], $config['bb_comments'], $config['bb_img_comments'])
    ));

  $gb_entrys .= $site_template->parse_template("user_gb_bit");
  }

  //Pageing
  if($offset == 0) {$vor = $lang['user_gb_prev'];}
  else
  {
    $offset2 = $offset - 10;
    $vor = "<a href='member.php?action=showgb_new&user_id=".$abf_id."&off=".$offset2."'>".$lang['user_gb_prev']."</a>";
  }
  $offset3 = $offset + 10;
  if($offset3 >= $erg ) { $weiter = $lang['user_gb_next'];}
  else {$weiter = "<a href='member.php?action=showgb_new&user_id=".$abf_id."&off=".$offset3."'>".$lang['user_gb_next']."</a>";}
  $gb_pageing = $vor."&nbsp;".$weiter;

   $site_template->register_vars(array(
    "gb_entrys" => $gb_entrys,
    "user_gb_own" => $user_gb_own,
    "gb_pageing" => $gb_pageing,
    "user_gb_entry" => $user_gb_entry,
    "user_gb_entry_text" => $user_gb_entry_text
  ));


  //Pageing
  if($offset == 0) {$vor = $lang['user_gb_prev'];}
  else
  {
    $offset2 = $offset - 10;
    $vor = "<a href='member.php?action=showgb_new&id=".$abf_id."&off=".$offset2."'>".$lang['user_gb_prev']."</a>";
  }
  $offset3 = $offset + 10;
  if($offset3 >= $erg ) { $weiter = $lang['user_gb_next'];}
  else {$weiter = "<a href='member.php?action=showgb_new&id=".$abf_id."&off=".$offset3."'>".$lang['user_gb_next']."</a>";}
  $gb_pageing = $vor."&nbsp;".$weiter;

   $site_template->register_vars(array(
    "gb_entrys" => $gb_entrys,
    "user_gb_own" => $user_gb_own,
    "gb_pageing" => $gb_pageing,
    "user_gb_entry" => $user_gb_entry,
    "user_gb_entry_text" => $user_gb_entry_text
  ));
  $txt_clickstream = $lang['user_gb'].$user_name;
  $content = $site_template->parse_template("user_gb_showgb");

}


if ($action == "delete_entry")
{
  if(isset($_GET['aktion']))
  {
    if($_GET['aktion'] == $lang['user_gb_delete_yes'])
    {
      $query = "DELETE FROM ".USERS_GB_TABLE." WHERE users_gb_id = ".@$_GET['entry']."";
      $sql = $site_db->query($query);
      $user_gb .= "<meta http-equiv=refresh content=\"0; URL=member.php?action=showprofile&user_id=".$_GET['user_id']."&msg_del=yes\">";
      $txt_clickstream = $lang['user_gb_delete_ok'];
    }
    if($_GET['aktion'] == $lang['user_gb_delete_no'])
    {
      $user_gb .= "<meta http-equiv=refresh content=\"0; URL=member.php?action=showprofile&user_id=".$_GET['user_id']."&msg_del=no\">";
    }
  }
  else
  {
    $txt_clickstream = $lang['user_gb_delete_click'];
  }
    if ($user_info['user_level'] == GUEST)
    {
       show_error_page($lang['no_permission']);
    exit;
    }

    $site_template->register_vars(array(
    "user_gb" => $user_gb,
    "entry" => $_GET['entry'],
    "user_id" => $_GET['user_id'],
    "delete_entry" => $lang['user_gb_delete_quest'],
    "delete_entry_yes" => $lang['user_gb_delete_yes'],
    "delete_entry_no" => $lang['user_gb_delete_no']
    ));
    $content = $site_template->parse_template("user_gb_delete");
}
/////////////////////////////////////////////////////////////////



Step 5b. Find:

Code: [Select]
   $user_icq = (isset($user_row['user_icq'])) ? $user_row['user_icq'] : REPLACE_EMPTY;
    if (!empty($user_icq) && $user_icq != REPLACE_EMPTY) {
      $user_icq_button = "<a href=\"http://www.icq.com/people/about_me.php?uin=".$user_icq."\" target=\"_blank\"><img src=\"http://status.icq.com/online.gif?icq=".$user_icq."&img=5\" width=\"18\" height=\"18\" border=\"0\" alt=\"".$user_icq."\" /></a>";
    }
    else {
      $user_icq_button = REPLACE_EMPTY;
    }

Paste this after:

Code: [Select]
/////////////////////////////////////////////////////
  $msg_del = $_GET['msg_del'];
  if($msg_del == "yes") $msg = $lang['user_gb_delete_ok'];
  elseif($msg_del == "no") $msg = $lang['user_gb_delete_not'];
  elseif($msg_del == "") $msg = "";

  if($_GET['user_id'] == "") $id = $user_info[user_id]; else $id = $_GET['user_id'];
  if(isset($id))
  {
   $query = "SELECT user_id, user_name FROM ".USERS_TABLE." WHERE user_id = ".$id."";
   $sql = $site_db->query($query);
   $ds = $site_db->fetch_object($sql);
   $user_name = "<a href='member.php?action=showprofile&user_id=".$ds->user_id."' target=_self>".$ds->user_name."</a>";
   $user_name2 = $ds->user_name;
  } else {
  $user_name = $user_info['user_name'];
  $user_name2 = $user_info['user_name'];
  }
  if(isset($id)) {$abf_id = $id;} else {$abf_id = $user_info['user_id'];}
  $user_gb_own = $lang['user_gb'].$user_name2."";
  $query2 = "SELECT COUNT(*) FROM ".USERS_GB_TABLE." WHERE user_id_gb = ".$abf_id."";
  $erg = $site_db->query_firstrow($query2);
  if($erg == "0"){$user_gb_entry = $erg.$lang['user_gb_entry'];}
  elseif($erg == "1"){$user_gb_entry = $erg.$lang['user_gb_entrys'];}
  elseif($erg > "1"){$user_gb_entry = $erg.$lang['user_gb_entrys'];}

  $offset = @$_GET['off'];
  if(isset($offset)) {$offset = $_GET['off'];} else {$offset = "0";}
    $gb_query = "SELECT users_gb_id,user_id_gb,user_id_ein,user_name_gb,user_gb_text,user_gb_date,DATE_FORMAT(user_gb_date,'%e.%c.%Y') AS user_gb_datum,DATE_FORMAT(user_gb_date,'%H:%i:%s') AS user_gb_uhr, user_id, user_name, user_level
                  FROM (".USERS_GB_TABLE." i)
                  LEFT JOIN ".USERS_TABLE." u ON (".get_user_table_field("u.", "user_id")." = i.user_id_ein)
                  WHERE user_id_gb = ".$abf_id."
                  ORDER BY user_gb_date DESC
                  LIMIT $offset, 10";

  $gb_sql = $site_db->query($gb_query);

  while($ds = $site_db->fetch_object($gb_sql))
    {

    if($ds->user_id_ein == $user_info[user_id] AND $ds->user_id != $ds->user_id_gb)
    {
      $user_link_del = "<a href='member.php?action=delete_entry&entry=".$ds->users_gb_id."&user_id=".$ds->user_id_gb."'>".$lang['delete']."</a>";} else {$user_link_del ="";
    }
    if($abf_id == $user_info[user_id])
    {
      $user_gb_delete = "<a href='member.php?action=delete_entry&entry=".$ds->users_gb_id."&user_id=".$ds->user_id_gb."'>".$lang[delete]."</a> ".$user_link_del;
    }
    else {$user_gb_delete = $user_link_del;}

    if ($ds->user_id == "")
    {
      $user = $ds->user_name_gb;
      $gb_link = "";
      $gender = "";
    }
    else
    {
      $user = "<b><a href='member.php?action=showprofile&user_id=".$ds->user_id_ein."'>".$ds->user_name_gb."</a></b>";
      $gb_link = "<a href='member.php?action=showprofile&user_id=".$ds->user_id."'\n target=_self><img src='".TEMPLATE_PATH."/images/gb_".$config['language_dir'].".gif' border=0></a>";
    }


    $text = $ds->user_gb_text;

    $gb_time = $ds->user_gb_datum.$lang['user_gb_at'].$ds->user_gb_uhr;
    $level = $ds->user_level;
    if($level == "9") {$level = $lang['level_admin'];}
    elseif($level == "2") {$level = $lang['level_user'];}
    else {$level = "";}

  $site_template->register_vars(array(
    "user" => $user,
    "gb_time" => $gb_time,
    "admin_link" => $user_gb_delete,
    "userpic" => $user_pic,
    "gender" => $gender,
    "gb_link" => $gb_link,
    "level" => $level,
    "text" => format_text($text, $config['html_comments'], $config['wordwrap_comments'], $config['bb_comments'], $config['bb_img_comments'])
    ));
  $gb_entrys .= $site_template->parse_template("user_gb_bit");
  }

  //Pageing
  if($offset == 0) {$vor = $lang['user_gb_prev'];}
  else
  {
    $offset2 = $offset - 10;
    $vor = "<a href='member.php?action=showprofile&user_id=".$abf_id."&off=".$offset2."'>".$lang['user_gb_prev']."</a>";
  }
  $offset3 = $offset + 10;
  if($offset3 >= $erg ) { $weiter = $lang['user_gb_next'];}
  else {$weiter = "<a href='member.php?action=showprofile&user_id=".$abf_id."&off=".$offset3."'>".$lang['user_gb_next']."</a>";}
  $gb_pageing = $vor."&nbsp;".$weiter;

   $site_template->register_vars(array(
    "gb_entrys" => $gb_entrys,
    "user_gb_own" => $user_gb_own,
    "gb_pageing" => $gb_pageing,
    "user_gb_entry" => $user_gb_entry,
    "user_gb_entry_text" => $user_gb_entry_text
  ));

  if($_GET['ent'] == "") $afg = "false"; else $afg = $_GET['ent'];
  if ($_POST['comment_text'] == "" & $_GET['ent'] == "true")
    {
      $msg = $lang['error_no_text'];
      $afg = "false";
    }
  if($afg == "true")
  {
    $text = $_POST['comment_text'];
    if($_POST['user_id'] == $user_info[user_id]) { $a = "NOW()";}
    else {$a = "'0000-00-00 00:00:0'";}
    $query = "INSERT INTO ".USERS_GB_TABLE."
              (user_id_gb, user_id_ein, user_name_gb, user_gb_text, user_gb_date, user_gb_read)
              VALUES
              ('".$_POST['user_id']."', '".$user_info[user_id]."', '".$user_info[user_name]."','".$text."', NOW(), ".$a.")";
    $sql = $site_db->query($query);

    $msg .= "<meta http-equiv=refresh content=\"5; URL=member.php?action=showprofile&user_id=".$_POST['user_id']."\">\n
    <fieldset style=border : 1px solid blue><legend style=color: black;><b>".$lang['user_gb_new_ok']."</b>\n
    </legend>\n<table border=0 cellspacing=0 cellpadding=8><tr>\n
    <td><p>&nbsp;".$lang['user_gb_new_wait']."
    <a href=member.php?action=showprofile&user_id=".$_POST['user_id'].">".$lang['user_gb_new_to']."</a><br></p></td></tr></table></fieldset>";
  }
  elseif ($afg == "false")
  {
    $id = $_GET['user_id'];
  }

    if ($config['bb_comments'] == 1) {
    $site_template->register_vars(array(
      "lang_bbcode" => $lang['bbcode'],
      "lang_tag_prompt" => $lang['tag_prompt'],
      "lang_link_text_prompt" => $lang['link_text_prompt'],
      "lang_link_url_prompt" => $lang['link_url_prompt'],
      "lang_link_email_prompt" => $lang['link_email_prompt'],
      "lang_list_type_prompt" => $lang['list_type_prompt'],
      "lang_list_item_prompt" => $lang['list_item_prompt']
    ));
    $bbcode = $site_template->parse_template("bbcode"); }

    $site_template->register_vars(array(
    "user_gb" => $user_gb,
    "bbcode" => $bbcode,
    "head_gb" => $lang['user_gb_new'],
    "button_send" => $lang['submit'],
    "button_reset" => $lang['reset'],
    "gb_id" => $user_id
    ));

    $query = "SELECT COUNT(*) FROM ".USERS_GB_TABLE." WHERE user_id_gb = ".$user_row['user_id']."";
    $erg = $site_db->query_firstrow($query);
    $user_gb_ein = $erg;

    $query = "SELECT COUNT(*) FROM ".USERS_GB_TABLE." WHERE user_id_ein = ".$user_row['user_id']."";
    $erg = $site_db->query_firstrow($query);
    $user_gb_ge = $erg;


    $user_gb_link = "<a href='member.php?action=showprofile&user_id=".$user_row['user_id']."'>".$lang['user_gb_too_gb'].$user_row['user_name']." (".$user_gb_ein.")</a>";

    $site_template->register_vars(array(
    "user_gb_ein" => $user_gb_ein,
    "user_gb_ge" => $user_gb_ge,
    "lang_gb_ein" => $lang['user_gb_ein'],
    "lang_user_gb_er" => $lang['user_gb_er'],
    "lang_user_gb_ge" => $lang['user_gb_ge'],
    "user_gb_link" => $user_gb_link
    ));
///////////////////////////////////////////////



Step 6a. Open ./include/page_header.php and Find:

Code: [Select]
"url_lightbox" => $site_sess->url(ROOT_PATH."lightbox.php"),
Paste after it:

Code: [Select]
 "url_own_gb" => (!empty($url_own_gb)) ? $site_sess->url($url_own_gb) : $site_sess->url(ROOT_PATH."member.php?action=showgb_new"),


Step 6b. Find:

Code: [Select]
 Copyright &copy; 2002-'.date('Y').' <a href="http://www.4homepages.de" target="_blank">4homepages.de</a>

</p>
',
));

if (!empty($additional_urls)) {
  $register_array = array();
  foreach ($additional_urls as $key => $val) {
    $register_array[$key] = $site_sess->url($val);
  }
  $site_template->register_vars($register_array);
}

Paste After it:

Code: [Select]
//////////////////////////////////////////////
$query = "SELECT COUNT(*) FROM ".USERS_GB_TABLE."
          WHERE user_id_gb = ".$user_info['user_id']."
          AND user_gb_read = '0000-00-00 00:00:00'";
$erg = $site_db->query_firstrow($query);
  if($erg == "0"){$user_gb_neu = $lang['user_gb_entry']."(".$erg.")";}
  elseif($erg == "1"){$user_gb_neu = $lang['user_gb_entrys']."<b>(".$erg.")</b>";}
  elseif($erg > "1"){$user_gb_neu = $lang['user_gb_entrys']."<b>(".$erg.")</b>";}

////////////////////////////////////////////////



Step 6c. Find:

Code: [Select]
"lang_lightbox" => $lang['lightbox'],
Paste this after:

Code: [Select]
 "lang_own_gb" => $user_gb_neu,


Step 7. Open ./template/YOUR TEMPLATE/user_logininfo.html and Find:

Code: [Select]
     &raquo; <a href="{url_lightbox}">{lang_lightbox}</a> <br />
Paste after it:

Code: [Select]
 &raquo; <a href="{url_own_gb}">{lang_own_gb}</a><br />


Step 8a. Open ./template/YOUR TEMPLATE/member_profile.html and Find:

Code: [Select]
       <tr>
          <td class="row1"><b>{lang_comments}</b></td>
          <td class="row1">{user_comments}</td>
        </tr>

Paste after it:

Code: [Select]
<tr>
          <td class="row2"><b>{lang_user_gb_er}</b></td>
          <td class="row2">{user_gb_ein}</td>
        </tr>

        <tr>
          <td class="row1"><b>{lang_user_gb_ge}</b></td>
          <td class="row1">{user_gb_ge}</td>
        </tr>



Step 8b. Paste this at the end of your member_profile.html

Code: [Select]
<br />
<table width="100%" class=head1 cellpadding="1" cellspacing="0">
<tr>
<td><table class=row2 cellpadding="3" cellspacing="0" width=100%><tr><td align="left" width=22%>{user_gb_entry}</td><td align="center">{gb_pageing}<td align="right" width=22%></td></tr>

  <tr>
    <td colspan="3" align=center>{gb_entrys}  </td>
    </tr>
  <tr>
    <td align="left">&nbsp;</td>
    <td align="center">{gb_pageing}
    <td align="right">&nbsp;</td>
  </tr>
</table>

</td>
</tr>
</table>
<br />
<table width=450px cellpadding="1" cellspacing="0" align="center">
<tr>
<td>
<table align="center" width="100%" border="0" cellpadding="3" cellspacing="0"><form name=commentform action='?action=showprofile&ent=true&user_id={user_id}' method=post>
<tr><td class=head1 colspan=11>{head_gb}</td></tr>
<tr><td class=row1 align="center"><textarea class=input name=comment_text rows=6 cols=120></textarea>

    <br>
    {bbcode}<br>
    <input type=hidden name=user_id value={gb_id}></td></tr>
<tr><td class=row1 align="center"><input type=submit class=button value={button_send}><input type=reset class=button value={button_reset}></td></tr>
</form>
</table>
</td>
</tr>
</table>

Step 9. Download the attached file containing the 4 new files and place them in you ./template/YOUR TEMPLATE/ folder. And that should be it. An y changes to the script post here and I will test and get it updated. Hope you enjoy and thanks again b.o.fan for the original idea.

Pages: [1]