Przeglądaj źródła

Implementing new work student view see BT#6916

Julio Montoya 11 lat temu
rodzic
commit
2b8b5de3e6

+ 31 - 8
main/inc/ajax/model.ajax.php

@@ -167,6 +167,7 @@ switch ($action) {
         if ($courseInfo['show_score'] == '0') {
             $count = get_count_work($work_id, null, api_get_user_id());
         } else {
+            // Only my stuff
             $count = get_count_work($work_id, api_get_user_id());
         }
         break;
@@ -338,7 +339,9 @@ switch ($action) {
         break;
     case 'get_work_user_list_all':
         if (isset($_GET['type'])  && $_GET['type'] == 'simple') {
-            $columns = array('type', 'firstname', 'lastname', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions');
+            $columns = array(
+                'type', 'firstname', 'lastname', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions'
+            );
         } else {
             $columns = array('type', 'firstname', 'lastname', 'title', 'sent_date', 'actions');
         }
@@ -347,7 +350,9 @@ switch ($action) {
         break;
     case 'get_work_user_list_others':
         if (isset($_GET['type'])  && $_GET['type'] == 'simple') {
-            $columns = array('type', 'firstname', 'lastname',  'title', 'qualification', 'sent_date', 'qualificator_id', 'actions');
+            $columns = array(
+                'type', 'firstname', 'lastname',  'title', 'qualification', 'sent_date', 'qualificator_id', 'actions'
+            );
         } else {
             $columns = array('type', 'firstname', 'lastname',  'title', 'sent_date', 'actions');
         }
@@ -356,7 +361,9 @@ switch ($action) {
         break;
     case 'get_work_user_list':
         if (isset($_GET['type'])  && $_GET['type'] == 'simple') {
-            $columns = array('type', 'firstname', 'lastname', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions');
+            $columns = array(
+                'type', 'firstname', 'lastname', 'title', 'qualification', 'sent_date', 'qualificator_id', 'actions'
+            );
         } else {
             $columns = array('type', 'firstname', 'lastname', 'title', 'sent_date', 'actions');
         }
@@ -368,7 +375,15 @@ switch ($action) {
             $where_condition .= " AND u.user_id = ".api_get_user_id();
             $result = get_work_user_list($start, $limit, $sidx, $sord, $work_id, $where_condition);
         } else {
-            $result = get_work_user_list_from_documents($start, $limit, $sidx, $sord, $work_id, api_get_user_id(), $where_condition);
+            $result = get_work_user_list_from_documents(
+                $start,
+                $limit,
+                $sidx,
+                $sord,
+                $work_id,
+                api_get_user_id(),
+                $where_condition
+            );
         }
         break;
 	case 'get_exercise_results':
@@ -376,7 +391,9 @@ switch ($action) {
         // Used inside get_exam_results_data()
         $documentPath = api_get_path(SYS_COURSE_PATH) . $course['path'] . "/document";
         if ($is_allowedToEdit) {
-            $columns = array('firstname', 'lastname', 'username', 'group_name', 'exe_duration', 'start_date', 'exe_date', 'score', 'status', 'lp', 'actions');
+            $columns = array(
+                'firstname', 'lastname', 'username', 'group_name', 'exe_duration', 'start_date', 'exe_date', 'score', 'status', 'lp', 'actions'
+            );
         }
         $result = get_exam_results_data($start, $limit, $sidx, $sord, $exercise_id, $where_condition);
 		break;
@@ -387,7 +404,9 @@ switch ($action) {
 		$result = get_exam_results_hotpotatoes_data($start, $limit, $sidx, $sord, $hotpot_path, $where_condition); //get_exam_results_data($start, $limit, $sidx, $sord, $exercise_id, $where_condition);
 		break;
     case 'get_sessions':
-        $columns = array('name', 'nbr_courses', 'nbr_users', 'category_name', 'date_start','date_end', 'coach_name', 'session_active', 'visibility');
+        $columns = array(
+            'name', 'nbr_courses', 'nbr_users', 'category_name', 'date_start','date_end', 'coach_name', 'session_active', 'visibility'
+        );
         $result = SessionManager::get_sessions_admin(
             array(
                 'where' => $where_condition,
@@ -399,11 +418,15 @@ switch ($action) {
      case 'get_timelines':
         $columns = array('headline', 'actions');
 
-        if(!in_array($sidx, $columns)) {
+        if (!in_array($sidx, $columns)) {
         	$sidx = 'headline';
         }
         $course_id = api_get_course_int_id();
-        $result     = Database::select('*', $obj->table, array('where' => array('parent_id = ? AND c_id = ?' => array('0', $course_id)), 'order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit"));
+        $result = Database::select(
+            '*',
+            $obj->table,
+            array('where' => array('parent_id = ? AND c_id = ?' => array('0', $course_id)), 'order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit")
+        );
         $new_result = array();
         foreach ($result as $item) {
             if (!$item['status']) {

+ 0 - 1
main/inc/lib/database.lib.php

@@ -1174,7 +1174,6 @@ class Database {
         }
 
         $sql    = "SELECT $clean_columns FROM $table_name $conditions";
-
         $result = self::query($sql);
         $array = array();
         //if (self::num_rows($result) > 0 ) {

+ 1 - 0
main/work/edit_work.php

@@ -108,6 +108,7 @@ if ($form->validate()) {
     }
 
     if ($edit_check) {
+        updateWork($workId, $params, $courseInfo);
         updatePublicationAssignment($workId, $params, $courseInfo, $group_id);
         updateDirName($workData, $params['new_dir']);
 

+ 2 - 1
main/work/upload_from_template.php

@@ -67,7 +67,8 @@ $form->addElement('hidden', 'document_id', $documentId);
 $form->addElement('hidden', 'id', $work_id);
 $form->addElement('hidden', 'sec_token', $token);
 
-$documentTemplateData = getDocumentTemplateFromWork($work_id, $course_info);
+$documentTemplateData = getDocumentTemplateFromWork($work_id, $course_info, $documentId);
+
 if (!empty($documentTemplateData)) {
     $defaults['title'] = $userInfo['complete_name'].'_'.$documentTemplateData['title'].'_'.substr(api_get_utc_datetime(), 0, 10);
     $defaults['description'] = $documentTemplateData['file_content'];

+ 126 - 51
main/work/work.lib.php

@@ -1671,36 +1671,55 @@ function get_work_user_list_from_documents(
     if ($getCount) {
         $select = " SELECT count() as count  ";
     } else {
-        $select = " SELECT DISTINCT u.firstname, u.lastname, u.user_id, d.title, d.id as document_id";
+        $select1 = " SELECT DISTINCT u.firstname, u.lastname, u.user_id, w.title, w.document_id document_id, w.id";
+        $select2 = " SELECT DISTINCT u.firstname, u.lastname, u.user_id, d.title, d.id document_id, 0";
     }
 
-    $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT);
     $documentTable = Database::get_course_table(TABLE_DOCUMENT);
     $workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
+    $workRelDocument = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT);
 
     $userTable = Database::get_main_table(TABLE_MAIN_USER);
-    $courseTable = Database::get_main_table(TABLE_MAIN_COURSE);
-    $courseRelUserTable = Database::get_main_table(TABLE_MAIN_COURSE_USER);
 
     $courseId = api_get_course_int_id();
     $sessionId = api_get_session_id();
 
     $userCondition  = null;
-    if (!empty($studentId )) {
-        $studentId = intval($studentId);
-        $userCondition = "AND cu.user_id = $studentId ";
-    }
-
-    $sql = " $select FROM $userTable u
-            INNER JOIN $courseRelUserTable as cu ON (cu.user_id = u.user_id)
-            INNER JOIN $courseTable c ON (c.code = cu.course_code)
-            LEFT JOIN $table w_rel_doc ON (w_rel_doc.c_id = c.id)
-            INNER JOIN $documentTable d ON (d.id = w_rel_doc.document_id AND d.c_id = w_rel_doc.c_id)
-            LEFT JOIN $workTable w ON (w_rel_doc.c_id = w.c_id AND w.filetype = 'file' )
-            WHERE
-                d.c_id = $courseId
-                $userCondition
-                $whereCondition";
+    if (empty($studentId)) {
+        $studentId = api_get_user_id();
+    }
+    $studentId = intval($studentId);
+    $userCondition = " AND u.user_id = $studentId ";
+    $sessionCondition = " AND w.session_id = $sessionId ";
+
+    $sql = "    (
+                    $select1 FROM $userTable u
+                    INNER JOIN $workTable w ON (u.user_id = w.user_id AND w.active = 1 AND w.filetype = 'file')
+                    WHERE
+                        w.c_id = $courseId
+                        $userCondition
+                        $sessionCondition
+                        $whereCondition
+
+                ) UNION (
+                    $select2 FROM $workTable w
+                    INNER JOIN $workRelDocument w_rel ON (w_rel.work_id = w.id AND w.active = 1)
+                    INNER JOIN $documentTable d ON (w_rel.document_id = d.id AND d.c_id = w.c_id)
+                    INNER JOIN $userTable u ON (u.user_id = $studentId)
+                    WHERE
+                        w.c_id = $courseId
+                        $sessionCondition AND
+                        d.id NOT IN
+                            (SELECT w.document_id id FROM $workTable w
+                            WHERE
+                                user_id = $studentId AND
+                                c_id = $courseId AND
+                                filetype = 'file' AND
+                                active = 1
+                                $sessionCondition
+                            )
+                )
+            ";
 
     $start = intval($start);
     $limit = intval($limit);
@@ -1710,6 +1729,7 @@ function get_work_user_list_from_documents(
 
     $sql .= " ORDER BY $column $direction";
     $sql .= " LIMIT $start, $limit";
+
     $result = Database::query($sql);
 
     $currentUserId = api_get_user_id();
@@ -1719,41 +1739,75 @@ function get_work_user_list_from_documents(
         return $result['count'];
     } else {
         $workList = array();
+
         $urlAdd = api_get_path(WEB_CODE_PATH).'work/upload_from_template.php?'.api_get_cidreq();
         $urlEdit = api_get_path(WEB_CODE_PATH).'work/edit.php?'.api_get_cidreq();
+        $urlDelete = api_get_path(WEB_CODE_PATH).'work/work_list.php?action=delete&'.api_get_cidreq();
+        $urlView = api_get_path(WEB_CODE_PATH).'work/view.php?'.api_get_cidreq();
+
         $editIcon = Display::return_icon('edit.png', get_lang('Edit'));
         $addIcon = Display::return_icon('add.png', get_lang('Add'));
+        $deleteIcon = Display::return_icon('delete.png', get_lang('Delete'));
+        $viewIcon = Display::return_icon('default.png', get_lang('View'));
+
+        $allowEdition = api_get_course_setting('student_delete_own_publication');
         while ($row = Database::fetch_array($result, 'ASSOC')) {
             $userId = $row['user_id'];
             $documentId = $row['document_id'];
+            $itemId = $row['id'];
+
+            if (empty($documentId)) {
+                $url = $urlEdit.'&item_id='.$row['id'].'&id='.$workId;
+                $editLink = Display::url($editIcon, $url);
+                if ($allowEdition == false) {
+                    $editLink = null;
+                }
+            } else {
+                $documentToWork = getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $userId);
+                if (empty($documentToWork)) {
+                    $url = $urlAdd.'&document_id='.$documentId.'&id='.$workId;
+                    $editLink = Display::url($addIcon, $url);
+                } else {
+
+                    $row['title'] = $documentToWork['title'];
+                    $row['sent_date'] = $documentToWork['sent_date'];
+                    $newWorkId = $documentToWork['id'];
+                    $url = $urlEdit.'&item_id='.$newWorkId.'&id='.$workId;
+                    $editLink = Display::url($editIcon, $url);
 
-            $documentToWork = getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $userId);
+                    if ($allowEdition == false) {
+                        $editLink = null;
+                    }
+                }
+            }
 
-             if (empty($documentToWork)) {
-                $url = $urlAdd.'&document_id='.$documentId.'&id='.$workId;
-                $link = Display::url($addIcon, $url);
+            if ($allowEdition && !empty($itemId)) {
+                $deleteLink  = Display::url($deleteIcon, $urlDelete.'&item_id='.$itemId.'&id='.$workId);
             } else {
-                $row['title'] = $documentToWork['title'];
-                $row['sent_date'] = $documentToWork['sent_date'];
-                $newWorkId = $documentToWork['id'];
-                $url = $urlEdit.'&id='.$newWorkId;
-                $link = Display::url($editIcon, $url);
+                $deleteLink = null;
+            }
+
+            $viewLink = null;
+            if (!empty($itemId)) {
+                $viewLink = Display::url($viewIcon, $urlView.'&id='.$itemId);
             }
 
+            $row['type'] = build_document_icon_tag('file', $row['file']);
+
             if (!empty($row['sent_date'])) {
                 $row['sent_date'] = api_get_local_time($row['sent_date']);
             }
 
             if ($userId == $currentUserId) {
-                $row['actions'] = $link;
+                $row['actions'] = $viewLink.$editLink.$deleteLink;
             }
+
             $workList[] = $row;
         }
     }
     return $workList;
 
     $session_id     = api_get_session_id();
-
     $group_id       = api_get_group_id();
     $course_info    = api_get_course_info(api_get_course_id());
 
@@ -2389,18 +2443,17 @@ function user_is_author($item_id, $user_id = null)
         $user_id = api_get_user_id();
     }
 
-    $is_author 			= false;
-    $item_to_edit_data 	= api_get_item_property_info(api_get_course_int_id(), 'work', $item_id, api_get_session_id());
+    $is_author = false;
+    $data = api_get_item_property_info(api_get_course_int_id(), 'work', $item_id, api_get_session_id());
     $is_allowed_to_edit = api_is_allowed_to_edit();
 
     if ($is_allowed_to_edit) {
         $is_author = true;
     } else {
-        if ($item_to_edit_data['insert_user_id'] == $user_id) {
+        if ($data['insert_user_id'] == $user_id) {
             $is_author = true;
         }
     }
-
     if (!$is_author) {
         //api_not_allowed();
         return false;
@@ -2564,12 +2617,14 @@ function getDocumentToWork($documentId, $workId, $courseId)
  * @param int $documentId
  * @param int $workId
  * @param int $courseId
+ * @param int $sessionId
  * @param int $userId
+ * @param int $active
  * @return array
  */
 function getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $userId, $active = 1)
 {
-    $table = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT);
+    $workRel = Database::get_course_table(TABLE_STUDENT_PUBLICATION_REL_DOCUMENT);
     $work = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
 
     $documentId = intval($documentId);
@@ -2579,7 +2634,7 @@ function getDocumentToWorkPerUser($documentId, $workId, $courseId, $sessionId, $
     $sessionId = intval($sessionId);
     $active = intval($active);
 
-    $sql = "SELECT w.* FROM $work w INNER JOIN $table rel ON (w.parent_id = rel.work_id)
+    $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
@@ -2737,13 +2792,17 @@ function allowOnlySubscribedUser($userId, $workId, $courseId)
 /**
  * @param int $workId
  * @param array $courseInfo
+ * @param int $documentId
  * @return array
  */
-function getDocumentTemplateFromWork($workId, $courseInfo)
+function getDocumentTemplateFromWork($workId, $courseInfo, $documentId)
 {
     $documents = getAllDocumentToWork($workId, $courseInfo['real_id']);
     if (!empty($documents)) {
         foreach ($documents as $doc) {
+            if ($documentId != $doc['document_id']) {
+                continue;
+            }
             $docData = DocumentManager::get_document_data_by_id($doc['document_id'], $courseInfo['code']);
             $fileInfo = pathinfo($docData['path']);
             if ($fileInfo['extension'] == 'html') {
@@ -3201,7 +3260,7 @@ function addDir($params, $user_id, $courseInfo, $group_id, $session_id)
                 filetype            = 'folder',
                 post_group_id       = '".$group_id."',
                 sent_date           = '".$today."',
-                qualification       = '".(($params['qualification']!='') ? Database::escape_string($params['qualification']) : '') ."',
+                qualification       = '".(($params['qualification'] != '') ? Database::escape_string($params['qualification']) : '') ."',
                 parent_id           = '',
                 qualificator_id     = '',
                 date_of_qualification	= '0000-00-00 00:00:00',
@@ -3217,7 +3276,6 @@ function addDir($params, $user_id, $courseInfo, $group_id, $session_id)
         $id = Database::insert_id();
 
         if ($id) {
-
             // Folder created
             api_item_property_update($courseInfo, 'work', $id, 'DirectoryCreated', $user_id, $group_id);
             updatePublicationAssignment($id, $params, $courseInfo, $group_id);
@@ -3253,6 +3311,27 @@ function agendaExistsForWork($workId, $courseInfo)
     return 0;
 }
 
+/**
+ * @param int $workId
+ * @param array $params
+ * @param array $courseInfo
+ */
+function updateWork($workId, $params, $courseInfo)
+{
+    $workTable = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
+    $filteredParams = array(
+        'description' => $params['description'],
+        'qualification' => $params['qualification'],
+        'weight' => $params['weight'],
+        'allow_text_assignment' => $params['allow_text_assignment'],
+    );
+    Database::update(
+        $workTable,
+        $filteredParams,
+        array('id = ? AND c_id = ?' => array($workId, $courseInfo['real_id']))
+    );
+}
+
 /**
  * @param int $workId
  * @param array $params
@@ -3381,8 +3460,6 @@ function updatePublicationAssignment($workId, $params, $courseInfo, $group_id)
     }
 }
 
-
-
 /**
  * @param int $item_id
  * @param array course info
@@ -3407,16 +3484,15 @@ function deleteWorkItem($item_id, $courseInfo)
     if (($is_allowed_to_edit && $locked == false) ||
         ($locked == false AND $is_author && api_get_course_setting('student_delete_own_publication') == 1 && $work_data['qualificator_id'] == 0)) {
         //we found the current user is the author
-        $queryString1 	= "SELECT url, contains_file FROM ".$work_table." WHERE c_id = $course_id AND id = $item_id";
-        $result1 		= Database::query($queryString1);
-        $row 			= Database::fetch_array($result1);
-
+        $sql = "SELECT url, contains_file FROM ".$work_table." WHERE c_id = $course_id AND id = $item_id";
+        $result = Database::query($sql);
+        $row = Database::fetch_array($result);
 
-        if (Database::num_rows($result1) > 0) {
-            $queryString2 	= "UPDATE $work_table SET active = 2 WHERE c_id = $course_id AND id = $item_id";
-            $queryString3 	= "DELETE FROM $TSTDPUBASG WHERE c_id = $course_id AND publication_id = $item_id";
-            Database::query($queryString2);
-            Database::query($queryString3);
+        if (Database::num_rows($result) > 0) {
+            $sql = "UPDATE $work_table SET active = 2 WHERE c_id = $course_id AND id = $item_id";
+            Database::query($sql);
+            $sql = "DELETE FROM $TSTDPUBASG WHERE c_id = $course_id AND publication_id = $item_id";
+            Database::query($sql);
 
             api_item_property_update($courseInfo, 'work', $item_id, 'DocumentDeleted', api_get_user_id());
             $work = $row['url'];
@@ -3441,7 +3517,6 @@ function deleteWorkItem($item_id, $courseInfo)
             }
         }
     }
-
     return $file_deleted;
 }
 

+ 27 - 21
main/work/work_list.php

@@ -62,15 +62,8 @@ Display :: display_header(null);
 echo '<div class="actions">';
 echo '<a href="'.api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq().'&origin='.$origin.'&gradebook='.$gradebook.'">'.Display::return_icon('back.png', get_lang('BackToWorksList'),'',ICON_SIZE_MEDIUM).'</a>';
 if (api_is_allowed_to_session_edit(false, true) && !empty($workId)) {
-    if (empty($documentsAddedInWork)) {
-        echo '<a href="'.api_get_path(WEB_CODE_PATH).'work/upload.php?'.api_get_cidreq().'&id='.$workId.'&origin='.$origin.'&gradebook='.$gradebook.'">';
-        echo Display::return_icon('upload_file.png', get_lang('UploadADocument'), '', ICON_SIZE_MEDIUM).'</a>';
-    }
-    if (!empty($documentsAddedInWork)) {
-        /*echo '<a href="'.api_get_path(WEB_CODE_PATH).'work/upload_from_template.php?'.api_get_cidreq().'&id='.$workId.'&origin='.$origin.'&gradebook='.$gradebook.'">';
-        echo Display::return_icon('import_html.png', get_lang('UploadFromTemplate'), '', ICON_SIZE_MEDIUM).'</a>';*/
-    }
-
+    echo '<a href="'.api_get_path(WEB_CODE_PATH).'work/upload.php?'.api_get_cidreq().'&id='.$workId.'&origin='.$origin.'&gradebook='.$gradebook.'">';
+    echo Display::return_icon('upload_file.png', get_lang('UploadADocument'), '', ICON_SIZE_MEDIUM).'</a>';
 }
 echo '</div>';
 
@@ -83,16 +76,29 @@ if (!empty($my_folder_data['description'])) {
     echo '<p><div><strong>'.get_lang('Description').':</strong><p>'.Security::remove_XSS($my_folder_data['description']).'</p></div></p>';
 }
 
-//echo $documentsAddedInWork;
+$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
+$item_id = isset($_REQUEST['item_id']) ? intval($_REQUEST['item_id']) : null;
+
+switch ($action) {
+    case 'delete':
+        $file_deleted = deleteWorkItem($item_id, $courseInfo);
+
+        if (!$file_deleted) {
+            Display::display_error_message(get_lang('YouAreNotAllowedToDeleteThisDocument'));
+        } else {
+            Display::display_confirmation_message(get_lang('TheDocumentHasBeenDeleted'));
+        }
+        break;
+}
 
 $result = getWorkDateValidationStatus($work_data);
 echo $result['message'];
-
 $check_qualification = intval($my_folder_data['qualification']);
 
 if (!empty($work_data['enable_qualification']) && !empty($check_qualification)) {
     $type = 'simple';
 
+
     $columns = array(
         get_lang('Type'),
         get_lang('FirstName'),
@@ -105,14 +111,14 @@ if (!empty($work_data['enable_qualification']) && !empty($check_qualification))
     );
 
     $column_model   = array (
-        array('name'=>'type',           'index'=>'file',            'width'=>'12',   'align'=>'left', 'search' => 'false'),
-        array('name'=>'firstname',      'index'=>'firstname',       'width'=>'35',   'align'=>'left', 'search' => 'true'),
-        array('name'=>'lastname',		'index'=>'lastname',        'width'=>'35',   'align'=>'left', 'search' => 'true'),
-        array('name'=>'title',          'index'=>'title',           'width'=>'40',   'align'=>'left', 'search' => 'false', 'wrap_cell' => 'true'),
-        array('name'=>'qualification',	'index'=>'qualification',	'width'=>'20',   'align'=>'left', 'search' => 'true'),
-        array('name'=>'sent_date',           'index'=>'sent_date',            'width'=>'50',   'align'=>'left', 'search' => 'true', 'wrap_cell' => 'true'),
+        array('name'=>'type', 'index'=>'file', 'width'=>'12',   'align'=>'left', 'search' => 'false'),
+        array('name'=>'firstname', 'index'=>'firstname', 'width'=>'35', 'align'=>'left', 'search' => 'true'),
+        array('name'=>'lastname', 'index'=>'lastname', 'width'=>'35', 'align'=>'left', 'search' => 'true'),
+        array('name'=>'title', 'index'=>'title', 'width'=>'40',   'align'=>'left', 'search' => 'false', 'wrap_cell' => 'true'),
+        array('name'=>'qualification',	'index'=>'qualification', 'width'=>'20',   'align'=>'left', 'search' => 'true'),
+        array('name'=>'sent_date', 'index'=>'sent_date', 'width'=>'20',   'align'=>'left', 'search' => 'true', 'wrap_cell' => 'true'),
         array('name'=>'qualificator_id','index'=>'qualificator_id', 'width'=>'30',   'align'=>'left', 'search' => 'true'),
-        array('name'=>'actions',        'index'=>'actions',         'width'=>'40',   'align'=>'left', 'search' => 'false', 'sortable'=>'false')
+        array('name'=>'actions', 'index'=>'actions', 'width'=>'40', 'align'=>'left', 'search' => 'false', 'sortable'=>'false')
     );
 } else {
     $type = 'complex';
@@ -130,9 +136,9 @@ if (!empty($work_data['enable_qualification']) && !empty($check_qualification))
         array('name'=>'type',           'index'=>'file',            'width'=>'12',   'align'=>'left', 'search' => 'false'),
         array('name'=>'firstname',      'index'=>'firstname',       'width'=>'35',   'align'=>'left', 'search' => 'true'),
         array('name'=>'lastname',		'index'=>'lastname',        'width'=>'35',   'align'=>'left', 'search' => 'true'),
-        array('name'=>'title',          'index'=>'title',           'width'=>'40',   'align'=>'left', 'search' => 'false', 'wrap_cell' => "true"),
-        array('name'=>'sent_date',       'index'=>'sent_date',            'width'=>'50',   'align'=>'left', 'search' => 'true', 'wrap_cell' => 'true'),
-        array('name'=>'actions',        'index'=>'actions',         'width'=>'40',   'align'=>'left', 'search' => 'false', 'sortable'=>'false')
+        array('name'=>'title',          'index'=>'title',           'width'=>'60',   'align'=>'left', 'search' => 'false', 'wrap_cell' => "true"),
+        array('name'=>'sent_date',       'index'=>'sent_date',      'width'=>'30',   'align'=>'left', 'search' => 'true', 'wrap_cell' => 'true', 'sortable'=>'false'),
+        array('name'=>'actions',        'index'=>'actions',         'width'=>'20',   'align'=>'left', 'search' => 'false', 'sortable'=>'false')
     );
 }