- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试修改一个 Concrete5 插件,该插件会在用户的订阅即将到期时向用户发送警告电子邮件。它的工作原理是首先过滤掉已经收到通知的用户,然后选择截至今天的订阅距到期日期 (expirationDate) 给定天数 (emailOnExpirationDays) 的用户。
我的问题是我需要能够通知用户 3 次而不是一次。我想提前 30 天、5 天和 1 天通知他们。我的第一个障碍是仅过滤掉 5 天内收到通知的用户(25 天前没有故意通知)。我如何修改下面的 PHP 和 SQL 来完成此任务?注释掉的代码是我尝试过的。有关过滤功能的信息是 here .
集合在此处实例化:
$expiringTxns = new LMemTxnList();
$expiringTxns->filterByProductWithExpirationEmailsThatShouldBeWarned();
……
public function filterByProductWithExpirationEmailsThatShouldBeWarned() {
$this->setupProductExpirationQueries();//displays all with account
//we haven't already sent out an expiration warning or, for that matter, a notice
$this->filter('notifiedDate', null);
$this->filter('warnedDate', null); //Caitlin commented out to allow more than one warning
//$this->filter('warnedDate', '!= BETWEEN DATE_SUB(NOW(), INTERVAL 5 DAY) AND NOW()');
// the emailOnExpirationDays has been properly configured
$this->filter('emailOnExpirationDays', null, '!=');
$this->filter('emailOnExpirationDays', 0, '>');
//the expirationDate - warning is between 5 days ago (don't want to send a bunch of emails) and now
// the warning code should be getting run after the notice code, so we shouldn't have to worry about 3 day warnings and sending warning and notice at the same time
$this->filter(null, 'DATE_SUB(expirationDate, INTERVAL emailOnExpirationDays DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 5 DAY) AND NOW()');
//$this->filter(null, 'DATE_SUB(expirationDate, INTERVAL 30 DAY) BETWEEN DATE_SUB(NOW(), INTERVAL 5 DAY) AND NOW()');
}
protected function setupProductExpirationQueries() {
$this->addToQuery(' INNER JOIN LMemProducts ON txns.productID = LMemProducts.ID');
// the expiration date exists (some products don't expire)
$this->filter('expirationDate', null, '!=');
// we're supposed to send emails
$this->filter('emailOnExpiration', true);
$this->filter('emailOnExpirationDays', null, '!=');
$this->filter('emailOnExpirationDays', 0, '!=');
}
}
最佳答案
以下 SQL 应该适合您:
(
(DATE_SUB(expirationDate, 30 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
OR
(DATE_SUB(expirationDate, 5 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
OR
(DATE_SUB(expirationDate, 1 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
)
AND
(DATE_ADD(warnedDate, 4 DAYS) <= NOW())
基本上,您要检查过期日期减去警告期是否在 3 天前和现在之间。这允许作业中出现一些小(3 天)的问题而无法运行。具体来说,如果到期日期是 3 月 15 日,则它将在 2 月 15 日(假设为 30 天)和 2 月 18 日之间返回 true。但我们不想在此期间多次发送它(如果作业可能每天运行多次,这将是一个潜在的问题),因此您还要检查 warnDate 是否至少是 4 天前。这很适合您的 30/5/1 周期。
要将其放入 filterBy...Warned() 函数中,您需要删除 $this->filter('warnedDate', null);
行,然后删除 DATE_SUB
,然后您可以“直接”添加 SQL:
$this->filter(null, "(
(DATE_SUB(expirationDate, 30 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
OR
(DATE_SUB(expirationDate, 5 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
OR
(DATE_SUB(expirationDate, 1 DAYS) BETWEEN DATE_SUB(NOW(), 3 DAYS) AND NOW())
)
AND
(DATE_ADD(warnedDate, 4 DAYS) <= NOW())");
关于php - Concrete5过滤SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766978/
我有一个非常简单的类,如下所示: abstract class Person { private $id; private $createdOn; // ... More pr
我需要在扩展AbstractClass的每个ConcreteClass中定义常量值。由于某种原因,对象最终会具有重复的字段,一组字段等于零,下一组字段具有正确的值。 某些接口(interface) p
在阅读 this article 中的工厂时,我遇到了这两个术语 AbstractFactory 和 ConcreteFactory。 在阅读 StackOverflow 时,我发现了一些很好的答案(
public class GenericClass { class MyClass { } public GenericClass(final T[] param) {
我在同一代码中遇到了另一个问题......我收到此错误: initialization method -initWithCharactersNoCopy:length:freeWhenDone: ca
我在研究 concolic testing 的概念时遇到了术语“具体和符号执行” . (那里提到的文章“CUTE:C 的混合单元测试引擎”在其摘要部分使用了该术语。) "The approach us
我在运行 Streaming API 时遇到了 tweepy 问题,但我的问题不仅仅与 tweepy 直接相关。 我遇到了多个异常,我认为我可以暂时“捕获/通过”,作为临时解决方案,直到找出问题所在。
我想将表单结果写入另一个数据库。 在 Concrete 5.6 中,您可以即时切换到另一个数据库。我无法找出它在 Concrete 5.7 中的工作原理。 5.6 方式 $db = Loader::d
我该怎么做才能防止编译器抛出以下警告 Missing concrete implementation of setter 'MyClass.field' and getter 'MyClass.fie
我们是 Glass mapper 的新手,想在我们的 Sitecore 项目中使用它。在查看教程时,我们注意到没有关于如何设置 Sitecore 允许的深度继承的深入示例。浏览网页时,我们注意到有人将
在自定义 Concrete5 代码 (5.7+) 中执行服务器端重定向的正确方法是什么? 最佳答案 我发现这是最好的方法: (new RedirectResponse('/URL-HERE'))->s
我正在开发一个建筑项目的库存控制系统。保管人负责添加新库存并将其分配给员工或从员工退还。这些项目(以及它们的属性)将有很大的不同。例如钢铁制品,服装,工厂/机械,工具等 我的问题是要使用Class/C
我有类Bar(可能还有许多其他类),它扩展了抽象类AbstractFoo。将 Bar 实例转换为 FooDTO 时,会检测具体类。 但是,当将 Bar 实例集合转换为 FooDTO 列表时,具体的类信
我有一个接口(interface)和一个定义如下的类 public interface IShape { } public class Square : IShape { } 我知道我可以在结构图中为
我正在this中学习工厂模式关联。在编写了一个普通的工厂之后,作者继续设计一个工厂,我们不必修改工厂的代码来添加新的具体实现。 (假设有一个 Product 接口(interface),工厂提供它的实
我有一个“提供者工厂”,它创建具体提供者的实现。要创建正确的实现,除其他参数外,它还需要 typeId。问题是为了将正确的 typeId 传递给工厂,我需要验证并在必要时更改它。为了做到这一点,除其他
在使用模型继承时,我试图找到 django 模型对象的实际类。 一些描述问题的代码: class Base(models.model): def basemethod(self):
我使用 vim 并尝试使用“Vundle”。它有助于像在 Ruby on Rails 中一样安装插件: Bundle 'scrooloose/nerdtree' Bundle 'scrooloose/
我对使用具体类和接口(interface)的影响有一些疑问。 说一些代码块(称之为chunkCode)使用具体类A。如果出现以下情况,我是否必须重新编译 chunkCode: 我向 A 添加了一些新的
所以我遇到了一个问题,我正在尝试实现父级的父级的具体版本,如下所示。 public abstract class Collection { ... } public abstract class
我是一名优秀的程序员,十分优秀!