From 3fb85eaf936fd47ee1e82c123e1e6e5a2e9641ae Mon Sep 17 00:00:00 2001 From: Swetalina Mishra Date: Fri, 23 Sep 2022 16:06:13 +0530 Subject: [PATCH] Mention Feature Added --- .../Component/PostcaseComponent.php | 17 ++++ app/Controller/EasycasesController.php | 12 ++- app/Controller/UsersController.php | 74 +++++++++++++++++- app/Model/User.php | 78 ++++++++++++++++++- app/View/Elements/top_bar.ctp | 5 ++ app/View/Elements/top_bar_v2.ctp | 6 ++ app/View/Elements/top_menu_options_icon.ctp | 5 ++ .../Elements/top_menu_options_icon_v2.ctp | 5 ++ app/View/Users/json_mentioned.ctp | 33 ++++++++ app/webroot/js/dashboard_v1.js | 54 ++++++++++++- app/webroot/js/script_v1.js | 25 +++++- database.sql | 20 ++++- 12 files changed, 326 insertions(+), 8 deletions(-) create mode 100644 app/View/Users/json_mentioned.ctp diff --git a/app/Controller/Component/PostcaseComponent.php b/app/Controller/Component/PostcaseComponent.php index 69dd47d..18baf3b 100644 --- a/app/Controller/Component/PostcaseComponent.php +++ b/app/Controller/Component/PostcaseComponent.php @@ -564,8 +564,25 @@ public function casePosting($formdata, $fromMobile = null, $gitissue = array()) } } } else { + $Mconditions = array('EasycaseMention.easycase_id' => $mtask_id, 'EasycaseMention.comment_id' => 0,'EasycaseMention.project_id' => $postParam['Easycase']['project_id']); + $EasycaseMention->deleteAll($Mconditions); // $easycaseMentionList = $EasycaseMention->find('list',array('conditions'=>array('easycase_id'=>$mtask_id,'comment_id'=>0),'fields'=>array('id'))); } + if ($is_save_mention == 0) { + foreach ($mention_array['mention_type_id'] as $mk=>$mv) { + $marray = array(); + $marray['EasycaseMention']['company_id'] = SES_COMP; + $marray['EasycaseMention']['project_id'] = $postParam['Easycase']['project_id']; + $marray['EasycaseMention']['mention_type_id'] = $mv; + $marray['EasycaseMention']['mention_type'] = $mention_array['mention_type'][$mk] == "task" ? 2: 1 ; + $marray['EasycaseMention']['easycase_id'] = $mtask_id; + $marray['EasycaseMention']['comment_id'] = $mcomment_id; + $marray['EasycaseMention']['mention_message'] = $postParam['Easycase']['message']; + $marray['EasycaseMention']['created'] = GMT_DATETIME; + $marray['EasycaseMention']['mention_by'] = SES_ID; + $EasycaseMention->saveAll($marray); + } + } } } $Project = ClassRegistry::init('Project'); diff --git a/app/Controller/EasycasesController.php b/app/Controller/EasycasesController.php index 4280234..3ef9578 100644 --- a/app/Controller/EasycasesController.php +++ b/app/Controller/EasycasesController.php @@ -8359,7 +8359,7 @@ public function ajax_task_recurring() } echo json_encode($arr); exit; - } + } public function edit_task_details() { $this->layout = 'ajax'; @@ -8431,6 +8431,16 @@ public function edit_task_details() $arr['checklists'][$key]['CheckList']['title'] = $frmt->formatCms($val['CheckList']['title']); } } + $arr['mention_array'] = array(); + $this->loadModel('EasycaseMention'); + $case_mntn_lst = $this->EasycaseMention->find("all",array("conditions"=>array("EasycaseMention.easycase_id"=>$casedetails['Easycase']['id'],"EasycaseMention.comment_id"=>0))); + if(!empty($case_mntn_lst)){ + foreach($case_mntn_lst as $km =>$vm){ + $arr['mention_array']["mention_id"][$km] = $vm["EasycaseMention"]["id"]; + $arr['mention_array']["mention_type_id"][$km] = $vm["EasycaseMention"]["mention_type_id"]; + $arr['mention_array']["mention_type"][$km] = $vm["EasycaseMention"]["mention_type"] == 1 ? "user" : "task" ; + } + } // Fetch custom field values of task $caseId = $casedetails['Easycase']['id']; diff --git a/app/Controller/UsersController.php b/app/Controller/UsersController.php index c4b9d3d..052330e 100644 --- a/app/Controller/UsersController.php +++ b/app/Controller/UsersController.php @@ -8133,7 +8133,79 @@ function updateLeftMenu($last_user_id = 0){ exit; } - + public function ajax_mentioned_list() + { + $this->layout = 'ajax'; + $limit1 = $this->params->data['limit1']; + $limit2 = $this->params->data['limit2']; + $project_id = $this->params->data['projid']; + if ($project_id == 'all') { + $cond = ''; + $prj = array(); + } else { + $cond = "AND `Project`.`uniq_id` = '" . $project_id . "'"; + $prj = $this->Project->findByUniqId($project_id); + } + + if (!$this->Format->isAllowed('View All Task', $roleAccess)) { + // $cond .= " AND (Easycase.assign_to=" . SES_ID . " OR Easycase.user_id=".SES_ID.") "; + } + if (SES_TYPE < 3) { + if ($project_id == 'all') { + $cond .= " AND EasycaseMention.mention_type='1' AND EasycaseMention.company_id='".SES_COMP."'"; + } else { + $cond .= " AND EasycaseMention.mention_type='1' AND EasycaseMention.project_id ='".$prj["Project"]["id"]."' AND EasycaseMention.company_id='".SES_COMP."'"; + } + } else { + if ($project_id == 'all') { + $cond .= " AND EasycaseMention.mention_type_id=" . SES_ID . " AND EasycaseMention.mention_type='1' AND EasycaseMention.company_id='".SES_COMP."'"; + } else { + $cond .= " AND EasycaseMention.mention_type_id=" . SES_ID . " AND EasycaseMention.mention_type='1' AND EasycaseMention.project_id ='".$prj["Project"]["id"]."' AND EasycaseMention.company_id='".SES_COMP."'"; + } + } + + $clt_sql = 1; + if ($this->Auth->user('is_client') == 1) { + $clt_sql = "((Easycase.client_status = " . $this->Auth->user('is_client') . " AND Easycase.user_id = " . $this->Auth->user('id') . ") OR Easycase.client_status != " . $this->Auth->user('is_client') . ")"; + } + + // $sql = "SELECT SQL_CALC_FOUND_ROWS `Easycase`.*,DATE_FORMAT(Easycase.actual_dt_created,'%d%m%Y') AS ddate ,`User`.id,`User`.name,`User`.short_name,`User`.photo,`Project`.id,`Project`.uniq_id,`Project`.name FROM `easycases` AS `Easycase` inner JOIN users AS `User` ON (`Easycase`.`user_id` = `User`.`id`) inner JOIN projects AS `Project` ON (`Easycase`.`project_id` = `Project`.`id`) inner JOIN project_users AS `ProjectUser` ON (`Easycase`.`project_id` = `ProjectUser`.`project_id` AND `ProjectUser`.`user_id` = '" . SES_ID . "' AND `ProjectUser`.`company_id` = '" . SES_COMP . "') WHERE Project.isactive='1' AND " . $clt_sql . " AND Easycase.isactive='1' $cond ORDER BY Easycase.actual_dt_created DESC LIMIT $limit1,$limit2"; + $sql = "SELECT SQL_CALC_FOUND_ROWS EasycaseMention.*,DATE_FORMAT(EasycaseMention.created,'%d%m%Y') AS ddate ,`Easycase`.id,`Easycase`.uniq_id,`Easycase`.title,`Easycase`.case_no,`MentionedUser`.id,`MentionedUser`.name,`MentionedUser`.short_name,`MentionedUser`.photo,`MentionedByUser`.id,`MentionedByUser`.name,`MentionedByUser`.short_name,`MentionedByUser`.photo,`Project`.id,`Project`.uniq_id,`Project`.name FROM easycase_mentions AS EasycaseMention inner JOIN `easycases` AS `Easycase` ON (Easycase.id = EasycaseMention.easycase_id) inner JOIN users AS `MentionedByUser` ON (`EasycaseMention`.`mention_by` = `MentionedByUser`.`id`) inner JOIN users as MentionedUser ON (`EasycaseMention`.`mention_type_id` = `MentionedUser`.`id`) inner JOIN projects AS `Project` ON (`EasycaseMention`.`project_id` = `Project`.`id`) WHERE Project.isactive='1' AND " . $clt_sql . " AND Easycase.isactive='1' $cond ORDER BY EasycaseMention.created DESC LIMIT $limit1,$limit2"; + // echo $sql;exit; + $activity = $this->User->query($sql); + $tot = $this->User->query("SELECT FOUND_ROWS() as total"); + // echo "
";echo $sql;print_r($activity);exit;
+        $total = $tot[0][0]['total'];
+
+        /*$parent_task_id = array_filter(Hash::combine($activity, '{n}.Easycase.id', '{n}.Easycase.parent_task_id'));
+        $related_tasks = !empty($parent_task_id) ? $this->Easycase->getSubTasks($parent_task_id) : array();*/
+        $related_tasks = array();
+
+        //This section is meant for json loading.
+        //Load the helpers
+        $view = new View($this);
+        $tz = $view->loadHelper('Tmzone');
+        $dt = $view->loadHelper('Datetime');
+        $csq = $view->loadHelper('Casequery');
+        $fmt = $view->loadHelper('Format');
+        if ($total != 0) {
+            $frmtActivity['activity'] = array();
+            // echo "
";print_r($activity);exit;
+            $frmtActivity = $this->User->formatMentionList($activity, $total, $fmt, $dt, $tz, $csq, $related_tasks, 1);
+            //   echo "
";print_r($frmtActivity);exit;
+            //Making one array to send in json format.
+            $lastDate = '';
+            $repeatDate = $frmtActivity['activity']['0']['EasycaseMention']['lastDate'];
+            $ajax_activity['activity'] = $frmtActivity['activity'];
+            $ajax_activity['total'] = $frmtActivity['total'];
+        } else {
+            $ajax_activity['activity'] = "";
+            $ajax_activity['total'] = $total;
+        }
+        $this->set('ajax_activity', json_encode($ajax_activity));
+        $this->set('related_tasks', $related_tasks);
+        //End
+    }   
     public function ajax_get_location($whitelist = ['127.0.0.1', '::1']){
     	$ip = $this->Format->getRealIpAddr();
     	#$ip = '182.66.61.253';
diff --git a/app/Model/User.php b/app/Model/User.php
index 8420919..3091fe4 100644
--- a/app/Model/User.php
+++ b/app/Model/User.php
@@ -1586,7 +1586,83 @@ function addDummyUser($proj_id, $comp_id, $user_id, $comp_uid){
 		}
 		return $dumy_users;
 	}
-    
+    function formatMentionList($activity, $total, $fmt, $dt, $tz, $csq, $related_tasks = array(), $flg=0) {
+        if ($total) {
+            App::import('Component', 'Format');
+            $format = new FormatComponent(new ComponentCollection);
+            
+            $dateCurnt = $tz->GetDateTime(SES_TIMEZONE, TZ_GMT, TZ_DST, TZ_CODE, GMT_DATETIME, "date");
+            foreach ($activity as $k => $v) {
+                $updated = $tz->GetDateTime(SES_TIMEZONE, TZ_GMT, TZ_DST, TZ_CODE, $v['EasycaseMention']['created'], "datetime");
+                $lastDate = $dt->dateFormatOutputdateTime_day($updated, $dateCurnt, '', 1);
+                $lastDateArr = explode(',', $lastDate);
+                $activity[$k]['MentionedUser']['profile_bg_clr'] = $this->getProfileBgColr($v['MentionedUser']['id']);
+                $activity[$k]['MentionedByUser']['profile_bg_clr'] = $this->getProfileBgColr($v['MentionedByUser']['id']);
+                $activity[$k]['Easycase']['id'] = $v['Easycase']['id'];
+
+                $id = $v['Easycase']['id'];
+                $activity[$k]['MentionedUser']['full_name'] = ucfirst($fmt->formatText($v['MentionedUser']['name']));
+                $activity[$k]['MentionedByUser']['full_name'] = ucfirst($fmt->formatText($v['MentionedByUser']['name']));
+
+                $activity[$k]['MentionedUser']['name'] = ucfirst($fmt->formatText($v['MentionedUser']['name']));
+                $activity[$k]['MentionedByUser']['name'] = ucfirst($fmt->formatText($v['MentionedByUser']['name']));
+
+                $activity[$k]['EasycaseMention']['lastDate'] = $lastDate;
+                //$activity[$k]['Easycase']['uniqId'] = $csq->getCaseUniqId($v['Easycase']['case_no'], $v['Easycase']['project_id']);
+                $msg = '';
+                //$casetitle = $csq->getTaskTitle($v['Easycase']['id'], $v['Easycase']['istype'], $v['Easycase']['case_no'], $v['Project']['id']);
+                $casetitle = $v['Easycase']['title'];
+
+                $frmt_title_data = $fmt->formatText($casetitle);
+                $frmt_title_data = $fmt->formatTitle($fmt->convert_ascii($fmt->longstringwrap($frmt_title_data)));
+
+                //$frmt_title_data = $fmt->showSubtaskTitle($frmt_title_data, $id, $related_tasks, 1, $activity[$k]['Easycase']);
+				
+                $eTitle = '#' . $v['Easycase']['case_no'] . ": " . $frmt_title_data . '';
+				//$eTitle = $frmt_title_data;
+                $activity[$k]['Easycase']['title_data'] = $eTitle;
+                $new_mesg = '';
+                $new_text = '';
+                    $msg = ' '.__('Created',true).' 

' . $eTitle . '

'; + if($activity[$k]['EasycaseMention']['mention_type_id'] == SES_ID){ + $mntn_user = __("You have been mentioned"); + } else{ + $mntn_user = $activity[$k]['MentionedUser']['full_name']." ".__("have been mentioned"); + } + if($activity[$k]['EasycaseMention']['comment_id'] == 0){ + $mntn_typ = __("in a task description"); + }else { + $mntn_typ = __("in a comment"); + } + if($activity[$k]['EasycaseMention']['mention_by'] == SES_ID){ + if($activity[$k]['EasycaseMention']['mention_type_id'] == SES_ID){ + $mntn_by = ""; + } else{ + $mntn_by = __("by Me"); + } + + } else { + $mntn_by = __("by")." ".$activity[$k]['MentionedByUser']['full_name']; + } + $new_mesg = ''.$mntn_user.' '.$mntn_typ.' '.$mntn_by .''; + + $new_mesg .= '

' . $eTitle . '

'; + // $new_text = $eTitle; + $activity[$k]['EasycaseMention']['msg'] = $activity[$k]['EasycaseMention']['mention_message']; + $activity[$k]['EasycaseMention']['nmsg'] = $new_mesg; + // $activity[$k]['Easycase']['ntxt'] = $new_text; + if ($project_id != 'all') { + if ($project_id == $v['Project']['id']) { + $activity[$k]['Project']['name'] = ''; + } else { + $activity[$k]['Project']['name'] = $v['Project']['name']; + } + } + } + $activity = array_values($activity); + } + return array('activity' => $activity, 'total' => $total); + } function getUserDtls($uid) { $this->recursive = -1; $usrDtls = $this->find('first', array('conditions' => array('User.id' => $uid), 'fields' => array('User.name', 'User.photo', 'User.email', 'User.last_name', 'User.dt_created', 'User.dt_last_login','User.btprofile_id','User.uniq_id'))); diff --git a/app/View/Elements/top_bar.ctp b/app/View/Elements/top_bar.ctp index 43613d7..4eb0130 100644 --- a/app/View/Elements/top_bar.ctp +++ b/app/View/Elements/top_bar.ctp @@ -1316,6 +1316,11 @@ PAGE_NAME == 'groupupdatealerts' || PAGE_NAME == 'importexport' || PAGE_NAME == +
  • + + + +
  • diff --git a/app/View/Elements/top_bar_v2.ctp b/app/View/Elements/top_bar_v2.ctp index b9d3e1a..d01e2e9 100644 --- a/app/View/Elements/top_bar_v2.ctp +++ b/app/View/Elements/top_bar_v2.ctp @@ -1569,6 +1569,12 @@ +
  • + + + +
  • diff --git a/app/View/Elements/top_menu_options_icon.ctp b/app/View/Elements/top_menu_options_icon.ctp index ba1cdc4..2fcbae6 100644 --- a/app/View/Elements/top_menu_options_icon.ctp +++ b/app/View/Elements/top_menu_options_icon.ctp @@ -48,6 +48,11 @@ +
  • + + alternate_email + +
  • Format->isAllowed('View Calendar',$roleAccess)){ ?>
  • diff --git a/app/View/Elements/top_menu_options_icon_v2.ctp b/app/View/Elements/top_menu_options_icon_v2.ctp index eab3759..bf222c4 100644 --- a/app/View/Elements/top_menu_options_icon_v2.ctp +++ b/app/View/Elements/top_menu_options_icon_v2.ctp @@ -20,5 +20,10 @@
  • +
  • + + alternate_email + +
  • \ No newline at end of file diff --git a/app/View/Users/json_mentioned.ctp b/app/View/Users/json_mentioned.ctp new file mode 100644 index 0000000..48e6c54 --- /dev/null +++ b/app/View/Users/json_mentioned.ctp @@ -0,0 +1,33 @@ +
    +
    +
    +
    {{data.EasycaseMention.lastDate}}
    + + +
    + +
    + + + Loading + + {{data.User.name.charAt(0)}} + +
    + +
    + +
    +
    + +
    +
    +
    + +
    + +
    + \ No newline at end of file diff --git a/app/webroot/js/dashboard_v1.js b/app/webroot/js/dashboard_v1.js index 4021a83..53e3b0a 100644 --- a/app/webroot/js/dashboard_v1.js +++ b/app/webroot/js/dashboard_v1.js @@ -1997,7 +1997,7 @@ easycase.loadTinyMce = function(csAtId) { } else { tinymce.init({ selector: "#txa_comments" + csAtId, - plugins: 'image paste importcss autolink directionality fullscreen link template table charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help', + plugins: 'image paste importcss autolink directionality fullscreen link template table charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help mention', menubar: false, branding: false, statusbar: false, @@ -2019,6 +2019,32 @@ easycase.loadTinyMce = function(csAtId) { autoresize_on_init: true, autoresize_bottom_margin: 20, content_css: HTTP_ROOT + 'css/tinymce.css', + mentions: { + source: function(query, process, delimiter) { + var proj_uniq_id = $('#projFil').val(); + var murl = HTTP_ROOT + "requests/getUserTaskList"; + $.post(murl, { + proj_uniq_id: proj_uniq_id, + search_query: query + }, function(data) { + if (data) { + process(data); + $(".rte-autocomplete").css({ + "z-index": "999999 !important" + }); + } + }, 'json'); + }, + insert: function(item) { + mention_array['mention_type_id'].push(item.id); + mention_array['mention_type'].push(item.type); + if (item.type == "task") { + return '' + item.name + ' '; + } else { + return '@' + item.name + ' '; + } + } + }, setup: function(ed) { ed.on('Click', function(ed, e) { $('#start_time' + csAtId).timepicker('hide'); @@ -2390,7 +2416,29 @@ easycase.showMentionList = function() { loadMentionList(''); } } - +function loadMentionList(type) { + var displayed = $("#display_mention").val(); + var prj_id = $("#projFil").val(); + var limit1, limit2, projid; + if (type == "more") { + limit1 = displayed; + limit2 = 10; + projid = prj_id; + } else { + limit1 = 0; + limit2 = 29; + projid = prj_id; + } + if (type == "more") { + $(".morebar").show(); + } else { + $("#caseLoader").show(); + } + $("#ajax_mentioned_tmpl").show(); + var strURL = HTTP_ROOT + "users/ajax_mentioned_list/"; + angular.element(document.getElementById('mentionController')).scope().getMentionList(strURL, type, limit1, limit2, projid); + angular.element(document.getElementById('mentionController')).scope().$apply(); +} function activityDetail(caseNo, cas, no, popup) { $("#myModalDetail").modal(); $(".task_details_popup").show(); @@ -11029,7 +11077,7 @@ function editmessage(obj, id, projid) { } else { tinymce.init({ selector: "#edit_reply_txtbox" + id, - plugins: 'image paste importcss autolink directionality fullscreen link template table charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help', + plugins: 'image paste importcss autolink directionality fullscreen link template table charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help mention', menubar: false, branding: false, statusbar: false, diff --git a/app/webroot/js/script_v1.js b/app/webroot/js/script_v1.js index 789ae55..e728fed 100644 --- a/app/webroot/js/script_v1.js +++ b/app/webroot/js/script_v1.js @@ -8708,7 +8708,7 @@ function openEditor(editormessage, basic_or_free) { } else { tinymce.init({ selector: "#CS_message", - plugins: 'paste importcss autolink image directionality fullscreen link template charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help', + plugins: 'paste importcss autolink image directionality fullscreen link template charmap hr pagebreak nonbreaking anchor advlist lists wordcount autoresize help mention', menubar: false, branding: false, statusbar: false, @@ -8730,6 +8730,29 @@ function openEditor(editormessage, basic_or_free) { autoresize_on_init: true, autoresize_bottom_margin: 20, content_css: HTTP_ROOT + 'css/tinymce.css', + mentions: { + source: function(query, process, delimiter) { + var proj_uniq_id = $('.prj-select').val(); + var murl = HTTP_ROOT + "requests/getUserTaskList"; + $.post(murl, { + proj_uniq_id: proj_uniq_id, + search_query: query + }, function(data) { + if (data) { + process(data); + } + }, 'json'); + }, + insert: function(item) { + mention_array['mention_type_id'].push(item.id); + mention_array['mention_type'].push(item.type); + if (item.type == "task") { + return '' + item.name + ' '; + } else { + return '@' + item.name + ' '; + } + } + }, setup: function(ed) { ed.on('Click', function(ed, e) { $('#start_time').timepicker('hide'); diff --git a/database.sql b/database.sql index 2950f3d..c58701c 100644 --- a/database.sql +++ b/database.sql @@ -1977,7 +1977,8 @@ INSERT INTO `menus` (`id`, `parent_id`, `name`, `is_active`, `menu_type`, `menu_ (37, 0, 'Users', 1, 0, '', 6, 1, 0, '{\"url\":\"users/manage\",\"li_id\":\"\",\"a_id\":\"\",\"li_class\":\"\",\"a_class\":\"\",\"a_click\":\"\",\"li_click\":\"\",\"cnt_span\":\"\",\"a_tooltip\":\"\"}', '2020-01-10 00:00:00', '2020-01-10 00:00:00'), (38, 0, 'More', 1, 0, '', 9, 1, 0, '{\"url\":\"#\",\"li_id\":\"\",\"a_id\":\"\",\"li_class\":\"\",\"a_class\":\"\",\"a_click\":\"\",\"li_click\":\"\",\"cnt_span\":\"\",\"a_tooltip\":\"\"}', '2020-01-10 00:00:00', '2020-01-10 00:00:00'), (39, 38, 'Files', 1, 0, '', 4, 1, 0, '{\"url\":\"dashboard#files\",\"li_id\":\"\",\"a_id\":\"\",\"li_class\":\"menu-files\",\"a_class\":\"menu-files\",\"a_click\":\"return checkHashLoad(\'files\');\",\"li_click\":\"\",\"cnt_span\":\"0\",\"a_tooltip\":\"\"}', '2020-01-10 00:00:00', '2020-01-10 00:00:00'), -(42, 38, 'Archive', 1, 0, '', 7, 1, 0, '{\"url\":\"archives/listall#caselist\",\"li_id\":\"\",\"a_id\":\"\",\"li_class\":\"\",\"a_class\":\"\",\"a_click\":\"\",\"li_click\":\"\",\"cnt_span\":\"\",\"a_tooltip\":\"\"}', '2020-01-10 00:00:00', '2020-01-10 00:00:00'); +(42, 38, 'Archive', 1, 0, '', 7, 1, 0, '{\"url\":\"archives/listall#caselist\",\"li_id\":\"\",\"a_id\":\"\",\"li_class\":\"\",\"a_class\":\"\",\"a_click\":\"\",\"li_click\":\"\",\"cnt_span\":\"\",\"a_tooltip\":\"\"}', '2020-01-10 00:00:00', '2020-01-10 00:00:00'), +(57, 0, 'Mention', 1, 0, 'alternate_email', 2, 1, 0, '{\"url\":\"dashboard#mentioned_list\",\"li_id\":\"\",\"a_id\":\"left_menu_nav_tour\",\"li_class\":\"caseMenuLeft menu-mention \",\"a_class\":\"\",\"a_click\":\"return checkHashLoad(\'mentioned_list\');\",\"li_click\":\"\",\"cnt_span\":\"\",\"a_tooltip\":\"\"}', '2020-11-06 12:53:49', '2020-11-06 12:53:49'); -- -------------------------------------------------------- @@ -3901,7 +3902,24 @@ CREATE TABLE `user_menus` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -------------------------------------------------------- +-- +-- Table structure for table `easycase_mentions` +-- + +CREATE TABLE `easycase_mentions` ( + `id` int(11) NOT NULL, + `company_id` int(11) NOT NULL, + `project_id` int(11) NOT NULL, + `mention_type_id` int(11) NOT NULL, + `mention_type` int(11) NOT NULL COMMENT '1- user 2 task', + `mention_by` int(11) NOT NULL, + `easycase_id` int(11) NOT NULL, + `comment_id` int(11) DEFAULT 0, + `mention_message` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +-- -------------------------------------------------------- -- -- Table structure for table `user_notifications` --