<?php class OsLocationCategoryModel extends OsModel{ public $id, $name, $parent_id, $selection_image_id, $order_number, $short_description; function __construct($id = false){ parent::__construct(); $this->table_name = LATEPOINT_TABLE_LOCATION_CATEGORIES; $this->nice_names = array( 'name' => __('Location Category Name', 'latepoint'), 'short_description' => __('Location Category Short Description', 'latepoint'), 'selection_image_id' => __('Location Category Selection Image', 'latepoint')); if($id){ $this->load_by_id($id); } } public function generate_data_vars(): array { return [ 'id' => $this->id, 'name' => $this->name ]; } public function count_locations(){ $location = new OsLocationModel(); $total_location = $location->filter_allowed_records()->where(['category_id' => $this->id])->should_be_active()->count(); $child_categories = new OsLocationCategoryModel(); $child_categories = $child_categories->where(['parent_id' => $this->id])->get_results_as_models(); if($child_categories){ foreach($child_categories as $child_category){ $total_location = $total_location + $child_category->count_locations(); } } return $total_location; } 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->update(LATEPOINT_TABLE_SERVICES, array('category_id' => 0), array( 'category_id' => $id ), array( '%d' ) ); $this->db->update($this->table_name, array('parent_id' => NULL), array( 'parent_id' => $id ), array( '%d' ) ); return true; }else{ return false; } } 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); } protected function properties_to_validate(){ $validations = array( 'name' => array('presence', 'uniqueness'), ); return $validations; } public function index_for_select(){ $categories = $this->db->get_results("SELECT id, name FROM ".$this->table_name); $categories_for_select = array(); $categories_for_select[] = array('value' => 0, 'label' => __('Not categorized', 'latepoint')); foreach($categories as $category){ $categories_for_select[] = array('value' => $category->id, 'label' => $category->name); } return $categories_for_select; } protected function allowed_params($role = 'admin'){ $allowed_params = array('id', 'name', 'short_description', 'selection_image_id', 'parent_id', 'order_number'); return $allowed_params; } protected function params_to_save($role = 'admin'){ $params_to_save = array('id', 'name', 'short_description', 'selection_image_id', 'parent_id', 'order_number'); return $params_to_save; } public function get_active_locations($filter_allowed_records = false){ if(!isset($this->active_locations)){ $location = new OsLocationModel(); if($filter_allowed_records) $location->filter_allowed_records(); $location->should_be_active()->where(array('category_id'=> $this->id))->order_by('order_number asc'); $this->active_locations = $location->get_results_as_models(); } return $this->active_locations; } protected function get_locations($filter_allowed_records = false){ if(!isset($this->locations)){ $location = new OsLocationModel(); if($filter_allowed_records) $location->filter_allowed_records(); $this->locations = $location->where(array('category_id'=> $this->id))->order_by('order_number asc')->get_results_as_models(); } return $this->locations; } }