svnno****@sourc*****
svnno****@sourc*****
2008年 9月 18日 (木) 13:35:35 JST
Revision: 756 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=slashdotjp&view=rev&rev=756 Author: tach Date: 2008-09-18 13:35:34 +0900 (Thu, 18 Sep 2008) Log Message: ----------- merged from 2.5.0.192-18 Modified Paths: -------------- slashjp/trunk/Slash/Apache/Apache.pm slashjp/trunk/Slash/Apache/User/User.pm slashjp/trunk/Slash/DB/MySQL/MySQL.pm slashjp/trunk/Slash/Utility/Anchor/Anchor.pm slashjp/trunk/Slash/XML/XML.pm slashjp/trunk/debian/changelog slashjp/trunk/debian/control slashjp/trunk/plugins/Journal/PLUGIN slashjp/trunk/plugins/Journal/journal.pl slashjp/trunk/plugins/Login/login.pl slashjp/trunk/plugins/PollBooth/pollBooth.pl slashjp/trunk/sql/mysql/defaults.sql Added Paths: ----------- slashjp/trunk/plugins/Journal/journal_update_slashbox.pl slashjp/trunk/plugins/Journal/templates/topjournals;portald;default Removed Paths: ------------- slashjp/trunk/Slash/LDAPDB/ -------------- next part -------------- Modified: slashjp/trunk/Slash/Apache/Apache.pm =================================================================== --- slashjp/trunk/Slash/Apache/Apache.pm 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/Slash/Apache/Apache.pm 2008-09-18 04:35:34 UTC (rev 756) @@ -372,6 +372,35 @@ # $uri =~ s/^\Q$path//; #} + # redirect to new journal rss URL for slashdot.jp (2008-09-16, tach) + # Before: /journal.pl?op=display&uid=3&content_type=rss + # After: /~tach/journal/rss + if ($uri =~ m!/journal\.pl! && $r->the_request =~ m!\bcontent_type=rss\b!) { + my $qs = {$r->the_request =~ m!\b(uid|op|nick|type)=([-\w/+%]+)!g}; + if (defined($qs->{uid}) && $qs->{uid} =~ /^\d+$/) { + my $slashdb = getCurrentDB(); + my $nick = $slashdb->getUser($qs->{uid}, 'nickname'); + if ($nick) { + redirect("$constants->{absolutedir}/~".URI::Escape::uri_escape($nick)."/journal/rss", 301); + return DONE; + } else { + return NOT_FOUND; + } + } elsif (defined($qs->{nick})) { + $qs->{nick} =~ s/\+/%20/g; + redirect("$constants->{absolutedir}/~$qs->{nick}/journal/rss", 301); + return DONE; + } elsif (defined($qs->{type}) && $qs->{type} eq 'count' || $qs->{type} eq 'friends') { + # not impremented (2008-09-16, tach) + } else { + redirect("$constants->{absolutedir}/journals/rss", 301); + return DONE; + } + } elsif ($r->the_request =~ m!\bcontent_type=rss\b! && $uri =~ m!/~([^/]+)/journal!i) { + redirect("$constants->{absolutedir}/~".URI::Escape::uri_escape($1)."/journal/rss", 301); + return DONE; + } + # return shtml internally when AC # for slashdot.jp (2008-07-17) if ($uri =~ m!^/(\w+/)?article\.pl$! && !$is_user) { Modified: slashjp/trunk/Slash/Apache/User/User.pm =================================================================== --- slashjp/trunk/Slash/Apache/User/User.pm 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/Slash/Apache/User/User.pm 2008-09-18 04:35:34 UTC (rev 756) @@ -624,10 +624,6 @@ my @args = ($query); if ($word =~ /^rss$/) { push @args, "content_type=rss"; - if ($constants->{rss_cachedir} && -r "$constants->{rss_cachedir}/pollBooth.rss") { - $r->filename("$constants->{rss_cachedir}/pollBooth.rss"); - return OK; - } } elsif ($word =~ /^(\d+)$/) { push @args, "qid=$1"; } Modified: slashjp/trunk/Slash/DB/MySQL/MySQL.pm =================================================================== --- slashjp/trunk/Slash/DB/MySQL/MySQL.pm 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/Slash/DB/MySQL/MySQL.pm 2008-09-18 04:35:34 UTC (rev 756) @@ -18,6 +18,7 @@ use base 'Slash::DB'; use base 'Slash::DB::Utility'; use Slash::Constants ':messages'; +use Encode; our $VERSION = $Slash::Constants::VERSION; @@ -1572,7 +1573,6 @@ }); my $rows = $self->sqlDelete("users_param", "uid=$uid"); $self->setUser_delete_memcached($uid); - #Slash::LDAPDB->new()->deleteUserByUid($uid); # do NOT delete entry. just remove site data... return $rows; } @@ -1712,7 +1712,6 @@ passwd => $cryptpasswd }, "uid=$uid_try_q"); $newpass = 1; - Slash::LDAPDB->new()->setUserByUid($uid_try, {passwd => $cryptpasswd}); $uid_verified = $db_uid; # delete existing logtokens @@ -2555,13 +2554,6 @@ $self->sqlDo("COMMIT"); $self->sqlDo("SET AUTOCOMMIT=1"); - Slash::LDAPDB->new()->createUser($matchname, { - realemail => $email, - nickname => $newuser, - passwd => $passwd, - uid => $uid, - }); - $self->setUser_delete_memcached($uid); return $uid; @@ -10743,8 +10735,6 @@ $mcd_need_delete = 1 if $rows; $self->setUser_delete_memcached($uid) if $mcd_need_delete; - Slash::LDAPDB->new()->setUserByUid($uid, $hashref); - return $rows; } Modified: slashjp/trunk/Slash/Utility/Anchor/Anchor.pm =================================================================== --- slashjp/trunk/Slash/Utility/Anchor/Anchor.pm 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/Slash/Utility/Anchor/Anchor.pm 2008-09-18 04:35:34 UTC (rev 756) @@ -397,14 +397,15 @@ =cut sub redirect { - my($url) = @_; + my($url, $code) = @_; + $code ||= 302; my $constants = getCurrentStatic(); $url = url2abs($url); my $r = Apache->request; $r->content_type($constants->{content_type_webpage} || 'text/html'); $r->header_out(Location => $url); - $r->status(302); + $r->status($code); $r->send_http_header; slashDisplay('html-redirect', { url => $url }); Modified: slashjp/trunk/Slash/XML/XML.pm =================================================================== --- slashjp/trunk/Slash/XML/XML.pm 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/Slash/XML/XML.pm 2008-09-18 04:35:34 UTC (rev 756) @@ -128,6 +128,26 @@ $opt = ($opt && $opt == 1) ? { Return => 1 } : {}; } + if ($opt->{mcdkey}) { + my $slashdb = getCurrentDB(); + my $mcd = $slashdb->getMCD(); + my $mcdkey = undef; + if ($mcd) { + $mcdkey = "$slashdb->{_mcd_keyprefix}:xmldcache:$type:$opt->{mcdkey}"; + my $temp = $content; + if ($type =~ /^rss$/i) { + $temp =~ s|[dD]ate>[^<]+</||; + } elsif ($type =~ /^atom$/) { + $temp =~ s|updated>[^<]+</||; + } + + $mcd->set($mcdkey, { + content => $content, + etag => md5_hex(encode_utf8($temp)), + }); + } + } + if ($opt->{Return}) { return $content; } else { Modified: slashjp/trunk/debian/changelog =================================================================== --- slashjp/trunk/debian/changelog 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/debian/changelog 2008-09-18 04:35:34 UTC (rev 756) @@ -41,6 +41,20 @@ -- Taku YASUI <tach****@osdn*****> Tue, 26 Feb 2008 11:54:28 +0000 +slash (2.5.0.192-18) unstable; urgency=low + + * Use $user->{currentSkin} at $slashdb->getTemplateByName() + - Fix: slashDisplay() option 'Skin' does not applied + * Add logcheck ignore rule for SearchEst + * Add plugins/Journal/journal_update_slashbox.pl to create topjournal blocks + * Add feature to change redirect status code on redirect() + * Redirect to new journal RSS URL + * Add feature storing RSS output into memcached + * Add feature to store/get journal and polls RSS content from memcached + * Remove LDAPDB library + + -- Taku YASUI <tach****@osdn*****> Wed, 17 Sep 2008 06:10:21 +0000 + slash (2.5.0.192-17) unstable; urgency=low * Fix journals URL (remove "top") @@ -49,12 +63,8 @@ - you can access old URL * Add /faq/ internal redirection at Slash/Apache/Apache.pm - This code is for slash-plugin-wikicontents - * Fix LDAP.pm DEBUG_LEVEL warning - * Use $user->{currentSkin} at $slashdb->getTemplateByName() - - Fix: slashDisplay() option 'Skin' does not applied - * Add logcheck ignore rule for SearchEst - -- Taku YASUI <tach****@osdn*****> Mon, 8 Sep 2008 11:58:09 +0000 + -- Taku YASUI <tach****@osdn*****> Fri, 25 Jul 2008 14:36:41 +0000 slash (2.5.0.192-16) unstable; urgency=low Modified: slashjp/trunk/debian/control =================================================================== --- slashjp/trunk/debian/control 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/debian/control 2008-09-18 04:35:34 UTC (rev 756) @@ -8,7 +8,7 @@ Package: slash-common Architecture: any -Depends: libcompress-zlib-perl, libxml-parser-perl, libdbix-password-perl (>= 1.8-5), libnet-perl, libtimedate-perl, libapache-dbilogger-perl, libhtml-parser-perl, libhtml-format-perl, libxml-rss-perl, libimage-size-perl, libemail-valid-perl, libtemplate-perl, libmail-sendmail-perl, libsoap-lite-perl, liblingua-stem-perl, libhtml-template-perl, libmime-types-perl, libparallel-useragent-perl, libhtml-popuptreeselect-perl, libnet-ldap-perl, libjcode-pm-perl, libhtml-calendarmonth-perl, libgd-gd2-perl, libgd-text-perl, libdata-javascript-anon-perl, libdate-calc-perl, libfile-type-perl, libfinance-quote-perl, ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends} +Depends: libcompress-zlib-perl, libxml-parser-perl, libdbix-password-perl (>= 1.8-5), libnet-perl, libtimedate-perl, libapache-dbilogger-perl, libhtml-parser-perl, libhtml-format-perl, libxml-rss-perl, libimage-size-perl, libemail-valid-perl, libtemplate-perl, libmail-sendmail-perl, libsoap-lite-perl, liblingua-stem-perl, libhtml-template-perl, libmime-types-perl, libparallel-useragent-perl, libhtml-popuptreeselect-perl, libjcode-pm-perl, libhtml-calendarmonth-perl, libgd-gd2-perl, libgd-text-perl, libdata-javascript-anon-perl, libdate-calc-perl, libfile-type-perl, libfinance-quote-perl, ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends} Suggests: libtimedate-perl-ja Description: The code that runs Slashdot - common files Slash -- Slashdot Like Automated Storytelling Homepage -- is an architecture Modified: slashjp/trunk/plugins/Journal/PLUGIN =================================================================== --- slashjp/trunk/plugins/Journal/PLUGIN 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/plugins/Journal/PLUGIN 2008-09-18 04:35:34 UTC (rev 756) @@ -7,6 +7,7 @@ htdoc=journal.pl requiresplugin=Messages task=journal_fix.pl +task=journal_update_slashbox.pl topic=images/topics/journaltopic.png template=templates/bluebox;journal;default template=templates/data;journal;default @@ -27,3 +28,4 @@ template=templates/rsslink_journal;journal;default template=templates/searchusers;journal;default template=templates/slashdot;journal;default +template=templates/topjournals;portald;default Modified: slashjp/trunk/plugins/Journal/journal.pl =================================================================== --- slashjp/trunk/plugins/Journal/journal.pl 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/plugins/Journal/journal.pl 2008-09-18 04:35:34 UTC (rev 756) @@ -230,7 +230,13 @@ $juser = $journal_reader->getUser($uid); } $juser ||= $user; + my $mcdkey = undef; + if ($form->{op} ne 'friendview') { + $mcdkey = "journal:display:$juser->{uid}"; + _mcd_get($journal, $mcdkey) && return 1; + } + if ($form->{op} && $form->{op} eq 'friendview') { my $zoo = getObject('Slash::Zoo'); my $uids = $zoo->getFriendsUIDs($juser->{uid}); @@ -306,7 +312,7 @@ items => \@items, rdfitemdesc => $constants->{journal_rdfitemdesc}, rdfitemdesc_html => $rss_html, - }); + }, { mcdkey => $mcdkey }); } sub displayTopRSS { @@ -314,14 +320,21 @@ my $journals; my $type = ''; + my $mcdkey = undef; if ($form->{type} && $form->{type} eq 'count' && $constants->{journal_top_posters}) { $type = 'count'; + $mcdkey = "journal:top_count"; + _mcd_get($journal, $mcdkey) && return 1; $journals = $journal_reader->top; } elsif ($form->{type} && $form->{type} eq 'friends' && $constants->{journal_top_friend}) { $type = 'friends'; my $zoo = getObject('Slash::Zoo'); + $mcdkey = "journal:top_friend"; + _mcd_get($journal, $mcdkey) && return 1; $journals = $zoo->topFriends; } elsif ($constants->{journal_top_recent}) { + $mcdkey = "journal:top_recent"; + _mcd_get($journal, $mcdkey) && return 1; $journals = $journal_reader->topRecent; } @@ -367,7 +380,7 @@ image => 1, items => \@items, rdfitemdesc => $constants->{journal_rdfitemdesc}, - }); + }, { mcdkey => $mcdkey }); } sub displayArticleFriends { @@ -798,6 +811,7 @@ } } # $event_id + _mcd_delete($journal, $user->{uid}); return 0; } @@ -1012,6 +1026,7 @@ $journal->remove($id); } } + _mcd_delete($journal, $user->{uid}); listArticle(@_); } @@ -1062,6 +1077,34 @@ return $theme; } +sub _mcd_get { + my ($journal, $mcdkey) = @_; + my $mcd = $journal->getMCD(); + if ($mcd) { + my $data = $mcd->get("$journal->{_mcd_keyprefix}:xmldcache:rss:$mcdkey"); + if ($data->{content}) { + http_send({ + content_type => 'application/rss+xml', + etag => ($data->{etag} || undef), + content => $data->{content}, + }); + return 1; + } + } + return 0; +} + +sub _mcd_delete { + my ($journal, $uid) = @_; + my $mcd = $journal->getMCD(); + if ($mcd) { + $mcd->delete("$journal->{_mcd_keyprefix}:xmldcache:rss:journal:display:$uid", 1); + $mcd->delete("$journal->{_mcd_keyprefix}:xmldcache:rss:journal:top_count", 1); + $mcd->delete("$journal->{_mcd_keyprefix}:xmldcache:rss:journal:top_recent", 1); + $mcd->delete("$journal->{_mcd_keyprefix}:xmldcache:rss:journal:top_friend", 1); + } +} + createEnvironment(); main(); Copied: slashjp/trunk/plugins/Journal/journal_update_slashbox.pl (from rev 755, slashjp/branches/2.5.0.192/plugins/Journal/journal_update_slashbox.pl) =================================================================== --- slashjp/trunk/plugins/Journal/journal_update_slashbox.pl (rev 0) +++ slashjp/trunk/plugins/Journal/journal_update_slashbox.pl 2008-09-18 04:35:34 UTC (rev 756) @@ -0,0 +1,55 @@ +#!/usr/bin/perl -w +# This code is a part of Slash, and is released under the GPL. +# Copyright (C) 2008 OSDN Corporation. +# +# $Id: journal_fix.pl 153 2007-07-04 08:10:36Z tach $ + +use Data::Dumper; +use strict; + +use Slash::Constants ':slashd'; +use Slash::Utility; + +use vars qw( %task $me); + +$task{$me}{timespec} = '* * * * *'; # should happen every minute? +$task{$me}{fork} = SLASHD_NOWAIT; +$task{$me}{code} = sub { + my($virtual_user, $constants, $slashdb, $user) = @_; + my $force = $constants->{task_options}{force} || undef; + my $block_suffix = '_topjournals'; + my $skins = $slashdb->getSkins(); + + foreach my $skin (values(%$skins)) { + my $name = "$skin->{name}$block_suffix"; + my $block = $slashdb->getBlock($name); + unless ($block) { + slashdLog("Could not get block \"$name\", skipped"); + next; + } + my $tids = [ $slashdb->getAllChildrenTids($skin->{nexus}) ]; + my $where = '1=1'; + $where .= 'AND tid IN ('.join(',', @$tids).')' if ($skin->{skid} != $constants->{mainpage_skid}); + next if ($slashdb->sqlCount('journals', $where . ($force ? '' : "AND date > '$block->{last_update}'")) < 1); + + slashdLog("Start updating block \"$name\"") if (verbosity() >= 3); + my $result = $slashdb->sqlSelectAllHashrefArray( + 'nickname AS author,jid,description AS title', + 'users_journal JOIN users USING (uid) JOIN journals on (users_journal.jid=journals.id)', + $where, + 'ORDER BY users_journal.date DESC LIMIT 20', + ); + map { $_->{'link'} = "$constants->{absolutedir}/~" . strip_paramattr($_->{author}) . "/journal/". $_->{jid} } @$result; + + my $str = "<ul>\n"; + foreach my $item (@$result) { + $str .= slashDisplay('topjournals', { 'item' => $item }, { Return => 1, Nocomm => 1, Page => 'portald' }); + } + $str .= "\n</ul>"; + $slashdb->setBlock($name, { block => $str }); + + slashdLog("Updated block \"$name\"") if (verbosity() >= 2); + } +}; + +1; Copied: slashjp/trunk/plugins/Journal/templates/topjournals;portald;default (from rev 755, slashjp/branches/2.5.0.192/plugins/Journal/templates/topjournals;portald;default) =================================================================== --- slashjp/trunk/plugins/Journal/templates/topjournals;portald;default (rev 0) +++ slashjp/trunk/plugins/Journal/templates/topjournals;portald;default 2008-09-18 04:35:34 UTC (rev 756) @@ -0,0 +1,21 @@ +__skin__ +default +__description__ +default rss template for slash system +__title__ +default rss template +__page__ +portald +__lang__ +en_US +__name__ +topjournals +__template__ +<li> + <a href="[% constants.absolutedir %]/~[% item.author | strip_attribute %]/journal/">[[% item.author | strip_attribute %]]</a> + <a href="[% item.link | strip_attribute %]">[% item.title | strip_notags %]</a> +</li> +__seclev__ +10000 +__version__ + Modified: slashjp/trunk/plugins/Login/login.pl =================================================================== --- slashjp/trunk/plugins/Login/login.pl 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/plugins/Login/login.pl 2008-09-18 04:35:34 UTC (rev 756) @@ -10,7 +10,6 @@ use Slash::Display; use Slash::Utility; use Slash::XML; -use Slash::LDAPDB; use vars qw($VERSION); @@ -78,7 +77,6 @@ my @note; my $error = 0; - my $ldap = Slash::LDAPDB->new(attrib_prefix => getCurrentStatic->{ldap_peer_attrib_prefix}); # check if new nick is OK and if user exists my $newnick = nickFix($form->{newusernick}); my $matchname = nick2matchname($newnick); @@ -97,22 +95,6 @@ } elsif ($slashdb->existsEmail($form->{email})) { push @note, getData('email_exists'); $error = 1; - } elsif ($constants->{ldap_enable} && (!defined($ldap) || !$ldap->bind())) { - push @note, getData('ldap_conn_fail'); - $error = 1; - } elsif ($constants->{ldap_enable} && $ldap->getUser($matchname) - && (!defined($form->{peerpasswd}) || $form->{peerpasswd} eq "")) { - push @note, getData('duplicate_user', { - nick => $form->{newusernick}, - }); - $error = 1; - } elsif ($constants->{ldap_enable} - && defined($form->{peerpasswd}) - && $form->{peerpasswd} ne "" - && $ldap->getUser($matchname) - && !$ldap->authUser($matchname, $form->{peerpasswd})) { - push @note, getData('ldap_peer_pass_fail'); - $error = 1; } elsif ($matchname ne '' && $newnick ne '') { if ($constants->{newuser_portscan}) { my $is_trusted = $slashdb->checkAL2($user->{srcids}, 'trusted'); Modified: slashjp/trunk/plugins/PollBooth/pollBooth.pl =================================================================== --- slashjp/trunk/plugins/PollBooth/pollBooth.pl 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/plugins/PollBooth/pollBooth.pl 2008-09-18 04:35:34 UTC (rev 756) @@ -31,8 +31,20 @@ # hijack feeds if ($form->{content_type} && $form->{content_type} =~ $constants->{feed_types}) { + my $mcd = $slashdb->getMCD(); + if ($mcd) { + my $data = $mcd->get("$slashdb->{_mcd_keyprefix}:xmldcache:$form->{content_type}:pollBooth"); + if ($data->{content}) { + http_send({ + content_type => "application/$form->{content_type}+xml", + etag => ($data->{etag} || undef), + content => $data->{content}, + }); + return 1; + } + } listpollsRSS($form, $slashdb, $constants); - return; + return 1; } my $op = $form->{op} && $ops{$form->{op}} ? $form->{op} : 'default'; @@ -403,6 +415,11 @@ $pollbooth_db->setPollQuestion($qid, { discussion => $discussion }) if $discussion && $discussion != $poll->{discussion}; } + my $mcd = $slashdb->getMCD(); + if ($mcd) { + $mcd->delete("$slashdb->{_mcd_keyprefix}:xmldcache:rss:pollBooth", 1); + $mcd->delete("$slashdb->{_mcd_keyprefix}:xmldcache:atom:pollBooth", 1); + } $slashdb->setStory($form->{sid}, { qid => $qid }) if $form->{sid}; } @@ -549,7 +566,7 @@ }); } - my $ret = xmlDisplay($form->{content_type} => { + xmlDisplay($form->{content_type} => { channel => { title => getData('rss_title'), description => getData('rss_descr'), @@ -563,8 +580,7 @@ items => $items, rdfitemdesc => $constants->{dfitemdesc}, rdfitemdesc_html => $constants->{dfitemdesc_html} || 1, - }, $form->{ssi} ? 1 : 0); - print "$ret\n" if ($form->{ssi}); + }, { mcdkey => 'pollBooth' }); } ################################################################# Modified: slashjp/trunk/sql/mysql/defaults.sql =================================================================== --- slashjp/trunk/sql/mysql/defaults.sql 2008-09-17 08:23:27 UTC (rev 755) +++ slashjp/trunk/sql/mysql/defaults.sql 2008-09-18 04:35:34 UTC (rev 756) @@ -1127,13 +1127,6 @@ INSERT INTO vars (name, value, description) VALUES ('xhtml','0','Boolean for whether we are using XHTML'); -- add constants for OSDN Japan -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_attrib_prefix','','attribute prefix for LDAP migration'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_base_dn','','base dn for LDAP migration'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_bind_dn','','binddn for LDAP migration'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_bind_passwd','','bind password for LDAP migration'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_debug_level','0','LDAPDB debug level (default: 5)'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_enable','0','enable LDAP migration (1: enable, 0: disable)'); -INSERT IGNORE INTO vars (name, value, description) VALUES ('ldap_peer_attrib_prefix', '', 'peer attribute prefix for LDAP migration'); INSERT IGNORE INTO vars (name, value, description) VALUES ('mail_charset_body','us-ascii','Character Encoding used for mail body sent by the system (s. Encode::Supported)'); INSERT IGNORE INTO vars (name, value, description) VALUES ('mail_charset_header','MIME-Header','Character Encoding used for mail header sent by the system (s. Encode::MIME::Header)'); INSERT IGNORE INTO vars (name, value, description) VALUES ('rss_entitize_nonascii', 1, 'Convert non-ASCII-printable characters into entities?');