mirror of
https://github.com/standardebooks/web.git
synced 2025-07-04 22:00:35 -04:00
Send an email to lapsed patrons
This commit is contained in:
parent
0875e697b4
commit
3fa9592e6d
17 changed files with 185 additions and 42 deletions
|
@ -38,8 +38,9 @@ const CAPTCHA_IMAGE_WIDTH = 230;
|
|||
const NO_REPLY_EMAIL_ADDRESS = 'admin@standardebooks.org';
|
||||
const ADMIN_EMAIL_ADDRESS = 'admin@standardebooks.org';
|
||||
const EDITOR_IN_CHIEF_EMAIL_ADDRESS = 'alex@standardebooks.org';
|
||||
const EDITOR_IN_CHIEF_NAME = 'Alex Cabal';
|
||||
define('EMAIL_SMTP_USERNAME', get_cfg_var('se.secrets.postmark.username'));
|
||||
const EMAIL_SMTP_HOST = 'smtp-broadcasts.postmarkapp.com';
|
||||
const EMAIL_SMTP_HOST = 'smtp.postmarkapp.com';
|
||||
const EMAIL_POSTMARK_STREAM_BROADCAST = 'the-standard-ebooks-newsletter';
|
||||
|
||||
const REST = 0;
|
||||
|
|
|
@ -7,6 +7,7 @@ use function Safe\file_get_contents;
|
|||
|
||||
class Email{
|
||||
public $To = '';
|
||||
public $ToName = '';
|
||||
public $From = '';
|
||||
public $FromName = '';
|
||||
public $ReplyTo = '';
|
||||
|
@ -43,7 +44,7 @@ class Email{
|
|||
try{
|
||||
$phpMailer->SetFrom($this->From, $this->FromName);
|
||||
$phpMailer->AddReplyTo($this->ReplyTo);
|
||||
$phpMailer->AddAddress($this->To);
|
||||
$phpMailer->AddAddress($this->To, $this->ToName);
|
||||
$phpMailer->Subject = $this->Subject;
|
||||
$phpMailer->CharSet = 'UTF-8';
|
||||
if($this->TextBody !== null && $this->TextBody != ''){
|
||||
|
|
|
@ -33,7 +33,9 @@ class Patron extends PropertiesBase{
|
|||
if($this->User !== null){
|
||||
$em = new Email();
|
||||
$em->To = $this->User->Email;
|
||||
$em->ToName = $this->User->Name;
|
||||
$em->From = EDITOR_IN_CHIEF_EMAIL_ADDRESS;
|
||||
$em->FromName = EDITOR_IN_CHIEF_NAME;
|
||||
$em->Subject = 'Thank you for supporting Standard Ebooks!';
|
||||
$em->Body = Template::EmailPatronsCircleWelcome(['isAnonymous' => $this->IsAnonymous, 'isReturning' => $isReturning]);
|
||||
$em->TextBody = Template::EmailPatronsCircleWelcomeText(['isAnonymous' => $this->IsAnonymous, 'isReturning' => $isReturning]);
|
||||
|
|
17
lib/User.php
17
lib/User.php
|
@ -4,27 +4,12 @@ use Safe\DateTime;
|
|||
|
||||
class User extends PropertiesBase{
|
||||
public $UserId;
|
||||
public $FirstName;
|
||||
public $LastName;
|
||||
protected $Name = null;
|
||||
public $Name;
|
||||
public $Email;
|
||||
public $Created;
|
||||
public $Uuid;
|
||||
|
||||
|
||||
// *******
|
||||
// GETTERS
|
||||
// *******
|
||||
|
||||
protected function GetName(): string{
|
||||
if($this->Name === null){
|
||||
$this->Name = $this->FirstName . ' ' . $this->LastName;
|
||||
}
|
||||
|
||||
return $this->Name;
|
||||
}
|
||||
|
||||
|
||||
// *******
|
||||
// METHODS
|
||||
// *******
|
||||
|
|
|
@ -195,7 +195,9 @@ try{
|
|||
$log->Write('Sending thank you email to non-patron donor.');
|
||||
$em = new Email();
|
||||
$em->To = $payment->User->Email;
|
||||
$em->ToName = $payment->User->Name;
|
||||
$em->From = EDITOR_IN_CHIEF_EMAIL_ADDRESS;
|
||||
$em->FromName = EDITOR_IN_CHIEF_NAME;
|
||||
$em->Subject = 'Thank you for supporting Standard Ebooks!';
|
||||
$em->Body = Template::EmailDonationThankYou();
|
||||
$em->TextBody = Template::EmailDonationThankYouText();
|
||||
|
@ -214,9 +216,7 @@ catch(Exception $ex){
|
|||
$exceptionString = vds($ex);
|
||||
$log->Write('Error: Uncaught exception: ' . $exceptionString);
|
||||
|
||||
$em = new Email();
|
||||
$em->To = ADMIN_EMAIL_ADDRESS;
|
||||
$em->From = NO_REPLY_EMAIL_ADDRESS;
|
||||
$em = new Email(true);
|
||||
$em->Subject = 'Donation processing failed';
|
||||
$em->Body = Template::EmailDonationProcessingFailed(['exception' => preg_replace('/^/m', "\t", $exceptionString)]);
|
||||
$em->TextBody = Template::EmailDonationProcessingFailedText(['exception' => preg_replace('/^/m', "\t", $exceptionString)]);
|
||||
|
|
|
@ -6,19 +6,74 @@ require_once('/standardebooks.org/web/lib/Core.php');
|
|||
// who aren't in that list.
|
||||
// We give a 15 day grace period to Patrons Circle members because sometimes FA can be delayed in charging.
|
||||
|
||||
Db::Query('
|
||||
update Patrons
|
||||
set Ended = utc_timestamp()
|
||||
where UserId not in
|
||||
$now = new DateTime();
|
||||
$lastYear = new DateTime('-1 year');
|
||||
|
||||
$expiredPatrons = Db::Query('
|
||||
select * from Patrons
|
||||
where
|
||||
Ended is null and
|
||||
UserId not in
|
||||
(
|
||||
select distinct UserId from Payments where
|
||||
UserId is not null
|
||||
and
|
||||
(
|
||||
(IsRecurring = 1 and Amount >= 10 and Created > utc_timestamp() - interval 45 day)
|
||||
(IsRecurring = 1 and Amount >= 10 and Created > ? - interval 45 day)
|
||||
or
|
||||
(IsRecurring = 0 and Amount >= 100 and Created > utc_timestamp() - interval 1 year)
|
||||
(IsRecurring = 0 and Amount >= 100 and Created > ? - interval 1 year)
|
||||
)
|
||||
)
|
||||
');
|
||||
', [$now, $now], 'Patron');
|
||||
|
||||
if(sizeof($expiredPatrons) > 0){
|
||||
$ebooksThisYear = 0;
|
||||
|
||||
// We can't use the Library class to get ebooks because this script is typically run via cron or CLI,
|
||||
// which doesn't have access PHP-FMP's APCu cache.
|
||||
foreach(explode("\n", trim(shell_exec('find ' . EBOOKS_DIST_PATH . ' -name "content.opf"') ?? '')) as $filename){
|
||||
$metadata = file_get_contents($filename);
|
||||
|
||||
// Don't create a new Ebook object because that's very slow. Just do a regex match for speed.
|
||||
preg_match_all('/<dc:date>(.+?)<\/dc:date>/iu', $metadata, $matches);
|
||||
|
||||
if(sizeof($matches) > 0){
|
||||
$created = new DateTime($matches[1][0]);
|
||||
if($created >= $lastYear){
|
||||
$ebooksThisYear++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($expiredPatrons as $patron){
|
||||
Db::Query('update Patrons set Ended = ? where UserId = ?', [$now, $patron->UserId]);
|
||||
|
||||
// Email the patron to notify them their term has ended
|
||||
// Is the patron a recurring subscriber?
|
||||
$lastPayment = Db::Query('select * from Payments where UserId = ? order by Created desc limit 1;', [$patron->UserId], 'Payment');
|
||||
|
||||
if(sizeof($lastPayment) > 0 && $patron->User->Email !== null){
|
||||
$em = new Email();
|
||||
$em->From = EDITOR_IN_CHIEF_EMAIL_ADDRESS;
|
||||
$em->FromName = EDITOR_IN_CHIEF_NAME;
|
||||
$em->To = $patron->User->Email;
|
||||
$em->ToName = $patron->Name;
|
||||
$em->Subject = 'Will you continue supporting beautiful digital literature?';
|
||||
|
||||
if($lastPayment[0]->IsRecurring){
|
||||
// Email recurring donors who have lapsed
|
||||
$em->Body = Template::EmailPatronsCircleRecurringCompleted();
|
||||
$em->TextBody = Template::EmailPatronsCircleRecurringCompletedText();
|
||||
}
|
||||
else{
|
||||
// Email one time donors who have expired after one year
|
||||
$em->Body = Template::EmailPatronsCircleCompleted(['ebooksThisYear' => $ebooksThisYear]);
|
||||
$em->TextBody = Template::EmailPatronsCircleCompletedText(['ebooksThisYear' => $ebooksThisYear]);
|
||||
}
|
||||
|
||||
$em->Send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div class="footer">
|
||||
<p>
|
||||
<a href="https://standardebooks.org/donate">Donate</a> • <a href="https://standardebooks.org/contribute">Get involved</a> • <a href="https://standardebooks.org/feeds">Ebook feeds</a>
|
||||
<a href="<?= SITE_URL ?>/donate">Donate</a> • <a href="<?= SITE_URL ?>/contribute">Get involved</a> • <a href="<?= SITE_URL ?>/feeds">Ebook feeds</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://standardebooks.org">
|
||||
<a href="<?= SITE_URL ?>">
|
||||
<img src="https://standardebooks.org/images/logo-small.png" alt="The Standard Ebooks logo."/>
|
||||
</a>
|
||||
</p>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?
|
||||
$preheader = $preheader ?? null;
|
||||
$letterhead = $letterhead ?? false;
|
||||
?><!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
@ -22,6 +23,7 @@ $preheader = $preheader ?? null;
|
|||
div.body{
|
||||
text-align: left;
|
||||
background-color: #E9E7E0;
|
||||
border: 1px solid #AAA8A3;
|
||||
border-radius: 1em;
|
||||
font-family: "Georgia", serif;
|
||||
font-size: 18px;
|
||||
|
@ -29,12 +31,22 @@ $preheader = $preheader ?? null;
|
|||
line-height: 1.4;
|
||||
color: #222222;
|
||||
margin: auto;
|
||||
max-width: 80ch;
|
||||
max-width: 60ch;
|
||||
padding: 2em;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
|
||||
<? if($letterhead){ ?>
|
||||
div.body.letterhead{
|
||||
background-image: url("https://standardebooks.org/images/logo-email.png");
|
||||
background-position: top 2em right 2em;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 210px 49px;
|
||||
padding-top: 5em;
|
||||
}
|
||||
<? } ?>
|
||||
|
||||
<? if($preheader){ ?>
|
||||
.preheader{
|
||||
display: none !important;
|
||||
|
@ -75,6 +87,7 @@ $preheader = $preheader ?? null;
|
|||
border-bottom: 3px double #222;
|
||||
font-size: 2em;
|
||||
line-height: 1.3;
|
||||
margin-top: .25em;
|
||||
padding-bottom: .75em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
@ -112,14 +125,28 @@ $preheader = $preheader ?? null;
|
|||
.footer{
|
||||
border-top: 1px solid #ccc;
|
||||
margin-top: 2em;
|
||||
padding-top: 1em;
|
||||
padding-top: 2em;
|
||||
text-align: center;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.footer p{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.footer img{
|
||||
margin-top: 1em;
|
||||
max-width: 110px;
|
||||
max-width: 55px;
|
||||
}
|
||||
|
||||
footer{
|
||||
margin-right: 4em;
|
||||
margin-top: 2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
footer p{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a.button:link,
|
||||
|
@ -155,8 +182,12 @@ $preheader = $preheader ?? null;
|
|||
margin: 2em auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.letterhead{
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="body">
|
||||
<div class="body<? if($letterhead){ ?> letterhead<? } ?>">
|
||||
<? if($preheader){ ?><p class="preheader"><?= Formatter::ToPlainText($preheader) ?><? for($i = 0; $i < 150 - strlen($preheader); $i++){ ?>‌ <? } ?></p><? } ?>
|
||||
|
|
16
templates/EmailPatronsCircleCompleted.php
Normal file
16
templates/EmailPatronsCircleCompleted.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?= Template::EmailHeader(['letterhead' => true]) ?>
|
||||
<p>Hello,</p>
|
||||
<p>Last year, your generous donation to <a href="<?= SITE_URL ?>">Standard Ebooks</a> made it possible for us to continue producing beautiful ebook editions for free distribution. It also allowed me to add you to our <a href="<?= SITE_URL ?>/about#patrons-circle">Patrons Circle</a>, a group of donors who are honored on our masthead, and who have a direct voice in the future of our <a href="<?= SITE_URL ?>/ebooks">ebook catalog</a>, for one year.</p>
|
||||
<p>Now that a year has passed, will you renew your membership to our Patrons Circle?</p>
|
||||
<p><? if($ebooksThisYear > 0){ ?>In the year since you joined our Patrons Circle, our volunteers produced <?= number_format($ebooksThisYear) ?> new free ebooks. We need the financial support of literature lovers like you in order to keep up that pace. <? }else{ ?>We need the financial support of literature lovers like you in order to keep producing free ebooks. <? } ?><em>Your membership in our Patrons Circle is what makes Standard Ebooks possible.</em></p>
|
||||
<p><strong>We can’t do it without you.</strong> Will you join us for another year of beautiful digital literature?</p>
|
||||
<p class="button-row">
|
||||
<a href="<?= SITE_URL ?>/donate#patrons-circle" class="button">Renew your Patrons Circle membership</a>
|
||||
</p>
|
||||
<p>I hope to see you back!</p>
|
||||
<footer>
|
||||
<p><img width="125" height="57" src="https://standardebooks.org/images/alex-cabal-signature.png" alt="" /></p>
|
||||
<p>Alex Cabal</p>
|
||||
<p>S.E. Editor-in-Chief</p>
|
||||
</footer>
|
||||
<?= Template::EmailFooter() ?>
|
18
templates/EmailPatronsCircleCompletedText.php
Normal file
18
templates/EmailPatronsCircleCompletedText.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
Hello,
|
||||
|
||||
Last year, your generous donation to Standard Ebooks made it possible for us to continue producing beautiful ebook editions for free distribution. It also allowed me to add you to our Patrons Circle, a group of donors who are honored on our masthead, and who have a direct voice in the future of our ebook catalog, for one year.
|
||||
|
||||
Now that a year has passed, will you renew your membership to our Patrons Circle?
|
||||
|
||||
<? if($ebooksThisYear > 0){ ?>In the year since you joined our Patrons Circle, our volunteers produced <?= number_format($ebooksThisYear) ?> new free ebooks. We need the financial support of literature lovers like you in order to keep up that pace. <? }else{ ?>We need the financial support of literature lovers like you in order to keep producing free ebooks. <? } ?>*Your membership in our Patrons Circle is what makes Standard Ebooks possible.*
|
||||
|
||||
**We can’t do it without you.** Will you join us for another year of beautiful digital literature?
|
||||
|
||||
Renew your Patrons Circle membership here: <<?= SITE_URL ?>/donate#patrons-circle>
|
||||
|
||||
I hope to see you back!
|
||||
|
||||
|
||||
Alex Cabal
|
||||
|
||||
S.E. Editor-in-Chief
|
16
templates/EmailPatronsCircleRecurringCompleted.php
Normal file
16
templates/EmailPatronsCircleRecurringCompleted.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?= Template::EmailHeader(['letterhead' => true]) ?>
|
||||
<p>Hello,</p>
|
||||
<p>I couldn’t help but notice that your monthly donation to Standard Ebooks has recently ended. Your generous donation allowed me to add you to our <a href="<?= SITE_URL ?>/about#patrons-circle">Patrons Circle</a>, a group of donors who are honored on our masthead, and who have a direct voice in the future of our <a href="<?= SITE_URL ?>/ebooks">ebook catalog</a>.</p>
|
||||
<p>Oftentimes credit cards will expire, or recurring charges will get accidentally canceled for any number of nebulous administrative reasons. If you didn’t mean to cancel your recurring donation—and thus your Patrons Circle membership—now’s a great time to <a href="<?= SITE_URL ?>/donate#patrons-circle">renew it</a>.</p>
|
||||
<p>We need the financial support of literature lovers like you in order to keep producing free ebooks. <em>Your membership in our Patrons Circle is what makes Standard Ebooks possible.</em></p>
|
||||
<p><strong>We can’t do it without you.</strong> Will you rejoin us in our journey of producing free beautiful digital literature?</p>
|
||||
<p class="button-row">
|
||||
<a href="<?= SITE_URL ?>/donate#patrons-circle" class="button">Renew your Patrons Circle membership</a>
|
||||
</p>
|
||||
<p>I hope to see you back!</p>
|
||||
<footer>
|
||||
<p><img width="125" height="57" src="https://standardebooks.org/images/alex-cabal-signature.png" alt="" /></p>
|
||||
<p>Alex Cabal</p>
|
||||
<p>S.E. Editor-in-Chief</p>
|
||||
</footer>
|
||||
<?= Template::EmailFooter() ?>
|
18
templates/EmailPatronsCircleRecurringCompletedText.php
Normal file
18
templates/EmailPatronsCircleRecurringCompletedText.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
Hello,
|
||||
|
||||
I couldn’t help but notice that your monthly donation to Standard Ebooks has recently ended. Your generous donation allowed me to add you to our Patrons Circle, a group of donors who are honored on our masthead, and who have a direct voice in the future of our ebook catalog.
|
||||
|
||||
Oftentimes credit cards will expire, or recurring charges will get accidentally canceled for any number of nebulous administrative reasons. If you didn’t mean to cancel your recurring donation—and thus your Patrons Circle membership—now’s a great time to renew it.
|
||||
|
||||
We need the financial support of literature lovers like you in order to keep producing free ebooks. *Your membership in our Patrons Circle is what makes Standard Ebooks possible.*
|
||||
|
||||
**We can’t do it without you.** Will you rejoin us in our journey of producing free beautiful digital literature?
|
||||
|
||||
Renew your Patrons Circle membership here: <<?= SITE_URL ?>/donate#patrons-circle>
|
||||
|
||||
I hope to see you back!
|
||||
|
||||
|
||||
Alex Cabal
|
||||
|
||||
S.E. Editor-in-Chief
|
|
@ -5,15 +5,15 @@
|
|||
</head>
|
||||
<body>
|
||||
<p>Hello,</p>
|
||||
<p>I wanted to thank you personally for your recent donation to Standard Ebooks. Your donation will go towards continuing our mission of producing and distributing high-quality ebooks that are free of cost and free of copyright restrictions. Donations like yours help ensure that the world's literature is available in beautiful editions made for the digital age.</p>
|
||||
<p>I wanted to thank you personally for your recent donation to Standard Ebooks. Your donation will go towards continuing our mission of producing and distributing high-quality ebooks that are free of cost and free of copyright restrictions. Donations like yours help ensure that the world’s literature is available in beautiful editions made for the digital age.</p>
|
||||
<? if($isAnonymous){ ?>
|
||||
<p>I'm pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle. Since you indicated you want your donation to remain anonymous, I haven't listed your name on our masthead. If you do prefer to have your name listed, just let me know.</p>
|
||||
<p>I’m pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle. Since you indicated you want your donation to remain anonymous, I haven’t listed your name on our masthead. If you do prefer to have your name listed, just let me know.</p>
|
||||
<? }else{ ?>
|
||||
<p>I'm pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle, with your name listed on our masthead for the duration of your donation. If you'd like to use a different name than the one you entered on our donation form, just let me know.</p>
|
||||
<p>I’m pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle, with your name listed on our masthead for the duration of your donation. If you’d like to use a different name than the one you entered on our donation form, just let me know.</p>
|
||||
<? } ?>
|
||||
<p>As a Patron, once per quarter you may suggest a book for inclusion in our Wanted Ebooks list. Before submitting a suggestion, please review our <a href="https://standardebooks.org/contribute/collections-policy">collections policy</a>; then you can contact me directly at <a href="mailto:<?= EDITOR_IN_CHIEF_EMAIL_ADDRESS ?>"><?= EDITOR_IN_CHIEF_EMAIL_ADDRESS ?></a> with your selection.</p>
|
||||
<? if(!$isReturning){ ?><p>If I may ask, how did you hear about Standard Ebooks? Having an idea of where our readers and supporters find out about us is extremely helpful.</p><? } ?>
|
||||
<p><? if($isReturning){ ?>As always, please<? }else{ ?>Please<? } ?> don't hesitate to contact me if you have questions or suggestions. Thanks again for your donation, and for supporting the literate arts!</p>
|
||||
<p><? if($isReturning){ ?>As always, please<? }else{ ?>Please<? } ?> don’t hesitate to contact me if you have questions or suggestions. Thanks again for your donation, and for supporting the literate arts!</p>
|
||||
<footer style="margin-top: 2em;">
|
||||
<p>Alex Cabal</p>
|
||||
<p>S.E. Editor-in-Chief</p>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
Hello,
|
||||
|
||||
I wanted to thank you personally for your recent donation to Standard Ebooks. Your donation will go towards continuing our mission of producing and distributing high-quality ebooks that are free of cost and free of copyright restrictions. Donations like yours help ensure that the world's literature is available in beautiful editions made for the digital age.
|
||||
I wanted to thank you personally for your recent donation to Standard Ebooks. Your donation will go towards continuing our mission of producing and distributing high-quality ebooks that are free of cost and free of copyright restrictions. Donations like yours help ensure that the world’s literature is available in beautiful editions made for the digital age.
|
||||
|
||||
<? if($isAnonymous){ ?>
|
||||
I'm pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle. Since you indicated you want your donation to remain anonymous, I haven't listed your name on our masthead. If you do prefer to have your name listed, just let me know.
|
||||
I’m pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle. Since you indicated you want your donation to remain anonymous, I haven’t listed your name on our masthead. If you do prefer to have your name listed, just let me know.
|
||||
<? }else{ ?>
|
||||
I'm pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle, with your name listed on our masthead for the duration of your donation. If you'd like to use a different name than the one you entered on our donation form, just let me know.
|
||||
I’m pleased to be able to <? if($isReturning){ ?>welcome you back to<? }else{ ?>include you in<? } ?> our Patrons Circle, with your name listed on our masthead for the duration of your donation. If you’d like to use a different name than the one you entered on our donation form, just let me know.
|
||||
<? } ?>
|
||||
|
||||
As a Patron, once per quarter you may suggest a book for inclusion in our Wanted Ebooks list. Before submitting a suggestion, please review our collections policy, at <https://standardebooks.org/contribute/collections-policy>; then you can contact me directly at <?= EDITOR_IN_CHIEF_EMAIL_ADDRESS ?> with your selection.
|
||||
|
@ -13,7 +13,7 @@ As a Patron, once per quarter you may suggest a book for inclusion in our Wanted
|
|||
|
||||
If I may ask, how did you hear about Standard Ebooks? Having an idea of where our readers and supporters find out about us is extremely helpful.<? } ?>
|
||||
|
||||
<? if($isReturning){ ?>As always, please<? }else{ ?>Please<? } ?> don't hesitate to contact me if you have questions or suggestions. Thanks again for your donation, and for supporting the literate arts!
|
||||
<? if($isReturning){ ?>As always, please<? }else{ ?>Please<? } ?> don’t hesitate to contact me if you have questions or suggestions. Thanks again for your donation, and for supporting the literate arts!
|
||||
|
||||
|
||||
Alex Cabal
|
||||
|
|
BIN
www/images/alex-cabal-signature.png
Normal file
BIN
www/images/alex-cabal-signature.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
BIN
www/images/logo-email.png
Normal file
BIN
www/images/logo-email.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 8.8 KiB |
Loading…
Add table
Add a link
Reference in a new issue