request()['limit'] ? c::db()->escape($this->request()['limit']) : 20; $status = $this->request()['status'] ? c::db()->escape($this->request()['status']) : 'all'; $type = $this->request()['type'] ? c::db()->escape($this->request()['type']) : 'all'; $search = $this->request()['search'] ? c::db()->escape($this->request()['search']) : ''; $q = ' SELECT -WILD- FROM `call` c LEFT JOIN `user` uf ON uf.id_user=c.id_user_from LEFT JOIN `user` ut ON ut.id_user=c.id_user_to LEFT JOIN admin af ON af.id_admin=c.id_admin_from LEFT JOIN admin at ON at.id_admin=c.id_admin_to WHERE 1=1 '; if ($status != 'all') { if (!is_array($status)) { $status = [$status]; } foreach ($status as $s) { $st .= ($st ? ' OR ' : '').' c.status="'.$s.'" '; } $q .= ' AND ('.$st.') '; } if (!c::admin()->permission()->check(['global', 'support-all', 'support-view', 'support-crud' ])) { // only display support to their number $q .= ' AND ( c.from="'.Phone::clean(c::admin()->phone).'" OR c.to="'.Phone::clean(c::admin()->phone).'" )'; } if ($search) { $q .= Crunchbutton_Query::search([ 'search' => stripslashes($search), 'fields' => [ 'uf.name' => 'like', 'uf.phone' => 'like', 'ut.name' => 'like', 'ut.phone' => 'like', 'af.name' => 'like', 'af.phone' => 'like', 'at.name' => 'like', 'at.phone' => 'like', 'c.id_call' => 'liker' ] ]); } $q .= ' GROUP BY c.id_call '; // get the count $count = 0; $r = c::db()->query(str_replace('-WILD-','COUNT(*) co', $q)); while ($c = $r->fetch()) { $count++; } $q .= ' ORDER BY c.date_start DESC LIMIT '.$limit.' '; // do the query $d = []; $r = c::db()->query(str_replace('-WILD-',' c.id_call, c.direction, c.date_start, c.date_end, c.location_to, c.location_from, c.status, c.twilio_id, c.recording_url, c.recording_duration, c.from, c.to, uf.name as user_from, ut.name as user_to, at.name as admin_to, at.name as admin_from, c.id_user_from, c.id_user_to, c.id_admin_from, c.id_admin_to ', $q)); while ($o = $r->fetch()) { if ($o->direction == 'inbound') { if ($o->user_from) { $name = $o->user_from; } if ($o->admin_from) { $name = $o->admin_from; } if (!$name) { $o->from_name = Phone::name($o->from); } } else { if ($o->user_to) { $name = $o->user_to; } if ($o->admin_to) { $name = $o->admin_to; } if (!$name) { $o->to_name = Phone::name($o->to); } } $d[] = $o; } echo json_encode([ 'count' => intval($count), 'pages' => ceil($count / $limit), 'page' => $page, 'results' => $d ]); exit; } /* public function _twilio() { //"Status" => "in-progress", $i = 0; $max = 5; foreach(c::twilio()->account->calls->getIterator(0,$max,[ 'Direction' => 'inbound', 'To' => '+1_PHONE_' ]) as $call) { if ($i == $max) { break; } $i++; $call->from = preg_replace('/^\+1/','',$call->from); $support = Support::byPhone($call->from); $ticket = []; if ($support && $support->get(0)) { $ticket = [ 'id_support' => $support->get(0)->id_support, 'id_order' => $support->get(0)->id_order, 'status' => $support->get(0)->status, 'id_user' => $support->get(0)->id_user, 'id_admin' => $support->get(0)->id_admin ]; } $calls[] = [ 'from' => $call->from, 'status' => $call->status, 'start_time' => $call->start_time, 'end_time' => $call->end_time, 'sid' => $call->sid, 'ticket' => $ticket ]; } echo json_encode($calls); exit; } */ }