. */ Class Home_model extends CI_Model { function __construct() { parent::__construct(); $this->load->database(); } function subjects($options=false) { $this->db->select('t1.*'); $this->db->from("subjects AS t1"); $this->db->order_by('title','ASC'); $subjects=$this->db->get()->result_array(); if($options=='select') { //init $data=array(); foreach($subjects as $subject) { $data[$subject['id']]=$subject['title']; } return $data; } else { return $subjects; } } function subject_words($id_subject,$options='select') { $this->db->select('t2.*'); $this->db->from("subjects AS t1"); $this->db->join("words as t2","t2.id_subject=t1.id"); $this->db->where("t1.id",$id_subject); $this->db->order_by('t2.title','ASC'); $words=$this->db->get()->result_array(); if($options=='select') { //init $data=array(); foreach($words as $word) { $data[$word['id']]=$word['title']; } return $data; } return $words; } function words_trascriptions($id_word,$id_subject) { if($id_word) { //init $used=array(); $result=array(); $this->db->select(' t2.*, t3.name AS dialect_title, t4.name AS subdialect_title, t5.name AS subsubdialect_title, '); $this->db->from('subject_locations AS t1'); $this->db->join('locations AS t2','t1.id_location=t2.id'); $this->db->join('dialects AS t3','t2.id_dialect=t3.id'); $this->db->join('dialects AS t4','t2.id_subdialect=t4.id'); $this->db->join('dialects AS t5','t2.id_subsubdialect=t5.id','LEFT'); $this->db->where('t1.id_subject',$id_subject); $locations=$this->db->get()->result_array(); foreach($locations as $i=>$location) { $pixels=$this->convert_to_pixels($location['lat'],$location['long']); $result[$i]['x']=$pixels['x']; $result[$i]['y']=$pixels['y']; $result[$i]['name']=$location['name']; $result[$i]['short_name']=$location['short_name']; $result[$i]['dialect']=$location['dialect_title']; $result[$i]['subdialect']=$location['subdialect_title']; if(isset($location['subsubdialect_title'])) { $result[$i]['subsubdialect']=$location['subsubdialect_title']; } $this->db->select(' t1.*, t2.title, t2.icon, t2.id_word, t2.icon_color, '); $this->db->from('transcriptions AS t1'); $this->db->join('lexems AS t2','t1.id_lexem=t2.id'); $this->db->where('t2.id_word',$id_word); $this->db->where('t1.id_location',$location['id']); $transcription=$this->db->get()->row_array(); if($transcription) { $result[$i]['pin']=$transcription['icon']; $result[$i]['id']=$transcription['id']; $result[$i]['title']=$transcription['title']; $result[$i]['phonetic_writing']=$transcription['phonetic_writing']; $result[$i]['audio']=$transcription['audio']; $result[$i]['id_word']=$transcription['id_word']; $result[$i]['id_location']=$transcription['id_location']; $result[$i]['trans_text']=$transcription['trans_text']; $result[$i]['icon']=$transcription['icon']; $result[$i]['icon_color']=$transcription['icon_color']; //only allowed chars $code_title = preg_replace('/[^a-zA-Z0-9]/','', $transcription['title']); $result[$i]['code_title']=$code_title; if(!array_key_exists($transcription['title'],$used)) { if($transcription['icon']) { $used[$transcription['title']]=array( 'icon'=>$transcription['icon'], 'icon_color'=>$transcription['icon_color'], 'code_title'=>$code_title, ); } } } else { $result[$i]['pin']="no_title"; $result[$i]['title']='no_title'; $result[$i]['code_title']='no_title'; } } //add no title for the last $used['no_title']=array( 'icon'=>'/', 'icon_color'=>"#000000", 'code_title'=>'no_title' ); $data=array( 'legend'=>$used, 'transcriptions'=>$result, ); return $data; } else { return; } } function convert_to_pixels($lat,$long) { //init //corners min, max in geo $min_lat=46.996232; $min_long=13.059296; $max_lat=45.400639; $max_long=16.620767; //height,width of canvas $height=719; //719.964 $width=1111; //1111.625 //error $height_err=0; //20 $width_err=30; //35 //calculate pixes per degree $ppd_height=number_format($height/($min_lat-$max_lat),6); $ppd_width=number_format($width/abs($min_long-$max_long),6); //perform calculations $delta_x=number_format(abs($min_long-$long),6); $delta_y=number_format(abs($min_lat-$lat),6); $x=(int)($delta_x*$ppd_width)-$width_err; $y=(int)($delta_y*$ppd_height)-$height_err; $result=array( 'x'=>$x, 'y'=>$y, ); //print_r($result);die(); return $result; } function transcriptions_count($id_word) { $this->db->from('transcriptions AS t1'); $this->db->join('lexems AS t2','t1.id_lexem=t2.id'); $this->db->where('t2.id_word',$id_word); $c=$this->db->count_all_results(); return $c; } function word_title($id_word) { $this->db->select('t1.title'); $this->db->from("words AS t1"); $this->db->where("t1.id",$id_word); $word=$this->db->get()->row_array(); return $word; } function word($id) { $this->db->select('t1.*'); $this->db->from("words AS t1"); $this->db->where("t1.id",$id); $word=$this->db->get()->row_array(); if(isset($word['image']) and $word['image']) { $word['image']=$word['image']; } else { $word['image']=''; } if(isset($word['comment']) and $word['comment']) { $word['comment']=base_url().$word['comment'].'#zoom=100'; } else { $word['comment']=''; } return $word; } private function get_icons() { //init $icons=array(); $images = glob('images/icons/*.{jpeg,gif,png,svg}', GLOB_BRACE); foreach($images as $image) { $icons[]=basename($image); } return $icons; } }