· 9 years ago · Dec 04, 2016, 04:10 PM
1<script type="text/javascript" src="<?php echo base_url(); ?>assets/front/js/jquery-1.11.3.js"></script>
2<script type="text/javascript" src="<?php echo base_url(); ?>assets/front/js/knockout-3.4.0.js"></script>
3<script type="text/javascript" src="<?php echo base_url(); ?>assets/front/js/moment.js"></script>
4<br>
5<br>
6<br><br>
7<br>
8<br>
9<br>
10<br>
11<br><br>
12<br>
13<br>
14<div id="cht-sec">
15 <div class="row" style="width: 600px;">
16 <div class="col-lg-12">
17 <div class="col-lg-4">
18 <div style="width: 150px;
19 height: 150px;
20 overflow: auto;" data-bind="foreach: conversations">
21 <div data-bind="click: $root.loadMessages">
22 <div >
23 <b data-bind="text: fromuser"></b>
24 <span data-bind="text: message"></span>
25 <span data-bind="text: moment(timestamp).startOf('hour').fromNow(); "></span>
26 </div>
27 </div>
28 </div>
29 </div>
30 <div class="col-lg-6" data-bind="with:msgVm">
31 <div style="width: 350px;
32 height: 350px;
33 overflow: auto;" data-bind="foreach: messages">
34 <div>
35 <b data-bind="text: fromuser"></b>:
36 <span data-bind="text: message"></span>
37 <span data-bind="text: moment(timestamp).startOf('hour').fromNow(); "></span>
38 </div>
39 </div>
40 <textarea data-bind="value: message,valueUpdate: 'afterkeydown', enterkey:sendMsg"></textarea>
41 <button data-bind="click:sendMsg">Send</button>
42 </div>
43 </div>
44 </div>
45</div>
46
47<script type="text/javascript">
48 ko.bindingHandlers.enterkey = {
49 init: function (element, valueAccessor, allBindings, viewModel) {
50 var callback = valueAccessor();
51 $(element).keypress(function (event) {
52 var keyCode = (event.which ? event.which : event.keyCode);
53 if (keyCode === 13) {
54 callback.call(viewModel);
55 return false;
56 }
57 return true;
58 });
59 }
60 };
61
62 var MessageVM = function(myId){
63 var me = this;
64 me.ur = "/msp/";
65 me.timer = null;
66 me.myId = ko.observable(myId);
67 me.toId = ko.observable();
68 me.isLoading = ko.observable(false);
69 me.messages = ko.observableArray([]);
70 me.message = ko.observable('');
71 me.isSending = ko.observable(false);
72 me.getMessages = function(){
73 me.isLoading(true);
74 $.post(me.ur + "users/chatlists",{to: me.toId(), from: me.myId()},function(d){
75 me.messages(d.data);
76 me.isLoading(false);
77 });
78 };
79
80
81 me.sendMsg = function(){
82 me.isSending(true);
83 $.post(me.ur + "users/insertmessage",{ to:me.toId(), from: me.myId(), msg: me.message()},function(d){
84 me.message('');
85 me.isSending(false);
86 });
87 };
88
89 me.start = function(toId){
90 me.toId(toId);
91 me.timer = setInterval(function(){
92 me.getMessages();
93 },2000);
94 };
95 me.stop = function(){
96 try{
97 clearInterval(me.timer);
98 }catch(e){}
99 };
100 };
101 var MainVM = function(){
102 var me = this;
103 me.isLoading = ko.observable(false);
104 me.timer = null;
105 me.ur = "/msp/";
106 me.myId = <?= $this->session->userdata("logindata")['id'] ?>;
107 me.msgVm = new MessageVM(me.myId);
108 me.conversations = ko.observableArray([]);
109 me.getConversations = function(){
110 me.isLoading(true);
111 me.conversations.removeAll();
112 $.post(me.ur + "users/messagelist",{},function(p){
113 for (i in p.data) {
114 me.conversations.push(p.data[i]);
115 }
116 me.isLoading(false);
117 });
118 };
119 me.loadMessages = function(d,e){
120 me.msgVm.start(d.fromid);
121 };
122 me._init = function(){
123 me.getConversations();
124 me.timer = setInterval(function(){
125 me.getConversations();
126 },5000);
127 };
128 me._init();
129 };
130
131
132 var chatObj = new MainVM();
133 ko.applyBindings(chatObj,$('#cht-sec')[0]);
134</script>
135=====================================================================================
136
137 function messagelist() {
138 $data = array();
139 $userid = $this->session->userdata("logindata");
140 //$query = "SELECT m.id,m.message,m.timestamp,m.fromid,m.toid,u.username as fromuser FROM `messages` as m INNER JOIN `users` as u ON m.fromid = u.id WHERE (m.fromid = {$userid['id']} OR m.toid = {$userid['id']}) GROUP BY fromuser ORDER BY `timestamp` DESC";
141 $query = "SELECT *
142FROM messages p
143WHERE timestamp =
144 (SELECT max(timestamp) FROM messages p2
145 WHERE p2.fromid = p.fromid
146 AND p2.toid = p.toid AND fromid NOT IN ('" . $userid['id'] . "') AND toid = '" . $userid['id'] . "')
147GROUP BY fromid
148ORDER BY timestamp DESC
149LIMIT 1000";
150 $result = $this->db->query($query);
151 $json = $result->result_array();
152 $data = ['data' => $json];
153 return json_encode($data);
154 exit();
155 }
156
157
158
159
160
161 function insertmsg($to,$from,$msg) {
162 $data = array();
163 $fromUser = $this->db->query("SELECT * FROM `users` WHERE `id` = $from")->result_array();
164 $fromName = $fromUser[0]['username'];
165 $query = "INSERT INTO `messages`
166 SET fromid = '" . $from . "', toid = '" . $to . "', message = '" . $msg . "', fromuser = '$fromName',timestamp = '" . date("Y-m-d h:i:sa") . "',time = '" . date("h:i:sa") . "'";
167 $result = $this->db->query($query);
168 $data = ['data' => $fromUser];
169 return json_encode($data);
170 }
171 function chatlists($toid, $fromid) {
172 $data = array();
173 $query1 = "SELECT * FROM `messages` WHERE (fromid = '$toid' AND toid = '$fromid') OR (fromid = '$fromid' AND toid = '$toid')";
174 $result = $this->db->query($query1);
175 $json = $result->result_array();
176 $data = ['data' => $json];
177 return json_encode($data);
178 }
179
180===================================================================================
181
182 public function messagelist() {
183 $this->load->model('users_model');
184 $post = $this->input->post();
185 $return_values = $this->users_model->messagelist();
186 return $this->output
187 ->set_content_type('application/json')
188 ->set_status_header(200)
189 ->set_output($return_values);
190 }
191
192 public function insertmessage() {
193 $this->load->model('users_model');
194 $post = $this->input->post();
195 $userid = $this->session->userdata("logindata");
196 $return_values = $this->users_model->insertmsg($post['to'],$post['from'],$post['msg']);
197 return $this->output
198 ->set_content_type('application/json')
199 ->set_status_header(200)
200 ->set_output($return_values);
201 }
202
203 public function chatlists() {
204 $this->load->model('users_model');
205 $post = $this->input->post();
206 $userid = $this->session->userdata("logindata");
207 return $this->output
208 ->set_content_type('application/json')
209 ->set_status_header(200)
210 ->set_output($this->users_model->chatlists($post['to'],$post['from']));
211 }
212=============================================================================================================
213DROP TABLE IF EXISTS `messages`;
214CREATE TABLE IF NOT EXISTS `messages` (
215 `id` int(11) NOT NULL AUTO_INCREMENT,
216 `user_id` int(11) NOT NULL,
217 `fromuser` varchar(200) NOT NULL,
218 `fromid` int(11) NOT NULL,
219 `toid` int(11) NOT NULL,
220 `message` text NOT NULL,
221 `timestamp` datetime NOT NULL,
222 `time` time NOT NULL,
223 `seen` int(11) NOT NULL,
224 PRIMARY KEY (`id`)
225) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=latin1;
226
227--
228-- Dumping data for table `messages`
229--
230
231INSERT INTO `messages` (`id`, `user_id`, `fromuser`, `fromid`, `toid`, `message`, `timestamp`, `time`, `seen`) VALUES
232(1, 0, 'ram', 9, 2, 'Hello Manoj', '2016-12-04 03:44:51', '03:44:51', 0),
233(2, 0, 'manoj', 2, 9, 'Hi Ram', '2016-12-04 03:45:34', '03:45:34', 0),
234(17, 0, 'batman', 7, 8, 'Hi Thar', '2016-12-04 03:45:34', '03:45:34', 0),
235(18, 0, 'manoj', 2, 7, 'Hi batman', '2016-12-04 03:45:34', '03:45:34', 0),
236(19, 0, 'Thar', 8, 2, 'Hi batman', '2016-12-04 03:45:34', '03:45:34', 0),
237(20, 0, 'Thar', 8, 7, 'how are you', '2016-12-04 05:17:28', '05:17:28', 0),
238(21, 0, 'batman', 7, 8, 'i a', '2016-12-04 05:24:31', '05:24:31', 0),
239(22, 0, 'batman', 7, 8, '', '2016-12-04 05:24:33', '05:24:33', 0),
240(23, 0, 'batman', 2, 8, 'sddfdf', '2016-12-04 05:26:11', '05:26:11', 0),
241(24, 0, 'Thar', 8, 7, 'ok', '2016-12-04 05:26:25', '05:26:25', 0),
242(25, 0, 'Thar', 8, 7, 'i will try', '2016-12-04 05:26:31', '05:26:31', 0),
243(26, 0, 'batman', 7, 8, 'no i am waiting for that', '2016-12-04 05:26:47', '05:26:47', 0),
244(27, 0, 'batman', 7, 8, 'then what you thin', '2016-12-04 05:27:10', '05:27:10', 0),
245(28, 0, 'Thar', 8, 7, 'noy', '2016-12-04 05:27:30', '05:27:30', 0),
246(29, 0, 'batman', 7, 8, 'no', '2016-12-04 05:27:34', '05:27:34', 0),
247(30, 0, 'Thar', 8, 7, 'so', '2016-12-04 05:27:38', '05:27:38', 0),
248(31, 0, 'batman', 7, 8, 'no', '2016-12-04 05:27:44', '05:27:44', 0),
249(32, 0, 'Thar', 8, 7, 'ok than good', '2016-12-04 05:55:31', '05:55:31', 0),
250(33, 0, 'batman', 7, 8, 'what are you thinking', '2016-12-04 05:55:58', '05:55:58', 0),
251(34, 0, 'batman', 7, 2, 'ok', '2016-12-04 05:58:00', '05:58:00', 0),
252(35, 0, 'batman', 7, 8, 'no', '2016-12-04 05:58:06', '05:58:06', 0),
253(36, 0, 'Thar', 8, 7, 'thats good', '2016-12-04 05:58:20', '05:58:20', 0),
254(37, 0, 'batman', 7, 8, 'oly', '2016-12-04 05:58:44', '05:58:44', 0),
255(38, 0, 'batman', 7, 8, 'mo', '2016-12-04 06:03:44', '06:03:44', 0),
256(39, 0, 'batman', 7, 8, 'cxlck', '2016-12-04 06:26:57', '06:26:57', 0),
257(40, 0, 'batman', 7, 8, 'lfd', '2016-12-04 01:00:27', '01:00:27', 0),
258(41, 0, 'batman', 8, 7, 'ml', '2016-12-04 06:35:59', '06:35:59', 0),
259(42, 0, 'batman', 7, 8, 'df', '2016-12-04 06:36:14', '06:36:14', 0),
260(43, 0, 'batman', 7, 2, 'bb', '2016-12-04 08:35:06', '08:35:06', 0),
261(44, 0, 'batman', 7, 2, 'vdkmd', '2016-12-04 08:35:14', '08:35:14', 0),
262(45, 0, 'batman', 7, 2, 'fgdg', '2016-12-04 08:35:15', '08:35:15', 0),
263(46, 0, 'batman', 7, 2, 'gdgf', '2016-12-04 08:35:16', '08:35:16', 0),
264(47, 0, 'batman', 7, 2, 'dfgfd', '2016-12-04 08:35:16', '08:35:16', 0),
265(48, 0, 'batman', 7, 2, 'dgd', '2016-12-04 08:35:18', '08:35:18', 0),
266(49, 0, 'batman', 7, 2, '', '2016-12-04 08:35:19', '08:35:19', 0),
267(50, 0, 'batman', 7, 2, 'gdfg', '2016-12-04 08:35:20', '08:35:20', 0),
268(51, 0, 'batman', 7, 2, 'dfgd', '2016-12-04 08:35:22', '08:35:22', 0),
269(52, 0, 'batman', 7, 2, 'gdfg', '2016-12-04 08:35:24', '08:35:24', 0),
270(53, 0, 'batman', 7, 2, 'gdfgd', '2016-12-04 08:35:26', '08:35:26', 0),
271(54, 0, 'batman', 7, 2, 'dfgd', '2016-12-04 08:35:27', '08:35:27', 0),
272(55, 0, 'batman', 7, 2, 'gdfgd', '2016-12-04 08:35:29', '08:35:29', 0),
273(56, 0, 'batman', 7, 2, 'gdg', '2016-12-04 08:35:30', '08:35:30', 0),
274(57, 0, 'batman', 7, 2, 'gdfgd', '2016-12-04 08:35:31', '08:35:31', 0),
275(58, 0, 'batman', 7, 2, 'gdgdg', '2016-12-04 08:35:32', '08:35:32', 0),
276(59, 0, 'batman', 7, 2, 'gdfg', '2016-12-04 08:35:34', '08:35:34', 0),
277(60, 0, 'batman', 7, 2, 'gf hhyhth th jtu t tt tut tty jtj ttut tut jttt tutttu tutu ndgd gdfgn bff fhfghi fhifh fhfnghf hfhnfhfhf', '2016-12-04 08:44:13', '08:44:13', 0);