FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
latepoint
/
lib
/
models
Edit File: location_model.php
<?php class OsLocationModel extends OsModel { public $id, $name, $full_address, $selection_image_id, $status, $category_id, $order_number, $services_agents_table_name, $updated_at, $created_at; function __construct( $id = false ) { parent::__construct(); $this->table_name = LATEPOINT_TABLE_LOCATIONS; $this->services_agents_table_name = LATEPOINT_TABLE_AGENTS_SERVICES; $this->nice_names = array( 'name' => __( 'Location Name', 'latepoint' ), ); if ( $id ) { $this->load_by_id( $id ); } } public function generate_data_vars(): array { $location_category = empty( $this->category_id ) ? false : new OsLocationCategoryModel( $this->category_id ); return [ 'id' => $this->id, 'name' => $this->name, 'full_address' => $this->full_address, 'category' => $location_category ? $location_category->get_data_vars() : [], ]; } public function filter_allowed_records(): OsModel { if ( ! OsRolesHelper::are_all_records_allowed( 'location' ) ) { $this->filter_where_conditions( [ 'id' => OsRolesHelper::get_allowed_records( 'location' ) ] ); } return $this; } protected function allowed_params( $role = 'admin' ) { $allowed_params = array( 'id', 'name', 'full_address', 'status', 'category_id', 'order_number', 'selection_image_id', ); return $allowed_params; } protected function params_to_save( $role = 'admin' ) { $params_to_save = array( 'id', 'name', 'status', 'category_id', 'order_number', 'full_address', 'selection_image_id', ); return $params_to_save; } protected function before_create() { } protected function set_defaults() { if ( empty( $this->category_id ) ) { $this->category_id = 0; } if ( empty( $this->status ) ) { $this->status = LATEPOINT_LOCATION_STATUS_ACTIVE; } } public function save_custom_schedule( $work_periods ) { foreach ( $work_periods as &$work_period ) { $work_period['location_id'] = $this->id; } unset( $work_period ); OsWorkPeriodsHelper::save_work_periods( $work_periods ); } public function get_google_maps_link( $embed = false ) { $extra = $embed ? '&output=embed' : ''; return 'https://google.com/maps?q=' . urlencode( $this->full_address ) . $extra; } public function get_google_maps_iframe( $height = '240' ) { return '<iframe width="100%" height="' . $height . '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="' . $this->get_google_maps_link( true ) . '"></iframe>'; } public function delete_custom_schedule() { $work_periods_model = new OsWorkPeriodModel(); $work_periods = $work_periods_model->where( array( 'location_id' => $this->id, 'agent_id' => 0, 'service_id' => 0, 'custom_date' => 'IS NULL', ) )->get_results_as_models(); if ( is_array( $work_periods ) ) { foreach ( $work_periods as $work_period ) { $work_period->delete(); } } } public function count_number_of_connected_services( $agent_id = false ) { if ( $this->is_new_record() ) { return 0; } $args = [ 'location_id' => $this->id ]; if ( $agent_id ) { $args['agent_id'] = $agent_id; } return OsConnectorHelper::count_connections( $args, 'service_id' ); } public function get_connected_agents() { $connector = new OsConnectorModel(); $agent_ids = $connector->select( 'agent_id' )->where( [ 'location_id' => $this->id ] )->group_by( 'agent_id' )->get_results(); $agents = []; if ( $agent_ids ) { foreach ( $agent_ids as $connector_row ) { $agents[] = new OsAgentModel( $connector_row->agent_id ); } } return $agents; } public function save_agents_and_services( $agents ) { if ( ! $agents ) { return true; } $connections_to_save = []; $connections_to_remove = []; foreach ( $agents as $agent_key => $services ) { $agent_id = str_replace( 'agent_', '', $agent_key ); foreach ( $services as $service_key => $service ) { $service_id = str_replace( 'service_', '', $service_key ); $connection = [ 'location_id' => $this->id, 'agent_id' => $agent_id, 'service_id' => $service_id, ]; if ( $service['connected'] == 'yes' ) { $connections_to_save[] = $connection; } else { $connections_to_remove[] = $connection; } } } if ( ! empty( $connections_to_save ) ) { foreach ( $connections_to_save as $connection_to_save ) { OsConnectorHelper::save_connection( $connection_to_save ); } } if ( ! empty( $connections_to_remove ) ) { foreach ( $connections_to_remove as $connection_to_remove ) { OsConnectorHelper::remove_connection( $connection_to_remove ); } } return true; } public function delete( $id = false ) { if ( ! $id && isset( $this->id ) ) { $id = $this->id; } if ( $id && $this->db->delete( $this->table_name, array( 'id' => $id ), array( '%d' ) ) ) { $this->db->delete( LATEPOINT_TABLE_AGENTS_SERVICES, array( 'location_id' => $id ), array( '%d' ) ); $this->db->delete( LATEPOINT_TABLE_BOOKINGS, array( 'location_id' => $id ), array( '%d' ) ); $this->db->delete( LATEPOINT_TABLE_WORK_PERIODS, array( 'location_id' => $id ), array( '%d' ) ); return true; } else { return false; } } public function should_be_active() { return $this->where( [ 'status' => LATEPOINT_LOCATION_STATUS_ACTIVE ] ); } public function is_active() { return ( $this->status == LATEPOINT_LOCATION_STATUS_ACTIVE ); } public function get_selection_image_url() { $default_location_image_url = LATEPOINT_IMAGES_URL . 'location-image.png'; return OsImageHelper::get_image_url_by_id( $this->selection_image_id, 'thumbnail', $default_location_image_url ); } public function has_agent( $agent_id ) { return OsConnectorHelper::has_connection( [ 'location_id' => $this->id, 'agent_id' => $agent_id, ] ); } public function has_agent_and_service( $agent_id, $service_id ) { if ( $this->is_new_record() ) { return false; } return OsConnectorHelper::has_connection( [ 'location_id' => $this->id, 'agent_id' => $agent_id, 'service_id' => $service_id, ] ); } protected function properties_to_validate() { $validations = array( 'name' => array( 'presence', 'uniqueness' ), ); return $validations; } }
Save
Back