0 && ($i%$size)==0) { $j++; } $retval[$j][$i%$size] = (empty($array[$i])) ? $fill : $array[$i]; } } return $retval; } // }}} function authorized() { // {{{ global $config; $r=$u=$p=$a=false; $remember = ( linkex::get( 'remember', $_REQUEST, 0 ) == 1 ); if ( ( $u = linkex::get( 'username', $_POST, false ) ) && ( $p = linkex::get( 'password', $_POST, false ) ) ) { $r=true; } else if ( $a = linkex::get( '_authcookie', $_SESSION, false ) ) { $r=false; } else if ( $a = linkex::get( '_authcookie', $_COOKIE, false ) ) { $remember=true; $r=false; } $path = dirname( linkex::get( 'SCRIPT_NAME', $_SERVER, '/' ) ); if ( ( $u !== false && $p !== false ) || ( $a !== false ) ) { if ( md5( $u .'---'. $p ) == $config->password || $a == $config->password ) { $_SESSION['_authcookie'] = $config->password; if ( $remember ) { setcookie( '_authcookie', $config->password, time()+60*60*24*30, $path ); } if ( $r ) { linkex::redirect( $_SERVER['REQUEST_URI'] ); } return true; } else { setcookie( '_authcookie', '', time() - 3600, $path ); unset( $_SESSION['_authcookie'] ); return false; } } else { setcookie( '_authcookie', '', time() - 3600, $path ); unset( $_SESSION['_authcookie'] ); return false; } } // }}} function buildquery( $array ) { // {{{ $retval = array(); foreach( $array AS $k=>$v ) { $retval[] = urlencode( $k ).'='.urlencode( $v ); } return join( '&', $retval ); } // }}} function categories( $all = false, $checkslots=false ) { // {{{ $categories = array(); $cids = linkex::listfiles( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'categories' . DIRECTORY_SEPARATOR ); foreach( $cids AS $cid ) { $c = new category( $cid ); if ( ( $all || $c->public == 1 ) && ( !$checkslots || ( $checkslots && $c->slots > 0 && $c->links() < $c->slots ) ) ) { $categories{ $cid } = $c->name; } unset( $c ); } return $categories; } // }}} function compareIPs( $a, $b ) { // {{{ a can be 127., 127.0, 127.0.0, 127.0.0.1, or a hostname if ( !preg_match( '/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/', $a ) ) { $a = linkex::gethostbyname( $a ); } if ( !preg_match( '/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/', $b ) ) { $b = linkex::gethostbyname( $b ); } $a = explode( '.', $a ); $b = explode( '.', $b ); for( $i=0; $ilinkbotdisregardwww == 1 ) { $a = str_replace( 'www.', '', $a ); $b = str_replace( 'www.', '', $b ); } if ( $config->linkbotignoretrailingslash == 1 ) { $a = rtrim( $a, '/' ); $b = rtrim( $b, '/' ); } return strcmp( $a, $b ); } // }}} function checkbox( $val ) { // {{{ return ( intval( $val ) != 0 ) ? 'checked="checked"':''; } // }}} function du( $dir ) { // {{{ $s = @stat( $dir ); $space = linkex::get( 'size', $s, 0 ); if ( is_dir( $dir ) ) { $dh = opendir( $dir ); while ( ( $file = readdir( $dh ) ) !== false ) { if ( !in_array( $file, array( '.', '..' ) ) ) { $space += linkex::du( rtrim( $dir, '/' ) .'/'. $file ); } } closedir( $dh ); } return $space; } // }}} function elapsed( $seconds ) { // {{{ $retval = array( 'Y' => 0, 'm' => 0, 'd' => 0, 'H' => 0, 'i' => 0, 's' => 0, 'nice' => '' ); // Years ( 60*60*24*365 ) = 31536000 seconds if ( $seconds > 31536000 ) { $retval{'Y'} = floor( $seconds / 31536000 ); $seconds = $seconds - ( $retval{'Y'} * 31536000 ); $retval{'nice'} = $retval{'Y'} . ' year' . ( $retval{'Y'}>1?'s':'' ); } // Months ( 60*60*24*30 ) = 2592000 if ( $seconds > 2592000 ) { $retval{'m'} = floor( $seconds / 2592000 ); $seconds = $seconds - ( $retval{'m'} * 2592000 ); $retval{'nice'} .= ( strlen( $retval{'nice'} ) > 0 ? ', ':'' ) . $retval{'m'} . ' month' . ( $retval{'m'}>1?'s':'' ); } // Days ( 60*60*24 ) = 86400 if ( $seconds > 86400 ) { $retval{'d'} = floor( $seconds / 86400 ); $seconds = $seconds - ( $retval{'d'} * 86400 ); $retval{'nice'} .= ( strlen( $retval{'nice'} ) > 0 ? ', ':'' ) . $retval{'d'} . ' day' . ( $retval{'d'}>1?'s':'' ); } // Hours ( 60*60 ) = 3600 if ( $seconds > 3600 ) { $retval{'H'} = floor( $seconds / 3600 ); $seconds = $seconds - ( $retval{'H'} * 3600 ); $retval{'nice'} .= ( strlen( $retval{'nice'} ) > 0 ? ', ':'' ) . $retval{'H'} . ' hour' . ( $retval{'H'}>1?'s':'' ); } // Minutes ( 60 ) = 60 if ( $seconds > 60 ) { $retval{'i'} = floor( $seconds / 60 ); $seconds = $seconds - ( $retval{'i'} * 60 ); $retval{'nice'} .= ( strlen( $retval{'nice'} ) > 0 ? ', ':'' ) . $retval{'i'} . ' minute' . ( $retval{'i'} > 1 ? 's':'' ); } // Seconds 0 if ( $seconds >= 0 ) { $retval{'s'} = $seconds; $retval{'nice'} .= ( strlen( $retval{'nice'} ) > 0 ? ', ':'' ) . $retval{'s'} . ' second' . ( $retval{'s'}>1?'s':'' ); } return $retval; } // }}} function expandlink( $link, $baseurl ) { // {{{ preg_match( "'^[^\?]+'", $baseurl.'/', $res ); $res = preg_replace( "|/[^\/\.]+\.[^\/\.]+$|", '', $res[0] ); $res = rtrim( $res, '/' ); if ( ( $root = @parse_url( $res ) ) ) { $root = $root['scheme'] .'://'. $root['host']; } else { // fixme // die( 'Unable to parse: '.$res ); $root = 'http://'; } $search = array( "|^(\/)|i", "|^(?!http://)(?!mailto:)|i", "|/\./|", "|/[^\/]+/\.\./|" ); $replace = array( $root .'/', $res . '/', '/', '/' ); return preg_replace( $search, $replace, $link ); } // }}} function fetch( $url, $params=array() ) { // {{{ global $config; if ( ( $host = @parse_url( $url ) ) && linkex::get( 'host', $host, false ) !== false ) { $po = linkex::get( 'port', $host, '80' ); $ho = linkex::get( 'host', $host, '' ); $pa = linkex::get( 'path', $host ); $pa = ( strlen( $pa ) == 0 ) ? '/':$pa; $qu = linkex::get( 'query', $host, '' ); $pa.= ( strlen( $qu ) == 0 ) ? '':'?'.$qu; $ua = linkex::get( 'agent', $params, $config->linkbotagent ); $h = array(); $h[]= linkex::get( 'method', $params, 'GET' ).' '.$pa.' HTTP/1.0'; $h[]= 'Host: '.$ho; $h[]= 'User-Agent: '.$ua; $h[]= 'Connection: close'; if ( linkex::get( 'method', $params, 'GET' ) == 'POST' && strlen( linkex::get( 'data', $params, '' ) ) > 0 ) { $h[]= 'Content-Length: '.strlen( linkex::get( 'data', $params, '' ) ); $h[] = 'Content-Type: application/x-www-form-urlencoded'; } $header = join( "\r\n", $h ) . "\r\n\r\n"; if ( ( $data = linkex::get( 'data', $params, false ) ) !== false ) { $header .= $data; } $buffer = ''; $fp = @fsockopen ( $ho, $po, $errno, $error, linkex::get( 'timeout', $params, 3 ) ); if ( !$fp ) { return array( 'URL' => $url, 'error' => 'Socket error: '.$error.' ['.$errno.']' ); } else { fputs( $fp, $header ); while( !feof( $fp ) ) { $buffer .= fgets( $fp, 1024 ); } fclose( $fp ); /// buffer holder nu hele resultatet, incl headers etc if ( preg_match( '/^HTTP\/(\d+\.\d+)\s+(\d{3})\s+(.*)/i', $buffer, $res ) === false ) { return array( 'URL' => $url, 'error' => 'Invalid HTTP response ('.substr( $buffer,0,30).')' ); } else { switch ( $res[2] ) { case 200: /// ok /// strip off the headers $res = explode( "\n\n", str_replace( chr( 13 ), '', $buffer ) ); if ( sizeof( $res ) >= 2 ) { $headers = array_shift( $res ); if ( function_exists( 'utf8_encode' ) ) { $contents = utf8_encode( join( "\n\n", $res ) ); } else { $contents = join( "\n\n", $res ); } return array( 'URL' => $url, 'headers' => $headers, 'contents' => $contents ); } else { return array( 'URL' => $url, 'contents' => utf8_encode( $buffer ) ); } break; case 301: case 302: /// maybe redirect? if ( !preg_match( '/location\:\s+(.*)/i', $buffer, $redir ) ) { return array( 'URL' => $url, 'error' => $res[2].' but no redirect' ); } else { $url = $redir[1]; if ( !preg_match( '"^http"i', $url ) ) { $url = 'http://'.$ho.'/'.ltrim( $url, '/' ); } if ( ( $h = @parse_url( $url ) ) === false ) { return array( 'URL' => $url, 'error' => $res[2].' but unparsable URL' ); } else { if ( str_replace( 'www.', '', strtolower( linkex::get( 'host', $h, '' ) ) ) != str_replace( 'www.','', strtolower( $ho ) ) ) { return array( 'URL' => $url, 'error' => $res[2].' but to external site ('.$h{'host'}.')' ); } else { return linkex::fetch( trim( $url ) ); } } } break; default: /// not good return array( 'URL' => $url, 'error' => $res[2].' '.trim( $res[3] ) ); break; } } } } else { return array( 'URL' => $url, 'error' => 'Unparsable URL' ); } } // }}} function fileget( $file, $default=null ) { // {{{ if ( file_exists( $file ) ) { if ( $fp = @fopen( $file, 'r' ) ) { $locked = ( @flock( $fp, LOCK_EX ) ) ? true:false; // $default = fread( $fp, filesize( $file ) ); $default = ''; while ( !feof( $fp ) ) { $default .= fread( $fp, 1024*1024 ); } if ( $locked ) { @flock( $fp, LOCK_UN ); } fclose( $fp ); } } return $default; } // }}} function fileput( $file, $con ) { // {{{ if ( $fp = @fopen( $file, 'w' ) ) { $locked = ( @flock( $fp, LOCK_EX ) ) ? true:false; $default = fwrite( $fp, $con ); //, strlen( $con ) ); if ( $locked ) { @flock( $fp, LOCK_UN ); } @fclose( $fp ); return ( intval( $default ) > 0 ); } else { return false; } } // }}} function flush() { // {{{ echo str_pad('',4096)."\n"; flush(); usleep( 500000 ); } // }}} function genID() { // {{{ $id = linkex::fileget( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR .'uid' ); $id++; linkex::fileput( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR .'uid', $id ) or die( "[Fatal Error: Unable to write to UID file]" ); return $id; } // }}} function get( $key, $array, $default=null ) { // {{{ if ( is_array( $array ) && in_array( $key, array_keys( $array ) ) ) { $default = $array{ $key }; } return $default; } // }}} function getDomain( $var ) { // {{{ $var = strtolower( $var ); if ( ( $pos = strpos( $var, '@' ) ) !== false ) { // Email $domain = substr( $var, $pos + 1 ); } else { // URL $domain = @parse_url( $var ); $domain = linkex::get( 'host', $domain, 'unparseable' ); } return $domain; } // }}} function gethostbyname( $dom, $force=false ) { // {{{ $dom = strtolower( trim( $dom ) ); $data = array(); if ( file_exists( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'ips' ) && ( $data = linkex::fileget( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'ips' ) ) && ( $data = linkex::unserialize( $data ) ) ) { if ( ( $force === false ) && ( $ipinfo = linkex::get( $dom, $data, false ) ) !== false && ( time() - linkex::get( 'date', $ipinfo, 0 ) ) < 604800 && ( $ip = linkex::get( 'ip', $ipinfo, false ) ) !== false ) { unset( $data ); return $ip; } } $ip = gethostbyname( $dom ); $data{ $dom } = array( 'date' => time(), 'ip' => $ip ); linkex::fileput( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'ips', trim( serialize( $data ) ) ); unset( $data ); return $ip; } // }}} function getLinks( $str, $baseurl ) { // {{{ $thisdom = linkex::getDomain( $baseurl ); preg_match_all( "'<\s*a.*>(.*)<\s*/\s*a\s*>'Umis", $str, $res ); $links = array(); for( $i=0; $i' ); } $retval = ''; for($i=$pos+$d;$i0 && $haystack{$i-1} == '\\' ) );$retval.=$haystack{$i}, $i++ ) {} foreach( $end AS $c ) { $retval = str_replace( '\\'.$c, $c, $retval ); } return $retval; } else { return $default; } } /// }}} function glob( $dir, $regex ) { // {{{ $files = array(); if ( $d = @opendir( $dir ) ) { while ( false !== ( $file = readdir( $d ) ) ) { if ( preg_match( '|' . $regex . '|i', $file ) ) { $files[] = $file; } } } return $files; } // }}} function installed() { // {{{ return ( is_dir( BASEDIR . DIRECTORY_SEPARATOR .'data' ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'categories' . DIRECTORY_SEPARATOR ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'blacklist' . DIRECTORY_SEPARATOR ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'links' . DIRECTORY_SEPARATOR ) && is_dir( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'output' . DIRECTORY_SEPARATOR ) ); } // }}} function listfiles( $dir, $ext=array() ) { // {{{ $retval = array(); if ( is_dir( $dir ) ) { if ( $dh = opendir( $dir ) ) { while ( ( $file = readdir( $dh ) ) !== false ) { if ( filetype( rtrim( $dir, DIRECTORY_SEPARATOR ) .DIRECTORY_SEPARATOR. $file ) == 'file' ) { $retval[] = $file; } } } } return $retval; } // }}} function log( $level, $type, $str ) { // {{{ $file = 'linkex.log'; $log = sprintf( "[%s] [level=%d] [%s] %s\n", date( 'Y-m-d H:i:s' ), $level, $type, $str ); $fp = fopen( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . $file, 'a' ); flock( $fp, LOCK_EX ); fwrite( $fp, $log ); fclose( $fp ); } // }}} function map( $fun, $arr ) { // {{{ $retval = array(); foreach( $arr AS $k=>$v ) { $retval[ $k ] = $fun( $v ); } return $retval; } // }}} function mail( $to, $sub, $body ) { // {{{ global $config; $headers = array(); $headers[] = 'X-Mailer: LinkEX/20071229'; if ( strlen( $config->email ) > 0 ) { $headers[] = sprintf( 'From: LinkEX @ %s <%s>', linkex::get( 'HTTP_HOST', $_SERVER, linkex::getdomain( $config->url ) ), $config->email ); $headers[] = sprintf( 'Reply-To: %s', $config->email ); } return mail( $to, $sub, $body, join( "\r\n", $headers ) ); } // }}} function redirect( $url, $code=301 ) { // {{{ $resp = array( 301 => 'HTTP/1.1 301 Moved Permanently', 404 => 'HTTP/1.1 404 Not Found' ); if ( ( $resp = linkex::get( $code, $resp, false ) ) !== false ) { header( $resp ); } header( 'location: '.$url ); exit; } // }}} function selector( $name, $list, $selected=null, $multiple=true, $forcetype=null, $extra=null, $sep='
' ) { /// {{{ $type = ( $multiple ) ? 'checkbox':'radio'; $type = ( sizeof( $list ) > 5 ) ? 'select':$type; if ( $forcetype && in_array( $forcetype, array( 'checkbox', 'radio', 'select' ) ) ) { $type = $forcetype; } $extra['class'] = $type.' '.linkex::get( 'class', $extra, '' ); if ( $extra ) { $buffer=array(); foreach( $extra AS $k=>$v ) { $buffer[] = sprintf( '%s="%s"', $k, $v ); } $extra=' '.join( ' ', $buffer ); } else { $extra=''; } $formname = ( $multiple ) ? $name.'[]' : $name; $buffer = ''; if ( $type == 'select' ) { $buffer .= sprintf( ' %s%s', $formname, $id, ($ck)?' checked="checked"':'', $extra, $txt, $sep ); } elseif ( $type == 'radio' ) { $buffer .= sprintf( '%s', $formname, $id, ($ck)?' checked="checked"':'', $extra, $txt, $sep ); } } if ( $type == 'select' ) { $buffer .= ''; } return $buffer; } /// }}} function serialize( $val ) { // {{{ return serialize( $val ); } // }}} function sort( &$array, $field, $order='desc' ) { // {{{ if ( $field == 'random' ) { shuffle( $array ); } else { $GLOBALS['sortby'] = $field; usort( $array, array( 'linkex', 'usort' ) ); if ( $order == 'desc' ) { $array = array_reverse( $array ); } } } // }}} function stripcomments( $con ) { // {{{ $con = preg_replace( '||Umis', '', $con ); $con = preg_replace( '||Umis', '', $con ); $con = preg_replace( '||Umis', '', $con ); return $con; } // }}} function substr( $str, $len, $pad='..' ) { // {{{ if ( strlen( $str ) > $len ) { return substr( $str, 0, $len - strlen( $pad ) ) . $pad; } else { return $str; } } // }}} function truncate( $str, $len, $txt='..' ) { // {{{ if ( strlen( $str ) > ( $len-strlen( $txt ) ) ) { return substr( $str, 0, $len-strlen( $txt ) ).$txt; } else { return $str; } } // }}} function unserialize( $str ) { // {{{ $retval = @unserialize( $str ); if ( $retval !== false ) { return $retval; } else { // Attempt to fix it $str = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", trim( $str ) ); $retval = @unserialize( $str ); if ( $retval !== false ) { return $retval; } else { echo '[Fatal error in linkex::unserialize( "'. $str .'" )]'; } } } // }}} function usort( $a, $b ) { // {{{ if ( isset( $GLOBALS['sortby'] ) && strlen( $GLOBALS['sortby'] ) > 0 ) { $f = $GLOBALS['sortby']; if ( is_object( $a ) && isset( $a->$f ) ) { $aa = $a->$f; } else if ( is_array( $a ) && isset( $a[$f] ) ) { $aa = $a[$f]; } else { $aa = $a; } if ( is_object( $b ) && isset( $b->$f ) ) { $bb = $b->$f; } else if ( is_array( $b ) && isset( $b[$f] ) ) { $bb = $b[$f]; } else { $bb = $b; } switch( $f ) { case 'rdomip': $aa = sprintf( '%u', ip2long( $aa ) ); $bb = sprintf( '%u', ip2long( $bb ) ); break; case 'rdom': $aa = str_replace( 'www.', '', strtolower( $aa ) ); $bb = str_replace( 'www.', '', strtolower( $bb ) ); break; case 'anchor': $aa = strtolower( $aa ); $bb = strtolower( $bb ); break; } if ($aa == $bb) { return 0; } return ($aa < $bb) ? -1 : 1; } else { return 0; } } // }}} function verifybacklinks( $ids=array(), $callback=null ) { // {{{ global $config; $retval = array( 'starttime' => time(), 'links' => array(), 'categories' => array() ); foreach( $ids AS $id ) { $l = new link( $id ); $l->updateIPs(); $buffer = array( 'action' => 'link', 'id' => $l->id, 'rdom' => $l->rdom, 'rdomip' => $l->rdomip, 'rurl' => $l->rurl, 'skipcheck' => $l->skipcheck, 'skippagerank' => $l->skippagerank, 'minpagerank' => ( $l->minpagerank != -1 ) ? $l->minpagerank : $config->minpagerank, 'oldstatus' => $l->status, 'oldpagerank' => $l->pagerank ); if ( $l->skipcheck == 0 ) { $pr = $l->getPageRank(); $buffer{'res'} = $l->hasBacklink(); $buffer{'code'} = ( !is_string( linkex::get( 'reason', $buffer{'res'}, null ) ) ) ? '200 OK' : $l->laststatus; if ( $l->status != 4 ) { $l->status = ( ( $pr >= ( ( $l->minpagerank != -1 ) ? $l->minpagerank : $config->minpagerank ) ) && ( linkex::get( 'res', $buffer{'res'}, -1 ) == 0 ) ) ? 1:2; } $l->save( false ); } $buffer{'status'} = $l->status; $buffer{'pagerank'} = $l->pagerank; $retval{'links'}[] = $buffer; unset( $l ); if ( $callback != null && function_exists( $callback ) ) { call_user_func( $callback, $buffer ); } unset( $buffer ); } // Rebuild categories $categories = linkex::listfiles( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'categories' . DIRECTORY_SEPARATOR ); foreach( $categories AS $cid ) { $c = new category( $cid ); $c->generate(); $buffer = array( 'action' => 'category', 'id' => $cid, 'name' => $c->name ); $retval{'categories'}[] = $buffer; unset( $c ); if ( $callback != null && function_exists( $callback ) ) { call_user_func( $callback, $buffer ); } unset( $buffer ); } $retval{'endtime'} = time(); return $retval; } // }}} function sum( $array = array() ) { // {{{ $retval = 0; foreach( $array AS $a ) { $retval += $a; } return $retval; } // }}} function yesno( $val ) { // {{{ return ( $val ) ? 'Yes':'No'; } // }}} } class template { function about() { // {{{ global $config; if ( LOGGEDIN ) { $phpver = phpversion(); $zendver = zend_version(); $uname = php_uname( 's r' ); $du = round( linkex::du( BASEDIR . DIRECTORY_SEPARATOR . 'data' ) / 1024, 2 ).'KB'; $links = sizeof( linkex::listfiles( BASEDIR . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'links' . DIRECTORY_SEPARATOR ) ); $installdate = date( $config->dateformat, $config->installdate ); if ( function_exists( 'gd_info' ) ) { $gd = gd_info(); $gd = sprintf( '%s - GIF Support: %s', $gd{'GD Version'}, ( ( $gd{'GIF Create Support'} ) ? 'enabled':'unsupported, using plain text for CAPTCHA if used' ) ); } else { $gd = 'Not installed, using plain text for CAPTCHA if used.'; } echo "
\n\t
\n\t\tServer info\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
PHP version:{$phpver}
Zend version:{$zendver}
GD Info:{$gd}
Server OS:{$uname}
\n\t
\n
\n\n
\n\t
\n\t\tLinkEX info\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
LinkEX version:20071229
Current version: (Force upgrade)
Database size:{$du}
Links:{$links}
Install date:{$installdate}
\n\t
\n
\n\n\n\n"; } else { echo "
\n\tPowered by LinkEX\n\t
\n\t\tThis site is powered by LinkEX, a free script that will take care of accepting link exchange requests, \n\t\tand, if needed, making sure a link back is present.
\n\t\t
\n\t\tIf you run a website, you can have this script also. Head over to linkex.dk, \n\t\tand get your free copy.
\n\t\t
\n\t\t
Features
\n\t\t
    \n\t\t\t
  • Free! This script is free. No hidden fees, no nothing.
  • \n\t\t\t
  • Easy to install - upload 1 (one) file, fill out the basic settings, and you are good to go.
  • \n\t\t\t
  • One click updates. Update the script, just by a single click. The script will fetch the latest release, install it, making sure you are up to date at all times.
  • \n\t\t\t
  • Advancend link robot. You choose what sites to check for backlinks, and the bot will make sure the link is present.
  • \n\t\t\t
  • Google PageRank™ check. The script will show you the PageRank™ of all your link partners.
  • \n\t\t\t
  • And much much more..
  • \n\t\t
\n\t\tHead over to linkex.dk to read more\n\t
\n
\n"; } } // }}} function footer() { // {{{ return "\t\t\t\n\t\t\t
\n\t\t\t\tv.20071229 © linkex.dk 2006-2007\n\t\t\t
\n\t\t\n\t
Download Mp3/Mp3 MusicTop Chartsdownload R.E.M. music lyricdownload Leona Lewis music lyricdownload Portishead music lyricdownload Iron Maiden music lyricdownload Led Zeppelin music lyricdownload Beth Rowley music lyricdownload Mariah Carey music lyricdownload Bruce Springsteen music lyricdownload AC/DC music lyricdownload Linkin Park music lyricdownload OneRepublic music lyricdownload Bob Dylan music lyricdownload Metallica music lyricdownload The Who music lyricdownload Rihanna music lyricdownload Al Green music lyricdownload The Kooks music lyricdownload U2 music lyricdownload David Bowie music lyricdownload Prince music lyricdownload Alanis Morissette music lyricdownload Putumayo music lyricdownload Elvis Presley music lyricdownload Willie Nelson music lyricdownload Jon Bon Jovi music lyriclisten to dutch kid ory itube

listen to dutch kid ory itube

base louise pinard chestnut hill

louise pinard chestnut hill

parent lovign touch hillsdale nj

lovign touch hillsdale nj

sky loose gimble ring

loose gimble ring

thick lisa k whidbee

lisa k whidbee

be little tykes sing along cd player

little tykes sing along cd player

danger linn cove by dock

linn cove by dock

observe low myelocyte count

low myelocyte count

done livedoor imgboard futaba empire

livedoor imgboard futaba empire

certain linksys rounter ac860

linksys rounter ac860

liquid linder airport lakeland fl

linder airport lakeland fl

wind loan calculatotr

loan calculatotr

always lowerback

lowerback

meat lino rhino

lino rhino

whose lithia springs amanda cannon

lithia springs amanda cannon

fair little charley currier ives

little charley currier ives

trouble louis arkoff

louis arkoff

broad littman stethascope

littman stethascope

village low fat cream of asparagas soup

low fat cream of asparagas soup

climb lindstrom flyer

lindstrom flyer

area little rock billy hartness construction

little rock billy hartness construction

rest lloyds tsb rugby postcode

lloyds tsb rugby postcode

why lois hoogeveen

lois hoogeveen

chart louise t schulman louisville

louise t schulman louisville

radio louis walsh tuscola county michigan

louis walsh tuscola county michigan

three low tide walton naze

low tide walton naze

with lotta bull cooking class

lotta bull cooking class

sun lockheed martin lee rhyant

lockheed martin lee rhyant

port lorena isd said

lorena isd said

star lisa dmochowski

lisa dmochowski

either log cabin restaurant lancaster pa

log cabin restaurant lancaster pa

read loderail crane

loderail crane

won't littlie

littlie

eye lisbin

lisbin

drop lite 96 fm calgary

lite 96 fm calgary

populate louis ferigno

louis ferigno

allow louie deguchi

louie deguchi

neighbor lisa kleypas list of books

lisa kleypas list of books

simple lm35 spec build

lm35 spec build

reason liquid video lcd monitor power supply

liquid video lcd monitor power supply

mind litell coil equipment

litell coil equipment

art lord ganesh 1008 names and meaning

lord ganesh 1008 names and meaning

where louise poter

louise poter

cloud linux sendmail not sending email

linux sendmail not sending email

left lousiana cotton production

lousiana cotton production

view lipoma of kidney

lipoma of kidney

chick loker room

loker room

rope lip lopping

lip lopping

sand lisa thomas laury email

lisa thomas laury email

ship linux on sony ericsson gc83

linux on sony ericsson gc83

shout literotica nicole kidman

literotica nicole kidman

chief list bbc7 scifi

list bbc7 scifi

path lisa schiller taft

lisa schiller taft

even locus mortis black metal

locus mortis black metal

atom logsa electronic publications

logsa electronic publications

house little gym in huntersville

little gym in huntersville

shall lite travel trailer cosicana

lite travel trailer cosicana

true . lindsay lowen

lindsay lowen

behind louise bryant journalist death

louise bryant journalist death

slow louis vittan

louis vittan

rest lisa scottolini

lisa scottolini

company louis plotnick

louis plotnick

point london broil recipe emeril

london broil recipe emeril

kept louisiana hospitals organ donations

louisiana hospitals organ donations

fit lister primary health care centre

lister primary health care centre

lone longest iditarod ever

longest iditarod ever

pattern local police log kauai

local police log kauai

excite linksys config sit

linksys config sit

lost lombardy iraly

lombardy iraly

head lotrell 10 20

lotrell 10 20

ear louisana birth certificate

louisana birth certificate

oh lipo sucksion

lipo sucksion

blow liquid calium

liquid calium

slave lisa wheelus

lisa wheelus

master linear multi code remote

linear multi code remote

board lori dupuis jayna hefford hockey school

lori dupuis jayna hefford hockey school

ask lm7 engine swap

lm7 engine swap

spend linux driver for hl 2040

linux driver for hl 2040

company line dancing evansville indiana newburgh

line dancing evansville indiana newburgh

dear logau english translations

logau english translations

wonder log jam caulking nc

log jam caulking nc

find loretta swit fakes

loretta swit fakes

am lipoprotein associated phospholipase a2

lipoprotein associated phospholipase a2

seed logan luxary theaters huron sd

logan luxary theaters huron sd

save lord ganesha embroidered patch

lord ganesha embroidered patch

book lloyd and angela simmons rumors

lloyd and angela simmons rumors

capital lisa raben

lisa raben

much london fog factory outlets lincoln city

london fog factory outlets lincoln city

garden lita amy dumas sexual

lita amy dumas sexual

hand lladr comercial globe paperweight

lladr comercial globe paperweight

sentence louann tillman iowa

louann tillman iowa

why los inbasores

los inbasores

your lorenzo wl 14 rims

lorenzo wl 14 rims

bed lowarch linux

lowarch linux

past lowering a b2200

lowering a b2200

occur lori powell drell

lori powell drell

kept lladro swan

lladro swan

for lisa neidinger

lisa neidinger

tone lipid panel cpt code

lipid panel cpt code

indicate lowering a ramcharger

lowering a ramcharger

figure loosed the fateful lightning

loosed the fateful lightning

sense logan college bookstore

logan college bookstore

suit logros de cantinflas

logros de cantinflas

wear loving spoonful chords

loving spoonful chords

note lomart filter for pool

lomart filter for pool

cat list group label

list group label

most longaberger basket seconds

longaberger basket seconds

value lindstrom 8140

lindstrom 8140

card lounging pj s

lounging pj s

part listeroids usa

listeroids usa

white loaded kettlebell

loaded kettlebell

double lisa baltus

lisa baltus

captain listen to music in 1860

listen to music in 1860

over lloyd williams brownwood tx

lloyd williams brownwood tx

he llardo happy anniversary

llardo happy anniversary

south lori wilner actress

lori wilner actress

dear lindsay wilson nixon peabody

lindsay wilson nixon peabody

floor logan contender 2 horse

logan contender 2 horse

foot little duece coupe lyrics

little duece coupe lyrics

lake lingerie 84040

lingerie 84040

noise logos house waiheke

logos house waiheke

true . louisanna churches

louisanna churches

single loma baseball batting cage system

loma baseball batting cage system

spread lindsay tanner australian finiance minister

lindsay tanner australian finiance minister

tell long drill bits for electrical rewire

long drill bits for electrical rewire

plural lipid panal

lipid panal

period louisville cardinals football history

louisville cardinals football history

electric llandegla forest reviews

llandegla forest reviews

level london beadery

london beadery

letter litho trax

litho trax

special little mermaid centerpiece

little mermaid centerpiece

place lindsey raburn

lindsey raburn

steel linn county commercial eal estate

linn county commercial eal estate

blow lorea angulo folsom

lorea angulo folsom

might longaberger crisco

longaberger crisco

select louis mangione holman

louis mangione holman

each loadaveragezero com

loadaveragezero com

mean liteon lh 20a1p specs

liteon lh 20a1p specs

through local news wjhl

local news wjhl

hear louis vuitton monogram multicolore marilyn

louis vuitton monogram multicolore marilyn

set long sleeve dodge charger shirt

long sleeve dodge charger shirt

can lise lotte ljung

lise lotte ljung

size lorita doan violated hatch act

lorita doan violated hatch act

two linux drivers logitech ultra vision

linux drivers logitech ultra vision

wind logan s phone call

logan s phone call

cat louise dorman weight

louise dorman weight

know lippitt watsoin and westley

lippitt watsoin and westley

join low fluid inducement

low fluid inducement

dress lower lash curler

lower lash curler

head lowe s critters metal fence

lowe s critters metal fence

tie lorel hair color

lorel hair color

win louis bertolino

louis bertolino

milk lisa yantz

lisa yantz

won't lovettsville horse boarding

lovettsville horse boarding

picture litterbox training for feral cats

litterbox training for feral cats

ask locktight 55

locktight 55

noun lorenzo antonucci queens

lorenzo antonucci queens

twenty louden swain songs

louden swain songs

does loctite neverseize

loctite neverseize

since low tsh and elevated calcuim

low tsh and elevated calcuim

laugh lousville fairgrounds

lousville fairgrounds

we london sinfonietta writing on water

london sinfonietta writing on water

nine lisbain moms

lisbain moms

rose louisville medspa

louisville medspa

family logan elizabeth brooking hennessy

logan elizabeth brooking hennessy

hard lisa pereira bridgewater

lisa pereira bridgewater

many lisa raye hairstyle

lisa raye hairstyle

necessary lobsterfest camden maine rockland

lobsterfest camden maine rockland

he low volume mail sorting equipment

low volume mail sorting equipment

silver lottalove

lottalove

see lodging in knowlton qc

lodging in knowlton qc

gave listening skills by evelyn egan

listening skills by evelyn egan

word lm 4 drum kit editor

lm 4 drum kit editor

baby lowell h larry becraft jr

lowell h larry becraft jr

young lip agumentation cost

lip agumentation cost

cry lithum info

lithum info

front los angelestimes article yucca valley ca

los angelestimes article yucca valley ca

no loudon county gis

loudon county gis

two lori hopkins maderia beach fl

lori hopkins maderia beach fl

boat lisa alward williamson ny

lisa alward williamson ny

difficult liriel domiciano

liriel domiciano

indicate lorenzo ghiglieri paintings

lorenzo ghiglieri paintings

subject london september 1348

london september 1348

row loving michael ponton

loving michael ponton

wide lisa southwell

lisa southwell

leave louann dunn washington

louann dunn washington

hope littleville regional airport

littleville regional airport

describe lodging hotels in elmsford ny

lodging hotels in elmsford ny

compare loverboys dvds

loverboys dvds

off look who s kickin palm harbor fl

look who s kickin palm harbor fl

during lourdes quezada

lourdes quezada

surface linux desktop settings expo

linux desktop settings expo

inch loni gaudet

loni gaudet

current los ritos sexuales del diablo

los ritos sexuales del diablo

felt lindo michoacan las vegas nv

lindo michoacan las vegas nv

lone longfellow s work sail union

longfellow s work sail union

joy lisle 16750 valve spring compressor

lisle 16750 valve spring compressor

slip lonnie scrubbs deals on wheels

lonnie scrubbs deals on wheels

area louis emanuel g rosenblatt foundation inc

louis emanuel g rosenblatt foundation inc

middle lovus

lovus

similar lowe s clinic for kids

lowe s clinic for kids

surface liscensed tile installers in north carolina

liscensed tile installers in north carolina

one little mosque on the prairie dvd

little mosque on the prairie dvd

shell longines model 1984

longines model 1984

only low profile diamond ring settings

low profile diamond ring settings

do litozin usa

litozin usa

develop louisa billips

louisa billips

dry los birdos group

los birdos group

decimal liquor store washington crossing

liquor store washington crossing

square lindy hop detroit

lindy hop detroit

basic low cost cel phone plans

low cost cel phone plans

ring lowboy semi mfg

lowboy semi mfg

village lol baoys

lol baoys

science lostock tackle

lostock tackle

sent louisville universiity of edu

louisville universiity of edu

well lise charmel wilmington delaware

lise charmel wilmington delaware

section low fiber with low residue diet

low fiber with low residue diet

happen liver enzimes

liver enzimes

slip loading vcs file in virtualdub

loading vcs file in virtualdub

fell loading zdnet must read news rogers yahoo

loading zdnet must read news rogers yahoo

root liver tumor in beagles

liver tumor in beagles

sense lopi reynolds yarn

lopi reynolds yarn

plant lipodissolve med spa

lipodissolve med spa

current lm 15 calibrator

lm 15 calibrator

tire lovley lynn and dean

lovley lynn and dean

own loose sapphire manmade

loose sapphire manmade

caught lorenzo loretto ass lick

lorenzo loretto ass lick

join lister engine base with generator slide

lister engine base with generator slide

dead llrx com resource center international law

llrx com resource center international law

fly loe hina manga

loe hina manga

segment lisa laporta how tall is

lisa laporta how tall is

written longshoremans union

longshoremans union

hope lindt icicles

lindt icicles

tube local phone prefixes for fredericksburg va

local phone prefixes for fredericksburg va

swim locomotive pantagraph

locomotive pantagraph

consider live talk raido kfi 640

live talk raido kfi 640

straight longmynd hotel

longmynd hotel

plain lower abdominal excersizes

lower abdominal excersizes

light lombard motorinn

lombard motorinn

clear livedoor 12449 houti

livedoor 12449 houti

saw lipoic acid eye cream

lipoic acid eye cream

offer lisa bergeson tennessee

lisa bergeson tennessee

felt liszt csardas macabre

liszt csardas macabre

will lipodissolve excel

lipodissolve excel

friend list of thermogenetic

list of thermogenetic

garden longaberger fallen firefighter basket

longaberger fallen firefighter basket

month los soberanos homenaje a luis arca

los soberanos homenaje a luis arca

he lord newborough

lord newborough

land lourdes 1914 cardinals

lourdes 1914 cardinals

yet louisville mn mailto

louisville mn mailto

instrument littleteenz links

littleteenz links

salt loreal dermabrasion

loreal dermabrasion

state loews theater vestal new york

loews theater vestal new york

bar louisiana injection well chemicals

louisiana injection well chemicals

heat louisiana dairy stabilization board

louisiana dairy stabilization board

train louisburg inside tripadvisor

louisburg inside tripadvisor

try lisa arthur putnam county wv

lisa arthur putnam county wv

tire literary criticism essays on desiree s baby

literary criticism essays on desiree s baby

lot linonel toy train values

linonel toy train values

though lound sounds

lound sounds

please loews danvers

loews danvers

decide lisa mccormic

lisa mccormic

period low yat and sarah

low yat and sarah

trip lousville slugger

lousville slugger

division lokmanya tilak college of engineering

lokmanya tilak college of engineering

children linux fileserver with active directory

linux fileserver with active directory

base los jardines borda

los jardines borda

her little stone church chelan

little stone church chelan

round lisa blandin

lisa blandin

stood longaberger basket binog monroe county pa

longaberger basket binog monroe county pa

sudden lorena herera

lorena herera

song little tykes airplay trampoline

little tykes airplay trampoline

division lousiana spells

lousiana spells

joy lines ballet at sentry theatre

lines ballet at sentry theatre

seem linen window panel white

linen window panel white

stand logo ve tarih esi

logo ve tarih esi

track live coverage for 2007 bix7

live coverage for 2007 bix7

gather lori farneti

lori farneti

allow locking gas cap for 2008 avalanche

locking gas cap for 2008 avalanche

run lorax coloring page

lorax coloring page

level lodon b b

lodon b b

sun lisa hewett gramling

lisa hewett gramling

add logan county oklahoma tax assessor

logan county oklahoma tax assessor

anger logos smith wesson

logos smith wesson

road louis vitton manbag

louis vitton manbag

poor lisa mauser geneva

lisa mauser geneva

mine lowering a roadking

lowering a roadking

bit loreal glam shine discontinued

loreal glam shine discontinued

middle line 6 guitar amp 30w

line 6 guitar amp 30w

still low backlash right angle gearbox

low backlash right angle gearbox

gun loudon hearing aid specialist south carolina

loudon hearing aid specialist south carolina

about lobethal 5241

lobethal 5241

sound lions food cain and their habitat

lions food cain and their habitat

brown little chute wi waterfront property

little chute wi waterfront property

tone longaberger 1998 bakers bounty

longaberger 1998 bakers bounty

earth linksys network starter kit

linksys network starter kit

hot longhorn mancheter nh

longhorn mancheter nh

meant lodi ervin englehardt

lodi ervin englehardt

tube little itlay

little itlay

history loud portable computer speakers

loud portable computer speakers

she log4j and oc4j

log4j and oc4j

salt lockport il senior housing

lockport il senior housing

seat listen caedmon s call

listen caedmon s call

nation los rieleros del norte lyrics

los rieleros del norte lyrics

consider lindie welding supply

lindie welding supply

yes loli cp ped rompl bbs

loli cp ped rompl bbs

nose lotr sword legolas

lotr sword legolas

verb linen aisle runners

linen aisle runners

track loggers quotes stumpage

loggers quotes stumpage

while lorelei shellist

lorelei shellist

what loengard o keeffe

loengard o keeffe

score linear amplifier tennessee walker

linear amplifier tennessee walker

stood loli perten

loli perten

want little rock endermologie

little rock endermologie

student loose times at ridgemont high

loose times at ridgemont high

self log in gsis

log in gsis

cause linning smoak greenville sc

linning smoak greenville sc

have lordz of brooklyn joe mauro

lordz of brooklyn joe mauro

oh line 7 sportwear

line 7 sportwear

miss loveable huggable stuffed big dog

loveable huggable stuffed big dog

about linear temperture valve

linear temperture valve

to litebook elite

litebook elite

self lonnie alyn allison

lonnie alyn allison

nation line drawing ddg

line drawing ddg

ground lourdes shrine of the miracles

lourdes shrine of the miracles

swim local movie theatres showtimes springfield mo

local movie theatres showtimes springfield mo

plant lower marguerite aquatic center

lower marguerite aquatic center

million listen to kippi brannon

listen to kippi brannon

pay lingerie shops in abingdon va

lingerie shops in abingdon va

class louis xiv wallpaper

louis xiv wallpaper

very lingam s

lingam s

start loreal viva for men

loreal viva for men

main literary epitaph ben johnson

literary epitaph ben johnson

all listen gatorade twin race

listen gatorade twin race

day lipodissolve of texas

lipodissolve of texas

half lisa clark ballet school canberra

lisa clark ballet school canberra

music los cabos cantina

los cabos cantina

expect lord maclaurin said

lord maclaurin said

coat louis vuitton seat covers for hummer

louis vuitton seat covers for hummer

cut lisa s vandenburgh washington dc

lisa s vandenburgh washington dc

place louis slabik

louis slabik

most louisiana carcass disposal laws

louisiana carcass disposal laws

student lisa cavanagh astoria ny

lisa cavanagh astoria ny

doctor list secure gamesites

list secure gamesites

pose lobecks hot rod parts

lobecks hot rod parts

train liquitex color chart

liquitex color chart

son loma vista elementary school redding

loma vista elementary school redding

slave lithia grand forks

lithia grand forks

these littleover

littleover

quick lindt marc de champagne

lindt marc de champagne

slip little girl siye

little girl siye

result lobular bolts

lobular bolts

grand loreal mega browns developer

loreal mega browns developer

slave liquid formula lipil

liquid formula lipil

experience llg constitution

llg constitution

row linus biografia dj

linus biografia dj

the los sabados mazatlan

los sabados mazatlan

practice lindsay marshall clips

lindsay marshall clips

lone little river baptist church alabama

little river baptist church alabama

your longer nikon sc 17

longer nikon sc 17

feed lockline sprint scams

lockline sprint scams

quite lithia honda ames

lithia honda ames

travel loewe pour homme cologne austin tx

loewe pour homme cologne austin tx

laugh lippert pin box

lippert pin box

board lindsay ridgeway photo gallery

lindsay ridgeway photo gallery

river lindsay gaudious

lindsay gaudious

condition littlecrow comics

littlecrow comics

yard longmont craft show

longmont craft show

tail linksys router hook up befsr41

linksys router hook up befsr41

rise linebarger groggan blair sampson

linebarger groggan blair sampson

lift lisa hyndman ulster rose

lisa hyndman ulster rose

toward lma fast trach

lma fast trach

office lloyd the palace fayetteville

lloyd the palace fayetteville

milk lisa balter

lisa balter

loud listen to wwv

listen to wwv

experiment llanfair pg wales

llanfair pg wales

thin loft conversions dudley

loft conversions dudley

poor liturgy in filipino language

liturgy in filipino language

play ling and ling grocery store aruba

ling and ling grocery store aruba

smile llama grooming

llama grooming

full little cesars pizza converse tx

little cesars pizza converse tx

man listen to prisma by manuel maples

listen to prisma by manuel maples

from lisa brown caveney

lisa brown caveney

said litton loan chicago il

litton loan chicago il

meat lowes courtyard creations inc

lowes courtyard creations inc

fresh louis carlo nyak

louis carlo nyak

week linux drivers usb net usbnet h

linux drivers usb net usbnet h

perhaps liteon lh 18a1h

liteon lh 18a1h

those lotterylogics

lotterylogics

matter lister ce twin diesel

lister ce twin diesel

whole
\n\n"; } // }}} function header( $params = array() ) { // {{{ global $errors, $config; $params = array_merge( array( 'menu' => Template::menu(), 'title' => '', 'onload' => '' ), $params ); $error = ''; $cookieIds = "'".join( '\',\'', array_unique( explode( ',', linkex::get( 'fscookie', $_COOKIE, '' ) ) ) )."'"; $charset = isset( $config->charset ) ? $config->charset : 'utf8'; if ( linkex::get( 'noerrors', $params, true ) && sizeof( $errors ) > 0 ) { $error = join( '
', $errors ); $error = "
\n\t
\n\t\tError\n\t\t
\n\t\t\t{$error}\n\t\t
\n\t
\n
\n"; } return "\n\n\t\n\t\t\n\t\tLinkEX » {$params{'title'}}\n\t\t\n\t\t\n\t\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t \n\t\t\t
\n\t\t\t
\n\t\t\t\t

LinkEX

\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t{$params{'menu'}}\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\n\t\t\t\t{$error}\n"; } // }}} function linkdetails() { // {{{ global $config; $url = $config->url; $anchor = $config->anchor; $anchor = $anchor[ mt_rand( 0, sizeof( $anchor )-1 ) ]; $description = $config->description; // {{{ Show the email if ( intval( $config->showemail ) == 1 ) { $email = "\t\t\t\n\t\t\t\tEmail:\n\t\t\t\t{$config->email}\n\t\t\t\t\n\t\t\t\n"; } else { $email = ''; } // }}} return "
\n\t
\n\t\tLinking Details\n\t\t\n{$email}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
URL:{$url}
Site title:{$anchor}
Site description:{$description}
HTML code:
<a href="{$url}" title="{$anchor}">{$anchor}</a>
\n\t
\n
\n"; } // }}} function linkform() { // {{{ global $config; $_POST['email'] = htmlentities( linkex::get( 'email', $_POST, ( (LOGGEDIN)?$config->email:'') ) ); $_POST['lurl'] = htmlentities( linkex::get( 'lurl', $_POST, '' ) ); $_POST['rurl'] = htmlentities( linkex::get( 'rurl', $_POST, '' ) ); $_POST['anchor'] = htmlentities( linkex::get( 'anchor', $_POST, '' ) ); $_POST['description'] = htmlentities( linkex::get( 'description', $_POST, '' ) ); // {{{ Show the recip field if public or loggedin if ( intval( $config->disablerecipfield ) == 0 || intval( $config->samedomain ) == 2 ) { $extra=''; switch( intval( $config->samedomain ) ) { case 1: $extra = 'Must be on the same domain as above'; break; case 2: $extra = 'Must be on a different domain as above'; break; } $recipfield = "\t\t\t\t\n\t\t\t\t\tReciprocal link URL:\n\t\t\t\t\t {$extra}\n\t\t\t\t\t\n\t\t\t\t\n\n"; } else { $recipfield = ''; } // }}} // {{{ Show the categories if loggedin or public if ( ( $cat = linkex::get( 'categories', $_REQUEST, false ) ) !== false ) { if ( !is_array( $cat ) ) { $cat = linkex::map( 'trim', explode( ',', $cat ) ); } } else { $cat = $config->defaultcategories; } if ( intval( $config->publiccategories ) == 1 || LOGGEDIN ) { $categories = linkex::categories( LOGGEDIN ); $cats = array(); foreach( $categories AS $cid=>$name ) { $cats[] = new Category( $cid ); } $categories = $cats; unset( $cats ); linkex::sort( $categories, 'name', 'asc' ); $cats = array(); foreach( $categories AS $c ) { $cats{ $c->id } = $c->name; } $categories = $cats; unset( $cats ); $categories = linkex::selector( 'categories', $categories, linkex::get( 'categories', $_POST, $cat ), LOGGEDIN, null, array( 'style' => 'width:auto;max-width:300px;' ) ); $categories = "\t\t\t\t\n\t\t\t\t\tCategory:\n\t\t\t\t\t{$categories}\n\t\t\t\t\t\n\t\t\t\t\n\n"; } else { $categories = ''; } // }}} // {{{ CAPTCHA html tag put into => $captcha (the class will know weathe to use img or html if ( intval( $config->usecaptcha ) == 1 ) { $c = new captcha; $captchatag = $c->html(); $captcha = "\t\t\t\t\n\t\t\t\t\tSpam check:\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
{$captchatag}
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n"; } else { $captcha = ''; } // }}} if ( LOGGEDIN ) { $skipbacklinkcheck = linkex::checkbox( linkex::get( 'skipbacklinkcheck', $_POST, 0 ) ); $skippagerank = linkex::checkbox( linkex::get( 'skippagerank', $_POST, 0 ) ); $skipblacklist = linkex::checkbox( linkex::get( 'skipblacklist', $_POST, 0 ) ); $skiplengths = linkex::checkbox( linkex::get( 'skiplengths', $_POST, 0 ) ); $skipdupes = linkex::checkbox( linkex::get( 'skipdupes', $_POST, 0 ) ); $adminoptions = "\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
Since you are logged in, you have additional options:\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n"; } else { $adminoptions = ''; } // Lengths $titlelength = ( $config->titlelength > 0 ) ? ( 'max. '.$config->titlelength.' '.(( $config->titlelengthtype == 'w' )?'words':'characters' )) : ''; $descriptionlength = ( $config->descriptionlength > 0 ) ? ( 'max. '.$config->descriptionlength.' '.(( $config->descriptionlengthtype == 'w' )?'words':'characters' )) : ''; return "
\n\t
\n\t\tLinking Details\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n{$recipfield}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n{$captcha}\n{$categories}\n{$adminoptions}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
Site title: {$titlelength}
Your URL:
Your email:
Site description: {$descriptionlength}

\n\t\t
\n\t
\n
\n"; } // }}} function menu() { // {{{ if ( linkex::installed() ) { if ( defined( 'LOGGEDIN' ) && LOGGEDIN ) { $menu = "\t\t\t\t
  • » Add link
  • \n\t\t\t\t
  • » Home
  • \n\t\t\t\t
  • » Tools
  • \n\t\t\t\t
  • » Categories
  • \n\t\t\t\t
  • » Blacklist
  • \n\t\t\t\t
  • » Settings
  • \n\t\t\t\t
  • » Log out
  • \n\t\t\t\t
  • » About
  • \n"; } else { $menu = "\t\t\t\t
  • » Add link
  • \n\t\t\t\t