Browse Source

Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x

Yannick Warnier 8 years ago
parent
commit
38e079bb40

+ 11 - 0
app/Resources/public/css/base.css

@@ -5820,6 +5820,17 @@ footer{
 .list-backups-options{
     list-style: none;
 }
+#invitations-acordion .list-group{
+    margin-bottom: 10px;
+}
+#invitations-acordion .list-group .list-group-item{
+    padding: 0;
+    border: none;
+    margin-top: 5px;
+}
+#invitations-acordion .list-group .list-group-item img{
+    margin-right: 5px;
+}
 /* CSS NEW TOP ******************************************************************************/
 /* CSS Responsive */
 @media (min-width: 1025px) and (max-width: 1200px) {

+ 41 - 41
main/admin/user_move_stats.php

@@ -74,6 +74,7 @@ if (isset($_REQUEST['load_ajax'])) {
             $origin_course_code     = $combination_result['course_code'];
             $origin_session_id      = intval($combination_result['session_id']);
             $new_session_id         = intval($_REQUEST['session_id']);
+            $session = $em->find('ChamiloCoreBundle:Session', $new_session_id);
 
             //if (!isset($_REQUEST['view_stat'])) {
             if ($origin_session_id == $new_session_id ) {
@@ -359,30 +360,28 @@ if (isset($_REQUEST['load_ajax'])) {
                                     $dir_name = substr($parent_data['url'], 1);
                                     $created_dir = create_unexisting_work_directory($base_work_dir, $dir_name);
                                     $created_dir = '/'.$created_dir;
-                                    $now = api_get_utc_datetime();
+                                    $now = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
                                     //Creating directory
-                                    $sql_add_publication = "INSERT INTO " . $TBL_STUDENT_PUBLICATION . " SET
-                                           url         = '".$created_dir."',
-	                                       c_id        = $course_id,
-	                                       title        = '".$parent_data['title']."',
-	                                       description  = '".$parent_data['description']." folder_moved_from_session_id_$origin_session_id ',
-	                                       author       = '',
-	                                       active       = '0',
-	                                       accepted     = '1',
-	                                       filetype     = 'folder',
-	                                       sent_date    = '".$now."',
-	                                       qualification    = '".$parent_data['qualification'] ."',
-	                                       parent_id    = '',
-	                                       qualificator_id  = '',
-	                                       date_of_qualification    = '',
-	                                       session_id   = ".$new_session_id;
-                                    $rest_insert     = Database::query($sql_add_publication);
-                                    if ($debug) echo ($sql_add_publication);
-                                    // add the directory
-                                    $id = Database::insert_id();
+                                    $publication = new \Chamilo\CourseBundle\Entity\CStudentPublication();
+                                    $publication
+                                            ->setUrl($created_dir)
+                                            ->setCId($course_id)
+                                            ->setTitle($parent_data['title'])
+                                            ->setDescription(
+                                                $parent_data['description'] . "folder_moved_from_session_id_$origin_session_id"
+                                            )
+                                            ->setActive(false)
+                                            ->setAccepted(true)
+                                            ->setFiletype('folder')
+                                            ->setSentDate($now)
+                                            ->setQualification($parent_data['qualification'])
+                                            ->setParentId(0)
+                                            ->setQualificatorId(0)
+                                            ->setSession($session);
+
+                                    $id = $publication->getIid();
                                     //Folder created
                                     api_item_property_update($course_info, 'work', $id, 'DirectoryCreated', api_get_user_id());
-                                    if ($debug) var_dump($rest_insert);
                                     $new_parent_id = $id;
                                     $result_message[$TBL_STUDENT_PUBLICATION.' - new folder created called: '.$created_dir]++;
                                 }
@@ -424,23 +423,25 @@ if (isset($_REQUEST['load_ajax'])) {
 
                             if ($update_database) {
                                 //Creating a new work
-                                $sql_add_publication = "INSERT INTO " . $TBL_STUDENT_PUBLICATION . " SET " .
-                                    "url         = '" . $new_url . "',
-                                               c_id        = $course_id,
-                                               title       = '" . $data['title']. "',
-                                               description = '" . $data['description'] . " file moved',
-                                               author      = '" . $data['author'] . "',
-                                               active       = '" . $data['active']. "',
-                                               accepted     = '" . $data['accepted']. "',
-                                               post_group_id = " . $data['post_group_id'] . ",
-                                               sent_date    =  '".$data['sent_date'] ."',
-                                               parent_id    =  ".$new_parent_id ." ,
-                                               session_id = ".$new_session_id;
-
-                                if ($debug) echo $sql_add_publication;
-                                $rest_insert     = Database::query($sql_add_publication);
-                                if ($debug) var_dump($rest_insert);
-                                $id = Database::insert_id();
+                                $data['sent_date'] = new DateTime($data['sent_date'], new DateTimeZone('UTC'));
+
+                                $publication = new \Chamilo\CourseBundle\Entity\CStudentPublication();
+                                $publication
+                                    ->setUrl($new_url)
+                                    ->setCId($course_id)
+                                    ->setTitle($data['title'])
+                                    ->setDescription($data['description'] . ' file moved')
+                                    ->setActive($data['active'])
+                                    ->setAccepted($data['accepted'])
+                                    ->setPostGroupId($data['post_group_id'])
+                                    ->setSentDate($data['sent_date'])
+                                    ->setParentId($new_parent_id)
+                                    ->setSession($session);
+
+                                $em->persist($publication);
+                                $em->flush();
+
+                                $id = $publication->getIid();
                                 api_item_property_update($course_info, 'work', $id, 'DocumentAdded', $user_id);
                                 $result_message[$TBL_STUDENT_PUBLICATION]++;
 
@@ -564,8 +565,7 @@ $htmlHeadXtra[] = '<script type="text/javascript">
     }
     function view_stat (unique_id, user_id) {
         var session_id = document.getElementById(unique_id).options[document.getElementById(unique_id).selectedIndex].value;
-        load_thick("user_move_stats.php?load_ajax=1&view_stat=1"+"&unique_id="+unique_id+"&user_id="+user_id+"&session_id="+session_id,"");
-/*
+
          $.ajax({
             contentType: "application/x-www-form-urlencoded",
             beforeSend: function(objeto) {
@@ -576,7 +576,7 @@ $htmlHeadXtra[] = '<script type="text/javascript">
             success: function(datos) {
              $("div#reponse_"+unique_id).html(datos);
             }
-        });*/
+        });
     }
 
 

+ 0 - 1
main/gradebook/gradebook_edit_all.php

@@ -31,7 +31,6 @@ $course_id = GradebookUtils::get_course_id_by_link_id($my_selectcat);
 $table_link = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
 $table_evaluation = Database::get_main_table(TABLE_MAIN_GRADEBOOK_EVALUATION);
 $tbl_forum_thread = Database:: get_course_table(TABLE_FORUM_THREAD);
-$tbl_work = Database:: get_course_table(TABLE_STUDENT_PUBLICATION);
 $tbl_attendance = Database:: get_course_table(TABLE_ATTENDANCE);
 
 $table_evaluated[LINK_EXERCISE] = array(

+ 17 - 8
main/gradebook/gradebook_edit_link.php

@@ -13,8 +13,8 @@ $tbl_grade_links = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
 //selected name of database
 $course_id              = GradebookUtils::get_course_id_by_link_id($_GET['editlink']);
 $tbl_forum_thread 		= Database :: get_course_table(TABLE_FORUM_THREAD);
-$tbl_work 				= Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
 $tbl_attendance 		= Database :: get_course_table(TABLE_ATTENDANCE);
+$em = Database::getManager();
 
 $linkarray 				= LinkFactory :: load($_GET['editlink']);
 /** @var AbstractLink $link */
@@ -77,14 +77,23 @@ if ($form->validate()) {
     Database::query($sql_t);
 
     //Update weight into student publication(work)
-    $sql_t = 'UPDATE '.$tbl_work.' SET
-              weight='.$final_weight.'
-			  WHERE c_id = '.$course_id.' AND id = (
-			    SELECT ref_id FROM '.$tbl_grade_links.'
-			    WHERE id='.intval($_GET['editlink'] ).' AND type=3
-              )';
+    $em
+        ->createQuery('
+            UPDATE ChamiloCourseBundle:CStudentPublication w
+            SET w.weight = :final_weight
+            WHERE w.cId = :course
+                AND w.id = (
+                    SELECT l.refId FROM ChamiloCoreBundle:GradebookLink l
+                    WHERE l.id = :link AND l.type = :type
+                )
+        ')
+        ->execute([
+            'final_weight' => $final_weight,
+            'course' => $course_id,
+            'link' => intval($_GET['editlink'] ),
+            'type' => LINK_STUDENTPUBLICATION
+        ]);
 
-    Database::query($sql_t);
     header('Location: '.$_SESSION['gradebook_dest'].'?linkedited=&selectcat=' . $link->get_category_id().'&'.api_get_cidreq());
     exit;
 }

+ 17 - 7
main/gradebook/lib/GradebookUtils.php

@@ -1157,6 +1157,7 @@ class GradebookUtils
         AbstractLink::add_link_log($linkId, $name);
         $table_link = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
 
+        $em = Database::getManager();
         $table_evaluation = Database::get_main_table(TABLE_MAIN_GRADEBOOK_EVALUATION);
         $tbl_forum_thread = Database:: get_course_table(TABLE_FORUM_THREAD);
         $tbl_work = Database:: get_course_table(TABLE_STUDENT_PUBLICATION);
@@ -1189,13 +1190,22 @@ class GradebookUtils
                 ';
         Database::query($sql);
         //Update weight into student publication(work)
-        $sql = 'UPDATE '.$tbl_work.' SET weight='.$weight.'
-                WHERE
-                    c_id = '.$course_id.' AND id = (
-                    SELECT ref_id FROM '.$table_link.'
-                    WHERE id='.$linkId.' AND type = '.LINK_STUDENTPUBLICATION.'
-                ) ';
-        Database::query($sql);
+        $em
+            ->createQuery('
+                UPDATE ChamiloCourseBundle:CStudentPublication w
+                SET w.weight = :final_weight
+                WHERE w.cId = :course
+                    AND w.id = (
+                        SELECT l.refId FROM ChamiloCoreBundle:GradebookLink l
+                        WHERE l.id = :link AND l.type = :type
+                    )
+            ')
+            ->execute([
+                'final_weight' => $weight,
+                'course' => $course_id,
+                'link' => $linkId,
+                'type' => LINK_STUDENTPUBLICATION
+            ]);
     }
 
     /**

+ 100 - 97
main/gradebook/lib/be/studentpublicationlink.class.php

@@ -100,9 +100,8 @@ class StudentPublicationLink extends AbstractLink
 		if (empty($this->course_code)) {
 			die('Error in get_not_created_links() : course code not set');
 		}
-		$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
-
-		$session_id = api_get_session_id();
+		$em = Database::getManager();
+        $session = $em->find('ChamiloCoreBundle:Session', api_get_session_id());
 		/*
         if (empty($session_id)) {
             $session_condition = api_get_session_condition(0, true);
@@ -114,20 +113,21 @@ class StudentPublicationLink extends AbstractLink
 
 		//Only show works from the session
 		//AND has_properties != ''
-		$sql = "SELECT id, url, title FROM $tbl_grade_links
-				WHERE
-					c_id = {$this->course_id} AND
-					active = 1 AND
-					filetype='folder' AND
-					session_id = ".api_get_session_id()."";
-
-		$result = Database::query($sql);
-		while ($data = Database::fetch_array($result)) {
-			$work_name = $data['title'];
+        $links = $em
+            ->getRepository('ChamiloCourseBundle:CStudentPublication')
+            ->findBy([
+                'cId' => $this->course_id,
+                'active' => true,
+                'filetype' => 'folder',
+                'session' => $session
+            ]);
+
+        foreach ($links as $data) {
+			$work_name = $data->getTitle();
 			if (empty($work_name)) {
-				$work_name = basename($data['url']);
+				$work_name = basename($data->getUrl());
 			}
-			$cats[] = array ($data['id'], $work_name);
+			$cats[] = array ($data->getId(), $work_name);
 		}
 		$cats=isset($cats) ? $cats : array();
 		return $cats;
@@ -138,14 +138,17 @@ class StudentPublicationLink extends AbstractLink
 	 */
 	public function has_results()
 	{
-		$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
-		$sql = 'SELECT count(*) AS number FROM '.$tbl_grade_links."
-				WHERE 	c_id 		= {$this->course_id} AND
-						parent_id 	= '".intval($this->get_ref_id())."' AND
-						session_id	=".api_get_session_id()."";
-		$result = Database::query($sql);
-		$number = Database::fetch_row($result);
-		return ($number[0] != 0);
+	    $em = Database::getManager();
+        $session = $em->find('ChamiloCoreBundle:Session', api_get_session_id());
+        $results = $em
+            ->getRepository('ChamiloCourseBundle:CStudentPublication')
+            ->findBy([
+                'cId' => $this->course_id,
+                'parentId' => intval($this->get_ref_id()),
+                'session' => $session
+            ]);
+
+        return count($results) != 0;
 	}
 
 	/**
@@ -155,34 +158,33 @@ class StudentPublicationLink extends AbstractLink
 	public function calc_score($stud_id = null, $type = null)
 	{
 		$stud_id = intval($stud_id);
-		$table = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
-		$sql = 'SELECT * FROM '.$table."
-    			WHERE
-    				c_id = {$this->course_id} AND
-    				id  = '".intval($this->get_ref_id())."' AND
-    				session_id	= ".api_get_session_id()."
-				"
-		;
+        $em = Database::getManager();
 
-		$query = Database::query($sql);
-		$assignment = Database::fetch_array($query);
+        $session = $em->find('ChamiloCoreBundle:Session', api_get_session_id());
 
-		if (count($assignment) == 0) {
-			$parentId = '0';
-		} else {
-			$parentId = $assignment['id'];
-		}
+        $assignment = $em
+            ->getRepository('ChamiloCourseBundle:CStudentPublication')
+            ->findOneBy([
+                'cId' => $this->course_id,
+                'id' => intval($this->get_ref_id()),
+                'session' => $session
+            ]);
+
+        $parentId = !$assignment ? 0 : $assignment->getId();
 
-		$sql = 'SELECT * FROM '.$table.'
+		$dql = 'SELECT a FROM ChamiloCourseBundle:CStudentPublication a
     			WHERE
-    				c_id = '.$this->course_id.' AND
+    				a.cId = :course AND
     				active = 1 AND
-    				parent_id = "'.$parentId.'" AND
-    				session_id = '.api_get_session_id() .' AND
+    				parent_id = :parent AND
+    				session_id = :session AND
     				qualificator_id <> 0
 				';
+        $params = ['course' => $this->course_id, 'parent' => $parentId, 'session' => $session];
+
 		if (!empty($stud_id)) {
-			$sql .= " AND user_id = $stud_id ";
+		    $dql .= ' AND a.userId = :student ';
+            $params['student'] = $stud_id;
 		}
 
 		$order = api_get_setting('student_publication_to_take_in_gradebook');
@@ -190,72 +192,73 @@ class StudentPublicationLink extends AbstractLink
 		switch ($order) {
 			case 'last':
 				// latest attempt
-				$sql .= ' ORDER BY sent_date DESC';
+				$dql .= ' ORDER BY a.sentDate DESC';
 				break;
 			case 'first':
 			default:
 				// first attempt
-				$sql .= ' ORDER BY id';
+				$dql .= ' ORDER BY a.id';
 				break;
 		}
 
-		$scores = Database::query($sql);
+        $scores = $em->createQuery($dql)->execute([$params]);
 
 		// for 1 student
 		if (!empty($stud_id)) {
-			if ($data = Database::fetch_array($scores)) {
-				return array(
-					$data['qualification'],
-					$assignment['qualification']
-				);
-			} else {
-				return '';
-			}
-		} else {
-			$students = array();  // user list, needed to make sure we only
-			// take first attempts into account
-			$rescount = 0;
-			$sum = 0;
-			$bestResult = 0;
-			$weight = 0;
-			$sumResult = 0;
-			$myResult = 0;
-
-			while ($data = Database::fetch_array($scores)) {
-				if (!(array_key_exists($data['user_id'], $students))) {
-					if ($assignment['qualification'] != 0) {
-						$students[$data['user_id']] = $data['qualification'];
-						$rescount++;
-						$sum += $data['qualification'] / $assignment['qualification'];
-						$sumResult += $data['qualification'];
-
-						if ($data['qualification'] > $bestResult) {
-							$bestResult = $data['qualification'];
-						}
-						$weight = $assignment['qualification'];
-					}
-				}
-			}
+		    if (!count($scores)) {
+		        return '';
+            }
 
-			if ($rescount == 0) {
-				return null;
-			} else {
-				switch ($type) {
-					case 'best':
-						return array($bestResult, $weight);
-						break;
-					case 'average':
-						return array($sumResult/$rescount, $weight);
-						break;
-					case 'ranking':
-						return AbstractLink::getCurrentUserRanking($stud_id, $students);
-						break;
-					default:
-						return array($sum, $rescount);
-						break;
-				}
-			}
+            $data = $scores[0];
+
+            return [
+                $data->getQualification(),
+                $assignment->getQualification()
+            ];
 		}
+
+        $students = array();  // user list, needed to make sure we only
+        // take first attempts into account
+        $rescount = 0;
+        $sum = 0;
+        $bestResult = 0;
+        $weight = 0;
+        $sumResult = 0;
+
+        foreach ($scores as $data) {
+            if (!(array_key_exists($data->getUserId(), $students))) {
+                if ($assignment->getQualification() != 0) {
+                    $students[$data->getUserId()] = $data->getQualification();
+                    $rescount++;
+                    $sum += $data->getQualification() / $assignment->getQualification();
+                    $sumResult += $data->getQualification();
+
+                    if ($data->getQualification() > $bestResult) {
+                        $bestResult = $data->getQualification();
+                    }
+                    $weight = $assignment->getQualification();
+                }
+            }
+        }
+
+        if ($rescount == 0) {
+            return null;
+        }
+
+        switch ($type) {
+            case 'best':
+                return array($bestResult, $weight);
+                break;
+            case 'average':
+                return array($sumResult/$rescount, $weight);
+                break;
+            case 'ranking':
+                return AbstractLink::getCurrentUserRanking($stud_id, $students);
+                break;
+            default:
+                return array($sum, $rescount);
+                break;
+        }
 	}
 
 	/**

+ 10 - 3
main/inc/lib/sessionmanager.lib.php

@@ -906,6 +906,7 @@ class SessionManager
          *  Assignments
          */
         //total
+        $params = [$course['real_id']];
         if ($getAllSessions) {
             $sql = "SELECT count(w.id) as count
                     FROM $workTable w
@@ -921,11 +922,17 @@ class SessionManager
                     ON (a.publication_id = w.id AND a.c_id = w.c_id)
                     WHERE w.c_id = %s
                     AND parent_id = 0
-                    AND active IN (1, 0)
-                    AND  session_id = %s";
+                    AND active IN (1, 0)";
+
+            if (empty($sessionId)) {
+                $sql .= ' AND w.session_id = NULL ';
+            } else {
+                $sql .= ' AND w.session_id = %s ';
+                $params[] = $sessionId;
+            }
         }
 
-        $sql_query = sprintf($sql, $course['real_id'], $sessionId);
+        $sql_query = vsprintf($sql, $params);
         $result = Database::query($sql_query);
         $row = Database::fetch_array($result);
         $assignments_total = $row['count'];

+ 1 - 0
main/social/invitations.php

@@ -110,6 +110,7 @@ if ($total_invitations == 0 && count($_GET) <= 0) {
 
 if ($number_loop != 0) {
     $invitationHtml = '';
+    
     foreach ($list_get_invitation as $invitation) {
         $sender_user_id = $invitation['user_sender_id'];
         $user_info = api_get_user_info($sender_user_id);

+ 21 - 31
main/social/profile.php

@@ -192,7 +192,7 @@ function register_friend(element_input) {
         $.ajax({
             contentType: "application/x-www-form-urlencoded",
             beforeSend: function(objeto) {
-                $("div#dpending_"+user_friend_id).html("<img src=\'../inc/lib/javascript/indicator.gif\' />");
+                $("li#dpending_"+user_friend_id).html("<img src=\'../inc/lib/javascript/indicator.gif\' />");
             },
             type: "POST",
             url: "'.api_get_path(WEB_AJAX_PATH).'social.ajax.php?a=add_friend",
@@ -596,40 +596,29 @@ if ($show_full_profile) {
         //Pending invitations
         if (!isset($_GET['u']) || (isset($_GET['u']) && $_GET['u']==api_get_user_id())) {
             if ($count_pending_invitations > 0) {
-                $invitations =  '<div><h3>'.get_lang('PendingInvitations').'</h3></div>';
+                
+                $invitations =  '<ul class="list-group">';
+                
                 for ($i=0;$i<$count_pending_invitations;$i++) {
                     $user_invitation_id = $pending_invitations[$i]['user_sender_id'];
-                    $invitations .=  '<div id="dpending_'.$user_invitation_id.'" class="friend_invitations">';
-                        $invitations .=  '<div style="float:left;width:60px;" >';
-                            $invitations .=  '<img style="margin-bottom:5px;"'
+                    $invitations .=  '<li id="dpending_'.$user_invitation_id.'" class="list-group-item">';
+                    $invitations .=  '<img class="img-rounded" '
                                 .' src="'.$list_get_path_web[$i]['dir'].'/'.$list_get_path_web[$i]['file'].'"'
-                                .' width="60px">';
-                        $invitations .=  '</div>';
-
-                        $invitations .=  '<div style="padding-left:70px;">';
-                            $user_invitation_info = api_get_user_info($user_invitation_id);
-                            $invitations .=  '<a href="'.api_get_path(WEB_PATH).'main/social/profile.php'
-                                .'?u='.$user_invitation_id.'">'
-                                .api_get_person_name(
-                                    $user_invitation_info['firstname'],
-                                    $user_invitation_info['lastname'])
-                                .'</a>';
-                            $invitations .=  '<br />';
-                            $invitations .=  Security::remove_XSS(
-                                cut($pending_invitations[$i]['content'], 50),
-                                STUDENT,
-                                true
-                            );
-                            $invitations .=  '<br />';
-                            $invitations .=  '<a id="btn_accepted_'.$user_invitation_id.'"'
-                                .' class="btn btn-default" onclick="register_friend(this)" href="javascript:void(0)">'
-                                .get_lang('SocialAddToFriends')
-                                .'</a>';
-                            $invitations .=  '<div id="id_response"></div>';
-                        $invitations .=  '</div>';
-                    $invitations .=  '</div>';
+                                .' width="40px">';
+                    $userInfo = api_get_user_info($user_invitation_id);
+                    $invitations .= '<a href="'.api_get_path(WEB_PATH).'main/social/profile.php?u='.$user_invitation_id.'">'
+                                 .api_get_person_name($userInfo['firstname'],$userInfo['lastname']).'</a>';
+                    
+                    $invitations .='<div class="pull-right">';
+                    $invitations .=  '<a title="'.get_lang('SocialAddToFriends').'" id="btn_accepted_'.$user_invitation_id.'" class="btn btn-default btn-sm" onclick="register_friend(this)" href="javascript:void(0)">'
+                                . Display::returnFontAwesomeIcon('plus').'</a>';
+                    $invitations .= '</div>';
+                    $invitations .=  '<div id="id_response"></div>';
+                    $invitations .=  '</li>';
                 }
-                $socialRightInformation .=  SocialManager::social_wrapper_div($invitations, 4);
+                $invitations .= '</ul>';
+                $listInvitations = Display::panelCollapse(get_lang('PendingInvitations'), $invitations, 'invitations', null, 'invitations-acordion', 'invitations-collapse');
+               
             }
         }
 
@@ -697,6 +686,7 @@ $tpl->assign('social_group_info_block', $social_group_info_block);
 $tpl->assign('social_rss_block', $social_rss_block);
 $tpl->assign('social_skill_block', SocialManager::getSkillBlock($my_user_id));
 $tpl->assign('sessionList', $social_session_block);
+$tpl->assign('invitations', $listInvitations);
 $tpl->assign('social_right_information', $socialRightInformation);
 $tpl->assign('social_auto_extend_link', $socialAutoExtendLink);
 

+ 3 - 0
main/template/default/social/profile.tpl

@@ -91,6 +91,9 @@
             </div>
          </div>
          {% endif %}
+         
+         {{ invitations }}
+         
 
         {{ social_rss_block }}
         {{ social_right_information }}

+ 97 - 79
main/work/work.lib.php

@@ -207,6 +207,7 @@ function get_work_count_by_student($user_id, $work_id)
     $work_id = intval($work_id);
     $course_id = api_get_course_int_id();
     $session_id = api_get_session_id();
+    $sessionCondition = api_get_session_condition($session_id);
 
     $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
     $sql = "SELECT COUNT(*) as count
@@ -215,8 +216,8 @@ function get_work_count_by_student($user_id, $work_id)
                 c_id = $course_id AND
                 parent_id = $work_id AND
                 user_id = $user_id AND
-                active IN (0, 1) AND
-                session_id = $session_id ";
+                active IN (0, 1)
+                $sessionCondition";
     $result = Database::query($sql);
     $return = 0;
     if (Database::num_rows($result)) {
@@ -381,14 +382,15 @@ function getUniqueStudentAttemptsTotal($workId, $groupId, $course_id, $sessionId
     $workId = intval($workId);
     $sessionId = intval($sessionId);
     $groupId = intval($groupId);
+    $sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id');
 
     $sql = "SELECT count(DISTINCT u.user_id)
             FROM $work_table w
             INNER JOIN $user_table u
                 ON w.user_id = u.user_id
             WHERE
-                w.c_id = $course_id AND
-                w.session_id = $sessionId AND
+                w.c_id = $course_id
+                $sessionCondition AND
                 w.parent_id = ".$workId." AND
                 w.post_group_id = ".$groupId." AND
                 w.active IN (0, 1)
@@ -445,6 +447,8 @@ function getUniqueStudentAttempts(
         }
     }
 
+    $sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id');
+
     $sql = "SELECT count(*) FROM (
                 SELECT count(*), w.parent_id
                 FROM $work_table w
@@ -452,8 +456,8 @@ function getUniqueStudentAttempts(
                     ON w.user_id = u.user_id
                 WHERE
                     w.filetype = 'file' AND
-                    w.c_id = $course_id AND
-                    w.session_id = $sessionId AND
+                    w.c_id = $course_id
+                    $sessionCondition AND
                     $workCondition
                     w.post_group_id = ".$groupId." AND
                     w.active IN (0, 1) $studentCondition
@@ -881,8 +885,7 @@ function updateDirName($work_data, $newPath)
                 WHERE
                     c_id = $course_id AND
                     id = $work_id AND
-                    session_id = $sessionId
-                ";
+                    session_id = " . ($sessionId ? $sessionId : 'NULL');
         Database::query($sql);
     }
 }
@@ -898,16 +901,21 @@ function updateDirName($work_data, $newPath)
 function get_parent_directories($id)
 {
     $course_id = api_get_course_int_id();
-    $work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
-    $id = intval($id);
-    $sql = "SELECT id FROM $work_table WHERE c_id = $course_id AND parent_id = $id";
-    $result = Database::query($sql);
+    $em = Database::getManager();
+
+    $directories = $em
+        ->getRepository('ChamiloCourseBundle:CStudentPublication')
+        ->findBy([
+            'cId' => $course_id,
+            'parentId' => $id
+        ]);
+
     $list_id = array();
-    if (Database::num_rows($result)) {
-        while ($row = Database::fetch_array($result)) {
-            $list_id[] = $row['id'];
-        }
+
+    foreach ($directories as $directory) {
+        $list_id[] = $directory->getId();
     }
+
     return $list_id;
 }
 
@@ -1600,7 +1608,7 @@ function get_work_user_list_from_documents(
     $workId = intval($workId);
 
     $userCondition = " AND u.user_id = $studentId ";
-    $sessionCondition = " AND w.session_id = $sessionId ";
+    $sessionCondition = api_get_session_condition($sessionId, true, false, 'w.session_id');
     $workCondition = " AND w_rel.work_id = $workId";
     $workParentCondition  = " AND w.parent_id = $workId";
 
@@ -2331,6 +2339,7 @@ function get_list_users_without_publication($task_id, $studentId = null)
     $session_id = api_get_session_id();
     $course_id = api_get_course_int_id();
     $task_id = intval($task_id);
+    $sessionCondition = api_get_session_condition($session_id);
 
     if ($session_id == 0) {
         $sql = "SELECT user_id as id FROM $work_table
@@ -2342,8 +2351,7 @@ function get_list_users_without_publication($task_id, $studentId = null)
         $sql = "SELECT user_id as id FROM $work_table
                 WHERE
                     c_id = $course_id AND
-                    parent_id = '$task_id' AND
-                    session_id = '".$session_id."' AND
+                    parent_id = '$task_id' $sessionCondition AND
                     active IN (0, 1)";
     }
 
@@ -2511,13 +2519,14 @@ function getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $
     $userId = intval($userId);
     $sessionId = intval($sessionId);
     $active = intval($active);
+    $sessionCondition = api_get_session_condition($sessionId);
 
     $sql = "SELECT w.* FROM $work w INNER JOIN $workRel rel ON (w.parent_id = rel.work_id)
             WHERE
                 w.document_id = $documentId AND
                 w.parent_id = $workId AND
-                w.c_id = $courseId AND
-                w.session_id = $sessionId AND
+                w.c_id = $courseId
+                $sessionCondition AND
                 user_id = $userId AND
                 active = $active
             ";
@@ -2917,12 +2926,13 @@ function getWorkCommentCountFromParent(
     $work = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
     $commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT);
     $parentId = intval($parentId);
+    $sessionCondition = api_get_session_condition($sessionId, false, false, 'w.session_id');
 
     $sql = "SELECT count(*) as count
             FROM $commentTable c INNER JOIN $work w
             ON c.c_id = w.c_id AND w.id = c.work_id
             WHERE
-                session_id = $sessionId AND
+                $sessionCondition AND
                 parent_id = $parentId AND
                 w.c_id = ".$courseInfo['real_id'];
 
@@ -2958,6 +2968,7 @@ function getLastWorkStudentFromParent(
     }
 
     $work = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
+    $sessionCondition = api_get_session_condition($sessionId, false);
     $commentTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT_COMMENT);
     $parentId = intval($parentId);
 
@@ -2965,7 +2976,7 @@ function getLastWorkStudentFromParent(
             FROM $commentTable c INNER JOIN $work w
             ON c.c_id = w.c_id AND w.id = c.work_id
             WHERE
-                session_id = $sessionId AND
+                $sessionCondition AND
                 parent_id = $parentId AND
                 w.c_id = ".$courseInfo['real_id']."
             ORDER BY w.sent_date
@@ -3008,12 +3019,13 @@ function getLastWorkStudentFromParentByUser(
     $userId = intval($userId);
     $work = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
     $parentId = intval($parentId);
+    $sessionCondition = api_get_session_condition($sessionId);
 
     $sql = "SELECT *
             FROM  $work
             WHERE
-                user_id = $userId AND
-                session_id = $sessionId AND
+                user_id = $userId
+                $sessionCondition AND
                 parent_id = $parentId AND
                 c_id = ".$courseInfo['real_id']."
             ORDER BY sent_date DESC
@@ -3571,7 +3583,7 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId,
             'post_group_id' => $groupId,
             'sent_date' => api_get_utc_datetime(),
             'parent_id' => $workInfo['id'],
-            'session_id' => $sessionId,
+            'session_id' => $sessionId ? $sessionId : null,
             'user_id' => $userId,
             'has_properties' => 0,
             'qualification' => 0
@@ -3621,7 +3633,7 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId,
 
 /**
  * Creates a new task (directory) in the assignment tool
- * @param array $params
+ * @param array $formValues
  * @param int $user_id
  * @param array $courseInfo
  * @param int $group_id
@@ -3637,11 +3649,11 @@ function processWorkForm($workInfo, $values, $courseInfo, $sessionId, $groupId,
  */
 function addDir($formValues, $user_id, $courseInfo, $group_id, $session_id)
 {
-    $work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
+    $em = Database::getManager();
 
     $user_id = intval($user_id);
     $group_id = intval($group_id);
-    $session_id = intval($session_id);
+    $session = $em->find('ChamiloCoreBundle:Session', $session_id);
 
     $base_work_dir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work';
     $course_id = $courseInfo['real_id'];
@@ -3650,59 +3662,63 @@ function addDir($formValues, $user_id, $courseInfo, $group_id, $session_id)
     $directory = disable_dangerous_file($directory);
     $created_dir = create_unexisting_work_directory($base_work_dir, $directory);
 
-    if (!empty($created_dir)) {
-        $dirName = '/'.$created_dir;
-        $today = api_get_utc_datetime();
-
-        $params = [
-            'c_id' => $course_id,
-            'url' => $dirName,
-            'title' => $formValues['new_dir'],
-            'description' => $formValues['description'],
-            'author' => '',
-            'active' => '1',
-            'accepted' => '1',
-            'filetype' => 'folder',
-            'post_group_id' => $group_id,
-            'sent_date' => $today,
-            'qualification' => $formValues['qualification'] != '' ? $formValues['qualification'] : 0,
-            'parent_id' => 0,
-            'qualificator_id' => 0,
-            'weight' => !empty($formValues['weight']) ? $formValues['weight'] : 0,
-            'session_id' => $session_id,
-            'allow_text_assignment' => $formValues['allow_text_assignment'],
-            'contains_file' => 0,
-            'user_id' => $user_id,
-            'has_properties' => 0,
-            'document_id' => 0
-        ];
-        $id = Database::insert($work_table, $params);
-
-        if ($id) {
-
-            $sql = "UPDATE $work_table SET id = iid WHERE iid = $id";
-            Database::query($sql);
-
-            // Folder created
-            api_item_property_update(
-                $courseInfo,
-                'work',
-                $id,
-                'DirectoryCreated',
-                $user_id,
-                $group_id
-            );
+    if (empty($created_dir)) {
+        return false;
+    }
 
-            updatePublicationAssignment($id, $formValues, $courseInfo, $group_id);
+    $dirName = '/'.$created_dir;
+    $today = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
+
+    $workTable = new \Chamilo\CourseBundle\Entity\CStudentPublication();
+    $workTable
+        ->setCId($course_id)
+        ->setUrl($dirName)
+        ->setTitle($formValues['new_dir'])
+        ->setDescription($formValues['description'])
+        ->setActive(true)
+        ->setAccepted(true)
+        ->setFiletype('folder')
+        ->setPostGroupId($group_id)
+        ->setSentDate($today)
+        ->setQualification($formValues['qualification'] != '' ? $formValues['qualification'] : 0)
+        ->setParentId(0)
+        ->setQualificatorId(0)
+        ->setWeight(!empty($formValues['weight']) ? $formValues['weight'] : 0)
+        ->setSession($session)
+        ->setAllowTextAssignment($formValues['allow_text_assignment'])
+        ->setContainsFile(0)
+        ->setUserId($user_id)
+        ->setHasProperties(0)
+        ->setDocumentId(0);
+
+    $em->persist($workTable);
+    $em->flush();
+
+    $workTable->setId($workTable->getIid());
+    $em->merge($workTable);
+    $em->flush();
+
+    // Folder created
+    api_item_property_update(
+        $courseInfo,
+        'work',
+        $workTable->getIid(),
+        'DirectoryCreated',
+        $user_id,
+        $group_id
+    );
 
-            if (api_get_course_setting('email_alert_students_on_new_homework') == 1) {
-                send_email_on_homework_creation($course_id, $session_id, $id);
-            }
+    updatePublicationAssignment($workTable->getIid(), $formValues, $courseInfo, $group_id);
 
-            return $id;
-        }
+    if (api_get_course_setting('email_alert_students_on_new_homework') == 1) {
+        send_email_on_homework_creation(
+            $course_id,
+            $session ? $session->getId() : 0,
+            $workTable->getIid()
+        );
     }
-    return false;
+
+    return $workTable->getIid();
 }
 
 /**
@@ -3750,7 +3766,9 @@ function updateWork($workId, $params, $courseInfo, $sessionId = 0)
         $filteredParams,
         array(
             'id = ? AND c_id = ? AND session_id = ? ' => array(
-                $workId, $courseInfo['real_id'], $sessionId
+                $workId,
+                $courseInfo['real_id'],
+                $sessionId ? $sessionId : null
             )
         )
     );

+ 2 - 2
src/Chamilo/CourseBundle/Component/CourseCopy/CourseRestorer.php

@@ -2696,7 +2696,7 @@ class CourseRestorer
             unset($folder['id']);
 			$folder['c_id'] = $this->destination_course_id;
             $folder['parent_id'] = 0;
-            $folder['session_id'] = $sessionId;
+            $folder['session_id'] = $sessionId ? $sessionId : null;
 			$new_id = Database::insert($work_table, $folder);
 
             if ($new_id) {
@@ -2727,7 +2727,7 @@ class CourseRestorer
                 foreach ($sub_folders  as $sub_folder) {
                     $sub_folder['c_id'] = $this->destination_course_id;
                     $sub_folder['ref'] = $new_id;
-                    $sub_folder['session_id'] = $sessionId;
+                    $sub_folder['session_id'] = $sessionId ? $sessionId : null;
                     $new_item_id = Database::insert($item_property_table, $sub_folder);
                     if ($new_item_id) {
                         $sql = "UPDATE $item_property_table SET id = iid WHERE iid = $new_item_id";

+ 10 - 1
src/Chamilo/CourseBundle/Entity/CStudentPublication.php

@@ -579,7 +579,7 @@ class CStudentPublication
      * @param Session $session
      * @return CStudentPublication
      */
-    public function setSession(Session $session)
+    public function setSession(Session $session = null)
     {
         $this->session = $session;
 
@@ -757,4 +757,13 @@ class CStudentPublication
     {
         $this->documentId = $documentId;
     }
+
+    /**
+     * Get iid
+     * @return int
+     */
+    public function getIid()
+    {
+        return $this->iid;
+    }
 }