Created
June 18, 2014 15:12
-
-
Save Tapha/0035c87b1af1a6defcdf to your computer and use it in GitHub Desktop.
A model that i implemented to manage scheduling in my app (podigniter.com)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| class Scheduler extends CI_Model { | |
| //var $title = ''; | |
| //var $content = ''; | |
| //var $date = ''; | |
| function __construct() | |
| { | |
| // Call the Model constructor | |
| parent::__construct(); | |
| $this->load->library('ion_auth'); | |
| $this->load->library('mailman'); | |
| $this->load->library('twilio'); | |
| } | |
| public function startsWith($haystack, $needle) | |
| { | |
| return $needle === "" || strpos($haystack, $needle) === 0; | |
| } | |
| public function gmt_offset($time, $is_guest = NULL) | |
| { | |
| if(strpos($time,'-') !== false) | |
| { | |
| $time = str_replace('-', '', $time); | |
| $time = str_replace(':00', '', $time); | |
| //if first char = 0 then remove. | |
| if ($this->startsWith($time, '0')) | |
| { | |
| $time = substr($time, 1); | |
| } | |
| $time = (int)$time * 3600; | |
| $time = (string)('-'.$time); | |
| return $time; | |
| } | |
| elseif(strpos($time,'+') !== false) | |
| { | |
| $time = str_replace('+', '', $time); | |
| $time = str_replace(':00', '', $time); | |
| //if first char = 0 then remove. | |
| if ($this->startsWith($time, '0')) | |
| { | |
| $time = substr($time, 1); | |
| } | |
| $time = (int)$time * 3600; | |
| $time = (string)('+'.$time); | |
| return $time; | |
| } | |
| } | |
| public function add_sub_gmt_offset($string, $offset) | |
| { | |
| if(strpos($offset,'-') !== false) | |
| { | |
| $offset = str_replace('-', '', $offset); | |
| $offset = (int)$offset; | |
| $dtime = DateTime::createFromFormat('H:i', $string); | |
| $timestamp = $dtime->getTimestamp(); | |
| $new_time = $timestamp - $offset; | |
| $new_time = date('H:i', $new_time); | |
| return $new_time; | |
| } | |
| elseif(strpos($offset,'+') !== false) | |
| { | |
| $$offset = str_replace('-', '', $offset); | |
| $offset = (int)$offset; | |
| $dtime = DateTime::createFromFormat('H:i', $string); | |
| $timestamp = $dtime->getTimestamp(); | |
| $new_time = $timestamp + $offset; | |
| $new_time = date('H:i', $new_time); | |
| return $new_time; | |
| } | |
| } | |
| public function _get_gmt_offset($user_id, $is_guest = NULL) | |
| { | |
| if ($is_guest == 'guest') | |
| { | |
| $q = $this->db->get_where('tbl_requesters_info', array('id' => $user_id)); | |
| return $q->result()[0]->gmt_timezone; | |
| } | |
| else | |
| { | |
| $q = $this->db->get_where('tbl_user_info', array('FK_user_id' => $user_id)); | |
| return $q->result()[0]->gmt_timezone; | |
| } | |
| } | |
| public function _get_set_time($time_id) | |
| { | |
| $q = $this->db->get_where('tbl_user_available_times', array('id' => $time_id)); | |
| return $q->result()[0]->time; //apply gmt offset function to this. | |
| } | |
| public function get_custom_timestamp() | |
| { | |
| $user = $this->ion_auth->user()->row(); | |
| $gmt_offset_string = $this->_get_gmt_offset($user->id); | |
| $gmt = $this->gmt_offset($gmt_offset_string); | |
| return $gmt; | |
| } | |
| public function _get_set_date($time_id) | |
| { | |
| $q = $this->db->get_where('tbl_user_available_times', array('id' => $time_id)); | |
| $d = $q->result()[0]->FK_date_id; | |
| $qq = $this->db->get_where('lut_dates', array('id' => $d)); | |
| $qqma = $qq->result()[0]->date; | |
| $myDateTime = DateTime::createFromFormat('Y-m-d', $qqma); | |
| $newDateString = $myDateTime->format('F jS Y'); | |
| return $newDateString; | |
| } | |
| public function _get_guest_data($guest_id) | |
| { | |
| $q = $this->db->get_where('tbl_requesters_info', array('id' => $guest_id)); | |
| return $q->result()[0]; | |
| } | |
| public function _get_episode_name($ep_id) | |
| { | |
| $q = $this->db->get_where('episodes', array('id' => $ep_id)); | |
| return $q->result()[0]->name; | |
| } | |
| public function _get_user_id_from_ep($ep_id) | |
| { | |
| $q = $this->db->get_where('episodes', array('id' => $ep_id)); | |
| return $q->result()[0]->user_id; | |
| } | |
| public function _get_user_data($user_id) | |
| { | |
| $q = $this->db->get_where('users', array('id' => $user_id)); | |
| return $q->result()[0]; | |
| } | |
| public function setting_you($str_input = 0, $user_id) | |
| { | |
| if ($str_input != 0) | |
| { | |
| $this->db->select($str_input); | |
| $this->db->where('user_id', $user_id); | |
| $q = $this->db->get('reminders_settings'); | |
| if ($q->num_rows > 0) | |
| { | |
| $res = (int)$q->result()[0]->$str_input; | |
| //print_r($res); | |
| return $res; | |
| } | |
| else | |
| { | |
| return 0; | |
| } | |
| } | |
| } | |
| public function setting_guest($str_input = 0, $user_id) | |
| { | |
| if ($str_input != 0) | |
| { | |
| $this->db->select($str_input); | |
| $this->db->where('user_id', $user_id); | |
| $q = $this->db->get('reminders_settings'); | |
| if ($q->num_rows > 0) | |
| { | |
| $res = (int)$q->result()[0]->$str_input; | |
| //print_r($res); | |
| return $res; | |
| } | |
| else | |
| { | |
| return 0; | |
| } | |
| } | |
| } | |
| public function get_curr_accurate_time($timestring) | |
| { | |
| $user = $this->ion_auth->user()->row(); | |
| $gmt_offset_string = $this->_get_gmt_offset($user->id); | |
| $gmt = $this->gmt_offset($gmt_offset_string); | |
| $curr_accurate_time = $this->add_sub_gmt_offset($timestring, $gmt); | |
| return $curr_accurate_time; | |
| } | |
| public function you_reminder_email($req_id, $time_left) | |
| { | |
| $query = $this->db->get_where('tbl_requested_meetings', array('FK_requested_time_id' => $req_id, 'approved' => 1)); | |
| $r = $query->result()[0]; | |
| //Send emails - format to user/interviewees times + gmt. | |
| $guest = $this->_get_guest_data($r->FK_requester_info_id); | |
| $user_data = $this->_get_user_data($this->_get_user_id_from_ep($r->FK_episode_id)); | |
| $episode = $this->_get_episode_name($r->FK_episode_id); | |
| $gmt_offset = $this->_get_gmt_offset($user_data->id); | |
| $set_time = $this->_get_set_time($r->FK_requested_time_id); | |
| $temp_gmt = $this->gmt_offset($gmt_offset); | |
| $set_time = $this->add_sub_gmt_offset($set_time, $temp_gmt); | |
| $set_date = $this->_get_set_date($r->FK_requested_time_id); | |
| $r = $this->mailman->setTransport(Mailman::MAILMAN_TRANSPORT_MANDRILL)->sendmail(array( | |
| 'from' => 'reminders@podigniter.com', | |
| 'to' => $user_data->email, | |
| 'subject' => 'This is a reminder for your interview with '.$guest->name.', in '.$time_left, | |
| 'template_html' => 'emails/you_reminder', | |
| 'template_alt' => 'emails/you_reminder', | |
| 'template_data' => array( | |
| 'guest_name' => $guest->name, | |
| 'time_left' => $time_left, | |
| 'user_name' => $user_data->first_name, | |
| 'episode' => $episode, | |
| 'set_time' => $set_time, | |
| 'gmt' => $gmt_offset, | |
| 'date' => $set_date | |
| ) | |
| ) | |
| ); | |
| print_r($r); | |
| } | |
| public function you_reminder_text($req_id) | |
| { | |
| //for sms check if the user has credits, if they do, and the user has unchecked send sms reminder then send them the reminder, | |
| //then minus 1 from their credits. else if interviewee has checked send sms reminder, send it and minus 2. else dont send. | |
| //Disable ability to check it on interviewees end if user runs out of credits. just don't show it as an option. | |
| $query = $this->db->get_where('tbl_requested_meetings', array('FK_requested_time_id' => $req_id, 'approved' => 1)); | |
| $r = $query->result()[0]; | |
| //Send emails - format to user/interviewees times + gmt. | |
| $guest = $this->_get_guest_data($r->FK_requester_info_id); | |
| $user_data = $this->_get_user_data(); | |
| //check credits. if no, send email. with upgrade link. | |
| $from = '15005550006'; | |
| $to = '+15005550006'; | |
| $message = 'This is a test...'; | |
| $response = $this->twilio->sms($from, $to, $message); | |
| if($response->IsError) | |
| { | |
| echo 'Error: ' . $response->ErrorMessage; | |
| } | |
| else | |
| { | |
| echo 'Sent message to ' . $to; | |
| } | |
| } | |
| public function guest_reminder_email($req_id, $time_left) | |
| { | |
| //Send emails - format to user/interviewees times + gmt. | |
| $query = $this->db->get_where('tbl_requested_meetings', array('FK_requested_time_id' => $req_id, 'approved' => 1)); | |
| $r = $query->result()[0]; | |
| //Send emails - format to user/interviewees times + gmt. | |
| $guest = $this->_get_guest_data($r->FK_requester_info_id); | |
| $user_data = $this->_get_user_data($this->_get_user_id_from_ep($r->FK_episode_id)); | |
| $episode = $this->_get_episode_name($r->FK_episode_id); | |
| $gmt_offset = $this->_get_gmt_offset($guest->id, 'guest'); | |
| $set_time = $this->_get_set_time($r->FK_requested_time_id); | |
| $temp_gmt = $this->gmt_offset($gmt_offset); | |
| $set_time = $this->add_sub_gmt_offset($set_time, $temp_gmt); | |
| $set_date = $this->_get_set_date($r->FK_requested_time_id); | |
| $r = $this->mailman->setTransport(Mailman::MAILMAN_TRANSPORT_MANDRILL)->sendmail(array( | |
| 'from' => 'reminders@podigniter.com', | |
| 'to' => $guest->email, | |
| 'subject' => 'This is a reminder for your interview with '.$user_data->first_name.', in '.$time_left, | |
| 'template_html' => 'emails/guest_reminder', | |
| 'template_alt' => 'emails/guest_reminder', | |
| 'template_data' => array( | |
| 'guest_name' => $guest->name, | |
| 'time_left' => $time_left, | |
| 'user_name' => $user_data->first_name, | |
| 'episode' => $episode, | |
| 'set_time' => $set_time, | |
| 'gmt' => $gmt_offset, | |
| 'date' => $set_date | |
| ) | |
| ) | |
| ); | |
| print_r($guest->email); | |
| } | |
| public function guest_reminder_text($req_id) | |
| { | |
| //for sms check if the user has credits, if they do, and the user has unchecked send sms reminder then send them the reminder, | |
| //then minus 1 from their credits. else if interviewee has checked send sms reminder, send it and minus 2. else dont send. | |
| //Disable ability to check it on interviewees end if user runs out of credits. just don't show it as an option. | |
| $from = '15005550006'; | |
| $to = '+15005550006'; | |
| $message = 'This is a test...'; | |
| $response = $this->twilio->sms($from, $to, $message); | |
| if($response->IsError) | |
| { | |
| echo 'Error: ' . $response->ErrorMessage; | |
| } | |
| else | |
| { | |
| echo 'Sent message to ' . $to; | |
| } | |
| } | |
| public function create_reminder_settings($user_id) | |
| { | |
| $data = array( | |
| 'user_id' => $user_id | |
| ); | |
| $this->db->insert('reminders_settings', $data); | |
| } | |
| public function set_state($col, $state, $user_id) | |
| { | |
| $state = (int)$state; | |
| $data = array( | |
| $col => $state | |
| ); | |
| $this->db->where('user_id', $user_id); | |
| $this->db->update('reminders_settings', $data); | |
| } | |
| public function get_setting($col, $user) | |
| { | |
| $col = (string)$col; | |
| $this->db->select($col); | |
| $this->db->where('user_id', $user->id); | |
| $query = $this->db->get('reminders_settings'); | |
| return $query->result()[0]->$col; | |
| } | |
| public function get_approved_time($time_id) | |
| { | |
| $query = $this->db->get_where('tbl_user_available_times', array('id' => $time_id)); | |
| return $query->result()[0]->time; | |
| } | |
| public function get_req_time_id($req_id) | |
| { | |
| $query = $this->db->get_where('tbl_requested_meetings', array('id' => $req_id)); | |
| return $query->result()[0]->FK_requested_time_id; | |
| } | |
| public function is_suggested($time_id) | |
| { | |
| $query = $this->db->get_where('tbl_user_available_times', array('id' => $time_id)); | |
| if ($query->result()[0]->suggested == 1) | |
| { | |
| return TRUE; | |
| } | |
| else | |
| { | |
| return FALSE; | |
| } | |
| } | |
| public function new_select($req_id, $req_time_id, $req_info_id) | |
| { | |
| $data = array( | |
| 'approved' => 1 | |
| ); | |
| $this->db->where('id', $req_id); | |
| $this->db->update('tbl_requested_meetings', $data); | |
| if ($this->db->affected_rows() > 0) | |
| { | |
| $data1 = array( | |
| 'reserved' => 1 | |
| ); | |
| $this->db->where('id', $req_time_id); | |
| $this->db->update('tbl_user_available_times', $data1); | |
| $user_id = $this->ion_auth->user()->row()->id; | |
| $q = $this->db->get_where('tbl_user_available_times', array('reserved' => 1, 'FK_user_id' => $user_id)); | |
| foreach ($q->result() as $r) | |
| { | |
| if ($r->id != $req_time_id) | |
| { | |
| $data0 = array( | |
| 'reserved' => 0 | |
| ); | |
| $this->db->where('id', $r->id); | |
| $this->db->update('tbl_user_available_times', $data0); | |
| } | |
| } | |
| $query = $this->db->get_where('tbl_requested_meetings', array('FK_requester_info_id' => $req_info_id)); | |
| foreach ($query->result() as $row) | |
| { | |
| if ($row->id != $req_id) | |
| { | |
| $data_2 = array( | |
| 'approved' => 0 | |
| ); | |
| $this->db->where('id', $row->id); | |
| $this->db->update('tbl_requested_meetings', $data_2); | |
| } | |
| } | |
| return TRUE; | |
| } | |
| else | |
| { | |
| return FALSE; | |
| } | |
| } | |
| public function get_completed_time($time, $episode_id) | |
| { | |
| $query = $this->db->get_where('episodes', array('id' => $episode_id)); | |
| $duration = (int)$query->result()[0]->meeting_duration; | |
| $duration = $duration * 60; | |
| $time = strtotime($time); | |
| $nw_time = date("H:i", ($time += ($duration))); | |
| return $nw_time; | |
| } | |
| public function get_requester_info($requester_info_id) | |
| { | |
| $query = $this->db->get_where('tbl_requesters_info', array('id' => $requester_info_id)); | |
| return $query->result()[0]; | |
| } | |
| public function get_upcoming() | |
| { | |
| $user = $this->ion_auth->user()->row(); | |
| $this->db->select('*'); | |
| $this->db->from('tbl_requested_meetings'); | |
| $this->db->join('tbl_user_available_times', 'tbl_user_available_times.id= tbl_requested_meetings.FK_requested_time_id'); | |
| $this->db->where('tbl_user_available_times.FK_user_id', $user->id); | |
| $this->db->where('tbl_requested_meetings.approved', 1); | |
| $this->db->order_by("tbl_requested_meetings.id", "desc"); | |
| $q = $this->db->get(); | |
| return $q; | |
| } | |
| public function get_pending() | |
| { | |
| $user = $this->ion_auth->user()->row(); | |
| $this->db->select('*'); | |
| $this->db->from('tbl_requested_meetings'); | |
| $this->db->join('tbl_user_available_times', 'tbl_user_available_times.id= tbl_requested_meetings.FK_requested_time_id'); | |
| $this->db->where('tbl_user_available_times.FK_user_id', $user->id); | |
| $this->db->where('tbl_requested_meetings.approved', 0); | |
| $this->db->order_by("tbl_requested_meetings.id", "desc"); | |
| $q = $this->db->get(); | |
| return $q; | |
| } | |
| public function get_completed() | |
| { | |
| $user = $this->ion_auth->user()->row(); | |
| $this->db->select('*'); | |
| $this->db->from('tbl_requested_meetings'); | |
| $this->db->join('tbl_user_available_times', 'tbl_user_available_times.id= tbl_requested_meetings.FK_requested_time_id'); | |
| $this->db->where('tbl_user_available_times.FK_user_id', $user->id); | |
| $this->db->where('tbl_requested_meetings.approved', 2); | |
| $this->db->order_by("tbl_requested_meetings.id", "desc"); | |
| $q = $this->db->get(); | |
| return $q; | |
| } | |
| public function get_all_approved_times() | |
| { | |
| $query = $this->db->get_where('tbl_requested_meetings', array('approved' => 1)); | |
| return $query; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment