Fix create course with content

pull/3124/head
Julio Montoya 6 years ago
parent 006e9635e9
commit e0bea15586
  1. 10
      public/main/exercise/question.class.php
  2. 19
      public/main/forum/forumfunction.inc.php
  3. 8
      public/main/inc/lib/add_course.lib.inc.php
  4. 286
      public/main/inc/lib/link.lib.php
  5. 6
      public/main/link/link.php
  6. 1
      src/CourseBundle/Entity/CForumForum.php

@ -530,6 +530,8 @@ abstract class Question
$id = $this->id;
$type = $this->type;
$c_id = $this->course['real_id'];
$courseEntity = api_get_course_entity($c_id);
$categoryId = $this->category;
$questionRepo = Container::getQuestionRepository();
@ -605,11 +607,15 @@ abstract class Question
$this->id
);
$exerciseEntity = $exerciseRepo->find($exerciseId);
$node = $questionRepo->addResourceNode($question, api_get_user_entity(api_get_user_id()), $exerciseEntity);
$node = $questionRepo->addResourceNode(
$question,
api_get_user_entity(api_get_user_id()),
$exerciseEntity
);
$questionRepo->addResourceNodeToCourse(
$node,
ResourceLink::VISIBILITY_PUBLISHED,
api_get_course_entity(),
$courseEntity,
api_get_session_entity(),
api_get_group_entity()
);

@ -2,14 +2,12 @@
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Resource\ResourceLink;
use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CourseBundle\Entity\CForumCategory;
use Chamilo\CourseBundle\Entity\CForumForum;
use Chamilo\CourseBundle\Entity\CForumPost;
use Chamilo\CourseBundle\Entity\CForumThread;
use Chamilo\UserBundle\Entity\User;
use ChamiloSession as Session;
use Doctrine\Common\Collections\Criteria;
@ -824,7 +822,7 @@ function store_forum($values, $courseInfo = [], $returnId = false)
->setAllowNewThreads($values['allow_new_threads_group']['allow_new_threads'] ?? null)
->setDefaultView($values['default_view_type_group']['default_view_type'] ?? null)
->setForumOfGroup($values['group_forum'] ?? null)
->setForumGroupPublicPrivate($values['public_private_group_forum_group']['public_private_group_forum'] ?? null)
->setForumGroupPublicPrivate($values['public_private_group_forum_group']['public_private_group_forum'] ?? '')
->setModerated($values['moderated']['moderated'] ?? null)
->setStartTime(!empty($values['start_time']) ? api_get_utc_datetime($values['start_time']) : null)
->setEndTime(!empty($values['end_time']) ? api_get_utc_datetime($values['end_time']) : null)
@ -2728,8 +2726,6 @@ function updateThread($values)
* This function stores a new thread. This is done through an entry in the forum_thread table AND
* in the forum_post table because. The threads are also stored in the item_property table. (forum posts are not (yet)).
*
* @param array $values
* @param array $courseInfo
* @param bool $showMessage
* @param int $userId Optional. The user ID
* @param int $sessionId
@ -2742,8 +2738,8 @@ function updateThread($values)
*/
function store_thread(
CForumForum $forum,
$values,
$courseInfo = [],
array $values,
array $courseInfo = [],
$showMessage = true,
$userId = 0,
$sessionId = 0
@ -4544,8 +4540,9 @@ function get_unaproved_messages($forum_id)
*/
function send_notification_mails(CForumForum $forum, CForumThread $thread, $reply_info)
{
$_course = api_get_course_info();
$courseEntity = $_course['entity'];
$courseEntity = api_get_course_entity($forum->getCId());
$courseId = $courseEntity->getId();
$sessionId = api_get_session_id();
$sessionEntity = api_get_session_entity($sessionId);
@ -4580,7 +4577,7 @@ function send_notification_mails(CForumForum $forum, CForumThread $thread, $repl
if ($forum) {
$sql = "SELECT * FROM $table_notification
WHERE
c_id = ".api_get_course_int_id()." AND
c_id = ".$courseId." AND
(
forum_id = '".$forum->getIid()."' OR
thread_id = '".$thread->getIid()."'
@ -4589,7 +4586,7 @@ function send_notification_mails(CForumForum $forum, CForumThread $thread, $repl
$user_id = api_get_user_id();
while ($row = Database::fetch_array($result)) {
$sql = "INSERT INTO $table (c_id, thread_id, post_id, user_id)
VALUES (".api_get_course_int_id().", '".$thread->getIid()."', '".(int) ($reply_info['new_post_id'])."', '$user_id' )";
VALUES (".$courseId.", '".$thread->getIid()."', '".(int) ($reply_info['new_post_id'])."', '$user_id' )";
Database::query($sql);
}
}

@ -210,7 +210,7 @@ class AddCourse
public static function get_course_tables()
{
$tables = [];
$tables[] = 'item_property';
//$tables[] = 'item_property';
$tables[] = 'tool';
$tables[] = 'tool_intro';
$tables[] = 'group_info';
@ -669,8 +669,8 @@ class AddCourse
];
$forumId = store_forum($params, $courseInfo, true);
$forumInfo = get_forum_information($forumId, $courseInfo['real_id']);
$repo = Container::getForumRepository();
$forumEntity = $repo->find($forumId);
$params = [
'post_title' => get_lang('Example Thread'),
@ -683,7 +683,7 @@ class AddCourse
'thread_peer_qualify' => 0,
];
store_thread($forumInfo, $params, $courseInfo, false);
store_thread($forumEntity, $params, $courseInfo, false);
/* Gradebook tool */
$course_code = $courseInfo['code'];

@ -78,172 +78,22 @@ class Link extends Model
public function save($params, $show_query = null)
{
$course_info = $this->getCourse();
$courseId = $course_info['real_id'];
$params['session_id'] = api_get_session_id();
$params['category_id'] = isset($params['category_id']) ? $params['category_id'] : 0;
$sql = "SELECT MAX(display_order)
FROM ".$this->table."
WHERE
c_id = $courseId AND
category_id = '".intval($params['category_id'])."'";
$result = Database:: query($sql);
list($orderMax) = Database:: fetch_row($result);
$order = $orderMax + 1;
$params['display_order'] = $order;
$id = parent::save($params, $show_query);
if (!empty($id)) {
// iid
$sql = "UPDATE ".$this->table." SET id = iid WHERE iid = $id";
Database::query($sql);
api_item_property_update(
$course_info,
TOOL_LINK,
$id,
'LinkAdded',
api_get_user_id()
);
api_set_default_visibility($id, TOOL_LINK);
}
return $id;
}
/**
* Update a link in the database.
*
* @param int $linkId The ID of the link to update
* @param string $linkUrl The new URL to be saved
* @param int $courseId
* @param int $sessionId
*
* @return bool
*/
public function updateLink(
$linkId,
$linkUrl,
$courseId = null,
$sessionId = null
) {
$tblLink = Database::get_course_table(TABLE_LINK);
$linkUrl = Database::escape_string($linkUrl);
$linkId = intval($linkId);
if (is_null($courseId)) {
$courseId = api_get_course_int_id();
}
$courseId = intval($courseId);
if (is_null($sessionId)) {
$sessionId = api_get_session_id();
}
$sessionId = intval($sessionId);
if ($linkUrl != '') {
$sql = "UPDATE $tblLink SET
url = '$linkUrl'
WHERE id = $linkId AND c_id = $courseId AND session_id = $sessionId";
$resLink = Database::query($sql);
return $resLink;
}
return false;
}
public static function addCategory()
{
$_course = api_get_course_info();
$course_id = $_course['real_id'];
$tbl_categories = Database::get_course_table(TABLE_LINK_CATEGORY);
$category_title = trim($_POST['category_title']);
$description = trim($_POST['description']);
if (empty($category_title)) {
echo Display::return_message(get_lang('Please give the category name'), 'error');
return false;
}
// Looking for the largest order number for this category.
$result = Database:: query(
"SELECT MAX(display_order) FROM $tbl_categories
WHERE c_id = $course_id "
);
list($orderMax) = Database:: fetch_row($result);
$order = $orderMax + 1;
$order = (int) $order;
$course_id = $course_info['real_id'];
$session_id = api_get_session_id();
$repo = Container::getLinkCategoryRepository();
$courseEntity = api_get_course_entity($course_id);
$sessionEntity = api_get_session_entity($session_id);
$category = new CLinkCategory();
$category
->setSessionId($session_id)
->setCId($course_id)
->setCategoryTitle($category_title)
->setDescription($description)
->setDisplayOrder($order)
;
$repo->addResourceToCourse(
$category,
ResourceLink::VISIBILITY_PUBLISHED,
api_get_user_entity(api_get_user_id()),
$courseEntity,
$sessionEntity,
api_get_group_entity()
);
$repo->getEntityManager()->flush();
$linkId = $category->getIid();
if ($linkId) {
// iid
$sql = "UPDATE $tbl_categories SET id = iid WHERE iid = $linkId";
Database:: query($sql);
// add link_category visibility
// course ID is taken from context in api_set_default_visibility
//api_set_default_visibility($linkId, TOOL_LINK_CATEGORY);
/*api_item_property_update(
$_course,
TOOL_LINK_CATEGORY,
$linkId,
'LinkCategoryAdded',
api_get_user_id()
);
api_set_default_visibility($linkId, TOOL_LINK_CATEGORY);*/
}
Display::addFlash(Display::return_message(get_lang('Category added')));
return $linkId;
}
public static function addLink()
{
$_course = api_get_course_info();
$course_id = $_course['real_id'];
$session_id = api_get_session_id();
$title = Security::remove_XSS(stripslashes($_POST['title']));
$urllink = Security::remove_XSS($_POST['url']);
$description = Security::remove_XSS($_POST['description']);
$categoryId = (int) $_POST['category_id'];
$title = stripslashes($params['title']);
$urllink = $params['url'];
$description = $params['description'];
$categoryId = (int) $params['category_id'];
$onhomepage = 0;
if (isset($_POST['on_homepage'])) {
$onhomepage = Security::remove_XSS($_POST['on_homepage']);
if (isset($params['on_homepage'])) {
$onhomepage = Security::remove_XSS($params['on_homepage']);
}
$target = '_self'; // Default target.
if (!empty($_POST['target'])) {
$target = Security::remove_XSS($_POST['target']);
if (!empty($params['target'])) {
$target = Security::remove_XSS($params['target']);
}
$urllink = trim($urllink);
@ -389,8 +239,8 @@ class Link extends Model
}
$di = new ChamiloIndexer();
isset($_POST['language']) ? $lang = Database:: escape_string(
$_POST['language']
isset($params['language']) ? $lang = Database:: escape_string(
$params['language']
) : $lang = 'english';
$di->connectDb(null, null, $lang);
$di->addChunk($ic_slide);
@ -420,8 +270,119 @@ class Link extends Model
return $link_id;
}
}
/**
* Update a link in the database.
*
* @param int $linkId The ID of the link to update
* @param string $linkUrl The new URL to be saved
* @param int $courseId
* @param int $sessionId
*
* @return bool
*/
public function updateLink(
$linkId,
$linkUrl,
$courseId = null,
$sessionId = null
) {
$tblLink = Database::get_course_table(TABLE_LINK);
$linkUrl = Database::escape_string($linkUrl);
$linkId = intval($linkId);
if (is_null($courseId)) {
$courseId = api_get_course_int_id();
}
$courseId = intval($courseId);
if (is_null($sessionId)) {
$sessionId = api_get_session_id();
}
$sessionId = intval($sessionId);
if ($linkUrl != '') {
$sql = "UPDATE $tblLink SET
url = '$linkUrl'
WHERE id = $linkId AND c_id = $courseId AND session_id = $sessionId";
$resLink = Database::query($sql);
return $resLink;
}
return false;
}
public static function addCategory()
{
$_course = api_get_course_info();
$course_id = $_course['real_id'];
$tbl_categories = Database::get_course_table(TABLE_LINK_CATEGORY);
$category_title = trim($_POST['category_title']);
$description = trim($_POST['description']);
if (empty($category_title)) {
echo Display::return_message(get_lang('Please give the category name'), 'error');
return false;
}
// Looking for the largest order number for this category.
$result = Database:: query(
"SELECT MAX(display_order) FROM $tbl_categories
WHERE c_id = $course_id "
);
list($orderMax) = Database:: fetch_row($result);
$order = $orderMax + 1;
$order = (int) $order;
$session_id = api_get_session_id();
$repo = Container::getLinkCategoryRepository();
$courseEntity = api_get_course_entity($course_id);
$sessionEntity = api_get_session_entity($session_id);
$category = new CLinkCategory();
$category
->setSessionId($session_id)
->setCId($course_id)
->setCategoryTitle($category_title)
->setDescription($description)
->setDisplayOrder($order)
;
$repo->addResourceToCourse(
$category,
ResourceLink::VISIBILITY_PUBLISHED,
api_get_user_entity(api_get_user_id()),
$courseEntity,
$sessionEntity,
api_get_group_entity()
);
$repo->getEntityManager()->flush();
$linkId = $category->getIid();
if ($linkId) {
// iid
$sql = "UPDATE $tbl_categories SET id = iid WHERE iid = $linkId";
Database:: query($sql);
// add link_category visibility
// course ID is taken from context in api_set_default_visibility
//api_set_default_visibility($linkId, TOOL_LINK_CATEGORY);
/*api_item_property_update(
$_course,
TOOL_LINK_CATEGORY,
$linkId,
'LinkCategoryAdded',
api_get_user_id()
);
api_set_default_visibility($linkId, TOOL_LINK_CATEGORY);*/
}
Display::addFlash(Display::return_message(get_lang('Category added')));
return $linkId;
}
public static function deleteCategory($id)
{
$repo = Container::getLinkCategoryRepository();
@ -550,13 +511,14 @@ class Link extends Model
{
$tbl_link = Database::get_course_table(TABLE_LINK);
$course_id = api_get_course_int_id();
$id = (int) $id;
if (empty($id) || empty($course_id)) {
return [];
}
$sql = "SELECT * FROM $tbl_link
WHERE c_id = $course_id AND id='".intval($id)."' ";
WHERE c_id = $course_id AND iid= $id ";
$result = Database::query($sql);
$data = [];
if (Database::num_rows($result)) {

@ -46,6 +46,7 @@ $action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : '';
$nameTools = get_lang('Links');
$course_id = api_get_course_int_id();
$session_id = api_get_session_id();
$courseInfo = api_get_course_info();
if ('addlink' === $action) {
$nameTools = '';
@ -102,8 +103,9 @@ switch ($action) {
case 'addlink':
$form = Link::getLinkForm(null, 'addlink', $token);
if ($form->validate() && Security::check_token('get')) {
// Here we add a link
$linkId = Link::addLink();
$link = new Link();
$link->setCourse($courseInfo);
$linkId = $link->save($form->exportValues());
Skill::saveSkills($form, ITEM_TYPE_LINK, $linkId);
Security::clear_token();

@ -216,6 +216,7 @@ class CForumForum extends AbstractResource implements ResourceInterface
$this->locked = 0;
$this->forumImage = '';
$this->forumOfGroup = 0;
$this->forumGroupPublicPrivate = '';
}
public function __toString(): string

Loading…
Cancel
Save