Browse Source

Set post_parent_id field in c_forum_post to null instead of 0

Angel Fernando Quiroz Campos 8 years ago
parent
commit
71b6ee6e61
2 changed files with 48 additions and 39 deletions
  1. 32 28
      main/forum/forumfunction.inc.php
  2. 16 11
      main/webservices/cm_webservice_forum.php

+ 32 - 28
main/forum/forumfunction.inc.php

@@ -891,32 +891,36 @@ function deleteForumCategoryThread($content, $id)
  */
 function delete_post($post_id)
 {
-    $table_posts = Database :: get_course_table(TABLE_FORUM_POST);
     $table_threads = Database :: get_course_table(TABLE_FORUM_THREAD);
     $post_id = intval($post_id);
     $course_id = api_get_course_int_id();
+    $em = Database::getManager();
 
-    // Get parent_post_id of deleted post.
-    $tab_post_info = get_post_information($post_id);
+    $post = $em
+        ->getRepository('ChamiloCourseBundle:CForumPost')
+        ->findOneBy(['cId' => $course_id, 'postId' => $post_id]);
 
-    if ($tab_post_info) {
-        $post_parent_id_of_deleted_post = intval($tab_post_info['post_parent_id']);
-        $thread_id_of_deleted_post = $tab_post_info['thread_id'];
-        $forum_if_of_deleted_post = $tab_post_info['forum_id'];
-        $sql = "UPDATE $table_posts
-                SET post_parent_id=$post_parent_id_of_deleted_post
+    if ($post) {
+        $em
+            ->createQuery('
+                UPDATE ChamiloCourseBundle:CForumPost p
+                SET p.postParentId = :parent_of_deleted_post
                 WHERE
-                    c_id = $course_id AND
-                    post_parent_id=$post_id AND
-                    thread_id=$thread_id_of_deleted_post AND
-                    forum_id=$forum_if_of_deleted_post";
-
-        Database::query($sql);
-
-        // Note: This has to be a recursive function that deletes all of the posts in this block.
-        $sql = "DELETE FROM $table_posts
-                WHERE c_id = $course_id AND post_id = ".intval($post_id)."";
-        Database::query($sql);
+                    p.cId = :course AND
+                    p.postParentId = :post AND
+                    p.threadId = :thread_of_deleted_post AND
+                    p.forumId = :forum_of_deleted_post
+            ')
+            ->execute([
+                'parent_of_deleted_post' => $post->getPostParentId(),
+                'course' => $course_id,
+                'post' => $post->getPostId(),
+                'thread_of_deleted_post' => $post->getThreadId(),
+                'forum_of_deleted_post' => $post->getForumId()
+            ]);
+
+        $em->remove($post);
+        $em->flush();
 
         // Delete attachment file about this post id.
         delete_attachment($post_id);
@@ -1884,7 +1888,7 @@ function getThreadInfo($threadId, $cId)
  *
  * @return array containing all the information about the posts of a given thread
  */
-function getPosts($forumInfo, $threadId, $orderDirection = 'ASC', $recursive = false, $postId = 0, $depth = -1)
+function getPosts($forumInfo, $threadId, $orderDirection = 'ASC', $recursive = false, $postId = null, $depth = -1)
 {
     $list = [];
 
@@ -2526,7 +2530,7 @@ function store_thread($current_forum, $values, $courseInfo = array(), $showMessa
             'poster_name' => isset($values['poster_name']) ? $values['poster_name'] : '',
             'post_date' => $post_date,
             'post_notification' => isset($values['post_notification']) ? (int) $values['post_notification'] : 0,
-            'post_parent_id' => 0,
+            'post_parent_id' => null,
             'visible' => $visible,
             'post_id' => 0
         ];
@@ -3415,7 +3419,7 @@ function show_edit_post_form(
     $form->addElement('hidden', 'thread_id', $current_thread['thread_id']);
     $form->addElement('hidden', 'id_attach', $id_attach);
 
-    if ($current_post['post_parent_id'] == 0) {
+    if (empty($current_post['post_parent_id'])) {
         $form->addElement('hidden', 'is_first_post_of_thread', '1');
     }
 
@@ -3531,7 +3535,7 @@ function show_edit_post_form(
 
     if ($forum_setting['allow_sticky'] &&
         api_is_allowed_to_edit(null, true) &&
-        $current_post['post_parent_id'] == 0
+        empty($current_post['post_parent_id'])
     ) {
         // The sticky checkbox only appears when it is the first post of a thread.
         $form->addElement('checkbox', 'thread_sticky', '', get_lang('StickyPost'));
@@ -4321,12 +4325,12 @@ function store_move_post($values)
         );
 
         // Moving the post to the newly created thread.
-        $sql = "UPDATE $table_posts SET thread_id='".intval($new_thread_id)."', post_parent_id='0'
+        $sql = "UPDATE $table_posts SET thread_id='".intval($new_thread_id)."', post_parent_id = NULL
                 WHERE c_id = $course_id AND post_id='".intval($values['post_id'])."'";
         Database::query($sql);
 
         // Resetting the parent_id of the thread to 0 for all those who had this moved post as parent.
-        $sql = "UPDATE $table_posts SET post_parent_id='0'
+        $sql = "UPDATE $table_posts SET post_parent_id = NULL
                 WHERE c_id = $course_id AND post_parent_id='".intval($values['post_id'])."'";
         Database::query($sql);
 
@@ -4385,12 +4389,12 @@ function store_move_post($values)
         Database::query($sql);
 
         // moving to the chosen thread
-        $sql = "UPDATE $table_posts SET thread_id='".intval($_POST['thread'])."', post_parent_id='0'
+        $sql = "UPDATE $table_posts SET thread_id='".intval($_POST['thread'])."', post_parent_id = NULL
                 WHERE c_id = $course_id AND post_id='".intval($values['post_id'])."'";
         Database::query($sql);
 
         // resetting the parent_id of the thread to 0 for all those who had this moved post as parent
-        $sql = "UPDATE $table_posts SET post_parent_id='0'
+        $sql = "UPDATE $table_posts SET post_parent_id = NULL
                 WHERE c_id = $course_id AND post_parent_id='".intval($values['post_id'])."'";
         Database::query($sql);
 

+ 16 - 11
main/webservices/cm_webservice_forum.php

@@ -234,6 +234,7 @@ class WSCMForum extends WSCM
     {
         if($this->verifyUserPass($username, $password) == "valid")
         {
+            $em = Database::getManager();
             $course_db = CourseManager::get_course_information($course_code);
 
             $user_id = UserManager::get_user_id_from_username($username);
@@ -251,19 +252,23 @@ class WSCMForum extends WSCM
             $title = htmlentities($title);
             $content = htmlentities($content);
 
-            $sql="INSERT INTO $table_posts (post_title, post_text, thread_id, forum_id, poster_id, post_date, post_notification, post_parent_id, visible)
-                            VALUES ('".Database::escape_string($title)."',
-                                            '".Database::escape_string(isset($content) ? (api_html_entity_decode($content)) : null)."',
-                                            '".Database::escape_string($thread_id)."',
-                                            '".Database::escape_string($forum_id)."',
-                                            '".Database::escape_string($user_id)."',
-                                            '".Database::escape_string($post_date)."',
-                                            '".Database::escape_string(isset($post_notification)?$post_notification:null)."',
-                                            '".Database::escape_string(isset($my_post)?$my_post:null)."',
-                                            '".Database::escape_string($visible)."')";
+            $postDate = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
 
+            $post = new \Chamilo\CourseBundle\Entity\CForumPost();
+            $post
+                ->setPostTitle($title)
+                ->setPostText(isset($content) ? (api_html_entity_decode($content)) : null)
+                ->setThreadId($thread_id)
+                ->setForumId($forum_id)
+                ->setPosterId($user_id)
+                ->setPostDate($postDate)
+                ->setPostNotification(isset($post_notification) ? $post_notification : null)
+                ->setPostParentId(isset($my_post) ? $my_post : null)
+                ->setVisible($visible);
+
+            $em->persist($post);
+            $em->flush();
 
-            $result=Database::query($sql);
             return "Post enviado!";
 //return $sql;