From 1ac117e7b5ec4f94ada02a50e6ac4123ccbf693c Mon Sep 17 00:00:00 2001 From: rich Date: Thu, 7 Dec 2006 17:05:47 +0000 Subject: [PATCH] RSS feeds using {{rss}} notation. --- Makefile.config | 18 +- html/_css/rss.css | 13 ++ html/_css/standard.css | 5 +- schema/cocanwiki.sql | 373 +++++++++++++++++++++----------------- scripts/Makefile | 14 +- scripts/lib/cocanwiki_func_rss.ml | 253 ++++++++++++++++++++++++++ templates/cocanwiki_func_rss.html | 27 +++ 7 files changed, 527 insertions(+), 176 deletions(-) create mode 100644 html/_css/rss.css create mode 100644 scripts/lib/cocanwiki_func_rss.ml create mode 100644 templates/cocanwiki_func_rss.html diff --git a/Makefile.config b/Makefile.config index 6291bbd..e06e126 100644 --- a/Makefile.config +++ b/Makefile.config @@ -1,4 +1,4 @@ -# $Id: Makefile.config,v 1.32 2006/07/27 09:37:10 rich Exp $ +# $Id: Makefile.config,v 1.33 2006/12/07 17:05:47 rich Exp $ PACKAGE := cocanwiki VERSION := 1.4.2 @@ -15,5 +15,21 @@ WIKIINSTALLDIR := /usr/share/cocanwiki # Location of PG'OCaml (http://merjis.com/developers/pgocaml) PGOCAMLDIR := $(HOME)/d/merjis/freeware/pgocaml +# Location of OCamlRSS and XML-Light. These are optional, but if you +# add them you will get RSS feeds using the {{rss:url=...}} notation. +# +# To disable this feature, just comment these lines out. +# +# To enable the rss function, you also need to manually set +# enable_rss_func = true in the relevant row of the hosts table. +# +# NB. RSS allows third party sites to place arbitrary content on your +# site. You should not use this if you care about cross-site scripting, +# particularly not on an open wiki. +# +OCAMLRSS := $(HOME)/d/ocamlrss +XML_LIGHT := $(HOME)/d/ocaml/xml-light +#XML_LIGHT := +xml-light + # Location of the OCaml lib directory. OCAMLLIBDIR := $(shell ocamlc -where) \ No newline at end of file diff --git a/html/_css/rss.css b/html/_css/rss.css new file mode 100644 index 0000000..796a7d1 --- /dev/null +++ b/html/_css/rss.css @@ -0,0 +1,13 @@ +/* RSS feeds ({{rss}} function). + * $Id: rss.css,v 1.1 2006/12/07 17:05:47 rich Exp $ + */ + +p.rss_description a { + color: black; + text-decoration: none; +} + +span.rss_item_description a { + color: black; + text-decoration: none; +} \ No newline at end of file diff --git a/html/_css/standard.css b/html/_css/standard.css index 00b619e..6314d0c 100644 --- a/html/_css/standard.css +++ b/html/_css/standard.css @@ -1,5 +1,5 @@ /* Stylesheet for COCANWIKI. - * $Id: standard.css,v 1.31 2006/08/18 14:46:04 rich Exp $ + * $Id: standard.css,v 1.32 2006/12/07 17:05:47 rich Exp $ */ /* Based on the basic stylesheet. */ @@ -14,6 +14,9 @@ /* Folding headings. */ @import url("folding.css"); +/* For RSS feeds ({{rss}} function). */ +@import url("rss.css"); + /* For print media. */ @import url("print.css"); diff --git a/schema/cocanwiki.sql b/schema/cocanwiki.sql index 03c4f41..3fa3349 100644 --- a/schema/cocanwiki.sql +++ b/schema/cocanwiki.sql @@ -8,7 +8,7 @@ SET check_function_bodies = false; SET search_path = public, pg_catalog; -- --- TOC entry 198 (OID 14911565) +-- TOC entry 201 (OID 14911565) -- Name: plpgsql_call_handler(); Type: FUNC PROCEDURAL LANGUAGE; Schema: public; Owner: postgres -- @@ -18,7 +18,7 @@ CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler -- --- TOC entry 119 (OID 14911566) +-- TOC entry 122 (OID 14911566) -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: public; Owner: -- @@ -60,7 +60,7 @@ GRANT SELECT ON TABLE pg_ts_dict TO "www-data"; -- --- TOC entry 120 (OID 11524574) +-- TOC entry 123 (OID 11524574) -- Name: lexize(oid, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -70,7 +70,7 @@ CREATE FUNCTION lexize(oid, text) RETURNS text[] -- --- TOC entry 121 (OID 11524575) +-- TOC entry 124 (OID 11524575) -- Name: lexize(text, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -80,7 +80,7 @@ CREATE FUNCTION lexize(text, text) RETURNS text[] -- --- TOC entry 122 (OID 11524576) +-- TOC entry 125 (OID 11524576) -- Name: lexize(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -90,7 +90,7 @@ CREATE FUNCTION lexize(text) RETURNS text[] -- --- TOC entry 123 (OID 11524577) +-- TOC entry 126 (OID 11524577) -- Name: set_curdict(integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -100,7 +100,7 @@ CREATE FUNCTION set_curdict(integer) RETURNS void -- --- TOC entry 124 (OID 11524578) +-- TOC entry 127 (OID 11524578) -- Name: set_curdict(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -110,7 +110,7 @@ CREATE FUNCTION set_curdict(text) RETURNS void -- --- TOC entry 125 (OID 11524579) +-- TOC entry 128 (OID 11524579) -- Name: dex_init(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -120,7 +120,7 @@ CREATE FUNCTION dex_init(internal) RETURNS internal -- --- TOC entry 126 (OID 11524580) +-- TOC entry 129 (OID 11524580) -- Name: dex_lexize(internal, internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -130,7 +130,7 @@ CREATE FUNCTION dex_lexize(internal, internal, integer) RETURNS internal -- --- TOC entry 127 (OID 11524582) +-- TOC entry 130 (OID 11524582) -- Name: snb_en_init(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -140,7 +140,7 @@ CREATE FUNCTION snb_en_init(internal) RETURNS internal -- --- TOC entry 128 (OID 11524583) +-- TOC entry 131 (OID 11524583) -- Name: snb_lexize(internal, internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -150,7 +150,7 @@ CREATE FUNCTION snb_lexize(internal, internal, integer) RETURNS internal -- --- TOC entry 129 (OID 11524585) +-- TOC entry 132 (OID 11524585) -- Name: snb_ru_init(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -160,7 +160,7 @@ CREATE FUNCTION snb_ru_init(internal) RETURNS internal -- --- TOC entry 130 (OID 11524587) +-- TOC entry 133 (OID 11524587) -- Name: spell_init(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -170,7 +170,7 @@ CREATE FUNCTION spell_init(internal) RETURNS internal -- --- TOC entry 131 (OID 11524588) +-- TOC entry 134 (OID 11524588) -- Name: spell_lexize(internal, internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -180,7 +180,7 @@ CREATE FUNCTION spell_lexize(internal, internal, integer) RETURNS internal -- --- TOC entry 132 (OID 11524590) +-- TOC entry 135 (OID 11524590) -- Name: syn_init(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -190,7 +190,7 @@ CREATE FUNCTION syn_init(internal) RETURNS internal -- --- TOC entry 133 (OID 11524591) +-- TOC entry 136 (OID 11524591) -- Name: syn_lexize(internal, internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -238,7 +238,7 @@ CREATE TYPE tokentype AS ( -- --- TOC entry 134 (OID 11524602) +-- TOC entry 137 (OID 11524602) -- Name: token_type(integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -248,7 +248,7 @@ CREATE FUNCTION token_type(integer) RETURNS SETOF tokentype -- --- TOC entry 135 (OID 11524603) +-- TOC entry 138 (OID 11524603) -- Name: token_type(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -258,7 +258,7 @@ CREATE FUNCTION token_type(text) RETURNS SETOF tokentype -- --- TOC entry 136 (OID 11524604) +-- TOC entry 139 (OID 11524604) -- Name: token_type(); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -268,7 +268,7 @@ CREATE FUNCTION token_type() RETURNS SETOF tokentype -- --- TOC entry 137 (OID 11524605) +-- TOC entry 140 (OID 11524605) -- Name: set_curprs(integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -278,7 +278,7 @@ CREATE FUNCTION set_curprs(integer) RETURNS void -- --- TOC entry 138 (OID 11524606) +-- TOC entry 141 (OID 11524606) -- Name: set_curprs(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -299,7 +299,7 @@ CREATE TYPE tokenout AS ( -- --- TOC entry 139 (OID 11524609) +-- TOC entry 142 (OID 11524609) -- Name: parse(oid, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -309,7 +309,7 @@ CREATE FUNCTION parse(oid, text) RETURNS SETOF tokenout -- --- TOC entry 140 (OID 11524610) +-- TOC entry 143 (OID 11524610) -- Name: parse(text, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -319,7 +319,7 @@ CREATE FUNCTION parse(text, text) RETURNS SETOF tokenout -- --- TOC entry 141 (OID 11524611) +-- TOC entry 144 (OID 11524611) -- Name: parse(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -329,7 +329,7 @@ CREATE FUNCTION parse(text) RETURNS SETOF tokenout -- --- TOC entry 142 (OID 11524612) +-- TOC entry 145 (OID 11524612) -- Name: prsd_start(internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -339,7 +339,7 @@ CREATE FUNCTION prsd_start(internal, integer) RETURNS internal -- --- TOC entry 143 (OID 11524613) +-- TOC entry 146 (OID 11524613) -- Name: prsd_getlexeme(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -349,7 +349,7 @@ CREATE FUNCTION prsd_getlexeme(internal, internal, internal) RETURNS integer -- --- TOC entry 144 (OID 11524614) +-- TOC entry 147 (OID 11524614) -- Name: prsd_end(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -359,7 +359,7 @@ CREATE FUNCTION prsd_end(internal) RETURNS void -- --- TOC entry 145 (OID 11524615) +-- TOC entry 148 (OID 11524615) -- Name: prsd_lextype(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -369,7 +369,7 @@ CREATE FUNCTION prsd_lextype(internal) RETURNS internal -- --- TOC entry 146 (OID 11524616) +-- TOC entry 149 (OID 11524616) -- Name: prsd_headline(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -423,7 +423,7 @@ GRANT SELECT ON TABLE pg_ts_cfgmap TO "www-data"; -- --- TOC entry 147 (OID 11524632) +-- TOC entry 150 (OID 11524632) -- Name: set_curcfg(integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -433,7 +433,7 @@ CREATE FUNCTION set_curcfg(integer) RETURNS void -- --- TOC entry 148 (OID 11524633) +-- TOC entry 151 (OID 11524633) -- Name: set_curcfg(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -443,7 +443,7 @@ CREATE FUNCTION set_curcfg(text) RETURNS void -- --- TOC entry 149 (OID 11524634) +-- TOC entry 152 (OID 11524634) -- Name: show_curcfg(); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -453,7 +453,7 @@ CREATE FUNCTION show_curcfg() RETURNS oid -- --- TOC entry 150 (OID 11524696) +-- TOC entry 153 (OID 11524696) -- Name: tsvector_in(cstring); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -463,7 +463,7 @@ CREATE FUNCTION tsvector_in(cstring) RETURNS tsvector -- --- TOC entry 151 (OID 11524697) +-- TOC entry 154 (OID 11524697) -- Name: tsvector_out(tsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -487,7 +487,7 @@ CREATE TYPE tsvector ( -- --- TOC entry 152 (OID 11524699) +-- TOC entry 155 (OID 11524699) -- Name: length(tsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -497,7 +497,7 @@ CREATE FUNCTION length(tsvector) RETURNS integer -- --- TOC entry 153 (OID 11524700) +-- TOC entry 156 (OID 11524700) -- Name: to_tsvector(oid, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -507,7 +507,7 @@ CREATE FUNCTION to_tsvector(oid, text) RETURNS tsvector -- --- TOC entry 154 (OID 11524701) +-- TOC entry 157 (OID 11524701) -- Name: to_tsvector(text, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -517,7 +517,7 @@ CREATE FUNCTION to_tsvector(text, text) RETURNS tsvector -- --- TOC entry 155 (OID 11524702) +-- TOC entry 158 (OID 11524702) -- Name: to_tsvector(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -527,7 +527,7 @@ CREATE FUNCTION to_tsvector(text) RETURNS tsvector -- --- TOC entry 156 (OID 11524703) +-- TOC entry 159 (OID 11524703) -- Name: strip(tsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -537,7 +537,7 @@ CREATE FUNCTION strip(tsvector) RETURNS tsvector -- --- TOC entry 157 (OID 11524704) +-- TOC entry 160 (OID 11524704) -- Name: setweight(tsvector, "char"); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -547,7 +547,7 @@ CREATE FUNCTION setweight(tsvector, "char") RETURNS tsvector -- --- TOC entry 158 (OID 11524705) +-- TOC entry 161 (OID 11524705) -- Name: concat(tsvector, tsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -557,7 +557,7 @@ CREATE FUNCTION concat(tsvector, tsvector) RETURNS tsvector -- --- TOC entry 200 (OID 11524706) +-- TOC entry 203 (OID 11524706) -- Name: ||; Type: OPERATOR; Schema: public; Owner: postgres -- @@ -569,7 +569,7 @@ CREATE OPERATOR || ( -- --- TOC entry 159 (OID 11524708) +-- TOC entry 162 (OID 11524708) -- Name: tsquery_in(cstring); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -579,7 +579,7 @@ CREATE FUNCTION tsquery_in(cstring) RETURNS tsquery -- --- TOC entry 160 (OID 11524709) +-- TOC entry 163 (OID 11524709) -- Name: tsquery_out(tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -603,7 +603,7 @@ CREATE TYPE tsquery ( -- --- TOC entry 161 (OID 11524711) +-- TOC entry 164 (OID 11524711) -- Name: querytree(tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -613,7 +613,7 @@ CREATE FUNCTION querytree(tsquery) RETURNS text -- --- TOC entry 162 (OID 11524712) +-- TOC entry 165 (OID 11524712) -- Name: to_tsquery(oid, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -623,7 +623,7 @@ CREATE FUNCTION to_tsquery(oid, text) RETURNS tsquery -- --- TOC entry 163 (OID 11524713) +-- TOC entry 166 (OID 11524713) -- Name: to_tsquery(text, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -633,7 +633,7 @@ CREATE FUNCTION to_tsquery(text, text) RETURNS tsquery -- --- TOC entry 164 (OID 11524714) +-- TOC entry 167 (OID 11524714) -- Name: to_tsquery(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -643,7 +643,7 @@ CREATE FUNCTION to_tsquery(text) RETURNS tsquery -- --- TOC entry 165 (OID 11524715) +-- TOC entry 168 (OID 11524715) -- Name: exectsq(tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -653,7 +653,7 @@ CREATE FUNCTION exectsq(tsvector, tsquery) RETURNS boolean -- --- TOC entry 167 (OID 11524716) +-- TOC entry 170 (OID 11524716) -- Name: rexectsq(tsquery, tsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -663,7 +663,7 @@ CREATE FUNCTION rexectsq(tsquery, tsvector) RETURNS boolean -- --- TOC entry 202 (OID 11524717) +-- TOC entry 205 (OID 11524717) -- Name: @@; Type: OPERATOR; Schema: public; Owner: postgres -- @@ -678,7 +678,7 @@ CREATE OPERATOR @@ ( -- --- TOC entry 201 (OID 11524718) +-- TOC entry 204 (OID 11524718) -- Name: @@; Type: OPERATOR; Schema: public; Owner: postgres -- @@ -693,7 +693,7 @@ CREATE OPERATOR @@ ( -- --- TOC entry 169 (OID 11524719) +-- TOC entry 172 (OID 11524719) -- Name: tsearch2(); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -703,7 +703,7 @@ CREATE FUNCTION tsearch2() RETURNS "trigger" -- --- TOC entry 170 (OID 11524720) +-- TOC entry 173 (OID 11524720) -- Name: rank(real[], tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -713,7 +713,7 @@ CREATE FUNCTION rank(real[], tsvector, tsquery) RETURNS real -- --- TOC entry 171 (OID 11524721) +-- TOC entry 174 (OID 11524721) -- Name: rank(real[], tsvector, tsquery, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -723,7 +723,7 @@ CREATE FUNCTION rank(real[], tsvector, tsquery, integer) RETURNS real -- --- TOC entry 172 (OID 11524722) +-- TOC entry 175 (OID 11524722) -- Name: rank(tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -733,7 +733,7 @@ CREATE FUNCTION rank(tsvector, tsquery) RETURNS real -- --- TOC entry 173 (OID 11524723) +-- TOC entry 176 (OID 11524723) -- Name: rank(tsvector, tsquery, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -743,7 +743,7 @@ CREATE FUNCTION rank(tsvector, tsquery, integer) RETURNS real -- --- TOC entry 174 (OID 11524724) +-- TOC entry 177 (OID 11524724) -- Name: rank_cd(integer, tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -753,7 +753,7 @@ CREATE FUNCTION rank_cd(integer, tsvector, tsquery) RETURNS real -- --- TOC entry 175 (OID 11524725) +-- TOC entry 178 (OID 11524725) -- Name: rank_cd(integer, tsvector, tsquery, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -763,7 +763,7 @@ CREATE FUNCTION rank_cd(integer, tsvector, tsquery, integer) RETURNS real -- --- TOC entry 176 (OID 11524726) +-- TOC entry 179 (OID 11524726) -- Name: rank_cd(tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -773,7 +773,7 @@ CREATE FUNCTION rank_cd(tsvector, tsquery) RETURNS real -- --- TOC entry 177 (OID 11524727) +-- TOC entry 180 (OID 11524727) -- Name: rank_cd(tsvector, tsquery, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -783,7 +783,7 @@ CREATE FUNCTION rank_cd(tsvector, tsquery, integer) RETURNS real -- --- TOC entry 178 (OID 11524728) +-- TOC entry 181 (OID 11524728) -- Name: headline(oid, text, tsquery, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -793,7 +793,7 @@ CREATE FUNCTION headline(oid, text, tsquery, text) RETURNS text -- --- TOC entry 179 (OID 11524729) +-- TOC entry 182 (OID 11524729) -- Name: headline(oid, text, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -803,7 +803,7 @@ CREATE FUNCTION headline(oid, text, tsquery) RETURNS text -- --- TOC entry 180 (OID 11524730) +-- TOC entry 183 (OID 11524730) -- Name: headline(text, text, tsquery, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -813,7 +813,7 @@ CREATE FUNCTION headline(text, text, tsquery, text) RETURNS text -- --- TOC entry 181 (OID 11524731) +-- TOC entry 184 (OID 11524731) -- Name: headline(text, text, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -823,7 +823,7 @@ CREATE FUNCTION headline(text, text, tsquery) RETURNS text -- --- TOC entry 182 (OID 11524732) +-- TOC entry 185 (OID 11524732) -- Name: headline(text, tsquery, text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -833,7 +833,7 @@ CREATE FUNCTION headline(text, tsquery, text) RETURNS text -- --- TOC entry 183 (OID 11524733) +-- TOC entry 186 (OID 11524733) -- Name: headline(text, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -843,7 +843,7 @@ CREATE FUNCTION headline(text, tsquery) RETURNS text -- --- TOC entry 184 (OID 11524735) +-- TOC entry 187 (OID 11524735) -- Name: gtsvector_in(cstring); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -853,7 +853,7 @@ CREATE FUNCTION gtsvector_in(cstring) RETURNS gtsvector -- --- TOC entry 185 (OID 11524736) +-- TOC entry 188 (OID 11524736) -- Name: gtsvector_out(gtsvector); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -877,7 +877,7 @@ CREATE TYPE gtsvector ( -- --- TOC entry 186 (OID 11524738) +-- TOC entry 189 (OID 11524738) -- Name: gtsvector_consistent(gtsvector, internal, integer); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -887,7 +887,7 @@ CREATE FUNCTION gtsvector_consistent(gtsvector, internal, integer) RETURNS boole -- --- TOC entry 187 (OID 11524739) +-- TOC entry 190 (OID 11524739) -- Name: gtsvector_compress(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -897,7 +897,7 @@ CREATE FUNCTION gtsvector_compress(internal) RETURNS internal -- --- TOC entry 188 (OID 11524740) +-- TOC entry 191 (OID 11524740) -- Name: gtsvector_decompress(internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -907,7 +907,7 @@ CREATE FUNCTION gtsvector_decompress(internal) RETURNS internal -- --- TOC entry 189 (OID 11524741) +-- TOC entry 192 (OID 11524741) -- Name: gtsvector_penalty(internal, internal, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -917,7 +917,7 @@ CREATE FUNCTION gtsvector_penalty(internal, internal, internal) RETURNS internal -- --- TOC entry 190 (OID 11524742) +-- TOC entry 193 (OID 11524742) -- Name: gtsvector_picksplit(internal, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -927,7 +927,7 @@ CREATE FUNCTION gtsvector_picksplit(internal, internal) RETURNS internal -- --- TOC entry 191 (OID 11524743) +-- TOC entry 194 (OID 11524743) -- Name: gtsvector_union(bytea, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -937,7 +937,7 @@ CREATE FUNCTION gtsvector_union(bytea, internal) RETURNS integer[] -- --- TOC entry 192 (OID 11524744) +-- TOC entry 195 (OID 11524744) -- Name: gtsvector_same(gtsvector, gtsvector, internal); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -947,7 +947,7 @@ CREATE FUNCTION gtsvector_same(gtsvector, gtsvector, internal) RETURNS internal -- --- TOC entry 203 (OID 11524745) +-- TOC entry 206 (OID 11524745) -- Name: gist_tsvector_ops; Type: OPERATOR CLASS; Schema: public; Owner: postgres -- @@ -977,7 +977,7 @@ CREATE TYPE statinfo AS ( -- --- TOC entry 193 (OID 11524748) +-- TOC entry 196 (OID 11524748) -- Name: stat(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -987,7 +987,7 @@ CREATE FUNCTION stat(text) RETURNS SETOF statinfo -- --- TOC entry 194 (OID 11524749) +-- TOC entry 197 (OID 11524749) -- Name: reset_tsearch(); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -997,7 +997,7 @@ CREATE FUNCTION reset_tsearch() RETURNS void -- --- TOC entry 195 (OID 11524750) +-- TOC entry 198 (OID 11524750) -- Name: get_covers(tsvector, tsquery); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -1022,7 +1022,7 @@ CREATE TYPE tsdebug AS ( -- --- TOC entry 196 (OID 11524753) +-- TOC entry 199 (OID 11524753) -- Name: _get_parser_from_curcfg(); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -1032,7 +1032,7 @@ CREATE FUNCTION _get_parser_from_curcfg() RETURNS text -- --- TOC entry 197 (OID 11524754) +-- TOC entry 200 (OID 11524754) -- Name: ts_debug(text); Type: FUNCTION; Schema: public; Owner: postgres -- @@ -1093,7 +1093,7 @@ GRANT ALL ON TABLE pages TO "www-data"; -- --- TOC entry 67 (OID 11524757) +-- TOC entry 69 (OID 11524757) -- Name: pages_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1130,7 +1130,7 @@ GRANT ALL ON TABLE contents TO "www-data"; -- --- TOC entry 68 (OID 11524767) +-- TOC entry 70 (OID 11524767) -- Name: contents_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1164,7 +1164,8 @@ CREATE TABLE hosts ( ie_imagetoolbar_no boolean DEFAULT false NOT NULL, global_noodp boolean DEFAULT false NOT NULL, ie6_fixes_css text, - ie7_fixes_css text + ie7_fixes_css text, + enable_rss_func boolean DEFAULT false NOT NULL ); @@ -1178,7 +1179,7 @@ GRANT ALL ON TABLE hosts TO "www-data"; -- --- TOC entry 69 (OID 11524775) +-- TOC entry 71 (OID 11524775) -- Name: hosts_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1242,7 +1243,7 @@ GRANT ALL ON TABLE images TO "www-data"; -- --- TOC entry 70 (OID 11524795) +-- TOC entry 72 (OID 11524795) -- Name: images_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1277,7 +1278,7 @@ GRANT ALL ON TABLE files TO "www-data"; -- --- TOC entry 71 (OID 11524804) +-- TOC entry 73 (OID 11524804) -- Name: files_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1320,7 +1321,7 @@ GRANT ALL ON TABLE users TO "www-data"; -- --- TOC entry 72 (OID 11524813) +-- TOC entry 74 (OID 11524813) -- Name: users_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1393,7 +1394,7 @@ GRANT ALL ON TABLE contacts TO "www-data"; -- --- TOC entry 73 (OID 11524840) +-- TOC entry 75 (OID 11524840) -- Name: contacts_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1558,7 +1559,7 @@ GRANT SELECT ON TABLE templates TO "www-data"; -- --- TOC entry 74 (OID 11524882) +-- TOC entry 76 (OID 11524882) -- Name: templates_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1611,7 +1612,7 @@ GRANT ALL ON TABLE messages TO "www-data"; -- --- TOC entry 75 (OID 11524896) +-- TOC entry 77 (OID 11524896) -- Name: messages_id_seq; Type: ACL; Schema: public; Owner: rich -- @@ -1684,7 +1685,7 @@ GRANT ALL ON TABLE pending_email_changes TO "www-data"; -- --- TOC entry 199 (OID 14911567) +-- TOC entry 202 (OID 14911567) -- Name: contents_jsgo_check_tg(); Type: FUNCTION; Schema: public; Owner: rich -- @@ -1744,7 +1745,28 @@ GRANT ALL ON TABLE macros TO "www-data"; -- --- TOC entry 90 (OID 11576669) +-- TOC entry 67 (OID 14972886) +-- Name: rss_cache; Type: TABLE; Schema: public; Owner: rich +-- + +CREATE TABLE rss_cache ( + url text NOT NULL, + t timestamp without time zone DEFAULT ('now'::text)::timestamp(6) with time zone NOT NULL, + rss text NOT NULL +); + + +-- +-- TOC entry 68 (OID 14972886) +-- Name: rss_cache; Type: ACL; Schema: public; Owner: rich +-- + +REVOKE ALL ON TABLE rss_cache FROM PUBLIC; +GRANT ALL ON TABLE rss_cache TO "www-data"; + + +-- +-- TOC entry 92 (OID 11576669) -- Name: hostnames_hostid_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1752,7 +1774,7 @@ CREATE UNIQUE INDEX hostnames_hostid_name_uq ON hostnames USING btree (hostid, n -- --- TOC entry 85 (OID 11576670) +-- TOC entry 87 (OID 11576670) -- Name: pages_url_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1760,7 +1782,7 @@ CREATE UNIQUE INDEX pages_url_uq ON pages USING btree (hostid, url); -- --- TOC entry 92 (OID 11576671) +-- TOC entry 94 (OID 11576671) -- Name: images_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1768,7 +1790,7 @@ CREATE UNIQUE INDEX images_name_uq ON images USING btree (hostid, name); -- --- TOC entry 94 (OID 11576672) +-- TOC entry 96 (OID 11576672) -- Name: files_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1776,7 +1798,7 @@ CREATE UNIQUE INDEX files_name_uq ON files USING btree (hostid, name); -- --- TOC entry 97 (OID 11576673) +-- TOC entry 99 (OID 11576673) -- Name: users_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1784,7 +1806,7 @@ CREATE UNIQUE INDEX users_name_uq ON users USING btree (hostid, name); -- --- TOC entry 96 (OID 11576674) +-- TOC entry 98 (OID 11576674) -- Name: users_id_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1792,7 +1814,7 @@ CREATE UNIQUE INDEX users_id_uq ON users USING btree (hostid, id); -- --- TOC entry 100 (OID 11576675) +-- TOC entry 102 (OID 11576675) -- Name: sitemenu_ordering_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1800,7 +1822,7 @@ CREATE UNIQUE INDEX sitemenu_ordering_uq ON sitemenu USING btree (hostid, orderi -- --- TOC entry 101 (OID 11576676) +-- TOC entry 103 (OID 11576676) -- Name: sitemenu_url_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1808,7 +1830,7 @@ CREATE UNIQUE INDEX sitemenu_url_uq ON sitemenu USING btree (hostid, url); -- --- TOC entry 104 (OID 11576677) +-- TOC entry 106 (OID 11576677) -- Name: contact_emails_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1816,7 +1838,7 @@ CREATE UNIQUE INDEX contact_emails_uq ON contact_emails USING btree (contactid, -- --- TOC entry 105 (OID 11576678) +-- TOC entry 107 (OID 11576678) -- Name: themes_theme_css_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1824,7 +1846,7 @@ CREATE UNIQUE INDEX themes_theme_css_uq ON themes USING btree (theme_css); -- --- TOC entry 106 (OID 11576679) +-- TOC entry 108 (OID 11576679) -- Name: page_emails_email_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1832,7 +1854,7 @@ CREATE UNIQUE INDEX page_emails_email_uq ON page_emails USING btree (hostid, url -- --- TOC entry 107 (OID 11576680) +-- TOC entry 109 (OID 11576680) -- Name: mailing_lists_email_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1840,7 +1862,7 @@ CREATE UNIQUE INDEX mailing_lists_email_uq ON mailing_lists USING btree (hostid, -- --- TOC entry 102 (OID 11576681) +-- TOC entry 104 (OID 11576681) -- Name: contacts_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1848,7 +1870,7 @@ CREATE UNIQUE INDEX contacts_name_uq ON contacts USING btree (hostid, name); -- --- TOC entry 108 (OID 11576682) +-- TOC entry 110 (OID 11576682) -- Name: links_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1856,7 +1878,7 @@ CREATE UNIQUE INDEX links_uq ON links USING btree (hostid, from_url, to_url); -- --- TOC entry 109 (OID 11576683) +-- TOC entry 111 (OID 11576683) -- Name: templates_ext_ord_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1864,7 +1886,7 @@ CREATE UNIQUE INDEX templates_ext_ord_uq ON templates USING btree (extension, or -- --- TOC entry 111 (OID 11576684) +-- TOC entry 113 (OID 11576684) -- Name: templates_title_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1872,7 +1894,7 @@ CREATE UNIQUE INDEX templates_title_uq ON templates USING btree (title_regexp); -- --- TOC entry 112 (OID 11576685) +-- TOC entry 114 (OID 11576685) -- Name: templates_url_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1880,7 +1902,7 @@ CREATE UNIQUE INDEX templates_url_uq ON templates USING btree (url_regexp); -- --- TOC entry 113 (OID 11576686) +-- TOC entry 115 (OID 11576686) -- Name: recently_visited_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1888,7 +1910,7 @@ CREATE UNIQUE INDEX recently_visited_uq ON recently_visited USING btree (userid, -- --- TOC entry 114 (OID 11576687) +-- TOC entry 116 (OID 11576687) -- Name: messages_inet_message_id_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1896,7 +1918,7 @@ CREATE UNIQUE INDEX messages_inet_message_id_uq ON messages USING btree (hostid, -- --- TOC entry 84 (OID 11576688) +-- TOC entry 86 (OID 11576688) -- Name: pages_url_ix; Type: INDEX; Schema: public; Owner: rich -- @@ -1904,7 +1926,7 @@ CREATE INDEX pages_url_ix ON pages USING btree (url); -- --- TOC entry 83 (OID 11576689) +-- TOC entry 85 (OID 11576689) -- Name: pages_redirect_ix; Type: INDEX; Schema: public; Owner: rich -- @@ -1912,7 +1934,7 @@ CREATE INDEX pages_redirect_ix ON pages USING btree (redirect); -- --- TOC entry 80 (OID 11576690) +-- TOC entry 82 (OID 11576690) -- Name: pages_fti_idx; Type: INDEX; Schema: public; Owner: rich -- @@ -1920,7 +1942,7 @@ CREATE INDEX pages_fti_idx ON pages USING gist (title_description_fti); -- --- TOC entry 86 (OID 11576691) +-- TOC entry 88 (OID 11576691) -- Name: contents_fti_idx; Type: INDEX; Schema: public; Owner: rich -- @@ -1928,7 +1950,7 @@ CREATE INDEX contents_fti_idx ON contents USING gist (content_fti); -- --- TOC entry 87 (OID 11576692) +-- TOC entry 89 (OID 11576692) -- Name: contents_pageid_idx; Type: INDEX; Schema: public; Owner: rich -- @@ -1936,7 +1958,7 @@ CREATE INDEX contents_pageid_idx ON contents USING btree (pageid); -- --- TOC entry 91 (OID 11576693) +-- TOC entry 93 (OID 11576693) -- Name: hostnames_name_uq; Type: INDEX; Schema: public; Owner: rich -- @@ -1944,7 +1966,7 @@ CREATE UNIQUE INDEX hostnames_name_uq ON hostnames USING btree (name); -- --- TOC entry 99 (OID 11576694) +-- TOC entry 101 (OID 11576694) -- Name: usercookies_cookie_idx; Type: INDEX; Schema: public; Owner: rich -- @@ -1952,7 +1974,7 @@ CREATE INDEX usercookies_cookie_idx ON usercookies USING btree (cookie); -- --- TOC entry 81 (OID 11576695) +-- TOC entry 83 (OID 11576695) -- Name: pages_lc_title; Type: INDEX; Schema: public; Owner: rich -- @@ -1960,7 +1982,7 @@ CREATE INDEX pages_lc_title ON pages USING btree (lower(title)); -- --- TOC entry 76 (OID 11524572) +-- TOC entry 78 (OID 11524572) -- Name: pg_ts_dict_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- @@ -1969,7 +1991,7 @@ ALTER TABLE ONLY pg_ts_dict -- --- TOC entry 77 (OID 11524598) +-- TOC entry 79 (OID 11524598) -- Name: pg_ts_parser_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- @@ -1978,7 +2000,7 @@ ALTER TABLE ONLY pg_ts_parser -- --- TOC entry 78 (OID 11524623) +-- TOC entry 80 (OID 11524623) -- Name: pg_ts_cfg_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- @@ -1987,7 +2009,7 @@ ALTER TABLE ONLY pg_ts_cfg -- --- TOC entry 79 (OID 11524630) +-- TOC entry 81 (OID 11524630) -- Name: pg_ts_cfgmap_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres -- @@ -1996,7 +2018,7 @@ ALTER TABLE ONLY pg_ts_cfgmap -- --- TOC entry 82 (OID 11576696) +-- TOC entry 84 (OID 11576696) -- Name: pages_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2005,7 +2027,7 @@ ALTER TABLE ONLY pages -- --- TOC entry 88 (OID 11576698) +-- TOC entry 90 (OID 11576698) -- Name: contents_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2014,7 +2036,7 @@ ALTER TABLE ONLY contents -- --- TOC entry 89 (OID 11576700) +-- TOC entry 91 (OID 11576700) -- Name: hosts_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2023,7 +2045,7 @@ ALTER TABLE ONLY hosts -- --- TOC entry 93 (OID 11576702) +-- TOC entry 95 (OID 11576702) -- Name: images_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2032,7 +2054,7 @@ ALTER TABLE ONLY images -- --- TOC entry 95 (OID 11576704) +-- TOC entry 97 (OID 11576704) -- Name: files_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2041,7 +2063,7 @@ ALTER TABLE ONLY files -- --- TOC entry 98 (OID 11576706) +-- TOC entry 100 (OID 11576706) -- Name: users_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2050,7 +2072,7 @@ ALTER TABLE ONLY users -- --- TOC entry 103 (OID 11576708) +-- TOC entry 105 (OID 11576708) -- Name: contacts_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2059,7 +2081,7 @@ ALTER TABLE ONLY contacts -- --- TOC entry 110 (OID 11576710) +-- TOC entry 112 (OID 11576710) -- Name: templates_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2068,7 +2090,7 @@ ALTER TABLE ONLY templates -- --- TOC entry 115 (OID 11576712) +-- TOC entry 117 (OID 11576712) -- Name: messages_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2077,7 +2099,7 @@ ALTER TABLE ONLY messages -- --- TOC entry 116 (OID 11576714) +-- TOC entry 118 (OID 11576714) -- Name: powered_by_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2086,7 +2108,7 @@ ALTER TABLE ONLY powered_by -- --- TOC entry 117 (OID 11576716) +-- TOC entry 119 (OID 11576716) -- Name: pending_email_changes_pkey; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2095,7 +2117,7 @@ ALTER TABLE ONLY pending_email_changes -- --- TOC entry 118 (OID 14911934) +-- TOC entry 120 (OID 14911934) -- Name: macros_hostid_key; Type: CONSTRAINT; Schema: public; Owner: rich -- @@ -2104,7 +2126,16 @@ ALTER TABLE ONLY macros -- --- TOC entry 208 (OID 11576718) +-- TOC entry 121 (OID 14972892) +-- Name: rss_cache_pkey; Type: CONSTRAINT; Schema: public; Owner: rich +-- + +ALTER TABLE ONLY rss_cache + ADD CONSTRAINT rss_cache_pkey PRIMARY KEY (url); + + +-- +-- TOC entry 211 (OID 11576718) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2113,7 +2144,7 @@ ALTER TABLE ONLY contents -- --- TOC entry 212 (OID 11576722) +-- TOC entry 215 (OID 11576722) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2122,7 +2153,7 @@ ALTER TABLE ONLY hostnames -- --- TOC entry 209 (OID 11576726) +-- TOC entry 212 (OID 11576726) -- Name: hosts_hostname_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2131,7 +2162,7 @@ ALTER TABLE ONLY hosts -- --- TOC entry 204 (OID 11576730) +-- TOC entry 207 (OID 11576730) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2140,7 +2171,7 @@ ALTER TABLE ONLY pages -- --- TOC entry 213 (OID 11576734) +-- TOC entry 216 (OID 11576734) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2149,7 +2180,7 @@ ALTER TABLE ONLY images -- --- TOC entry 214 (OID 11576738) +-- TOC entry 217 (OID 11576738) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2158,7 +2189,7 @@ ALTER TABLE ONLY files -- --- TOC entry 205 (OID 11576742) +-- TOC entry 208 (OID 11576742) -- Name: pages_redirect_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2167,7 +2198,7 @@ ALTER TABLE ONLY pages -- --- TOC entry 215 (OID 11576746) +-- TOC entry 218 (OID 11576746) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2176,7 +2207,7 @@ ALTER TABLE ONLY users -- --- TOC entry 216 (OID 11576750) +-- TOC entry 219 (OID 11576750) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2185,7 +2216,7 @@ ALTER TABLE ONLY usercookies -- --- TOC entry 206 (OID 11576754) +-- TOC entry 209 (OID 11576754) -- Name: $2; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2194,7 +2225,7 @@ ALTER TABLE ONLY pages -- --- TOC entry 207 (OID 11576758) +-- TOC entry 210 (OID 11576758) -- Name: pages_user_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2203,7 +2234,7 @@ ALTER TABLE ONLY pages -- --- TOC entry 217 (OID 11576762) +-- TOC entry 220 (OID 11576762) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2212,7 +2243,7 @@ ALTER TABLE ONLY sitemenu -- --- TOC entry 218 (OID 11576766) +-- TOC entry 221 (OID 11576766) -- Name: sitemenu_url_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2221,7 +2252,7 @@ ALTER TABLE ONLY sitemenu -- --- TOC entry 219 (OID 11576770) +-- TOC entry 222 (OID 11576770) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2230,7 +2261,7 @@ ALTER TABLE ONLY contacts -- --- TOC entry 220 (OID 11576774) +-- TOC entry 223 (OID 11576774) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2239,7 +2270,7 @@ ALTER TABLE ONLY contact_emails -- --- TOC entry 210 (OID 11576778) +-- TOC entry 213 (OID 11576778) -- Name: hosts_theme_css_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2248,7 +2279,7 @@ ALTER TABLE ONLY hosts -- --- TOC entry 221 (OID 11576782) +-- TOC entry 224 (OID 11576782) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2257,7 +2288,7 @@ ALTER TABLE ONLY page_emails -- --- TOC entry 222 (OID 11576786) +-- TOC entry 225 (OID 11576786) -- Name: page_emails_url_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2266,7 +2297,7 @@ ALTER TABLE ONLY page_emails -- --- TOC entry 223 (OID 11576790) +-- TOC entry 226 (OID 11576790) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2275,7 +2306,7 @@ ALTER TABLE ONLY mailing_lists -- --- TOC entry 224 (OID 11576794) +-- TOC entry 227 (OID 11576794) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2284,7 +2315,7 @@ ALTER TABLE ONLY links -- --- TOC entry 225 (OID 11576798) +-- TOC entry 228 (OID 11576798) -- Name: links_from_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2293,7 +2324,7 @@ ALTER TABLE ONLY links -- --- TOC entry 226 (OID 11576802) +-- TOC entry 229 (OID 11576802) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2302,7 +2333,7 @@ ALTER TABLE ONLY recently_visited -- --- TOC entry 227 (OID 11576806) +-- TOC entry 230 (OID 11576806) -- Name: $2; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2311,7 +2342,7 @@ ALTER TABLE ONLY recently_visited -- --- TOC entry 228 (OID 11576810) +-- TOC entry 231 (OID 11576810) -- Name: recently_visited_url_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2320,7 +2351,7 @@ ALTER TABLE ONLY recently_visited -- --- TOC entry 229 (OID 11576814) +-- TOC entry 232 (OID 11576814) -- Name: recently_visited_userid_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2329,7 +2360,7 @@ ALTER TABLE ONLY recently_visited -- --- TOC entry 231 (OID 11576818) +-- TOC entry 234 (OID 11576818) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2338,7 +2369,7 @@ ALTER TABLE ONLY msg_references -- --- TOC entry 230 (OID 11576822) +-- TOC entry 233 (OID 11576822) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2347,7 +2378,7 @@ ALTER TABLE ONLY messages -- --- TOC entry 211 (OID 11576826) +-- TOC entry 214 (OID 11576826) -- Name: hosts_powered_by_cn; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2356,7 +2387,7 @@ ALTER TABLE ONLY hosts -- --- TOC entry 232 (OID 11576830) +-- TOC entry 235 (OID 11576830) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2365,7 +2396,7 @@ ALTER TABLE ONLY pending_email_changes -- --- TOC entry 233 (OID 14911936) +-- TOC entry 236 (OID 14911936) -- Name: $1; Type: FK CONSTRAINT; Schema: public; Owner: rich -- @@ -2374,7 +2405,7 @@ ALTER TABLE ONLY macros -- --- TOC entry 234 (OID 11576834) +-- TOC entry 237 (OID 11576834) -- Name: pages_fti_tr; Type: TRIGGER; Schema: public; Owner: rich -- @@ -2385,7 +2416,7 @@ CREATE TRIGGER pages_fti_tr -- --- TOC entry 235 (OID 11576835) +-- TOC entry 238 (OID 11576835) -- Name: contents_fti_tr; Type: TRIGGER; Schema: public; Owner: rich -- @@ -2396,7 +2427,7 @@ CREATE TRIGGER contents_fti_tr -- --- TOC entry 236 (OID 14911568) +-- TOC entry 239 (OID 14911568) -- Name: contents_jsgo_check_tg; Type: TRIGGER; Schema: public; Owner: rich -- @@ -2415,7 +2446,7 @@ COMMENT ON SCHEMA public IS 'Standard public namespace'; -- --- TOC entry 166 (OID 11524715) +-- TOC entry 169 (OID 11524715) -- Name: FUNCTION exectsq(tsvector, tsquery); Type: COMMENT; Schema: public; Owner: postgres -- @@ -2423,7 +2454,7 @@ COMMENT ON FUNCTION exectsq(tsvector, tsquery) IS 'boolean operation with text i -- --- TOC entry 168 (OID 11524716) +-- TOC entry 171 (OID 11524716) -- Name: FUNCTION rexectsq(tsquery, tsvector); Type: COMMENT; Schema: public; Owner: postgres -- diff --git a/scripts/Makefile b/scripts/Makefile index 1bffc60..f0a1692 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -1,13 +1,16 @@ # Makefile for COCANWIKI. -# $Id: Makefile,v 1.52 2006/09/11 09:38:59 rich Exp $ +# $Id: Makefile,v 1.53 2006/12/07 17:05:47 rich Exp $ include ../Makefile.config PGOCAML_PP := camlp4o -I +pcre -I +extlib -I $(PGOCAMLDIR) $(OCAMLLIBDIR)/unix.cma $(OCAMLLIBDIR)/pcre/pcre.cma $(OCAMLLIBDIR)/extlib/extLib.cma $(OCAMLLIBDIR)/calendar/calendar.cma pgocaml.cma pa_pgsql.cmo +PACKAGES = apache,pcre,extlib,netstring,calendar + OCAMLC := ocamlc -OCAMLCFLAGS := \ - -package apache,pcre,extlib,netstring,calendar -I $(PGOCAMLDIR) \ +OCAMLCFLAGS = \ + -package $(PACKAGES) \ + -I $(PGOCAMLDIR) \ -I lib -pp "$(PGOCAML_PP)" CPP := cpp @@ -51,6 +54,11 @@ LIB_OBJS := \ lib/cocanwiki_mail.cmo \ lib/cdvmm_phone_numbers.cmo +ifneq ($(OCAMLRSS),) +LIB_OBJS += lib/cocanwiki_func_rss.cmo +OCAMLCFLAGS += -package netclient -I $(OCAMLRSS) -I $(XML_LIGHT) +endif + INSTDIR := ../html/_bin all: lib/cocanwiki.cma $(OBJS) $(ADMIN_OBJS) diff --git a/scripts/lib/cocanwiki_func_rss.ml b/scripts/lib/cocanwiki_func_rss.ml new file mode 100644 index 0000000..761c2c1 --- /dev/null +++ b/scripts/lib/cocanwiki_func_rss.ml @@ -0,0 +1,253 @@ +(* An RSS feed reader function. + * $Id: cocanwiki_func_rss.ml,v 1.1 2006/12/07 17:05:47 rich Exp $ + *) + +open Printf +open ExtString +open ExtList + +open Rss + +open Cocanwiki_extensions +open Cocanwiki_template + +(* Argument is a whitespace-separated list of key=value pairs. + * + * Example: + * {{rss:url=http://blog.merjis.com/feed/ max_items=3 refresh=daily}} + * + * The keys are: + * url The URL of the RSS feed (required). + * show What to show. A comma-separated list of: + * title Blog title + * link Blog link + * description Blog description + * items Items in the feed + * item_title Title of items + * item_link Link to items + * item_description Description of items + * Default is everything. + * max_items Maximum number of items to show. + * refresh How often to recheck feed: hourly, daily, weekly, + * h, or d. + * Default is daily. Warning: we only check the + * feed when the page is loaded, so making this + * too frequent will slow page loading. + *) +let ws_re = Pcre.regexp "\\s+" +let key_re = Pcre.regexp "^(\\w+)=(.*)$" +let refresh_re = Pcre.regexp "^(\\d+)(h|d)$" + +(* This exception is thrown if there is an error during processing. The + * string is an error message. + *) +exception Error of string + +type show = Title | Link | Description + | Items | Item_title | Item_link | Item_description +let default_show = [ Title; Link; Description; + Items; Item_title; Item_link; Item_description ] + +let event_system = Unixqueue.create_unix_event_system () +let connection = + let connection = new Http_client.pipeline in + connection#set_event_system event_system; + connection + +let fetch_url url = + prerr_endline ("fetching URL: " ^ url); + try + let msg = new Http_client.get url in + connection#add msg; + connection#run (); + msg#get_resp_body () + with + | Http_client.Http_protocol exn + | exn -> + (* Log the real exception in the logfile, for security. *) + prerr_endline (Printexc.to_string exn); + raise (Error ("error fetching url; " ^ + "note that for security reasons " ^ + "the real error is only written to error_log")) + +(* OCamlRSS uses its own date format. *) +let printable_date { year = year; month = month; day = day; + hour = hour; minute = minute; second = second } = + let date = Calendar.lmake ~year ~month ~day ~hour ~minute ~second () in + Cocanwiki_date.printable_date_time date + +let rss r dbh hostid arg = + let template = _get_template "cocanwiki_func_rss.html" in + + try + (* Is RSS enabled for this host? This is a safety feature to ensure + * that people only turn this feature on if they really mean to. + *) + let rows = + PGSQL(dbh) "select enable_rss_func from hosts where id = $hostid" in + if rows <> [Some true] then + raise (Error "RSS is disabled on this host. You have to enable it manually by setting enable_rss_func for the relevant row in the hosts table. RSS introduces a potential security hole (cross-site scripting) and should not be used where you have untrusted editors or with untrusted RSS feeds."); + + let arg = match arg with + | None -> raise (Error ("missing url: try {{rss:url=http://....}}")) + | Some arg -> arg in + + (* Parse the argument. *) + let args = Pcre.split ~rex:ws_re arg in + let args = List.map ( + fun arg -> + try + let subs = Pcre.exec ~rex:key_re arg in + let key = Pcre.get_substring subs 1 in + let value = Pcre.get_substring subs 2 in + key, value + with + Not_found -> + raise (Error ("invalid argument: " ^ arg)) + ) args in + + (* Get known arguments or their defaults. *) + let url = + try List.assoc "url" args + with Not_found -> + raise (Error "missing url: try {{rss:url=http://....}}") in + + let max_items = + try + let n = List.assoc "max_items" args in + let n = int_of_string n in + Some n + with + | Not_found -> None + | Failure "int_of_string" -> + raise (Error "max_items is not a number") in + + let refresh = + try + let p = List.assoc "refresh" args in + match p with + | "hourly" -> Calendar.Period.hour 1 + | "daily" -> Calendar.Period.day 1 + | "weekly" -> Calendar.Period.week 1 + | str -> + try + let subs = Pcre.exec ~rex:refresh_re str in + let n = int_of_string (Pcre.get_substring subs 1) in + match Pcre.get_substring subs 2 with + | "h" -> Calendar.Period.hour n + | "d" -> Calendar.Period.day n + | _ -> assert false + with + Not_found -> + raise (Error "refresh is hourly|daily|weekly|h|d") + with + Not_found -> + Calendar.Period.day 1 in + + let show = + try + let xs = List.assoc "show" args in + let xs = String.nsplit xs "," in + let xs = List.map ( + function + | "title" -> Title + | "link" -> Link + | "description" -> Description + | "items" -> Items + | "item_title" -> Item_title + | "item_link" -> Item_link + | "item_description" -> Item_description + | str -> + raise (Error ("show: invalid item: " ^ str)) + ) xs in + xs + with + Not_found -> default_show in + + (* Process the show parameter into template conditionals. *) + template#conditional "show_title" false; + template#conditional "show_link" false; + template#conditional "show_description" false; + template#conditional "show_items" false; + template#conditional "show_item_title" false; + template#conditional "show_item_link" false; + template#conditional "show_item_description" false; + List.iter ( + function + | Title -> template#conditional "show_title" true + | Link -> template#conditional "show_link" true + | Description -> template#conditional "show_description" true + | Items -> template#conditional "show_items" true + | Item_title -> template#conditional "show_item_title" true + | Item_link -> template#conditional "show_item_link" true + | Item_description -> template#conditional "show_item_description" true + ) show; + + (* Grab the RSS from our database cache. If it's too old + * or we don't have it cached, grab it from the server. + *) + let rss = + let rows = + PGSQL(dbh) + "select t, rss from rss_cache where url = $url" in + let need_to_fetch, rss = + match rows with + | [] -> true, "" (* not in cache, so have to fetch URL *) + | (t, rss) :: _ -> + if Calendar.compare + (Calendar.add t refresh) (Calendar.now ()) < 0 then + true, "" + else + false, rss in + if need_to_fetch then ( + let rss = fetch_url url in + (* This lock is OK - refetches are supposed to be infrequent. *) + PGSQL(dbh) "lock table rss_cache in share mode"; + PGSQL(dbh) "delete from rss_cache where url = $url"; + PGSQL(dbh) "insert into rss_cache (url, rss) values ($url, $rss)"; + PGOCaml.commit dbh; (* XXX How to avoid? *) + PGOCaml.begin_work dbh; + rss + ) else + rss in + + (* Try to parse the RSS. *) + let channel = + try + channel_of_string rss + with + | Xml.Error err -> + raise (Error ("error parsing feed: XML: " ^ Xml.error err)) + | Failure err -> + raise (Error ("error parsing feed: RSS: " ^ err)) in + + (* Generate some XML. *) + template#set "title" channel.ch_title; + template#set "link" channel.ch_link; + template#set "description" channel.ch_desc; + + let items = channel.ch_items in + let items = + match max_items with + | None -> items + | Some n -> List.take n items in + let items = List.map ( + fun item -> + [ "title", Template.VarString (Option.default "" item.item_title); + "link", Template.VarString (Option.default "" item.item_link); + "description", + Template.VarString (Option.default "" item.item_desc); + "date", + Template.VarString (Option.map_default + printable_date "" item.item_pubdate); ] + ) items in + template#table "items" items; + + template#to_string + with + Error msg -> + "rss: " ^ Cgi_escape.escape_html msg + +(* Register function. *) +let () = + external_functions := ("rss", rss) :: !external_functions diff --git a/templates/cocanwiki_func_rss.html b/templates/cocanwiki_func_rss.html new file mode 100644 index 0000000..32c485d --- /dev/null +++ b/templates/cocanwiki_func_rss.html @@ -0,0 +1,27 @@ +::if(show_title):: +

+::if(show_link)::::end::::title::::if(show_link)::::end:: +

+::end:: + +::if(show_description):: +

+::if(show_link)::::end::::description::::if(show_link)::::end:: +

+::end:: + +::if(show_items):: + +::end:: \ No newline at end of file -- 1.8.3.1