BBcode: [attachment] (phpFox 3)

В записи можно вставить вложение, можно прямо в текст. Вставленное вложение в текст имеет такой BBcode:
[attachment="xxxx:yyyy"][/attachment]

Я заметил, что при нажатии на кнопку "Удалить из текста" (BBcode), удаляется верный BBcode и все, что следовали за ним, то есть удалятся то что надо и, что не надо. Эту проблему я решил так:
Открываю: module/attachment/include/component/ajax/ajax.class.php, нахожу функцию inlineRemove и добавляю модификатор U к двум регулярным выражениям. Сейчас моя функция inlineRemove выглядит так:
	public function inlineRemove()
	{
		if (Phpfox::getService('attachment.process')->updateInline($this->get('id'), true))
		{
			$id = (int) $this->get('id');
			$text = $this->get('text');

			$text = preg_replace('/\[attachment="' . $id . ':(.*)"\](.*)\[\/attachment\]/isuU', '', $text);
			$text = preg_replace('/\[attachment="' . $id . '"\](.*)\[\/attachment\]/isuU', '', $text);
			$text = str_replace("'", "\\'", $text);
			$this->call('Editor.setContent(\'' . $text . '\');');	
		}		
	}

Чищу кэш. Готово.Теперь из текста удаляется только то, что было задумано пользователем, все остальное остается на своих местах.

Еще один недостаток: при полном удалении вложения, которое было вставлено в текст, его BBcode остается в тексте, что на мой взгляд неправильно. Немного переписал функцию delete, что находится в том же файле и сейчас она выглядит так:
	public function delete()
	{
		$id = (int) $this->get('id');
		$text = $this->get('text');

		if (($userId = Phpfox::getService('attachment')->hasAccess($id, 'delete_own_attachment', 'delete_user_attachment')) && is_numeric($userId) && Phpfox::getService('attachment.process')->delete($id))
		{
			$this->call("$('#js_attachment_id_" . $id . "').slideUp();");
            $this->call("$('.extra_info').show();");

			$text = preg_replace('/\[attachment="' . $id . ':(.*)"\](.*)\[\/attachment\]/isuU', '', $text);
			$text = preg_replace('/\[attachment="' . $id . '"\](.*)\[\/attachment\]/isuU', '', $text);
			$text = str_replace("'", "\\'", $text);
			$this->call('Editor.setContent(\'' . $text . '\');');	
		}
	}

Далее: открываю: module/attachment/template/default/block/list.html.php, нахожу:
<a href="#" onclick="if (confirm('{phrase var='core.are_you_sure' phpfox_squote=true}')) $.ajaxCall('attachment.delete', 'id={$aAttachment.attachment_id}'); return false;">{phrase var='attachment.delete'}</a>

И менаю на:
<a href="#" onclick="if (confirm('{phrase var='core.are_you_sure' phpfox_squote=true}')) $.ajaxCall('attachment.delete', 'id={$aAttachment.attachment_id}&amp;text=' + encodeURIComponent(Editor.getContent()) + ''); return false;">{phrase var='attachment.delete'}</a>

Теперь при полном удалении вложения, оно удаляется и из текста.

Тема о вложениях в записях: Вложенные файлы в записях (Модуль phpFox: Attachment).