<?php
//***************************************************************************************
// Функционал серверной части таблицы "Контроль ледовые"
// Функции вызываются нажатием кнопок в таблице и при выполнении полного цикла действий
// modules/raz_con_base.php
//***************************************************************************************
function cdat($z,$s)   // проверка даты $z дата    $s шаблон
//************************************************************
{if (strlen($z)!=strlen($s))    // если длины шаблона даты и самой даты не совпадают
{return 7;}
// ГГГГ-ММ-ДД чч:мм:сс
//--------------------
$poz=strpos($s, "Г");
$год="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="Г") {break;}
$год=$год.substr($z, $i, 1); 
}
//--------------------
$poz=strpos($s, "М");
$месяц="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="М") {break;}
$месяц=$месяц.substr($z, $i, 1); 
}
//-----------------------
$poz=strpos($s, "Ч");
$число="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="Ч") {break;}
$число=$число.substr($z, $i, 1); 
}
//-----------------------
$poz=strpos($s, "ч");
$час="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="ч") {break;}
$час=$час.substr($z, $i, 1); 
}
//-----------------------
$poz=strpos($s, "м");
$мин="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="м") {break;}
$мин=$мин.substr($z, $i, 1); 
}
//-----------------------
$poz=strpos($s, "с");
$сек="";
for ($i =$poz; $i <=strlen($s)-1; $i++) 
{$ts=substr($s, $i, 1);
if ($ts!="с") {break;}
$сек=$сек.substr($z, $i, 1); 
}
//echo "<hr>".$год."+".$месяц."+".$число."+".$час."+".$мин."+".$сек."+";
if(!ctype_digit($год) or !ctype_digit($месяц) or  !ctype_digit($число) or  !ctype_digit($час) or !ctype_digit($мин) or  !ctype_digit($сек))
{return "1";}
if  (!checkdate ($месяц,$число, $год)) {return "2";}
if(!is_numeric($час) or !is_numeric($мин) or  !is_numeric($сек)) {return "3";}
if ($час<0 or $час>23) {return "4";}
if ($мин<0 or $мин>60) {return "5";}
if ($сек<0 or $сек>60) {return "6";}
return $число.".".$месяц.".". $год." ". $час.":". $мин.":". $сек;
}




//*************************************************************************
     function kL_button11($p)
// Контроль  данных таблицы "Контроль ледовые"
//*************************************************************************
{
 global $контрольлед_явл_поля;
 global $ледовые_поля;
 global $час_поля100;
 list($abs1, $s2) = explode("pages",getcwd( ));
// индексы и наименования таблицы "Ледовые"
$f=$abs1."pages/Na~chalo/contents/10,08,16_0001/1.txt";      
$mti = file($f); 	                                         // таблицу в массив
$ошибок=0;                                                   // всего ошибочных строк
for ($i = 0; $i <= count($mti)-1; $i++) 
{$tiz=explode("```",str_replace("\r\n","",$mti[$i]));
$индексы[$tiz[$ледовые_поля['индекс']]]=$tiz[$ледовые_поля['наименование']];
}
// http://localhost/gidra/pages/100/contents/27,04,17_03/~chas.php
$f=$abs1."pages/100/contents/27,04,17_03/1.txt";      
$mti = file($f); 	                                         // таблицу в массив
for ($i = 0; $i <= count($mti)-1; $i++) 
{$tiz=explode("```",str_replace("\r\n","",$mti[$i]));
$индексы2[$tiz[$час_поля100['час']]]=$i;
}



$fmrep=$abs1."pages/Na~chalo/contents/11,08,16_003/1.txt";    // файл таблицы Контроль ледовые
$mrep2 = file($fmrep); 	                                      // корректируемый файл  
$w = fopen($fmrep, 'w') or exit;   

for ($ii = 0; $ii <= count($mrep2)-1; $ii++)                  // каждую строку Контроля ледовых
{
$pre=explode("```",str_replace("\r\n","",$mrep2[$ii]));
$os="";                                                        // текст ошибки в строке 
if (!array_key_exists($pre[$контрольлед_явл_поля['индекс']],$индексы)) 
{$os=$os." Нет поста";
$pre[$контрольлед_явл_поля['наименование']]="";
}
else                                    // откорректируем или введем наименование
{
$pre[$контрольлед_явл_поля['наименование']]=$индексы[$pre[$контрольлед_явл_поля['индекс']]];
}

if ($pre[$контрольлед_явл_поля['дата']]=="")
{$os=$os." Нет даты";}
else
{$mdat=explode(".",$pre[$контрольлед_явл_поля['дата']]);
if (count($mdat)!=3)
{$os=$os." Неформат даты";}
else
{$месяц=$mdat[1];
$число=$mdat[0];
$год=$mdat[2];
if  (!checkdate ($месяц,$число, $год))
{$os=$os." Неформат даты";
}}}

if ($pre[$контрольлед_явл_поля['час']]=="")
{$os=$os." Нет час";}
else
{
if (!array_key_exists($pre[$контрольлед_явл_поля['час']],$индексы2)) 
{
$os=$os." Час вне списка";
}

}


if ($pre[$контрольлед_явл_поля['получено']]=="")
{$os=$os." Нет получено";}
else
{
$время=cdat($pre[$контрольлед_явл_поля['получено']],"ЧЧ-ММ-ГГГГ чч:мм:сс");
if($время=="1" or $время=="2" or $время=="3"  or $время=="4"  or $время=="5"  or $время=="6" or $время=="7")
{$os=$os." получено ".$время;
}
}
// пишем проконтролированную строку
$pre[$контрольлед_явл_поля['ошибки']]=$os;
fwrite($w,implode("```", $pre)."\r\n"); 
}
fclose($w); 
}









//*******************************************************************************
   function kL_button12($p)
// Перемещение данных без ошибок из  таблицы Контроль ледовые в таблицу Ледовые
//*******************************************************************************
{
 global $контрольлед_явл_поля;
 global $ледовые_поля;
 global $ледовые_сын_поля;
global $soob;	
list($abs1, $s2) = explode("pages",getcwd( ));
$os="";                                                    // тексты ошибок 
//************************************
// массив индексов  в таблице ледовых
//************************************
// $f=$abs1."pages/Na~chalo/contents/18,09,18_008/1.txt";  
$f=$abs1."pages/Na~chalo/contents/10,08,16_0001/1.txt";     // таблица ледовые  
$mti = file($f); 	                                        // таблицу в массив
$mmti=array(); 
for ($i = 0; $i <= count($mti)-1; $i++) 
{$tiz=explode("```",str_replace("\r\n","",$mti[$i]));
$mmti[$tiz[1]]=$tiz[0];                                     // ключ - индекс значенеие номер по порядку
$mmtiz[$tiz[1]]=$tiz[2];                                    // мссив наименований пунктов 
}
//*******************************************************************
// Отсортируем Контроль ледовых по Идекс+год+мес+день+час+номер пп
//*******************************************************************
$mgk=array(); 
$ftt=$abs1."pages/Na~chalo/contents/11,08,16_003/1.txt";   // файл таблицы  Коньоль ледовые
$ku=  file($ftt);                                // строки Контроль ледовых (МАССИВ СТРОК)
for ($i = 0; $i <= count($ku)-1; $i++)           // по всем строкам
{$ts=str_replace("\r\n","",$ku[$i]);             // уберем конец строки
 $mz=explode("```",$ts);                         // строку на столбцы   
 if (trim($mz[$контрольлед_явл_поля["ошибки"]])=="" and trim($mz[$контрольлед_явл_поля["ошибки2"]])=="")    // ошибочные строки исключаем
{// если есть индекс  кто-то удалил строки из таблицы ледовые после контроля ?
if (array_key_exists($mz[$контрольлед_явл_поля["индекс"]],$mmti))
{$dd=$mz[$контрольлед_явл_поля["дата"]];         // получим дату
 list($d, $m,$g) = explode(".",$dd);             // разобьем дату 
 // значение в асс массив  индекс+год+мес+день+час+номер пп  значение - указатель на массив строк
$mgk[$mz[$контрольлед_явл_поля["индекс"]].$g.$m.$d.$mz[$контрольлед_явл_поля["час"]]]=$i;
}
else
{if (strstr($os2, $mz[$контрольлед_явл_поля["индекс"]]))
{}
else
{$os2=$os2."Нет индекса ".$mz[$контрольлед_явл_поля["индекс"]]." выполни контроль !<br>";}
}}}
ksort($mgk);                                    // отсортируем по ключу  (по времени N пп) тк возможны повторения
reset($mgk);                                    // на начало  
//*******************************************
// удалим повторения  принимается последний
//*******************************************
$mgk2=array(); 
for ($i2 = 0; $i2 <= count($mgk)-1; $i2++)       // индекс+год+мес+день+час
{$wss=current($mgk); 
 $mz=explode("```",$ku[$wss]);                   // строку на столбцы   
 $dd=$mz[$контрольлед_явл_поля["дата"]];         // получим дату
 list($d, $m,$g) = explode(".",$dd);             // разобьем дату 
 // значение в асс массив  год+мес+день+час -> значение указатель на строку в массиве строк
$mgk2[$mz[$контрольлед_явл_поля["индекс"]].$g.$m.$d.$mz[$контрольлед_явл_поля["час"]]]=$wss; //
next($mgk);   
}

ksort($mgk2);                                    // отсортируем по ключу 
reset($mgk2);                                    // на начало  
$mgk3=array(); 

for ($i2 = 0; $i2 <= count($mgk2)-1; $i2++)      // сформируем массив ключ - индекс,содержание - указатели через 
{$wss=current($mgk2); 
 $mz=explode("```",$ku[current($mgk2)]);                   // строку на столбцы по указателю  
 // считаем сына контроля ледовых
 $fttt=$abs1."pages/Na~chalo/contents/11,08,16_003/".$mz[0]."/1.txt";   // файл таблицы  
 // добавим строки в асс массив  1 ключ ->индекс, 2 ключ год+мес+день+час знчения список ледовых
  $dd=$mz[$контрольлед_явл_поля["дата"]];                   // получим дату
 list($d, $m,$g) = explode(".",$dd);                        // разобьем дату 
 $key=$g.$m.$d.$mz[$контрольлед_явл_поля["час"]];       
 if  (file_exists($fttt))
 {$wsss= file_get_contents($fttt); 
 $mgk3[$mz[$контрольлед_явл_поля["индекс"]]][$key][0]=$wss;   // указатель на строку табл контр ледовых
 $mgk3[$mz[$контрольлед_явл_поля["индекс"]]][$key][1]=$wsss;  // список ледовых этой строки
 }
 next($mgk2);   
 }

ksort($mgk3);                                    // отсортируем по ключу 
reset($mgk3);                                    // на начало  

for ($j = 0; $j <= count($mgk3)-1; $j++)         // для каждого индекса из Контроля ледовых
{$wss3=current($mgk3); 
// определим файл сына ледовых
$f=$abs1."pages/Na~chalo/contents/10,08,16_0001/".$mmti[key($mgk3)]."/1.txt";
// определим папку сына ледовых
$f2=$abs1."pages/Na~chalo/contents/10,08,16_0001/".$mmti[key($mgk3)]."/";      
if  (!file_exists($f2))                         // если сына ледовых нет папки
{mkdir($f2);                                    // создадим ее   
}
if (!file_exists($f))                          // если у сына нет файла
{$ww100=  fopen($f, 'w') or exit;               // создадим пустой файл
fclose($ww100);
}
$mgs=  file($f);                                // читаем сына ледовых
$mges_son=array();                              // массив строку сына ледовых  
for ($ii = 0; $ii <= count($mgs)-1; $ii++)      // для каждой строки сына ледовых
{$ges_son = explode("```",$mgs[$ii]);            // строку на столбцы
$dd=$ges_son[$ледовые_сын_поля["дата"]];
list($d, $m,$g) = explode(".",$dd);             // разобьем дату 
// определим файл внука ледовых
$ff=$abs1."pages/Na~chalo/contents/10,08,16_0001/".$mmti[key($mgk3)]."/".$ges_son[0]."/1.txt";
// определим папку внука ледовых
$ff2=$abs1."pages/Na~chalo/contents/10,08,16_0001/".$mmti[key($mgk3)]."/".$ges_son[0]."/";      
if  (!file_exists($ff2))                         // если внука ледовых нет папки
{mkdir($ff2);                                    // создадим ее   
}
if (!file_exists($ff))                           // если у внука нет файла
{$ww100=  fopen($ff, 'w') or exit;               // создадим пустой файл
fclose($ww100);
}
$mgsg= file_get_contents ($ff);                  // читаем внука ледовых
$mges_son[$g.$m.$d.$ges_son[$ледовые_сын_поля["час"]]]=$mgsg;
}
ksort($mges_son);                                    // отсортируем по ключу 
reset($mges_son);                                    // на начало  
//*************************************************************************************
// поместим в массив сына ледовых данные из массива Контроль ледовых (слияние массивов)
//*************************************************************************************
$wss2=current($mgk3);                                 // 
reset($wss2);   
for ($i = 0; $i <= count($wss2)-1; $i++)              // каждую строку масства указателей  
{$wss3=current($wss2);                                // 
 $ws5=$ku[$wss3[0]];                                  // по указателю получим строку контроля ледовых
 $ws5=str_replace("\r\n","",$ws5);                    // уберем конец строки
 $ws3 = explode("```",$ws5);                          // строку из Контроль ледовых на столбцы 
 $dd=$ws3[$контрольлед_явл_поля["дата"]];             // получим дату из контроля ледовых
 list($d, $m,$g) = explode(".",$dd);                  // разобьем дату 
 $keykur=$g.$m.$d.$ws3[$контрольлед_явл_поля["час"]]; // ключ строки из контроля ледовых
 $mges_son[$keykur]=$wss3[1];              // список из контроля в массив слияния (массив сына ледовых) 
 next($wss2);
}
ksort($mges_son);                                    // отсортируем по ключу 
reset($mges_son);                                    // с начала
$w=  fopen($f, 'w') or exit;                         // сын ледовых для записи дат
for ($i = 0; $i <= count($mges_son)-1; $i++)         // каждую строку массива сына ледовых
{$wss4=current($mges_son);                           //  
$g=substr(key($mges_son), 0,4);                      // из ключа сформируем дату и час 
$m=substr(key($mges_son), 4,2);
$d=substr(key($mges_son), 6,2);
$h=substr(key($mges_son), 8,2);
$dat=$d.".".$m.".".$g;
// сформируем строку сына ледовых от массива слияния
$nssL="";
for ($i2 = 0; $i2 <= count($ледовые_сын_поля); $i2++)         // каждый столбец сына ледовых заполним
{if ($i2==0)                                                  // номер по порядку 
{$nssL=$i+1;}
else if ($i2==$ледовые_сын_поля["дата"])                      // дата
{$nssL=$nssL."```".$dat;}
else if ($i2==$ледовые_сын_поля["час"])                       // час
{$nssL=$nssL."```".$h;}
else                                                          // остальные = пусто
{$nssL=$nssL."```";}
}
fwrite($w,$nssL."\r\n");                                      // строка сына ледовых от массива слияния
$ff3=str_replace("1.txt",($i+1)."/1.txt",$f); 
$fff3=str_replace("1.txt","",$ff3);
if  (!file_exists($fff3))                                     // если внука ледовых нет папки
{mkdir($fff3);                                                // создадим ее   
}
if (!file_exists($ff3))                           // если у внука нет файла
{$ww100=  fopen($ff3, 'w') or exit;               // создадим пустой файл
fclose($ww100);
}

$ww=  fopen($ff3, 'w') or exit;                  // сын ледовых для записи дат
fwrite($ww,$wss4); 
fclose($ww);
next($mges_son);
}
fclose($w);
array_splice ($mges_son,0);                     // зачистим массив слияния 
next($mgk3);                                    // следующаий индекс массива контроля ледовых 
}
//********************************************************
// удалим строки без ошибок в таблице "Контроль ледовые"
//*******************************************************
$w = fopen($ftt, 'w') or exit;                   // откроем для записи контроль ледовых
$k=1;
for ($i = 0; $i <= count($ku)-1; $i++)           // по всем строкам
{$ts=str_replace("\r\n","",$ku[$i]);             // уберем конец строки
$mz=explode("```",$ts);                          // строку на столбцы   
if ($mz[$контрольлед_явл_поля["ошибки"]]!="")    // только ошибочные строки сохраним
{$mz[0]=$k++;
fwrite($w,implode("```", $mz)."\r\n");           // пишем 
}
else                                             // удалим папки сына
{$f=$abs1."pages/Na~chalo/contents/11,08,16_003/".($i+1)."/";
if (file_exists($f)) 
{full_del_dir($f);}
}
}
fclose($w);                                     // закрыли
$soob="ПЕРЕМЕЩЕНО В БАЗУ!";
}
