Ничего не получается. Зависает скрипт опять.
Проект завалил...
<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
jimport( 'joomla.application.component.modellist' );
jimport('joomla.utilities.date');
class ObjectsModelUpdate_xml extends JModel
{
var $count_queries = 500; // по сколько запросов запихивать в файл
var $objects;
var $sub_objects;
function del_queries_files() {
$dir = 'update_xml/update_queries/';
foreach (glob($dir.'*.*') as $filename) {
JFile::delete($filename);
}
}
function save_queries($id_count,$count,$sql){
if($id_count<10){
$id_count='0'.$id_count;
}
$file="update_xml/update_queries/".$id_count."_".$count.".txt";
file_put_contents($file, $sql);
}
function read_queries_files() {
$dir = 'update_xml/update_queries/';
$files = "";
foreach (glob($dir.'*.*') as $filename) {
$files .= $filename.',';
}
return substr($files, 0, -1); ;
}
function read_queries($file,$oper){
$sql = file_get_contents($file);
if($sql){
$this->insert_in_db($sql,$file,$oper);
}
}
function insert_in_db($query,$file,$oper){
$db=& JFactory::getDBO();
// echo $query;
$db->setQuery($query);
if(!$db->queryBatch()) {
$type = 'error';
//$type = 'success';
// echo __LINE__.$db->stderr();
}else{
JFile::delete($file);
$type = 'success';
$message = 'OK';
}
// echo $oper;
$result = array('type'=>$type,'oper'=>$oper,'message'=>$message,'files'=>$this->read_queries_files());
print json_encode($result);
}
function parse_objects(){
//$this->del_queries_files();
$xmlstr = simplexml_load_file(JURI::base().'update_xml/SiteData.xml');
// if($xmlstr){
$message = "";
$message_report = "";
$count_object_add = 0;
$count_object_upd = 0;
$sql = "";
$sql2 = "";
$sql3 = "";
$sql4 = "";
$sql5 = "";
$db=& JFactory::getDBO();
foreach ($xmlstr->Buildings->Building as $building){ //объекты
$blockid = (int)$building->attributes()->blockid;
$districtid = (int)$building->attributes()->districtid;
$BlockSubways = $xmlstr->xpath("/Ads/BlockSubways/Subway[@blockid=\"$blockid\"]");
$count_BlockSubways = count($BlockSubways);
$metro = '';
for($i=0;$i<=$count_BlockSubways;$i++){
if($i<=$count_BlockSubways-1){
$metro .= $BlockSubways[$i]->attributes()->name;
if($i<$count_BlockSubways-1){
$metro .= ', ';
}
}
}
/////////////////////////////////////////////////////////////////////////
$Block = $xmlstr->xpath("/Ads/Blocks/Block[@id=\"$blockid\"]");
$address = $Block[0]->attributes()->street;
$address_in_map = $Block[0]->attributes()->latitude.','.$Block[0]->attributes()->longitude;
$nazvanie_doma = $Block[0]->attributes()->title;
$builderid = (int)$Block[0]->attributes()->builderid;
$Builder = $xmlstr->xpath("/Ads/Builders/Builder[@id=\"$builderid\"]");
$builder_name = $Builder[0]->attributes()->name;
$District = $xmlstr->xpath("/Ads/Districts/District[@id=\"$districtid\"]");
$rayon = $District[0]->attributes()->name;
if((int)$District[0]->attributes()->regionid == 2){
$rayon = $rayon.' Л.О.';
}
$counter = 0;
$building_id = (int)$building->attributes()->id;
$buildingtype = $building->attributes()->buildingtype; //тип постройки
$dead_date = $building->attributes()->endingperiod;
$dead_year = date('Y',strtotime($dead_date));
$dead_mounth = date('m',strtotime($dead_date));
$dead_kvartal = intval((date($dead_mounth)+2)/3);
$corp = $building->attributes()->corp;
$floors = $building->attributes()->floors;
$metro = addslashes($metro);
$rayon = addslashes($rayon);
$address = addslashes($address);
$address_in_map = addslashes($address_in_map);
$nazvanie_doma = addslashes($nazvanie_doma.' '.$corp);
$builder_name = addslashes($builder_name);
$buildingtype = addslashes($buildingtype);
$sql_count = "SELECT COUNT(*) FROM `#__objects`
WHERE `building_id` = '$building_id'";
$db->setQuery($sql_count);
$count = $db->loadResult();
$oper = "";
if($count == 0){
$sql .= " INSERT INTO `#__objects` (
`added_by`,
`metro_name`,
`raion`,
`dead_year`,
`dead_kvartal`,
`dead_mounth`,
`address`,
`address_in_map`,
`modified`,
`modified_by`,
`created`,
`zastroy`,
`name`,
`korpus`,
`type`,
`flors`,
`building_id`
)
VALUES (
'956',
'$metro',
'$rayon',
'$dead_year',
'$dead_kvartal',
'$dead_mounth',
'$address',
'$address_in_map',
'NOW()',
'956',
'NOW()',
'$builder_name',
'$nazvanie_doma',
'$corp',
'$buildingtype',
'$floors',
'$building_id'
)
; ";
$oper = "создан";
$count_object_add++;
}else{
$sql .= " UPDATE `#__objects` SET
`metro_name`='$metro',
`raion`='$rayon',
`dead_year`='$dead_year',
`dead_kvartal`='$dead_kvartal',
`dead_mounth`='$dead_mounth',
`address`='$address',
`address_in_map`='$address_in_map',
`zastroy`='$builder_name',
`name`='$nazvanie_doma',
`korpus`='$corp',
`type`='$buildingtype',
`flors`='$floors'
WHERE `building_id` = '$building_id'; ";
$oper = "обновлен";
$count_object_upd++;
}
if($oper){
$message .= "<tr><td>Объект ".$oper."</td><td>".$nazvanie_doma;
$message_report .="Объект ".$oper." | Название объекта - ".$nazvanie_doma;
if($corp){
$message .=", корпус ".$corp;
$message_report .=", корпус ".$corp;
}
$message_report .=" \r\n";
$message .= "</td></tr>";
}
$counter++;
} ///конец объкты
$this->del_queries_files(); //удаляе все файлы с запросами
$this->save_queries(0,$counter,$sql); //сохраняем сгенерированные запросы в файл
$this->read_queries($this->read_queries_files());
//JFactory::getApplication()->redirect('/index.php?option=com_objects&task=update_xml&oper=parse_sub_objects');
// $result = array('oper'=>'parse_objects','type'=>'success','message'=>'save in file objects','files'=>$this->read_queries_files());
// print json_encode($result);
}
function search_object_id($val){
//$val = '88';
foreach ($this->objects as $key => $value) {
if ($value['building_id']==$val) {
$found = $value['object_id'];
break;
}
}
return $found;
}
function search_sub_object_id($val){
//$val = '88';
foreach ($this->sub_objects as $key => $value) {
if ($value['apartment_id']==$val) {
$found = $value['sub_object_id'];
break;
}
}
return $found;
}
function parse_sub_objects(){
//квариры
// echo 111;
// $this->del_queries_files();
$db=& JFactory::getDBO();
// $sql2="";
$count_kvart_add = 0;
$count_kvart_upd = 0;
$count_kvart_not_add = 0;
$count_kvart_not_add_message = '';
$count_kvart_not_add_message_report = '';
$counter = 0;
$counter2 = $this->count_queries;
//echo $counter2;
$counter3 = 0;
$sql2 = "SELECT object_id,building_id FROM `#__objects`";
$db->setQuery($sql2);
$this->objects = $db->loadAssocList();
$sql3 = "SELECT sub_object_id,apartment_id FROM `#__sub_objects`";
$db->setQuery($sql3);
$this->sub_objects = $db->loadAssocList();
// echo $this->search_object_id(88);
//$category=array();
//$category[]=array('idx'=>"12",'ParentId'=>"987",'name'=>"987");
//$category[]=array('idx'=>"18",'ParentId'=>"9487",'name'=>"986");
//print_r($category);
//$found = false;
//$t = microtime(1);
//echo number_format(microtime(1)-$t,5,'.','');
//echo "\n";
//var_dump($found);
//echo "=============\n";
$reader = new XMLReader();
$reader->open('update_xml/SiteData.xml');
$msg = '';
$sql4 = '';
while ($reader->read()) {
if ($reader->name == "Apartment") {
// echo '<p>'.$reader->getAttribute("kvnumber").'</p>';
$building_id = (int)$reader->getAttribute("buildingid");
$apartment_id = (int)$reader->getAttribute("id");
// $sql2 = "SELECT object_id FROM `#__objects`
// WHERE `building_id` = '$building_id'";
// $db->setQuery($sql2);
// $object_id = $db->loadResult();
$object_id = '1';
$object_id = $this->search_object_id($building_id);
// $sql3 = "SELECT sub_object_id FROM `#__sub_objects`
// WHERE `apartment_id` = '$apartment_id'";
// $db->setQuery($sql3);
// $sub_object_id = $db->loadResult();
$sub_object_id = '';
$sub_object_id = $this->search_sub_object_id($apartment_id);
$rooms = $reader->getAttribute("rooms");
$flatfloor = $reader->getAttribute("flatfloor");
$facing = $reader->getAttribute("decoration");
$top_size = $reader->getAttribute("height");
$kv_number = $reader->getAttribute("kvnumber");
$base_cost = $reader->getAttribute("baseflatcost");
$full_cost = $reader->getAttribute("flatcostwithdiscounts");
$cost_each_m = $reader->getAttribute("metrecostwithdiscounts");
$space = $reader->getAttribute("stotal");
$kichen_space = $reader->getAttribute("skitchen");
$section = $reader->getAttribute("section");
if(!$sub_object_id){
if($object_id){
$sql4 .= "INSERT INTO `#__sub_objects` (`object_id`,`rooms`,`floor`,`facing`,`space`,`kichen_space`,`section`,`top_size`,`kv_number`,`base_cost`,`full_cost`,`cost_each_m`,`apartment_id`) VALUES ('$object_id','$rooms','$flatfloor','$facing','$space','$kichen_space','$section','$top_size','$kv_number','$base_cost','$full_cost','$cost_each_m','$apartment_id');\r\n";
$count_kvart_add++;
}else{
$count_kvart_not_add++;
$count_kvart_not_add_message .= '<tr><td>Не найден объект с ID </td><td>'.$building_id."</td></tr>";
$count_kvart_not_add_message_report .= "Не найден объект с ID $building_id \r\n";
}
}else{
$sql4 .= "UPDATE `#__sub_objects` SET `rooms`='$rooms',`floor`='$flatfloor',`facing`='$facing',`space`='$space',`kichen_space`='$kichen_space',`section`='$section',`top_size`='$top_size',`kv_number`='$kv_number',`base_cost`='$base_cost',`full_cost`='$full_cost',`cost_each_m`='$cost_each_m' WHERE `apartment_id` = '$apartment_id';\r\n";
$count_kvart_upd++;
}
$counter++;
if($counter == $counter2){
$counter3++;
echo '<p><b>'.$counter2.'</b>'.$sql4.'</p>';//.'<hr>';
// $this->save_queries($counter3,$counter,$sql4);
$counter2 = $counter2 + $this->count_queries;
unset($sql4);
$sql4 = "";
/*
if($counter3<10){
$id_count='0'.$counter3;
}
$file="update_xml/update_queries/".$id_count."_".$counter.".txt";
if( !file_exists($file)) {
$fp = fopen($file, "x");
fwrite($fp, $sql);
fclose ($fp);
}
*/ // echo $sql4;
}
}elseif($reader->name == "Apartments" && $reader->nodeType == XMLReader::END_ELEMENT ) {
// $this->save_queries($counter3,$counter,$sql4);
echo $sql4.'<hr>';
echo 'end';
unset($sql4);
}
}
unset($reader);
// echo $sql4;
// $result = array('oper'=>'parse_sub_objects','type'=>'success','message'=>'save in file sub_objects','files'=>$this->read_queries_files());
// print json_encode($result);
// конец квартиры
}
function getUpdate_ajax()
{
$file = JRequest::getVar('file');
$oper = JRequest::getVar('oper');
if($oper == 'parse_objects'){
$this->parse_objects();
}elseif($oper == 'objects_save_in_db' or $oper == 'sub_objects_save_in_db'){
// echo $file;
// echo $oper;
$this->read_queries($file,$oper);
}elseif($oper == 'parse_sub_objects'){
$this->parse_sub_objects();
}
// save_queries
}
function getUpdate()
{
set_time_limit(0);
ini_set('memory_limit', '-1');
?>
<script type="text/javascript">
var files = [];
function find(array, value) {
for(var i=0; i<array.length; i++) {
if (array[i] == value) return i;
}
return -1;
}
function send_oper(file,oper){
var fd = new FormData();
fd.append('file', file);
fd.append('oper', oper);
$.ajax({
async: false,
timeout: 180000,
type: 'POST',
url: 'index.php?option=com_objects&task=update_xml&format=raw',
data: fd,
processData: false,
contentType: false,
dataType: "json",
success: function(data) {
// $result = array('oper'=>'parse_objects','type'=>'success','message'=>'save in file objects','files'=>$this->read_queries_files());
if(data.type=='success'){
if(data.oper=='parse_objects' && data.files){
var get_files = data.files;
var re = /\s*,\s*/;
var files = get_files.toString().split(re);
// alert(files);
send_oper(files[0],'objects_save_in_db');
//
//
//
}else if(data.oper=='objects_save_in_db'){
//
var get_files = data.files;
var re = /\s*,\s*/;
var files = get_files.toString().split(re);
//
// alert(data.files);
if(data.files){ //&& type == 'objects'){
// files.splice(find(files, file),1);
send_oper(files[0],'objects_save_in_db');
}else{
send_oper('','parse_sub_objects');
}
//
//
}else if(data.oper=='parse_sub_objects'){
var get_files = data.files;
var re = /\s*,\s*/;
var files = get_files.toString().split(re);
//alert(files);
send_oper(files[0],'sub_objects_save_in_db');
}else if(data.oper=='sub_objects_save_in_db' && data.files){
var get_files = data.files;
var re = /\s*,\s*/;
var files = get_files.toString().split(re);
// alert(files);
if(typeof files !== 'undefined'){ //&& type == 'objects'){
// files.splice(find(files, file),1);
// alert(files);
send_oper(files[0],'sub_objects_save_in_db');
}
}
}else if (data.type='error'){
alert('Ошибка!');
}
},
error: function(data) {
}
});
}
// function dispatch_operations(oper){
// if(oper=='parse_objects'){
// send_oper('',oper);
// }//else if(oper=='objects_save_in_db'){
// send_oper('',oper);
// }
//}
//$(document).ready(function()
//{
//dispatch operations
// dispatch_operations('parse_objects');
//send_oper('','parse_objects');
//var get_files = '<?php //echo $this->read_queries_files(); ?>';
//var re = /\s*,\s*/;
//var files = get_files.toString().split(re);
//alert(files);
//alert(files[0]);
//send_oper('','parse_sub_objects');
//send_oper(files[0],'sub_objects_save_in_db');
// alert(111);
//});
</script>
<?php
// $oper = JRequest::getVar('oper');
// if($oper == 'parse_sub_objects'){
// $this->del_queries_files();
$this->parse_sub_objects();
// }else{
// $this->parse_objects();
// }
//
?>
<script type="text/javascript">
// var get_files = '<?php //echo $this->read_queries_files(); ?>';
// var re = /\s*,\s*/;
// var files = get_files.toString().split(re);
// send_oper(files[0],'sub_objects_save_in_db');
</script>
<?php
$message = "<tr>".$message."</tr>";
$message .= "<tr><td></td><td> </td></tr>";
$message .= "<tr><td>Планировок добавлено</td><td>".$count_kvart_add."</td></tr>";
$message .= "<tr><td>Планировок обновлено</td><td>".$count_kvart_upd."</td></tr>";
$message .= "<tr><td>Планировок не добавлено</td><td>".$count_kvart_not_add."</td></tr>";
$message .= $count_kvart_not_add_message;
$message_report .="\r\n";
$message_report .="Планировок добавлено ".$count_kvart_add."\r\n";
$message_report .="Планировок обновлено ".$count_kvart_upd."\r\n";
$message_report .="Планировок не добавлено ".$count_kvart_not_add."\r\n";
$message_report .=$count_kvart_not_add_message_report;
if($count_object_upd > 0 or $count_object_add > 0 or $count_kvart_add > 0 or $count_kvart_upd > 0 ){
$message = "
<p>Загрузка прошла успешно</p>
<p>Загружено ".$count_object_add." объекта</p>
<p>Обновлено ".$count_object_upd." объекта</p>
<p>Список объектов</p>
<table><tr><th>Операция</th><th>Название объекта</th></tr>".$message."</table>";
$message_report = date('h:i:s d.m.Y')."\r\n
Загрузка прошла успешно\r\n
Загружено ".$count_object_add." объекта\r\n
Обновлено ".$count_object_upd." объекта\r\n
Список объектов\r\n
".$message_report."\r\n
-------------------------------\r\n";
}else{
$message_report = date('h:i:s d.m.Y')."\r\n
Ничего не загружено :(\r\n
-------------------------------\r\n";
$message = "Ничего не загружено :("; }
// }else{
//$message_report = date('h:i:s d.m.Y')."\r\n
//Ошибка в файле\r\n
//-------------------------------\r\n";
//$message = "Ошибка в файле"; }
echo "<div class='upd_xml'>".$message."</div>";
$file="update_xml/update_reports/".date('d_m_Y').".txt";
//если файла нету... тогда
if( !file_exists($file)) {
$fp = fopen($file, "w"); // ("r" - считывать "w" - создавать "a" - добовлять к тексту), мы создаем файл
fwrite($fp, $message_report);
}else{
$fp = fopen($file, "a+"); // ("r" - считывать "w" - создавать "a" - добовлять к тексту), мы создаем файл
fwrite($fp, $message_report."\r\n");
}
fclose ($fp);
}
}
?>
Не судите строго...