<?php
//******************************************************************************
//        ОБРАБОТКА КНОПОКИ  КОНТРОЛЬ УРОВНЕЙ СОХРАНИИТЬ В БАЗЕ СЕРВЕРНАЯ ЧАСТЬ
//******************************************************************************
//        СПИСКИ МАССИВОВ ОБОЗНАЧЕНИЙ смотри modules/f3.php
//**************************************************
$rew=date_default_timezone_set("Asia/Krasnoyarsk");
$vvv="все строки";
//******************************************************
if (isset ($_REQUEST['button11']) or isset ($_REQUEST['button12']))     // если запустил  запись в базу
{
include $abs1."/modules/f3.php";      // вставим фрагмент контроля наличия обозначений в всех таблицах
//******************************************************************************************
if ($os2=="")                         // грубых ошибок нет (есть все поля во всех таблицах)            
//******************************************************************************************
{
$os="";                                           // тексты ошибок 
//*************************************************************
// Отсортируем Контроль уровней по Идекс+год+мес+день+час+номер пп
//*************************************************************
//************************************
// массив индексов  в таблице УРОВНЕЙ
//************************************
$mmti=array(); 
$mmtiz=array(); 
$f=substr(getcwd ( ), 0, $poz)."pages/Na~chalo/contents/10,08,16_001/1.txt";      
$mti = file($f); 	                             // таблицу в массив
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=substr(getcwd ( ), 0, $poz)."pages/Na~chalo/contents/11,08,16_01/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[$контрольуровней_поля["ошибки"]])=="")    // ошибочные строки исключаем
{
if (array_key_exists($mz[$контрольуровней_поля["индекс"]],$mmti))
{
$dd=$mz[$контрольуровней_поля["дата"]];         // получим дату
 list($d, $m,$g) = explode(".",$dd);             // разобьем дату 
 // значение в асс массив  индекс+год+мес+день+час+номер пп  значение - указатель на массив строк
$mgk[$mz[$контрольуровней_поля["индекс"]].$g.$m.$d.$mz[$контрольуровней_поля["час"]].$mz[0]]=$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)]);          // строку на столбцы   
 // добавим строки в асс массив  ключ ->индекс, знчения указатели на строки этого индекса
 if (array_key_exists($mz[$контрольуровней_поля["индекс"]],$mgk3)) 
 {
 $mgk3[$mz[$контрольуровней_поля["индекс"]]]=$mgk3[$mz[$контрольуровней_поля["индекс"]]].",".$wss;
 }
 else
 {$mgk3[$mz[$контрольуровней_поля["индекс"]]]=$wss;}
 next($mgk2);   
 }


for ($j = 0; $j <= count($mgk3)-1; $j++)         // для каждого индекса из Контроля уровней
{
// определим файл сына уровней
$f=substr(getcwd ( ), 0, $poz)."pages/Na~chalo/contents/10,08,16_001/".$mmti[key($mgk3)]."/1.txt";
// определим папку сына уровней
$f2=substr(getcwd ( ), 0, $poz)."pages/Na~chalo/contents/10,08,16_001/".$mmti[key($mgk3)]."/";      
if  (!file_exists($f2))                     // если сына уровней нет папки
{mkdir($f2);                                // создадим ее   
}
if  (!file_exists($f))                      // если у сына нет файла
{$ww100=  fopen($f, 'w') or exit;           // создадим пустой файл
fclose($ww100);
}
$mgs=  file($f);                             // читаем сына УРОВНЕЙ
$mgs_son=array();                            // массив строку сына уровней  

for ($ii = 0; $ii <= count($mgs)-1; $ii++)   // для каждой из строк сына уровней
{
$ges_son = explode("```",$mgs[$ii]);        // строку на столбец
$dd=$ges_son[$уровни_сын_поля["дата"]];
list($d, $m,$g) = explode(".",$dd);          // разобьем дату 
$mges_son[$g.$m.$d.$ges_son[$уровни_сын_поля["час"]]]=$mgs[$ii];  // значение в асс массив  год+мес+день+час
}

//массив сына УРОВНИ сформирован или нет 
//*************************************************************************
// поместим в массив сына данные из массива Контроль уровней (слияние массивов)
//*************************************************************************
$wss2=current($mgk3);                                // список указателей на строки индекса контроля уровней 
$wss=explode(",",$wss2);                             // преобразуем в массив 
for ($i = 0; $i <= count($wss)-1; $i++)              // каждую строку масства указателей  
{$ws5=$ku[$wss[$i]];                                 // по указателю получим строку 
 $ws5=str_replace("\r\n","",$ws5);                    // уберем конец строки
 $ws3 = explode("```",$ws5);                          // строку из Контроль уровней на столбцы 
 $wsn=$i+1;                                           // N пп
 for ($ii = 1; $ii <= count($уровни_сын_поля2)-1; $ii++)  // по всему полям сына уровней
{if (array_key_exists($уровни_сын_поля2[$ii],$контрольуровней_поля))   // если по обозначению такой есть в масс контр
{$wsn=$wsn."```".$ws3[$контрольуровней_поля[$уровни_сын_поля2[$ii]]];  // поместим его значение в стору сына 
}
else                                          
{$wsn=$wsn."```";                                // можно было и по умолчанию вставить
}
}
 $dd=$ws3[$контрольуровней_поля["дата"]];        // получим дату из контроля уровней
 list($d, $m,$g) = explode(".",$dd);             // разобьем дату 
 $keykur=$g.$m.$d.$ws3[$контрольуровней_поля["час"]];  // ключ строки из контроля уровней
$mges_son[$keykur]=$wsn."\r\n";
next($wss);            
}
ksort($mges_son);                               // отсортируем по ключу  слияние
reset($mges_son);                               // на начало  
$w = fopen($f, 'w') or exit;                    // откроем для записи сына уровней
for ($i7 = 0; $i7 <= count($mges_son)-1; $i7++) // каждую строку слияния
{$ws7=current($mges_son);                       // текущая строка
//echo $ws7."<br>";
$rez = explode("```",$ws7);                     // на столбцы
$rez[0]=$i7+1;                                  // новый N пп 
fwrite($w,implode("```", $rez));                // пишем  слияние столбцов
next($mges_son);                                // следующая строка слияния
}
fclose($w);                                     // закрыли слияние
array_splice ($mges_son,0);                     // зачистим массив слияния 
next($mgk3);                                    // следующаий индекс массива контроля уровней 
}

// покажем окно ошибок
if ($os3!="" || $os2!="")
{
}
else
{
if (isset ($_REQUEST['button11']))
{ 
// из таблицы контроль данных удалим строки без ошибок
$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");           // пишем 
}
}
fclose($w);                                     // закрыли
$soob="ПЕРЕМЕЩЕНО В БАЗУ!";
}
else
{
$soob="СКОПИРОВАНО В БАЗУ!";
}
}
}
}
?>
