zm
2021-03-25 d84ff6053b22269a6c59dc005e9efb8de6595988
commit | author | age
90c639 1 <?php
Z 2
3 /**
4  * @copyright ©2018 浙江禾匠信息科技
5  * @author Lu Wei
6  * @link http://www.zjhejiang.com/
7  * Created by IntelliJ IDEA
8  * Date Time: 2018/10/30 12:00
9  */
10
11 namespace app\plugins;
12
13 use app\forms\common\goods\GoodsAuth;
14 use app\forms\common\goods\LimitBuy;
15 use app\forms\OrderConfig;
16 use app\handlers\orderHandler\OrderCanceledHandlerClass;
17 use app\handlers\orderHandler\OrderChangePriceHandlerClass;
18 use app\handlers\orderHandler\OrderCreatedHandlerClass;
19 use app\handlers\orderHandler\OrderPayedHandlerClass;
20 use app\handlers\orderHandler\OrderSalesHandlerClass;
21 use app\models\Goods;
22 use app\models\User;
23 use yii\console\Application;
24
25 abstract class Plugin
26 {
27     protected static $instance;
28 /**
29      * 插件唯一id,小写英文开头,仅限小写英文、数字、下划线
30      * @return string
31      */
32     abstract public function getName();
33 /**
34      * 插件显示名称
35      * @return string
36      */
37     abstract public function getDisplayName();
38 /**
39      * 插件安装执行代码
40      * @return mixed
41      */
42     public function install()
43     {
44         return true;
45     }
46
47     /**
48      * 插件更新执行代码
49      * @return mixed
50      */
51     public function update()
52     {
53         return true;
54     }
55
56     /**
57      * 插件卸载执行代码
58      * @return mixed
59      */
60     public function uninstall()
61     {
62         return true;
63     }
64
65     /**
66      * 插件安装之前
67      */
68     public function beforeInstall()
69     {
70     }
71
72     /**
73      * 插件安装之后
74      */
75     public function afterInstall()
76     {
77     }
78
79     /**
80      * 插件更新之前
81      */
82     public function beforeUpdate()
83     {
84     }
85
86     /**
87      * 插件更新之后
88      */
89     public function afterUpdate()
90     {
91     }
92
93     /**
94      * 插件卸载之前
95      */
96     public function beforeUninstall()
97     {
98     }
99
100     /**
101      * 插件卸载之后
102      */
103     public function afterUninstall()
104     {
105     }
106
107
108     /**
109      * 获取插件菜单列表
110      * @return array
111      */
112     public function getMenus()
113     {
114         return [];
115     }
116
117     public function handler()
118     {
119     }
120
121     /**
122      * 插件的小程序端配置,小程序端可使用getApp().config(e => { e.plugin.xxx });获取配置,xxx为插件唯一id
123      * @return array
124      */
125     public function getAppConfig()
126     {
127         return [];
128     }
129
130     /**
131      * 获取插件入口路由
132      * @return string|null
133      */
134     public function getIndexRoute()
135     {
136         return null;
137     }
138
139     /**
140      * @return string 获取插件图标
141      */
142     public function getIconUrl()
143     {
144         if (\Yii::$app instanceof Application) {
145             return '';
146         }
147         $default = \Yii::$app->request->getBaseUrl() . '/statics/img/common/unknown-plugin-icon.png';
148         $fileName = $this->getName() . '/icon.png';
149         if (file_exists(\Yii::$app->basePath . '/plugins/' . $fileName)) {
150             if (\Yii::$app->request->baseUrl == '/web') {
151                 $baseUrl = '';
152             } else {
153                 $baseUrl = dirname(\Yii::$app->request->baseUrl);
154                 $baseUrl = rtrim($baseUrl, '/');
155             }
156             $url = $baseUrl . '/plugins/' . $fileName;
157             return $url ? $url : $default;
158         } else {
159             return $default;
160         }
161     }
162
163     /**
164      * @param null $ext
165      * @return string 获取插件统计图标
166      */
167     public function getStatisticIconUrl($ext = null)
168     {
169         $default = \Yii::$app->request->getBaseUrl() . '/statics/img/common/unknown-plugin-icon.png';
170         $fileName = 'pl_icon_' . $this->getName() . $ext . '.png';
171         if (file_exists(\Yii::$app->basePath . '/web/statics/img/mall/statistic/plugin/' . $fileName)) {
172             if (\Yii::$app->request->baseUrl == '/web') {
173                 $baseUrl = '';
174             } else {
175                 $baseUrl = dirname(\Yii::$app->request->baseUrl);
176                 $baseUrl = rtrim($baseUrl, '/');
177             }
178             $url = $baseUrl . '/web/statics/img/mall/statistic/plugin/' . $fileName;
179             return $url ? $url : $default;
180         } else {
181             return $default;
182         }
183     }
184
185     /**
186      * @return string 获取插件的详细描述。
187      */
188     public function getContent()
189     {
190         return '';
191     }
192
193     /**
194      * @return false|string|null
195      */
196     public function getVersionFileContent()
197     {
198         $versionFile = \Yii::$app->basePath . '/plugins/' . static::getName() . '/version';
199         if (file_exists($versionFile)) {
200             return file_get_contents($versionFile);
201         }
202         return null;
203     }
204
205     /**
206      * 插件可共用的跳转链接
207      * @return array
208      */
209     public function getPickLink()
210     {
211         return [];
212     }
213
214     /**
215      * 插件可设置的转发信息的页面链接
216      */
217     public function getShareContentSetting()
218     {
219         return [];
220     }
221
222     /**
223      * 插件可设置标题的页面链接
224      */
225     public function getPageTitle()
226     {
227         return [];
228     }
229
230     /**
231      * 插件可用于展示页面信息
232      * @return array
233      */
234     public function getShowPageInfo()
235     {
236         return [];
237     }
238
239     /**
240      * 获取商城顶部导航按钮
241      * @return null|array 返回格式: ['name'=>'名称','url'=>'链接','new_window'=>'true|false, 是否新窗口打开']
242      */
243     public function getHeaderNav()
244     {
245         return null;
246     }
247
248     /**
249      * @return OrderConfig
250      * @throws \Exception
251      * 获取插件的相关配置 例如订单是否分销、是否短信提醒、是否邮件提醒、是否小票打印等
252      */
253     public function getOrderConfig()
254     {
255         return new OrderConfig();
256     }
257
258     /**
259      * @return bool
260      * 判断是否是平台 例如微信平台,支付宝平台
261      */
262     public function getIsPlatformPlugin()
263     {
264         return false;
265     }
266
267     /**
268      * @return OrderPayedHandlerClass
269      * 重改订单支付完成事件
270      */
271     public function getOrderPayedHandleClass()
272     {
273         return new OrderPayedHandlerClass();
274     }
275
276     /**
277      * @return OrderCreatedHandlerClass
278      * 重改订单创建事件
279      */
280     public function getOrderCreatedHandleClass()
281     {
282         return new OrderCreatedHandlerClass();
283     }
284
285     /**
286      * @return OrderCanceledHandlerClass
287      * 重改订单取消事件
288      */
289     public function getOrderCanceledHandleClass()
290     {
291         return new OrderCanceledHandlerClass();
292     }
293
294     /**
295      * @return OrderSalesHandlerClass
296      * 重改订单售后事件
297      */
298     public function getOrderSalesHandleClass()
299     {
300         return new OrderSalesHandlerClass();
301     }
302
303     /* @return OrderChangePriceHandlerClass
304      * 重改订单创建事件
305      */
306     public function getOrderChangePriceHandlerClass()
307     {
308         return new OrderChangePriceHandlerClass();
309     }
310
311     /**
312      * @param string $type mall--后台数据|api--前端数据
313      * @return null
314      * @throws \Exception
315      * 获取首页布局数据
316      */
317     public function getHomePage($type)
318     {
319         return null;
320     }
321
322     /**
323      * @return bool
324      * 初始化统计数据
325      * @throws \Exception
326      */
327     public function initData()
328     {
329         return true;
330     }
331
332     /**
333      * 黑名单 路由
334      * @return array
335      */
336     public function getBlackList()
337     {
338         return [];
339     }
340
341     /**
342      * @param User $user
343      * @return array
344      */
345     public function getUserInfo($user)
346     {
347         return [];
348     }
349
350     /**
351      * @return array
352      * 获取统计菜单
353      */
354     public function getStatisticsMenus()
355     {
356         return [];
357     }
358
359     public function getSignCondition($where)
360     {
361         return false;
362     }
363
364     public function templateSender()
365     {
366         throw new \Exception('暂不支持订阅消息发送');
367         return null;
368     }
369
370     /**
371      * @param $orderId
372      * @param $order
373      * @return array ['print_list' => ['插件的键' => ['label' => '文字名称', 'value' => '名称值']]]
374      * 注:此方法用于获取订单的额外信息
375      * print_list--用于打印小票中
376      */
377     public function getOrderInfo($orderId, $order)
378     {
379         return [];
380     }
381
382     /**
383      * @return array
384      * 不支持的功能
385      */
386     public function getNotSupport()
387     {
388         return [];
389     }
390
391     /**
392      * @param Goods $goods
393      * @return array
394      * 小程序端商品列表商品额外的信息
395      */
396     public function getGoodsExtra($goods)
397     {
398         return [];
399     }
400
401     /**
402      * @return array
403      * 订阅消息发送的列表
404      */
405     public function templateList()
406     {
407         return [];
408     }
409
410     public function updateGoodsPrice($goods)
411     {
412         return true;
413     }
414
415     /**
416      * @return bool
417      * 判断是否是商品类型 例如电子卡密
418      */
419     public function getIsTypePlugin()
420     {
421         return false;
422     }
423
424     /**
425      * 订单相关显示操作
426      * @return array
427      */
428     public function getOrderAction($actionList, $order)
429     {
430         return $actionList;
431     }
432
433     public function __call($name, $arguments)
434     {
435         throw new \Exception('插件没更新');
436     }
437
438     /**
439      * @return bool
440      * 是否支持电子卡密
441      */
442     public function supportEcard()
443     {
444         return false;
445     }
446
447     /**
448      * @return bool
449      * 是否需要审核
450      */
451     public function needCheck()
452     {
453         return false;
454     }
455
456     /**
457      * @return bool
458      * 是否需要提现操作
459      */
460     public function needCash()
461     {
462         return false;
463     }
464
465     /**
466      * @return string
467      * 身份名称
468      */
469     public function identityName()
470     {
471         return '';
472     }
473
474     /**
475      * @return array
476      * 特殊的链接需要判断之后才决定是否支持
477      */
478     public function getSpecialNotSupport()
479     {
480         return [];
481     }
482
483     /**
484      * @param array $config
485      * @return array
486      * @throws \Exception
487      * 获取处理手机端审核消息的方法
488      */
489     public function getReviewClass($config = [])
490     {
491         throw new \Exception('暂时支持');
492     }
493
494     public function getOrderExportFields()
495     {
496         return [];
497     }
498
499     public function getOrderExportData($params)
500     {
501         return [];
502     }
503
504     //商品上下架阻断
505     public function breakGoodsStatus($ids, $after)
506     {
507         return false;
508     }
509
510     // 获取平台图标
511     public function getPlatformIconUrl()
512     {
513         return [];
514     }
515
516     // 模板消息注册
517     public function templateRegister()
518     {
519         return [];
520     }
521
522     /**
523      * @return array
524      * 商品权限配置
525      * [
526      * is_show_and_buy_auth--是否支持浏览和购买权限
527      * is_min_number--是否支持起售
528      * is_limit_buy--是否支持限购
529      * ]
530      */
531     public function goodsAuth()
532     {
533         return GoodsAuth::defaultAuth();
534     }
535
536     /**
537      * @param array $config
538      * @return LimitBuy
539      * 限购类
540      */
541     public function limitBuy($config = [])
542     {
543         return new LimitBuy($config);
544     }
545 }