Appearance
教学活动扩展
EduSoho下的教学活动是指教学内容的展现方式,系统默认提供了图文、视频、音频、直播、讨论、flash、文档、PPT、考试、作业、练习、下载资料等12种教学活动,开发者可对教学活动进行扩展。现要新增一种教学活动--小组,以下是开发步骤:
1.执行创建插件命令
bash
app/console plugin:create GroupTask
2.执行插件注册命令
bash
app/console plugin:register GroupTask
3.创建教学活动的扩展类Group
,该类需要继承Biz\Activity\Config\Activity
,并且实现相关接口。文件内容如下:
php
<?php
namespace GroupTaskPlugin\Biz\Activity\Type;
use Biz\Activity\Config\Activity;
class Group extends Activity
{
protected function registerListeners()
{
return array();
}
public function get($targetId)
{
// code
}
public function find($ids)
{
// code
}
public function copy($activity, $config = array())
{
// 计划被复制时调用
}
public function sync($sourceActivity, $activity)
{
// 计划被复制到班级时,源计划任务新增修改删除时调用
}
public function update($targetId, &$fields, $activity)
{
// code
}
public function isFinished($activityId)
{
// code
}
public function delete($targetId)
{
// code
}
public function create($fields)
{
// code
}
/**
* @return TextActivityDao
*/
protected function getXXXDao()
{
return $this->getBiz()->dao('GroupPlugin:XXX:XXXDao');
}
/**
* @return ActivityService
*/
protected function getXXXService()
{
return $this->getBiz()->service('GroupPlugin:XXX:XXXService');
}
}
注意
教学活动的扩展类文件目录要与EduSoho系统内教学活动类保持一致。EduSoho的教学活动类目录Biz/Activity/Type
5. 具体的业务逻辑请先完善Service
,Dao
,Service
类可继承EduSoho下的Biz\BaseService
类。
6. 新建GroupTaskPlugin/Extension
目录,该目录下创建ActivityExtension.php
文件,具体内容:
php
<?php
namespace GroupTaskPlugin\Extension;
use AppBundle\Extension\Extension;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
use GroupTaskPlugin\Biz\Activity\Type\Group;
class ActivityExtension extends Extension implements ServiceProviderInterface
{
/**
* {@inheritdoc}
*/
public function register(Container $container)
{
$container['activity_type.group'] = function ($biz) {
return new Group($biz);
};
}
public function getActivities()
{
$biz = $this->biz;
return array(
'group' => array(
'meta' => array(
'name' => '小组', //任务类型名称
'icon' => 'es-icon es-icon-graphicclass', //任务类型图片
),
'controller' => 'GroupTaskPlugin:Activity/Group', //任务控制器
'visible' => function ($courseSet, $course) { //是否可见
return true;
},
)
);
}
}
7. 在GroupTaskPlugin/Resources/config/services.yml
文件下注入服务:
yaml
services:
plugin.activity.extension:
class: GroupTaskPlugin\Extension\ActivityExtension
calls:
- [setBiz, ['@biz']]
tags:
- { name: extension }
Warning::注意
plugin.activity.extension
这个code的名字取与EduSoho系统activity.extension
不一样的名字,避免因加载优先级问题被覆盖。
8. 任务控制器Controller,在GroupTaskPlugin/Controller
目录创建Activity
目录,并创建GroupController.php
文件,该文件需要继承AppBundle\Controller\BaseController
,具体内容如下:
php
<?php
namespace GroupTaskPlugin\Controller\Activity;
use AppBundle\Controller\BaseController;
use Symfony\Component\HttpFoundation\Request;
class GroupController extends BaseController implements ActivityActionInterface
{
public function showAction(Request $request, $activity)
{
// code
return $this->render('GroupTaskPlugin:Activity/Group/index.html.twig', array(
'activity' => $activity,
// other params
));
}
public function previewAction(Request $request, $task)
{
$activity = $this->getActivityService()->getActivity($task['activityId']);
// code
return $this->render('GroupTaskPlugin:Activity/Group/preview.html.twig', array(
'activity' => $activity,
// other params
));
}
public function editAction(Request $request, $id, $courseId)
{
$activity = $this->getActivityService()->getActivity($id);
// code
return $this->render('GroupTaskPlugin:Activity/Group/modal.html.twig', array(
'activity' => $activity,
// other params
));
}
public function createAction(Request $request, $courseId)
{
//code
return $this->render('GroupTaskPlugin:Activity/Group/modal.html.twig', array(
'courseId' => $courseId,
// other params
));
}
public function finishConditionAction(Request $request, $activity)
{
$media = $this->getActivityService()->getActivityConfig('group')->get($activity['mediaId']);
return $this->render('GroupTaskPlugin:Activity/Group/finish-condition.html.twig', array(
'media' => $media,
));
}
protected function getActivityService()
{
return $this->createService('Activity:ActivityService');
}
public function getXXXService()
{
return $this->createService('GroupTaskPlugin:XXX:XXXService');
}
}