501

(10 replies, posted in PunBB 1.3 extensions)

@nhodges;

can you add the fix mentioned here http://punbb.informer.com/trac/ticket/350 and
http://punbb.informer.com/forums/post/137314/#p137314
http://punbb.informer.com/forums/post/137437/#p137437

so that when URL autodetection is enabled your extension doesn't auto parse ?

502

(35 replies, posted in PunBB 1.3 extensions)

PS: thanks for that fix; have closed the ticket on trac
http://punbb.informer.com/trac/ticket/350

Is this something people could live with?

I think it makes it clearer what PunBB is about.

People who love Linux etc love PunBB for example, cos of simplicity and lightweight.

Your opinion counts!

you get the images by going to;
http://web.archive.org/web/200712100521 … nfo/board/img/nevred/folon.jpg

style/nevred.css

[code=css]
/****************************************************************/

/* 1. IMPORTED STYLESHEETS */

/****************************************************************/



/* Import the basic setup styles */

@import url(imports/base.css);

/* Import the colour scheme */

@import url(imports/nevred_cs.css);



/****************************************************************/

/* 2. TEXT SETTINGS */

/****************************************************************/



/* 2.1 This sets the default Font Group */



.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {

    FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif

}



.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}



/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/

* HTML .pun {FONT-SIZE: 68.75%}

/* End IE Win Font Size */



/* Set font size for tables because IE requires it */

.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}



/* 2.2 Set the font-size for preformatted text i.e in code boxes */



.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}



/* 2.3 Font size for headers */



.pun H2, .pun H4 {FONT-SIZE: 1em}

.pun H3 {FONT-SIZE: 1.1em}

#brdtitle H1 {FONT-SIZE: 1.4em}



/* 2.4 Larger text for particular items */



DIV.postmsg P {LINE-HEIGHT: 1.4}

DIV.postleft DT {FONT-SIZE: 1.1em}

.pun PRE {FONT-SIZE: 1.2em}



/* 2.5 Bold text */



DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,

DIV.linksb LI, DIV.postlinksb LI, .blockmenu LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}



/****************************************************************/

/* 3. LINKS */

/****************************************************************/



/* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */



#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,

.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,

.blockmenu A:link, .blockmenu A:visited {

    TEXT-DECORATION: none

}



/* 3.2 Underline on hover for links in headers and main menu */



#brdmenu A:hover, .blockpost H2 A:hover {TEXT-DECORATION: underline}



/****************************************************************/

/* 4. BORDER WIDTH AND STYLE */

/****************************************************************/



/* 4.1 By default borders are 1px solid */



DIV.box, .pun TD, .pun TH, .pun BLOCKQUOTE, DIV.codebox, DIV.forminfo, DIV.blockpost LABEL {

    BORDER-STYLE: solid;

    BORDER-WIDTH: 1px

}



/* 4.2 Special settings for the board header. */



#brdheader DIV.box {border: 1px solid white;}



/* 4.3 Borders for table cells */



.pun TD, .pun TH {

    BORDER-BOTTOM: none;

    BORDER-RIGHT: none

}



.pun .tcl {BORDER-LEFT: none}



/* 4.4 Special setting for fieldsets to preserve IE defaults */



DIV>FIELDSET {

    BORDER-STYLE: solid;

    BORDER-WIDTH: 1px

}



/****************************************************************/

/* 5. VERTICAL AND PAGE SPACING */

/****************************************************************/



/* 5.1 Page margins */



HTML, BODY {MARGIN: 0; PADDING: 0}

#punwrap {

margin:12px 20px;}



/* 5.2 Creates vertical space between main board elements (Margins) */



DIV.blocktable, DIV.block, DIV.blockform, DIV.block2col, #postreview {MARGIN-BOTTOM: 12px}

#punindex DIV.blocktable, DIV.blockpost {MARGIN-BOTTOM: 6px}

DIV.block2col DIV.blockform, DIV.block2col DIV.block {MARGIN-BOTTOM: 0px}



/* 5.3 Remove space above breadcrumbs, postlinks and pagelinks with a negative top margin */



DIV.linkst, DIV.linksb {MARGIN-TOP: -12px}

DIV.postlinksb {MARGIN-TOP: -6px}



/* 5.4 Put a 12px gap above the board information box in index because the category tables only

have a 6px space beneath them */



#brdstats {MARGIN-TOP: 12px}



/****************************************************************/

/* 6. SPACING AROUND CONTENT */

/****************************************************************/



/* 6.1 Default padding for main items */



DIV.block DIV.inbox, DIV.blockmenu DIV.inbox {PADDING: 3px 6px}

.pun P, .pun UL, .pun DL, DIV.blockmenu LI, .pun LABEL, #announce DIV.inbox DIV {PADDING: 3px 0}

.pun H2 {PADDING: 4px 6px}



/* 6.2 Special spacing for various elements */



.pun H1 {PADDING: 3px 0px 0px 0}

#brdtitle P {PADDING-TOP: 0px}

DIV.linkst {PADDING: 8px 6px 3px 6px}

DIV.linksb, DIV.postlinksb {PADDING: 3px 6px 8px 6px}

#brdwelcome, #brdfooter DL A, DIV.blockmenu LI, DIV.rbox INPUT  {LINE-HEIGHT: 1.4em}

#viewprofile DT, #viewprofile DD {PADDING: 0 3px; LINE-HEIGHT: 2em}



/* 6.4 Create some horizontal spacing for various elements */



#brdmenu LI, DIV.rbox INPUT, DIV.blockform P INPUT  {MARGIN-RIGHT: 12px}



/****************************************************************/

/* 7. SPACING FOR TABLES */

/****************************************************************/



.pun TH, .pun TD {PADDING: 4px 6px}

.pun TD P {PADDING: 5px 0 0 0}



/****************************************************************/

/* 8. SPACING FOR POSTS */

/****************************************************************/



/* 8.1 Padding around left and right columns in viewtopic */



DIV.postleft DL, DIV.postright {PADDING: 6px}



/* 8.2 Extra spacing for poster contact details and avatar */



DD.usercontacts, DD.postavatar {MARGIN-TOP: 5px}

DD.postavatar {MARGIN-BOTTOM: 5px}



/* 8.3 Extra top spacing for signatures and edited by */



DIV.postsignature, DIV.postmsg P.postedit {PADDING-TOP: 15px}



/* 8.4 Spacing for code and quote boxes */



DIV.postmsg H4 {MARGIN-BOTTOM: 10px}

.pun BLOCKQUOTE, DIV.codebox {MARGIN: 5px 15px 15px 15px; PADDING: 8px}



/* 8.5 Padding for the action links and online indicator in viewtopic */



DIV.postfootleft P, DIV.postfootright UL, DIV.postfootright DIV {PADDING: 10px 6px 5px 6px}



/* 8.6 This is the input on moderators multi-delete view */



DIV.blockpost INPUT, DIV.blockpost LABEL {

    PADDING: 3px;

    DISPLAY: inline

}



P.multidelete {

    PADDING-TOP: 15px;

    PADDING-BOTTOM: 5px

}



/* 8.7 Make sure paragraphs in posts don't get any padding */



DIV.postmsg P {PADDING: 0}



/****************************************************************/

/* 9. SPECIAL SPACING FOR FORMS */

/****************************************************************/



/* 9.1 Padding around fieldsets */



DIV.blockform FORM, DIV.fakeform {PADDING: 20px 20px 15px 20px}

DIV.inform {PADDING-BOTTOM: 12px}



/* 9.2 Padding inside fieldsets */



.pun FIELDSET {PADDING: 0px 12px 0px 12px}

DIV.infldset {PADDING: 9px 0px 12px 0}

.pun LEGEND {PADDING: 0px 6px}



/* 9.3 The information box at the top of the registration form and elsewhere */



DIV.forminfo {

    MARGIN-BOTTOM: 12px;

    PADDING: 9px 10px

}



/* 9.4 BBCode help links in post forms */



UL.bblinks LI {PADDING-RIGHT: 20px}



UL.bblinks {PADDING-BOTTOM: 10px; PADDING-LEFT: 4px}



/* 9.5 Horizontal positioning for the submit button on forms */



DIV.blockform P INPUT {MARGIN-LEFT: 12px}



/****************************************************************/

/* 10. POST STATUS INDICATORS */

/****************************************************************/



/* 10.1 These are the post status indicators which appear at the left of some tables.

.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and

.isticky = sticky topics. By default only .inew is different from the default.*/



DIV.icon {

    FLOAT: left;

    MARGIN-TOP: 0.1em;

    MARGIN-LEFT: 0.2em;

    DISPLAY: block;

    BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;

    BORDER-STYLE: solid

}



DIV.searchposts DIV.icon {MARGIN-LEFT: 0}



/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The

margin creates space for the post status indicator */



TD DIV.tclcon {MARGIN-LEFT: 2.3em}



div.parteneri{

    text-align:center;

    padding-bottom: 3pt;

}



div.parteneri a{

    font-size:9pt;

    text-decoration:none;

    font-family:Arial, Helvetica, sans-serif;

}



.conl{

    color:#003300;

}



dl conr, dl conl{

    color: red;

}



p.pagelink{

    color:#CFC;

}



#MyHeader{
    display:block;
    border-bottom: 1px solid white;
    height: 150px;
}



div.postlinksb div.inbox li, div.linkst div.inbox li{

    color: white;

}



/* PENTRU WORDPRESS */

#sidebar{

    width: 200px;

    float: left;

    margin: 10px 10px 10px 10px;

    border: 1px solid #000000;

}



#content{

    padding: 15px;

    width: 402px;

    float: left;

    margin: 10px 0px 0px 0px;

    background: #F1F1F1;

    border: 1px solid #396AA3;

    font-size: 12px;

}

#meniu{
    display: block;
    background-image: url('/images/meniu.jpg');
    height: 25px;
    text-align: center;
    border-bottom: 1px solid #993333;
}

#meniu a{
    vertical-align: 67%;
    padding-left: 10px;
    padding-right: 10px;
    font-weight: bold;
    color: #FFFFFF;
    text-decoration: none;
}

#meniu a:hover{
    vertical-align: 58%;
    padding-left: 10px;
    padding-right: 10px;
    font-weight: bold;
    color: #FFCCCC;
    text-decoration: none;
}

#continut{
    border: 1px solid #993333;
    width: 982px;
    margin-left: auto;
    margin-right:auto;
    margin-top: 0px;
    margin-bottom:0px;
    padding: 0px;
    background-color: #630000;
    overflow: hidden;
}

img{
    border: none;
}
[/code]

style/imports/base.css

[code=css]
/****************************************************************/
/* 1. INITIAL SETTINGS */
/****************************************************************/
.pun TABLE, .pun DIV, .pun FORM, .pun P, .pun H1, .pun H2, .pun H3,
.pun H4, .pun PRE, .pun BLOCKQUOTE, .pun UL, .pun OL, .pun LI, .pun DL,
.pun DT, .pun DD, .pun TH, .pun TD, .pun FIELDSET, .pun IMG {
    MARGIN: 0px;
    PADDING: 0px;
    FONT-WEIGHT: normal;
    LIST-STYLE: none;
}
.pun IMG {BORDER: none}
.pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {MARGIN: 0}
/****************************************************************/
/* 2. STRUCTURAL SETTINGS - VERY IMPORTANT - DO NOT CHANGE */
/****************************************************************/
/* 2.1 Clearing floats and invisible items */
.pun .clearer, .pun .nosize {
    HEIGHT: 0;
    WIDTH: 0;
    LINE-HEIGHT: 0;
    FONT-SIZE: 0;
    OVERFLOW: hidden
}
.pun .clearer, .pun .clearb {CLEAR: both}
.pun .nosize {POSITION: absolute; LEFT: -10000px}
/* 2.2 Overflow settings for posts */
DIV.blockpost DIV.box, DIV.postleft, DIV.postsignature, DIV.postmsg {OVERFLOW: hidden}
/****************************************************************/
/* 3. BUG FIXES - VERY IMPORTANT - DO NOT CHANGE */
/****************************************************************/
/* 3.1 This attempts to eliminate rounding errors in Gecko browsers. */
DIV>DIV>DIV.postfootleft, DIV>DIV>DIV.postfootright {PADDING-TOP: 1px; MARGIN-TOP: -1px}
/* 3.2 This is only visible to IE6 Windows and cures various bugs. Do not alter comments */
/* Begin IE6Win Fix \*/
* HTML .inbox, * HTML .inform, * HTML .pun, * HTML .intd, * HTML .tclcon {HEIGHT: 1px}
* HTML .inbox DIV.postmsg {WIDTH: 98%}
/* End of IE6Win Fix */
/* 3.3 This is the equivelant of 3.2 but for IE7. It is visible to other browsers but does no harm */
/*Begin IE7Win Fix */
.pun, .pun .inbox, .pun .inform, .pun .intd, .pun .tclcon {min-height: 1px}
/* End of IE7Win Fix */
/****************************************************************/
/* 4. HIDDEN ELEMENTS */
/****************************************************************/
/* These are hidden in normal display. Add comments to make them visible */
#brdfooter H2, #brdstats H2, #brdstats .conl DT, #brdstats .conr DT,
#modcontrols DT, #searchlinks DT, DIV.postright H3 {
    POSITION: absolute;
    DISPLAY: block;
    OVERFLOW: hidden;
    WIDTH: 1em;
    LEFT: -999em
}
/****************************************************************/
/* 5. BOX CONTAINERS AND FLOATS */
/****************************************************************/
/* 5.1. Setup all left and right content using floats. */ 
.conr {
    FLOAT: right;
    TEXT-ALIGN: right;
    CLEAR: right;
    WIDTH: 40%
}

.conl {
    FLOAT: left;
    WIDTH: 55%;
    OVERFLOW: hidden;
    WHITE-SPACE: nowrap
}

LABEL.conl {
    WIDTH: auto;
    OVERFLOW: visible;
    MARGIN-RIGHT: 10px
}

/* 5.2 Set up page numbering and posts links */
DIV.linkst .conl, DIV.linksb .conl, DIV.postlinksb .conl {WIDTH:18em}
DIV.linkst .conr, DIV.linksb .conr, DIV.postlinksb .conr {WIDTH:16em}
FORM DIV.linksb .conr {WIDTH: 32em}
/* 5.3 Keep breadcrumbs from shifting to the right when wrapping */
.linkst UL, linksb UL, .postlinksb UL {MARGIN-LEFT: 18em}
/* 5.4 Settings for Profile and Admin interface.*/
DIV.block2col {PADDING-BOTTOM: 1px}
DIV.block2col DIV.blockform, DIV.block2col DIV.block, #viewprofile DD {MARGIN-LEFT: 14em}
DIV.blockmenu, #viewprofile DT {
    FLOAT:left;
    WIDTH: 13em
}
#profileavatar IMG {
    FLOAT: right;
    MARGIN-LEFT: 1em
}
#viewprofile DL {FLOAT: left; WIDTH: 100%; OVERFLOW: hidden}
/****************************************************************/
/* 6. TABLE SETUP */
/****************************************************************/
/* 6.1 Table Basic Setup */
.pun TABLE {WIDTH: 100%}
/* 6.2 Fixed Table Setup */
#punindex TABLE, #vf TABLE {TABLE-LAYOUT: fixed}
.tcl {TEXT-ALIGN: left;}
.tc2, .tc3, .tcmod {width: 70px; text-align: center;}
.tcr {width: 100px; text-align: center;}
#punsearch #vf .tcl, #punmoderate #vf .tcl {WIDTH: 41%}
#punsearch #vf .tc2 {WIDTH: 18%; TEXT-ALIGN: left}
.tcl, .tcr {OVERFLOW: HIDDEN}
/* 6.3 Other Table Setup */
#users1 .tcl {WIDTH: 40%}
#users1 .tcr {WIDTH: 25%}
#users1 .tc2 {WIDTH: 25%; TEXT-ALIGN: left}
#users1 .tc3 {WIDTH: 10%; TEXT-ALIGN: center}
#debug .tcr {WIDTH: 85%; WHITE-SPACE: normal}
#punindex TD.tcr SPAN.byuser {DISPLAY: block}

/****************************************************************/
/* 7. VIEWTOPIC SETUP */
/****************************************************************/
/* 7.1 This is the basic structure. */
DIV.postleft, DIV.postfootleft {
    FLOAT:left;
    WIDTH: 18em;
    OVERFLOW: hidden;
    POSITION: relative;
}
DIV.postright, DIV.postfootright {
    BORDER-LEFT-WIDTH: 18em;
    BORDER-LEFT-STYLE: solid
}
DIV.postfootright, P.multidelete {TEXT-ALIGN: right}
DIV.blockpost>DIV>DIV.inbox {PADDING-BOTTOM: 1px}
/* 7.3 This is the div which actually contains the post and is inside .postright */
DIV.postmsg {WIDTH:100%}
/* 7.4 These items control overflow and scrolling within posts. */
DIV.incqbox {WIDTH: 100%; OVERFLOW: hidden}
DIV.scrollbox {WIDTH: 100%; OVERFLOW: auto}
IMG.postimg {max-width: 100%}
A .postimg {max-width: 100%}
/* 7.5 Turn off the poster information column for preview */
#postpreview DIV.postright {BORDER-LEFT: none}
/* 7.6 Create the horizontal line above signatures */
DIV.postsignature HR {
    MARGIN-LEFT: 0px;
    WIDTH: 200px;
    TEXT-ALIGN: left;
    HEIGHT: 1px;
    BORDER:none
}
/* 7.7 Maximum height for search results as posts. Position go to post link */
DIV.searchposts DIV.postmsg {HEIGHT: 8em}
DIV.searchposts DD P {PADDING-TOP: 3em}
/* 7.8 Class for bbcode [u] */
SPAN.bbu {TEXT-DECORATION: underline}
/****************************************************************/
/* 8. LISTS SPECIAL SETTINGS */
/****************************************************************/
/* 8.1 Horizontal display of online list, main navigation menu and breadcrumbs */
#onlinelist DD, #onlinelist DT, #brdmenu LI, DIV.linkst LI, DIV.linksb LI, DIV.postlinksb LI,
DIV.postfootright LI, UL.bblinks LI {
    DISPLAY: inline;
    HEIGHT: 0
}
/* 8.2 Turn on square icon for posterror list */
#posterror UL LI {LIST-STYLE: square inside}
/* 8.3 Right alignment of descriptions in ordinary member view of other members profiles */
#viewprofile DT {TEXT-ALIGN: right}
/****************************************************************/
/* 9. FORM SETTINGS */
/****************************************************************/
/* 9.1 Makes textareas and long text inputs shrink with page */
DIV.txtarea {WIDTH: 75%}
DIV.txtarea TEXTAREA, INPUT.longinput {WIDTH: 100%}
.pun LABEL {DISPLAY: block}
#qjump SELECT {WIDTH: 50%}

/****************************************************************/
/* 10. HELP FILES AND MISC. */
/****************************************************************/
/* 10.1 Put some space between sections of the help file */
#helpfile H2 {MARGIN-TOP: 12px}
/* 10.2 Internal padding */
#helpfile DIV.box {PADDING: 10px}
/* 10.3 Other templates */
#punredirect DIV.block, #punmaint DIV.block {MARGIN: 50px 20% 12px 20%}
[/code]


style/imports/nevred_cs.css

[code=css]
/****************************************************************/
/* 1. BACKGROUND AND TEXT COLOURS */
/****************************************************************/

/* 1.1 Default background colour and text colour */

BODY {
    BACKGROUND-COLOR: #DFE6EF;
    align: center;
    background-image: url(../../img/nevred/mainbg.png);
    background-repeat:repeat;
}

.pun {COLOR: #333; width:984px;margin:auto;}

DIV.box, .pun BLOCKQUOTE, DIV.codebox, #adminconsole FIELDSET TH, .rowodd, .roweven {BACKGROUND-COLOR: #F0F5FA}
#adminconsole TD, #adminconsole TH {BORDER-COLOR: #B61D1F}

/* 1. 2 Darker background colours */

TD.tc2, TD.tc3, TD.tcmod, #postpreview, #viewprofile DD, DIV.forminfo,
#adminconsole FIELDSET TD, DIV.blockmenu DIV.box, #adstats DD {BACKGROUND-COLOR: #DFE6EF}

/* 1.3 Main headers and navigation bar background and text colour */

.pun H2, #brdmenu { background-image : url(../../img/nevred/nagl1.jpg);  COLOR: #FFF}
.pun H2{
    background-image : url(../../img/nevred/h2bg.png);
    background-repeat:repeat-x;
    COLOR: #FFF;
    text-align:center;
    padding:none;
    font-weight:bold;
}

/* 1.4 Table header rows */

.pun TH { background-image: url(../../img/nevred/nagl2.gif);}

/* 1.5 Fieldset legend text colour */

.pun LEGEND {COLOR: #B61D1F}

/* 1.6 Highlighted text for various items */

.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #333}

/****************************************************************/
/* 2. POST BACKGROUNDS AND TEXT */
/****************************************************************/

/* 2.1 This is the setup for posts. */

DIV.blockpost DIV.box, DIV.postright, DIV.postfootright {BACKGROUND-COLOR: #DFE6EF}
DIV.postright, DIV.postfootright {BORDER-LEFT-COLOR: #F0F5FA}
DIV.postleft, DIV.postfootleft, DIV.blockpost LABEL {BACKGROUND-COLOR: #F0F5FA}

/* 2.2 Background for post headers and text colour for post numbers in viewtopic */

DIV.blockpost H2 {BACKGROUND-COLOR: #B61D1F}
DIV.blockpost H2 SPAN.conr {COLOR: #B61D1F}

/* 2.3 This is the line above the signature in posts. Colour and background should be the same */

.pun HR {BACKGROUND-COLOR: #333; COLOR: #333}

/****************************************************************/
/* 3. BORDER COLOURS */
/****************************************************************/

/* 3.1 All external borders */

DIV.box {BORDER-COLOR: #B61D1F}

/* 3.2 Makes the top border of posts match the colour used for post headers */

DIV.blockpost DIV.box {BORDER-COLOR: #B61D1F #B61D1F #B61D1F}

/* 3.3 Table internal borders. By default TH is same as background so border is invisible */

.pun TD {BORDER-COLOR: #FFFFFF}
.pun TH {BORDER-COLOR: #FFFFFF}

/* 3.4 Creates the inset border for quote boxes, code boxes and form info boxes */

.pun BLOCKQUOTE, DIV.codebox, DIV.forminfo, DIV.blockpost LABEL {BORDER-COLOR: #B61D1F #B61D1F #B61D1F #B61D1F}

/* 3.5 Gecko's default fieldset borders are really nasty so this gives them a colour
without interferring with IE's rather nice default */

.pun DIV>FIELDSET {BORDER-COLOR: #B61D1F}

/****************************************************************/
/* 4. LINK COLOURS */
/****************************************************************/

/* 4.1 This is the default for all links */

.pun A:link, .pun A:visited {COLOR: #B61D1F}
.pun A:hover {COLOR: #80100F}

/* 4.2 This is the colour for links in header rows and the navigation bar */

.pun H2 A:link, .pun H2 A:visited, #brdmenu A:link, #brdmenu A:visited {COLOR: #FFF}
.pun H2 A:hover, #brdmenu A:hover {COLOR: #FFF}

/* 4.3 This is for closed topics and "hot" links */

LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #888}
LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR: #AAA}
LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #B42000}
LI.maintenancelink A:hover {COLOR: #B42000}

/****************************************************************/
/* 5. POST STATUS INDICATORS */
/****************************************************************/

/* These are the post status indicators which appear at the left of some tables.
.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
.isticky = sticky topics. The default is "icon". By default only .inew is different.*/

/*
    DIV.icon {BORDER-COLOR: #CB6767 #CB6767 #CB6767 #CB6767}
    TR.iredirect DIV.icon {BORDER-COLOR: #ACACAC #ACACAC #ACACAC #ACACAC}
    DIV.inew {BORDER-COLOR: #841212 #841212 #841212 #841212}
*/
DIV.icon {
    FLOAT: left;
    MARGIN-TOP: 0.1em;
    MARGIN-right: 0.4em;
    DISPLAY: block;
    HEIGHT: 32px;
    WIDTH: 32px;
    background-image: url(../../img/nevred/folon.jpg);
    background-color:#999999;
    background-repeat:no-repeat;
    border-color:#F0F5FA;
}
TR.iredirect DIV.icon {BORDER-COLOR: #ACACAC #ACACAC #ACACAC #ACACAC}
DIV.inew {
    FLOAT: left;
    MARGIN-TOP: 0.1em;
    MARGIN-right: 0.4em;
    DISPLAY: block;
    HEIGHT: 32px;
    WIDTH: 32px;
    background-image: url(../../img/nevred/foloff.jpg);
    background-color:#999999;
    background-repeat:no-repeat;
    border-color:#F0F5FA;
}
[/code]

You'll have to register on that board and ask.

(if you can't download pspad and create the three .css files by copy pasting...)

NOTE: It's for PunBB 1.2


Invision-board.css

[code=css]
/****************************************************************/
/* 1. IMPORTED STYLESHEETS */
/****************************************************************/

/* Import the basic setup styles */
@import url(imports/base.css);
/* Import the colour scheme */

@import url(imports/Invision-board_cs.css);

/****************************************************************/
/* 2. TEXT SETTINGS */
/****************************************************************/

/* 2.1 This sets the default Font Group */

.pun, .pun INPUT, .pun SELECT, .pun TEXTAREA, .pun OPTGROUP {
    FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}

.pun {FONT-SIZE: 11px; LINE-HEIGHT: normal}

/* IEWin Font Size only - to allow IEWin to zoom. Do not remove comments \*/
* HTML .pun {FONT-SIZE: 68.75%}
/* End IE Win Font Size */

/* Set font size for tables because IE requires it */
.pun TABLE, .pun INPUT, .pun SELECT, .pun OPTGROUP, .pun TEXTAREA, DIV.postmsg P.postedit {FONT-SIZE: 1em}

/* 2.2 Set the font-size for preformatted text i.e in code boxes */

.pun PRE {FONT-FAMILY: monaco, "Bitstream Vera Sans Mono", "Courier New", courier, monospace}

/* 2.3 Font size for headers */

.pun H2, .pun H4 {FONT-SIZE: 1em}
.pun H3 {FONT-SIZE: 1.1em}
#brdtitle H1 {FONT-SIZE: 1.4em}

/* 2.4 Larger text for particular items */

DIV.postmsg P {LINE-HEIGHT: 1.4}
DIV.postleft DT {FONT-SIZE: 1.1em}
.pun PRE {FONT-SIZE: 1.2em}

/* 2.5 Bold text */

DIV.postleft DT, DIV.postmsg H4, TD.tcl H3, DIV.forminfo H3, P.postlink, DIV.linkst LI,
DIV.linksb LI, DIV.postlinksb LI, #brdtitle H1, .pun SPAN.warntext, .pun P.warntext {FONT-WEIGHT: bold}

.blockmenu LI{FONT-WEIGHT: bold}

/****************************************************************/
/* 3. LINKS */
/****************************************************************/

.pun A:link, .pun A:visited {
text-decoration: none}
.pun A:hover {
text-decoration: underline;}

/* 3.1 Remove underlining for main menu, post header links, post links and vertical menus */

#brdmenu A:link, #brdmenu A:visited, .blockpost DT A:link, .blockpost DT A:visited, .blockpost H2 A:link,
.blockpost H2 A:visited, .postlink A:link, .postlink A:visited, .postfootright A:link, .postfootright A:visited,
.blockmenu A:link, .blockmenu A:visited {text-decoration: none;}

/* 3.2 Underline on hover for links in headers and main menu */

#brdmenu A:hover, .blockpost H2 A:hover {
text-decoration: underline;}

/****************************************************************/
/* 4. BORDER WIDTH AND STYLE */
/****************************************************************/

/* 4.1 By default borders are 1px solid */

DIV.box, .pun TD, .pun TH, .pun BLOCKQUOTE, DIV.codebox, DIV.forminfo, DIV.blockpost LABEL {
    BORDER-STYLE: solid;
    BORDER-WIDTH: 1px
}

/* 4.2 Special settings for the board header. */

/* 4.3 Borders for table cells */

.pun TD, .pun TH {
    BORDER-BOTTOM: none;
    BORDER-RIGHT: none
}

.pun TH {BORDER-TOP: none; BORDER-LEFT: none }

.pun .tcl {BORDER-LEFT: none}

/* 4.4 Special setting for fieldsets to preserve IE defaults */

DIV>FIELDSET {
    BORDER-STYLE: solid;
    BORDER-WIDTH: 1px
}

/****************************************************************/
/* 5. VERTICAL AND PAGE SPACING */
/****************************************************************/

/* 5.1 Page margins */
/*
HTML, BODY { MARGIN: 0; PADDING: 0}
*/

/* 5.2 Creates vertical space between main board elements (Margins) */

DIV.blocktable, DIV.block, DIV.blockform, DIV.block2col, #postreview {MARGIN-BOTTOM: 12px}
#punindex DIV.blocktable, DIV.blockpost {MARGIN-BOTTOM: 6px}
DIV.block2col DIV.blockform, DIV.block2col DIV.block {MARGIN-BOTTOM: 0px}

/* 5.3 Remove space above breadcrumbs, postlinks and pagelinks with a negative top margin */

DIV.linkst, DIV.linksb {MARGIN-TOP: -12px}
DIV.postlinksb {MARGIN-TOP: -6px}

/* 5.4 Put a 12px gap above the board information box in index because the category tables only
have a 6px space beneath them */

#brdstats {MARGIN-TOP: 12px}
#brdfooter{MARGIN-BOTTOM: 0px}

/****************************************************************/
/* 6. SPACING AROUND CONTENT */
/****************************************************************/

/* 6.1 Default padding for main items */


DIV.block DIV.inbox, DIV.blockmenu DIV.inbox {PADDING: 3px 6px}


.pun P, .pun UL, .pun DL, DIV.blockmenu LI, .pun LABEL, #announce DIV.inbox DIV {PADDING: 2px 0}
/*
.pun H2 {PADDING: 4px 6px}
*/
/* 6.2 Special spacing for various elements */

.pun H1 {PADDING: 3px 0px 0px 0}

#brdtitle P {PADDING-TOP: 0px}
DIV.linkst {PADDING: 8px 6px 3px 6px}
DIV.linksb, DIV.postlinksb {PADDING: 3px 6px 8px 6px}
#brdwelcome, #brdfooter DL A, DIV.blockmenu LI, DIV.rbox INPUT  {LINE-HEIGHT: 1.4em}
#viewprofile DT, #viewprofile DD {PADDING: 0 3px; LINE-HEIGHT: 2em}

/* 6.4 Create some horizontal spacing for various elements */

#brdmenu LI, DIV.rbox INPUT, DIV.blockform P INPUT  {MARGIN-RIGHT: 12px}

/****************************************************************/
/* 7. SPACING FOR TABLES */
/****************************************************************/

.pun TH, .pun TD {PADDING: 4px 6px}
.pun TD P {PADDING: 5px 0 0 0}

/****************************************************************/
/* 8. SPACING FOR POSTS */
/****************************************************************/

/* 8.1 Padding around left and right columns in viewtopic */

DIV.postleft DL, DIV.postright {PADDING: 6px}

/* 8.2 Extra spacing for poster contact details and avatar */

DD.usercontacts, DD.postavatar {MARGIN-TOP: 5px}
DD.postavatar {MARGIN-BOTTOM: 5px}

/* 8.3 Extra top spacing for signatures and edited by */

DIV.postsignature, DIV.postmsg P.postedit {PADDING-TOP: 15px}

/* 8.4 Spacing for code and quote boxes */

DIV.postmsg H4 {MARGIN-BOTTOM: 10px}
.pun BLOCKQUOTE, DIV.codebox {MARGIN: 5px 15px 15px 15px; PADDING: 8px}

/* 8.5 Padding for the action links and online indicator in viewtopic */

DIV.postfootleft P, DIV.postfootright UL, DIV.postfootright DIV {PADDING: 10px 6px 5px 6px}

/* 8.6 This is the input on moderators multi-delete view */

DIV.blockpost INPUT, DIV.blockpost LABEL {
    PADDING: 3px;
    DISPLAY: inline
}

P.multidelete {
    PADDING-TOP: 15px;
    PADDING-BOTTOM: 5px
}

/* 8.7 Make sure paragraphs in posts don't get any padding */

DIV.postmsg P {PADDING: 0}

/****************************************************************/
/* 9. SPECIAL SPACING FOR FORMS */
/****************************************************************/

/* 9.1 Padding around fieldsets */

DIV.blockform FORM, DIV.fakeform {PADDING: 20px 20px 15px 20px}
DIV.inform {PADDING-BOTTOM: 12px}

/* 9.2 Padding inside fieldsets */

.pun FIELDSET {PADDING: 0px 12px 0px 12px}
DIV.infldset {PADDING: 9px 0px 12px 0}
.pun LEGEND {PADDING: 0px 6px}

/* 9.3 The information box at the top of the registration form and elsewhere */

DIV.forminfo {
    MARGIN-BOTTOM: 12px;
    PADDING: 9px 10px
}

/* 9.4 BBCode help links in post forms */

UL.bblinks LI {PADDING-RIGHT: 20px}

UL.bblinks {PADDING-BOTTOM: 10px; PADDING-LEFT: 4px}

/* 9.5 Horizontal positioning for the submit button on forms */

DIV.blockform P INPUT {MARGIN-LEFT: 12px}

/****************************************************************/
/* 10. POST STATUS INDICATORS */
/****************************************************************/

/* 10.1 These are the post status indicators which appear at the left of some tables.
.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
.isticky = sticky topics. By default only .inew is different from the default.*/
/*
DIV.icon {
    FLOAT: left;
    MARGIN-TOP: 0.1em;
    MARGIN-LEFT: 0.2em;
    DISPLAY: block;
    BORDER-WIDTH: 0.6em 0.6em 0.6em 0.6em;
    BORDER-STYLE: solid
}
*/

div.icon {
    float: left;
    display: block;
    width:19px;
    height:15px;
}

DIV.searchposts DIV.icon {MARGIN-LEFT: 0}

/* 10.2 Class .tclcon is a div inside the first column of tables with post indicators. The
margin creates space for the post status indicator */

TD DIV.tclcon {MARGIN-LEFT: 2.3em}
[/code]

Invision-board_cs.css

[code=css]
/****************************************************************/
/* 1. BACKGROUND AND TEXT COLOURS */
/****************************************************************/

/* 1.1 Default background colour and text colour */

HTML, BODY { MARGIN: 10px; PADDING: 0;
BACKGROUND-COLOR: #ececec;
}

.pun {COLOR: #333}

.pun A:link, .pun A:visited {COLOR: #1064B0}
.pun A:hover {COLOR: #000}

.pun DIV.blockmenu LI.isactive A, #posterror LI STRONG {COLOR: #000}

.pun H2 A:link, .pun H2 A:visited, #brdmenu A:link, #brdmenu A:visited {COLOR: #fff}
.pun H2 A:hover, #brdmenu A:hover {COLOR: #fff}

.pun .postleft A:link, .pun .postleft A:visited { color:#333 }
.pun .postleft A:hover {COLOR: #1064B0}

DIV.blockpost H2 A:link, DIV.blockpost h2 A:visited{COLOR: #fff}
DIV.blockpost h2 A:hover {COLOR: #fff}


BODY #punwrap {
BACKGROUND-COLOR: #fff;
margin:auto; width: 90%;
padding:10px;
border:1px solid #072A66;
}

/* 3.1 All external borders */
DIV.box {BORDER-COLOR: #072A66}
DIV.blockpost DIV.box {BORDER-COLOR: #072A66 #072A66 #072A66}
.pun TD {BORDER-COLOR: #fff}
.pun TH {BORDER-COLOR: #fff}


#brdheader DIV.box {BORDER-TOP: 1px solid #072A66;}

.pun #brdmenu { /*BACKGROUND-COLOR: #1064B0;*/
background-image: url(../../img/Invision-board/title_cat.gif); 
border-top: 0px solid #072A66;
border-bottom: 1px solid #fff;
padding: 3px 6px;
margin:0;
}

.pun H2, DIV.blockpost H2{ /*BACKGROUND-COLOR: #1064B0;*/
padding: 5px 3px;
color:#fff;
background-image: url(../../img/Invision-board/title_cat.gif);
border-top:  1px solid #072A66;
border-left: 1px solid #072A66;
border-right:1px solid #072A66; 
border-bottom: 0px solid #fff;
}

.pun h2 span{ /*text-indent:10px;*/}

DIV.blockpost H2 SPAN.conr {background-image:none;  }


.pun #brdtitle { margin:0; padding:0;}

.pun #brdtitle h1 {padding:0; margin:0;
height: 67px; 
background-image : url(../../img/Invision-board/title_back.gif);
/*
background-repeat: no-repeat;
background-position: center;
*/
}

.pun #brdtitle h1 span { font-size: 0; text-indent: -100px;
position:relative;
color:#fff;

background-image : url(../../img/Invision-board/logo.gif);
background-repeat: no-repeat;
display:block;
height:65px;
padding:0; margin:0;
}


.pun #brdtitle p { padding: 6px;}

div.newsfoot {
padding:1px;
text-align: right;
}

/* general color */
DIV.box,  #adminconsole FIELDSET TH, .rowodd, .roweven {BACKGROUND-COLOR: #E4EAF2}
#adminconsole TD, #adminconsole TH {BORDER-COLOR:#E4EAF2}

/* 1. 2 Darker background colours */

.pun BLOCKQUOTE, DIV.codebox, DIV.forminfo { BACKGROUND-COLOR: #eee}

TD.tc2, TD.tc3, TD.tcmod, #postpreview, #viewprofile DD,
#adminconsole FIELDSET TD, DIV.blockmenu DIV.box, #adstats DD {BACKGROUND-COLOR: #E4EAF2}


/* sub title */
.pun TH.tcl ,.pun TH.tc2 ,.pun TH.tc3 ,.pun TH.tc4 ,.pun TH.tc5 ,.pun TH.tcr ,.pun TH.tcmod {
background-color : #ddd;
color: #3A4F6C;
background-image : url(../../img/Invision-board/title_sub.gif);
}

/* center color */
TD.tc2 , TD.tc3 , TD.tc4 , TD.tc5 , TD.tcmod , #postpreview , #viewprofile DD {
background-color : #f1f1f1;
color: #333;
}

.pun div.infldset TH.tcl , div.infldset TH.tc2 , div.infldset TH.tc3 , div.infldset TH.tcr {
background-image : url(../../img/Invision-board/pix.gif);
}
.pun div.infldset th.hidehead {
background-image : url(../../img/Invision-board/pix.gif);
}


/* 1.3 Main headers and navigation bar background and text colour */

/* 1.4 Table header rows */

.pun TH {BACKGROUND-COLOR: #676F63}

/* 1.5 Fieldset legend text colour */

.pun LEGEND {COLOR: #333}


/****************************************************************/
/* 2. POST BACKGROUNDS AND TEXT */
/****************************************************************/

/* 2.1 This is the setup for posts. */

DIV.blockpost DIV.box, DIV.postright, DIV.postfootright {BACKGROUND-COLOR: #f1f1f1}
DIV.postright, DIV.postfootright {BORDER-LEFT-COLOR: #E4EAF2}
DIV.postleft, DIV.postfootleft, DIV.blockpost LABEL {BACKGROUND-COLOR: #E4EAF2}


/* 2.3 This is the line above the signature in posts. Colour and background should be the same */

.pun HR {BACKGROUND-COLOR: #333; COLOR: #333}

/****************************************************************/
/* 3. BORDER COLOURS */
/****************************************************************/

/* 3.4 Creates the inset border for quote boxes, code boxes and form info boxes */

.pun BLOCKQUOTE, DIV.codebox, DIV.forminfo, DIV.blockpost LABEL {BORDER-COLOR: #ACA899 #FFF #FFF #ACA899}

/* 3.5 Gecko's default fieldset borders are really nasty so this gives them a colour
without interferring with IE's rather nice default */

.pun DIV>FIELDSET {BORDER-COLOR: #ACA899}

/****************************************************************/
/* 4. LINK COLOURS */
/****************************************************************/

/* 4.3 This is for closed topics and "hot" links */

LI.postreport A:link, LI.postreport A:visited, TR.iclosed TD.tcl A:link, TR.iclosed TD.tcl A:visited {COLOR: #444}
LI.postreport A:hover, TR.iclosed TD.tcl A:hover {COLOR:  #1064B0}
LI.maintenancelink A:link, LI.maintenancelink A:visited {COLOR: #B42000}
LI.maintenancelink A:hover {COLOR: #B42000}

/****************************************************************/
/* 5. POST STATUS INDICATORS */
/****************************************************************/

/* These are the post status indicators which appear at the left of some tables.
.inew = new posts, .iredirect = redirect forums, .iclosed = closed topics and
.isticky = sticky topics. The default is "icon". By default only .inew is different.*/
/*
DIV.icon {BORDER-COLOR: #fafafa #ccc #bbb #ccc}
TR.iredirect DIV.icon {BORDER-COLOR: #f1f1f1 #f1f1f1 #f1f1f1 #f1f1f1}
DIV.inew {BORDER-COLOR: #73C800 #51A600 #409500 #51A600}
*/

TR.iclosed Div.icon {
background-image : url(../../img/Invision-board/f_closed.gif);
}
Div.icon {
background-image : url(../../img/Invision-board/f_norm.gif);
}
TR.iredirect Div.icon {
background-image : url(../../img/Invision-board/pix.gif);
}
TR.inew Div.icon {
background-image : url(../../img/Invision-board/f_new.gif);
}
TR.isticky DIV.icon {
background-image : url(../../img/Invision-board/f_stiky.gif);
}
TR.istickynew DIV.icon {
background-image : url(../../img/Invision-board/f_stikynew.gif);
}
TR.imoved DIV.icon {
background-image : url(../../img/Invision-board/f_moved.gif);
}

/* forum cat */
.pun H2 span {
background-position : 0% 50%;
background-repeat : no-repeat;
background-image : url(../../img/Invision-board/nav_m.gif);
padding : 10px;
}
.pun H2 span.conr {
background-image : none;
color : #fff;
padding : 0;
}

/* board stats icon */
#punindex #brdstats div.box div.inbox dl.conl,
#punforum #brdstats div.box div.inbox dl.conl
{
background: transparent url(../../img/Invision-board/stats.gif) no-repeat 0% 50%;
padding-left: 32px;
}

/* offline */
.pun DIV.postfootleft p {
background : transparent url(../../img/Invision-board/p_offline.gif);
background-repeat: no-repeat;
display: block;
height : 21px;
position: relative;
margin:0; padding:0;
margin-left: 3px;
text-indent: 33px;
}

/* online */
.pun DIV.postfootleft p strong {
background : transparent url(../../img/Invision-board/p_online.gif);
background-repeat: no-repeat;
display: block;
height : 21px;
position: relative;
}
[/code]

507

(19 replies, posted in Discussions)

8k84 wrote:

I just select "unverified users" and click on Submit search.

¨

Yeah, it's just a prob if you have more than 1500-2000 entries that need to be shown...., imo

508

(35 replies, posted in PunBB 1.3 extensions)

We're using daris' extension 'GeSHi Highlight' for highlighting of code

so after 'code' you put '=xml'  or '=php' etc depending on what you're posting....

509

(35 replies, posted in PunBB 1.3 extensions)

Well done. Also on the chat moving to the bottom on your forum...
Here for anyone who wants to browse the code you mixed

[code=xml]
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">

<!--
/**
* Mp3Tag extension for PunBB forum
* Offer a new BBcode tag to play embedded MP3 files.
*
* @author Neck - http://www.eikylon.net modified by Olly http://forums.ollysguitar.com for MP3
* @license GPL - http://www.gnu.org/copyleft/gpl.html
* @package ek_videotag
*/
-->

<extension engine="1.0">
    <id>mp3tag</id>
    <title>Mp3Tag</title>
    <version>0.2.0</version>
    <description>New BBcode tag ([mp3]) to play embedded Mp3.</description>
    <author>Olly - modded for mp3 http://forums.ollysguitar.com original Neck - http://www.eikylon.net</author>
    <minversion>1.3</minversion>
    <maxtestedon>1.3.2</maxtestedon>

    <hooks>
       
        <hook id="ps_start"><![CDATA[
        $path1 = $ext_info['path'];
 
// tag handling function
function handle_mp3_tag($Mp3Uri) {
    global $forum_config, $path1;
    $match = array();

    // dirty trick to play arround do_clickable
    preg_match('`href="(.+\.mp3)"`U', stripslashes($Mp3Uri), $match);
    if(!empty($match[1])) {
        $Mp3Uri = $match[1];
    }
 
  //validate mp3 extension
  $match = array();
  preg_match('#(.+\.mp3)#U',$Mp3Uri, $match);
  if(empty($match[1])){
    return "Needs to end in .mp3";
  }
 


           $player_url     = $path . '/dewplayer-multi.swf';
           $player_bgcolor = 'ffffff';
           $player_width   = 240;
           $player_height  = 20;
           $player_param   = '?bgcolor='.$player_bgcolor.'&amp;mp3=' .$Mp3Uri;  // For more options: http://www.alsacreations.fr/?dewplayer
           $player_alternative = '<strong>Flash not detected</strong>';
     
     
     
         // display flash player
    return
        '<object type="application/x-shockwave-flash" data="'.$player_url.$player_param.'" width="'.$player_width.'" height="'.$player_height.'">'.
            '<param name="movie" value="'.$player_url.$player_param.'" />'.
            '<param name="bgcolor" value="#'.$player_bgcolor.'" />'.
        '</object>';
   
}


        ]]></hook>
        <hook id="ps_preparse_tags_start"><![CDATA[

// add our tag to the list
$tags[] = 'mp3';
$tags_opened[] = 'mp3';
$tags_closed[] = 'mp3';
$tags_inline[] = 'mp3';
$tags_trim[] = 'mp3';
// we must allow url due to do_clickable
$tags_limit_bbcode['mp3'] = array('url');

        ]]></hook>

        <hook id="ps_do_bbcode_replace"><![CDATA[

// add pattern to catch [mp3]blahblah[/mp3]
$pattern[] = '`\[mp3\]([^\[]+)\[/mp3\]`e';
$replace[] = 'handle_mp3_tag(\'$1\')';

        ]]></hook>
    </hooks>

</extension>
[/code]

510

(1 replies, posted in PunBB show off)

Sleak nice design. Very good implementation of portal aswell.

511

(20 replies, posted in PunBB 1.3 extensions)

Can you try this Ahmed:
http://punbb.informer.com/wiki/_media/p … p_bots.zip

Deleted some code ...
Am using it here aswell. It you're not being asked questions here, all is good.

EDIT: Someone should check this for me; I'm seeing warnings for a split second when page redirecting

[code=xml]
<extension engine="1.0">

    <id>pun_stop_bots</id>

    <title>Stop spam from bots New</title>

    <version>1.0.2</version>

    <description>The extension will ask some questions to prevent bot registration and posting.</description>

    <author>PunBB Development Team</author>



    <minversion>1.3</minversion>

    <maxtestedon>1.3.4</maxtestedon>



    <install><![CDATA[

//Table with questions.

if (!$forum_db->table_exists('pun_stop_bots_questions'))

{

    $schema = array(

        'FIELDS'    => array(

            'id' => array(

                'datatype'        => 'SERIAL',

                'allow_null'    => false

            ),

            'question' => array(

                'datatype'        => 'TEXT',

                'allow_null'    => false

            ),

            'answers' => array(

                'datatype'        => 'TEXT',

                'allow_null'    => false

            )

        ),

        'PRIMARY KEY'    => array('id'),

    );



    $forum_db->create_table('pun_stop_bots_questions', $schema);



    $insert_query = array(

        'INSERT'    =>    'question, answers',

        'INTO'        =>    'pun_stop_bots_questions',

        'VALUES'    =>    '\''.$forum_db->escape('Say "Hello"').'\', \''.$forum_db->escape('hello,hi').'\''

    );

    $forum_db->query_build($insert_query) or error(__FILE__, __LINE__);



    $insert_query = array(

        'INSERT'    =>    'question, answers',

        'INTO'        =>    'pun_stop_bots_questions',

        'VALUES'    =>    '\''.$forum_db->escape('What is the name of our planet?').'\', \''.$forum_db->escape('earth').'\''

    );

    $forum_db->query_build($insert_query) or error(__FILE__, __LINE__);

}

//The column for storing the id of a given question.

$forum_db->add_field('users', 'pun_stop_bots_question_id', 'INT(10) UNSIGNED', true);

$forum_db->add_field('online', 'pun_stop_bots_question_id', 'INT(10) UNSIGNED', true);

    ]]></install>

    <uninstall><![CDATA[

if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))

    unlink(FORUM_CACHE_DIR.'cache_pun_stop_bots.php');

$forum_db->drop_field('users', 'pun_stop_bots_question_id');

$forum_db->drop_field('online', 'pun_stop_bots_question_id');

$forum_db->drop_table('pun_stop_bots_questions');

    ]]></uninstall>



    <hooks>

        <hook id="fn_set_default_user_qr_get_default_user"><![CDATA[

$query['SELECT'] .= ', o.ident';

        ]]></hook>

        <hook id="rg_register_end_validation" priority="10"><![CDATA[

if (empty($errors))

{

    include $ext_info['path'].'/functions.php';

    if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))

        include FORUM_CACHE_DIR.'cache_pun_stop_bots.php';

    if (!defined('PUN_STOP_BOTS_CACHE_LOADED') || $pun_stop_bots_questions['cached'] < (time() - 43200))

    {

        pun_stop_bots_generate_cache();

        require FORUM_CACHE_DIR.'cache_pun_stop_bots.php';

    }

    if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))

        include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';

    else

        include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';



    $pun_stop_bots_true_answer = FALSE;

    if (isset($_POST['pun_stop_bots_submit']))

    {

        $query = array(

            'SELECT'    =>    'pun_stop_bots_question_id',

            'FROM'        =>    'online',

            'WHERE'        =>    'ident = \''.$forum_user['ident'].'\''

        );

        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);



        if ($forum_db->num_rows($result) > 0)

            list($question_id) = $forum_db->fetch_row($result);

        else

            message($lang_common['Bad request']);



        $answer = isset($_POST['pun_stop_bots_answer']) ? forum_trim(strtolower($_POST['pun_stop_bots_answer'])) : null;

        if (!empty($answer))

            $pun_stop_bots_true_answer = pun_stop_bots_compare_answers($answer, $question_id);

        else

            $pun_stop_bots_true_answer = FALSE;

        if (!$pun_stop_bots_true_answer)

            $new_question_id = pun_stop_bots_generate_guest_question_id();

        else

        {

            $query = array(

                'UPDATE'    =>    'online',

                'SET'        =>    'pun_stop_bots_question_id = NULL',

                'WHERE'        =>    'ident = \''.$forum_user['ident'].'\''

            );

            $forum_db->query_build($query) or error(__FILE__, __LINE__);

        }

    }

    if (!$pun_stop_bots_true_answer)

    {

        if (!isset($new_question_id))

            $new_question_id = pun_stop_bots_generate_guest_question_id();



        $forum_page['crumbs'] = array(

            array($forum_config['o_board_title'], forum_link($forum_url['index'])),

            $lang_pun_stop_bots['Stop bots question legend']

        );



        $forum_page['form_handler'] = $_SERVER['REQUEST_URI'];

        $forum_page['question'] = $pun_stop_bots_questions['questions'][$new_question_id]['question'];

        $forum_page['hidden_fields'] = $_POST;

        define('FORUM_PAGE', 'PUN_STOP_BOTS_PAGE');

        require FORUM_ROOT.'header.php';



        // START SUBST - <!-- forum_main -->

        ob_start();



        include $ext_info['path'].'/views/question_page.php';



        $tpl_temp = forum_trim(ob_get_contents());

        $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);

        ob_end_clean();

        // END SUBST - <!-- forum_main -->



        require FORUM_ROOT.'footer.php';

    }

}

        ]]></hook>

        <hook id="aop_start"><![CDATA[

include $ext_info['path'].'/functions.php';

if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))

    include FORUM_CACHE_DIR.'cache_pun_stop_bots.php';

if (!defined('PUN_STOP_BOTS_CACHE_LOADED') || $pun_stop_bots_questions['cached'] < (time() - 43200))

{

    pun_stop_bots_generate_cache();

    require FORUM_CACHE_DIR.'cache_pun_stop_bots.php';

}

        ]]></hook>

        <hook id="aop_new_section"><![CDATA[

if ($section == 'pun_stop_bots_questions')

{

    if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))

        include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';

    else

        include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';

    include $ext_info['path'].'/url/Default.php';



    $forum_page = array();

    $forum_page['errors'] = array();



    if (isset($_POST['add_question']) && !empty($pun_stop_bots_questions))

    {

        $question = forum_trim($_POST['question']);

        $answers = pun_stop_bots_prepare_answers(strtolower(forum_trim($_POST['answers'])));



        if ($question == '' || $answers == '')

            $forum_page['errors'][] = $lang_pun_stop_bots['Management err empty fields'];



        if (empty($forum_page['errors']))

        {

            $stop_bots_error = pun_stop_bots_add_question($question, $answers);

            if ($stop_bots_error !== TRUE)

                $forum_page['errors'][] = $stop_bots_error;

            else

            {

                pun_stop_bots_generate_cache();

                redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question add'].' '.$lang_admin_common['Redirect']);

            }

        }

    }

    else if (isset($_POST['update']) && !empty($pun_stop_bots_questions))

    {

        $question_id = intval(key($_POST['update']));

        if ($question_id < 1)

            message($lang_common['Bad request']);



        $question = forum_trim($_POST['question'][$question_id]);

        $answers = pun_stop_bots_prepare_answers(strtolower(forum_trim($_POST['answers'][$question_id])));



        if ($question == '' || $answers == '')

            $forum_page['errors'][] = $lang_pun_stop_bots['Management err empty fields'];



        if (empty($forum_page['errors']))

        {

            $stop_bots_error = pun_stop_bots_update_question($question_id, $question, $answers);

            if ($stop_bots_error !== TRUE)

                $forum_page['errors'][] = $stop_bots_error;

            else

            {

                pun_stop_bots_generate_cache();

                redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question add'].' '.$lang_admin_common['Redirect']);

            }

        }

    }

    else if (isset($_POST['remove']) && !empty($pun_stop_bots_questions))

    {

        $question_id = intval(key($_POST['remove']));

        if ($question_id < 1)

            message($lang_common['Bad request']);



        $stop_bots_error = pun_stop_bots_delete_question($question_id);

        if ($stop_bots_error !== TRUE)

            $forum_page['errors'][] = $stop_bots_error;

        else

        {

            pun_stop_bots_generate_cache();

            redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question remove'].' '.$lang_admin_common['Redirect']);

        }

    }



    $forum_page['crumbs'] = array(

        array($forum_config['o_board_title'], forum_link($forum_url['index'])),

        array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index'])),

        array($lang_admin_common['Settings'], forum_link($forum_url['admin_settings_setup'])),

        array($lang_pun_stop_bots['Management tab'], forum_link($forum_url['pun_stop_bots_section']))

    );

    $forum_page['form_action'] = forum_link($forum_url['pun_stop_bots_section']);

    $forum_page['csrf_token'] = generate_form_token($forum_page['form_action']);

    $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0;



    define('FORUM_PAGE_SECTION', 'settings');

    define('FORUM_PAGE', 'admin-pun_stop_bots_questions');

    require FORUM_ROOT.'header.php';



    // START SUBST - <!-- forum_main -->

    ob_start();



    include $ext_info['path'].'/views/management.php';



    $tpl_temp = forum_trim(ob_get_contents());

    $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);

    ob_end_clean();

    // END SUBST - <!-- forum_main -->



    require FORUM_ROOT.'footer.php';

}

        ]]></hook>

        <hook id="ca_fn_generate_admin_menu_new_sublink"><![CDATA[

if ($forum_user['g_id'] == FORUM_ADMIN && FORUM_PAGE_SECTION == 'settings')

{

    global $lang_pun_stop_bots;



    if (!isset($forum_url['pun_stop_bots_section']))

        include $ext_info['path'].'/url/Default.php';

    if (!isset($lang_pun_stop_bots))

    {

        if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))

            include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';

        else

            include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';

    }



    $forum_page['admin_submenu']['pun_stop_bots_questions'] = '<li class="'.((FORUM_PAGE == 'admin-pun_stop_bots_questions') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['pun_stop_bots_section']).'">'.$lang_pun_stop_bots['Management tab'].'</a></li>';

}

        ]]></hook>

        <hook id="co_common"><![CDATA[

$pun_extensions_used = array_merge(isset($pun_extensions_used) ? $pun_extensions_used : array(), array($ext_info['id']));

        ]]></hook>

        <hook id="ft_about_end" priority="10"><![CDATA[

if (!defined('PUN_EXTENSIONS_USED') && !empty($pun_extensions_used))

{

    define('PUN_EXTENSIONS_USED', 1);

    if (count($pun_extensions_used) == 1)

        echo '<p style="clear: both; ">The '.$pun_extensions_used[0].' official extension is installed. Copyright &copy; 2003&ndash;2009 <a href="http://punbb.informer.com/">PunBB</a>.</p>';

    else

        echo '<p style="clear: both; ">Currently installed <span id="extensions-used" title="'.implode(', ', $pun_extensions_used).'.">'.count($pun_extensions_used).' official extensions</span>. Copyright &copy; 2003&ndash;2009 <a href="http://punbb.informer.com/">PunBB</a>.</p>';

}

        ]]></hook>

    </hooks>

</extension>
[/code]


Originial:

[code=xml]
<!--
/**
* Pun stop bots
*
* @copyright (C) 2008-2009 PunBB
* @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
* @package pun_stop_bots
*/
-->

<extension engine="1.0">
    <id>pun_stop_bots</id>
    <title>Stop spam from bots</title>
    <version>0.2</version>
    <description>The extension will ask some questions to prevent bot registration and posting.</description>
    <author>PunBB Development Team</author>

    <minversion>1.3</minversion>
    <maxtestedon>1.3.4</maxtestedon>

    <install><![CDATA[
//Table with questions.
if (!$forum_db->table_exists('pun_stop_bots_questions'))
{
    $schema = array(
        'FIELDS'    => array(
            'id' => array(
                'datatype'        => 'SERIAL',
                'allow_null'    => false
            ),
            'question' => array(
                'datatype'        => 'TEXT',
                'allow_null'    => false
            ),
            'answers' => array(
                'datatype'        => 'TEXT',
                'allow_null'    => false
            )
        ),
        'PRIMARY KEY'    => array('id'),
    );

    $forum_db->create_table('pun_stop_bots_questions', $schema);

    $insert_query = array(
        'INSERT'    =>    'question, answers',
        'INTO'        =>    'pun_stop_bots_questions',
        'VALUES'    =>    '\''.$forum_db->escape('Say "Hello"').'\', \''.$forum_db->escape('hello,hi').'\''
    );
    $forum_db->query_build($insert_query) or error(__FILE__, __LINE__);

    $insert_query = array(
        'INSERT'    =>    'question, answers',
        'INTO'        =>    'pun_stop_bots_questions',
        'VALUES'    =>    '\''.$forum_db->escape('What is the name of our planet?').'\', \''.$forum_db->escape('earth').'\''
    );
    $forum_db->query_build($insert_query) or error(__FILE__, __LINE__);
}
//The column for storing the id of a given question.
$forum_db->add_field('users', 'pun_stop_bots_question_id', 'INT(10) UNSIGNED', true);
$forum_db->add_field('online', 'pun_stop_bots_question_id', 'INT(10) UNSIGNED', true);
    ]]></install>
    <uninstall><![CDATA[
if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))
    unlink(FORUM_CACHE_DIR.'cache_pun_stop_bots.php');
$forum_db->drop_field('users', 'pun_stop_bots_question_id');
$forum_db->drop_field('online', 'pun_stop_bots_question_id');
$forum_db->drop_table('pun_stop_bots_questions');
    ]]></uninstall>

    <hooks>
        <hook id="fn_set_default_user_qr_get_default_user"><![CDATA[
$query['SELECT'] .= ', o.ident';
        ]]></hook>
        <hook id="rg_register_end_validation" priority="10"><![CDATA[
if (empty($errors))
{
    include $ext_info['path'].'/functions.php';
    if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))
        include FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
    if (!defined('PUN_STOP_BOTS_CACHE_LOADED') || $pun_stop_bots_questions['cached'] < (time() - 43200))
    {
        pun_stop_bots_generate_cache();
        require FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
    }
    if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
        include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
    else
        include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';

    $pun_stop_bots_true_answer = FALSE;
    if (isset($_POST['pun_stop_bots_submit']))
    {
        $query = array(
            'SELECT'    =>    'pun_stop_bots_question_id',
            'FROM'        =>    'online',
            'WHERE'        =>    'ident = \''.$forum_user['ident'].'\''
        );
        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

        if ($forum_db->num_rows($result) > 0)
            list($question_id) = $forum_db->fetch_row($result);
        else
            message($lang_common['Bad request']);

        $answer = isset($_POST['pun_stop_bots_answer']) ? forum_trim(strtolower($_POST['pun_stop_bots_answer'])) : null;
        if (!empty($answer))
            $pun_stop_bots_true_answer = pun_stop_bots_compare_answers($answer, $question_id);
        else
            $pun_stop_bots_true_answer = FALSE;
        if (!$pun_stop_bots_true_answer)
            $new_question_id = pun_stop_bots_generate_guest_question_id();
        else
        {
            $query = array(
                'UPDATE'    =>    'online',
                'SET'        =>    'pun_stop_bots_question_id = NULL',
                'WHERE'        =>    'ident = \''.$forum_user['ident'].'\''
            );
            $forum_db->query_build($query) or error(__FILE__, __LINE__);
        }
    }
    if (!$pun_stop_bots_true_answer)
    {
        if (!isset($new_question_id))
            $new_question_id = pun_stop_bots_generate_guest_question_id();

        $forum_page['crumbs'] = array(
            array($forum_config['o_board_title'], forum_link($forum_url['index'])),
            $lang_pun_stop_bots['Stop bots question legend']
        );

        $forum_page['form_handler'] = $_SERVER['REQUEST_URI'];
        $forum_page['question'] = $pun_stop_bots_questions['questions'][$new_question_id]['question'];
        $forum_page['hidden_fields'] = $_POST;
        define('FORUM_PAGE', 'PUN_STOP_BOTS_PAGE');
        require FORUM_ROOT.'header.php';

        // START SUBST - <!-- forum_main -->
        ob_start();

        include $ext_info['path'].'/views/question_page.php';

        $tpl_temp = forum_trim(ob_get_contents());
        $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
        ob_end_clean();
        // END SUBST - <!-- forum_main -->

        require FORUM_ROOT.'footer.php';
    }
}
        ]]></hook>
        <hook id="po_form_submitted"><![CDATA[
if (!$forum_page['is_admmod'] && !isset($_POST['preview']))
{
    include $ext_info['path'].'/functions.php';
    if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))
        include FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
    if (!defined('PUN_STOP_BOTS_CACHE_LOADED') || $pun_stop_bots_questions['cached'] < (time() - 43200))
    {
        pun_stop_bots_generate_cache();
        require FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
    }
    if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
        include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
    else
        include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';

    $pun_stop_bots_true_answer = FALSE;
    //Check up the cookie.
    if (isset($_COOKIE[PUN_STOP_BOTS_COOKIE_NAME]))
        $pun_stop_bots_true_answer = pun_stop_bots_check_cookie();
    //Check up the entered question.
    else if (isset($_POST['pun_stop_bots_submit']))
    {
        $query = array(
            'SELECT'    =>    'pun_stop_bots_question_id',
            'FROM'        =>    $forum_user['is_guest'] ? 'online' : 'users',
            'WHERE'        =>    $forum_user['is_guest'] ? 'ident = \''.$forum_user['ident'].'\'' : 'id = '.$forum_user['id']
        );
        $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

        if ($forum_db->num_rows($result) > 0)
            list($question_id) = $forum_db->fetch_row($result);
        else
            message($lang_common['Bad request']);

        $answer = isset($_POST['pun_stop_bots_answer']) ? forum_trim(strtolower($_POST['pun_stop_bots_answer'])) : null;
        if (!empty($answer))
            $pun_stop_bots_true_answer = pun_stop_bots_compare_answers($answer, $question_id);
        else
            $pun_stop_bots_true_answer = FALSE;
        //Generate new question in case of incorrect answer.
        if (!$pun_stop_bots_true_answer)
            $new_question_id = $forum_user['is_guest'] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();
    }
    //If it is a user and answer is correct set new cookie.
    if (!$forum_user['is_guest'] && !isset($_COOKIE[PUN_STOP_BOTS_COOKIE_NAME]) && $pun_stop_bots_true_answer)
    {
        $new_question_id = $forum_user['is_guest'] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();
        pun_stop_bots_set_cookie($new_question_id);
    }
    else if ($forum_user['is_guest'] && $pun_stop_bots_true_answer)
    {
        $query = array(
            'UPDATE'    =>    'online',
            'SET'        =>    'pun_stop_bots_question_id = NULL',
            'WHERE'        =>    'ident = \''.$forum_user['ident'].'\''
        );
        $forum_db->query_build($query) or error(__FILE__, __LINE__);
    }
    else if (!$pun_stop_bots_true_answer)
    {
        //If it is first request of the page, we need to generate new question.
        if (!isset($new_question_id))
            $new_question_id =  $forum_user['is_guest'] ? pun_stop_bots_generate_guest_question_id() : pun_stop_bots_generate_user_question_id();

        $forum_page['crumbs'] = array(
            array($forum_config['o_board_title'], forum_link($forum_url['index'])),
            $lang_pun_stop_bots['Stop bots question legend']
        );

        $forum_page['form_handler'] = $_SERVER['REQUEST_URI'];
        $forum_page['question'] = $pun_stop_bots_questions['questions'][$new_question_id]['question'];
        $forum_page['hidden_fields'] = $_POST;

        define('FORUM_PAGE', 'pun_stop_bots_page');
        require FORUM_ROOT.'header.php';

        // START SUBST - <!-- forum_main -->
        ob_start();

        include $ext_info['path'].'/views/question_page.php';

        $tpl_temp = forum_trim(ob_get_contents());
        $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
        ob_end_clean();
        // END SUBST - <!-- forum_main -->

        require FORUM_ROOT.'footer.php';
    }
}
        ]]></hook>
        <hook id="aop_start"><![CDATA[
include $ext_info['path'].'/functions.php';
if (file_exists(FORUM_CACHE_DIR.'cache_pun_stop_bots.php'))
    include FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
if (!defined('PUN_STOP_BOTS_CACHE_LOADED') || $pun_stop_bots_questions['cached'] < (time() - 43200))
{
    pun_stop_bots_generate_cache();
    require FORUM_CACHE_DIR.'cache_pun_stop_bots.php';
}
        ]]></hook>
        <hook id="aop_new_section"><![CDATA[
if ($section == 'pun_stop_bots_questions')
{
    if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
        include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
    else
        include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';
    include $ext_info['path'].'/url/Default.php';

    $forum_page = array();
    $forum_page['errors'] = array();

    if (isset($_POST['add_question']) && !empty($pun_stop_bots_questions))
    {
        $question = forum_trim($_POST['question']);
        $answers = pun_stop_bots_prepare_answers(strtolower(forum_trim($_POST['answers'])));

        if ($question == '' || $answers == '')
            $forum_page['errors'][] = $lang_pun_stop_bots['Management err empty fields'];

        if (empty($forum_page['errors']))
        {
            $stop_bots_error = pun_stop_bots_add_question($question, $answers);
            if ($stop_bots_error !== TRUE)
                $forum_page['errors'][] = $stop_bots_error;
            else
            {
                pun_stop_bots_generate_cache();
                redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question add'].' '.$lang_admin_common['Redirect']);
            }
        }
    }
    else if (isset($_POST['update']) && !empty($pun_stop_bots_questions))
    {
        $question_id = intval(key($_POST['update']));
        if ($question_id < 1)
            message($lang_common['Bad request']);

        $question = forum_trim($_POST['question'][$question_id]);
        $answers = pun_stop_bots_prepare_answers(strtolower(forum_trim($_POST['answers'][$question_id])));

        if ($question == '' || $answers == '')
            $forum_page['errors'][] = $lang_pun_stop_bots['Management err empty fields'];

        if (empty($forum_page['errors']))
        {
            $stop_bots_error = pun_stop_bots_update_question($question_id, $question, $answers);
            if ($stop_bots_error !== TRUE)
                $forum_page['errors'][] = $stop_bots_error;
            else
            {
                pun_stop_bots_generate_cache();
                redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question add'].' '.$lang_admin_common['Redirect']);
            }
        }
    }
    else if (isset($_POST['remove']) && !empty($pun_stop_bots_questions))
    {
        $question_id = intval(key($_POST['remove']));
        if ($question_id < 1)
            message($lang_common['Bad request']);

        $stop_bots_error = pun_stop_bots_delete_question($question_id);
        if ($stop_bots_error !== TRUE)
            $forum_page['errors'][] = $stop_bots_error;
        else
        {
            pun_stop_bots_generate_cache();
            redirect(forum_link($forum_url['pun_stop_bots_section']), $lang_pun_stop_bots['Management question remove'].' '.$lang_admin_common['Redirect']);
        }
    }

    $forum_page['crumbs'] = array(
        array($forum_config['o_board_title'], forum_link($forum_url['index'])),
        array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index'])),
        array($lang_admin_common['Settings'], forum_link($forum_url['admin_settings_setup'])),
        array($lang_pun_stop_bots['Management tab'], forum_link($forum_url['pun_stop_bots_section']))
    );
    $forum_page['form_action'] = forum_link($forum_url['pun_stop_bots_section']);
    $forum_page['csrf_token'] = generate_form_token($forum_page['form_action']);
    $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0;

    define('FORUM_PAGE_SECTION', 'settings');
    define('FORUM_PAGE', 'admin-pun_stop_bots_questions');
    require FORUM_ROOT.'header.php';

    // START SUBST - <!-- forum_main -->
    ob_start();

    include $ext_info['path'].'/views/management.php';

    $tpl_temp = forum_trim(ob_get_contents());
    $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
    ob_end_clean();
    // END SUBST - <!-- forum_main -->

    require FORUM_ROOT.'footer.php';
}
        ]]></hook>
        <hook id="ca_fn_generate_admin_menu_new_sublink"><![CDATA[
if ($forum_user['g_id'] == FORUM_ADMIN && FORUM_PAGE_SECTION == 'settings')
{
    global $lang_pun_stop_bots;

    if (!isset($forum_url['pun_stop_bots_section']))
        include $ext_info['path'].'/url/Default.php';
    if (!isset($lang_pun_stop_bots))
    {
        if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
            include $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
        else
            include $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';
    }

    $forum_page['admin_submenu']['pun_stop_bots_questions'] = '<li class="'.((FORUM_PAGE == 'admin-pun_stop_bots_questions') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['pun_stop_bots_section']).'">'.$lang_pun_stop_bots['Management tab'].'</a></li>';
}
        ]]></hook>
        <hook id="co_common"><![CDATA[
$pun_extensions_used = array_merge(isset($pun_extensions_used) ? $pun_extensions_used : array(), array($ext_info['id']));
        ]]></hook>
        <hook id="ft_about_end" priority="10"><![CDATA[
if (!defined('PUN_EXTENSIONS_USED') && !empty($pun_extensions_used))
{
    define('PUN_EXTENSIONS_USED', 1);
    if (count($pun_extensions_used) == 1)
        echo '<p style="clear: both; ">The '.$pun_extensions_used[0].' official extension is installed. Copyright &copy; 2003&ndash;2009 <a href="http://punbb.informer.com/">PunBB</a>.</p>';
    else
        echo '<p style="clear: both; ">Currently installed <span id="extensions-used" title="'.implode(', ', $pun_extensions_used).'.">'.count($pun_extensions_used).' official extensions</span>. Copyright &copy; 2003&ndash;2009 <a href="http://punbb.informer.com/">PunBB</a>.</p>';
}
        ]]></hook>
    </hooks>
</extension>
[/code]

512

(75 replies, posted in Supported extensions)

Ahmed wrote:

I am experiencing spam bots attack

How many registrations a day?
How many unverified registrations a day?
How many posts of spammers a day?
Have you tried stopforumspam extension? and/or URL checker extension? (or the combined extension)

But I can confirm the signatures is working perfectly. Just noticed a user registering, googled username, saw that on other page he puts link to "example.com" - checked the list to see if I had that URL on it. I did.  2 minutes later I checked back, user gone big_smile Went to admin panel and saw info about deleted.... love it when it works. Just need more URLs and a realtime query possibility...

514

(19 replies, posted in Discussions)

Audiofeeline wrote:

Giving an option to choose time would be intersting too. 

I personally would give them 12 hours tongue

Also I think the cracking bots can just try endlesly to register, once they succeed they'll receive the email and send another simpler bot to do the registration completion process... (speculation of mine anyway cos I see a ALTUSHOST IP every day for weeks - and others... but those never register!)

515

(19 replies, posted in Discussions)

I was just trying to clean up some of the bot entries when I came across a rather disturbing couple of things

  • There were over 10'000 unverified users here

  • It's not possible to select more than 1'500 at a time (search returns a blank page)

  • It's not possible to search and filter more than about 2'000 entries at a time (search returns a blank page)

  • There doesn't seem to be an IP entry for those unverified users? (At least not via admin section) EDIT: Was wrong; you just need to click on username and you're shown the profile with IP

It was however possible to narrow down the search to 15 or 30 or 60 days days filtering only unverified registrations to get a list correctly shown and deletable.

This is also important to know for those admins changing settings, adding different CAPTCHAs or asking bot questions: There are potentially thousands of unverified users that can appear even after your new security measures are in place. All the bot herder needs to do is activate with his already received confirmation link.


Conclusion:

  • Any unregistered user should be auto-deleted after 7 days IMO. In the core.

  • Admins should search for unverified users and delete regularly in the meantime

  • Pruning the unverified users is very effective!

  • Go to Administration » Users » Searches and select unverified users *submit* - then prune those regularly.

PS: Added to http://punbb.informer.com/trac/ticket/355

516

(2 replies, posted in PunBB show off)

shaheart wrote:

If you do not know what trials biking is, here is a video to show you.
http://vimeo.com/11657339

Why don't you embed the videos on your site. Give people a reason to come to your site that way.

Second: Register on youtube and post a comment underneath the cool bike vidz saying that you've just started a forum...etc etc... that's where your audience is.... (at least one place)

What version are you using?
What does it say in field user for the caught one?

Is this your own server? Or are you paying a host (and support) ?
Let us know when and if you get it sorted.

519

(5 replies, posted in PunBB 1.3 extensions)

Why not just allow guest posting for the "anonymous" forum (and moderate posts via pun_approval to catch the spam).
[Unless you expect users to very active in there and thus annoyed if they have to login-logout enter details all the time]

520

(9 replies, posted in PunBB 1.3 extensions)

Thanks, nice job! Would you need hooks added to PunBB that aren't currently in there to be able to make your extension completely one-click install?

Just wondering; @(extension) developers whether all this could be done via the manifest:



#
#---------[ 1. UPLOAD ]-------------------------------------------------------
#

123flashchat.php  to /
login_chat.php    to /
pun_123flashchat  to /extensions/


#
#---------[ 2. OPEN ]---------------------------------------------------------
#

index.php


#
#---------[ 3. FIND (line: 358) ]---------------------------------------------
#

    <?php endif; ($hook = get_hook('in_new_online_data')) ? eval($hook) : null; ?>
    </div>


#
#---------[ 4. AFTER, ADD ]-------------------------------------------------
#

    <!--123 flash chat code start -->
    <?php ($hook = get_hook('topcmm_chat')) ? eval($hook) : null; ?>
    <!--123 flash chat code end -->


#
#---------[ 5. OPEN ]---------------------------------------------------------
#

header.php


#
#---------[ 6. FIND (line: 173) ]---------------------------------------------
#

        $gen_elements['<!-- forum_navlinks -->'] = '<ul>'."\n\t\t".generate_navlinks()."\n\t".'</ul>';


#
#---------[ 7. AFTER, ADD ]---------------------------------------------------
#

        //123 flash chat code start
         ($hook = get_hook('topcmm_chatlink')) ? eval($hook) : null;
        //123 flash chat code end

http://punbb.informer.com/forums/topic/ … on-images/

http://punbb.informer.com/forums/topic/ … xtensions/

or

http://punbb.informer.com/forums/post/136237/#p136237

alice wrote:

I suggest 123flashchat

Your posting from the same IP a user with name 123flashchat registered. Also you posted no link to a working PunBB board plug-in. And thirdly you're offering a commercial version chat when KANekT has a working free solution; http://forum.kanekt.ru

Have you contacted your hosting support?

(Basically your db needs to be repaired, and they're the ones who can do so best)

It's good if you keep it for download on your server aswell. I just upload to wiki for backup.
Numbering is just detail. Also it's good if you always keep the download link the same; so
http://rs324.s3.amazonaws.com/PunBB/punbb_wysiwyg.rar  instead of
http://rs324.s3.amazonaws.com/PunBB/pun … wyg0.2.rar
but that's up to you - maybe you want one light version and one full

Only thing I noticed "bug" wise, is that
- on left side there's a border
- it doesn't warn to turn off pun_bbcode (so one has both showing smile ) - but that's not a real bug
- and the smilies are there twice (indirectly via dropdown, then on second line all)

All functions are working as wanted for me in chrome - so I'm happy...

Also many other users have been wanting something like this, so your work is appreciated greatly