<?php
//***************************************************************************************
// Функционал серверной части таблицы "Контроль автомат" в виде функций.
// Функции вызываются нажатием кнопок в таблице и при выполнении полного цикла действий
// modules/raz_con_base.php
//***************************************************************************************
list($abs1, $s2) = explode("pages",getcwd( ));
include $abs1."/script/cdat.php";                                 // вставим функцию контроля даты времени
//*************************************************************************
  function kag_button11($p)
// прием данных автомата от источников  ДЕМО ВАРИАНТ 
//*************************************************************************
{ global $soob;	
  global $abs1;
  $fmrep3=$abs1."pages/Na~chalo/contents/17,09,18_07/3.txt";      // файл таблицы
  if  (!file_exists($fmrep3)) 
  {$soob="Нет файла 3.txt";
  return;
  }
  $fmrep=$abs1."pages/Na~chalo/contents/17,09,18_07/1.txt";       // файл таблицы
  $mrep2 = file($fmrep); 	                                      // корректируемый файл  
// откроем для записи
    $w = fopen($fmrep, 'w') or exit;   
// пишем старые
  for ($ii = 0; $ii <= count($mrep2)-1; $ii++)                    // каждую строку
  {fwrite($w,$mrep2[$ii]);}
  $mrep3 = file($fmrep3); 	                                      // корректируемый файл  
  // добавим новые	
  $k=count($mrep2)+1;
  for ($ii = 0; $ii <= count($mrep3)-1; $ii++)                    // каждую строку
  {$pre=explode("```",$mrep3[$ii]); 
  $pre[0]=$k++; 
  fwrite($w,implode("```", $pre));  
  }
 // закроем файл
  fclose($w); 
 if ($p=="tab")                                                  // вызов из таблицы
{$soob="Добавлено ".count($mrep3);
}
else                                                             // вызов из главной формы  
{echo  "<li>Добавлено ".count($mrep3);
}
}
//***********************************************************
     function kag_button12($p)
// разбор XML файла и контроль данных  Контроль автомат
//***********************************************************
{global $контроль_автомат_поля;	
 global $уровни_автомат_поля;
 global $abs1;
// уровни_автомат_поля;
$f=$abs1."pages/Na~chalo/contents/16,08,18_007/1.txt";      
$mti = file($f); 	                                         // таблицу в массив
$ошибок=0;                                                   // всего ошибочных строк
for ($i = 0; $i <= count($mti)-1; $i++) 
{$tiz=explode("```",str_replace("\r\n","",$mti[$i]));
$индексы[$tiz[$уровни_автомат_поля['индекс2']]]=$tiz[$уровни_автомат_поля['индекс']];
$наименования[$tiz[$уровни_автомат_поля['индекс2']]]=$tiz[$уровни_автомат_поля['наименование']];
$дата_форматы[$tiz[$уровни_автомат_поля['индекс2']]]=$tiz[$уровни_автомат_поля['дата_формат']];
}
 $fmrep=$abs1."pages/Na~chalo/contents/17,09,18_07/1.txt";    // файл таблицы
 $mrep2 = file($fmrep); 	                                  // корректируемый файл  
 $w = fopen($fmrep, 'w') or exit;   
 // 1 раскодируем XML 
 for ($ii = 0; $ii <= count($mrep2)-1; $ii++)                 // каждую строку
{$pre=explode("```",$mrep2[$ii]);
$pre[$контроль_автомат_поля['ошибки']]="";
$os="";                                                        // текст ошибки в строке 
$индекс="";
$время="";
$уровень="";
//*********************************************
//  данные из почты
if (strstr($pre[$контроль_автомат_поля['xml']], "?xml"))    // если есть XML выделим индекс дата уровень
//**********************************************
{// если есть индекс
list($z1,$z2)=explode("station ID=*",$pre[$контроль_автомат_поля['xml']]); 
if ($z2!="")
{list($z3,$z4)=explode("*",$z2); 
if ($z4!="" and $z3!="")
{$индекс2=$z3;}
else
{$os=$os." Нет индекса";
}}
else
{$os=$os." Нет индекса";}
// есть ли массив в таблице
if (!array_key_exists($индекс2,$индексы))   // нет
{$os=$os." Нет индекса ".$индекс2;}
else                                        // есть 
{$наименование=$наименования[$индекс2];
$индекс=$индексы[$индекс2];
}
// если есть дата время
list($z1,$z2)=explode("TIME=*",$pre[$контроль_автомат_поля['xml']]); 
if ($z2!="")
{list($z3,$z4)=explode("*",$z2); 
if ($z4!="" and $z3!="" )
{$время=$z3;}
else
{$os=$os." Нет времени";}
}
else
{$os=$os." Нет времени";}
$время=cdat($время,$дата_форматы[$индекс2]);
if($время=="1" or $время=="2" or $время=="3"  or $время=="4"  or $время=="5"  or $время=="6" or $время=="7")
{$os=$os." неформат даты ".$время;
}
// если есть уровень
 //VAR=*LB*&gt;&lt;value PROC=*INS*&gt;   &lt;
list($z1,$z2)=explode("VAR=*LB*&gt;&lt;value PROC=*INS*&gt;",$pre[$контроль_автомат_поля['xml']]); 
if ($z2!="")
{list($z3,$z4)=explode("&lt;",$z2); 
if ($z4!="" and $z3!="")
{$уровень=$z3;}
else
{$os=$os." Нет уровня";}
}
else
{$os=$os." Нет уровня";}
if(!is_numeric ($уровень))
{$os=$os." Уровень не число";}
if ($os!="")
{$ошибок++;}
else
{
$pre[$контроль_автомат_поля['индекс']]=$индекс;
$pre[$контроль_автомат_поля['индекс2']]=$индекс2;
$pre[$контроль_автомат_поля['дата_время']]=str_replace("T"," ",$время);
$pre[$контроль_автомат_поля['уровень']]=$уровень;
$pre[$контроль_автомат_поля['наименование']]=$наименование;
}
}
//***********************************************************************************************
else if ($pre[$контроль_автомат_поля['xml']]=="")   // ручной ввод  проверим дату и уровень
//***********************************************************************************************
{if ($pre[$контроль_автомат_поля['наименование']]=="")
{$os=$os." Нет поста";
}
else
{if ($pre[$контроль_автомат_поля['дата_время']]=="" or $pre[$контроль_автомат_поля['уровень']]=="")
{$os=$os." Нет даты, уровня";
}
else
{$время=cdat($pre[$контроль_автомат_поля['дата_время']],"ЧЧ-ММ-ГГГГ чч:мм:сс");
if($время=="1" or $время=="2" or $время=="3"  or $время=="4"  or $время=="5"  or $время=="6" or $время=="7")
{$os=$os." неформат даты ".$время;
}
//--------
if(!is_numeric ($pre[$контроль_автомат_поля['уровень']]))
{$os=$os." Уровень не число";}
}
if ($os!="")
{$ошибок++;}
}
}
//*******************************
else     // контроль от keller
//*******************************
{$md=explode(";",$pre[$контроль_автомат_поля['xml']]); 
if (count($md)<3)
{$os=$os." Не все данные";
$ошибок++;
}
else
{$индекс2=$md[0];
$время=$md[1];
$уровень=$md[2];
//------
//$индекс2=$pre[$контроль_автомат_поля['индекс2']];
if (!array_key_exists($индекс2,$индексы))   // нет в таблице
{$os=$os." Нет индекса ".$индекс2;
$ошибок++;
}
else                                    // есть в таблице
{$наименование=$наименования[$индекс2];
$индекс=$индексы[$индекс2];
//--------
$время=cdat($время,$дата_форматы[$индекс2]);  // дату в нужный формат
list($dat, $tim) = explode(" ",$время);
list($d, $m,$y) = explode(".",$dat);
if (!checkdate ( $m , $d , $y ))
{$os=$os." неформат даты=".$время;
}
else
{list($q,$m,$s) = explode(":",$tim);
if(!is_numeric ($q) and !is_numeric ($m) and !is_numeric ($s))
{$os=$os." Ошибка времени";
}}
//--------
if(!is_numeric ($уровень))
{$os=$os." Уровень не число";}
if ($os!="")
{$ошибок++;}
if ($os=="")                                                // ошибок нет
{$pre[$контроль_автомат_поля['индекс']]=$индекс;
$pre[$контроль_автомат_поля['индекс2']]=$индекс2;
$pre[$контроль_автомат_поля['дата_время']]=$время;
$pre[$контроль_автомат_поля['уровень']]=$уровень;
$pre[$контроль_автомат_поля['наименование']]=$наименование;
}}}}

$pre[$контроль_автомат_поля['ошибки']]=$os;
fwrite($w,implode("```", $pre)."\r\n"); 
}
fclose($w); 
if ($p=="tab")                                              // вызов из таблицы
{ global $soob;	
$soob="Контроль выполнен, ошибок - ".$ошибок;
}
else                                                        // вызов из главной формы  
{echo  "<li>Без/Ошибки/Всего";
}}
//********************************************************************************************
  function kag_button13($p)
// перемещение данных "Контроль данных автомат" без ошибок в базу данных "Уровни автомат"
//********************************************************************************************
{global $контроль_автомат_поля;	
global $уровни_автомат_поля;
global $уровни_сын_автомат_поля;
global $abs1;
$fmrep=$abs1."pages/Na~chalo/contents/17,09,18_07/1.txt";    // имя файла таблицы
$noerr = file($fmrep); 	                                     // считали
if (count($noerr)==0)
{return;}
//----------------------------------------------
//  новые данные из Контроль данных автомат
//----------------------------------------------
$даты =array();                           
for ($i = 0; $i <= count($noerr)-1; $i++)                    // по всем строкам
{$tiz=explode("```",str_replace("\r\n","",$noerr[$i]));      // строку на столбцы
if ($tiz[$контроль_автомат_поля['ошибки']]=="")
{list($дата,$время)=explode(" ",$tiz[$контроль_автомат_поля['дата_время']]);
$список=$уровни_вход[$tiz[$контроль_автомат_поля['индекс']]][$дата];
list($час,$мин,$сек)=explode(":",$время);
if  ($список=="")               // если по индексу и дате пусто запомним
{$уровни_вход[$tiz[$контроль_автомат_поля['индекс']]][$дата]=$час.":".$мин."=".$tiz[$контроль_автомат_поля['уровень']];
}
else                            // если по индексу и дате НЕ пусто добавим
{$уровни_вход[$tiz[$контроль_автомат_поля['индекс']]][$дата]=$список." ".$час.":".$мин."=".$tiz[$контроль_автомат_поля['уровень']];
}
list($d,$m,$y)=explode(".",$дата);
$даты2[$y.$m.$d]=$дата;          // общий список дат по индексам
$даты[$tiz[$контроль_автомат_поля['индекс']]]=$даты2;
}}
//--------------------------------------
// старые данные    Уровни автомат
//--------------------------------------
$fbaza=$abs1."pages/Na~chalo/contents/16,08,18_007/1.txt";      // отец
$mti = file($fbaza);
for ($i = 0; $i <= count($mti)-1; $i++) 
{$tiz2=explode("```",str_replace("\r\n","",$mti[$i]));
$индексы_база[$tiz2[$уровни_автомат_поля['индекс']]]=$tiz2[0];
}
//  сформируем массив для тех индексов которые есть на входе
for ($i2 = 0; $i2 <= count($уровни_вход)-1; $i2++)          // по всем индексам входа 
{$nppb=$индексы_база[key($уровни_вход)];
$fbaza2=str_replace('1.txt',$nppb."/1.txt",$fbaza);         // имя папки сына
if (!file_exists($fbaza2))                                  // если в базе нет файла
{$pso=str_replace("/1.txt","",$fbaza2);                     // имя папки файла
if (!file_exists($pso))                                     // если нет папки
{mkdir($pso);                                               // создадим ее  
}
$w = fopen($fbaza2, 'w') or exit;                           // и создадим файл
fclose($w);  
}
$mti2 = file($fbaza2);                                      // считали сына
for ($i3 = 0; $i3 <= count($mti2)-1; $i3++)                 // по всем датам сына
{$tiz3=explode("```",str_replace("\r\n","",$mti2[$i3]));
$уровни_база[key($уровни_вход)][$tiz3[$уровни_сын_автомат_поля['дата']]]=$tiz3[$уровни_сын_автомат_поля['уровни']];
list($d,$m,$y)=explode(".",$tiz3[$уровни_сын_автомат_поля['дата']]);
$даты2[$y.$m.$d]=$tiz3[$уровни_сын_автомат_поля['дата']];
$даты[key($уровни_вход)]=$даты2;
}
next($уровни_вход);   
}
ksort($даты);
reset($даты);                                               // на начало массива вход
for ($i2 = 0; $i2 <= count($даты)-1; $i2++)                 // по всем индексам 
{
$nppb=$индексы_база[key($даты)];
$fbaza2=str_replace('1.txt',$nppb."/1.txt",$fbaza);         // имя папки сына
$w = fopen($fbaza2, 'w') or exit;   
$wss=current($даты);
ksort($wss);
reset($wss);                                                // на начало массива вход
$k=1;
for ($i3 = 0; $i3 <= count($wss)-1; $i3++)                  // по всем датам
{$список=$уровни_вход[key($даты)][$wss[key($wss)]];         // список из входа
 $список2=$уровни_база[key($даты)][$wss[key($wss)]];        // список из базы 
$слит=$список2." ".$список;                                 // объединим списка 
$mnew=explode(" ",trim($слит));                             // объединенные списки на группы
$mnew2 =array(); 
  for ($i4 = 0; $i4 <= count($mnew)-1; $i4++)                 // по всем группам
 {list($t, $u) = explode("=",$mnew[$i4]);                    // группу на время и уровень
 $mnew2[$t]=$t."=".$u;          // слияние в группе повторы заменяются последними значениями (из входа)
 }
ksort($mnew2);
fwrite($w,$k++."```".$wss[key($wss)]."```".implode(" ", $mnew2)."```\r\n");  
next($wss);   
}
fclose($w); 
next($даты);   
}
// удалим строки без ошибок
$noerr = file($fmrep);
$w = fopen($fmrep, 'w') or exit;   
$k=1;
$kos=0;
for ($ii = 0; $ii <= count($noerr)-1; $ii++)                  // каждую строку
{$pre=explode("```", str_replace("\r\n","",$noerr[$ii]));
if ($pre[$контроль_автомат_поля['ошибки']]!="")
{
$pre[0]=$k++;
fwrite($w,implode("```", $pre)."\r\n");  
}
else
{$kos++;}
}
fclose($w); 
global $soob;	
if ($p=="tab")                                                // вызов из таблицы
{ global $soob;	
$soob="Перемещено в базу ".$kos;
}
else                                                         // вызов из главной формы  
{echo  "<li>Перемещено в базу - ".$kos;
}
}
