From 4a6c6de758960a2f98ba58f20a1c17c6ee67111c Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Tue, 10 Oct 2000 10:52:19 +0000 Subject: [PATCH] Huge update - I don't have time to write everything down but the directory structure changes, some sections are expanded. Take a look at the source code or ask me to elaborate on certain issues/topics. --- admin.inc | 45 ---- includes/admin.inc | 78 +++++++ includes/backend.inc | 241 ++++++++++++++++++++++ ban.inc => includes/ban.inc | 0 includes/calendar.inc | 76 +++++++ config.inc => includes/config.inc | 6 +- database.inc => includes/database.inc | 4 +- function.inc => includes/function.inc | 8 +- log.inc => includes/log.inc | 0 submission.inc => includes/submission.inc | 4 +- template.inc => includes/template.inc | 66 ++---- includes/theme.inc | 11 + includes/user.inc | 83 ++++++++ scripts/php-backup | 3 + scripts/php-clean | 4 + scripts/sql-backup | 7 + theme.inc | 11 - themes/marvin/marvin.theme | 44 ++-- 18 files changed, 545 insertions(+), 146 deletions(-) delete mode 100644 admin.inc create mode 100644 includes/admin.inc create mode 100644 includes/backend.inc rename ban.inc => includes/ban.inc (100%) create mode 100644 includes/calendar.inc rename config.inc => includes/config.inc (97%) rename database.inc => includes/database.inc (92%) rename function.inc => includes/function.inc (95%) rename log.inc => includes/log.inc (100%) rename submission.inc => includes/submission.inc (95%) rename template.inc => includes/template.inc (70%) create mode 100644 includes/theme.inc create mode 100644 includes/user.inc create mode 100644 scripts/php-backup create mode 100644 scripts/php-clean create mode 100644 scripts/sql-backup delete mode 100644 theme.inc diff --git a/admin.inc b/admin.inc deleted file mode 100644 index 2fafaf668cb3..000000000000 --- a/admin.inc +++ /dev/null @@ -1,45 +0,0 @@ -<? - - -function admin_header() { - include "config.inc"; - ?> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> - <HTML> - <HEAD><TITLE><? echo $sitename; ?> - administration</TITLE></HEAD> - <STYLE> - body { font-family: helvetica, arial; } - h1 { font-size: 14pt; font-weight: bold; color: #006699; } - h2 { font-family: helvetica, arial; font-size: 12pt; font-weight: bold; } - h3 { font-family: helvetica, arial; font-size: 14pt; font-weight: bold; } - th { font-family: helvetica, arial; text-align: center; background-color: #C0C0C0; color: #447744; } - td { font-family: helvetica, arial; } - </STYLE> - <BODY BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#000099" ALINK="#FF0000"> - <TABLE BORDER="1"> - <TR> - <TD ALIGN="left" VALIGN="top" WIDTH="100"> - <P> - <LI><A HREF="admin.php?section=accounts">accounts</A></LI> - <LI><A HREF="admin.php?section=bans">bans</A></LI> - <LI><A HREF="admin.php?section=logs">logs</A></LI> - <LI><A HREF="admin.php?section=stories">stories</A></LI> - <LI><A HREF="admin.php?section=info">info</A></LI> - <P> - <LI><A HREF="">home</A></LI> - </TD> - <TD> - <? -} - -function admin_footer() { - ?> - </TD> - </TR> - </TABLE> - </BODY> - </HTML> - <? -} - -?> \ No newline at end of file diff --git a/includes/admin.inc b/includes/admin.inc new file mode 100644 index 000000000000..4d0ed0ddabff --- /dev/null +++ b/includes/admin.inc @@ -0,0 +1,78 @@ +<? + + +function admin_icon($name) { + global $section; + if ($name == $section) print " <TD ALIGN=\"center\" BGCOLOR=\"#CCCCCC\"><A HREF=\"admin.php?section=$name\"><IMG SRC=\"images/admin-$name.png\" BORDER=\"0\"></A><BR>$name</TD>\n"; + else print " <TD ALIGN=\"center\" VALIGN=\"middle\"><A HREF=\"admin.php?section=$name\"><IMG SRC=\"images/admin-$name.png\" BORDER=\"0\"></A><BR>$name</TD>\n"; +} + +function admin_header() { + global $sitename, $section, $status; + + ?> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> + <HTML> + <HEAD><TITLE><? echo $sitename; ?> administration center</TITLE></HEAD> + <STYLE> + body { font-family: helvetica, arial; } + h1 { font-size: 14pt; font-weight: bold; color: #006699; } + h2 { font-family: helvetica, arial; font-size: 12pt; font-weight: bold; } + h3 { font-family: helvetica, arial; font-size: 14pt; font-weight: bold; } + th { font-family: helvetica, arial; text-align: center; background-color: #CCCCCC; color: #885555; } + td { font-family: helvetica, arial; } + </STYLE> + <BODY BGCOLOR="#FFFFFF" LINK="#006699" VLINK="#004499" ALINK="#FF0000"> + <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="2" WIDTH="780"> + <TR><TD COLSPAN="10"><H1><? echo "$sitename"; ?> administration center</H1></TD></TR> + <TR><TD BGCOLOR="#000000" COLSPAN="10" WIDTH="100%"><IMG SRC="images/pixel.gif" WIDTH="1" HEIGHT="1" ALT=""></TD></TR> + <TR> + <? + admin_icon("stories"); + admin_icon("comments"); + admin_icon("diaries"); + admin_icon("accounts"); + admin_icon("misc"); + admin_icon("bans"); + admin_icon("logs"); + admin_icon("stats"); + admin_icon("info"); + admin_icon("home"); + ?> + </TR> + <TR><TD BGCOLOR="#000000" COLSPAN="10" WIDTH="100%"><IMG SRC="images/pixel.gif" WIDTH="1" HEIGHT="0" ALT=""></TD></TR> + <TR><TD COLSPAN="10"> </TD></TR> + <? + if ($status) { + ?> + <TR><TD COLSPAN="10"><BIG><B>status:</B> <? echo $status; ?></BIG></TD></TR> + <TR><TD COLSPAN="10"> </TD></TR> + <? + } + ?> + <TR> + <TD COLSPAN="10"> + <? +} + +function admin_box($title, $body) { + print "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"2\" WIDTH=\"100%\">\n"; + print " <TR><TD><FONT COLOR=\"#83997A\"><B>$title</B></A></TD></TR>\n"; + print " <TR><TD BGCOLOR=\"#000000\" WIDTH=\"100%\"><IMG SRC=\"images/pixel.gif\" WIDTH=\"1\" HEIGHT=\"0\" ALT=\"\"></TD></TR>\n"; + print " <TR><TD> </TD></TR>\n"; + print " <TR><TD>$body</TD></TR>\n"; + print "</TABLE>\n"; + print "<BR><BR>\n"; +} + +function admin_footer() { + ?> + </TD> + </TR> + </TABLE> + </BODY> + </HTML> + <? +} + +?> \ No newline at end of file diff --git a/includes/backend.inc b/includes/backend.inc new file mode 100644 index 000000000000..30f39c942d0b --- /dev/null +++ b/includes/backend.inc @@ -0,0 +1,241 @@ +<? + +include "includes/function.inc"; + +class backend { + + // Channel properties: + var $id; + var $url; + var $site; + var $file; + var $contact; + var $timestamp; + + // Contains the raw rdf/rss/xml file: + var $data; + + // Contains the parsed rdf/rss/xml file: + var $headlines = array(); // latest headlines + + + ##### + # Syntax.......: backend(...); + # Description..: Constructor - initializes the internal variables. + # + function backend($id, $site, $url, $file, $contact, $timout = 1800) { + ### Get channel info: + $result = db_query("SELECT * FROM channel WHERE id = '$id' OR site = '$site'"); + + if ($channel = db_fetch_object($result)) { + ### Initialize internal variables: + $this->id = $channel->id; + $this->site = $channel->site; + $this->file = $channel->file; + $this->url = $channel->url; + $this->contact = $channel->contact; + $this->timestamp = $channel->timestamp; + + ### Check to see whether we have to update our headlines first: + if (time() - $this->timestamp > $timout) $this->url2sql(); + + ### Read headlines: + $result = db_query("SELECT * FROM headlines WHERE id = $this->id ORDER BY number"); + while ($headline = db_fetch_object($result)) { + array_push($this->headlines, "<A HREF=\"$headline->link\">$headline->title</A>"); + } + + } + else { + $this->site = $site; + $this->url = $url; + $this->file = $file; + $this->contact = $contact; + } + } + + ##### + # Syntax.......: rdf2sql(optional timout value in seconds); + # Description..: Reads a RDF file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function rdf2sql($timout = 10) { + if ($this->file) { + ### Decode URL: + $url = parse_url($this->file); + $host = $url[host]; + $port = $url[port] ? $url[port] : 80; + $path = $url[path]; + + // print "<PRE><B>Debug:</B> $url - $host - $port - $path</PRE>"; + + ### Retrieve data from website: + $fp = fsockopen($host, $port, &$errno, &$errstr, $timout); + + if ($fp) { + ### Get data from URL: + fputs($fp, "GET $path HTTP/1.0\n"); + fputs($fp, "User-Agent: headline grabber\n"); + fputs($fp, "Host: ". $host ."\n"); + fputs($fp, "Accept: */*\n\n"); + + while(!feof($fp)) $data .= fgets($fp, 128); + + // print "<PRE>$data</PRE><HR>"; + + if (strstr($data, "200 OK")) { + + ### Remove existing entries: + $result = db_query("DELETE FROM headlines WHERE id = $this->id"); + + ### Strip all 'junk': + $data = ereg_replace("<?xml.*/image>", "", $data); + $data = ereg_replace("</rdf.*", "", $data); + $data = chop($data); + + ### Iterating through our data processing each entry/item: + $items = explode("</item>", $data); + $number = 0; + + for (reset($items); $item = current($items); next($items)) { + ### Extract data: + $link = ereg_replace(".*<link>", "", $item); + $link = ereg_replace("</link>.*", "", $link); + $title = ereg_replace(".*<title>", "", $item); + $title = ereg_replace("</title>.*", "", $title); + + ### Clean headlines: + $title = stripslashes(fixquotes($title)); + + ### Count the number of stories: + $number += 1; + + ### Insert item in database: + $result = db_query("INSERT INTO headlines (id, title, link, number) VALUES('$this->id', '$title', '$link', '$number')"); + } + + ### Mark channels as being updated: + $result = db_query("UPDATE channel SET timestamp = '". time() ."' WHERE id = $this->id"); + $this->timestamp = time(); + } + else print "<HR>RDF parser: 404 error?<BR><BR><PRE>$data</PRE><HR>"; + } + } + } + + + ##### + # Syntax.......: rss2sql(optional timout value in seconds); + # Description..: Reads a RSS file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function rss2sql($timout = 10) { + print "backend->rss2sql : TODO<BR>"; + } + + + ##### + # Syntax.......: xml2sql(optional timout value in seconds); + # Description..: Reads a XML file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function xml2sql($timout = 10) { + print "backend->xml2sql : TODO<BR>"; + } + + + ##### + # Syntax.......: url2sql(optional timout value in seconds); + # Description..: Generic function to fetch fresh headlines. It checks whether + # we are dealing with a remote RDF, RSS or XML file and calls + # the appropriate function to fetch the headline. The function + # is an abstraction towards the programmer as he doesn't need + # to know with what file extension we are dealing. + # + function url2sql($timout = 10) { + if (strstr($this->file, ".rdf")) $this->rdf2sql($timout); + if (strstr($this->file, ".rss")) $this->rss2sql($timout); + if (strstr($this->file, ".xml")) $this->xml2sql($timout); + } + + + ##### + # Syntax.......: + # Description..: + # + function displayHeadlines($timout = 1800) { + global $theme; + + ### Get channel info: + $result = db_query("SELECT * FROM channel WHERE site = '$this->site'"); + + if ($this->id) { + + ### Check to see whether we have to update our headlines first: + if (time() - $this->timestamp > $timout) $this->url2sql(); + + ### Grab headlines from database: + $result = db_query("SELECT * FROM headlines WHERE id = $this->id ORDER BY number"); + while ($headline = db_fetch_object($result)) { + $content .= "<LI><A HREF=\"$headline->link\">$headline->title</A></LI>"; + } + ### Add timestamp: + $update = round((time() - $this->timestamp) / 60); + $content .= "<P ALIGN=\"right\">[ <A HREF=\"backend.php?op=reset&site=$this->site\"><FONT COLOR=\"$theme->hlcolor2\">reset</FONT></A> | updated $update min. ago ]</P>"; + + ### Display box: + $theme->box("$this->site", $content); + } + else print "<P>Warning: something whiched happened: specified channel could not be found in database.</P>"; + } + + + ##### + # Syntax.......: add() + # Description..: Adds this backend to the database. + # + function add() { + ### Add channel: + $result = db_query("INSERT INTO channel (site, file, url, contact, timestamp) VALUES ('$this->site', '$this->file', '$this->url', '$this->contact', 42)"); + } + + + ##### + # Syntax.......: delete() + # Description..: Deletes this backend + # + function delete() { + ### Delete channel: + $result = db_query("DELETE FROM channel WHERE id = $this->id"); + + ### Delete headlines: + $result = db_query("DELETE FROM headlines WHERE id = $this->id"); + } + + ##### + # Syntax.......: refresh() + # Description..: Deletes all headlines associated with this backend. + # + function refresh() { + ### Delete headlines: + $result = db_query("DELETE FROM headlines WHERE id = $this->id"); + + ### Mark channel as invalid to enforce an update: + $result = db_query("UPDATE channel SET timestamp = 42 WHERE id = $this->id"); + } + + ##### + # Syntax.......: dump() + # Description..: Dumps the content of this class to screen. + # + function dump() { + print "<B>Dump backend:</B><BR>"; + print "Id: $this->id<BR>"; + print "Site: $this->site<BR>"; + print "URL: $this->url<BR>"; + print "File: $this->file<BR>"; + print "Contact: $this->contact<BR>"; + } +} + +?> diff --git a/ban.inc b/includes/ban.inc similarity index 100% rename from ban.inc rename to includes/ban.inc diff --git a/includes/calendar.inc b/includes/calendar.inc new file mode 100644 index 000000000000..561363c33439 --- /dev/null +++ b/includes/calendar.inc @@ -0,0 +1,76 @@ +<? + +class calendar { + var $date; + + function calendar($date) { + $this->date = $date; + } + + function display() { + global $PHP_SELF; + + ### Extract information from the given date: + $month = date("n", $this->date); + $year = date("Y", $this->date); + $day = date("d", $this->date); + + ### Extract first day of the month: + $first = date("w", mktime(0, 0, 0, $month, 1, $year)); + + ### Extract last day of the month: + $last = date("t", mktime(0, 0, 0, $month, 1, $year)); + + ### Calculate previous and next months dates: + $prev = mktime(0, 0, 0, $month - 1, $day, $year); + $next = mktime(0, 0, 0, $month + 1, $day, $year); + + ### Generate calendar header: + $output .= "\n<!-- calendar -->\n"; + $output .= "<TABLE WIDTH=\"100%\" BORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n"; + $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"7\"><SMALL><A HREF=\"$PHP_SELF?date=$prev\"><</A> ". date("F Y", $this->date) ." <A HREF=\"$PHP_SELF?date=$next\">></A></SMALL></TD></TR>\n"; + $output .= " <TR><TD ALIGN=\"center\"><SMALL>S</SMALL></TD><TD ALIGN=\"center\"><SMALL>M</SMALL></TD><TD ALIGN=\"center\"><SMALL>T</SMALL></TD><TD ALIGN=\"center\"><SMALL>W</SMALL></TD><TD ALIGN=\"center\"><SMALL>T</SMALL></TD><TD ALIGN=\"center\"><SMALL>F</SMALL></TD><TD ALIGN=\"center\"><SMALL>S</SMALL></TD></TR>\n"; + + ### Initialize temporary variables: + $nday = 1; + $sday = $first; + + ### Loop through all the days of the month: + while ($nday <= $last) { + ### Set up blank days for first week of the month: + if ($first) { + $output .= " <TR><TD COLSPAN=\"$first\"> </TD>\n"; + $first = 0; + } + + ### Start every week on a new line: + if ($sday == 0) $output .= " <TR>\n"; + + ### Print one cell: + $date = mktime(24, 0, 0, $month, $nday, $year); + if ($nday == $day) $output .= " <TD ALIGN=\"center\"><SMALL><B>$nday</B></SMALL></TD>\n"; + else if ($date > time()) $output .= " <TD ALIGN=\"center\"><SMALL>$nday</SMALL></TD>\n"; + else $output .= " <TD ALIGN=\"center\"><SMALL><A HREF=\"$PHP_SELF?date=$date\" STYLE=\"text-decoration: none;\">$nday</A></SMALL></TD>\n"; + + ### Start every week on a new line: + if ($sday == 6) $output .= " </TR>\n"; + + ### Update temporary variables: + $sday++; + $sday = $sday % 7; + $nday++; + } + + ### Complete the calendar: + if ($sday) { + $end = 7 - $sday; + $output .= " <TD COLSPAN=\"$end\"> </TD>\n </TR>\n"; + } + $output .= "</TABLE>\n\n"; + + ### Return calendar: + return $output; + } +} + +?> diff --git a/config.inc b/includes/config.inc similarity index 97% rename from config.inc rename to includes/config.inc index 270c993f2d33..4d54bca985b7 100644 --- a/config.inc +++ b/includes/config.inc @@ -9,7 +9,7 @@ $dbpass = "Abc123"; $dbname = "dries"; -#$dbhost = ""; +#$dbhost = "localhost"; #$dbuname = "dries"; #$dbpass = "oakley"; #$dbname = "dries"; @@ -85,7 +85,7 @@ "themes/zaphod/zaphod.theme", "yellow, simple"), "UnConeD" => array( - "themes/UnConeD/theme.class.php", + "themes/unconed/unconed.theme", "gray, flashy")); # @@ -110,6 +110,6 @@ # Set to '1' if you are using Windows so the engine won't try # to send out mails and such. When using Unix or Linux, set # to '0' -$system = 0; +$mail = 0; ?> \ No newline at end of file diff --git a/database.inc b/includes/database.inc similarity index 92% rename from database.inc rename to includes/database.inc index 3a7769f656fb..3721fbd65164 100644 --- a/database.inc +++ b/includes/database.inc @@ -8,9 +8,9 @@ */ function db_connect() { - include "config.inc"; + global $dbhost, $dbuname, $dbpass, $dbname; mysql_pconnect($dbhost, $dbuname, $dbpass) or die(mysql_Error()); - mysql_select_db("$dbname") or die ("Unable to select database"); + mysql_select_db($dbname) or die ("Unable to select database"); // NOTE: we are using a persistent connection! } diff --git a/function.inc b/includes/function.inc similarity index 95% rename from function.inc rename to includes/function.inc index a3fb0111a6ba..de2dbaac0e60 100644 --- a/function.inc +++ b/includes/function.inc @@ -1,7 +1,7 @@ <? -include "database.inc"; -include "log.inc"; +include "includes/database.inc"; +include "includes/log.inc"; function id2story($id) { ### Perform query: @@ -38,7 +38,7 @@ function check_input($message) { } function check_output($message) { - include "config.inc"; + global $allowed_html; return nl2br(strip_tags(stripslashes($message), $allowed_html)); } @@ -77,7 +77,7 @@ function format_data($field, $replacement = "<I>n/a</I>") { function format_username($username, $admin = 0) { if ($username) return ($admin) ? "<A HREF=\"admin.php?section=accounts&op=view&name=$username\">$username</A>" : "<A HREF=\"account.php?op=view&name=$username\">$username</A>"; - else { include "config.inc"; return $anonymous; } + else { global $anonymous; return $anonymous; } } function format_email_address($address) { diff --git a/log.inc b/includes/log.inc similarity index 100% rename from log.inc rename to includes/log.inc diff --git a/submission.inc b/includes/submission.inc similarity index 95% rename from submission.inc rename to includes/submission.inc index 11c6e61a3a9c..376c84059679 100644 --- a/submission.inc +++ b/includes/submission.inc @@ -11,9 +11,7 @@ function submission_score($id) { } function submission_vote($id, $vote, $comment) { - global $user; - - include "config.inc"; + global $user, $submission_post_threshold, $submission_dump_threshold; if (!user_getHistory($user->history, "s$id")) { ### Update submission's score- and votes-field: diff --git a/template.inc b/includes/template.inc similarity index 70% rename from template.inc rename to includes/template.inc index 2b9618e96de0..08d469d942e7 100644 --- a/template.inc +++ b/includes/template.inc @@ -1,11 +1,11 @@ <? -include "user.class.php"; +include "includes/user.inc"; function display_morelink($theme, $story) { return ($story->article) ? "[ <A HREF=\"discussion.php?id=$story->id\"><FONT COLOR=\"$theme->hlcolor2\"><B>read more</B></FONT></A> | ". strlen($story->article) ." bytes | <A HREF=\"discussion.php?id=$story->id\"><FONT COLOR=\"$theme->hlcolor2\">". format_plural($story->comments, "comment", "comments") ."</FONT></A> ]" : "[ <A HREF=\"discussion.php?id=$story->id\"><FONT COLOR=\"$theme->hlcolor2\">". format_plural($story->comments, "comment", "comments") ."</FONT></A> ]"; } -function displayModerationResults($theme, $story) { +function display_moderation_results($theme, $story) { global $user; if ($user->id && $story->id && $vote = user_getHistory($user->history, "s$story->id")) { @@ -22,7 +22,7 @@ function displayModerationResults($theme, $story) { } } -function displayRelatedLinks($theme, $story) { +function display_related_links($theme, $story) { ### Parse story for <A HREF="">-tags: $text = stripslashes("$story->abstract $story->updates $story->article"); while ($text = stristr($text, "<A HREF=")) { @@ -40,7 +40,7 @@ function displayRelatedLinks($theme, $story) { $theme->box("Related links", $content); } -function displayOldHeadlines($theme, $num = 10) { +function display_old_headlines($theme, $num = 10) { global $user; if ($user->storynum) $result = db_query("SELECT id, subject, timestamp FROM stories WHERE status = 2 ORDER BY timestamp DESC LIMIT $user->storynum, $num"); @@ -58,19 +58,22 @@ function displayOldHeadlines($theme, $num = 10) { $theme->box("Older headlines", $content); } -function displayCommentModeration($id) { +function display_comment_moderation($id, $author, $score, $votes) { global $user, $comment_votes; - if ($user && !user_getHistory($user->history, "c$id")) { + if ($user && $user->userid != $author && !user_getHistory($user->history, "c$id")) { $output .= "<SELECT NAME=\"moderate[$id]\">\n"; foreach ($comment_votes as $key=>$value) $output .= " <OPTION VALUE=\"$value\">$key</OPTION>\n"; $output .= "</SELECT>\n"; } + else { + $output .= "<TABLE BORDER=\"0\" CELLSPACING=\"1\" CELLPADDING=\"0\"><TR><TD>score:</TD><TD>$score</TD></TR><TR><TD>votes:</TD><TD>$votes</TR></TABLE>"; + } print $output; } -function displayNewDiaries($theme, $num = 20) { +function display_new_diaries($theme, $num = 20) { $result = db_query("SELECT u.userid, d.timestamp FROM diaries d LEFT JOIN users u ON d.author = u.id ORDER BY timestamp DESC LIMIT $num"); while ($diary = db_fetch_object($result)) { @@ -84,7 +87,7 @@ function displayNewDiaries($theme, $num = 20) { $theme->box("Recent diary entries", $content); } -function displayNewHeadlines($theme, $num = 10) { +function display_new_headlines($theme, $num = 10) { global $user; $content = ""; @@ -94,51 +97,16 @@ function displayNewHeadlines($theme, $num = 10) { $theme->box("Latest headlines", $content); } -function displayAdminblock($theme) { - $result = db_query("SELECT title, content FROM blocks"); - while (list($title, $content) = mysql_fetch_array($result)) { - $theme->box($title, nl2br($content)); - } -} - -function displayUserblock($theme) { - global $user; - - if ($user && $user->ublockon) { - $content .= "<P ALIGN=\"right\">[ <A HREF=\"account.php?op=edithome\"><FONT COLOR=\"$theme->hlcolor2\">edit</FONT></A> | <A HREF=\"account.php?op=discussion\"><FONT COLOR=\"$theme->hlcolor2\">Track comments</FONT></A> | <A HREF=\"account.php?op=logout\"><FONT COLOR=\"$theme->hlcolor2\">logout</FONT></A>]</P>"; - $theme->box("$user->userid's box", $user->content); - } -} - -function displayLogin($theme) { - global $user; - - if ($user && $user->userid) { - ### Display userblock if any: - displayUserblock(); - } - else { - $content = "<CENTER><FORM METHOD=\"post\" ACTION=\"account.php\">\n"; - $content .= "<P>Username:<BR><INPUT NAME=userid MAXLENGTH=50 SIZE=12></P>\n"; - $content .= "<P>Password:<BR> <INPUT TYPE=password NAME=passwd MAXLENGTH=25 SIZE=12></P>\n"; - $content .= "<INPUT TYPE=submit NAME=op VALUE=\"Login\">\n"; - $content .= "</FORM>\n"; - $content .= "<P><A HREF=\"account.php?op=new\">Register</A> as new user.<BR><A HREF=\"account.php?op=forgot\">Forgot</A> your password?</P></CENTER>"; - $theme->box("Login", $content); - } -} - -function displayCalendar($theme, $date) { - include "calendar.class.php"; +function display_calendar($theme, $date) { + include "includes/calendar.inc"; $calendar = new calendar($date); $theme->box("Browse archives", $calendar->display()); } -function displayAccount($theme) { +function display_account($theme) { global $user; if ($user && $user->userid) { - function submission_number() { $result = db_query("SELECT COUNT(id) FROM stories WHERE status = 1"); return ($result) ? mysql_result($result, 0) : 0; @@ -157,10 +125,4 @@ function submission_number() { } } -function displayPoll($theme) { - global $answer, $answer1, $answer2, $answer3, $answer4, $answer5, $answer6, $id, $method, $section, $poll, $question; - // Pass the URI and FORM parameters along to poll.php. - $box = 1; - include "poll.php"; -} ?> diff --git a/includes/theme.inc b/includes/theme.inc new file mode 100644 index 000000000000..93c6b62ffe50 --- /dev/null +++ b/includes/theme.inc @@ -0,0 +1,11 @@ +<? + +include "includes/config.inc"; +include "includes/function.inc"; +include "includes/template.inc"; + +global $user; + +$theme = load_theme(); + +?> \ No newline at end of file diff --git a/includes/user.inc b/includes/user.inc new file mode 100644 index 000000000000..115c940c0bc4 --- /dev/null +++ b/includes/user.inc @@ -0,0 +1,83 @@ +<? + +$access = array("Administrator" => 0x00000001, + "User manager" => 0x00000002, + "News manager" => 0x00000004); + +class User { + function User($userid, $passwd="") { + $result = db_query("SELECT * FROM users WHERE LOWER(userid) = LOWER('$userid') && passwd = PASSWORD('$passwd') && STATUS = 0"); + if (db_num_rows($result) == 1) { + foreach (db_fetch_row($result) as $key=>$value) { $field = mysql_field_name($result, $key); $this->$field = stripslashes($value); $this->field[] = $field; } + } + } +} + +function user_save() { + global $user; + ### Compose query to update user record: +} + +function user_rehash() { + global $user; + $result = db_query("SELECT * FROM users WHERE id=$user->id"); + if (db_num_rows($result) == 1) { + foreach (db_fetch_array($result) as $key=>$value) { $user->$key = stripslashes($value); } + } +} + +function user_valid($access = 0) { + global $user; + if ($user->userid) { + user_rehash(); // synchronisation purpose + $user->last_access = time(); + $user->last_host = ($GLOBALS[REMOTE_HOST]) ? $GLOBALS[REMOTE_HOST] : $GLOBALS[REMOTE_ADDR]; + db_query("UPDATE users SET last_access = '$user->last_access', last_host = '$user->last_host' WHERE id = $user->id"); + if ($user->access & $access || $access == 0) return 1; + } + return 0; +} + +function user_getHistory($history, $field) { + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if (reset($entry) == $field) $rval = end($entry); + } + return $rval; +} + +function user_setHistory(&$user, $field, $value) { + + $history = $user->history; + if (!$value) { + ### remove entry: + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if ($entry[0] != $field) $rval .= "$entry[0]:$entry[1];"; + } + } + else if (strstr($history, "$field:")) { + ### found: update exsisting entry: + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if ($entry[0] == $field) $entry[1] = $value; + $rval .= "$entry[0]:$entry[1];"; + } + } + else { + ### not found: add new entry: + $rval = "$history$field:$value;"; + } + $user->history = $rval; + + ### save new history: + $query .= "UPDATE users SET "; + foreach ($user->field as $key=>$field) { $value = $user->$field; $query .= "$field = '". addslashes($value) ."', "; } + $query .= " id = $user->id WHERE id = $user->id"; + db_query($query); +} + +?> diff --git a/scripts/php-backup b/scripts/php-backup new file mode 100644 index 000000000000..a1848162851f --- /dev/null +++ b/scripts/php-backup @@ -0,0 +1,3 @@ +#!/bin/sh + +tar -zcf drop.tgz * diff --git a/scripts/php-clean b/scripts/php-clean new file mode 100644 index 000000000000..998f0f08dcb8 --- /dev/null +++ b/scripts/php-clean @@ -0,0 +1,4 @@ +#!/bin/sh + +find . -name "*~" | xargs rm -f +find . -name "DEADJOE" | xargs rm -f diff --git a/scripts/sql-backup b/scripts/sql-backup new file mode 100644 index 000000000000..edca9b006525 --- /dev/null +++ b/scripts/sql-backup @@ -0,0 +1,7 @@ +#!/bin/sh + +username="dries" +database="dries" +hostname="dione" + +mysqldump -h $hostname -u $username -p $database > mysql-backup diff --git a/theme.inc b/theme.inc deleted file mode 100644 index 9d0b5a0a66c1..000000000000 --- a/theme.inc +++ /dev/null @@ -1,11 +0,0 @@ -<? - -include "config.inc"; -include "function.inc"; -include "template.inc"; - -global $user; - -$theme = load_theme(); - -?> \ No newline at end of file diff --git a/themes/marvin/marvin.theme b/themes/marvin/marvin.theme index bbceb6f9ac65..c36830f3863b 100644 --- a/themes/marvin/marvin.theme +++ b/themes/marvin/marvin.theme @@ -20,10 +20,11 @@ class Theme { # Syntax.......: header($title); # Description..: a function to draw the page header. function header($title) { + global $sitename; ?> <HTML> <HEAD> - <TITLE><? include "config.inc"; print $sitename; ?></TITLE> + <TITLE><? print $sitename; ?></TITLE> <META NAME="description" CONTENT="drop.org"> <META NAME="keywords" CONTENT="drop, weblog, portal, community, news, article, announcements, stories, story, computer, science, space, hype, cult, geek, nerd, foo, bar"> </HEAD> @@ -52,8 +53,6 @@ function header($title) { # Description..: a function to draw an abstract story box, that is the # boxes displayed on the main page. function abstract($story) { - include "config.inc"; - $story->timestamp = date("l, F d, Y - h:i:s A", $story->timestamp); print "\n<!-- story: \"$story->subject\" -->\n"; @@ -84,8 +83,6 @@ function abstract($story) { # comments). It's what you get when you followed for # instance one of read-more links on the main page. function article($story, $reply) { - include "config.inc"; - $story->timestamp = date("l, F d, Y - h:i:s A", $story->timestamp); print "\n<!-- story: \"$story->subject\" -->\n"; @@ -179,9 +176,7 @@ function commentControl($sid, $title, $thold, $mode, $order) { ###### # Syntax.......: comment(...); # Description..: this function is used to theme user comments. - function comment($poster, $subject, $comment, $timestamp, $url, $email, $score, $cid, $link, $thread = "") { - include "config.inc"; - + function comment($poster, $subject, $comment, $timestamp, $url, $email, $score, $votes, $cid, $link, $thread = "") { print "\n<!-- Comment: \"$subject\" by $poster -->\n"; print "<A NAME=\"$cid\">\n"; @@ -201,7 +196,7 @@ function comment($poster, $subject, $comment, $timestamp, $url, $email, $score, ### Moderation: print " <TD ALIGN=\"right\" ROWSPAN=\"3\" VALIGN=\"middle\" WIDTH=\"15%\">\n"; - displayCommentModeration($cid); + display_comment_moderation($cid, $poster, $score, $votes); print " </TD>\n"; print " </TR>\n"; @@ -241,8 +236,6 @@ function comment($poster, $subject, $comment, $timestamp, $url, $email, $score, # news, when an editor wants to post news, when people # check the entries in the sumbission queue, etc. function preview($author, $subject, $abstract, $updates, $article, $timestamp, $category, $department) { - include "config.inc"; - print "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"2\" WIDTH=\"100%\">"; print " <TR><TD COLSPAN=\"2\"><B>$subject</B></TD></TR>"; print " <TR VALIGN=\"bottom\"><TD COLSPAN=\"2\" BGCOLOR=\"#000000\" WIDTH=\"100%\"><IMG SRC=\"themes/marvin/images/pixel.gif\" WIDTH=\"1\" HEIGHT=\"0\" ALT=\"\"></TD></TR>"; @@ -269,7 +262,6 @@ function preview($author, $subject, $abstract, $updates, $article, $timestamp, $ # Syntax.......: box($subject, $body); # Description..: a function to draw a box/block. function box($subject, $content) { - include "config.inc"; print "\n<!-- box: \"$subject\" -->\n"; print "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" BGCOLOR=\"#000000\" WIDTH=\"100%\">\n"; print " <TR>\n"; @@ -298,35 +290,35 @@ function footer() { global $user, $date; ### Display account: - displayAccount($this); + display_account($this); ### Display calendar: - displayOldHeadlines($this); + display_old_headlines($this); ### Display calendar: - displayCalendar($this, $date); + display_calendar($this, $date); ### Display new diary entries: - displayNewDiaries($this); + display_new_diaries($this); } elseif (strstr($PHP_SELF, "account.php")) { ### Display account: - displayAccount($this); + display_account($this); } elseif (strstr($PHP_SELF, "diary.php")) { ### Display account: - displayAccount($this); + display_account($this); ### Display new diary entries: - displayNewDiaries($this); + display_new_diaries($this); } elseif (strstr($PHP_SELF, "submission.php")) { ### Display account: - displayAccount($this); + display_account($this); } elseif (strstr($PHP_SELF, "submit.php")) { ### Display new headlines: - displayNewHeadlines($this); + display_new_headlines($this); } elseif (strstr($PHP_SELF, "discussion.php")) { global $id; @@ -334,24 +326,24 @@ function footer() { if ($id && $story = id2story($id)) { if ($story->status == 2) { ### Display new headlines: - displayNewHeadlines($this); + display_new_headlines($this); } else { ### Display results of moderation: - displayModerationResults($this, $story); + display_moderation_results($this, $story); } } else { ### Display account: - displayAccount($this); + display_account($this); ### Display new headlines: - displayNewHeadlines($this); + display_new_headlines($this); } } else { ### Display new headlines: - displayNewHeadlines($this); + display_new_headlines($this); } ?> </TD> -- GitLab