예제 #1
0
    /**
     * @Route("/admin/module/add/module/{courseId}", name = "admin_course_module_add_module")
     * @Template("LearningMainBundle:Admin:course_module_.html.twig")
     */
    public function AdminModuleAddAction($courseId)
    {
        ini_set('memory_limit', -1);
        $request = $this->getRequest();
        $courseModule = new CourseModule();
        $course = $this->getDoctrine()->getRepository('LearningMainBundle:Course')->findOneById($courseId);
        if ($request->isMethod('POST')) {
            $em = $this->getDoctrine()->getManager();
            $maxPosition = $em->createQuery('
				SELECT MAX(m.position)
				FROM LearningMainBundle:CourseModule m
				WHERE m.course = :courseId
			')->setParameter('courseId', $courseId)->getSingleScalarResult();
            $type = $request->request->get('type');
            $file = $request->files->get('file_up');
            # проверка, что файл загружен при выборе видео/файла
            if (empty($type) || ($type == 'video' || $type == 'file') && empty($file)) {
                $post_max_size = ini_get('post_max_size');
                $error = 'Не удалось загрузить файл. Сервер принимает файлы размером до ' . $post_max_size;
                return array('course' => $course, 'error' => $error, 'module' => $courseModule);
            }
            $position = $maxPosition == null ? 1 : $maxPosition + 1;
            $courseModule->setPosition($position);
            $courseModule->setTitle($request->request->get('title'));
            $courseModule->setEnabled($request->request->get('enabled'));
            $courseModule->setType($request->request->get('type'));
            $courseModule->setText($request->request->get('text'));
            $courseModule->setTimeToLearn($request->request->get('timeToLearn'));
            /********************************************/
            if ($file != NULL) {
                $name = $this->rus2translit($file->getClientOriginalName());
                $pathinfo = pathinfo($name);
                if (false == in_array($pathinfo['extension'], array('flv', 'pdf'))) {
                    return array('course' => $course, 'module' => $courseModule);
                }
                $name = substr($pathinfo['filename'], 0, 50) . '_' . uniqid() . '.' . $pathinfo['extension'];
                $file->move('upload/files', $name);
                $courseModule->setFile($name);
                # у видео надо сохранить размеры и длительность
                if ($request->request->get('type') == 'video') {
                    $this->setVideoMeta($courseModule, $name);
                }
            }
            /********************************************/
            $courseModule->setCourse($course);
            if ($type == 'text' || $file != NULL) {
                $em->persist($courseModule);
                $em->flush();
                # надо установить родительский ид. для версионности модуля
                $em->refresh($courseModule);
                $courseModule->setParentId($courseModule->getId());
                $em->flush($courseModule);
            } else {
                $error = 'Ошибка сохранения: необходимо загрузить pdf-файл или flv-видео';
                return array('course' => $course, 'error' => $error, 'module' => $courseModule);
            }
            $this->get('session')->getFlashBag()->add('popup', 'Добавлен');
            return $this->redirect($this->generateUrl('admin_course_edit', array('courseId' => $courseId)));
        }
        return array('course' => $course);
    }