public static function addStatic(array $values) { $options = array(); foreach (self::$_properties as $k => $v) { if ($k != 'street' && $k != 'city' && $k != 'price_m') { if ($v['type'] == 'int') { $options[$k] = numStrToClearStr($values[$k]); } else { $options[$k] = isset($values[$k]) ? $values[$k] : ''; } } elseif ($k == 'street') { $v = clearTextData($values[$k]); $db_res = Street::getListLink('name="' . $v . '" AND city_id="' . $values['city_id'] . '"'); $row = $db_res->fetchRow(); if ($row) { $options['street_id'] = $row['id']; } else { $street_id = Street::createStatic(array('city_id' => $values['city_id'], 'name' => $v, 'status' => 0)); $options['street_id'] = $street_id; } } } $options['price_m'] = intval($options['price'] / $values['total_area']); $options['description'] = self::prepareDescription($values['description']); $options['contacts'] = self::prepareDescription($values['contacts']); $options['status'] = REALTY_STATUS_NEW; $id = parent::addStatic($options); return $id; }
public function update($values, $prefix = '') { $id = $this->id; $options = array(); foreach (self::$_properties as $k => $v) { if ($k == 'street') { $v = clearTextData($values[$k]); $db_res = Street::getListLink('name="' . $v . '" AND city_id=' . intval($values['city_id']) . ' AND status=1'); $row = $db_res->fetchRow(); if ($row) { $options['street_id'] = $row['id']; } else { $street_id = Street::createStatic(array('name' => $v, 'status' => 0)); $options['street_id'] = $street_id; } } elseif ($k != 'city') { $options[$k] = $values[$prefix . $k]; } } parent::update($options, ''); }
function import($s) { if (!isset($_SESSION['user_id'])) { header("Location: index.html"); exit(); } $amount=-1; $num_updated_all = 0; if (isset($_FILES["userfile"])) { if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { $filename = $_FILES['userfile']['tmp_name']; $rows = file($filename); unset($rows[0]); $amount=0; foreach ($rows as $row) { $row = iconv("windows-1251", "utf-8", $row); $el = explode('|',$row); $date = $el[33];//дата объявления //if ($date<date('d.m.Y')) $type_deal = $el[0];//1 - продажа, 2 - аренда $status = ($el[0]==1) ? REALTY_STATUS_IMPORT_SALE : REALTY_STATUS_IMPORT_RENT; $is_city = $el[1];//1-город 2-республика if ($is_city != 1) continue; $rooms = $el[2];//11-комната 22-дом 27-участок 28-уч. под застройку 41-гараж if ($rooms>11) continue; $phone = $el[6]; $an_name = $el[7]; $phone2 = $el[8]; $name2 = $el[9]; $street = $el[10]; //echo "\n$street _\n"; if(!preg_match("/[0-9]+[а-яА-Я]*$/", $street)) { //нет номера дома //continue; } //echo "\n$street\n"; preg_match("/[0-9]+[а-яА-Я]*$/", $street,$nums_tenement); $num = mb_strtolower($nums_tenement[0],'UTF-8');//strtolower($nums_tenement[0]); $street_name = str_replace($num,'',$street); $street_name = trim(str_replace(' ',' ',$street_name)); $street_clear2 = str_replace('ул','',$street_name); $street_clear2 = str_replace('.','',$street_clear2); $street_arr = explode(' ',$street_clear2); //находим самую длинную строку в названии улицы $i = 0; $max_len = ''; $last_len = 0; if(count($street_arr)) { foreach ($street_arr as $c) { if (strlen($c)>$last_len) { $max_len = $c; $last_len = strlen($c); } $i++; } } if ($max_len=='') continue; //echo "\nmax_len=$max_len"; $row = Street::findBy("name LIKE '%$max_len%'"); if (!$row) { $street_id = Street::createStatic(array('name'=>$street_name,'city_id'=>0, 'status'=>0)); } else { $street_id = $row['id']; $street_name = $row['name']; } $storey = $el[12]; $stores = $el[13]; $tenement_type = $el[15]; if ($tenement_type=='КИРП') $type_id=0; elseif ($tenement_type=='ПАН') $type_id=1; elseif ($tenement_type=='БЛОК') $type_id=3; elseif ($tenement_type=='ДЕР') $type_id=4; else $type_id=2; $total_area = str_replace(',','.',$el[16]); //if ($total_area=='') continue; $living_area = str_replace(',','.',$el[17]); $kitchen_area = str_replace(',','.',$el[18]); if (!$kitchen_area) $kitchen_area=9; $description = $el[26]; $price = str_replace(',','.',$el[27]); //if (!($price>0)) continue; $price_k = $el[28];//1-тыс. 2-млн. 5-руб/м 6-у.е./м if ($price_k==1) $price *= 1000; elseif ($price_k==2) $price *= 1000000; elseif ($price_k==5) $price *= $total_area; $haggle = $el[29];//торг/чистая продажа $date_end = $el[31];//срок сдачи дома $row = Tenement::findBy("street_id='$street_id' AND number='$num'"); if ($row) { $tenement_id=$row['id']; } else { $num = clearTextData($num); $options = array( 'city_id'=>0, 'street_id'=>$street_id, 'number'=>$num, 'type_id'=>clearTextData($type_id), 'storeys'=>clearTextData($stores), 'hot_water'=>1, 'type_energy'=>0, 'type_heating'=>0, 'user_id'=>$_SESSION['user_id'], 'status'=>REALTY_STATUS_NEW ); $address = urlencode('Йошкар-Ола, '.$street_name.', д.'.$num); $geo_url = 'http://psearch-maps.yandex.ru/1.x/?text='.$address.'&key='.YANDEX_KEY.'&format=json'; $json = file_get_contents($geo_url); $d = json_decode($json); if (isset($d->{'response'}->{'GeoObjectCollection'}->{'featureMember'}[0]->{'GeoObject'}->{'Point'}->{'pos'})) { $coords = explode(' ',$d->{'response'}->{'GeoObjectCollection'}->{'featureMember'}[0]->{'GeoObject'}->{'Point'}->{'pos'}); $options['lon'] = $coords[0]; $options['lat'] = $coords[1]; } $tenement_id = Tenement::addStatic($options); } if (!$tenement_id) continue; $num_updated = Flat::updateByCondition("tenement_id='$tenement_id' AND rooms='$rooms' AND storey='$storey' AND price='$price' AND user_id='{$_SESSION['user_id']}'",array('updated_on'=>date('Y-m-d H:i:s'))); $num_updated_all += $num_updated; if ($num_updated>0) continue; $contacts = ($phone2!='') ? $phone2.' '.$name2 : $phone.' '.$an_name; $options = array( 'tenement_id'=>$tenement_id, 'price'=>clearTextData($price), 'rooms'=>clearTextData($rooms), 'storey'=>clearTextData($storey), 'total_area'=>clearTextData($total_area), 'kitchen_area'=>clearTextData($kitchen_area), 'living_area'=>clearTextData($living_area), 'description'=>clearTextData($description,1000), 'contacts'=>clearTextData($contacts), 'user_id'=>$_SESSION['user_id'], 'status'=>$status ); Flat::addStatic($options); $amount++; } $dest = IMPORT_PATH.$_SESSION['user_id'].'_'.date('d').'_'.date('m').'_'.date('H').'_'.date('i').'_'.date('s').'.txt'; move_uploaded_file($filename,$dest); } } $s->assign("amount",$amount); $s->assign("num_updated_all",$num_updated_all); $s->display("import.tpl"); }