vlambda博客
学习文章列表

数据库过期提示框源码分析


好多人私信问我,如何破解企业版数据库过期时间,这个不能讲。

  • 尊重正版,破解违法。详见:
    https://www.cnblogs.com/aitong/p/10727505.html

我们今天可以讲讲数据库过期提示框,因为我想了解一下数据库过期天数它是如何计算的,点击按钮会触发什么,此篇为扩展性学习。

定位

我们怎么在源代码中定位到提示框中“注册您的订阅”和“购买订阅”按钮

注意浏览器F12的使用

之前我们讲过如何通过类名快速定位到源代码中,如本次我们可以通过查找oe_instance_buy类名定位到源代码中:

数据库过期提示框源码分析

再提供一个新的查找方式,你可以将系统语言切换为英文,因为源代码中都是英文的提示语。搜索This database will expire in也能准确定位:

数据库过期提示框源码分析

最终定位到web_enterprise模块,企业版主要的样式也在其中。

分类分析

从源码中可以看到整个过期提示框使用的是Owl Templates。Owl模板怎么继承修改,有知道的可以私信告诉我啊

我们可以将DatabaseExpirationPanel模板简单分为三块:

  • 开头是到期天数的提示语

  • 中间是购买/延长过期时间相关按钮

  • 最后是点击按钮后的相关提示

我们贴出中间代码块,因为我们关注的是系统如何延长过期时间。

<t t-if="warning === 'admin'"> <t t-if="notYetRegistered"> <a class="oe_instance_register_show" href="#" t-on-click.prevent="_onClickRegister">Register your subscription</a> or <a class="oe_instance_buy" href="#" t-on-click.prevent="_onBuy">buy a subscription</a>. </t> <t t-if="expirationReason === 'renewal'"> <a class="oe_instance_renew" href="#" t-on-click.prevent="_onRenew">Renew your subscription</a> <a class="check_enterprise_status" href="#" title="Refresh subscription status" aria-label="Refresh subscription status" t-on-click.prevent="_onCheckStatus" > <i class="fa fa-refresh"/> </a> </t> <t t-elif="expirationReason === 'upsell'">You have more users or more apps installed than your subscription allows.<br/> <a class="oe_instance_upsell" href="#" t-on-click.prevent="_onUpsell">Upgrade your subscription</a> <a class="check_enterprise_status" href="#" title="Refresh subscription status" aria-label="Refresh subscription status" t-on-click.prevent="_onCheckStatus" > <i class="fa fa-refresh"/> </a> </t></t>

系统如何延长过期时间

当我们输入激活码,点击确认时,会触发什么

此处代码:

<button class="btn btn-primary" t-on-click.prevent="_onCodeSubmit" > <t t-esc="state.buttonText"/></button>

由上看到t-on-click.prevent="_onCodeSubmit""搜索js_onCodeSubmit方法。

开启odoo调试模式,使用浏览器断点,了解_onCodeSubmit函数逻辑。

此函数比较长,简单说一下逻辑:

  1. 先判断输入值是否为空,为空直接结束

  2. 将输入的激活码存入系统参数database.enterprise_code

  3. 调用publisher_warranty.contract模型中的update_notification函数进行激活码处理

  4. 将过期时间从系统参数中取出与老过期时间对比,如果不同则返回成功,相同则激活失败

此处我们主要关注一下update_notification函数,他是判断激活码是否正确的主函数。

讲一下此函数的作用:

  • 向Odoo的发行商服务器发送消息,以检查合同的有效性(即激活码是否正确),获得通知等。

这里就不深入去讲了,有兴趣的可以自行了解。

希望大家周末愉快!