function parse_text_date($textstring)
{
$dateparse=explode(".",$textstring);
$isdate=0;
if (count($dateparse)==3) //у нас три элемента получились.
{
if ($dateparse[2]=="00")
$dateparse[2]=2000;
if (checkdate((int)$dateparse[1],(int)$dateparse[0],(int)$dateparse[2])===TRUE)
$isdate=1;
}
else
{
//тогда пробуем разбить, ориентируясь на слэши
$dateparse=explode("/",$textstring);
if (count($dateparse)==3) //у нас три элемента получились.
{
if ($dateparse[2]=="00")
$dateparse[2]=2000;
if (checkdate((int)$dateparse[1],(int)$dateparse[0],(int)$dateparse[2])===TRUE)
$isdate=1;
}
}
//теперь надо объединить все в единый такой массивчик
if ($isdate==1) //если сумели выделить дату, то должны ее теперь вернуть
return mktime(0,0,0,(int)$dateparse[1],(int)$dateparse[0],(int)$dateparse[2]);
return -1; //возвращаем что не удалось
}
//костыль - режем слово "ОТВЕТ" и "ОТВЕТЫ" из заголовка сообщения
function bb_msg_old_rezhem_otvet($procinputtext)
{
while( 1 )
{
$procpos=strrpos($procinputtext,'.');
$tempstr=trim(substr($procinputtext,$procpos+1));
if (strncmp('Ответ ',$tempstr,6)==0 || strncmp('Ответы ',$tempstr,7)==0 )
$procinputtext=substr($procinputtext,0,$procpos);
else
break;
}
return $procinputtext;
}
//приделали костыль - старое сообщение надо дообработать перед выводом на экран
function old_msgprepare($textbody)
{
$textbody=eregi_replace("\"ns_list.cgi","\"/cgi-bin/ns_list.cgi",$textbody);
$textbody=eregi_replace("\"or_file.cgi","\"/cgi-bin/or_file.cgi",$textbody);
$textbody=eregi_replace("\"ps_file.cgi","\"/cgi-bin/ps_file.cgi",$textbody);
$textbody=eregi_replace("/cgi-bin/ns_file.cgi","/titles/bb_show.php",$textbody);
$textbody=eregi_replace("Генеология:","Генеалогия:",$textbody);
return $textbody;
}
//из файла с данными вытягиваем сообщение
function old_getMSG_array($workmode, $msg_id, $info_razdel=0)
{
$flag_ok=0;
$flag_title=0;
$text_array=array();
$text_block='';
$text_title='';
$text_date='';
$info_razdel=(int)$info_razdel; //принудительно приводим к числу (защита от ошибки)
if ($info_razdel==0)
switch ((int)$workmode)
{
case 1:
$info_razdel=5;
break;
case 2:
$info_razdel=3;
break;
default:
die('unsupported mode');
}
if ($info_razdel<1 or $info_razdel>5)
die("old_getMSG_array:error in razdel_number=".$info_razdel);
$fptr=fopen("../News/".$info_razdel."/Files/".$msg_id.".htm",'rb');
if ($fptr!==FALSE)
{
while(($c = fgets($fptr))!==false)
{
if ($flag_ok!=0)
$flag_title=0;
//проверки на предмет изменения состояния ДО присвоения текста
if ( strpos($c, '
') !== FALSE)
{
$text_title=trim(substr($c,30));
$flag_title=1;
}
else if ($flag_title==1)
$text_title.=" ".trim($c);
if ($flag_title==1)
{
if ( ($pos=strpos($text_title, '')) !== FALSE)
{
$text_title=substr($text_title,0,$pos);
$flag_title=0;
}
}
if (strpos($c, '')!==FALSE)
$flag_ok=1;
//вырезаем из текста служебные символы
if ($flag_ok==1)
{
$pos1=strpos($c, '');
if ($pos1!==FALSE)
$text_date=substr($c,31,8);
if (strpos($c, '')!==FALSE )
$flag_ok=2;
}
}
fclose($fptr);
$text_block=str_replace('
','',$text_block);
$foundfile=1;
}
else
$foundfile=0;
$text_array=array($msg_id, $text_date, trim($text_title),$text_block, $foundfile);
return $text_array;
}
//определяем название и прочую информацию о группе общения
function getGroup_info($workmode, $group_id, $info_razdel=0)
{
$grouplist=old_getListGroup($workmode, 0, $info_razdel);
$grouplist_count=count($grouplist);
if ($grouplist_count>0) //если список групп удалось загрузить, то
for ($i=0;$i<$grouplist_count;$i++)
if ($grouplist[$i][0]==$group_id)
return $grouplist[$i];
return array();
}
function old_getMSG($msg_id, $info_razdel)
{
$flag_ok=0;
$text_block='';
$text_title='';
$info_razdel=(int)$info_razdel;
if ($info_razdel<1 or $info_razdel>5)
die("old_getMSG:unsupportedmode");
$fptr=fopen("../News/".$info_razdel."/Files/".$msg_id.".htm",'rb');
if ($fptr!==FALSE)
{
while(($c = fgets($fptr))!==false)
{
//проверки на предмет изменения состояния ДО присвоения текста
if ( strpos($c, '') !== FALSE)
{
$text_title=trim(substr($c,30));
if ( ($pos=strpos($text_title, '')) !== FALSE)
$text_title=substr($text_title,0,$pos);
}
if (strpos($c, '')!==FALSE)
$flag_ok=1;
//вырезаем из текста служебные символы
if ($flag_ok==1 && strpos($c, '')!==FALSE )
$flag_ok=2;
}
fclose($fptr);
$text_block=str_replace('
','',$text_block);
$text_block="Исходный заголовок:".$text_title."\nИсходный текст\n".$text_block;
}
return $text_block;
}
function old_getListGroup($workmode, $selected_group_id, $info_razdel=0)
{
$info_razdel=(int)$info_razdel;
if ($info_razdel==0)
{
switch ($workmode)
{
case 1:
$razdel=5;
break;
case 2:
$razdel=3;
break;
default:
$razdel=5;
break;
}
}
else
$razdel=$info_razdel;
//сначала читаем файлик со списком новостных групп (в данном случае с группами FAQ)
$fptr=fopen("../News/".(int)$razdel."/NewsList.htm",'rb');
$flag_start_scan=0;
$flag_stop_scan=0;
$myarray=array();
while(($c = fgets($fptr))!==false)
{
$pos=strpos($c, '');
if ($pos!==FALSE)
$flag_start_scan=1;
$pos=strpos($c, '');
if ($pos!==FALSE)
{
$flag_stop_scan=1; //ставим признак что нашли окончание
break;
}
if ($flag_start_scan==1)
{
$c=str_replace('
','',$c);
$pos=strpos($c,' ');
if ($pos!==FALSE)
{
$myindex=(int)substr($c,3,$pos-3);
$c=substr($c,$pos+1);
}
$c=trim($c);
if (strlen($c)==0)
break;
if ($myindex!=9999)
{
if ($selected_group_id==$myindex)
$selected_flag='SELECTED';
else
$selected_flag='';
$myarray[]=array($myindex,$selected_flag,$c);
}
}
}
if ($flag_stop_scan!=1)
die('Внимание! идет обновление сайта. попробуйте через 5 минут');
fclose($fptr);
//теперь в массиве у нас должен быть список из групп...второй этап обработки-убирание лишних символов
//отрезаем ненужный первый элемент
return array_splice($myarray,1);
}
function old_getListMSG($workmode, $selected_group_id)
{
if ($selected_group_id=='')
die ("не указан номер группы");
switch ($workmode)
{
case 1:
$razdel=5;
break;
case 2:
$razdel=3;
break;
default:
die('old_getListMSG:unsupported mode');
break;
}
//сначала читаем файлик со списком новостных групп (в данном случае с группами FAQ)
$fptr=fopen("../News/".(int)$razdel."/NewsList.htm",'rb');
$flag_start_scan=0;
$flag_stop_scan=0;
$myarray=array();
$mystring='';
while(($c = fgets($fptr))!==false)
{
$pos=strpos($c, '');
if ($pos!==FALSE)
{
$flag_start_scan=1;
continue;
}
$pos=strpos($c, '');
if ($pos!==FALSE)
{
$flag_stop_scan=1;
break;
}
if ($flag_start_scan==1)
{
$mystring.=" ".trim($c);
if (strpos($c,'
')!==FALSE)
{
$mystring=trim(str_replace('
','',$mystring));
$this_date=substr($mystring,0,8);
$this_textall=substr($mystring,10);
$pos=(int)strrpos($this_textall,';');
if ($pos>0)
{
$this_index=(int)(substr($this_textall,$pos+1));
$this_text=substr($this_textall,0,$pos);
}
else
$this_text=$this_textall;
$myarray[]=array($this_index,$this_date,trim($this_text));
$mystring='';
}
}
}
if ($flag_stop_scan!=1)
die('Внимание! идет обновление сайта. попробуйте через 5 минут');
fclose($fptr);
//теперь в массиве у нас должен быть список из групп...второй этап обработки-убирание лишних символов
//отрезаем ненужный первый элемент
return $myarray;
}
function GroupList_GetAll($sqllink, $info_razdel, $group_id, $group_old_id)
{
$retarray=array();
$sqlwhere="";
//устанавливаем фильтр в зависимости от номера группы
if ((int)$group_id!=0)
$sqlwhere=" and id_record='".(int)$group_id."'";
else if ($group_old_id!="")
$sqlwhere=" and prog_index like '".$group_old_id."'";
//и дополняем фильтр ограничением по номеру раздела
if ((int)$info_razdel==0)
die("GroupList_GetAll:$info_razdel=0");
$sqlwhere="WHERE bb_number=".$info_razdel.$sqlwhere;
//Теперь делаем выборку
$result=db_query($sqllink, 'select id_record, prog_index, namerazdel from bb_msg_razdel '.$sqlwhere);
//проверяем чтобы нам что нибудь вернулось в результате запроса
if (mysql_num_rows($result)>0)
while( ($row=mysql_fetch_array($result)) )
$retarray[]=$row;
return $retarray;
}
function GroupList_Get($sqllink, $info_razdel, $group_id, $group_old_id)
{
$listarray=GroupList_GetAll($sqllink, $info_razdel, $group_id, $group_old_id);
if (count($listarray)>0)
return $listarray[0];
return array();
}
//корректируем новостную группу (если это нужно, конечно)
//убрать потом - "deprecated"
function GroupList_Update($sqllink, $workmode, $listarray, $paramold)
{
//проверка - равны ли строки или нет
if (strcmp($listarray["namerazdel"],$paramold["namerazdel"])==0 )
return;
//проверка не пройдена, строки различаются
$sql='update bb_msg_razdel set NameRazdel=\''.addslashes($paramold["namerazdel"]).'\' where id_record='.(int)$paramold["id_record"];
db_query($sqllink, $sql);
}
//убрать потом - "deprecated"
function GroupList_Remove($sqllink, $workmode, $group_id)
{
//здесь в будущем должен быть программный код для определения наличия
//записей в этой группе и если сообщения есть то блокировать удаление
//и просто ставить признак "закрытия" группы общения
$sql='delete from bb_msg_razdel where id_record='.(int)$group_id;
db_query($sqllink, $sql);
}
//***************************************************************************
//Общие функции**************************************************************
//***************************************************************************
//bbmsg_delete - удаляем сообщение целиком
//сначала удаляем содержимое, затем заголовок
function bbmsg_delete($dblink, $msg_id)
{
$sql='delete from bb_msg_body where owner_id='.$msg_id;
db_query($dblink,$sql);
$sql='delete from bb_msg_head where id_record='.$msg_id;
db_query($dblink,$sql);
}
//BBRUBRIKA********************************************************************
//bbrubrika_get_old - Извлекаем из БД старое название группы
//функция такая уже существует. эта функция будет "оберткой" для старой функции
//и будет приводить результат к новому формату
function bbrubrika_get_old($info_razdel, $group_id_old)
{
//первый параметр убираем, он теперь нам не понадобится
$oldlist_array=getGroup_info(0, $group_id_old, $info_razdel);
$retarray=array();
if (count($oldlist_array)>0)
{
$retarray["rubrika_id_old"]=$oldlist_array[0];
$retarray["rubrika_name"]=$oldlist_array[2];
}
return $retarray;
}
//bbrubrika_get_sql_where
//подготавливаем условия для извлечения информации из БД
function bbrubrika_get_sql_where($info_razdel, $group_id, $group_old_id)
{
//Сразу определяем фильтр по номеру раздела. и это обязательно!
if ((int)$info_razdel==0)
die("bbrubrika_get_sql_where:info_razdel=0");
$sqlwhere=" and bb_number=".(int)$info_razdel;
if ((int)$group_id!=0)
$sqlwhere=$sqlwhere." and id_record='".(int)$group_id."'";
if ($group_old_id!="")
$sqlwhere=$sqlwhere." and prog_index like '".$group_old_id."'";
//дополнительная обработочка текстовой переменной
if (strlen($sqlwhere)>0)
$sqlwhere=" where ".substr($sqlwhere,5);
//и возвращаем строчку для использования в качестве WHERE
return $sqlwhere;
}
//bbrubrika_get_sql - из SQL базы извлекаем название рубрики
//такая функция уже есть в старых, поэтому делаем "обертку", далее должна быть
//перенесена целиком сюда...
function bbrubrika_get_sql($sqllink, $info_razdel, $group_id, $group_old_id)
{
$newlist_array=GroupList_Get($sqllink, $info_razdel, $group_id, $group_old_id);
$retarray=array();
if (count($newlist_array)>0)
{
$retarray["rubrika_id"]=$newlist_array["id_record"];
$retarray["rubrika_id_old"]=$newlist_array["prog_index"];
$retarray["rubrika_name"]=$newlist_array["namerazdel"];
}
return $retarray;
/* Старая функция.GroupList_Get надо ее обновить и сделать новой
//определяем условия отбора
$sqlwhere=bbrubrika_get_sql_where($info_razdel, $group_id, $group_old_id);
$retarray=array();
$sqlwhere="";
if ((int)$group_id!=0)
$sqlwhere=$sqlwhere." and id_record='".(int)$group_id."'";
if ($group_old_id!="")
$sqlwhere=$sqlwhere." and prog_index like '".$group_old_id."'";
if ($sqlwhere!="")
$sqlwhere=" where ".substr($sqlwhere,5);
$result=db_query($sqllink, 'select id_record, prog_index, namerazdel from bb_msg_razdel '.$sqlwhere);
//проверяем чтобы нам что нибудь вернулось в результате запроса
if (mysql_num_rows($result)>0)
while( ($row=mysql_fetch_array($result)) )
$retarray[]=$row;
return $retarray;
}
function GroupList_Get($sqllink, $info_razdel, $group_id, $group_old_id)
{
$listarray=GroupList_GetAll($sqllink, $info_razdel, $group_id, $group_old_id);
if (count($listarray)>0)
return $listarray[0];
return array();
}
*/
}
//bbrubrika_add - добавляем в БД еще одну рубрику...
function bbrubrika_add($dblink,$info_razdel,$thisvalues)
{
if ((int)$info_razdel==0)
die("bbrubrika_add:info_razdel=0");
$sql="insert into bb_msg_razdel (bb_number, prog_index, NameRazdel) values('".(int)$info_razdel."','".addslashes($thisvalues["rubrika_id_old"])."','".addslashes($thisvalues["rubrika_name"])."')";
db_query($dblink, $sql);
return mysql_insert_id($dblink);
}
//bbrubrika_update - корректируем название рубрики (если это нужно, конечно)
//oldvalue - старое значение
//newvalue - новое значение, которое и должно быть в БД
function bbrubrika_update($dblink, $info_razdel, $oldvalue, $newvalue)
{
//ДОДЕЛАТЬ! добавить обработку info_razdel!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//проверка - равны ли строки или нет
if (strcmp($oldvalue["rubrika_name"],$newvalue["rubrika_name"])==0 )
return;
//проверка не пройдена, строки различаются
$sql='update bb_msg_razdel set NameRazdel=\''.addslashes($newvalue["rubrika_name"]).'\' where id_record='.(int)$newvalue["rubrika_id"];
db_query($dblink, $sql);
}
//bbrubrika_remove - удаляем рубрику из БД
//(пока есть старая база - причина такая - она была удалена из старой БД)
function bbrubrika_remove($sqllink, $info_razdel, $group_id)
{
//сначала проверяем на наличие чего нибудь в рубрике
//проверяем по двум параметрам - номер раздела (razdel_id) и
// номер рубрики (раздела общения)
$countmsg=(int)bbmsg_head_list_count($sqllink, $info_razdel, $group_id);
//здесь в будущем должен быть более сложный программный код для
//определения наличия записей в этой группе и если сообщения есть
//то блокировать удаление и просто ставить признак "закрытия" группы общения
if ($countmsg==0) //пока просто - если нет сообщений, то удаляем иначе пропуск
{
$sql='delete from bb_msg_razdel where id_record='.(int)$group_id;
db_query($sqllink, $sql);
return 0;
}
return -1; //возвращаем что не удалось удалить
}
//bbrubrika_get извлекаем название рубрики(темы общения)
// (по идентификатору рубрики)
//передаваемые параметры:
// info_razdel - номер конференции /2006-... год :5 - круглый стол/
// info_rubrika
function bbrubrika_get($dblink, $info_razdel, $info_rubrika_old)
{
//считываем из файла название рубрики
$oldlist_array=bbrubrika_get_old($info_razdel, $info_rubrika_old);
if (count($oldlist_array)==0)
$foundgroup_old=0;
else
$foundgroup_old=1;
//теперь надо свериться с SQL базой данных
$listarray=bbrubrika_get_sql($dblink, $info_razdel, 0, $info_rubrika_old); //извлекаем из БД только эту группу
if (count($listarray)==0) //не нашли записей
$foundgroup_new=0;
else
{
$foundgroup_new=1;
$oldlist_array["rubrika_id"]=$listarray["rubrika_id"];
}
//теперь надо понять что нужно делать!
if ($foundgroup_old==0) //такую группу не нашли в БД(старой)
{
if ($foundgroup_new==1) //но она есть в SQL. тогда удаляем группу из SQL...
if (bbrubrika_remove($dblink, $info_razdel, $listarray["rubrika_id"])==-1)
return $listarray; //удалить не удалось, проскакиваем дальше...
//а если ее и не было в SQL, то не расстраиваемся по данному поводу
return array(); //и возвращаем пустой массив
}
else
{
if ($foundgroup_new==0) //но ее нет в SQL...значит надо добавить
{
$newid=bbrubrika_add($dblink,$info_razdel,$oldlist_array);
$oldlist_array["rubrika_id"]=$newid;
}
else //она есть в SQL, значит надо дать команду обновления
bbrubrika_update($dblink,$info_razdel,$listarray,$oldlist_array);
$returnarray=$oldlist_array; //присвоение, т.к. стопудово информация есть в старых файлах БД
}
return $returnarray;
}
//***************************************************************************
//Заголовок******************************************************************
//***************************************************************************
//bbmsg_head_list_sqlfilter - формируем SQL запрос на выборку заголовков сообщений
function bbmsg_head_list_sqlfilter($info_razdel, $theme_id)
{
$sqlfilter='';
//сначала проверка условия на неправильные значения
if ((int)$info_razdel==0)
die('error:bbmsg_head_list_sqlfilter = info_razdel=0');
else
$sqlfilter=$sqlfilter.' and bb_msg_head.razdel_id='.(int)$info_razdel;
if ((int)$theme_id==0)
die('error:bbmsg_head_list_sqlfilter = theme_id=0');
else if ((int)$theme_id==-1)
;
else
$sqlfilter=$sqlfilter.' and bb_msg_head.theme_id='.(int)$theme_id;
//дообработка
if (strlen($sqlfilter)>0)
$sqlfilter=substr($sqlfilter,5);
//а теперь возвращаем сформированный запрос с условием выборки
return $sqlfilter;
}
//bbmsg_head_list_get - делаем выборку из SQL-а всех сообщений в группе
//передаются параметры:
//$info_razdel - номер BulletinBoard
//$info_rubrika - номер рубрики
function bbmsg_head_list_get($dblink, $info_razdel, $info_rubrika, $pagenumber=0)
{
global $CONFIG;
$retarray=array(); //инициализация переменной
$limittext='';
$sqlwhere='where '.bbmsg_head_list_sqlfilter($info_razdel, $info_rubrika);
if ($pagenumber>0) //Обрабатываем номер страницы
if (isset($CONFIG['bb_msg_per_page']))
{
$limittext=' LIMIT '.((int)($pagenumber-1)*(int)$CONFIG['bb_msg_per_page']).','.((int)$CONFIG['bb_msg_per_page']);
}
$sql='select id_record, razdel_id, theme_id, id_newsprog, msg_subject, date_create, date_change, date_lastview, counter_view, post_number from bb_msg_head '.$sqlwhere.' order by date_change desc, id_record '.$limittext;
$result=db_query($dblink,$sql); //выполняем запрос и начинаем "парсить"
while(($row=mysql_fetch_object($result)))
{
$thisline["record_id"]=$row->id_record;
$thisline["record_id_old"]=$row->id_newsprog;
$thisline["razdel_id"]=$row->razdel_id;
$thisline["theme_id"]=$row->theme_id;
$thisline["msg_subject"]=$row->msg_subject;
$thisline["counter_view"]=(int)$row->counter_view;
$thisline["post_number"]=(int)$row->post_number;
$thisline["date_create_raw"]=strtotime($row->date_create);
if ($thisline["date_create_raw"]===-1) //не удалось преобразовать в time-stamp :(
$thisline["date_create"]=""; //тогда ничего и не возвращаем
else
$thisline["date_create"] = date("j.m.Y",$thisline["date_create_raw"]); //должны же вернуть дату создания...
$thisline["date_change_raw"]=strtotime($row->date_change);
if ($thisline["date_change_raw"]===-1) //не удалось преобразовать в time-stamp :(
$thisline["date_change"]=""; //тогда ничего и не возвращаем
else
$thisline["date_change"] = date("j.m.Y",$thisline["date_change_raw"]); //должны же вернуть дату создания...
$thisline["date_lastview_raw"]=strtotime($row->date_lastview);
if ($thisline["date_lastview_raw"]===-1) //не удалось преобразовать в time-stamp :(
$thisline["date_lastview"]=""; //тогда ничего и не возвращаем
else
$thisline["date_lastview"] = date("j.m.Y",$thisline["date_lastview_raw"]); //должны же вернуть дату создания...
$retarray[]=$thisline;
}
return $retarray;
}
//bbmsg_head_list_count - считаем сколько у нас всего сообщений в рубрике
function bbmsg_head_list_count($dblink, $info_razdel, $theme_id)
{
$sqlwhere='where '.bbmsg_head_list_sqlfilter($info_razdel, $theme_id);
$sql='select count(*) as count_rec from bb_msg_head '.$sqlwhere;
$result=db_query($dblink, $sql);
if (mysql_num_rows($result)>0)
{
$row=mysql_fetch_object($result);
return (int)$row->count_rec;
}
return 0;
}
//bbmsg_head_add - добавляем в базу заголовок
//передаем указатель на соединение с БД
//и массив в котором указаны следующие поля:
//$headarray["razdel_id"] - Номер BulletinBoard
//$headarray["theme_id"] - номер раздела общения
//$headarray["id_newsprog"] - номер сообщения по старой проге
//$headarray["msg_subject"] - SUBJECT сообщения
//$headarray["post_number"] - количество постов в теме
function bbmsg_head_add($dblink, $headarray, $flag_increasecounter=1)
{
//проверяем переданные значения
if ((int)$headarray["razdel_id"]==0)
die ('bbmsg_head_add:razdel неправильно указан');
if ((int)$headarray["theme_id"]==0)
die ('bbmsg_head_add:theme неправильно указан');
if ((int)$headarray["id_newsprog"]==0)
die ('bbmsg_head_add:id_newsprog неправильно указан');
if ($headarray["msg_subject"]=="")
die ('bbmsg_head_add:msg_subject неправильно указан');
//Если не указано время изменения, то ставим текущее время
if ((int)$headarray["date_change_raw"]==0)
$date_change_text="NOW()";
else //иначе указываем что ...
$date_change_text="'".date("Y-m-j",$headarray["date_change_raw"])."'";
//Смотрим - нужно ли учитывать статистику
if ((int)$flag_increasecounter<>0)
{
$statistic1='date_lastview, counter_view,';
$statistic2='NOW(), 1, ';
}
else
{
$statistic1='';
$statistic2='';
}
//а теперь добавляем
$sql='insert into bb_msg_head (razdel_id, theme_id, id_newsprog, msg_subject, date_create, date_change, '.$statistic1.
'post_number) '.
'values ("'.(int)$headarray["razdel_id"].'","'.(int)$headarray['theme_id'].'" ,"'.(int)$headarray["id_newsprog"].'" , "'.addslashes($headarray["msg_subject"]).'", NOW(), '.$date_change_text.', '.$statistic2.
(int)$headarray["post_number"].')';
db_query($dblink,$sql);
//функция возвращает идентификатор добавленной записи
return mysql_insert_id($dblink);
}
//bbmsg_head_update - обновление информации о заголовке
function bbmsg_head_update($dblink, $headarray_set, $headarray_old, $needupdatestat)
{
if ((int)$headarray_old["recid"]==0)
die('bbmsg_head_update:recid is null');
$sqltextupdate='';
if ($needupdatestat==1)
$sqltextupdate.=', counter_view=counter_view+1, date_lastview=NOW()';
//теперь производим проверку на необходимость обновления полей
if ($headarray_set["razdel_id"]!=$headarray_old["razdel_id"])
$sqltextupdate.=', razdel_id='.$headarray_set["razdel_id"];
//пока для совместимости оставляем первую часть проверки
if ($headarray_set["theme_id"]!="" && $headarray_set["theme_id"]!=$headarray_old["theme_id"])
$sqltextupdate.=', theme_id='.$headarray_set["theme_id"];
if ($headarray_set["msg_subject"]!=$headarray_old["msg_subject"])
$sqltextupdate.=', msg_subject="'.addslashes($headarray_set["msg_subject"]).'"';
if ($headarray_set["date_change_raw"]!=$headarray_old["date_change_raw"])
$sqltextupdate.=', date_change="'.date("Y-m-j",$headarray_set["date_change_raw"]).'"';
if ((int)$headarray_set["post_number"]!=(int)$headarray_old["post_number"])
$sqltextupdate.=', post_number='.(int)$headarray_set["post_number"];
if (strlen($sqltextupdate)>0) //если у нас есть что исправлять, то...
{ //надо внести изменения в БД
$sql='update bb_msg_head set '.substr($sqltextupdate,2).' where id_record='.$headarray_old["recid"];
db_query($dblink,$sql);
}
}
//bbmsg_head_seek - Ищем в базе заголовок
//делаем выборку: ищем по:
//номеру BulletinBoard ($info_razdel)
//идентификатору старой программы($info_msgid)
function bbmsg_head_seek($dblink, $info_razdel, $info_msgid)
{
$retarray=array();
$result=db_query($dblink, 'select id_record, razdel_id, theme_id, msg_subject, date_create, date_change, counter_view, post_number from bb_msg_head where razdel_id='.$info_razdel.' and id_newsprog='.$info_msgid);
//смотрим сколько записей вернулось в результате запроса
switch (mysql_num_rows($result))
{
case 0: //ни одной записи не найдено,
break;
case 1: //найдена одна запись
$row=mysql_fetch_object($result);
//заполняем массив для возврата обратно
$retarray["recid"]=$row->id_record;
$retarray["razdel_id"]=$row->razdel_id;
$retarray["theme_id"]=$row->theme_id;
$retarray["msg_subject"]=$row->msg_subject;
//Выполняем преобразование дат
$retarray["date_create_raw"]=strtotime($row->date_create);
$retarray["date_create"]=date("j.m.Y",$retarray["date_create_raw"]);
$retarray["date_change_raw"]=strtotime($row->date_change);
$retarray["date_change"]=date("j.m.Y",$retarray["date_change_raw"]);
$retarray["counter_view"]=$row->counter_view;
$retarray["post_number"]=(int)$row->post_number;
break;
default: //если вернулось непонятно сколько записей, то вываливаемся с ошибкой
{
$row=mysql_fetch_object($result);
if ($row->id_record!=0)
bbmsg_delete($dblink, $row->id_record);
die('При открытии произошла ошибка. попробуйте повторить операцию. bbmsg_head_seek:error in db(razdel='.$info_razdel.',oldmsgid='.$info_msgid.') found '.(int)mysql_num_rows($result).' headers');
}
}
return $retarray;
}
//****************************************************************************
//Содержимое*****************************************************************
//***************************************************************************
//bbmsg_body_get - извлекаем из БД сообщение как есть
//в функцию передается идентификатор заголовка
//возвращаем массив
function bbmsg_body_get($dblink, $msg_head_id)
{
$retarray=array();
if ((int)$msg_head_id==0)
die('bbmsg_body_get:error не указан msg_head_id');
$result=db_query($dblink, 'select record_id, owner_id, number_in_seq, date_rec, text_msg from bb_msg_body where owner_id='.$msg_head_id.' order by number_in_seq, record_id');
while(($row=mysql_fetch_object($result)))
{
$thisline["recid"]=$row->record_id;
$thisline["owner_id"]=$row->owner_id;
$thisline["number_in_seq"]=$row->number_in_seq;
$thisline["date_rec_raw"]=strtotime($row->date_rec);
if ($thisline["date_rec_raw"]===-1) //не удалось преобразовать в time-stamp :(
$thisline["date_rec"]=""; //тогда ничего и не возвращаем
else
$thisline["date_rec"] = date("j.m.Y",$thisline["date_rec_raw"]); //должны же вернуть дату создания...
$thisline["text_msg"]=$row->text_msg;
$retarray[]=$thisline;
}
return $retarray;
}
//bbmsg_body_addpost - добавляем в БД новый пост...
function bbmsg_body_addpost($dblink, $post)
{
$thisownerid=(int)$post["owner_id"];
$thisseq=(int)$post["number_in_seq"];
if ($thisownerid==0)
die('Error:bbmsg_body_addpost ownerid=0');
if ($thisseq==0)
die('Error:bbmsg_body_addpost numberseq=0');
$sql="insert into bb_msg_body (owner_id, number_in_seq, date_rec, text_msg) ".
"values ('".$thisownerid."','".$thisseq."','".$post["date_rec"]."','".addslashes($post["text_msg"])."')";
db_query($dblink, $sql);
}
//bbmsg_body_removepost: удаляем "посты" из базы данных по идентификатору
//значения в $frompost и $topost указываются "включительно"
function bbmsg_body_removepost($dblink,$ownerid, $frompost)
{
//принудительное приведение переменных
$ownerid=(int)$ownerid;
$frompost=(int)$frompost;
//проверка введенных значений
if ($ownerid==0)
die('Error bbmsg_body_removepost:ownerid=0');
if ($frompost==0)
die('Error bbmsg_body_removepost:frompost=0');
//а теперь запросики пошли...
db_query($dblink, 'delete from bb_msg_body where owner_id='.$ownerid.' and number_in_seq>='.$frompost);
}
//синхронизируем сообщение с SQL-ной базой данных
//в $msgbody - то что требуется чтобы было
function bbmsg_body_sync_to_sql($dblink, $msg_head_id, $msgbody)
{
$totcountold=count($msgbody);
if ((int)$msg_head_id==0)
die('bbmsg_body_sync_to_sql:error не указан msg_head_id.сообщение'.$msgbody);
//для этого должны сначала все выбрать из БД и далее уже сравниваться...
$msgbody_sql=bbmsg_body_get($dblink, $msg_head_id);
$totcount=count($msgbody_sql);
for ($i=0;$i<$totcount;$i++)
{
if ((int)$msgbody_sql[$i]["recid"]==0) //на всякий случай проверка на "гнилые значения"
die('bbmsg_body_sync_to_sql:recid=0');
if ($totcountold<$i) //у нас в исходной базе сообщения закончились...
{ //значит из SQL базы вырезаем "лишние" сообщения начиная с текущего
bbmsg_body_removepost($dblink, $msg_head_id, $i);
$totcount=$totcountold;
}
else
{
$textsqlupdate="";
if ($msgbody_sql[$i]["number_in_seq"]!=$msgbody[$i]["number_in_seq"])
$textsqlupdate=", number_in_seq=".(int)$msgbody[$i]["number_in_seq"];
if ($msgbody_sql[$i]["date_rec_raw"]!=$msgbody[$i]["date_post_raw"])
$textsqlupdate=", date_rec='".date("Y-m-j",$msgbody[$i]["date_post_raw"])."'";
if ($msgbody_sql[$i]["text_msg"]!=$msgbody[$i]["post"])
$textsqlupdate=", text_msg='".addslashes($msgbody[$i]["post"])."'";
if (strlen($textsqlupdate)>0)
{
//выполняем запрос для модификации базы данных
db_query($dblink,"update bb_msg_body set ".substr($textsqlupdate,2)." where record_id=".(int)$msgbody_sql[$i]["recid"]);
}
}
}
//теперь если у нас есть еще что-то "лишнее" в старой базе, чего нет в новой,
//то надо это "лишнее" добавить туда... (продолжим по счетчику $i)
for (;$i<$totcountold;$i++)
{
$thispost["owner_id"]=$msg_head_id;
$thispost["number_in_seq"]=$i+1;
$thispost["text_msg"]=$msgbody[$i]["post"];
bbmsg_body_addpost($dblink,$thispost);
}
}
//****************************************************************************
//блок функций относящихся к сообщениям
//****************************************************************************
//Извлекаем сообщение из БД
//это третья версия процедуры:
//1. "парсит" файл
//2. отрабатывает заголовок сообщения и синхронизирует его с БД
//3. синхронизирует тело сообщения с БД
//параметры
//$dblink - указатель на соединение
//$info_razdel - какая конференция используется
//$info_group - тема общения
//$info_msgid - старый идентификатор сообщения
//$type_order_post - как отсортировать посты внутри сообщения
function getMsg_info_sql($dblink, $info_razdel, $info_group, $info_msgid, $type_order_post, $pagenumber, $flag_increasecounter = 1)
{
global $CONFIG;
//проверка для жесткого приведения значения переменной $flag_increasecounter
if ((int)$flag_increasecounter==0)
$flag_increasecounter=0;
else
$flag_increasecounter=1;
//info_msgid - это старый идентификатор
//извлекаем название и "настоящий" идентификатор темы (по старому идентификатору темы)
$info_group_array=bbrubrika_get($dblink, $info_razdel, $info_group);
if (count($info_group_array)>0)
$theme_id=$info_group_array["rubrika_id"];
else
$theme_id=0;
//определились
$retarray=array();
//***************************************************************************
//сначала "по старому" извлекаем информацию из БД
$txtarray=old_getMSG_array(0,$info_msgid,$info_razdel); //извлекаем текст сообщения
//теперь все "загоняем" в новый формат массива для возврата пользователю
$isdate_raw=parse_text_date($txtarray[1]);
if ($isdate_raw!==-1) //это у нас дата. ее не должно быть в основном сообщении
{
$retarray["date_refresh_raw"]=$isdate_raw;
$retarray["date_refresh"]=date ("d.m.Y",$retarray["date_refresh_raw"]);;
}
$retarray["found_flag"]=(int)$txtarray[4];
$retarray["msg_subject"]=$txtarray[2];
$retarray["msg_body_raw"]=old_msgprepare($txtarray[3]);
//теперь надо все "разбить" на отдельные сообщения.
// для этого построчно сканируем массив
$msg_array=explode("\n",$retarray["msg_body_raw"]);
$totallines=count($msg_array);
$msg_by_post=array();
for ($i=0,$j=0;$i<$totallines;$i++)
{
//первая часть проверки правильная. вторая - костыль
if (strlen($msg_array[$i])==0 || $msg_array[$i][0]=="\r")
{
//но если в массиве ничегошеньки нет, то не переходим на след.строку
if (count($msg_by_post[$j])>0)
$j++;
}
else
{
if ($msg_array[$i]=="_\r") //если символ _ на строке то нужно "обнулить" строку
$msg_array[$i]="\r";
$msg_by_post[$j][] = $msg_array[$i];
}
}
$retarray["msg_post_count"]=$j;//сразу запоминаем сколько у нас постов
$totalposts=$j;
//теперь в двумерном массиве имеем всю информацию.
//окончательная обработочка...
//пробуем выделить из сообщения - дату сообщения... это последняя строка
//но если дата не указана, то берем предыдущую дату. а совсем предыдущая дата
//это date_refresh
$lastdate_raw=$retarray["date_refresh_raw"];
for ($i=0;$i<$totalposts;$i++)
{
$countline=count($msg_by_post[$i]);
$isdate_raw=-1; //сбрасываем флаг
if ($countline>1) //у нас это не единственная строка...
{
$lastline=$msg_by_post[$i][$countline-1];
$isdate_raw=parse_text_date($lastline);
if ($isdate_raw!==-1) //это у нас дата. ее не должно быть в основном сообщении
unset($msg_by_post[$i][$countline-1]);
}
//теперь надо объединить все в единый такой массивчик
if ($isdate_raw!==-1) //если сумели выделить дату, то должны ее теперь запомнить в нужных нам форматах...
{
$msg_loaded[$i]["date_post_raw"]=$isdate_raw;
$lastdate_raw=$isdate_raw;
}
else
$msg_loaded[$i]["date_post_raw"]=$lastdate_raw;
$msg_loaded[$i]["date_post"]=date ("d.m.Y",$msg_loaded[$i]["date_post_raw"]);
$msg_loaded[$i]["post"]=implode("\n",$msg_by_post[$i]);
$msg_loaded[$i]["numberpost"]=$i+1;
}
$retarray["msg_body_by_post"]=$msg_loaded;
//**************************************************************************
//анализируем заголовок
//для начала сразу делаем присвоение...
$headarray["razdel_id"] = $info_razdel; //передаем в функцию
$headarray["theme_id"] = $theme_id; //это мы в начале определились - с идентификатором темы общения
$headarray["id_newsprog"] = $info_msgid; //передаем в функцию
$headarray["msg_subject"] = $retarray["msg_subject"]; //извлекаем из старой базы
$headarray["post_number"] = $retarray["msg_post_count"]; //запоминаем количество "постов"
$headarray["date_change_raw"] = parse_text_date($retarray["date_refresh"]); //дата изменения сообщения
$headarray["date_change"] = date("j.m.Y",$headarray["date_change_raw"]);
//ищем в базе
$msg_head=bbmsg_head_seek($dblink, $info_razdel, $info_msgid); //ищем его в SQL
//анализируем возвращенное значение
switch(count($msg_head))
{
case 0: //в SQL базе заголовок не найден...
if ($retarray["found_flag"]!=0)
{ //надо его туда добавить из старой базы
$headarray["datecreate_raw"]=time();
$headarray["datecreate"] = date("j.m.Y",$headarray["datecreate_raw"]); //должны же вернуть дату создания...
$headarray["recid"]=bbmsg_head_add($dblink, $headarray, $flag_increasecounter); //запускаем процедуру добавления
$headarray["counter_view"]=1; //ставим счетчик что есть один просмотр!
}
else
{ //и в старой базе нет. на всякий случай освободим переменную
unset($msg_head);
unset($headarray);
//доделать - нужна ли строка???
return array();
}
break;
default: //нашли заголовок
//надо посмотреть - что у нас есть в старой базе
if ($retarray["found_flag"]!=0) //сообщение есть и в старой базе
{
//делаем присвоения
$headarray["datecreate"] = $msg_head["date_create"]; //эта информация только в SQL есть
$headarray["datecreate_raw"]=$msg_head["date_create_raw"];//эта информация только в SQL есть
$headarray["counter_view"] = $msg_head["counter_view"]; //эта информация только в SQL есть
$headarray["recid"]=$msg_head["recid"]; //эта информация только в SQL есть
//передаем в функцию - новые значения, старое значение и признак чтобы обновить статистику
bbmsg_head_update($dblink,$headarray,$msg_head,$flag_increasecounter);
}
else
{//в старой базе сообщение уже отстутствует. надо будет теперь тогда и из SQL удалять
bbmsg_delete($dblink, $msg_head["recid"]);
unset($msg_head);
unset($headarray);
//доделать - нужна ли строка???
return array();
}
break;
}
$retarray["header"]=$headarray; //запоминаем в переменной информацию о заголовке
//Теперь мы все загрузили и проанализировали из файла.
//теперь работаем с SQL*****************************************************
//надо синхронизировать загруженное сообщение с БД....
if ($retarray["header"]["recid"]==0)
{
die('getMsg_info_sql:идентификатор сообщения=0.'.$info_razdel.'/'.$info_group.'/'.$info_msgid);
}
bbmsg_body_sync_to_sql($dblink, $retarray["header"]["recid"], $retarray["msg_body_by_post"]);
//теперь окончательные дообработки
if ((int)$type_order_post==1)
$retarray["msg_body_by_post"]=array_reverse($retarray["msg_body_by_post"],TRUE);
//теперь надо отобрать сообщения для №ой страницы
//$pagenumber, $CONFIG['bb_post_per_page']
//сначала номер страницы проверим на соответствие минимальным требованиям:
if ($pagenumber<=0)
$pagenumber=1;
//теперь подсчитаем сколько у нас вообще страниц получается
$totpages=util_calulate_count_page(count($retarray["msg_body_by_post"]), $CONFIG['bb_post_per_page']);
//теперь проверим чтобы номер нужной страницы был меньше чем вообще количество страниц
if ($totpages>$pagenumber)
$totpages=$pagenumber;
//теперь надо извлечь страницу...
$retarray["msg_body_by_post"]=array_slice($retarray["msg_body_by_post"],(($pagenumber-1)*$CONFIG['bb_post_per_page']), $CONFIG['bb_post_per_page']);
return $retarray;
}
//bbmsg_list_seek_id - ищем нужную запись в массиве
function bbmsg_list_seek_id($seekin_array,$idrec, $indexname)
{
$countrec=count($seekin_array);
for ( $i=0 ; $i<$countrec ; $i++ )
{
if ($seekin_array[$i][$indexname]==$idrec)
return $i;
}
return -1;
}
//bbmsg_list - извлекаем из базы список сообщений
//$info_rubrika_old - старый идентификатор рубрики
//$info_rubrika_id - новый идентификатор рубрики
function bbmsg_list($dblink, $info_razdel, $info_rubrika_old, $info_rubrika_id, $pagenumber=0)
{
global $CONFIG;
$temparray=array();
$temparray2=array();
//Сначала получаем из старой базы полный список сообщений
switch((int)$info_razdel)
{
case 3:
$workmode=2; //пока жесткое присвоение
break;
case 5:
$workmode=1; //пока жесткое присвоение
break;
default:
die('bbmsg_list:unsupported mode');
}
if ((int)$info_rubrika_old==0)
die('bbmsg_list:info_rubrika_old неправильная переменная');
if ((int)$info_rubrika_id==0)
die('bbmsg_list:info_rubrika_id неправильная переменная');
$msglist=old_getListMSG($workmode, $info_rubrika_old);
$temparray["total_msg"]=count($msglist);
//теперь надо список построчно дообработать.
while( ($currline=array_shift($msglist) ) )
{
$thisline["msgid"]=0; //идентификатор в SQL-е сообщения
$thisline["msgoldid"]=$currline[0]; //старый идентификатор (из старой программы) сообщения
//пока не хотят такого строки кода... отключаем...
// $thisline["msgsubject"]=bb_msg_old_rezhem_otvet($currline[2]);//заголовок сообщения
$thisline["msgsubject"]=$currline[2];//заголовок сообщения
$thisline["msgcreate"]=""; //дата создания сообщения. из старого варианта ее не достать - ее там просто нет.
$thisline["date_change_raw"]=parse_text_date($currline[1]); //определяем дату обновления
$thisline["date_change"]=date ("d.m.Y",$thisline["date_change_raw"]);
$thisline["post_number"]=-1;
$temparray2[]=$thisline;
}
$temparray["msglist"]=$temparray2;
//теперь надо из SQL-а извлечь список сообщений в рубрике
$temparray_sql=bbmsg_head_list_get($dblink, $info_razdel, $info_rubrika_id);
$temparray_sql_count=count($temparray_sql);
//...и произвести сравение списков...
//сначала ищем новые и измененные в файл сервере сообщения
for ($i=0;$i<$temparray["total_msg"];$i++)
{
$number_post=-1;
$seeking_index=(int)$temparray["msglist"][$i]["msgoldid"]; //определяем какой же индекс ищем
$foundedindex=bbmsg_list_seek_id($temparray_sql, $seeking_index , "record_id_old"); //...и ищем его в базе
if ($foundedindex==-1) //запись не найдена в БД SQL, значит надо туда добавиться будет
{//просто запустим синхронизацию - и все будет здорово. правда не особо быстро, но произойдет полная синхронизация записи
$retarray=getMsg_info_sql($dblink, $info_razdel, $info_rubrika_old, $seeking_index,0,1,0); //запустим функцию извлечения сообщения из БД. и полностью синхронизируемся :) правда это будет долго, но надо по-любому
$sqlrecid=$retarray["header"]["recid"]; //надо после добавления заголовка сделать присвоение...
$number_post=$retarray["header"]["post_number"];
if ((int)$sqlrecid==0)
{
$temparray["msglist"][$i]["msgsubject"]="!error!".$temparray["msglist"][$i]["msgsubject"];
cycle;
//die('bbmsg_list:после синхронизации(добавления)'.$seeking_index.'/'.$temparray["msglist"][$i]["msgsubject"].' возвращенный идентификатор = 0');
}
}
else //нашлась запись. надо свериться...
{
$sqlrecid=$temparray_sql[$foundedindex]["record_id"];
$number_post=$temparray_sql[$foundedindex]["post_number"];
//проверяем - изменилось ли чего нибудь или нет...
$changeflag=0;
if (strcmp($temparray["msglist"][$i]["msgsubject"],$temparray_sql[$foundedindex]["msg_subject"])!=0)
$changeflag=1;
if ($temparray["msglist"][$i]["date_change_raw"]!=$temparray_sql[$foundedindex]["date_change_raw"])
$changeflag=1;
if ($changeflag==1) //изменились поля. скорее всего изменилось и содержимое. нужно обновиться...
{
$retarray=getMsg_info_sql($dblink, $info_razdel, $info_rubrika_old, $seeking_index,0,1,0); //запустим функцию извлечения сообщения из БД. и полностью синхронизируемся :) правда это будет долго, но надо по-любому
if (count($retarray)==0)
die('bbmsg_list:после синхронизации возвращенный результат = 0');
$number_post=$retarray["header"]["post_number"];
}
}
$temparray["msglist"][$i]["msgid"]=$sqlrecid; //делаем присвоение. это надо!
$temparray["msglist"][$i]["post_number"]=$number_post; //делаем присвоение. это надо!
// echo $number_post."//";
}
//а теперь ищем удаленные из файл-сервера сообщения
for ($i=0;$i<$temparray_sql_count;$i++)
{
$seeking_index=(int)$temparray_sql[$i]["record_id_old"];
$foundedindex=bbmsg_list_seek_id($temparray["msglist"], $seeking_index , "msgoldid");
if ($foundedindex==-1) //запись не найдена в БД, значит надо ее удалить...
{
//удаляем сообщение по его идентификатору в SQL базе
bbmsg_delete($dblink,(int)$temparray_sql[$i]["record_id"]);
}
}
//Теперь осуществляем разбиение на страницы
//сначала номер страницы проверим на соответствие минимальным требованиям:
if ($pagenumber<=0)
$pagenumber=1;
//теперь подсчитаем сколько у нас вообще страниц получается
$totpages=util_calulate_count_page($temparray["total_msg"], $CONFIG['bb_msg_per_page']);
//теперь проверим чтобы номер нужной страницы был меньше чем вообще количество страниц
if ($totpages>$pagenumber)
$totpages=$pagenumber;
//теперь надо извлечь страницу...
$temparray["msglist"]=array_slice($temparray["msglist"],(($pagenumber-1)*$CONFIG['bb_msg_per_page']), $CONFIG['bb_msg_per_page']);
//все. обработка произведена. можно выходить...
return $temparray;
/*Старый кусок кода
$temparray=array();
$temparray2=array();
//Сначала получаем из старой базы полный список сообщений
if ((int)$info_razdel!=5)
die('bbrubrika_get:unsupported mode');
if ((int)$info_rubrika_old==0)
die('bbrubrika_get:info_rubrika_old неправильная переменная');
if ((int)$info_rubrika_id==0)
die('bbrubrika_get:info_rubrika_id неправильная переменная');
$workmode=1; //пока жесткое присвоение
$msglist=old_getListMSG($workmode, $info_rubrika_old);
$temparray["total_msg"]=count($msglist);
//теперь надо список построчно дообработать.
while( ($currline=array_shift($msglist) ) )
{
$thisline["msgid"]=0; //идентификатор в SQL-е сообщения
$thisline["msgoldid"]=$currline[0]; //старый идентификатор (из старой программы) сообщения
//пока не хотят такого строки кода... отключаем...
// $thisline["msgsubject"]=bb_msg_old_rezhem_otvet($currline[2]);//заголовок сообщения
$thisline["msgsubject"]=$currline[2];//заголовок сообщения
$thisline["msgcreate"]=""; //дата создания сообщения. из старого варианта ее не достать - ее там просто нет.
$thisline["date_change_raw"]=parse_text_date($currline[1]); //определяем дату обновления
$thisline["date_change"]=date ("d.m.Y",$thisline["date_change_raw"]);
$thisline["post_number"]=-1;
$temparray2[]=$thisline;
}
$temparray["msglist"]=$temparray2;
//теперь надо из SQL-а извлечь список сообщений в рубрике
$temparray_sql=bbmsg_head_list_get($dblink, $info_razdel, $info_rubrika_id);
$temparray_sql_count=count($temparray_sql);
//...и произвести сравение списков...
//сначала ищем новые и измененные в файл сервере сообщения
for ($i=0;$i<$temparray["total_msg"];$i++)
{
$number_post=-1;
$seeking_index=(int)$temparray["msglist"][$i]["msgoldid"]; //определяем какой же индекс ищем
$foundedindex=bbmsg_list_seek_id($temparray_sql, $seeking_index , "record_id_old"); //...и ищем его в базе
if ($foundedindex==-1) //запись не найдена в БД SQL, значит надо туда добавиться будет
{//просто запустим синхронизацию - и все будет здорово. правда не особо быстро, но произойдет полная синхронизация записи
$retarray=getMsg_info_sql($dblink, $info_razdel, $info_rubrika_old, $seeking_index,0,1,0); //запустим функцию извлечения сообщения из БД. и полностью синхронизируемся :) правда это будет долго, но надо по-любому
$sqlrecid=$retarray["header"]["recid"]; //надо после добавления заголовка сделать присвоение...
$number_post=$retarray["header"]["post_number"];
if ((int)$sqlrecid==0)
die('bbmsg_list:после синхронизации(добавления) возвращенный идентификатор = 0');
}
else //нашлась запись. надо свериться...
{
$sqlrecid=$temparray_sql[$foundedindex]["record_id"];
//проверяем - изменилось ли чего нибудь или нет...
$changeflag=0;
if (strcmp($temparray["msglist"][$i]["msgsubject"],$temparray_sql[$foundedindex]["msg_subject"])!=0)
$changeflag=1;
if ($temparray["msglist"][$i]["date_change_raw"]!=$temparray_sql[$foundedindex]["date_change_raw"])
$changeflag=1;
if ($changeflag==1) //изменились поля. скорее всего изменилось и содержимое. нужно обновиться...
{
$retarray=getMsg_info_sql($dblink, $info_razdel, $info_rubrika_old, $seeking_index,0,1,0); //запустим функцию извлечения сообщения из БД. и полностью синхронизируемся :) правда это будет долго, но надо по-любому
if (count($retarray)==0)
die('bbmsg_list:после синхронизации возвращенный результат = 0');
$number_post=$retarray["header"]["post_number"];
}
else
$number_post=$temparray_sql[$foundedindex]["number_post"];
}
$temparray["msglist"][$i]["msgid"]=$sqlrecid; //делаем присвоение. это надо!
$temparray["msglist"][$i]["post_number"]=$number_post; //делаем присвоение. это надо!
}
//а теперь ищем удаленные из файл-сервера сообщения
for ($i=0;$i<$temparray_sql_count;$i++)
{
$seeking_index=(int)$temparray_sql[$i]["record_id_old"];
$foundedindex=bbmsg_list_seek_id($temparray["msglist"], $seeking_index , "msgoldid");
if ($foundedindex==-1) //запись не найдена в БД, значит надо ее удалить...
{
//удаляем сообщение по его идентификатору в SQL базе
bbmsg_delete($dblink,(int)$temparray_sql[$i]["record_id"]);
}
}
//все. обработка произведена. можно выходить...
return $temparray;
*/
}
?>