Commit 6542e064 by Jithin

broadcast message

parent baba0c5d
......@@ -122,7 +122,12 @@ public function index()
}
if(!empty($notifications)){$this->session->set_userdata('notifications',$notifications);}
//print_r($notifications);die();
$recent = $this->Home_model->get_recent_chat($userdata['id'],$userdata['type']);
//$recent = json_decode($recent);
//PASSING VALUES TO VIEW
$template['recent'] = $recent;
$template['doctor_data'] = $doctor_data;
$template['clinic_list'] = $clinic_list;
$template['day_appointment'] = $day_appointment;
......@@ -574,9 +579,47 @@ public function recordsview()
//print_r($patient_id);die();
$userdata = $this->session->userdata('UserData');
$patient_data = $this->Patient_model->get_single_patient($patient_id);
//CODE FOR SUMMARY IN NUMBERS
$no_of_attendance = $this->Doctor_model->get_doctor_num_attendance($userdata['id']);
$no_of_billed = $this->Doctor_model->get_doctor_num_billed($userdata['id']);
$no_of_patients = $this->Doctor_model->get_doctor_num_patients($userdata['id']);
$no_of_profileview = $this->Doctor_model->get_doctor_num_profileview($userdata['id']);
if(empty($no_of_billed['amount']))
{
$no_of_billed['amount'] = 0;
}
$dash_view = array('no_of_attendance' => $no_of_attendance['count'],'no_of_billed'=>$no_of_billed['amount'],'no_of_patients' => $no_of_patients['count'],'no_of_profileview'=>$no_of_profileview['count']);
$consultation_list = $this->Doctor_model->get_single_doc_pat_consultation_list($userdata['id'],$patient_id);
//print_r($consultation_list);
if(!empty($consultation_list))
{
$booking_details = $this->Doctor_model->get_booking_details($consultation_list['0']['book_id']);
$record_data = $this->Doctor_model->get_medical_record_for_booking($consultation_list['0']['book_id']);
/*if(empty($record_data))
redirect(base_url());*/
$doctor_data = $this->Doctor_model->get_single_doctor($userdata['id']);
$patient_data = $this->Patient_model->get_single_patient($patient_id);
if(!empty($record_data))
{
$record_data['diseases'] = json_decode($record_data['diseases']);
$record_data['prescribtions'] = json_decode($record_data['prescribtions']);
$record_data['exams'] = json_decode($record_data['exams']);
$record_data['budget'] = json_decode($record_data['budget']);
}
}
//print_r($record_data);die();
$template['dash_view'] = $dash_view;
$template['patient_data'] = $patient_data;
$template['doctor_data'] = $doctor_data;
$template['booking_details'] = $booking_details;
$template['record_data'] = $record_data;
$template['consultation_list'] = $consultation_list;
$template['page'] = "doctor_medical_records_detail";
$template['page_title'] = "Records";
......@@ -591,6 +634,32 @@ public function recordsview()
}
/*AJAX FUNCTION FOR LOADING MEDICAL RECORD FOR GIVEN BOOKING ID*/
public function loadrecord()
{
$booking_id = $this->uri->segment(3);
$booking_details = $this->Doctor_model->get_booking_details($booking_id);
$record_data = $this->Doctor_model->get_medical_record_for_booking($booking_id);
//print_r($record_data);die();
$doctor_data = $this->Doctor_model->get_single_doctor($booking_details['doc_id']);
$patient_data = $this->Patient_model->get_single_patient($booking_details['pat_id']);
if(!empty($record_data))
{
$record_data['diseases'] = json_decode($record_data['diseases']);
$record_data['prescribtions'] = json_decode($record_data['prescribtions']);
$record_data['exams'] = json_decode($record_data['exams']);
$record_data['budget'] = json_decode($record_data['budget']);
}
$template['booking_details'] = $booking_details;
$template['record_data'] = $record_data;
$template['doctor_data'] = $doctor_data;
$template['patient_data'] = $patient_data;
$this->load->view('doctor_medical_records_recordview', $template);
}
/*FUNCTION FOR EDIT MEDICAL RECORDS - MEDICAL RECORDS*/
public function recordsedit()
{
......@@ -641,7 +710,6 @@ public function service()
$main_complaints = $this->Doctor_model->get_main_complaints();
$major_problems = $this->Doctor_model->get_major_problems();
//print_r($major_problems);die();
foreach ($major_problems as $key => $value)
{
$val = $this->Doctor_model->get_major_subproblems($value['id']);
......@@ -649,6 +717,8 @@ public function service()
$major_problems[$key]['sub_problem'] = $val;
}
//echo "<pre>";
//print_r($major_problems);die();
$medicines = $this->Doctor_model->get_distinct_medicines(); //for use of medicines
$exams = $this->Doctor_model->get_distinct_exams(); //for use of medicines
......@@ -1372,6 +1442,79 @@ public function check_current_user_confirmationcode()
*/
/*FUNCTION FOR DOCTOR CHAT*/
public function chat()
{
if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="DOCTOR")
{
$userdata = $this->session->userdata('UserData');
if(!empty($this->uri->segment(3)))
{
$patient_id = $this->uri->segment(3);
$patient_data = $this->Patient_model->get_single_patient($patient_id);
$opponent = array('pat_name' =>$patient_data['pt_name'],
'patient_id' => $patient_data['patientid'],
'pat_pic' => $patient_data['pt_pic']);
$this->session->set_userdata('opponentData',$opponent);
//print_r($this->session->userdata('oppenontData'));die();
redirect(base_url().'Doctor/chat');
}
$template['page'] = 'chat';
$template['page_title'] = "Chat";
$this->load->view('template/template', $template);
}
else
{
redirect(base_url());
}
}
public function sentBroadcast()
{
$DEFAULT_PATH = '/chats/';
$userdata = $this->session->userdata('UserData');
//print_r($_POST);die();
$jsonData = json_decode($_POST['json_obj']);
//print_r($jsonData);
foreach ($jsonData as $key => $val)
{
$chatid = 'P'.$val->patient_id.'@_@D'.$userdata['id'];
//print_r($chatid);
$firebaseobject = array('doctor_id' => (int)$userdata['id'],
'doctor_name' => $userdata['name'],
'doctor_photo' => $userdata['profile_photo'],
'message' => $_POST['message'],
'sender_type' =>1,
'patient_id' =>(int)$val->patient_id,
'patient_name' =>$val->pat_name,
'patient_photo' =>$val->pat_pic,
'photo_url' =>'',
'time' =>strtotime(local_time_in_server(time(),'H:i:s')),
'type' =>0,
'video_url' =>'');
//print_r($firebaseobject);
//UPDATING RECENT MSG IN MYSQL DB
$recent_obj = array('chat_id' => $chatid,
'patient_id' => $val->patient_id,
'doctor_id' => $userdata['id'],
'sender_type' =>1,
'msg' => $_POST['message'],
'photo_url' => '',
'video_url' => '',
'type'=> 0,
'time' =>strtotime(local_time_in_server(time(),'H:i:s'))
);
//print_r($recent_obj);
firebase()->push($DEFAULT_PATH .'/'.$chatid.'/', $firebaseobject);
$update = $this->Home_model->update_recent_chat($recent_obj);
}
print json_encode($update);
}
}
......@@ -483,6 +483,96 @@ class Home extends CI_Controller {
}
/*FUNCTION FOR RETRIVING SESSION DATA TO CHAT JS*/
public function get_session()
{
if($this->session->userdata('UserData'))
{
$userdata = $this->session->userdata('UserData');
//header('Content-type: application/json');
print json_encode($userdata);
}
else
{
$array = array('status' => 'error','msg' => 'Unauthorized Session' );
print json_encode($array);
}
}
/*FUNCTION FOR RETRIVING OPPONENT DATA TO CHAT JS*/
public function get_opponentData()
{
if($this->session->userdata('opponentData'))
{
$data = $this->session->userdata('opponentData');
//print_r($data);die();
unset($_SESSION['opponentData']);
print json_encode($data);
}
else
{
$array = array('status' => 'error','msg' => 'Unauthorized Session' );
print json_encode($array);
}
}
/*FUNCTION FOR RETRIVING RECENT CHAT DATA TO CHAT JS*/
public function get_recent_chat()
{
if($this->session->userdata('UserData'))
{
$userdata = $this->session->userdata('UserData');
$recent = $this->Home_model->get_recent_chat($userdata['id'],$userdata['type']);
//print_r($recent);die();
//header('Content-type: application/json');
print json_encode($recent);
}
else
{
$array = array('status' => 'error','msg' => 'Unauthorized Session' );
print json_encode($array);
}
}
/*FUNCTION FOR RETRIVING ALL CHAT USERS TO CHAT JS*/
public function get_all_chat_users()
{
if($this->session->userdata('UserData'))
{
$userdata = $this->session->userdata('UserData');
$allusers = $this->Home_model->get_all_chat_users($userdata['id'],$userdata['type']);
//print_r($allusers);die();
//header('Content-type: application/json');
print json_encode($allusers);
}
else
{
$array = array('status' => 'error','msg' => 'Unauthorized Session' );
print json_encode($array);
}
}
/*FUNCTION FOR UPDATING RECENT CHAT DATA TO CHAT JS*/
public function update_recent_chat()
{
if($this->session->userdata('UserData') and !empty($_POST))
{
//print_r($_POST);die();
$userdata = $this->session->userdata('UserData');
$this->Home_model->update_recent_chat($_POST);
$recent = $this->Home_model->get_recent_chat($userdata['id'],$userdata['type']);
//print_r($recent);die();
//header('Content-type: application/json');
print json_encode($recent);
}
else
{
$array = array('status' => 'error','msg' => 'Unauthorized Session' );
print json_encode($array);
}
}
/*FUNCTION FOR SENTING CONFRIMATION CODE FOR ACCOUNT DELETION - PATIENT AND DOCTOR*/
/*public function sentConfirmationcode($user)
{
......
......@@ -38,6 +38,10 @@ public function index()
//$clinic_list = $this->Doctor_model->get_doctor_clinic_list($userdata['id']);
//$template['clinic_list'] = $clinic_list;
//print_r($patient_data);
$recent = $this->Home_model->get_recent_chat($userdata['id'],$userdata['type']);
$template['recent'] = $recent;
$template['patient_data'] = $patient_data;
$template['policy'] = $policy;
$template['completed_consultation'] = $completed_consultation;
......@@ -601,6 +605,22 @@ public function record()
}
}
/*FUNCTION FOR PATIENT CHAT*/
public function chat()
{
if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
{
$userdata = $this->session->userdata('UserData');
$template['page'] = 'chat';
$template['page_title'] = "Chat";
$this->load->view('template/template', $template);
}
else
{
redirect(base_url());
}
}
......
<?php function set_upload_options($path, $type = 'jpg|png|gif|jpeg|bmp')
<?php
function firebase(){
//require base_url() . '/vendor/autoload.php';
require "vendor/autoload.php";
$DEFAULT_URL = 'https://ipok-178210.firebaseio.com';
$DEFAULT_TOKEN = 'uPLqbrvbDnB8hB3N4QtqiH2eZaU3BOs4JTMbj8ih';
$firebase = new \Firebase\FirebaseLib($DEFAULT_URL,$DEFAULT_TOKEN);
return $firebase;
}
function set_upload_options($path, $type = 'jpg|png|gif|jpeg|bmp')
{
//upload an image options
$config = array();
......@@ -56,33 +69,38 @@ function cpf_validator($cpf)
function change_time_to_local($dateTimeUTC = null, $dateFormat = 'H:i:s')
{
//print_r($dateTimeUTC);
$date = new DateTime(date('Y-m-d H:i:s',$dateTimeUTC), new DateTimeZone('UTC'));
//$date = new DateTime('2011-11-10 20:17:23', new DateTimeZone('UTC'));
$ip = $_SERVER['REMOTE_ADDR'];
if($ip=='::1')
{
$date->setTimezone(new DateTimeZone('UTC'));
echo $date->format('h:i:s');
echo $date->format('h:i A');
}
else
{
$rs = json_decode(file_get_contents('http://ip-api.com/json/'.$ip));
$time_Z = $rs->timezone;
$date->setTimezone(new DateTimeZone($time_Z));
echo $date->format('h:i:s A');
echo $date->format('h:i A');
}
}
/* $timeZone = 'Asia/Kolkata';
$dateTimeUTC = $dateTimeUTC ? $dateTimeUTC : date("Y-m-d H:i:s");
$date = new DateTime($dateTimeUTC, new DateTimeZone('UTC'));
$date->setTimeZone(new DateTimeZone($timeZone));
//return $date->format($dateFormat);*/
function local_time_in_server($dateTimeUTC = null, $dateFormat = 'H:i:s')
{
$date = new DateTime(date('Y-m-d H:i:s',$dateTimeUTC), new DateTimeZone('UTC'));
$ip = $_SERVER['REMOTE_ADDR'];
if($ip=='::1')
{
$date->setTimezone(new DateTimeZone('UTC'));
return $date->format('h:i A');
}
else
{
$rs = json_decode(file_get_contents('http://ip-api.com/json/'.$ip));
$time_Z = $rs->timezone;
$date->setTimezone(new DateTimeZone($time_Z));
return $date->format('h:i A');
}
}
function send_mail($msg,$email,$sub)
......
......@@ -208,7 +208,7 @@ public function get_doctor_appointments_week($doctor_id,$date)
}
public function get_single_doc_pat_attended($doc_id,$pagination)
{
$limit = 1;
$limit = 10;
$page = 1;
if(!empty($pagination)) {
$page = $pagination;
......@@ -253,7 +253,7 @@ public function get_single_doc_pat_attended_count($doc_id)
public function get_single_doc_pat_scheduled($doc_id,$pagination)
{
$limit = 1;
$limit = 10;
$page = 1;
if(!empty($pagination)) {
$page = $pagination;
......@@ -346,12 +346,13 @@ public function get_single_doc_pat_consultation_list($doc_id,$pat_id)
$this->db->select("tbl_booking.id as book_id,
tbl_booking.date as book_date,
tbl_booking.time as book_time,
tbl_booking.amount as book_price");
tbl_booking.total_sum as book_total,
tbl_booking.promo_name as promo");
$this->db->from('tbl_booking');
$this->db->where('tbl_booking.doctor_id',$doc_id);
$this->db->where('tbl_booking.booking_status',2);
$this->db->where('tbl_booking.booking_status',3); //checked
$this->db->where('tbl_booking.patient_id',$pat_id);
$this->db->order_by("tbl_booking.time_start", "asc");
$this->db->order_by("tbl_booking.time_start", "desc");
//$this->db->group_by("tbl_booking.patient_id");
//$this->db->limit($limit, $start);
$data =$this->db->get()->result_array();
......
......@@ -260,6 +260,81 @@
return $query->row_array();
}
public function get_all_chat_users($id,$type)
{
if($type=='DOCTOR')
{
$this->db->distinct('tbl_registration.id');
$this->db->select('tbl_registration.id as patient_id,
tbl_registration.name as pat_name,
tbl_registration.profile_photo as pat_pic');
$this->db->where('tbl_booking.doctor_id',$id);
$this->db->where('tbl_booking.booking_status > 0');
$this->db->where('tbl_booking.booking_status < 4');
$this->db->where('tbl_booking.payment_status',1);
$this->db->join('tbl_registration', 'tbl_registration.id = tbl_booking.patient_id', 'inner');
}
elseif($type=='PATIENT')
{
$this->db->distinct('tbl_doctors.id');
$this->db->select('tbl_doctors.id as doctor_id,
tbl_doctors.name as doc_name,
tbl_doctors.profile_pic as doc_pic');
$this->db->where('tbl_booking.patient_id',$id);
$this->db->where('tbl_booking.booking_status > 0');
$this->db->where('tbl_booking.booking_status < 4');
$this->db->where('tbl_booking.payment_status',1);
$this->db->join('tbl_doctors', 'tbl_doctors.id = tbl_booking.doctor_id', 'inner');
}
$this->db->from('tbl_booking');
$query = $this->db->get();
return $query->result_array();
}
public function get_recent_chat($id,$type)
{
if($type=='DOCTOR')
{
$this->db->select('tbl_recent_chats.*,
tbl_registration.name as pat_name,
tbl_registration.profile_photo as pat_pic');
$this->db->where('tbl_recent_chats.doctor_id',$id);
$this->db->join('tbl_registration', 'tbl_registration.id = tbl_recent_chats.patient_id', 'inner');
}
elseif($type=='PATIENT')
{
$this->db->select('tbl_recent_chats.*,
tbl_doctors.name as doc_name,
tbl_doctors.profile_pic as doc_pic');
$this->db->where('tbl_recent_chats.patient_id',$id);
$this->db->join('tbl_doctors', 'tbl_doctors.id = tbl_recent_chats.doctor_id', 'inner');
}
$this->db->order_by('tbl_recent_chats.time','desc');
$this->db->from('tbl_recent_chats');
$query = $this->db->get();
return $query->result_array();
}
public function update_recent_chat($post)
{
$sql = $this->db->insert_string('tbl_recent_chats', $post) . ' ON DUPLICATE KEY UPDATE sender_type = ' .$post['sender_type'].',msg ='.'"' .$post['msg'].'"'.',photo_url='.'"' .$post['photo_url'].'"'.',video_url='.'"' .$post['video_url'].'"'.',type='.'"' .$post['type'].'"'.',time='.$post['time'];
//print_r($this->db->last_sqlquery());die();
if($this->db->query($sql)){
$return_array = array('status'=>'success');
}
else{
$return_array = array('status'=>'fail');
}
return $return_array;
}
......
<script src="https://www.gstatic.com/firebasejs/4.12.1/firebase.js"></script>
<script>
var config = {
apiKey: "AIzaSyDTlmsPVmyS_Ca2ODQ-nLBXaMEcMSsuD7Q",
authDomain: "ipok-178210.firebaseapp.com",
databaseURL: "https://ipok-178210.firebaseio.com",
projectId: "ipok-178210",
storageBucket: "ipok-178210.appspot.com",
messagingSenderId: "1043527648730"
};
firebase.initializeApp(config);
</script>
<div ng-app='myApp'>
<div class="ip_set_two_wrapper" ng-controller="mainCtrl">
<div class="ip_sidemenu">
<ul>
<li class="active" data-toggle="tab" href="#menu1"><img src="<?php echo base_url();?>assets/images/ip_menu1.png"></li>
<li data-toggle="tab" href="#menu2"><img src="<?php echo base_url();?>assets/images/ip_menu2.png"></li>
<li data-toggle="tab" href="#menu3"><img src="<?php echo base_url();?>assets/images/ip_menu3.png"></li>
<li data-toggle="tab" href="#menu4"><img src="<?php echo base_url();?>assets/images/ip_menu4.png"></li>
<li data-toggle="tab" href="#menu5"><img src="<?php echo base_url();?>assets/images/ip_menu5.png"></li>
<li data-toggle="tab" href="#menu6"><img src="<?php echo base_url();?>assets/images/ip_menu6.png"></li>
<li data-toggle="tab" href="#menu7"><img src="<?php echo base_url();?>assets/images/ip_menu7.png"></li>
</ul>
</div>
<div class="container ip_custom_container">
<div class="ip_main_path_stream">
<ul>
<li>Dashboard<span><img src="<?php echo base_url();?>assets/images/ip_tab_list_arw.png"></span></li>
<li>Messages<span><img src="<?php echo base_url();?>assets/images/ip_tab_list_arw.png"></span></li>
<!-- <li>Bertie Potter<span><img src="<?php echo base_url();?>assets/images/ip_tab_list_arw.png"></span></li> -->
</ul>
</div>
<div class="tab-content">
<div id="menu1" class="tab-pane fade in active">
<div class="ip_message_tabs_body">
<h3 ng-if="opponent">{{opponent.name}}</h3>
<div class="ip_messages_wrapper">
<div class="row m0">
<div class="col-md-3 p0">
<div class="ip_messages_header">
<input class="ip_messages_search_input" ng-model="namefilter" placeholder="Search Contact">
</div>
<div class="ip_message_sender_list">
<div class="ip_bio_message_list" >
<ul>
<h2>Recent Messages</h2>
<li ng-if="recentUsers&&session.type=='PATIENT'" ng-repeat="recent in recentUsers | filter : {doc_name: namefilter}" ng-click="load_chat(recent)">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url();?>{{recent.doc_pic}}" ng-if="recent.doc_pic">
</div>
<div class="ip_bio_messages">
<h5 ng-if="recent.doc_name">{{recent.doc_name}}</h5>
<div class="ip_message_time">{{recent.time | date: "hh:mm a" }}</div>
<div class="clear"></div>
<p>{{recent.msg}}</p>
</div>
<div class="clear"></div>
</li>
<li ng-if="recentUsers&&session.type=='DOCTOR'" ng-repeat="recent in recentUsers | filter : {pat_name: namefilter}" ng-click="load_chat(recent)">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url();?>{{recent.pat_pic}}" ng-if="recent.pat_pic">
</div>
<div class="ip_bio_messages">
<h5 ng-if="recent.pat_name">{{recent.pat_name}}</h5>
<div class="ip_message_time">{{recent.time | date: "hh:mm a" }}</div>
<div class="clear"></div>
<p>{{recent.msg}}</p>
</div>
<div class="clear"></div>
</li>
<li ng-if="recentUsers.length==0">
<div class="ip_bio_messages">
<h5>No Recent Chats</h5>
</div>
<div class="clear"></div>
</li>
</ul>
<ul>
<h2>All Chats</h2>
<li ng-if="allUsers&&session.type=='DOCTOR'" ng-repeat="users in allUsers | filter : {pat_name: namefilter}" ng-click="load_chat(users)">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url();?>{{users.pat_pic}}" ng-if="users.pat_pic">
</div>
<div class="ip_bio_messages">
<h5 ng-if="users.pat_pic">{{users.pat_name}}</h5>
<!-- <div class="ip_message_time">{{recent.time | date: "hh:mm a" }}</div> -->
<div class="clear"></div>
<!-- <p>{{recent.msg}}</p> -->
</div>
<div class="clear"></div>
</li>
<li ng-if="allUsers&&session.type=='PATIENT'" ng-repeat="users in allUsers | filter : {doc_name: namefilter}" ng-click="load_chat(users)">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url();?>{{users.doc_pic}}" ng-if="users.doc_pic">
</div>
<div class="ip_bio_messages">
<h5 ng-if="users.doc_name">{{users.doc_name}}</h5>
<!-- <div class="ip_message_time">{{recent.time | date: "hh:mm a" }}</div> -->
<div class="clear"></div>
<!-- <p>{{recent.msg}}</p> -->
</div>
<div class="clear"></div>
</li>
</ul>
</div>
</div>
</div>
<div class="col-md-9 p0">
<div class="ip_messages_header">
<div class="ip_message_text_header" ng-if="opponent">
{{opponent.name}}
</div>
<div class="ip_message_text_header textCenter" ng-if="!opponent">
Please Select a Conversation
</div>
<div class="ip_message_more_btn"></div>
<div class="ip_message_search_btn"></div>
<div class="clear"></div>
<!-- <div class="ip_month_date">02 Mar 2017</div> -->
</div>
<div class="ip_messages_content_div" id="chat_autoscroll">
<ul>
<li ng-repeat="msg in messages">
<div class="ip_month_date" ng-if="msg.show_date"><!-- 02 Mar 2017 -->{{msg.time | date: 'dd MMM yyyy'}}</div>
<div class="ip_receive" ng-if="session.type=='DOCTOR'&&msg.sender_type==0">
<div class="ip_message_chat">
<div class="ip_receive_quote"></div>
{{msg.message}}
</div>
<span>{{msg.time | date:'hh:mm a'}}</span>
</div>
<div class="ip_send" ng-if="session.type=='DOCTOR'&&msg.sender_type==1">
<div class="ip_message_chat">
<div class="ip_send_quote"></div>
{{msg.message}}
</div>
<span>{{msg.time | date:'hh:mm a'}}</span>
</div>
<div class="ip_receive" ng-if="session.type=='PATIENT'&&msg.sender_type==1">
<div class="ip_message_chat">
<div class="ip_receive_quote"></div>
{{msg.message}}
</div>
<span>{{msg.time | date:'hh:mm a'}}</span>
</div>
<div class="ip_send" ng-if="session.type=='PATIENT'&&msg.sender_type==0">
<div class="ip_message_chat">
<div class="ip_send_quote"></div>
{{msg.message}}
</div>
<span>{{msg.time | date:'hh:mm a'}}</span>
</div>
<div class="clear"></div>
</li>
<li ng-if="(opponent)&&(!messages)">
<div class="ip_no_message_info" >
No Messages
</div>
<div class="clear"></div>
</li>
<!-- <li>
<div class="ip_send">
<div class="ip_message_chat">
<div class="ip_send_quote"></div>
type specimen book. It has survived not only five centuries,
Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer
</div>
<span>01:00 pm</span>
</div>
<div class="clear"></div>
</li> -->
</ul>
</div>
<div class="ip_message_typing_bay" ng-if="opponent">
<div class="ip_message_typing_pic">
<img src="<?php echo base_url();?>{{session.profile_photo}}">
</div>
<input class="ip_message_typing_input" ng-model="variables.texttosent" placeholder="Enter your message here">
<button type="button" class="ip_send_btn" ng-disabled="!variables.texttosent.length>0" ng-click="sentmsg(variables.texttosent,opponentname)">SEND</button>
<!-- <div class="ip_emoji_btn">
</div> -->
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="menu2" class="tab-pane fade">
<div class="ip_messages_wrapper">
<h3>Menu 2</h3>
</div>
</div>
<div id="menu3" class="tab-pane fade">
<div class="ip_messages_wrapper">
<h3>Menu 3</h3>
</div>
</div>
<div id="menu4" class="tab-pane fade">
<div class="ip_messages_wrapper">
<h3>Menu 4</h3>
</div>
</div>
<div id="menu5" class="tab-pane fade">
<div class="ip_messages_wrapper">
<h3>Menu 5</h3>
</div>
</div>
<div id="menu6" class="tab-pane fade">
<div class="ip_message_tabs_body">
<div class="ip_graph_wrapper">
<div class="row">
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Balance for redemption
<div class="ip_bio_more">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_bal_circle">
<div class="c100 p25">
<span><strong class="ip_counter" data-count="22.325">22.325</strong></span>
<div class="slice">
<div class="bar"></div>
<div class="fill"></div>
</div>
</div>
<div class="clear"></div>
</div>
<p>Available for redemption</p>
<div class="ip_bio_bottom_bay">
<div class="ip_circle_left">
<strong>R$ 1000</strong>
<p>Last Redemption</p>
</div>
<div class="ip_circle_right">
<button class="ip_circle_btn bal_btn">HISTORY</button>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Future releases
<div class="ip_bio_more">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_future_circle">
<div class="c100 p25">
<span><strong class="ip_counter" data-count="2.345">2.345</strong></span>
<div class="slice">
<div class="bar"></div>
<div class="fill"></div>
</div>
</div>
<div class="clear"></div>
</div>
<p>Launches of today</p>
<div class="ip_bio_bottom_bay">
<div class="ip_circle_left">
<strong>R$ 250</strong>
<p>Next Release</p>
</div>
<div class="ip_circle_right">
<button class="ip_circle_btn future_btn">VIEW MORE</button>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Total Balance
<div class="ip_bio_more">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_total_circle">
<div class="c100 p25">
<span><strong class="ip_counter" data-count="24.670">24.670</strong></span>
<div class="slice">
<div class="bar"></div>
<div class="fill"></div>
</div>
</div>
<div class="clear"></div>
</div>
<p>Total Balance</p>
<div class="ip_bio_bottom_bay">
<div class="ip_circle_left">
<strong>R$ 350</strong>
<p>Last Release</p>
</div>
<div class="ip_circle_right">
<button class="ip_circle_btn total_btn">VIEW MORE</button>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Add Bank Account
<div class="ip_bio_more">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_bank_form">
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<input class="ip_bank_input" placeholder="Bank">
</div>
</div>
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<div class="row m0 height100">
<div class="col-md-4 p0 height100">
<input class="ip_bank_input" placeholder="Agency" style="border-right:2px solid #f5f5f5;">
</div>
<div class="col-md-8 p0 height100"><input class="ip_bank_input bordernone" placeholder="xxxx-xx"></div>
</div>
</div>
</div>
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<div class="row m0 height100">
<div class="col-md-4 p0 height100">
<select class="ip_bank_input"style="border-right:2px solid #f5f5f5;">
<option>Account</option>
</select>
</div>
<div class="col-md-8 p0 height100"><input class="ip_bank_input bordernone" placeholder="xxxx-xx"></div>
</div>
</div>
</div>
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<input class="ip_bank_input" placeholder="Name">
</div>
</div>
<div class="row m0 height100">
<div class="col-md-4 p0 height100">
<div class="ip_bank_detail_frame">
<select class="ip_bank_input">
<option>REGISTER</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Your Banks
<div class="ip_bank_setting_btn">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_bank_form">
<div class="ip_bank_row">
<div class="ip_bank_detail">
<li>
<div class="ip_bank_left">
<h6>ACW 4569554222 C/C 3436-134</h6>
<p>Lora isabela Michel</p>
</div>
<div class="ip_bank_close">
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bank_left">
<h6>ACW 4569554222 C/C 3436-134</h6>
<p>Lora isabela Michel</p>
</div>
<div class="ip_bank_close">
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bank_left">
<h6>ACW 4569554222 C/C 3436-134</h6>
<p>Lora isabela Michel</p>
</div>
<div class="ip_bank_close">
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bank_left">
<h6>ACW 4569554222 C/C 3436-134</h6>
<p>Lora isabela Michel</p>
</div>
<div class="ip_bank_close">
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bank_left">
<h6>ACW 4569554222 C/C 3436-134</h6>
<p>Lora isabela Michel</p>
</div>
<div class="ip_bank_close">
</div>
<div class="clear"></div>
</li>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
Perform Redemption
<div class="ip_bio_more">
</div>
</div>
<div class="ip_bio_detail textCenter">
<div class="ip_bank_form">
<div class="ip_bank_row">
<div class="ip_requested">
<div class="ip_requested_circle">
<img src="<?php echo base_url();?>assets/images/ip_dollar.png">
</div>
<div class="ip_requested_detail">
<strong>R$ 2.500</strong>
<p>Requested value</p>
</div>
<div class="clear"></div>
</div>
</div>
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<select class="ip_bank_input">
<option>Bank</option>
</select>
</div>
</div>
<div class="ip_bank_row">
<div class="ip_bank_detail_frame">
<div class="row m0 height100">
<div class="col-md-6 p0 height100">
<input class="ip_bank_input"style="border-right:2px solid #f5f5f5;" placeholder="Redemption Value">
</div>
<div class="col-md-6 p0 height100"><input class="ip_bank_input bordernone" placeholder="R$ 2500,00"></div>
</div>
</div>
</div>
<div class="ip_bank_row">
<button class="ip_circle_btn bal_btn">REQUEST REDEMPTION</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="menu7" class="tab-pane fade">
<div class="ip_messages_wrapper">
<h3>Menu 7</h3>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/2.3.0/angularfire.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular-sanitize.min.js"></script>
<script src="<?php echo base_url(); ?>assets/js/chat/dist/ng-scrollbar.js"></script>
<script src="<?php echo base_url(); ?>assets/js/chat/jquery.js"></script>
<script src="<?php echo base_url(); ?>assets/js/chat/chat-page.js"></script>
......@@ -306,86 +306,31 @@
<div class="ip_bio_detail">
<div class="ip_bio_message_list">
<ul>
<?php if(!empty($recent))
{
foreach ($recent as $key => $elm)
{
?>
<li>
<a href="<?php echo base_url();?>Doctor/chat">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url(); echo $elm['pat_pic']?>">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<h5><?php echo $elm['pat_name'];?></h5><div class="ip_message_time"><?php echo change_time_to_local($elm['time'])?></div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
<p><?php echo $elm['msg'];?></p>
</div>
<div class="clear"></div>
</a>
</li>
<?php
}
} ?>
</ul>
</div>
</div>
......
......@@ -89,7 +89,6 @@
</div>
<div id="schedulled" class="ip_paitent_tab tab-pane fade">
<?php $this->load->view('doctor_medical_records_scheduled'); ?>
</div>
</div>
......@@ -98,3 +97,84 @@
</div>
</div>
</div>
<!-- <div id="sent-broadcast" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title" id="sentbroad-users">Medical Record</h4>
</div>
<div class="modal-body">
<p>Test</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div> -->
<div id="sent-broadcast" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="ip_patient_delete_pop_wrapper">
<div class="ip_message_pop_header">
Enviar mensagem
</div>
<hr>
<div class="ip_message_pop_content">
<ul>
<p>Para</p>
<li id="sentbroad-users"></li>
</ul>
<hr>
<div class="ip_message_pop_inside">
<textarea id="broadcasttext"></textarea>
</div>
<hr>
<p class="ip_message_pop_header hidden" id="broad-users-error">Please Select Users</p>
<p class="ip_message_pop_header hidden" id="broad-msg-error">Please Write Message</p>
<div class="ip_message_bottom">
<div class="row">
<div class="col-md-2">
<button class="ip_edit_set_btn floatLeft" type="button" id="broadcast-msg-sent-btn">SEND</button>
</div>
<div class="col-md-10">
<button class="ip_edit_save_btn floatLeft" data-dismiss="modal">CANCEL</button>
</div>
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
<div id="success" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="ip_custom_modal" style="min-height:200px !important;">
<div class="ip_custom_modal_content">
<div class="ip_main_tab_content ">
<div class="ip_main_tab_pic">
<img src="<?php echo base_url();?>assets/images/tick.png">
</div>
<div class="success_content">
<h1><strong>Success</strong></h1>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
setTimeout(function() {
CKEDITOR.replace('broadcasttext');
},1500)
</script>
......@@ -62,25 +62,30 @@
foreach ($patient_attended as $key => $value) {
?>
<a href="<?php echo base_url();?>Doctor/recordsview/<?php echo $value['pat_id']?>">
<li>
<div class="row m0">
<div class="col-md-1 p0">
<div class="ip_schedule_check">
<input id="medical_records_attended_chkbox<?php echo $key;?>" class="ip_custom_checkbox select-attended" name="checkbox-1" type="checkbox" >
<input id="medical_records_attended_chkbox<?php echo $key;?>" class="ip_custom_checkbox select-attended" name="sent-broad-attend" type="checkbox" value="<?php echo $value['pat_id']?>" patname="<?php echo $value['pat_name'];?>" patpic="<?php echo $value['pat_pic'];?>">
<label for="medical_records_attended_chkbox<?php echo $key;?>" class="ip_custom_checkbox_label"></label>
</div>
</div>
<div class="col-md-3 p0">
<div class="ip_record_pic">
<img src="<?php echo base_url();echo $value['pat_pic'];?>">
</div>
<div class="ip_record_name">
<a href="<?php echo base_url();?>Doctor/recordsview/<?php echo $value['pat_id']?>">
<?php echo $value['pat_name'];?>
</a>
</div>
<div class="clear"></div>
</div>
<div class="col-md-4 p0">
<div class="col-md-3 p0">
<div class="ip_record_document">
<span>
<img src="<?php echo base_url();?>assets/images/ip_doc.png">
......@@ -102,7 +107,8 @@
</span>
</div>
</div>
<div class="col-md-4 p0">
<div class="col-md-3 p0">
<div class="ip_record_document">
<span>
<img src="<?php echo base_url();?>assets/images/ip_doc.png">
......@@ -124,9 +130,15 @@
</span>
</div>
</div>
<div class="col-md-2 p0">
<div class="ip_record_name sent-broadcast-btn">
Message
</div>
</div>
</div>
</li>
</a>
<?php
}
......
......@@ -9,7 +9,7 @@
<img src="<?php echo base_url();?>assets/images/ip_appointments.png">
</div>
<div class="ip_top_dash_detail">
<strong class="ip_counter" data-count="210">0</strong>
<strong class="ip_counter" data-count="<?php echo $dash_view['no_of_attendance']?>">0</strong>
<p>Attendance</p>
</div>
<div class="clear"></div>
......@@ -21,7 +21,7 @@
<img src="<?php echo base_url();?>assets/images/ip_feature.png">
</div>
<div class="ip_top_dash_detail" >
<strong class="ip_counter" data-count="780023">0</strong>
<strong class="ip_counter" data-count="<?php echo $dash_view['no_of_billed']?>">0</strong>
<p>Billed</p>
</div>
<div class="clear"></div>
......@@ -33,7 +33,7 @@
<img src="<?php echo base_url();?>assets/images/ip_paintences.png">
</div>
<div class="ip_top_dash_detail">
<strong class="ip_counter" data-count="6586">0</strong>
<strong class="ip_counter" data-count="<?php echo $dash_view['no_of_patients']?>">0</strong>
<p>Patients</p>
</div>
<div class="clear"></div>
......@@ -45,7 +45,7 @@
<img src="<?php echo base_url();?>assets/images/ip_vistors.png">
</div>
<div class="ip_top_dash_detail">
<strong class="ip_counter" data-count="523">0</strong>
<strong class="ip_counter" data-count="<?php echo $dash_view['no_of_profileview']?>">0</strong>
<p>Profile Views</p>
</div>
<div class="clear"></div>
......@@ -66,10 +66,10 @@
<div class="ip_record_main_div">
<div class="ip_record_main_head">
<div class="row m0 height100">
<div class="col-md-2 p0 height100"><div class="ip_record_main_head_title">Date</div></div>
<div class="col-md-2 p0 height100"><div class="ip_record_main_head_title">Time</div></div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_title">Date</div></div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_title">Time</div></div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_title">Value</div></div>
<div class="col-md-2 p0 height100"><div class="ip_record_main_head_title">Ratting</div></div>
<!-- <div class="col-md-2 p0 height100"><div class="ip_record_main_head_title">Ratting</div></div> -->
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_title"><div class="ip_message_more_btn"></div></div></div>
</div>
</div>
......@@ -83,10 +83,23 @@
<li>
<div class="row m0 height100">
<div class="col-md-2 p0 height100"><div class="ip_record_main_head_data"><strong>Consultation: </strong><?php echo date('d M - Y',$value['book_date']);?></div></div>
<div class="col-md-2 p0 height100"><div class="ip_record_main_head_data"><?php echo $value['book_time'];?></div></div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data">Normal Consultation : R$ <?php echo $value['book_price'];?></div></div>
<div class="col-md-2 p0 height100">
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data"><strong>Consultation: </strong><?php echo date('d M - Y',$value['book_date']);?></div></div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data"><?php echo $value['book_time'];?></div></div>
<?php if(!empty($value['promo']))
{
?>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data">Promotional Consultation : R$ <?php echo $value['book_total'];?></div></div>
<?php
}
else
{
?>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data">Normal Consultation : R$ <?php echo $value['book_total'];?></div></div>
<?php
}
?>
<!-- <div class="col-md-2 p0 height100">
<div class="ip_record_main_head_data">
<form id="ip_user_rating_form">
<div id="ip_selected_rating" class="ip_selected_rating floatLeft">5.0</div>
......@@ -100,8 +113,12 @@
<div class="clear"></div>
</form>
</div>
</div> -->
<div class="col-md-3 p0 height100">
<div class="ip_record_main_head_data">
<a href="javascript:void(0)"><button book="<?php echo $value['book_id'];?>" class="ip_reader_btn show_record_recordview_btn" type="button">OPEN RECORD</button></a>
</div>
</div>
<div class="col-md-3 p0 height100"><div class="ip_record_main_head_data"><button class="ip_reader_btn">OPEN READER</button></div></div>
</div>
</li>
......@@ -131,7 +148,7 @@
</div>
<!-- RECORDS DIV STARTS -->
<div class="ip_records_tab" id="med_rec_view">
<!-- <div class="ip_records_tab" id="med_rec_view">
<div class="row m0">
<div class="col-md-2 p0">
<div class="ip_record_section_header">
......@@ -279,9 +296,54 @@
</div>
</div>
</div>
</div> -->
<div id="load-med-record-view">
<?php $this->load->view('doctor_medical_records_recordview') ?>
</div>
<!-- RECORD DIV ENDS -->
</div>
</div>
<div id="sentmail-dialog-success" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title" id="sentmail-dialog-head">Medical Record</h4>
</div>
<div class="modal-body">
<p id="sentmail-dialog-content">Record has been Successfully sent.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div id="sentmail-dialog-error" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title" id="sentmail-dialog-head">Medical Record</h4>
</div>
<div class="modal-body">
<p id="sentmail-dialog-content">Error. Record senting failed.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="ip_records_tab">
<?php
if(!empty($record_data))
{
?>
<div class="row m0">
<div class="col-md-2 p0">
<div class="ip_record_section_header">
<!-- 08 Sept, 13.00 - 14:00 -->
<?php echo date('d M',$booking_details['book_date'])?><br><?php echo $booking_details['book_time'];?>
</div>
</div>
<div class="col-md-10 p0">
<div class="ip_record_header1">
<div class="ip_record_back">
<div class="ip_pres_image">
<img src="<?php echo base_url();echo $patient_data['pt_pic']?>">
</div>
</div>
<div class="ip_record_search_box backgroundnone">
<h4><?php echo $patient_data['pt_name']?></h4>
</div>
<div class="ip_record_settings">
<span class="settings"><img src="<?php echo base_url();?>assets/images/ip_settings.png"></span>
</div>
<div class="clear"></div>
</div>
</div>
</div>
<div class="ip_bio_tab_div m0">
<div class="row m0">
<div class="col-md-2 p0 height100">
<div class="ip_bio_tab_bay height100">
<ul>
<li class="active" data-toggle="tab" href="#record">Anamnesis</li>
<li data-toggle="tab" href="#prescription">Prescription</li>
<li data-toggle="tab" href="#exam">Exams</li>
<li data-toggle="tab" href="#other">Letters and certificates</li>
<li data-toggle="tab" href="#budjet">Budget</li>
<li data-toggle="tab" href="#ratting">Evaluation</li>
</ul>
</div>
</div>
<div class="col-md-10 p0">
<div class="ip_bio_tab_content">
<div class="tab-content">
<div class="ip_profile_tab_top p0">
<div class="ip_profile_tab_name">
<h3><?php if(!empty($record_data['main_complaint'])) echo $record_data['main_complaint'];?></h3>
</div>
<div class="clear"></div>
</div>
<div id="record" class="tab-pane fade in active">
<div class="ip_profile_tab_detail">
<?php if(!empty($record_data['description']))echo $record_data['description'];?>
<br>
<div class="ip_prescription_div">
<ul>
<?php
if(!empty($record_data['diseases']->anamnese))
{
foreach ($record_data['diseases']->anamnese as $key => $value)
{
if($key!='others' and $key!='Medications')
{
$key = str_replace('_', ' ', $key);
?>
<li class="p12">
<h5><?php echo $key;?></h5>
<p><?php echo $value;?></p>
</li>
<?php
}
if($key=='Medications')
{
?>
<li class="p12">
<h5><?php echo $key;?></h5>
<p><?php echo implode(",",$value);?></p>
</li>
<?php
}
}
}
?>
<!-- <li class="p0">
<h5>Renal Problems</h5>
<p>been the industry's standard </p>
</li> -->
<!-- <li class="p0">
<h5>Alergies</h5>
<p>been the industry's standard </p>
</li> -->
<div class="clear"></div>
<br>
<?php
if(!empty($record_data['diseases']->anamnese->others))
{
foreach ($record_data['diseases']->anamnese->others as $key => $value){
$value = str_replace('_', ' ', $value);
?>
<div class="ip_day_time_schedule_details_data p0 floatLeft">
<input id="checkbox-2" class="ip_custom_checkbox1" name="checkbox-2" type="checkbox" checked="" disabled>
<label for="checkbox-2" class="ip_custom_checkbox_label1"><?php echo $value;?></label>
</div>
<?php
}
}
?>
<div class="clear"></div>
</ul>
</div>
</div>
</div>
<div id="prescription" class="tab-pane fade">
<div class="ip_profile_tab_detail">
<div class="ip_prescription_div">
<ul>
<?php if(!empty($record_data['prescribtions']))
{
foreach ($record_data['prescribtions'] as $key => $value)
{
?>
<li>
<h5><?php echo $value->name;?> <?php echo $value->quantity;?></h5>
<!-- <p>been the industry's standard </p> -->
<h6><?php echo $value->procedure;?></h6>
</li>
<?php
}
}
?>
<!-- <li>
<h5>Broncoflux 30mg</h5>
<p>been the industry's standard </p>
<h6>since the 1500s, when an unknown printer took a</h6>
</li> -->
<div class="clear"></div>
</ul>
</div>
</div>
</div>
<div id="exam" class="tab-pane fade">
<div class="ip_profile_tab_detail">
<div class="ip_prescription_div">
<ul>
<?php if(!empty($record_data['exams'][0]))
{
?>
<li class="p12">
<h5><?php echo $record_data['exams'][0]->procedure;?></h5>
<h6><?php echo $record_data['exams'][0]->observation;?></h6>
</li>
<?php
}
?>
<!-- <li>
<h5>USG Obstetrica / doppler</h5>
<h6>since the 1500s, when an unknown printer took a</h6>
</li> -->
</ul>
</div>
</div>
</div>
<div id="other" class="tab-pane fade">
<div class="ip_profile_tab_detail">
<?php if(!empty($record_data['letters']))
{
?>
<p><?php echo $record_data['letters'];?></p>
<?php
}
?>
</div>
</div>
<div id="budjet" class="tab-pane fade">
<div class="ip_profile_tab_detail">
<div class="ip_edit_row">
<div class="ip_budject_list">
<?php
if(!empty($record_data['budget']))
{
foreach ($record_data['budget']as $key => $value)
{
?>
<li>
<div class="child1"><?php echo $value->quantity;?>-<?php echo $value->procedure;?></div>
<div class="child2">R$<?php echo $value->amount;?></div>
<div class="clear"></div>
</li>
<?php
$total_budget[$key] = $value->amount * $value->quantity;
}
}
?>
<!-- <li>
<div class="child1">2-Leisure peeling sessions</div>
<div class="child2">R$150,00</div>
<div class="clear"></div>
</li> -->
<li class="select">
<div class="child1">TOTAL</div>
<div class="child2 select">R$<?php if(!empty($total_budget)) {echo array_sum($total_budget);}?></div>
<div class="clear"></div>
</li>
</div>
</div>
</div>
</div>
<div id="ratting" class="tab-pane fade">
<div class="ip_profile_tab_detail p0">
<div class="ip_ratting_tab_content">
<div class="row m0 p15 ip_grey">
<div class="ip_profile_tab_circle">
<img src="<?php echo base_url();echo $doctor_data['dr_pic']?>">
</div>
<div class="ip_profile_tab_name">
<h3>Dr. <?php echo $doctor_data['dr_name']?></h3>
<!-- <form id="ip_user_rating_form">
<div id="ip_selected_rating" class="ip_selected_rating floatLeft">5.0</div>
<span class="ip_user_rating floatLeft">
<input type="radio" name="rating" value="5.0"><span class="star"></span>
<input type="radio" name="rating" value="4.0"><span class="star"></span>
<input type="radio" name="rating" value="3.0"><span class="star"></span>
<input type="radio" name="rating" value="2.0"><span class="star"></span>
<input type="radio" name="rating" value="1.0"><span class="star"></span>
</span>
<div class="clear"></div>
</form> -->
</div>
<div class="ip_profile_tab_name_detail">
<p><strong>
<?php if(!empty($record_data['patient_review'])) {echo $record_data['patient_review']; } ?>
</strong></p>
</div>
<div class="clear"></div>
</form>
<br>
</div>
</div>
</div>
</div>
<div class="ip_prescription_bottom_btn_bay">
<!-- <a target="_blank" href="<?php echo base_url();?>Sentmail/record/<?php echo $record_data['id']?>">
<button class="ip_prescription_btn2 floatRight">SEND BY EMAIL</button>
</a> -->
<a href="javascript:void(0)">
<button type="button" record="<?php echo $record_data['id']?>" class="ip_prescription_btn2 floatRight record-sent-mail">SEND BY EMAIL</button>
</a>
<a target="_blank" href="<?php echo base_url();?>Printer/record/<?php echo $record_data['id']?>">
<button class="ip_prescription_btn1 floatRight">PRINT OUT</button>
</a>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
}
else
{
?>
<div class="ip_record_main_head_data p15 textCenter">No Records Found!</div>
<?php
}
?>
</div>
\ No newline at end of file
......@@ -64,27 +64,32 @@
foreach ($patient_scheduled as $key => $value) {
?>
<a href="<?php echo base_url();?>Doctor/recordsview/<?php echo $value['pat_id']?>">
<li>
<div class="row m0">
<div class="col-md-1 p0">
<div class="ip_schedule_check">
<input id="medical_records_scheduled_chkbox<?php echo $key;?>" class="ip_custom_checkbox select-scheduled" name="checkbox-1" type="checkbox">
<input id="medical_records_scheduled_chkbox<?php echo $key;?>" class="ip_custom_checkbox select-scheduled" name="sent-broad-sch" type="checkbox" value="<?php echo $value['pat_id']?>" patname="<?php echo $value['pat_name'];?>" patpic="<?php echo $value['pat_pic'];?>">
<label for="medical_records_scheduled_chkbox<?php echo $key;?>" class="ip_custom_checkbox_label"></label>
</div>
</div>
<div class="col-md-3 p0">
<div class="ip_record_pic">
<img src="<?php echo base_url();echo $value['pat_pic'];?>">
</div>
<div class="ip_record_name">
<a href="<?php echo base_url();?>Doctor/recordsview/<?php echo $value['pat_id']?>">
<?php echo $value['pat_name'];?>
</a>
</div>
<div class="clear"></div>
</div>
<div class="col-md-4 p0">
<div class="col-md-3 p0">
<div class="ip_record_document">
<span>
<img src="<?php echo base_url();?>assets/images/ip_doc.png">
......@@ -106,7 +111,8 @@
</span>
</div>
</div>
<div class="col-md-4 p0">
<div class="col-md-3 p0">
<div class="ip_record_document">
<span><img src="<?php echo base_url();?>assets/images/ip_doc.png"></span>
<span>Next Consultation :
......@@ -126,9 +132,16 @@
</span>
</div>
</div>
<div class="col-md-2 p0">
<div class="ip_record_name sent-broadcast-btn-sch">
Message
</div>
</div>
</div>
</li>
</a>
<?php
}
}
......
......@@ -85,6 +85,7 @@
{
?>
<li>
<a href="<?php echo base_url();?>Doctor/Chat/<?php echo $value['id'];?>">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url(); echo $value['profile_photo'];?>">
</div>
......@@ -99,6 +100,7 @@
Messages
</div>
<div class="clear"></div>
</a>
</li>
<?php
......
......@@ -309,6 +309,7 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
......@@ -319,91 +320,37 @@
<div class="ip_bio_detail">
<div class="ip_bio_message_list">
<ul>
<?php if(!empty($recent))
{
foreach ($recent as $key => $value)
{
?>
<li>
<a href="<?php echo base_url();?>Patient/chat">
<div class="ip_bio_message_pic">
<img src="<?php echo base_url(); echo $value['doc_pic']?>">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
</div>
<div class="clear"></div>
</li>
<li>
<div class="ip_bio_message_pic">
</div>
<div class="ip_bio_messages">
<h5>Nyla Augusta</h5><div class="ip_message_time">12:56</div>
<h5><?php echo $value['doc_name'];?></h5><div class="ip_message_time"><?php echo change_time_to_local($value['time'])?></div>
<div class="clear"></div>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
<p><?php echo $value['msg'];?></p>
</div>
<div class="clear"></div>
</a>
</li>
<?php
}
} ?>
</ul>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="ip_bio_tab_div">
<div class="ip_bio_head">
......
......@@ -325,7 +325,8 @@ body::-webkit-scrollbar {
.ip_main_tab_head ul .active{background: #515356;color: #fff;}
.ip_main_tab_content{width: 100%;min-height:700px;padding-top: 50px;}
.ip_main_tab_pic{width:120px;height:120px;border-radius:50%;background: #e7e7e7;margin:0 auto;}
.ip_main_tab_pic img{width:100%;height:100%;border-radius:50%;}
.ip_main_tab_pic img{width:100%;height:100%;border-radius:50%;object-fit: cover;
object-position: center;}
.ip_main_tab_content h5{text-align: center;text-transform: uppercase;color: #646669;font-weight:700;font-size: 16px;margin:0px;margin-top: 15px;font-family:Solomon_bold !important;}
.ip_main_tab_content p{text-align: center;color: #bebebe;font-size: 15px;margin-top: 6px;margin-bottom: 0px;}
.ip_main_tab_content h4{text-align: center;font-weight: 700;font-size: 15px;font-family:Solomon_bold !important;}
......@@ -428,6 +429,7 @@ body::-webkit-scrollbar {
.ip_bio_message_list{width:100%;height: 400px;overflow-y: scroll;}
.ip_bio_message_list::-webkit-scrollbar { display: none; }
.ip_bio_message_list::-moz-scrollbar { display: none; }
.ip_bio_message_list ul h2{margin:0px;width:100%;padding: 8px;padding-left:12px;font-size: 15px;background-color: #d6d6d6;color: #fff;}
.ip_bio_message_list ul{width:100%;padding: 0px;margin:0px;}
.ip_bio_message_list ul li{width:100%;cursor: pointer;list-style: none;padding:10px;border-bottom:1px solid #f5f5f5;position: relative;}
.ip_bio_message_list ul li h5{margin:0px;color: #797979;font-weight: 900;padding-bottom: 5px;position: relative;float: left;margin-right:10px;padding-bottom:10px;}
......@@ -537,7 +539,9 @@ body::-webkit-scrollbar {
.ip_record_pic img{width:100%;height:100%;border-radius:50%;}
.ip_record_name{float: left;color: #797979;font-weight: 700;padding:10px;padding-left: 30px;}
.ip_record_listing ul li .ip_schedule_check{position: relative;top: 13px;left: 11px;}
.ip_record_document{width:100%;}
.ip_record_document{width:100%; white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;}
.ip_record_document span img{width:40px;margin-right:5px;}
.ip_record_document span {color: #3bcfff;font-weight: bold;}
.ip_record_document span strong{color: #a9a9a9;font-weight: bold;margin-left:10px;}
......@@ -562,7 +566,7 @@ body::-webkit-scrollbar {
.ip_message_text_header{float: left;height:100%;color:#797979;font-weight:700;padding: 30px;}
.ip_message_search_btn{width:60px;float: right;height:100%;background:url("../images/ip_nav_search.png");background-repeat: no-repeat;background-position:center;background-size: 35px;}
.ip_message_more_btn{width:60px;float: right;height:100%;background:url("../images/ip_more.png");background-repeat: no-repeat;background-position:center;background-size: 35px;}
.ip_month_date{position: absolute;border:1px solid #f5f5f5;border-radius:20px;z-index: 99;color:#797979;font-weight: 800;background: #fff;padding-left: 10px;padding-right: 10px;padding-top: 3px;padding-bottom: 3px; left: 41%;bottom: -12px;}
.ip_month_date{width:100px;margin:0 auto;margin-bottom:10px;border:1px solid #f5f5f5;border-radius:20px;z-index: 99;color:#797979;font-weight: 800;background: #fff;padding-left: 10px;padding-right: 10px;padding-top: 3px;padding-bottom: 3px;}
.ip_message_sender_list{width:100%;height: 600px;overflow-y: scroll}
.ip_message_sender_list::-webkit-scrollbar { display: none; }
.ip_message_sender_list::-moz-scrollbar { display: none; }
......@@ -1947,6 +1951,26 @@ button[disabled], html input[disabled]{background: #fafafa !important;}
.ip_promo_div .parsley-errors-list{top: 45px !important;}
.ip_upload_img{width:80px;height:70px;position:relative;background:url(../images/ip_upload.png);background-repeat: no-repeat;background-position: center;}
.ip_upload_img input[type=file]{position: absolute;top:0px;left:0px;right:0px;bottom:0px;opacity: 0;}
.ip_no_message_info{width: 100%;text-align: center;font-size: 16px;font-weight: 500;color: #d6d6d6;}
/*SENT BROADCAST*/
/*--------------------------------------------*/
.ip_message_pop_header{text-align: center;color: #8e8e8e;padding-top: 20px;font-weight: 600;}
.ip_message_pop_content{width:100%;}
.ip_message_pop_content ul{padding:0px;padding-left: 30px;padding-right:30px;}
.ip_message_pop_content ul p{color:#e3e3e3;margin:0px;font-weight: 600;font-size: 12px;}
.ip_message_pop_content ul li{list-style: none;display: inline-block;color: #c654c0;font-weight: 600;font-size: 12px;padding-right:5px;}
.ip_message_pop_inside{padding:20px;padding-top: 0px;padding-bottom:0px;}
.ip_message_pop_inside p{color: #999999;font-size: 12px;font-weight: 600;line-height: 20px;}
.ip_message_pop_inside ul{padding-left: 0px;}
.ip_message_pop_inside ul li{color: #999999;font-size: 12px;font-weight: 600;list-style-type: circle;width:100%;padding-left: 25px;}
.ip_message_bottom{width: 100%;padding: 25px;padding-top: 0px;}
/*--------------------------------------------*/
/*SENT BROADCAST SUCCESS*/
.ip_main_tab_content h1 strong{color: #a9a9a9;font-weight: 400;}
.ip_main_tab_content .success_content{padding: 45px;}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* AngularFire is the officially supported AngularJS binding for Firebase. Firebase
* is a full backend so you don't need servers to build your Angular app. AngularFire
* provides you with the $firebase service which allows you to easily keep your $scope
* variables in sync with your Firebase backend.
*
* AngularFire 2.0.2
* https://github.com/firebase/angularfire/
* Date: 08/19/2016
* License: MIT
*/
!function(a){"use strict";angular.module("firebase.utils",[]),angular.module("firebase.config",[]),angular.module("firebase.auth",["firebase.utils"]),angular.module("firebase.database",["firebase.utils"]),angular.module("firebase",["firebase.utils","firebase.config","firebase.auth","firebase.database"]).value("Firebase",a.firebase).value("firebase",a.firebase)}(window),function(){"use strict";var a;angular.module("firebase.auth").factory("$firebaseAuth",["$q","$firebaseUtils",function(b,c){return function(d){d=d||firebase.auth();var e=new a(b,c,d);return e.construct()}}]),a=function(a,b,c){if(this._q=a,this._utils=b,"string"==typeof c)throw new Error("The $firebaseAuth service accepts a Firebase auth instance (or nothing) instead of a URL.");if("undefined"!=typeof c.ref)throw new Error("The $firebaseAuth service accepts a Firebase auth instance (or nothing) instead of a Database reference.");this._auth=c,this._initialAuthResolver=this._initAuthResolver()},a.prototype={construct:function(){return this._object={$signInWithCustomToken:this.signInWithCustomToken.bind(this),$signInAnonymously:this.signInAnonymously.bind(this),$signInWithEmailAndPassword:this.signInWithEmailAndPassword.bind(this),$signInWithPopup:this.signInWithPopup.bind(this),$signInWithRedirect:this.signInWithRedirect.bind(this),$signInWithCredential:this.signInWithCredential.bind(this),$signOut:this.signOut.bind(this),$onAuthStateChanged:this.onAuthStateChanged.bind(this),$getAuth:this.getAuth.bind(this),$requireSignIn:this.requireSignIn.bind(this),$waitForSignIn:this.waitForSignIn.bind(this),$createUserWithEmailAndPassword:this.createUserWithEmailAndPassword.bind(this),$updatePassword:this.updatePassword.bind(this),$updateEmail:this.updateEmail.bind(this),$deleteUser:this.deleteUser.bind(this),$sendPasswordResetEmail:this.sendPasswordResetEmail.bind(this),_:this},this._object},signInWithCustomToken:function(a){return this._q.when(this._auth.signInWithCustomToken(a))},signInAnonymously:function(){return this._q.when(this._auth.signInAnonymously())},signInWithEmailAndPassword:function(a,b){return this._q.when(this._auth.signInWithEmailAndPassword(a,b))},signInWithPopup:function(a){return this._q.when(this._auth.signInWithPopup(this._getProvider(a)))},signInWithRedirect:function(a){return this._q.when(this._auth.signInWithRedirect(this._getProvider(a)))},signInWithCredential:function(a){return this._q.when(this._auth.signInWithCredential(a))},signOut:function(){return null!==this.getAuth()?this._q.when(this._auth.signOut()):this._q.when()},onAuthStateChanged:function(a,b){var c=this._utils.debounce(a,b,0),d=this._auth.onAuthStateChanged(c);return d},getAuth:function(){return this._auth.currentUser},_routerMethodOnAuthPromise:function(a){var b=this;return this._initialAuthResolver.then(function(){var c=b.getAuth(),d=null;return d=a&&null===c?b._q.reject("AUTH_REQUIRED"):b._q.when(c)})},_getProvider:function(a){var b;if("string"==typeof a){var c=a.slice(0,1).toUpperCase()+a.slice(1);b=new firebase.auth[c+"AuthProvider"]}else b=a;return b},_initAuthResolver:function(){var a=this._auth;return this._q(function(b){function c(){d(),b()}var d;d=a.onAuthStateChanged(c)})},requireSignIn:function(){return this._routerMethodOnAuthPromise(!0)},waitForSignIn:function(){return this._routerMethodOnAuthPromise(!1)},createUserWithEmailAndPassword:function(a,b){return this._q.when(this._auth.createUserWithEmailAndPassword(a,b))},updatePassword:function(a){var b=this.getAuth();return b?this._q.when(b.updatePassword(a)):this._q.reject("Cannot update password since there is no logged in user.")},updateEmail:function(a){var b=this.getAuth();return b?this._q.when(b.updateEmail(a)):this._q.reject("Cannot update email since there is no logged in user.")},deleteUser:function(){var a=this.getAuth();return a?this._q.when(a.delete()):this._q.reject("Cannot delete user since there is no logged in user.")},sendPasswordResetEmail:function(a){return this._q.when(this._auth.sendPasswordResetEmail(a))}}}(),function(){"use strict";function a(a){return a()}a.$inject=["$firebaseAuth"],angular.module("firebase.auth").factory("$firebaseAuthService",a)}(),function(){"use strict";angular.module("firebase.database").factory("$firebaseArray",["$log","$firebaseUtils","$q",function(a,b,c){function d(a){if(!(this instanceof d))return new d(a);var c=this;return this._observers=[],this.$list=[],this._ref=a,this._sync=new e(this),b.assertValidRef(a,"Must pass a valid Firebase reference to $firebaseArray (not a string or URL)"),this._indexCache={},b.getPublicMethods(c,function(a,b){c.$list[b]=a.bind(c)}),this._sync.init(this.$list),this.$list}function e(d){function e(a){if(!r.isDestroyed){r.isDestroyed=!0;var b=d.$ref();b.off("child_added",j),b.off("child_moved",l),b.off("child_changed",k),b.off("child_removed",m),d=null,q(a||"destroyed")}}function f(b){var c=d.$ref();c.on("child_added",j,p),c.on("child_moved",l,p),c.on("child_changed",k,p),c.on("child_removed",m,p),c.once("value",function(c){angular.isArray(c.val())&&a.warn("Storing data using array indices in Firebase can result in unexpected behavior. See https://firebase.google.com/docs/database/web/structure-data for more information."),q(null,b)},q)}function g(a,b){o||(o=!0,a?i.reject(a):i.resolve(b))}function h(a,b){var d=c.when(a);d.then(function(a){a&&b(a)}),o||n.push(d)}var i=c.defer(),j=function(a,b){d&&h(d.$$added(a,b),function(a){d.$$process("child_added",a,b)})},k=function(a){if(d){var b=d.$getRecord(a.key);b&&h(d.$$updated(a),function(){d.$$process("child_changed",b)})}},l=function(a,b){if(d){var c=d.$getRecord(a.key);c&&h(d.$$moved(a,b),function(){d.$$process("child_moved",c,b)})}},m=function(a){if(d){var b=d.$getRecord(a.key);b&&h(d.$$removed(a),function(){d.$$process("child_removed",b)})}},n=[],o=!1,p=b.batch(function(a){g(a),d&&d.$$error(a)}),q=b.batch(g),r={destroy:e,isDestroyed:!1,init:f,ready:function(){return i.promise.then(function(a){return c.all(n).then(function(){return a})})}};return r}return d.prototype={$add:function(a){this._assertNotDestroyed("$add");var d,e=this,f=c.defer(),g=this.$ref().ref.push();try{d=b.toJSON(a)}catch(a){f.reject(a)}return"undefined"!=typeof d&&b.doSet(g,d).then(function(){e.$$notify("child_added",g.key),f.resolve(g)}).catch(f.reject),f.promise},$save:function(a){this._assertNotDestroyed("$save");var d=this,e=d._resolveItem(a),f=d.$keyAt(e),g=c.defer();if(null!==f){var h,i=d.$ref().ref.child(f);try{h=b.toJSON(e)}catch(a){g.reject(a)}"undefined"!=typeof h&&b.doSet(i,h).then(function(){d.$$notify("child_changed",f),g.resolve(i)}).catch(g.reject)}else g.reject("Invalid record; could not determine key for "+a);return g.promise},$remove:function(a){this._assertNotDestroyed("$remove");var d=this.$keyAt(a);if(null!==d){var e=this.$ref().ref.child(d);return b.doRemove(e).then(function(){return e})}return c.reject("Invalid record; could not determine key for "+a)},$keyAt:function(a){var b=this._resolveItem(a);return this.$$getKey(b)},$indexFor:function(a){var b=this,c=b._indexCache;if(!c.hasOwnProperty(a)||b.$keyAt(c[a])!==a){var d=b.$list.findIndex(function(c){return b.$$getKey(c)===a});d!==-1&&(c[a]=d)}return c.hasOwnProperty(a)?c[a]:-1},$loaded:function(a,b){var c=this._sync.ready();return arguments.length&&(c=c.then.call(c,a,b)),c},$ref:function(){return this._ref},$watch:function(a,b){var c=this._observers;return c.push([a,b]),function(){var d=c.findIndex(function(c){return c[0]===a&&c[1]===b});d>-1&&c.splice(d,1)}},$destroy:function(a){this._isDestroyed||(this._isDestroyed=!0,this._sync.destroy(a),this.$list.length=0)},$getRecord:function(a){var b=this.$indexFor(a);return b>-1?this.$list[b]:null},$$added:function(a){var c=this.$indexFor(a.key);if(c===-1){var d=a.val();return angular.isObject(d)||(d={$value:d}),d.$id=a.key,d.$priority=a.getPriority(),b.applyDefaults(d,this.$$defaults),d}return!1},$$removed:function(a){return this.$indexFor(a.key)>-1},$$updated:function(a){var c=!1,d=this.$getRecord(a.key);return angular.isObject(d)&&(c=b.updateRec(d,a),b.applyDefaults(d,this.$$defaults)),c},$$moved:function(a){var b=this.$getRecord(a.key);return!!angular.isObject(b)&&(b.$priority=a.getPriority(),!0)},$$error:function(b){a.error(b),this.$destroy(b)},$$getKey:function(a){return angular.isObject(a)?a.$id:null},$$process:function(a,b,c){var d,e=this.$$getKey(b),f=!1;switch(a){case"child_added":d=this.$indexFor(e);break;case"child_moved":d=this.$indexFor(e),this._spliceOut(e);break;case"child_removed":f=null!==this._spliceOut(e);break;case"child_changed":f=!0;break;default:throw new Error("Invalid event type: "+a)}return angular.isDefined(d)&&(f=this._addAfter(b,c)!==d),f&&this.$$notify(a,e,c),f},$$notify:function(a,b,c){var d={event:a,key:b};angular.isDefined(c)&&(d.prevChild=c),angular.forEach(this._observers,function(a){a[0].call(a[1],d)})},_addAfter:function(a,b){var c;return null===b?c=0:(c=this.$indexFor(b)+1,0===c&&(c=this.$list.length)),this.$list.splice(c,0,a),this._indexCache[this.$$getKey(a)]=c,c},_spliceOut:function(a){var b=this.$indexFor(a);return b>-1?(delete this._indexCache[a],this.$list.splice(b,1)[0]):null},_resolveItem:function(a){var b=this.$list;if(angular.isNumber(a)&&a>=0&&b.length>=a)return b[a];if(angular.isObject(a)){var c=this.$$getKey(a),d=this.$getRecord(c);return d===a?d:null}return null},_assertNotDestroyed:function(a){if(this._isDestroyed)throw new Error("Cannot call "+a+" method on a destroyed $firebaseArray object")}},d.$extend=function(a,c){return 1===arguments.length&&angular.isObject(a)&&(c=a,a=function(b){return this instanceof a?(d.apply(this,arguments),this.$list):new a(b)}),b.inherit(a,d,c)},d}]),angular.module("firebase").factory("$FirebaseArray",["$log","$firebaseArray",function(a,b){return function(){return a.warn("$FirebaseArray has been renamed. Use $firebaseArray instead."),b.apply(null,arguments)}}])}(),function(){"use strict";angular.module("firebase.database").factory("$firebaseObject",["$parse","$firebaseUtils","$log","$q",function(a,b,c,d){function e(a){return this instanceof e?(this.$$conf={sync:new g(this,a),ref:a,binding:new f(this),listeners:[]},Object.defineProperty(this,"$$conf",{value:this.$$conf}),this.$id=a.ref.key,this.$priority=null,b.applyDefaults(this,this.$$defaults),void this.$$conf.sync.init()):new e(a)}function f(a){this.subs=[],this.scope=null,this.key=null,this.rec=a}function g(a,e){function f(b){n.isDestroyed||(n.isDestroyed=!0,e.off("value",k),a=null,m(b||"destroyed"))}function g(){e.on("value",k,l),e.once("value",function(a){angular.isArray(a.val())&&c.warn("Storing data using array indices in Firebase can result in unexpected behavior. See https://firebase.google.com/docs/database/web/structure-data for more information. Also note that you probably wanted $firebaseArray and not $firebaseObject."),m(null)},m)}function h(b){i||(i=!0,b?j.reject(b):j.resolve(a))}var i=!1,j=d.defer(),k=b.batch(function(b){var c=a.$$updated(b);c&&a.$$notify()}),l=b.batch(function(b){h(b),a&&a.$$error(b)}),m=b.batch(h),n={isDestroyed:!1,destroy:f,init:g,ready:function(){return j.promise}};return n}return e.prototype={$save:function(){var a,c=this,e=c.$ref(),f=d.defer();try{a=b.toJSON(c)}catch(a){f.reject(a)}return"undefined"!=typeof a&&b.doSet(e,a).then(function(){c.$$notify(),f.resolve(c.$ref())}).catch(f.reject),f.promise},$remove:function(){var a=this;return b.trimKeys(a,{}),a.$value=null,b.doRemove(a.$ref()).then(function(){return a.$$notify(),a.$ref()})},$loaded:function(a,b){var c=this.$$conf.sync.ready();return arguments.length&&(c=c.then.call(c,a,b)),c},$ref:function(){return this.$$conf.ref},$bindTo:function(a,b){var c=this;return c.$loaded().then(function(){return c.$$conf.binding.bindTo(a,b)})},$watch:function(a,b){var c=this.$$conf.listeners;return c.push([a,b]),function(){var d=c.findIndex(function(c){return c[0]===a&&c[1]===b});d>-1&&c.splice(d,1)}},$destroy:function(a){var c=this;c.$isDestroyed||(c.$isDestroyed=!0,c.$$conf.sync.destroy(a),c.$$conf.binding.destroy(),b.each(c,function(a,b){delete c[b]}))},$$updated:function(a){var c=b.updateRec(this,a);return b.applyDefaults(this,this.$$defaults),c},$$error:function(a){c.error(a),this.$destroy(a)},$$scopeUpdated:function(a){var c=d.defer();return this.$ref().set(b.toJSON(a),b.makeNodeResolver(c)),c.promise},$$notify:function(){var a=this,b=this.$$conf.listeners.slice();angular.forEach(b,function(b){b[0].call(b[1],{event:"value",key:a.$id})})},forEach:function(a,c){return b.each(this,a,c)}},e.$extend=function(a,c){return 1===arguments.length&&angular.isObject(a)&&(c=a,a=function(b){return this instanceof a?void e.apply(this,arguments):new a(b)}),b.inherit(a,e,c)},f.prototype={assertNotBound:function(a){if(this.scope){var b="Cannot bind to "+a+" because this instance is already bound to "+this.key+"; one binding per instance (call unbind method or create another FirebaseObject instance)";return c.error(b),d.reject(b)}},bindTo:function(c,d){function e(e){function f(a){return angular.equals(a,k)&&a.$priority===k.$priority&&a.$value===k.$value}function g(a){j.assign(c,b.scopeData(a))}function h(){var a=j(c);return[a,a.$priority,a.$value]}var i=!1,j=a(d),k=e.rec;e.scope=c,e.varName=d;var l=b.debounce(function(a){var d=b.scopeData(a);k.$$scopeUpdated(d).finally(function(){i=!1,d.hasOwnProperty("$value")||(delete k.$value,delete j(c).$value),g(k)})},50,500),m=function(a){a=a[0],f(a)||(i=!0,l(a))},n=function(){i||f(j(c))||g(k)};return g(k),e.subs.push(c.$on("$destroy",e.unbind.bind(e))),e.subs.push(c.$watch(h,m,!0)),e.subs.push(k.$watch(n)),e.unbind.bind(e)}return this.assertNotBound(d)||e(this)},unbind:function(){this.scope&&(angular.forEach(this.subs,function(a){a()}),this.subs=[],this.scope=null,this.key=null)},destroy:function(){this.unbind(),this.rec=null}},e}]),angular.module("firebase").factory("$FirebaseObject",["$log","$firebaseObject",function(a,b){return function(){return a.warn("$FirebaseObject has been renamed. Use $firebaseObject instead."),b.apply(null,arguments)}}])}(),function(){"use strict";function a(){this.urls=null,this.registerUrl=function(a){"string"==typeof a&&(this.urls={},this.urls.default=a),angular.isObject(a)&&(this.urls=a)},this.$$checkUrls=function(a){return a?a.default?void 0:new Error('No default Firebase URL registered. Use firebaseRefProvider.registerUrl({ default: "https://<my-firebase-app>.firebaseio.com/"}).'):new Error("No Firebase URL registered. Use firebaseRefProvider.registerUrl() in the config phase. This is required if you are using $firebaseAuthService.")},this.$$createRefsFromUrlConfig=function(a){var b={},c=this.$$checkUrls(a);if(c)throw c;return angular.forEach(a,function(a,c){b[c]=firebase.database().refFromURL(a)}),b},this.$get=function(){return this.$$createRefsFromUrlConfig(this.urls)}}angular.module("firebase.database").provider("$firebaseRef",a)}(),function(){"use strict";angular.module("firebase").factory("$firebase",function(){return function(){throw new Error("$firebase has been removed. You may instantiate $firebaseArray and $firebaseObject directly now. For simple write operations, just use the Firebase ref directly. See the AngularFire 1.0.0 changelog for details: https://github.com/firebase/angularfire/releases/tag/v1.0.0")}})}(),Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){if(void 0===this||null===this)throw new TypeError("'this' is null or not defined");var c=this.length>>>0;for(b=+b||0,Math.abs(b)===1/0&&(b=0),b<0&&(b+=c,b<0&&(b=0));b<c;b++)if(this[b]===a)return b;return-1}),Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{enumerable:!1,configurable:!0,writable:!0,value:function(a){if(null==this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof a)throw new TypeError("predicate must be a function");for(var b,c=Object(this),d=c.length>>>0,e=arguments[1],f=0;f<d;f++)if(f in c&&(b=c[f],a.call(e,b,f,c)))return f;return-1}}),"function"!=typeof Object.create&&!function(){var a=function(){};Object.create=function(b){if(arguments.length>1)throw new Error("Second argument not supported");if(null===b)throw new Error("Cannot set a null [[Prototype]]");if("object"!=typeof b)throw new TypeError("Argument must be an object");return a.prototype=b,new a}}(),Object.keys||(Object.keys=function(){"use strict";var a=Object.prototype.hasOwnProperty,b=!{toString:null}.propertyIsEnumerable("toString"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=c.length;return function(e){if("object"!=typeof e&&("function"!=typeof e||null===e))throw new TypeError("Object.keys called on non-object");var f,g,h=[];for(f in e)a.call(e,f)&&h.push(f);if(b)for(g=0;g<d;g++)a.call(e,c[g])&&h.push(c[g]);return h}}()),"function"!=typeof Object.getPrototypeOf&&("object"==typeof"test".__proto__?Object.getPrototypeOf=function(a){return a.__proto__}:Object.getPrototypeOf=function(a){return a.constructor.prototype}),function(){"use strict";function a(b){if(!angular.isObject(b))return b;var c=angular.isArray(b)?[]:{};return angular.forEach(b,function(b,d){"string"==typeof d&&"$"===d.charAt(0)||(c[d]=a(b))}),c}angular.module("firebase.utils").factory("$firebaseConfig",["$firebaseArray","$firebaseObject","$injector",function(a,b,c){return function(d){var e=angular.extend({},d);return"string"==typeof e.objectFactory&&(e.objectFactory=c.get(e.objectFactory)),"string"==typeof e.arrayFactory&&(e.arrayFactory=c.get(e.arrayFactory)),angular.extend({arrayFactory:a,objectFactory:b},e)}}]).factory("$firebaseUtils",["$q","$timeout","$rootScope",function(b,c,d){var e={batch:function(a,b){return function(){var c=Array.prototype.slice.call(arguments,0);e.compile(function(){a.apply(b,c)})}},debounce:function(a,b,c,d){function f(){j&&(j(),j=null),i&&Date.now()-i>d?l||(l=!0,e.compile(g)):(i||(i=Date.now()),j=e.wait(g,c))}function g(){j=null,i=null,l=!1,a.apply(b,k)}function h(){k=Array.prototype.slice.call(arguments,0),f()}var i,j,k,l;if("number"==typeof b&&(d=c,c=b,b=null),"number"!=typeof c)throw new Error("Must provide a valid integer for wait. Try 0 for a default");if("function"!=typeof a)throw new Error("Must provide a valid function to debounce");return d||(d=10*c||100),h.running=function(){return i>0},h},assertValidRef:function(a,b){if(!angular.isObject(a)||"object"!=typeof a.ref||"function"!=typeof a.ref.transaction)throw new Error(b||"Invalid Firebase reference")},inherit:function(a,b,c){var d=a.prototype;return a.prototype=Object.create(b.prototype),a.prototype.constructor=a,angular.forEach(Object.keys(d),function(b){a.prototype[b]=d[b]}),angular.isObject(c)&&angular.extend(a.prototype,c),a},getPrototypeMethods:function(a,b,c){for(var d={},e=Object.getPrototypeOf({}),f=angular.isFunction(a)&&angular.isObject(a.prototype)?a.prototype:Object.getPrototypeOf(a);f&&f!==e;){for(var g in f)f.hasOwnProperty(g)&&!d.hasOwnProperty(g)&&(d[g]=!0,b.call(c,f[g],g,f));f=Object.getPrototypeOf(f)}},getPublicMethods:function(a,b,c){e.getPrototypeMethods(a,function(a,d){"function"==typeof a&&"_"!==d.charAt(0)&&b.call(c,a,d)})},makeNodeResolver:function(a){return function(b,c){null===b?(arguments.length>2&&(c=Array.prototype.slice.call(arguments,1)),a.resolve(c)):a.reject(b)}},wait:function(a,b){var d=c(a,b||0);return function(){d&&(c.cancel(d),d=null)}},compile:function(a){return d.$evalAsync(a||function(){})},deepCopy:function(a){if(!angular.isObject(a))return a;var b=angular.isArray(a)?a.slice():angular.extend({},a);for(var c in b)b.hasOwnProperty(c)&&angular.isObject(b[c])&&(b[c]=e.deepCopy(b[c]));return b},trimKeys:function(a,b){e.each(a,function(c,d){b.hasOwnProperty(d)||delete a[d]})},scopeData:function(a){var b={$id:a.$id,$priority:a.$priority},c=!1;return e.each(a,function(a,d){c=!0,b[d]=e.deepCopy(a)}),!c&&a.hasOwnProperty("$value")&&(b.$value=a.$value),b},updateRec:function(a,b){var c=b.val(),d=angular.extend({},a);return angular.isObject(c)?delete a.$value:(a.$value=c,c={}),e.trimKeys(a,c),angular.extend(a,c),a.$priority=b.getPriority(),!angular.equals(d,a)||d.$value!==a.$value||d.$priority!==a.$priority},applyDefaults:function(a,b){return angular.isObject(b)&&angular.forEach(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)}),a},dataKeys:function(a){var b=[];return e.each(a,function(a,c){b.push(c)}),b},each:function(a,b,c){if(angular.isObject(a)){for(var d in a)if(a.hasOwnProperty(d)){var e=d.charAt(0);"_"!==e&&"$"!==e&&"."!==e&&b.call(c,a[d],d,a)}}else if(angular.isArray(a))for(var f=0,g=a.length;f<g;f++)b.call(c,a[f],f,a);return a},toJSON:function(b){var c;return angular.isObject(b)||(b={$value:b}),angular.isFunction(b.toJSON)?c=b.toJSON():(c={},e.each(b,function(b,d){c[d]=a(b)})),angular.isDefined(b.$value)&&0===Object.keys(c).length&&null!==b.$value&&(c[".value"]=b.$value),angular.isDefined(b.$priority)&&Object.keys(c).length>0&&null!==b.$priority&&(c[".priority"]=b.$priority),angular.forEach(c,function(a,b){if(b.match(/[.$\[\]#\/]/)&&".value"!==b&&".priority"!==b)throw new Error("Invalid key "+b+" (cannot contain .$[]#/)");if(angular.isUndefined(a))throw new Error("Key "+b+" was undefined. Cannot pass undefined in JSON. Use null instead.")}),c},doSet:function(a,c){var d=b.defer();if(angular.isFunction(a.set)||!angular.isObject(c))try{a.set(c,e.makeNodeResolver(d))}catch(a){d.reject(a)}else{var f=angular.extend({},c);a.once("value",function(b){b.forEach(function(a){f.hasOwnProperty(a.key)||(f[a.key]=null)}),a.ref.update(f,e.makeNodeResolver(d))},function(a){d.reject(a)})}return d.promise},doRemove:function(a){var c=b.defer();return angular.isFunction(a.remove)?a.remove(e.makeNodeResolver(c)):a.once("value",function(b){var d=[];b.forEach(function(a){d.push(a.ref.remove())}),e.allPromises(d).then(function(){c.resolve(a)},function(a){c.reject(a)})},function(a){c.reject(a)}),c.promise},VERSION:"2.0.2",allPromises:b.all.bind(b)};return e}])}();
\ No newline at end of file
var App = angular.module('myApp', ['firebase']);
App.controller("mainCtrl", function($scope,$timeout,$firebaseObject,$rootScope,$http)
{
$scope.variables = {};
$scope.recentUsers = [];
$scope.messages = [];
$scope.session;
$.get( base_url+'Home/get_session', function( data )
{
//console.log("connect")
$scope.session = jQuery.parseJSON(data);
//console.log($scope.session)
})
$.get( base_url+'Home/get_opponentData', function( data )
{
//console.log("connect")
var opponent_user = jQuery.parseJSON(data);
if(opponent_user.status!='error')
{$scope.load_chat(opponent_user);}
})
$scope.load_recent_chat = function()
{
$.ajax({
url: base_url+"Home/get_recent_chat",
type: "GET",
dataType: "json",
success: function(result,status){
$timeout( function(){
$scope.recentUsers = result;
//console.log($scope.recentUsers);
//console.log($scope.allUsers);
},100);
},
complete(xhr,status){
/*console.log('completed')*/
},
error(xhr,status,error){
// alert(status)
}
})
$timeout(function() {$scope.load_recent_chat();}, 3000);
}
$scope.load_recent_chat();
$.ajax({
url: base_url+"Home/get_all_chat_users",
type: "GET",
dataType: "json",
success: function(result,status){
$timeout( function(){
$scope.allUsers = result;
//console.log($scope.allUsers,$scope.recentUsers);
},100);
},
complete(xhr,status){
/*console.log('completed')*/
},
error(xhr,status,error){
// alert(status)
}
})
$scope.load_chat =function(object)
{
if(angular.isDefined(object.chat_id))
{
$scope.chat_id = object.chat_id;
}
$scope.list = [];
if($scope.session.type=="DOCTOR")
{
$scope.opponent = {'name' : object.pat_name,'id' : object.patient_id,'pic' : object.pat_pic};
$scope.chat_id = 'P'+object.patient_id+'@_@D'+$scope.session.id;
}
else
{
$scope.opponent = {'name' : object.doc_name,'id' : object.doctor_id,'pic' : object.doc_pic};
$scope.chat_id = 'P'+$scope.session.id+'@_@D'+object.doctor_id;
}
//console.log($scope.chat_id)
//console.log($scope.opponent)
var connRef = firebase.database().ref('chats/'+$scope.chat_id+'/').orderByChild("time");
connRef.on('value', function(snapshot)
{
$scope.messages = snapshot.val();
angular.forEach($scope.messages,(data,key)=>{
var d = new Date(data.time);
var dat=(d.getDate() + '/' + (d.getMonth()+1) + '/' + d.getFullYear());
var a = $scope.list.indexOf(dat);
if(a=="-1")
{
$scope.list.push(dat);
data.show_date = true;
}
else
{data.show_date = false;}
})
$timeout(function(){$scope.$apply()},5);
$timeout(function()
{
var scroller = document.getElementById("chat_autoscroll");
scroller.scrollTop = scroller.scrollHeight;
}, 10,false);
//console.log($scope.messages)
});
// connectedRef.on("value", function(snap) {
}
/*doctor_id:30
doctor_name:"Jithin"
doctor_photo:"assets/"
message:"doctor assd Testing"
patient_id:156
patient_name:"Reeba"
patient_photo:"assets/"
photo_url:""
sender_type:1
time:1522753020000
type:0
video_url:""*/
$scope.sentmsg = function (msg,opp)
{
if(msg.length>0)
{
//console.log(msg,$scope.session,$scope.opponent)
if($scope.session.type=="DOCTOR")
{
var object = { 'doctor_id':Number($scope.session.id),
'doctor_name':$scope.session.name,
'doctor_photo':$scope.session.profile_photo,
'message':msg,
'sender_type' : 1,
'patient_id':Number($scope.opponent.id),
'patient_name':$scope.opponent.name,
'patient_photo':$scope.opponent.pic,
'photo_url':"",
'time':new Date().getTime(),
'type':0,
'video_url':""};
//UPDATING RECENT MSG IN MYSQL DB
var recent_obj = { 'chat_id': $scope.chat_id,
'patient_id': Number($scope.opponent.id),
'doctor_id': Number($scope.session.id),
'sender_type':1,
'msg': msg,
'photo_url': '',
'video_url': '',
'type': 0,
'time': new Date().getTime()
}
}
if($scope.session.type=="PATIENT")
{
var object = { 'doctor_id':Number($scope.opponent.id),
'doctor_name':$scope.opponent.name,
'doctor_photo':$scope.opponent.pic,
'message':msg,
'sender_type' : 0,
'patient_id':Number($scope.session.id),
'patient_name':$scope.session.name,
'patient_photo':$scope.session.profile_photo,
'photo_url':"",
'time':new Date().getTime(),
'type':0,
'video_url':""};
//UPDATING RECENT MSG IN MYSQL DB
var recent_obj = { 'chat_id': $scope.chat_id,
'patient_id': Number($scope.session.id),
'doctor_id': Number($scope.opponent.id),
'sender_type':0,
'msg': msg,
'photo_url': '',
'video_url': '',
'type': 0,
'time': new Date().getTime()
}
}
firebase.database().ref('chats/'+$scope.chat_id+'/').push(object); //Update msg in firebase
if($scope.session.type=="DOCTOR")
{
}
if($scope.session.type=="DOCTOR")
{recent_obj.sender_type = 1;}
if($scope.session.type=="PATIENT")
{recent_obj.sender_type = 0;}
$.post(base_url+"Home/update_recent_chat",recent_obj,(data,status)=>{
//console.log(data)
$timeout( function()
{
$scope.recentUsers = JSON.parse(data);
},100);
});
$scope.variables.texttosent = '';
}
}
function findWithAttr(array, attr, value) {
for(var i = 0; i < array.length; i += 1) {
if(array[i][attr] === value) {
return i;
}
}
return -1;
}
})
\ No newline at end of file
.ngsb-wrap {
-ms-touch-action: none;
}
.ngsb-wrap .ngsb-container {
width: auto;
overflow: hidden;
transition: 0.5s all;
}
.ngsb-wrap:hover .ngsb-scrollbar {
opacity: 1;
filter: "alpha(opacity=100)";
-ms-filter: "alpha(opacity=100)";
/* old ie */
}
.ngsb-wrap .ngsb-scrollbar {
width: 16px;
height: 100%;
top: 0;
right: 0;
opacity: 0.75;
filter: "alpha(opacity=75)";
-ms-filter: "alpha(opacity=75)";
/* old ie */
}
.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-container {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
height: auto;
}
.ngsb-wrap .ngsb-scrollbar a.ngsb-thumb-container {
margin: 20px 0;
}
.ngsb-wrap .ngsb-scrollbar .ngsb-track {
height: 100%;
margin: 0 auto;
width: 6px;
background: #000;
background: rgba(0, 0, 0, 0.4);
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
filter: "alpha(opacity=40)";
-ms-filter: "alpha(opacity=40)";
/* old ie */
box-shadow: 1px 1px 1px rgba(255, 255, 255, 0.1);
}
.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos {
cursor: pointer;
width: 100%;
height: 30px;
}
.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos .ngsb-thumb {
transition: 0.5s all;
width: 4px;
height: 100%;
margin: 0 auto;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
text-align: center;
background: #fff;
/* rgba fallback */
background: rgba(255, 255, 255, 0.4);
filter: "alpha(opacity=40)";
-ms-filter: "alpha(opacity=40)";
/* old ie */
}
.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos:hover .ngsb-thumb {
background: rgba(255, 255, 255, 0.5);
filter: "alpha(opacity=50)";
-ms-filter: "alpha(opacity=50)";
/* old ie */
}
.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos:active {
background: rgba(255, 255, 255, 0.6);
filter: "alpha(opacity=60)";
-ms-filter: "alpha(opacity=60)";
/* old ie */
}
'use strict';
angular.module('ngScrollbar', []).directive('ngScrollbar', [
'$parse',
'$window',
function ($parse, $window) {
return {
restrict: 'A',
replace: true,
transclude: true,
scope: { 'showYScrollbar': '=?isBarShown' },
link: function (scope, element, attrs) {
var mainElm, transculdedContainer, tools, thumb, thumbLine, track;
var flags = { bottom: attrs.hasOwnProperty('bottom') };
var win = angular.element($window);
var hasAddEventListener = !!win[0].addEventListener;
var hasRemoveEventListener = !!win[0].removeEventListener;
// Elements
var dragger = { top: 0 }, page = { top: 0 };
// Styles
var scrollboxStyle, draggerStyle, draggerLineStyle, pageStyle;
var calcStyles = function () {
scrollboxStyle = {
position: 'relative',
overflow: 'hidden',
'max-width': '100%',
height: '100%'
};
if (page.height) {
scrollboxStyle.height = page.height + 'px';
}
draggerStyle = {
position: 'absolute',
height: dragger.height + 'px',
top: dragger.top + 'px'
};
draggerLineStyle = {
position: 'relative',
'line-height': dragger.height + 'px'
};
pageStyle = {
position: 'relative',
top: page.top + 'px',
overflow: 'hidden'
};
};
var redraw = function () {
thumb.css('top', dragger.top + 'px');
var draggerOffset = dragger.top / page.height;
page.top = -Math.round(page.scrollHeight * draggerOffset);
transculdedContainer.css('top', page.top + 'px');
};
var trackClick = function (event) {
var offsetY = event.hasOwnProperty('offsetY') ? event.offsetY : event.layerY;
var newTop = Math.max(0, Math.min(parseInt(dragger.trackHeight, 10) - parseInt(dragger.height, 10), offsetY));
dragger.top = newTop;
redraw();
event.stopPropagation();
};
var wheelHandler = function (event) {
var wheelSpeed = 40;
// Mousewheel speed normalization approach adopted from
// http://stackoverflow.com/a/13650579/1427418
var o = event, d = o.detail, w = o.wheelDelta, n = 225, n1 = n - 1;
// Normalize delta
d = d ? w && (f = w / d) ? d / f : -d / 1.35 : w / 120;
// Quadratic scale if |d| > 1
d = d < 1 ? d < -1 ? (-Math.pow(d, 2) - n1) / n : d : (Math.pow(d, 2) + n1) / n;
// Delta *should* not be greater than 2...
event.delta = Math.min(Math.max(d / 2, -1), 1);
event.delta = event.delta * wheelSpeed;
dragger.top = Math.max(0, Math.min(parseInt(page.height, 10) - parseInt(dragger.height, 10), parseInt(dragger.top, 10) - event.delta));
redraw();
if (!!event.preventDefault) {
event.preventDefault();
} else {
return false;
}
};
var lastOffsetY = 0;
var thumbDrag = function (event, offsetX, offsetY) {
dragger.top = Math.max(0, Math.min(parseInt(dragger.trackHeight, 10) - parseInt(dragger.height, 10), offsetY));
event.stopPropagation();
};
var dragHandler = function (event) {
var newOffsetX = 0;
var newOffsetY = event.pageY - thumb[0].scrollTop - lastOffsetY;
thumbDrag(event, newOffsetX, newOffsetY);
redraw();
};
var _mouseUp = function (event) {
win.off('mousemove', dragHandler);
win.off('mouseup', _mouseUp);
event.stopPropagation();
};
var _touchDragHandler = function (event) {
var newOffsetX = 0;
var newOffsetY = event.originalEvent.changedTouches[0].pageY - thumb[0].scrollTop - lastOffsetY;
thumbDrag(event, newOffsetX, newOffsetY);
redraw();
};
var _touchEnd = function (event) {
win.off('touchmove', _touchDragHandler);
win.off('touchend', _touchEnd);
event.stopPropagation();
};
var registerEvent = function (elm) {
var wheelEvent = win[0].onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';
if (hasAddEventListener) {
elm.addEventListener(wheelEvent, wheelHandler, false);
} else {
elm.attachEvent('onmousewheel', wheelHandler);
}
};
var removeEvent = function (elm) {
var wheelEvent = win[0].onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';
if (hasRemoveEventListener) {
elm.removeEventListener(wheelEvent, wheelHandler, false);
} else {
elm.detachEvent('onmousewheel', wheelHandler);
}
};
var buildScrollbar = function (rollToBottom) {
rollToBottom = flags.bottom || rollToBottom;
mainElm = angular.element(element.children()[0]);
transculdedContainer = angular.element(mainElm.children()[0]);
tools = angular.element(mainElm.children()[1]);
thumb = angular.element(angular.element(tools.children()[0]).children()[0]);
thumbLine = angular.element(thumb.children()[0]);
track = angular.element(angular.element(tools.children()[0]).children()[1]);
page.height = element[0].offsetHeight;
page.scrollHeight = transculdedContainer[0].scrollHeight;
if (page.height < page.scrollHeight) {
scope.showYScrollbar = true;
scope.$emit('scrollbar.show');
// Calculate the dragger height
dragger.height = Math.round(page.height / page.scrollHeight * page.height);
dragger.trackHeight = page.height;
// update the transcluded content style and clear the parent's
calcStyles();
element.css({ overflow: 'hidden' });
mainElm.css(scrollboxStyle);
transculdedContainer.css(pageStyle);
thumb.css(draggerStyle);
thumbLine.css(draggerLineStyle);
// Bind scroll bar events
track.bind('click', trackClick);
// Handle mousewheel
registerEvent(transculdedContainer[0]);
// Drag the scroller with the mouse
thumb.on('mousedown', function (event) {
lastOffsetY = event.pageY - thumb[0].offsetTop;
win.on('mouseup', _mouseUp);
win.on('mousemove', dragHandler);
event.preventDefault();
});
// Drag the scroller by touch
thumb.on('touchstart', function (event) {
lastOffsetY = event.originalEvent.changedTouches[0].pageY - thumb[0].offsetTop;
win.on('touchend', _touchEnd);
win.on('touchmove', _touchDragHandler);
event.preventDefault();
});
if (rollToBottom) {
flags.bottom = false;
dragger.top = parseInt(page.height, 10) - parseInt(dragger.height, 10);
} else {
dragger.top = Math.max(0, Math.min(parseInt(page.height, 10) - parseInt(dragger.height, 10), parseInt(dragger.top, 10)));
}
redraw();
} else {
scope.showYScrollbar = false;
scope.$emit('scrollbar.hide');
thumb.off('mousedown');
removeEvent(transculdedContainer[0]);
transculdedContainer.attr('style', 'position:relative;top:0');
// little hack to remove other inline styles
mainElm.css({ height: '100%' });
}
};
var rebuildTimer;
var rebuild = function (e, data) {
/* jshint -W116 */
if (rebuildTimer != null) {
clearTimeout(rebuildTimer);
}
/* jshint +W116 */
var rollToBottom = !!data && !!data.rollToBottom;
rebuildTimer = setTimeout(function () {
page.height = null;
buildScrollbar(rollToBottom);
if (!scope.$$phase) {
scope.$digest();
}
// update parent for flag update
if (!scope.$parent.$$phase) {
scope.$parent.$digest();
}
}, 72);
};
buildScrollbar();
if (!!attrs.rebuildOn) {
attrs.rebuildOn.split(' ').forEach(function (eventName) {
scope.$on(eventName, rebuild);
});
}
if (attrs.hasOwnProperty('rebuildOnResize')) {
win.on('resize', rebuild);
}
},
template: '<div>' + '<div class="ngsb-wrap">' + '<div class="ngsb-container" ng-transclude></div>' + '<div class="ngsb-scrollbar" style="position: absolute; display: block;" ng-show="showYScrollbar">' + '<div class="ngsb-thumb-container">' + '<div class="ngsb-thumb-pos" oncontextmenu="return false;">' + '<div class="ngsb-thumb" ></div>' + '</div>' + '<div class="ngsb-track"></div>' + '</div>' + '</div>' + '</div>' + '</div>'
};
}
]);
\ No newline at end of file
.ngsb-wrap{-ms-touch-action:none}.ngsb-wrap .ngsb-container{width:auto;overflow:hidden;transition:.5s all}.ngsb-wrap:hover .ngsb-scrollbar{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.ngsb-wrap .ngsb-scrollbar{width:16px;height:100%;top:0;right:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-container{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.ngsb-wrap .ngsb-scrollbar a.ngsb-thumb-container{margin:20px 0}.ngsb-wrap .ngsb-scrollbar .ngsb-track{height:100%;margin:0 auto;width:6px;background:#000;background:rgba(0,0,0,.4);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)";box-shadow:1px 1px 1px rgba(255,255,255,.1)}.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos{cursor:pointer;width:100%;height:30px}.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos .ngsb-thumb{transition:.5s all;width:4px;height:100%;margin:0 auto;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;text-align:center;background:#fff;background:rgba(255,255,255,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos:hover .ngsb-thumb{background:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.ngsb-wrap .ngsb-scrollbar .ngsb-thumb-pos:active{background:rgba(255,255,255,.6);filter:"alpha(opacity=60)";-ms-filter:"alpha(opacity=60)"}
\ No newline at end of file
/**
* ng-scrollbar
* @version v0.0.7 - 2015-06-19
* @link https://github.com/asafdav/ng-scrollbar
* @author Asaf David <[email protected]>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
"use strict";angular.module("ngScrollbar",[]).directive("ngScrollbar",["$parse","$window",function(a,b){return{restrict:"A",replace:!0,transclude:!0,scope:{showYScrollbar:"=?isBarShown"},link:function(a,c,d){var e,g,h,i,j,k,l,m,n,o,p,q={bottom:d.hasOwnProperty("bottom")},r=angular.element(b),s=!!r[0].addEventListener,t=!!r[0].removeEventListener,u={top:0},v={top:0},w=function(){l={position:"relative",overflow:"hidden","max-width":"100%",height:"100%"},v.height&&(l.height=v.height+"px"),m={position:"absolute",height:u.height+"px",top:u.top+"px"},n={position:"relative","line-height":u.height+"px"},o={position:"relative",top:v.top+"px",overflow:"hidden"}},x=function(){i.css("top",u.top+"px");var a=u.top/v.height;v.top=-Math.round(v.scrollHeight*a),g.css("top",v.top+"px")},y=function(a){var b=a.hasOwnProperty("offsetY")?a.offsetY:a.layerY,c=Math.max(0,Math.min(parseInt(u.trackHeight,10)-parseInt(u.height,10),b));u.top=c,x(),a.stopPropagation()},z=function(a){var b=40,c=a,d=c.detail,e=c.wheelDelta,g=225,h=g-1;return d=d?e&&(f=e/d)?d/f:-d/1.35:e/120,d=1>d?-1>d?(-Math.pow(d,2)-h)/g:d:(Math.pow(d,2)+h)/g,a.delta=Math.min(Math.max(d/2,-1),1),a.delta=a.delta*b,u.top=Math.max(0,Math.min(parseInt(v.height,10)-parseInt(u.height,10),parseInt(u.top,10)-a.delta)),x(),a.preventDefault?void a.preventDefault():!1},A=0,B=function(a,b,c){u.top=Math.max(0,Math.min(parseInt(u.trackHeight,10)-parseInt(u.height,10),c)),a.stopPropagation()},C=function(a){var b=0,c=a.pageY-i[0].scrollTop-A;B(a,b,c),x()},D=function(a){r.off("mousemove",C),r.off("mouseup",D),a.stopPropagation()},E=function(a){var b=0,c=a.originalEvent.changedTouches[0].pageY-i[0].scrollTop-A;B(a,b,c),x()},F=function(a){r.off("touchmove",E),r.off("touchend",F),a.stopPropagation()},G=function(a){var b=void 0!==r[0].onmousewheel?"mousewheel":"DOMMouseScroll";s?a.addEventListener(b,z,!1):a.attachEvent("onmousewheel",z)},H=function(a){var b=void 0!==r[0].onmousewheel?"mousewheel":"DOMMouseScroll";t?a.removeEventListener(b,z,!1):a.detachEvent("onmousewheel",z)},I=function(b){b=q.bottom||b,e=angular.element(c.children()[0]),g=angular.element(e.children()[0]),h=angular.element(e.children()[1]),i=angular.element(angular.element(h.children()[0]).children()[0]),j=angular.element(i.children()[0]),k=angular.element(angular.element(h.children()[0]).children()[1]),v.height=c[0].offsetHeight,v.scrollHeight=g[0].scrollHeight,v.height<v.scrollHeight?(a.showYScrollbar=!0,a.$emit("scrollbar.show"),u.height=Math.round(v.height/v.scrollHeight*v.height),u.trackHeight=v.height,w(),c.css({overflow:"hidden"}),e.css(l),g.css(o),i.css(m),j.css(n),k.bind("click",y),G(g[0]),i.on("mousedown",function(a){A=a.pageY-i[0].offsetTop,r.on("mouseup",D),r.on("mousemove",C),a.preventDefault()}),i.on("touchstart",function(a){A=a.originalEvent.changedTouches[0].pageY-i[0].offsetTop,r.on("touchend",F),r.on("touchmove",E),a.preventDefault()}),b?(q.bottom=!1,u.top=parseInt(v.height,10)-parseInt(u.height,10)):u.top=Math.max(0,Math.min(parseInt(v.height,10)-parseInt(u.height,10),parseInt(u.top,10))),x()):(a.showYScrollbar=!1,a.$emit("scrollbar.hide"),i.off("mousedown"),H(g[0]),g.attr("style","position:relative;top:0"),e.css({height:"100%"}))},J=function(b,c){null!=p&&clearTimeout(p);var d=!!c&&!!c.rollToBottom;p=setTimeout(function(){v.height=null,I(d),a.$$phase||a.$digest(),a.$parent.$$phase||a.$parent.$digest()},72)};I(),d.rebuildOn&&d.rebuildOn.split(" ").forEach(function(b){a.$on(b,J)}),d.hasOwnProperty("rebuildOnResize")&&r.on("resize",J)},template:'<div><div class="ngsb-wrap"><div class="ngsb-container" ng-transclude></div><div class="ngsb-scrollbar" style="position: absolute; display: block;" ng-show="showYScrollbar"><div class="ngsb-thumb-container"><div class="ngsb-thumb-pos" oncontextmenu="return false;"><div class="ngsb-thumb" ></div></div><div class="ngsb-track"></div></div></div></div></div>'}}]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -250,6 +250,82 @@ function certificate_images_loadthumbnail(file)
$(function(){
$('#broadcast-msg-sent-btn').click(function(){
var broadcast_msg= $("#broadcasttext").val(CKEDITOR.instances.broadcasttext.getData())[0].value;
var users = $('#sentbroad-users').html();
if(broadcast_msg.length>0&&users.length>0)
{
var result = post_ajax(base_url+'Doctor/sentBroadcast',{'json_obj':JSON.stringify(json_array_broadcast),'message':broadcast_msg});
var items = {'status':'success'}
if(items.status=='success')
{
$('#sent-broadcast').modal('hide');
$('#success').modal('show');
}
}
else if(users.length==0)
{
$('#broad-users-error').removeClass('hidden');
}
else if(broadcast_msg.length==0)
{
$('#broad-msg-error').removeClass('hidden');
}
})
/*FUNCTION FOR SENTING BROADCAST MESSAGE*/
var json_array_broadcast = [];
$(document).on('click','.sent-broadcast-btn',function()
{
CKEDITOR.instances.broadcasttext.setData('', function(){this.checkDirty();});
$('#broad-msg-error,#broad-users-error').addClass('hidden');
json_array_broadcast = []
$("input:checkbox[name=sent-broad-attend]:checked").each(function() {
var obj = {'patient_id' : $(this).val(),
'pat_name' : $(this).attr('patname'),
'pat_pic' : $(this).attr('patpic')
}
json_array_broadcast.push(obj);
});
var users = json_array_broadcast.map(x=>x.pat_name).join(",");
$('#sentbroad-users').html(users);
$('#sent-broadcast').modal('show');
})
$(document).on('click','.sent-broadcast-btn-sch',function()
{
CKEDITOR.instances.broadcasttext.setData('', function(){this.checkDirty();});
$('#broad-msg-error,#broad-users-error').addClass('hidden');
json_array_broadcast = []
$("input:checkbox[name=sent-broad-sch]:checked").each(function() {
var obj = {'patient_id' : $(this).val(),
'pat_name' : $(this).attr('patname'),
'pat_pic' : $(this).attr('patpic')
}
json_array_broadcast.push(obj);
});
var users = json_array_broadcast.map(x=>x.pat_name).join(",");
$('#sentbroad-users').html(users);
$('#sent-broadcast').modal('show');
})
/*FUNCTION FOR OPEN MEDICAL RECORDS IN RECORDSVIEW PAGE*/
$('.show_record_recordview_btn').click(function()
{
var booking_id = this.getAttribute('book');
console.log(booking_id);
var result = post_ajax(base_url+'Doctor/loadrecord/'+booking_id);
$('#load-med-record-view').html(result);
})
$('.record-section-mail-btn').click(function(){
var record_id = this.getAttribute('record');
var section = this.getAttribute('func');
......@@ -924,11 +1000,12 @@ $('#record-sec-1-btn').click(function()
/*DOCTOR - MEDICAL RECORDS*/
/*----------------------------------------*/
$('#select-all-attended').change(function()
{
$(document).on("change","#select-all-attended",function() {
//$('#select-all-attended').change(function()
var $check = $(this);
if ($check.prop('checked'))
{
$('.select-attended').prop('checked', true);
}
else
......@@ -936,8 +1013,9 @@ $('#select-all-attended').change(function()
$('.select-attended').prop('checked', false);
}
})
$('#select-all-scheduled').change(function()
{
$(document).on("change","#select-all-scheduled",function() {
//$('#select-all-scheduled').change(function(){
var $check = $(this);
if ($check.prop('checked'))
{
......@@ -1631,7 +1709,7 @@ $("#login_submit").click(function()
}
else
{
console.log('Cant Find Your Location!');
alert('Cant Find Your Location!');
}
});
......
......@@ -11,7 +11,8 @@
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.3.7"
"php": ">=5.3.7",
"ktamas77/firebase-php": "dev-master"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
......
File added
<?php
namespace Firebase;
require_once __DIR__ . '/firebaseInterface.php';
use \Exception;
/**
* Firebase PHP Client Library
*
* @author Tamas Kalman <[email protected]>
* @url https://github.com/ktamas77/firebase-php/
* @link https://www.firebase.com/docs/rest-api.html
*/
/**
* Firebase PHP Class
*
* @author Tamas Kalman <[email protected]>
* @link https://www.firebase.com/docs/rest-api.html
*/
class FirebaseLib implements FirebaseInterface
{
private $_baseURI;
private $_timeout;
private $_token;
private $_curlHandler;
/**
* Constructor
*
* @param string $baseURI
* @param string $token
*/
function __construct($baseURI = '', $token = '')
{
if ($baseURI == '') {
trigger_error('You must provide a baseURI variable.', E_USER_ERROR);
}
if (!extension_loaded('curl')) {
trigger_error('Extension CURL is not loaded.', E_USER_ERROR);
}
$this->setBaseURI($baseURI);
$this->setTimeOut(10);
$this->setToken($token);
$this->initCurlHandler();
}
/**
* Initializing the CURL handler
*
* @return void
*/
public function initCurlHandler()
{
$this->_curlHandler = curl_init();
}
/**
* Closing the CURL handler
*
* @return void
*/
public function closeCurlHandler()
{
curl_close($this->_curlHandler);
}
/**
* Sets Token
*
* @param string $token Token
*
* @return void
*/
public function setToken($token)
{
$this->_token = $token;
}
/**
* Sets Base URI, ex: http://yourcompany.firebase.com/youruser
*
* @param string $baseURI Base URI
*
* @return void
*/
public function setBaseURI($baseURI)
{
$baseURI .= (substr($baseURI, -1) == '/' ? '' : '/');
$this->_baseURI = $baseURI;
}
/**
* Returns with the normalized JSON absolute path
*
* @param string $path Path
* @param array $options Options
* @return string
*/
private function _getJsonPath($path, $options = array())
{
$url = $this->_baseURI;
if ($this->_token !== '') {
$options['auth'] = $this->_token;
}
$path = ltrim($path, '/');
return $url . $path . '.json?' . http_build_query($options);
}
/**
* Sets REST call timeout in seconds
*
* @param integer $seconds Seconds to timeout
*
* @return void
*/
public function setTimeOut($seconds)
{
$this->_timeout = $seconds;
}
/**
* Writing data into Firebase with a PUT request
* HTTP 200: Ok
*
* @param string $path Path
* @param mixed $data Data
* @param array $options Options
*
* @return array Response
*/
public function set($path, $data, $options = array())
{
return $this->_writeData($path, $data, 'PUT', $options);
}
/**
* Pushing data into Firebase with a POST request
* HTTP 200: Ok
*
* @param string $path Path
* @param mixed $data Data
* @param array $options Options
*
* @return array Response
*/
public function push($path, $data, $options = array())
{
return $this->_writeData($path, $data, 'POST', $options);
}
/**
* Updating data into Firebase with a PATH request
* HTTP 200: Ok
*
* @param string $path Path
* @param mixed $data Data
* @param array $options Options
*
* @return array Response
*/
public function update($path, $data, $options = array())
{
return $this->_writeData($path, $data, 'PATCH', $options);
}
/**
* Reading data from Firebase
* HTTP 200: Ok
*
* @param string $path Path
* @param array $options Options
*
* @return array Response
*/
public function get($path, $options = array())
{
try {
$ch = $this->_getCurlHandler($path, 'GET', $options);
$return = curl_exec($ch);
} catch (Exception $e) {
$return = null;
}
return $return;
}
/**
* Deletes data from Firebase
* HTTP 204: Ok
*
* @param string $path Path
* @param array $options Options
*
* @return array Response
*/
public function delete($path, $options = array())
{
try {
$ch = $this->_getCurlHandler($path, 'DELETE', $options);
$return = curl_exec($ch);
} catch (Exception $e) {
$return = null;
}
return $return;
}
/**
* Returns with Initialized CURL Handler
*
* @param string $path Path
* @param string $mode Mode
* @param array $options Options
*
* @return resource Curl Handler
*/
private function _getCurlHandler($path, $mode, $options = array())
{
$url = $this->_getJsonPath($path, $options);
$ch = $this->_curlHandler;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $mode);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
return $ch;
}
private function _writeData($path, $data, $method = 'PUT', $options = array())
{
$jsonData = json_encode($data);
$header = array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
);
try {
$ch = $this->_getCurlHandler($path, $method, $options);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
$return = curl_exec($ch);
} catch (Exception $e) {
$return = null;
}
return $return;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment