Symfony网校edusoho积分插件二次开发-附代码

插件测试站 http://all.zkdygl.com/course/3

<?php

namespace RewardPointPlugin\Controller\Admin;

use AppBundle\Common\ArrayToolkit;
use AppBundle\Controller\Admin\BaseController;
use RewardPointPlugin\Biz\RewardPoint\Service\AccountFlowService;
use RewardPointPlugin\Biz\RewardPoint\Service\AccountService;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Common\Paginator;

class RewardPointController extends BaseController
{
    public function indexAction(Request $request)
    {
        if (!$this->getAccountService()->hasRewardPointPermission()) {
            $this->setFlashMessage('danger', '积分没有开启,开启后才能使用相关功能!');
            return $this->redirect($this->generateUrl('admin_reward_point_set'));
        }
        $fields = $request->query->all();
        $conditions = array(
            'keyword' => '',
            'keywordType' => '',
        );
        $conditions = array_merge($conditions, $fields);

        $userProfiles = $this->findMatchedProfilesAndFilterConditions($conditions);

        if ($conditions['keywordType'] == 'truename' && empty($userProfiles)) {
            $paginator = new Paginator(
                $this->get('request'),
                0,
                20
            );
            goto response;
        }
        $userCount = $this->getUserService()->countUsers($conditions);
        $paginator = new Paginator(
            $this->get('request'),
            $userCount,
            20
        );



        $users = $this->getUserService()->searchUsers(
            $conditions,
            array('createdTime' => 'DESC'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );

        if (!empty($users)) {
            $userIds = ArrayToolkit::column($users, 'id');
            if (empty($userProfiles)) {
                $userProfiles = $this->getUserService()->searchUserProfiles(
                    array('ids' => $userIds),
                    array(),
                    0,
                    PHP_INT_MAX,
                    array('id', 'mobile', 'truename')
                );
            }
            $conditions['userIds'] = $userIds;

            $accounts = $this->getAccountService()->searchAccounts(
                $conditions,
                array(),
                0,
                PHP_INT_MAX
            );

            $accounts = ArrayToolkit::index($accounts, 'userId');
        }

        response:

        return $this->render('RewardPointPlugin::admin/reward-point/index.html.twig', array(
            'users' => empty($userProfiles) ? array() : $users,
            'userProfiles' => empty($userProfiles) ? array() : $userProfiles,
            'accounts' => empty($accounts) ? array() : $accounts,
            'paginator' => $paginator,
        ));
    }

    public function grantAction(Request $request, $id)
    {
        $user = $this->getUserService()->getUser($id);
        $account = $this->getAccountService()->getAccountByUserId($id);

        if ($request->getMethod() === 'POST') {
            $profile = $request->request->all();
            $this->getAccountService()->grantRewardPoint($id, $profile);

            return $this->redirect($this->generateUrl('admin_reward_point_account'));
        }

        return $this->render(
            'RewardPointPlugin::admin/reward-point/grant-modal.html.twig',
            array(
                'user' => $user,
                'account' => $account,
            )
        );
    }

    public function detailAction($id)
    {
        $conditions['userId'] = $id;
        $user = $this->getUserService()->getUser($id);
        $accountFlowCount = $this->getAccountFlowService()->countAccountFlows($conditions);
        $paginator = new Paginator(
            $this->get('request'),
            $accountFlowCount,
            10
        );

        $accountFlows = $this->getAccountFlowService()->searchAccountFlows(
            $conditions,
            array('createdTime' => 'DESC'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );

        return $this->render(
            'RewardPointPlugin::admin/reward-point/detail-modal.html.twig',
            array(
                'accountFlows' => $accountFlows,
                'user' => $user,
                'paginator' => $paginator,
            )
        );
    }

    public function deductionAction(Request $request, $id)
    {
        $user = $this->getUserService()->getUser($id);
        $account = $this->getAccountService()->getAccountByUserId($id);

        if ($request->getMethod() === 'POST') {
            $profile = $request->request->all();
            $this->getAccountService()->deductionRewardPoint($id, $profile);

            return $this->redirect($this->generateUrl('admin_reward_point_account'));
        }

        return $this->render(
            'RewardPointPlugin::admin/reward-point/deduction-modal.html.twig',
            array(
                'user' => $user,
                'account' => $account,
            )
        );
    }

    public function logsAction(Request $request)
    {
        if (!$this->getAccountService()->hasRewardPointPermission()) {
            $this->setFlashMessage('danger', '积分没有开启,开启后才能使用相关功能!');
            return $this->redirect($this->generateUrl('admin_reward_point_set'));
        }
        $conditions = $request->query->all();
        $conditions['module'] = 'admin_reward_point_account_flow';
        $paginator = new Paginator(
            $request,
            $this->getLogService()->searchLogCount($conditions),
            20
        );

        $logs = $this->getLogService()->searchLogs(
            $conditions,
            array('createdTime' => 'DESC'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );

        $operators = $this->getUserService()->findUsersByIds(ArrayToolkit::column($logs, 'userId'));
        $datas = ArrayToolkit::column($logs, 'data');
        $users = $this->getUserService()->findUsersByIds(ArrayToolkit::column($datas, 'userId'));

        return $this->render('RewardPointPlugin::admin/reward-point/logs.html.twig', array(
            'logs' => $logs,
            'paginator' => $paginator,
            'operators' => $operators,
            'users' => $users,
        ));
    }

    private function findMatchedProfilesAndFilterConditions(&$conditions)
    {
        $userProfiles = array();

        if (!empty($conditions['keywordType']) && in_array($conditions['keywordType'], array('truename', 'idcard'))) {
            $userProfiles = $this->getUserService()->searchUserProfiles(
                $conditions,
                array(),
                0,
                PHP_INT_MAX,
                array('id', 'mobile', 'truename')
            );
            if (!empty($userProfiles)) {
                $userIds = ArrayToolkit::column($userProfiles, 'id');
                $conditions['userIds'] = $userIds;
            }

            $userProfiles = ArrayToolkit::index($userProfiles, 'id');
        }
        return $userProfiles;
    }

    /**
     * @return AccountService
     */
    protected function getAccountService()
    {
        return $this->createService('RewardPointPlugin:RewardPoint:AccountService');
    }

    /**
     * @return AccountFlowService
     */
    protected function getAccountFlowService()
    {
        return $this->createService('RewardPointPlugin:RewardPoint:AccountFlowService');
    }
}

应用介绍
可以使用积分发放功能插件,对于网校内学员的一些基础操作行为发放积分,促使学员为了获得积分而去进行登录、提问等等。

更新简介
1.1.0 (2019-12-12)

  • 优化:适配新后台

1.0.2 (2018-04-12)
优化:积分账户访问速度

1.0.1 (2018-03-28)
优化:导航头像积分模块
优化:适配积分抵现插件

新增:用户登录、发表话题等行为获取积分功能

1、后台用户积分设置规则:
在这里插入图片描述

2、用户获取的积分情况

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值