.
5 сентября 2013

Битрикс. Учет скачиваний файла пользователями

posted in Bitrix, CMS |

Итак, почти реализовал небольшое ТЗ — возможно кому-то пригодятся мои наработки...

Допустим, на сайте под управлением CMS Bitrix, необходимо определённому списку пользователей дать возможность скачивать определенный файл и фиксировать количество скачиваний.
Создаём группу для юзеров, которым можно скачивать (у меня получился ID=9)
На пользователей, вешаем пользовательское поле UF_CNT — куда будем складировать количество скачиваний файла.

Собственно — привожу содержимое скрипта, непосредственно «отдающего» нужный файл:

 $USER->GetID());
 $arParams["SELECT"] = array("UF_CNT");
 $arRes = CUser::GetList($by = 'ID', $order = 'ASC', $arFilter,$arParams);
 if($res = $arRes->Fetch()) {
    $plex_cnt = $res["UF_CNT"]+1;
 }

// обновляем
 $user = new CUser;
 $user->Update($USER->GetID(), array("UF_CNT" => $plex_cnt) );

// отдаём файл
 $filename = 'file-info.zip';
 header("Pragma: public");
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private", false); // нужен для некоторых браузеров
 header("Content-Type: application/force-download");
 header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
 header("Content-Transfer-Encoding: binary");
 header("Content-Length: ".filesize($filename));
 readfile("$filename");
 exit();
}

header('Location: ............'); 

Ну и ссылочку на данный скрипт отдаём только «правильным» пользователям. Проверка та-же if ( CSite::InGroup ( array ($gID))) { ... }

Да, ещё момент — прямое скачивание файла file-info.zip нужно запретить в конфе nginx-а, т.к. именно он отвечает за отдачу статики location = /paht/file-info.zip { deny all }
(далеко не сразу этот момент вспомнил когда не мог понять — почему не работает запрет на скачивание именно этого файла установленный мной в .htaccess при правильной обработке в нём других правил)

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