From 84a6cd220172eafc130ac70b292e53049ed08c8f Mon Sep 17 00:00:00 2001 From: Holden Karau Date: Sun, 11 Jun 2006 07:24:56 +0000 Subject: [PATCH] More stuff ? --- newsgroup/article.php | 85 ++++ newsgroup/attachment.php | 23 + newsgroup/auth.inc | 0 newsgroup/config.inc.php | 170 +++++++ newsgroup/groups.txt | 4 + newsgroup/head.inc | 7 + newsgroup/index.php | 18 + newsgroup/newsportal-0.37.zip | Bin 0 -> 87639 bytes newsgroup/newsportal.php | 811 ++++++++++++++++++++++++++++++++++ newsgroup/post.php | 315 +++++++++++++ newsgroup/style.css | 185 ++++++++ newsgroup/tail.inc | 6 + newsgroup/thread.php | 82 ++++ 13 files changed, 1706 insertions(+) create mode 100755 newsgroup/article.php create mode 100755 newsgroup/attachment.php create mode 100755 newsgroup/auth.inc create mode 100755 newsgroup/config.inc.php create mode 100755 newsgroup/groups.txt create mode 100755 newsgroup/head.inc create mode 100755 newsgroup/index.php create mode 100755 newsgroup/newsportal-0.37.zip create mode 100755 newsgroup/newsportal.php create mode 100755 newsgroup/post.php create mode 100755 newsgroup/style.css create mode 100755 newsgroup/tail.inc create mode 100755 newsgroup/thread.php diff --git a/newsgroup/article.php b/newsgroup/article.php new file mode 100755 index 0000000..976fd6e --- /dev/null +++ b/newsgroup/article.php @@ -0,0 +1,85 @@ +header->subject); + header("Last-Modified: ".date("r", $message->header->date)); + $title.= ' - '.$subject; + } + include "head.inc"; + + // has the user read-rights on this article? + if((function_exists("npreg_group_has_read_access") && + !npreg_group_has_read_access($group)) || + (function_exists("npreg_group_is_visible") && + !npreg_group_is_visible($group))) { + die("access denied"); + } + + +?> + + + +

+ + +'.$text_thread["button_grouplist"].''; + echo ''; + if ((!$readonly) && ($message) && + (!function_exists("npreg_group_has_write_access") || + npreg_group_has_write_access($group))) + echo ''; + + if(function_exists(npreg_user_is_moderator) && npreg_user_is_moderator($group)) { + echo ''; + } + +?> +
'.$text_article["back_to_group"].' '.$text_article["button_answer"]. + ''.$text_article["button_cancel"].' 
+ +"; + message_show($group,$id,0,$message); + if($article_showthread) + message_thread($message->header->id,$group,$thread); + + } + include "tail.inc"; +?> diff --git a/newsgroup/attachment.php b/newsgroup/attachment.php new file mode 100755 index 0000000..79a66f0 --- /dev/null +++ b/newsgroup/attachment.php @@ -0,0 +1,23 @@ +header); +if (!$message) { + header ("HTTP/1.0 404 Not Found"); + echo "The Attachment doesn't exists"; +} else { + header("Content-Disposition: attachment; filename=". + $message->header->content_type_name[$attachment]); + header("Content-type: ".$message->header->content_type[$attachment]); + message_show("",$id,$attachment,$message); +} +?> \ No newline at end of file diff --git a/newsgroup/auth.inc b/newsgroup/auth.inc new file mode 100755 index 0000000..e69de29 diff --git a/newsgroup/config.inc.php b/newsgroup/config.inc.php new file mode 100755 index 0000000..99146b2 --- /dev/null +++ b/newsgroup/config.inc.php @@ -0,0 +1,170 @@ + "aldi.inc", +// '^de\.' => "german.inc" +//); + +/* + * Do not edit anything below this line + */ +// Load group specifig config files +if((isset($group)) && (isset($group_config))) { + foreach ($group_config as $key => $value) { + if (ereg($key,$group)) { + include $value; + break; + } + } +} + +// check the settings +include "lib/check.php"; + +// load the english language definitions first because some of the other +// definitions are incomplete +include("lang/english.lang"); +include($file_language); +?> diff --git a/newsgroup/groups.txt b/newsgroup/groups.txt new file mode 100755 index 0000000..f086e2c --- /dev/null +++ b/newsgroup/groups.txt @@ -0,0 +1,4 @@ +:Computer Science Club +uw.csc +uw.csc.hardware +uw.csc.software diff --git a/newsgroup/head.inc b/newsgroup/head.inc new file mode 100755 index 0000000..7a5142e --- /dev/null +++ b/newsgroup/head.inc @@ -0,0 +1,7 @@ + + +<? echo htmlspecialchars($title); ?> + + + + diff --git a/newsgroup/index.php b/newsgroup/index.php new file mode 100755 index 0000000..2814141 --- /dev/null +++ b/newsgroup/index.php @@ -0,0 +1,18 @@ + + +

+ +'; +groups_show($newsgroups); +echo ''; +?> + + diff --git a/newsgroup/newsportal-0.37.zip b/newsgroup/newsportal-0.37.zip new file mode 100755 index 0000000000000000000000000000000000000000..a8f8d39d2dcf72a10a67c022ee2dd130d12661ac GIT binary patch literal 87639 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

vo%kG7j@1 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 literal 0 HcmV?d00001 diff --git a/newsgroup/newsportal.php b/newsgroup/newsportal.php new file mode 100755 index 0000000..22efe9d --- /dev/null +++ b/newsgroup/newsportal.php @@ -0,0 +1,811 @@ +HTTP Gateway + * Version: 0.36 + * Download: http://florian-amrhein.de/newsportal + * + * Copyright (C) 2002-2004 Florian Amrhein + * E-Mail: newsportal@florian-amrhein.de + * Web: http://florian-amrhein.de + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +include "lib/types.inc.php"; +include "lib/thread.inc.php"; +include "lib/message.inc.php"; +include "lib/post.inc.php"; +//include "lib/validator.inc.php"; + +/* + * opens the connection to the NNTP-Server + * + * $server: adress of the NNTP-Server + * $port: port of the server + */ +function nntp_open($nserver=0,$nport=0) { + global $text_error,$server_auth_user,$server_auth_pass,$readonly; + global $server,$port; + // echo "
NNTP OPEN
"; + $authorize=((isset($server_auth_user)) && (isset($server_auth_pass)) && + ($server_auth_user != "")); + if ($nserver==0) $nserver=$server; + if ($nport==0) $nport=$port; + $ns=@fsockopen($nserver,$nport); + $weg=line_read($ns); // kill the first line + if (substr($weg,0,2) != "20") { + echo "

".$text_error["error:"].$weg."

"; + fclose($ns); + $ns=false; + } else { + if ($ns != false) { + fputs($ns,"MODE reader\r\n"); + $weg=line_read($ns); // and once more + if ((substr($weg,0,2) != "20") && + ((!$authorize) || ((substr($weg,0,3) != "480") && ($authorize)))) { + echo "

".$text_error["error:"].$weg."

"; + fclose($ns); + $ns=false; + } + } + if ((isset($server_auth_user)) && (isset($server_auth_pass)) && + ($server_auth_user != "")) { + fputs($ns,"AUTHINFO USER $server_auth_user\r\n"); + $weg=line_read($ns); + fputs($ns,"AUTHINFO PASS $server_auth_pass\r\n"); + $weg=line_read($ns); + if (substr($weg,0,3) != "281") { + echo "

".$text_error["error:"]."

"; + echo "

".$text_error["auth_error"]."

"; + } + } + } + if ($ns==false) echo "

".$text_error["connection_failed"]."

"; + return $ns; +} + +/* + * Close a NNTP connection + * + * $ns: the handle of the connection + */ +function nntp_close(&$ns) { + if ($ns != false) { + fputs($ns,"QUIT\r\n"); + fclose($ns); + } +} + +/* + * Validates an email adress + * + * $address: a string containing the email-address to be validated + * + * returns true if the address passes the tests, false otherwise. + */ +function validate_email($address) +{ + global $validate_email; + $return=true; + if (($validate_email >= 1) && ($return == true)) + $return = (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_A-z{|}~]+'.'@'. + '[-!#$%&\'*+\\/0-9=?A-Z^_A-z{|}~]+\.'. + '[-!#$%&\'*+\\./0-9=?A-Z^_A-z{|}~]+$',$address)); + if (($validate_email >= 2) && ($return == true)) { + $addressarray=address_decode($address,"garantiertungueltig"); + $return=checkdnsrr($addressarray[0]["host"],"MX"); + if (!$return) $return=checkdnsrr($addressarray[0]["host"],"A"); + } + return($return); +} + +/* + * decodes a block of 7bit-data in uuencoded format to it's original + * 8bit format. + * The headerline containing filename and permissions doesn't have to + * be included. + * + * $data: The uuencoded data as a string + * + * returns the 8bit data as a string + * + * Note: this function is very slow and doesn't recognize incorrect code. + */ +function uudecode_line($line) { + $data=substr($line,1); + $length=ord($line[0])-32; + $decoded=""; + for ($i=0; $i<(strlen($data)>>2); $i++) { + $pack=substr($data,$i<<2,4); + $upack=""; + $bitmaske=0; + for ($o=0; $o<4; $o++) { + $g=((ord($pack[3-$o])-32)); + if ($g==64) $g=0; + $bitmaske=$bitmaske | ($g << (6*$o)); + } + $schablone=255; + for ($o=0; $o<3; $o++) { + $c=($bitmaske & $schablone) >> ($o << 3); + $schablone=($schablone << 8); + $upack=chr($c).$upack; + } + $decoded.=$upack; + } + $decoded=substr($decoded,0,$length); + return $decoded; +} + +/* + * decodes uuencoded Attachments. + * + * $data: the encoded data + * + * returns the decoded data + */ +function uudecode($data) { + $d=explode("\n",$data); + $u=""; + for ($i=0; $i0) $return.=","; + $o++; + $return.=$groups[$i]; + } + } + return($return); +} + +/* + * read one line from the NNTP-server + */ +function line_read(&$ns) { + if ($ns != false) { + $t=str_replace("\n","",str_replace("\r","",fgets($ns,1200))); + return $t; + } +} + +/* + * Split an internet-address string into its parts. An address string could + * be for example: + * - user@host.domain (Realname) + * - "Realname" + * - user@host.domain + * + * The address will be split into user, host (incl. domain) and realname + * + * $adrstring: The string containing the address in internet format + * $defaulthost: The name of the host which should be returned if the + * address-string doesn't contain a hostname. + * + * returns an hash containing the fields "mailbox", "host" and "personal" + */ +function address_decode($adrstring,$defaulthost) { + $parsestring=trim($adrstring); + $len=strlen($parsestring); + $at_pos=strpos($parsestring,'@'); // find @ + $ka_pos=strpos($parsestring,"("); // find ( + $kz_pos=strpos($parsestring,')'); // find ) + $ha_pos=strpos($parsestring,'<'); // find < + $hz_pos=strpos($parsestring,'>'); // find > + $space_pos=strpos($parsestring,')'); // find ' ' + $email=""; + $mailbox=""; + $host=""; + $personal=""; + if ($space_pos != false) { + if (($ka_pos != false) && ($kz_pos != false)) { + $personal=substr($parsestring,$ka_pos+1,$kz_pos-$ka_pos-1); + $email=trim(substr($parsestring,0,$ka_pos-1)); + } + } else { + $email=$adrstring; + } + if (($ha_pos != false) && ($hz_pos != false)) { + $email=trim(substr($parsestring,$ha_pos+1,$hz_pos-$ha_pos-1)); + $personal=substr($parsestring,0,$ha_pos-1); + } + if ($at_pos != false) { + $mailbox=substr($email,0,strpos($email,'@')); + $host=substr($email,strpos($email,'@')+1); + } else { + $mailbox=$email; + $host=$defaulthost; + } + $personal=trim($personal); + if (substr($personal,0,1) == '"') $personal=substr($personal,1); + if (substr($personal,strlen($personal)-1,1) == '"') + $personal=substr($personal,0,strlen($personal)-1); + $result["mailbox"]=trim($mailbox); + $result["host"]=trim($host); + if ($personal!="") $result["personal"]=$personal; + $complete[]=$result; + return ($complete); +} + +/* + * Read the groupnames from groups.txt, and get additional informations + * of the groups from the newsserver + */ +function groups_read($server,$port) { + global $gl_age,$file_groups,$spooldir,$cache_index; + // is there a cached version, and is it actual enough? + $cachefile=$spooldir.'/groups.dat'; + if((file_exists($cachefile)) && (filemtime($cachefile)+$cache_index>time())) { + // cached file exists and is new enough. so lets read it out. + $file=fopen($cachefile,"r"); + $data=""; + while(!feof($file)) { + $data.=fgets($file,1000); + } + fclose($file); + $newsgroups=unserialize($data); + } else { + $ns=nntp_open($server,$port); + if ($ns == false) return false; + $gf=fopen($file_groups,"r"); + // if we want to mark groups with new articles with colors, wie will later + // need the format of the overview + $overviewformat=thread_overview_read($ns); + while (!feof($gf)) { + $gruppe=new newsgroupType; + $tmp=trim(line_read($gf)); + if(substr($tmp,0,1)==":") { + $gruppe->text=substr($tmp,1); + $newsgroups[]=$gruppe; + } elseif(strlen(trim($tmp))>0) { + // is there a description in groups.txt? + $pos=strpos($tmp," "); + if ($pos != false) { + // yes. + $gruppe->name=substr($tmp,0,$pos); + $desc=substr($tmp,$pos); + } else { + // no, get it from the newsserver. + $gruppe->name=$tmp; + fputs($ns,"XGTITLE $gruppe->name\r\n"); + $response=line_read($ns); + if (strcmp(substr($response,0,3),"282") == 0) { + $neu=line_read($ns); + do { + $response=$neu; + if ($neu != ".") $neu=line_read($ns); + } while ($neu != "."); + $desc=strrchr($response,"\t"); + if (strcmp($response,".") == 0) { + $desc="-"; + } + } else { + $desc=$response; + } + if (strcmp(substr($response,0,3),"500") == 0) + $desc="-"; + } + if (strcmp($desc,"") == 0) $desc="-"; + $gruppe->description=$desc; + fputs($ns,"GROUP ".$gruppe->name."\r\n"); + $t=explode(" ",line_read($ns)); + $gruppe->count=$t[1]; + // mark group with new articles with colors + if($gl_age) { + fputs($ns,'XOVER '.$t[3]."\r\n"); + $tmp=explode(" ",line_read($ns)); + if($tmp[0]=="224") { + $tmp=line_read($ns); + if($tmp!=".") { + $head=thread_overview_interpret($tmp,$overviewformat,$gruppe->name); + $tmp=line_read($ns); + $gruppe->age=$head->date; + } + } + } + if ((strcmp(trim($gruppe->name),"") != 0) && + (substr($gruppe->name,0,1) != "#")) + $newsgroups[]=$gruppe; + } + } + fclose($gf); + nntp_close($ns); + // write the data to the cachefile + $file=fopen($cachefile,"w"); + fputs($file,serialize($newsgroups)); + fclose($file); + } + return $newsgroups; +} + +/* + * print the group names from an array to the webpage + */ +function groups_show($gruppen) { + global $gl_age; + if ($gruppen == false) return; + global $file_thread,$text_groups; + $c = count($gruppen); + echo '
'; + $acttype="keins"; + for($i = 0 ; $i < $c ; $i++) { + $g = $gruppen[$i]; + if(isset($g->text)) { + if($acttype!="text") { + $acttype="text"; + if($i>0) + echo '
'; + echo '
'; + } + echo $g->text; + } else { + if($acttype!="group") { + $acttype="group"; + if($i>0) + echo '
'; + echo '
'; + } + echo '
'; + echo ''.$g->name."\n"; + if($gl_age) + $datecolor=thread_format_date_color($g->age); + echo '('; + if($datecolor!="") + echo ''.$g->count.''; + else + echo $g->count; + echo ')'; + if($g->description!="-") + echo '
'.$g->description.''; + echo '
'; + } + echo "\n"; + flush(); + } + echo "
\n"; +} + +/* + * gets a list of aviable articles in the group $groupname + */ +/* +function getArticleList(&$ns,$groupname) { + fputs($ns,"LISTGROUP $groupname \r\n"); + $line=line_read($ns); + $line=line_read($ns); + while(strcmp($line,".") != 0) { + $articleList[] = trim($line); + $line=line_read($ns); + } + if (!isset($articleList)) $articleList="-"; + return $articleList; +} +*/ + +/* + * Decode quoted-printable or base64 encoded headerlines + * + * $value: The to be decoded line + * + * returns the decoded line + */ +function headerDecode($value) { + if (eregi('=\?.*\?.\?.*\?=',$value)) { // is there anything encoded? + if (eregi('=\?.*\?Q\?.*\?=',$value)) { // quoted-printable decoding + + $charset=eregi_replace('(.*)=\?(.*)\?Q\?(.*)\?=(.*)','\2',$value); + $result1=eregi_replace('(.*)=\?.*\?Q\?(.*)\?=(.*)','\1',$value); + $result2=eregi_replace('(.*)=\?.*\?Q\?(.*)\?=(.*)','\2',$value); + $result3=eregi_replace('(.*)=\?.*\?Q\?(.*)\?=(.*)','\3',$value); + $result2=str_replace("_"," ",quoted_printable_decode($result2)); + $newvalue=$result1.recode_charset($result2,$charset).$result3; + } + if (eregi('=\?.*\?B\?.*\?=',$value)) { // base64 decoding + $result1=eregi_replace('(.*)=\?.*\?B\?(.*)\?=(.*)','\1',$value); + $result2=eregi_replace('(.*)=\?.*\?B\?(.*)\?=(.*)','\2',$value); + $result3=eregi_replace('(.*)=\?.*\?B\?(.*)\?=(.*)','\3',$value); + $result2=base64_decode($result2); + $newvalue=$result1.$result2.$result3; + } + if (!isset($newvalue)) // nothing of the above, must be an unknown encoding... + $newvalue=$value; + else + $newvalue=headerDecode($newvalue); // maybe there are more encoded + return($newvalue); // parts + } else { // there wasn't anything encoded, return the original string + return($value); + } +} + +/* + * calculates an Unix timestamp out of a Date-Header in an article + * + * $value: Value of the Date: header + * + * returns an Unix timestamp + */ +function getTimestamp($value) { + global $timezone; + $months=array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); + $value=str_replace(" "," ",$value); + $d=split(" ",$value,6); + if (strcmp(substr($d[0],strlen($d[0])-1,1),",") == 0) { + $date[0]=$d[1]; // day + $date[1]=$d[2]; // month + $date[2]=$d[3]; // year + $date[3]=$d[4]; // hours:minutes:seconds + $gmt=$d[5]; // timezone + } else { + $date[0]=$d[0]; // day + $date[1]=$d[1]; // month + $date[2]=$d[2]; // year + $date[3]=$d[3]; // hours:minutes:seconds + $gmt=$d[4]; // timezone + } + $time=split(":",$date[3]); + // timezone handling + $msgtimezone=0; + if ($gmt[0]=='-') { + $msgtimezone=-substr($gmt,1,2); + $msgminzone=-substr($gmt,3,2); + } else if ($gmt[0]=='+') { + $msgtimezone=+substr($gmt,1,2); + $msgminzone=+substr($gmt,3,2); + } + $time[0]=$time[0]-$msgtimezone+$timezone; + $time[1]=$time[1]-$msgminzone+$minzone; + $timestamp=mktime($time[0],$time[1],$time[2],$months[$date[1]],$date[0],$date[2]); + return $timestamp; +} + +function parse_header($hdr,$number="") { + for ($i=count($hdr)-1; $i>0; $i--) + if (preg_match("/^(\x09|\x20)/",$hdr[$i])) + $hdr[$i-1]=$hdr[$i-1]." ".ltrim($hdr[$i]); + $header = new headerType; + $header->isAnswer=false; + for ($count=0;$countfrom=$fromline[0]["mailbox"]."@".$fromline[0]["host"]; + $header->username=$fromline[0]["mailbox"]; + if (!isset($fromline[0]["personal"])) { + $header->name=""; + } else { + $header->name=$fromline[0]["personal"]; + } + break; + case "message-id:": + $header->id=$value; + break; + case "subject:": + $header->subject=headerDecode($value); + break; + case "newsgroups:": + $header->newsgroups=$value; + break; + case "organization:": + $header->organization=headerDecode($value); + break; + case "content-transfer-encoding:": + $header->content_transfer_encoding=trim(strtolower($value)); + break; + case "content-type:": + $header->content_type=array(); + $subheader=split(";",$value); + $header->content_type[0]=strtolower(trim($subheader[0])); + for ($i=1; $icontent_type_charset=array(strtolower($subvalue)); + break; + case "name": + $header->content_type_name=array($subvalue); + break; + case "boundary": + $header->content_type_boundary=$subvalue; + break; + case "format": + $header->content_type_format=array($subvalue); + } + } + } + break; + case "references:": + $ref=trim($value); + while (strpos($ref,"> <") != false) { + $header->references[]=substr($ref,0,strpos($ref," ")); + $ref=substr($ref,strpos($ref,"> <")+2); + } + $header->references[]=trim($ref); + break; + case "date:": + $header->date=getTimestamp(trim($value)); + break; + case "followup-to:": + $header->followup=trim($value); + break; + case "x-newsreader:": + case "x-mailer:": + case "user-agent:": + $header->user_agent=trim($value); + break; + case "x-face:": // not ready +// echo "

-".base64_decode($value)."-

"; + break; + case "x-no-archive:": + $header->xnoarchive=strtolower(trim($value)); + } + } + if (!isset($header->content_type[0])) + $header->content_type[0]="text/plain"; + if (!isset($header->content_transfer_encoding)) + $header->content_transfer_encoding="8bit"; + if ($number != "") $header->number=$number; + return $header; +} + +/* + * convert the charset of a text + */ +function recode_charset($text,$source=false,$dest=false) { + global $iconv_enable,$www_charset; + if($dest==false) + $dest=$www_charset; + if(($iconv_enable) && ($source!=false)) { + $return=iconv($source, + $dest."//TRANSLIT",$text); + if($return!="") + return $return; + else + return $text; + } else { + return $text; + } +} + +function decode_body($body,$encoding) { + $bodyzeile=""; + switch ($encoding) { + case "base64": + $body=base64_decode($body); + break; + case "quoted-printable": + $body=Quoted_printable_decode($body); + $body=str_replace("=\n","",$body); +// default: +// $body=str_replace("\n..\n","\n.\n",$body); + } + + return $body; +} + +/* + * makes URLs clickable + * + * $text: A text-line probably containing links. + * + * the function returns the text-line with HTML-Links to the links or + * email-adresses. + */ +function html_parse($text) { + global $frame_externallink; + if ((isset($frame_externallink)) && ($frame_externallink != "")) { + $target=' TARGET="'.$frame_externallink.'" '; + } else { + $target=' '; + } + // regular expressions that will be applied to every word in the text + $regexp_replace=array( + 'http://((\.*([-a-z0-9_/~@?=%#;+]|&)+)+)' => + 'http://\1', + '(www\.[-a-z]+\.(de|pl|cz|sk|tk|tv|cc|cx|biz|us|uk|info|int|eu|dk|org|net|at|ch|com))' => + '\1', + 'https://([-a-z0-9_./~@?=%#&;\n]+)' => + 'https://\1', + 'gopher://([-a-z0-9_./~@?=%\n]+)' => + 'gopher://\1', + 'news://([-a-z0-9_./~@?=%\n]+)' => + 'news://\1', + 'ftp://([-a-z0-9_./~@?=%\n]+)' => + 'ftp://\1', + //'([-a-z0-9_./n]+)@([-a-z0-9_.]+)' => + // $_SESSION["loggedin"]!==true ? '(e-Mail)' : + // '\1@\2' + ); + $ntext=""; + // split every line into it's words + $words=explode(" ",$text); + $n=count($words); + for($i=0; $i<$n; $i++) { + $word=$words[$i]; + // test, if we need the slow walk through all the regular expressions + if(eregi('www|\:|@',$word)) { + // apply the regular expressions to the word until a matching + // expression is found + foreach ($regexp_replace as $key => $value) { + $nword=eregi_replace($key,$value,$word); + if($nword!=$word) { + $word=$nword; + break; + } + } + } + // add the spaces between the words + if($i>0) + $ntext.=" "; + $ntext.=$word; + } + return($ntext); +} + + +/* + * read the header of an article in plaintext into an array + * $articleNumber can be the number of an article or its message-id. + */ +function readPlainHeader(&$ns,$group,$articleNumber) { + fputs($ns,"GROUP $group\r\n"); + $line=line_read($ns); + fputs($ns,"HEAD $articleNumber\r\n"); + $line=line_read($ns); + if (substr($line,0,3) != "221") { + echo $text_error["article_not_found"]; + $header=false; + } else { + $line=line_read($ns); + $body=""; + while(strcmp(trim($line),".") != 0) { + $body .= $line."\n"; + $line=line_read($ns); + } + return split("\n",str_replace("\r\n","\n",$body)); + } +} + +/* + * cancel an article on the newsserver + * + * DO NOT USE THIS FUNCTION, IF YOU DON'T KNOW WHAT YOU ARE DOING! + * + * $ns: The handler of the NNTP-Connection + * $group: The group of the article + * $id: the Number of the article inside the group or the message-id + */ +function message_cancel($subject,$from,$newsgroups,$ref,$body,$id) { + global $server,$port,$send_poster_host,$organization,$text_error; + global $file_footer,$www_charset; + flush(); + $ns=nntp_open($server,$port); + if ($ns != false) { + fputs($ns,"POST\r\n"); + $weg=line_read($ns); + fputs($ns,'Subject: '.quoted_printable_encode($subject)."\r\n"); + fputs($ns,'From: '.$from."\r\n"); + fputs($ns,'Newsgroups: '.$newsgroups."\r\n"); + fputs($ns,"Mime-Version: 1.0\r\n"); + fputs($ns,"Content-Type: text/plain; charset=".$www_charset."\r\n"); + fputs($ns,"Content-Transfer-Encoding: 8bit\r\n"); + if ($send_poster_host) + fputs($ns,'X-HTTP-Posting-Host: '.gethostbyaddr(getenv("REMOTE_ADDR"))."\r\n"); + if ($ref!=false) fputs($ns,'References: '.$ref."\r\n"); + if (isset($organization)) + fputs($ns,'Organization: '.quoted_printable_encode($organization)."\r\n"); + fputs($ns,"Control: cancel ".$id."\r\n"); + if ((isset($file_footer)) && ($file_footer!="")) { + $footerfile=fopen($file_footer,"r"); + $body.="\n".fread($footerfile,filesize($file_footer)); + fclose($footerfile); + } + $body=str_replace("\n.\r","\n..\r",$body); + $body=str_replace("\r",'',$body); + $b=split("\n",$body); + $body=""; + for ($i=0; $i") != false ) | (strcmp(substr($b[$i],0,1),">") == 0)) { + $body .= textwrap(stripSlashes($b[$i]),78,"\r\n")."\r\n"; + } else { + $body .= textwrap(stripSlashes($b[$i]),74,"\r\n")."\r\n"; + } + } + fputs($ns,"\r\n".$body."\r\n.\r\n"); + $message=line_read($ns); + nntp_close($ns); + } else { + $message=$text_error["post_failed"]; + } + return $message; +} + +?> \ No newline at end of file diff --git a/newsgroup/post.php b/newsgroup/post.php new file mode 100755 index 0000000..2ef2075 --- /dev/null +++ b/newsgroup/post.php @@ -0,0 +1,315 @@ +HTTP Gateway + * Download: http://florian-amrhein.de/newsportal + * + * Copyright (C) 2002-2004 Florian Amrhein + * E-Mail: florian.amrhein@gmx.de + * Web: http://florian-amrhein.de + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +@$newsgroups=$_REQUEST["newsgroups"]; +@$group=$_REQUEST["group"]; +@$type=$_REQUEST["type"]; +@$subject=stripslashes($_REQUEST["subject"]); +@$name=$_REQUEST["name"]; +@$email=$_REQUEST["email"]; +@$body=stripslashes($_REQUEST["body"]); +@$abspeichern=$_REQUEST["abspeichern"]; +@$references=$_REQUEST["references"]; +@$id=$_REQUEST["id"]; +if (!isset($group)) $group=$newsgroups; + +include "config.inc.php"; +include "auth.inc"; + +// Save name and email in cookies +if (($setcookies==true) && (isset($abspeichern)) && ($abspeichern=="ja")) { + setcookie("cookie_name",stripslashes($name),time()+(3600*24*90)); + setcookie("cookie_email",$email,time()+(3600*24*90)); +} +if ((isset($post_server)) && ($post_server!="")) + $server=$post_server; +if ((isset($post_port)) && ($post_port!="")) + $port=$post_port; + + include "head.inc"; + include $file_newsportal; + + +?> + + +

+ +

+ +

'.$text_post["button_back"].' ' + .$text_post["button_back2"].' '.urlencode($group) ?>

+
$message
"; + } + } else { + echo $text_post["error_readonly"]; + } + } +} + +// A reply of an other article. +if ($type=="reply") { + $message=message_read($id,0,$group); + $head=$message->header; + $body=explode("\n",$message->body[0]); + nntp_close($ns); + if ($head->name != "") { + $bodyzeile=$head->name; + } else { + $bodyzeile=$head->from; + } + $bodyzeile=$text_post["wrote_prefix"].$bodyzeile. + $text_post["wrote_suffix"]."\n\n"; + for ($i=0; $i<=count($body)-1; $i++) { + if((isset($cutsignature)) && ($cutsignature==true) && + ($body[$i]=='-- ')) + break; + if (trim($body[$i])!="") { + if($body[$i][0]=='>') + $bodyzeile.=">".$body[$i]."\n"; + else + $bodyzeile.="> ".$body[$i]."\n"; + } else { + $bodyzeile.="\n"; + } + } + $subject=$head->subject; + if (isset($head->followup) && ($head->followup != "")) { + $newsgroups=$head->followup; + } else { + $newsgroups=$head->newsgroups; + } + splitSubject($subject); + $subject="Re: ".$subject; + // Cut off old parts of a subject + // for example: 'foo (was: bar)' becomes 'foo'. + $subject=eregi_replace('(\(wa[sr]: .*\))$','',$subject); + $show=1; + $references=false; + if (isset($head->references[0])) { + for ($i=0; $i<=count($head->references)-1; $i++) { + $references .= $head->references[$i]." "; + } + } + $references .= $head->id; +} + +if ($type=="retry") { + $show=1; + $bodyzeile=$body; +} + +if ($show==1) { + +if ($testgroup) { + $testnewsgroups=testgroups($newsgroups); +} else { + $testnewsgroups=$newsgroups; +} + +if ($testnewsgroups == "") { + echo $text_post["followup_not_allowed"]; + echo " ".$newsgroups; +} else { + $newsgroups=$testnewsgroups; + + echo '

'.$text_post["group_head"].$newsgroups + .$text_post["group_tail"].'

'; + + if (isset($error)) echo "

$error

"; ?> + +
+ +
+ + + + + + + +
+ '; + } + ?> +
+ '; + } + ?> +
+
+ +
+ + + + +

+
+ + + + + + + +" onclick="quoten()"> + + + +"> + + + + +
+
+ + + + +
+ + + + diff --git a/newsgroup/style.css b/newsgroup/style.css new file mode 100755 index 0000000..64968af --- /dev/null +++ b/newsgroup/style.css @@ -0,0 +1,185 @@ +/* =========== Page Layout ================ */ + +BODY { + color: black; + background: white; +} + +/* =========== Index Layout ============== */ + +/* headline */ +h1.np_index_headline { + font-size: large; +} + +/* border around all groups */ +.np_index_groups { + background: #eeeeee; + padding: 0px; + border: solid 1px #26598f; +} + +/* a block of groups */ +.np_index_groupblock { + margin-bottom: 20px; +} + +/* headline of a group of blocks */ +.np_index_grouphead { + border: solid 1px #26598f; + background: #26598f; + color: white; +} + +/* a single group */ +.np_index_group { + margin-left: 10px; + margin-bottom: 5px; +} + +/* =========== Thread Layout ============== */ + +/* Headline */ +h1.np_thread_headline { + font-size: large; +} + + +/* Table around the thread */ +table.np_thread_table { + width: 100%; + border: solid 1px #26598f; + border-spacing: 0px; + margin: 0px; + padding: 0px; +} + +/* Head of the table */ +tr.np_thread_head,td.np_thread_head { + color: white; + background: #26598f; + margin: 0px; +} + + + +/* Even line numbers in the thread */ +tr.np_thread_line1,td.np_thread_line1 { + padding-left: 3px; + padding-top: 0px; + padding-right: 0px; + padding-bottom: 0px; + background: #f9f9f9; + margin: 0px; +} + +/* Odd line numbers in the thread */ +tr.np_thread_line2,td.np_thread_line2 { + padding-left: 3px; + padding-top: 0px; + padding-right: 0px; + padding-bottom: 0px; + background: #eeeeee; + margin: 0px; +} + +/* Text inside a Line */ +span.np_thread_line_text { + font-size: small; +} + +/* The small images, a thread consists of */ +img.thread_image { + vertical-align: bottom; +} + +/* =========== Article Layout ============= */ + +/* headline */ +h1.np_article_headline { + font-size: large; +} + + +/* Head of an article */ +div.np_article_header { + background: #eeeeee; + padding: 3px; + border: solid 1px #26598f; +} + +/* Layout of the Text-Body */ +div.np_article_body { + margin-top: 20px; + font-family: "Lucida Console", "Courier New", Courier, "Andale Mono", monospace; +} + +/* Layout of quoted text / graphic layout */ +blockquote.np_article_quote { + border-left: #002255 solid 1px; + padding-left: 5px; + color: #002277; + margin: 0px; +} + +/* =========== Post layout =========== */ + +/* headline */ +h1.np_post_headline { + font-size: large; +} + + +/* Head with the input fields for subject, name and email */ +.np_post_header { + background: #eeeeee; + padding: 3px; + border: solid 1px #26598f; +} + +/* Body with the message-field and the post-button in it */ +.np_post_body { + background: #eeeeee; + padding: 3px; + border: solid 1px #26598f; + margin-top: 10px; +} + + +/* =========== navigation buttons on top of every page =========== */ + +.np_buttonbar { + background: #26598f; + padding: 1px; + margin-bottom: 10px; + color: black; +} + +td.np_button { + padding-left: 5px; + padding-right: 5px; + border-right: solid white 1px; + color: white; + white-space: nowrap; +} + +a.np_button { + color: white; + text-decoration: underline; +} + +.np_pages { + color: white; +} + +.np_pages_selected { + color: white: + text-weight: bold; + margin-left: 5px; +} + +.np_pages_unselected { + color: white; + text-decoration: underline; + margin-left: 5px; +} diff --git a/newsgroup/tail.inc b/newsgroup/tail.inc new file mode 100755 index 0000000..66b460b --- /dev/null +++ b/newsgroup/tail.inc @@ -0,0 +1,6 @@ +

+"News-Portal" +was written by Florian Amrhein. +

+ + diff --git a/newsgroup/thread.php b/newsgroup/thread.php new file mode 100755 index 0000000..29a9eac --- /dev/null +++ b/newsgroup/thread.php @@ -0,0 +1,82 @@ + + + + +

+ +'; + echo ''.$text_thread["button_grouplist"].''; + if (!$readonly && + (!function_exists("npreg_group_has_write_access") || + npreg_group_has_write_access($group))) + echo ''. + $text_thread["button_write"].""; +// $ns=nntp_open($server,$port); + flush(); + $headers = thread_load($group); + $article_count=count($headers); + if ($articles_per_page != 0) { + if ((!isset($first)) || (!isset($last))) { + if ($startpage=="first") { + $first=1; + $last=$articles_per_page; + } else { + $first=$article_count - (($article_count -1) % $articles_per_page); + $last=$article_count; + } + } + echo ''; + // Show the replies to an article in the thread view? + if($thread_show["replies"]) { + // yes, so the counting of the shown articles is very easy + $pagecount=count($headers); + } else { + // oh no, the replies will not be shown, this makes life hard... + $pagecount=0; + if(count($headers>0) && is_array($headers)) { + foreach($headers as $h) { + if($h->isAnswer==false) + $pagecount++; + } + } + } + + thread_pageselect($group,$pagecount,$first); + echo ''; + } else { + $first=0; + $last=$article_count; + } + echo ''; + thread_show($headers,$group,$first,$last); +} else { + echo $text_register["no_access_group"]; +} + +?> +

+ + \ No newline at end of file