Courses: Add video_url + add sticky (special course) + add migration + test.

pull/4014/head^2
Julio 5 years ago
parent a244d71070
commit 17b4f1939d
  1. 64
      src/CoreBundle/Entity/Course.php
  2. 10
      src/CoreBundle/Migrations/Schema/V200/Version20191101132000.php
  3. 29
      src/CoreBundle/Migrations/Schema/V200/Version20201212195011.php
  4. 17
      tests/CoreBundle/Repository/Node/CourseRepositoryTest.php

@ -253,28 +253,24 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
protected ?string $directory = null;
/**
* @Groups({"course:read", "list"})
* @ORM\Column(name="course_language", type="string", length=20, nullable=false, unique=false)
*/
#[Groups(['course:read'])]
protected string $courseLanguage;
/**
* @Groups({"course:read", "course_rel_user:read"})
*
* @ORM\Column(name="description", type="text", nullable=true, unique=false)
*/
#[Groups(['course:read', 'course_rel_user:read'])]
protected ?string $description;
/**
* @Groups({"course:read", "course_rel_user:read"})
*
* @ORM\Column(name="introduction", type="text", nullable=true)
*/
#[Groups(['course:read', 'course_rel_user:read'])]
protected ?string $introduction;
/**
* @Groups({"course:read", "course:write", "course_rel_user:read"})
*
* @var CourseCategory[]|Collection
*
* @ORM\ManyToMany(targetEntity="Chamilo\CoreBundle\Entity\CourseCategory", inversedBy="courses")
@ -288,16 +284,16 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
* )
*/
#[ApiSubresource]
#[Groups(['course:read', 'course:write', 'course_rel_user:read'])]
protected Collection $categories;
/**
* @var int Course visibility
*
* @Groups({"course:read", "course:write"})
*
* @ORM\Column(name="visibility", type="integer", nullable=false, unique=false)
*/
#[Assert\NotBlank]
#[Groups(['course:read', 'course:write'])]
protected int $visibility;
/**
@ -311,19 +307,31 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
protected ?string $tutorName;
/**
* @Groups({"course:read", "list"})
* @ORM\Column(name="department_name", type="string", length=30, nullable=true, unique=false)
*/
#[Groups(['course:read'])]
protected ?string $departmentName = null;
/**
* @Groups({"course:read", "list"})
* @Assert\Url()
*
* @ORM\Column(name="department_url", type="string", length=180, nullable=true, unique=false)
*/
#[Assert\Url]
#[Groups(['course:read', 'course:write'])]
protected ?string $departmentUrl = null;
/**
* @ORM\Column(name="video_url", type="string", length=255)
*/
#[Assert\Url]
#[Groups(['course:read', 'course:write'])]
protected string $videoUrl;
/**
* @ORM\Column(name="sticky", type="boolean")
*/
#[Groups(['course:read', 'course:write'])]
protected bool $sticky;
/**
* @ORM\Column(name="disk_quota", type="bigint", nullable=true, unique=false)
*/
@ -345,9 +353,9 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
protected DateTime $creationDate;
/**
* @Groups({"course:read", "list"})
* @ORM\Column(name="expiration_date", type="datetime", nullable=true, unique=false)
*/
#[Groups(['course:read'])]
protected ?DateTime $expirationDate = null;
/**
@ -409,8 +417,9 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
$this->description = '';
$this->introduction = '';
$this->tutorName = '';
$this->registrationCode = null;
$this->legal = '';
$this->videoUrl = '';
$this->registrationCode = null;
$this->users = new ArrayCollection();
$this->urls = new ArrayCollection();
$this->tools = new ArrayCollection();
@ -429,6 +438,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
$this->courseLanguage = 'en';
$this->subscribe = true;
$this->unsubscribe = false;
$this->sticky = false;
//$this->specificFieldValues = new ArrayCollection();
//$this->sharedSurveys = new ArrayCollection();
}
@ -1321,6 +1331,30 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
return $this;
}
public function getVideoUrl(): string
{
return $this->videoUrl;
}
public function setVideoUrl(string $videoUrl): self
{
$this->videoUrl = $videoUrl;
return $this;
}
public function isSticky(): bool
{
return $this->sticky;
}
public function setSticky(bool $sticky): self
{
$this->sticky = $sticky;
return $this;
}
public function getDefaultIllustration(int $size): string
{
return '/img/session_default.svg';

@ -24,10 +24,20 @@ class Version20191101132000 extends AbstractMigrationChamilo
public function up(Schema $schema): void
{
$table = $schema->getTable('course');
if (!$table->hasColumn('introduction')) {
$this->addSql('ALTER TABLE course ADD introduction LONGTEXT DEFAULT NULL');
}
if (!$table->hasColumn('video_url')) {
$this->addSql('ALTER TABLE course ADD video_url VARCHAR(255) NOT NULL');
$this->addSql('UPDATE course SET video_url = ""');
}
if (!$table->hasColumn('sticky')) {
$this->addSql('ALTER TABLE course ADD sticky TINYINT(1) NOT NULL');
}
if (!$table->hasColumn('resource_node_id')) {
$this->addSql('ALTER TABLE course ADD COLUMN resource_node_id BIGINT DEFAULT NULL;');
$this->addSql(

@ -9,6 +9,7 @@ namespace Chamilo\CoreBundle\Migrations\Schema\V200;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\AccessUrlRelCourse;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\ResourceLink;
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
@ -29,9 +30,7 @@ final class Version20201212195011 extends AbstractMigrationChamilo
public function up(Schema $schema): void
{
$container = $this->getContainer();
$doctrine = $container->get('doctrine');
$em = $doctrine->getManager();
/** @var Connection $connection */
$em = $this->getEntityManager();
$connection = $em->getConnection();
$courseRepo = $container->get(CourseRepository::class);
@ -78,12 +77,36 @@ final class Version20201212195011 extends AbstractMigrationChamilo
$em->flush();
$em->clear();
// Special course.
$extraFieldType = ExtraField::COURSE_FIELD_TYPE;
$sql = "SELECT id FROM extra_field
WHERE extra_field_type = $extraFieldType AND variable = 'special_course'";
$result = $connection->executeQuery($sql);
$extraFieldId = $result->fetchOne();
$specialCourses = '';
if (!empty($extraFieldId)) {
$sql = 'SELECT DISTINCT(item_id)
FROM extra_field_values
WHERE field_id = '.$extraFieldId." AND value = '1'";
$result = $connection->executeQuery($sql);
$specialCourses = $result->fetchAllAssociative();
if (!empty($specialCourses)) {
$specialCourses = array_column($specialCourses, 'item_id');
}
}
// Migrating c_tool.
$q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
/** @var Course $course */
foreach ($q->toIterable() as $course) {
$counter = 1;
$courseId = $course->getId();
if (!empty($specialCourses) && in_array($courseId, $specialCourses)) {
$this->addSql("UPDATE course SET sticky = 1 WHERE id = $courseId ");
}
$sql = "SELECT * FROM c_tool
WHERE c_id = {$courseId} ";
$result = $connection->executeQuery($sql);

@ -29,6 +29,8 @@ class CourseRepositoryTest extends AbstractApiTest
$course = (new Course())
->setTitle('test')
->setCode('test')
->setVisualCode('test')
->addAccessUrl($this->getAccessUrl())
;
$courseRepo->create($course);
@ -46,6 +48,8 @@ class CourseRepositoryTest extends AbstractApiTest
$em->persist($category);
$em->flush();
$this->assertIsArray(Course::getStatusList());
$course = (new Course())
->setTitle('test julio')
->setCreator($this->getUser('admin'))
@ -53,6 +57,19 @@ class CourseRepositoryTest extends AbstractApiTest
->setCourseLanguage('en')
->setDescription('desc')
->setShowScore(0)
->setDiskQuota(0)
->setLastVisit(new \DateTime())
->setCreationDate(new \DateTime())
->setExpirationDate(new \DateTime())
->setSubscribe(true)
->setUnsubscribe(false)
->setVideoUrl('https://example.com/video.mp4')
->setSticky(false)
->setRegistrationCode('123')
->setLegal('123')
->setActivateLegal(123)
->setCourseTypeId(1)
->setIntroduction('intro')
->addCategory($category)
;
$courseRepo->create($course);

Loading…
Cancel
Save