src/AppBundle/Controller/FileChooserController.php line 64

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller;
  3. use AppBundle\Common\ArrayToolkit;
  4. use AppBundle\Common\Paginator;
  5. use AppBundle\Component\MediaParser\ParserProxy;
  6. use Biz\CloudLive\Service\LiveService;
  7. use Biz\Course\Service\CourseService;
  8. use Biz\Course\Service\MaterialService;
  9. use Biz\File\Service\UploadFileService;
  10. use Biz\User\Service\UserService;
  11. use Symfony\Component\HttpFoundation\Request;
  12. /**
  13.  * Class MediaProccessController
  14.  * 用来处理活动中文件选取(上传,从资料库选择,从课程文件选择,导入网络文件)逻辑.
  15.  */
  16. class FileChooserController extends BaseController
  17. {
  18.     public function materialChooseAction(Request $request)
  19.     {
  20.         $currentUser $this->getUser();
  21.         if (!$currentUser->isTeacher() && !$currentUser->isAdmin()) {
  22.             throw $this->createAccessDeniedException('Permission denied, you can not access this page!');
  23.         }
  24.         $conditions $request->query->all();
  25.         $conditions $this->filterMaterialConditions($conditions$currentUser);
  26.         $paginator = new Paginator(
  27.             $request,
  28.             $this->getUploadFileService()->searchFileCount($conditions),
  29.             20
  30.         );
  31.         $files $this->getUploadFileService()->searchFiles(
  32.             $conditions,
  33.             ['createdTime' => 'DESC'],
  34.             $paginator->getOffsetCount(),
  35.             $paginator->getPerPageCount()
  36.         );
  37.         $createdUsers $this->getUserService()->findUsersByIds(ArrayToolkit::column($files'createdUserId'));
  38.         $createdUsers ArrayToolkit::index($createdUsers'id');
  39.         return $this->render(
  40.             'file-chooser/widget/choose-table.html.twig',
  41.             [
  42.                 'files' => $files,
  43.                 'createdUsers' => $createdUsers,
  44.                 'paginator' => $paginator,
  45.             ]
  46.         );
  47.     }
  48.     public function findMySharingContactsAction(Request $request)
  49.     {
  50.         $user $this->getUser();
  51.         if (!$user->isTeacher() && !$user->isAdmin()) {
  52.             throw $this->createAccessDeniedException('Permission denied, you can not access this page!');
  53.         }
  54.         $mySharingContacts $this->getUploadFileService()->findMySharingContacts($user['id']);
  55.         return $this->createJsonResponse($mySharingContacts);
  56.     }
  57.     public function courseFileChooseAction(Request $request$courseId)
  58.     {
  59.         $currentUser $this->getUser();
  60.         if (!$currentUser->isTeacher() && !$currentUser->isAdmin()) {
  61.             throw $this->createAccessDeniedException('Permission denied, you can not access this page!');
  62.         }
  63.         $query $request->query->all();
  64.         $courseMaterials $this->findCourseMaterials($request$courseId);
  65.         $conditions = [];
  66.         $conditions['page'] = $request->query->get('page'1);
  67.         $conditions['ids'] = $courseMaterials ArrayToolkit::column($courseMaterials'fileId') : [-1];
  68.         $conditions['type'] = (empty($query['type']) || 'all' == $query['type']) ? null $query['type'];
  69.         $conditions['filenameLike'] = empty($query['keyword']) ? null $query['keyword'];
  70.         $paginator = new Paginator(
  71.             $request,
  72.             $this->getUploadFileService()->searchFileCount($conditions),
  73.             20
  74.         );
  75.         $files $this->getUploadFileService()->searchFiles(
  76.             $conditions,
  77.             ['createdTime' => 'DESC'],
  78.             $paginator->getOffsetCount(),
  79.             $paginator->getPerPageCount()
  80.         );
  81.         $createdUsers $this->getUserService()->findUsersByIds(ArrayToolkit::column($files'createdUserId'));
  82.         $createdUsers ArrayToolkit::index($createdUsers'id');
  83.         return $this->render(
  84.             'file-chooser/widget/choose-table.html.twig',
  85.             [
  86.                 'files' => $files,
  87.                 'createdUsers' => $createdUsers,
  88.                 'paginator' => $paginator,
  89.             ]
  90.         );
  91.     }
  92.     public function importAction(Request $request$courseId)
  93.     {
  94.         $url $request->query->get('url');
  95.         try {
  96.             $proxy = new ParserProxy();
  97.             $item $proxy->parseItem($url);
  98.         } catch (\Exception $e) {
  99.             return $this->createJsonResponse(['error' => $e->getMessage()]);
  100.         }
  101.         return $this->createJsonResponse($item);
  102.     }
  103.     public function liveReplayAction(Request $request)
  104.     {
  105.         $conditions $this->buildLiveReplaySearchConditions($request);
  106.         $paginator = new Paginator(
  107.             $request,
  108.             $this->getLiveService()->countLive($conditions),
  109.             5
  110.         );
  111.         $replays $this->getLiveService()->searchLive(
  112.             $conditions,
  113.             ['id' => 'DESC'],
  114.             $paginator->getOffsetCount(),
  115.             $paginator->getPerPageCount()
  116.         );
  117.         return $this->render('file-chooser/widget/live-replay-table.html.twig', [
  118.             'lives' => $replays,
  119.             'paginator' => $paginator,
  120.         ]);
  121.     }
  122.     protected function buildLiveReplaySearchConditions($request)
  123.     {
  124.         $type $request->query->get('type''manage');
  125.         if (!in_array($type, ['manage''teach'], true)) {
  126.             $type 'manage';
  127.         }
  128.         $conditions = [
  129.             'title' => $request->query->get('title'''),
  130.             'excludeReplayId' => 0,
  131.             'isFinished' => 1,
  132.         ];
  133.         if ('teach' == $type) {
  134.             $conditions['userId'] = $this->getCurrentUser()->getId();
  135.         }
  136.         if ('manage' == $type) {
  137.             $conditions['ids'] = $this->getLiveService()->getManageableLiveIds($conditions);
  138.         }
  139.         return $conditions;
  140.     }
  141.     protected function filterMaterialConditions($conditions$currentUser)
  142.     {
  143.         $conditions['status'] = 'ok';
  144.         $conditions['currentUserId'] = $currentUser['id'];
  145.         $conditions['noTargetType'] = 'attachment';
  146.         if (!empty($conditions['keyword'])) {
  147.             $conditions['filename'] = $conditions['keyword'];
  148.             unset($conditions['keyword']);
  149.         }
  150.         if ('live' == $conditions['type']) {
  151.             unset($conditions['type']);
  152.             $conditions['types'] = ['ppt''document'];
  153.         } else {
  154.             $conditions['type'] = (empty($conditions['type']) || ('all' == $conditions['type'])) ? null $conditions['type'];
  155.         }
  156.         return $conditions;
  157.     }
  158.     protected function findCourseMaterials($request$courseId)
  159.     {
  160.         $courseType $request->query->get('courseType''course');
  161.         $conditions = ['type' => $courseType];
  162.         if ('openCourse' == $courseType) {
  163.             $conditions['courseId'] = $courseId;
  164.         } else {
  165.             $course $this->getCourseService()->getCourse($courseId);
  166.             $conditions['courseSetId'] = $course['courseSetId'];
  167.         }
  168.         //FIXME 同一个courseId下文件可能存在重复,所以需考虑去重,但没法直接根据groupbyFileId去重(sql_mode)
  169.         $courseMaterials $this->getMaterialService()->searchMaterials(
  170.             $conditions,
  171.             ['createdTime' => 'DESC'],
  172.             0,
  173.             PHP_INT_MAX
  174.         );
  175.         return $courseMaterials;
  176.     }
  177.     /**
  178.      * @return UploadFileService
  179.      */
  180.     protected function getUploadFileService()
  181.     {
  182.         return $this->createService('File:UploadFileService');
  183.     }
  184.     /**
  185.      * @return UserService
  186.      */
  187.     protected function getUserService()
  188.     {
  189.         return $this->createService('User:UserService');
  190.     }
  191.     /**
  192.      * @return MaterialService
  193.      */
  194.     protected function getMaterialService()
  195.     {
  196.         return $this->createService('Course:MaterialService');
  197.     }
  198.     /**
  199.      * @return CourseService
  200.      */
  201.     protected function getCourseService()
  202.     {
  203.         return $this->createService('Course:CourseService');
  204.     }
  205.     /**
  206.      * @return LiveService
  207.      */
  208.     protected function getLiveService()
  209.     {
  210.         return $this->createService('CloudLive:LiveService');
  211.     }
  212. }