Add row actions (edit/delete) add mass actions using resources.

pull/3064/head
Julio Montoya 5 years ago
parent 436182ac64
commit 897af24d88
  1. 79
      main/exercise/TestCategory.php
  2. 8
      main/exercise/category.php
  3. 16
      main/exercise/tests_category.php
  4. 31
      main/inc/lib/ExerciseCategoryManager.php

@ -1,6 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
use APY\DataGridBundle\Grid\Action\MassAction;
use APY\DataGridBundle\Grid\Action\RowAction;
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CourseBundle\Entity\CQuizQuestionCategory;
@ -138,7 +140,6 @@ class TestCategory
$category = $this->getCategory($id, $course_id);
if ($category) {
// remove link between question and category
$sql = "DELETE FROM $tbl_question_rel_cat
WHERE category_id = $id AND c_id=".$course_id;
@ -204,41 +205,13 @@ class TestCategory
$repo->getEntityManager()->persist($category);
$repo->getEntityManager()->flush();
// item_property update
/*api_item_property_update(
$courseInfo,
TOOL_TEST_CATEGORY,
$this->id,
'TestCategoryModified',
api_get_user_id()
);*/
return true;
}
return false;
}
/**
* Gets the number of question of category id=in_id.
*
* @param int $id
*
* @return int
*/
public function getCategoryQuestionsNumber($id): int
{
$table = Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY);
$id = (int) $id;
$sql = "SELECT count(*) AS nb
FROM $table
WHERE category_id = $id AND c_id=".api_get_course_int_id();
$res = Database::query($sql);
$row = Database::fetch_array($res);
return (int) $row['nb'];
}
/**
* Return the TestCategory id for question with question_id = $questionId
* In this version, a question has only 1 TestCategory.
@ -1200,7 +1173,33 @@ class TestCategory
// 7. Add actions
if (Container::getAuthorizationChecker()->isGranted(\Chamilo\CoreBundle\Security\Authorization\Voter\ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER)) {
$deleteMassAction = new \APY\DataGridBundle\Grid\Action\MassAction(
// Add row actions
$myRowAction = new RowAction(
get_lang('Edit'),
'legacy_main',
false,
'_self',
['class' => 'btn btn-secondary']
);
$myRowAction->setRouteParameters(
['id', 'name' => 'exercise/tests_category.php', 'cidReq' => api_get_course_id(), 'action' => 'editcategory']
);
$grid->addRowAction($myRowAction);
$myRowAction = new RowAction(
get_lang('Delete'),
'legacy_main',
true,
'_self',
['class' => 'btn btn-danger', 'form_delete' => true]
);
$myRowAction->setRouteParameters(
['id', 'name' => 'exercise/tests_category.php', 'cidReq' => api_get_course_id(), 'action' => 'deletecategory']
);
$grid->addRowAction($myRowAction);
// Add mass actions
$deleteMassAction = new MassAction(
'Delete',
['TestCategory', 'deleteResource'],
true,
@ -1222,22 +1221,4 @@ class TestCategory
return $html;
}
/**
* To allowed " in javascript dialog box without bad surprises
* replace " with two '.
*
* @param string $text
*
* @return mixed
*/
public function protectJSDialogQuote($text)
{
$res = $text;
$res = str_replace("'", "\'", $res);
// super astuce pour afficher les " dans les boite de dialogue
$res = str_replace('"', "\'\'", $res);
return $res;
}
}

@ -79,6 +79,14 @@ switch ($action) {
$content .= $form->returnForm();
}
break;
case 'delete':
$res = $obj->delete($_GET['id']);
if ($res) {
Display::addFlash(Display::return_message(get_lang('Item deleted'), 'confirmation'));
}
header('Location: '.$url);
exit;
break;
default:
$content = $obj->display();
break;

@ -116,19 +116,19 @@ function importCategoryForm()
function edit_category_form($action)
{
$action = Security::remove_XSS($action);
if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
$category_id = intval($_GET['category_id']);
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$category_id = intval($_GET['id']);
$objcat = new TestCategory();
$objcat = $objcat->getCategory($category_id);
$form = new FormValidator(
'note',
'post',
api_get_self().'?action='.$action.'&category_id='.$category_id.'&'.api_get_cidreq()
api_get_self().'?action='.$action.'&id='.$category_id.'&'.api_get_cidreq()
);
// Setting the form elements
$form->addElement('header', get_lang('Edit this category'));
$form->addElement('hidden', 'category_id');
$form->addElement('hidden', 'id');
$form->addElement('text', 'category_name', get_lang('Category name'), ['size' => '95']);
$form->addHtmlEditor(
'category_description',
@ -141,7 +141,7 @@ function edit_category_form($action)
// setting the defaults
$defaults = [];
$defaults['category_id'] = $objcat->id;
$defaults['id'] = $objcat->id;
$defaults['category_name'] = $objcat->name;
$defaults['category_description'] = $objcat->description;
$form->setDefaults($defaults);
@ -155,7 +155,7 @@ function edit_category_form($action)
if ($check) {
$values = $form->exportValues();
$category = new TestCategory();
$category = $category->getCategory($values['category_id']);
$category = $category->getCategory($values['id']);
if ($category) {
$category->name = $values['category_name'];
@ -184,9 +184,9 @@ function edit_category_form($action)
// process to delete a category
function delete_category_form()
{
if (isset($_GET['category_id']) && is_numeric($_GET['category_id'])) {
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$category = new TestCategory();
if ($category->removeCategory($_GET['category_id'])) {
if ($category->removeCategory($_GET['id'])) {
Display::addFlash(Display::return_message(get_lang('Category deleted')));
} else {
Display::addFlash(Display::return_message(get_lang('Error: could not delete category'), 'error'));

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */
use APY\DataGridBundle\Grid\Action\MassAction;
use APY\DataGridBundle\Grid\Action\RowAction;
use APY\DataGridBundle\Grid\Source\Entity;
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
use Chamilo\CoreBundle\Framework\Container;
@ -79,6 +80,8 @@ class ExerciseCategoryManager extends Model
$repo = Container::getExerciseCategoryRepository();
$category = $repo->find($id);
$repo->hardDelete($category);
return true;
}
/**
@ -335,11 +338,35 @@ JAVASCRIPT;
'title' => 'description',
]
);
$grid = $grid->getGrid();
// 7. Add actions
if (Container::getAuthorizationChecker()->isGranted(ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER)) {
// Add row actions
$myRowAction = new RowAction(
get_lang('Edit'),
'legacy_main',
false,
'_self',
['class' => 'btn btn-secondary']
);
$myRowAction->setRouteParameters(
['id', 'name' => 'exercise/category.php', 'cidReq' => api_get_course_id(), 'action' => 'edit']
);
$grid->addRowAction($myRowAction);
$myRowAction = new RowAction(
get_lang('Delete'),
'legacy_main',
true,
'_self',
['class' => 'btn btn-danger', 'form_delete' => true]
);
$myRowAction->setRouteParameters(
['id', 'name' => 'exercise/category.php', 'cidReq' => api_get_course_id(), 'action' => 'delete']
);
$grid->addRowAction($myRowAction);
// Add mass actions
$deleteMassAction = new MassAction(
'Delete',
['ExerciseCategoryManager', 'deleteResource'],

Loading…
Cancel
Save