Пример #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', null);
            $fileName = $request->request->get('file_name', null);
            # проверка, что файл загружен при выборе видео/файла
            if (empty($type) || ($type == 'video' || $type == 'file') && empty($file) && empty($fileName)) {
                $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->setTranslationCode($request->request->get('translationCode'));
            $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 (!empty($fileName)) {
                $rootDir = $this->get('kernel')->getRootDir();
                $path = $rootDir . '/../web/upload/files/' . $fileName;
                if (!file_exists($path)) {
                    $error = 'Ошибка сохранения: файла с таким именем на сервере не существует';
                    return array('course' => $course, 'error' => $error, 'module' => $courseModule);
                }
                $courseModule->setFile($fileName);
                $this->setVideoMeta($courseModule, $fileName);
            } else {
                if ($file != NULL) {
                    $name = $file->getClientOriginalName();
                    $name = $this->rus2translit($name);
                    $format = substr($name, strlen($name) - 4);
                    $name = substr($name, 0, strlen($name) - 4);
                    $name .= '_' . time() . $format;
                    if ($format != '.flv' && $format != '.pdf' && $format != '.FLV' && $format != '.PDF') {
                        $error = 'Ошибка сохранения: необходимо загрузить pdf-файл или flv-видео';
                        return array('course' => $course, 'error' => $error, 'module' => $courseModule);
                    }
                    $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 || !empty($fileName)) {
                $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);
    }