ExBB Community » Файловый ExBB » Решение проблем » Проблема с переносом постов, содержащих вложения

Страниц (1): [1]
 

1. NordWest - 9 ноября 2013 — 18:25 - перейти к сообщению
Суть проблемы такова.
При переносе в другую тему поста, содержащего вложение, пост преносится с неизменным id вложения. Если в новом месте до этого не было вложений, то проблем не возникает. Если же вложения уже были - очень вероятно, что идентификаторы вложений совпадут. Это приведёт к недоступности перенесённого вложения.

Предварительное решение этой проблемы такое

Открываем файл postings.php в котором ищем строку

CODE:
$newattach_id++;


после которой вставляем

CODE:
$newtopic[$post_id]['attach_id'] = $newattach_id;


Решение предварительное потому, что не проводил тестирование на чистом форуме.
2. гость - 10 ноября 2013 — 05:21 - перейти к сообщению
Спасибо Превосходно



NordWest пишет:
Решение предварительное потому, что не проводил тестирование на чистом форуме.


Сейчас гоняю как раз на форуме с последней сборки, полет нормальный. Аттачи переносятся без потерь.
3. Zeg - 13 ноября 2013 — 15:47 - перейти к сообщению
А как вообще выглядел кусок кода до внесения изменений из первого поста. Просто у меня так, как приводится ниже. Мне кажется это уже решало проблему с аттачами:

CODE:
function UpdateAttaches(&$newtopic,&$attaches) {
...
$newattach_id++;
$new_attach[$newattach_id] = $old_attach[$attach_id];
$newtopic[$post_id]['attach_id'] = $newattach_id;
unset($old_attach[$attach_id]);
...
4. NordWest - 13 ноября 2013 — 16:04 - перейти к сообщению
Zeg
Забавно, если всё так как вы написали - у вас всё ОК, ничего делать не нужно.
Что за дистрибутив?
5. Zeg - 13 ноября 2013 — 21:06 - перейти к сообщению
Я не помню, где я взял исправленную функцию, но она такая:

CODE:
function UpdateAttaches(&$newtopic,&$attaches) {
global $fm, $forum_id, $topic_id, $toforum_id, $newtopic_id;

//echo '<b>['.$topic_id.'-'.$newtopic_id.']</b>';
$old_attach = $fm->_Read2Write($fp_old, 'forum'.$forum_id.'/attaches-'.$topic_id.'.php');
$new_attach = $fm->_Read2Write($fp_new, 'forum'.$toforum_id.'/attaches-'.$newtopic_id.'.php');
$newattach_id = (count($new_attach) == 0) ? 0:max(array_keys($new_attach));
foreach ($attaches as $post_id => $attach_id) {
if (!isset($old_attach[$attach_id]) || !file_exists('uploads/'.$old_attach[$attach_id]['id'])) {
if (file_exists('uploads/'.$old_attach[$attach_id]['id'])) {
unlink('uploads/'.$old_attach[$attach_id]['id']);
}
unset($newtopic[$post_id]['attach_id'],$newtopic[$post_id]['attach_file']);
} else {
$newattach_id++;
$new_attach[$newattach_id] = $old_attach[$attach_id];
$newtopic[$post_id]['attach_id'] = $newattach_id;
unset($old_attach[$attach_id]);
}
}
unset($attaches);
$fm->_Write($fp_old,$old_attach);
$fm->_Write($fp_new,$new_attach);

if (count($old_attach) === 0) {
unlink('forum'.$forum_id.'/attaches-'.$topic_id.'.php');
}
if (count($new_attach) === 0) {
unlink('forum'.$toforum_id.'/attaches-'.$newtopic_id.'.php');
}
return TRUE;
}
6. NordWest - 13 ноября 2013 — 21:12 - перейти к сообщению
Ну что - чудеса да и только. В последнем дистрибутиве код выглядит так

CODE:
foreach ($attaches as $post_id => $attach_id) {
if (!isset($old_attach[$attach_id]) || !file_exists('uploads/'.$old_attach[$attach_id]['id'])) {
if (file_exists('uploads/'.$old_attach[$attach_id]['id'])) {
unlink('uploads/'.$old_attach[$attach_id]['id']);
}
unset($newtopic[$post_id]['attach_id'],$newtopic[$post_id]['attach_file']);
} else {
$newattach_id++;
$new_attach[$newattach_id] = $old_attach[$attach_id];
$_attaches[$post_id] = $newattach_id;
unset($old_attach[$attach_id]);
}
}
7. Zeg - 13 ноября 2013 — 22:39 - перейти к сообщению
Значит, не все правки внесены в дистрибутив. Жесточайше срочно внести новую функцию переноса аттачей ! Радость
8. BON - 23 ноября 2013 — 07:32 - перейти к сообщению
так чья функция правильнее ?
9. NordWest - 23 ноября 2013 — 08:22 - перейти к сообщению
Они одинаковые. В моем варианте получается на одну строку больше.
CODE:
$_attaches[$post_id] = $newattach_id;

Эта строка была в финале и вроде ничему не мешала. Можете её не удалять а просто закоментировать.

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0199]     [ ]