Если в базе данных есть вложения, необходимо иметь способ кать их оттуда. Для этих целей предусмотрен метод getAttach извлекающий всю необходимую информацию из базы данных и печивающий пользователю возможность скачать вложение. Этот тод принимает единственный аргумент- числовой идентиф вложения - и возвращает объект еще одного вспомогательного AjaxMailAttachment, содержащий всю информацию о вложении:
class AjaxMailAttachment { var ScontentType; var Sfilename; var Ssize; var Sdata;
function AjaxMailAttachment(ScontentType, Sfilename, Ssize, Sdata) $this->contentType = ScontentType; $this->filename = Sfilename; $this->size = Ssize;: *
Сам метод getAttachment() достаточно прост:
class AjaxMailbox { // прочие методы
function getAttachment($attachmentId) { . , $conn = $this->connect();
Squery = "select * from AjaxMailAttachments where "; Squery .= " Attachmentld=$attachmentld"; Sresult = mysql_query($query, Sconn); $row = mysql_fetch_assoc($result);
$this->disconnect(Sconn);
return new AjaxMailAttachment(
$row["ContentType"3, $row["Filename"], $row["Size"], $row["Data*']
}
// прочие методы
}
Этот метод открывает соединение с базой данных с помощью метода connect() и выполняет запрос. Рапрос выбирает из таблицы AjaxMailAt¬tachments все записи, в которых значение поля Attachments совпадает со значением входного аргумента метода. После выполнения запроса соединение с базой данных закрывается и вызывающей программе возвращается объект класса AjaxMailAttachment, содержащий всю ин¬формацию о вложении.
Обслуживание папки Trash
Класс AjaxMailbox предусматривает четыре метода, которые занимают¬ся перемещением сообщений в/из папки Trash. Первый из них delete-Message(). На самом деле этот метод не удаляет сообщение, он просто записывает в поле Folderld базы данных значение 2, тем самым логически перемещая сообщение в папку Trash. Метод принимает единствен¬ный аргумент - числовой идентификатор сообщения:
class AjaxMailbox { // прочие методы
function deleteMessage(Smessageld) {
= $this->connect();
Squery = "update AjaxMailMessages set FolderId=2 where
Squery .= " Messageld=$messageld"; mysql_query($query,Sconn);
$this->disconnect(Sconn); // прочие методы
}
Этот метод просто соединяется с базой данных, выполняет запрос с помощью которого изменяет значение поля Folderld и закр единение. Аналогичным образом сообщение может быть восс но из папки Trash, если его туда поместят. Для этого достаточно сать в поле Folderld значение 1. Эти действия выполняет метод г MessageQ.
Метод restoreMessage() также принимает единственный аргумент еловой идентификатор сообщения - и следует тому же алгоритму:
class AjaxMailbox { // прочие методы
function restoreMessage(Smessageld) {
.о., Sconn = $this->connect(); • , .', •
Squery = "update AjaxMailMessages set FolderId=1 where ";
■ . ■ v:=i'$querv''t'v=i:";:Messaget^$messageld'";: ir,ysql_query($query, Sconn);
$this->disconnect($conn); ;"'""'!f"s;l;!J-.,' .;v
>л:;|Щй,;. • i?:'lv . ф.
II прочие методы
}
Данный метод представляет собой зеркальное отражение метода teMwssage(). Единственное, что их отличает, - это значение, за емое в поле Folderld.
Время от времени в папке Trash скапливается много удаленных с ний, и пользователь может захотеть освободить корзину. Для этих лей служит метод emptyTrash(), удаляющий из базы данных все щения, у которых поле Folderld имеет значение 2, вместе со всеми жениями.
Алгоритм работы метода emptyTrash() основан на двух запросах, рые удаляют сообщения и информацию о вложениях из таблиц данных. Первый запрос удаляет вложения, привязанные к сооб ям, помещенным в корзину, а второй удаляет сами сообщения:
class AjaxMailbox {
// прочие методы
function emptyTrash() {
$conn = $this->connect();
Squery = "delete from AjaxMailAttachments where Messageld in Squery .= " (select Messageld from AjaxMailMessages"; Squery .= " where FolderId=2)";
mysql_query($query, Sconn);
Squery = "delete from AjaxMailMessages.where FolderId=2"; ,mysql_query($query,Sconn);
$this->disconnect($conn);
}
// прочие методы
}
Первый запрос с помощью подзапроса выбирает числовые идентифи¬каторы сообщений, находящихся в корзине. Возможность создания подзапросов впервые появилась в MySQL 4 (тем, у кого установлена версия 3.x, надо обновить MySQL, прежде чем опробовать этот при¬мер). Второй запрос не содержит ничего сложного, он просто удаляет все записи, в которых поле Folderld содержит значение 2. И в заключе¬ние метод закрывает соединение с базой данных.