Choose course category by ajax when they are more than 100

pull/2487/head
Angel Fernando Quiroz Campos 9 years ago
parent cd5e1c3e78
commit 5e2c2c20d7
  1. 50
      main/admin/course_add.php
  2. 56
      main/admin/course_edit.php
  3. 45
      main/create_course/add_course.php
  4. 5
      main/inc/lib/course_category.lib.php
  5. 12
      src/Chamilo/CoreBundle/Entity/CourseCategory.php
  6. 62
      src/Chamilo/CoreBundle/Entity/Repository/CourseCategoryRepository.php

@ -4,6 +4,10 @@
/**
* @package chamilo.admin
*/
use Chamilo\CoreBundle\Entity\Repository\CourseCategoryRepository;
use Chamilo\CoreBundle\Entity\CourseCategory;
$cidReset = true;
require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_PLATFORM_ADMIN;
@ -14,8 +18,11 @@ $tool_name = get_lang('AddCourse');
$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array('url' => 'course_list.php', 'name' => get_lang('CourseList'));
$em = Database::getManager();
/** @var CourseCategoryRepository $courseCategoriesRepo */
$courseCategoriesRepo = $em->getRepository('ChamiloCoreBundle:CourseCategory');
// Get all possible teachers.
$accessUrlId = api_get_current_access_url_id();
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname';
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$sql = "SELECT user_id,lastname,firstname
@ -28,7 +35,7 @@ if (api_is_multiple_url_enabled()) {
FROM $table_user as u
INNER JOIN $access_url_rel_user_table url_rel_user
ON (u.user_id=url_rel_user.user_id)
WHERE url_rel_user.access_url_id=".api_get_current_access_url_id()." AND status=1".$order_clause;
WHERE url_rel_user.access_url_id=".$accessUrlId." AND status=1".$order_clause;
}
$res = Database::query($sql);
@ -85,19 +92,34 @@ $form->addElement(
);
$form->applyFilter('course_teachers', 'html_filter');
// Category code
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$countCategories = $courseCategoriesRepo->countAllInAccessUrl($accessUrlId);
$form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
array(
'url' => $url
// 'formatResult' => 'function(item) { return item.name + "'" +item.code; }'
)
);
if ($countCategories >= 100) {
// Category code
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
['url' => $url]
);
} else {
$categories = $courseCategoriesRepo->findAllInAccessUrl($accessUrlId);
$categoriesOptions = [null => get_lang('None')];
/** @var CourseCategory $category */
foreach ($categories as $category) {
$categoriesOptions[$category->getCode()] = $category->__toString();
}
$form->addSelect(
'category_code',
get_lang('CourseFaculty'),
$categoriesOptions
);
}
// Course department
$form->addText(

@ -3,6 +3,10 @@
/**
* @package chamilo.admin
*/
use Chamilo\CoreBundle\Entity\Repository\CourseCategoryRepository;
use Chamilo\CoreBundle\Entity\CourseCategory;
$cidReset = true;
require_once __DIR__.'/../inc/global.inc.php';
@ -12,6 +16,11 @@ api_protect_admin_script();
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$em = Database::getManager();
/** @var CourseCategoryRepository $courseCategoriesRepo */
$courseCategoriesRepo = $em->getRepository('ChamiloCoreBundle:CourseCategory');
// Get all possible teachers.
$urlId = api_get_current_access_url_id();
$courseId = isset($_GET['id']) ? $_GET['id'] : null;
@ -58,7 +67,7 @@ if (api_is_multiple_url_enabled()) {
INNER JOIN $access_url_rel_user_table url_rel_user
ON (u.user_id=url_rel_user.user_id)
WHERE
url_rel_user.access_url_id=".api_get_current_access_url_id()." AND
url_rel_user.access_url_id = $urlId AND
status = 1" . $order_clause;
} else {
$sql = "SELECT user_id, lastname, firstname
@ -173,20 +182,39 @@ if (!empty($coursesInSession)) {
}
}
// Category code
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$countCategories = $courseCategoriesRepo->countAllInAccessUrl($urlId);
$categorySelect = $form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
array('url' => $url)
);
if ($countCategories >= 100) {
// Category code
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$categorySelect = $form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
['url' => $url]
);
if (!empty($courseInfo['categoryCode'])) {
$data = \CourseCategory::getCategory($courseInfo['categoryCode']);
$categorySelect->addOption($data['name'], $data['code']);
}
} else {
$courseInfo['category_code'] = $courseInfo['categoryCode'];
$categories = $courseCategoriesRepo->findAllInAccessUrl($urlId);
$categoriesOptions = [null => get_lang('None')];
/** @var CourseCategory $category */
foreach ($categories as $category) {
$categoriesOptions[$category->getCode()] = $category->__toString();
}
if (!empty($courseInfo['categoryCode'])) {
$data = CourseCategory::getCategory($courseInfo['categoryCode']);
$categorySelect->addOption($data['name'], $data['code']);
$form->addSelect(
'category_code',
get_lang('CourseFaculty'),
$categoriesOptions
);
}
$form->addText('department_name', get_lang('CourseDepartment'), false, array('size' => '60'));
@ -248,7 +276,7 @@ if ($form->validate()) {
$visibility = $course['visibility'];
global $_configuration;
$urlId = api_get_current_access_url_id();
if (isset($_configuration[$urlId]) &&
isset($_configuration[$urlId]['hosting_limit_active_courses']) &&
$_configuration[$urlId]['hosting_limit_active_courses'] > 0

@ -12,6 +12,9 @@
* @author Ivan Tcholakov <ivantcholakov@gmail.com>
*/
use Chamilo\CoreBundle\Entity\Repository\CourseCategoryRepository;
use Chamilo\CoreBundle\Entity\CourseCategory;
// Flag forcing the "current course" reset.
$cidReset = true;
@ -26,6 +29,12 @@ if (!api_is_allowed_to_create_course()) {
// Section for the tabs.
$this_section = SECTION_COURSES;
$em = Database::getManager();
/** @var CourseCategoryRepository $courseCategoriesRepo */
$courseCategoriesRepo = $em->getRepository('ChamiloCoreBundle:CourseCategory');
// Get all possible teachers.
$accessUrlId = api_get_current_access_url_id();
// "Course validation" feature. This value affects the way of a new course creation:
// true - the new course is requested only and it is created after approval;
// false - the new course is created immediately, after filling this form.
@ -80,16 +89,34 @@ $form->addElement(
'<div id="advanced_params_options" style="display:none">'
);
// Category category.
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$countCategories = $courseCategoriesRepo->countAllInAccessUrl($accessUrlId);
$form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
array('url' => $url)
);
if ($countCategories >= 100) {
// Category code
$url = api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_category';
$form->addElement(
'select_ajax',
'category_code',
get_lang('CourseFaculty'),
null,
['url' => $url]
);
} else {
$categories = $courseCategoriesRepo->findAllInAccessUrl($accessUrlId);
$categoriesOptions = [null => get_lang('None')];
/** @var CourseCategory $category */
foreach ($categories as $category) {
$categoriesOptions[$category->getCode()] = $category->__toString();
}
$form->addSelect(
'category_code',
get_lang('CourseFaculty'),
$categoriesOptions
);
}
// Course code
$form->addText(

@ -43,11 +43,10 @@ class CourseCategory
}
/**
* @param string $category
*
* @param string $category Optional. Parent category code
* @return array
*/
public static function getCategories($category)
public static function getCategories($category = null)
{
$tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY);
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);

@ -18,7 +18,7 @@ use Doctrine\ORM\Mapping as ORM;
* @ORM\Index(name="tree_pos", columns={"tree_pos"})
* }
* )
* @ORM\Entity
* @ORM\Entity(repositoryClass="Chamilo\CoreBundle\Entity\Repository\CourseCategoryRepository")
*/
class CourseCategory
{
@ -252,4 +252,14 @@ class CourseCategory
{
return $this->id;
}
/**
* @return string
*/
public function __toString()
{
$name = strip_tags($this->name);
return "({$this->code}) $name";
}
}

@ -0,0 +1,62 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
* Class CCourseCategoryRepository
* @package Chamilo\CoreBundle\Entity\Repository
*/
class CourseCategoryRepository extends EntityRepository
{
/**
* Get all course categories in an access url
* @param int $accessUrl
* @return array
*/
public function findAllInAccessUrl($accessUrl)
{
$qb = $this->createQueryBuilder('c');
$query = $qb
->innerJoin(
'ChamiloCoreBundle:AccessUrlRelCourseCategory',
'a',
Join::WITH,
'c = a.courseCategoryId'
)
->where(
$qb->expr()->eq('a.accessUrlId', $accessUrl)
)
->getQuery();
return $query->getResult();
}
/**
* Get the number of course categories in an access url
* @return int
*/
public function countAllInAccessUrl($accessUrl)
{
$qb = $this->createQueryBuilder('c');
$query = $qb
->select('COUNT(c)')
->innerJoin(
'ChamiloCoreBundle:AccessUrlRelCourseCategory',
'a',
Join::WITH,
'c = a.courseCategoryId'
)
->where(
$qb->expr()->eq('a.accessUrlId', $accessUrl)
)
->getQuery();
$count = $qb->getQuery()->getSingleScalarResult();
return (int) $count;
}
}
Loading…
Cancel
Save