Создание плагинов
Для расширенной поддержки серверов в программе используются скрипты на языке Squirrel 2.
Документация языка Squirrel
Документация стандартной библиотеки языка Squirrel
Они должны быть сохранены в кодировке utf-8 в файлах с расширением .nut
.
Пример плагина (example.nut):
test <- "example"; // global variable /** * Функция, загружающая файл * @var string pathToFile * @var CIUUploadParams options * @return int - success(1), failure(0) **/ function UploadFile(pathToFile, options) { nm.setUrl("http://example.com/upload.php"); nm.addQueryParamFile("file", pathToFile, ExtractFileName(pathToFile),""); nm.addQueryParam("submit", "Upload file!"); nm.doUploadMultipartData(); local response = nm.responseBody(); // 'local' it's like javascript's 'var' but only for local variables local directUrl = regex_simple(response, "\\[IMG\\](.+)\\[/IMG\\]",0); options.setDirectUrl(directUrl); return 1; //успех } /** * Вспомогательная функция, упрощающая работу с регулярными выражениями * @var string data - строка, в которой мы ищем * @var string regStr - регулярное выражение, в формате, поддерживаемом стандартной библиотекой языка squirrel. * http://www.squirrel-lang.org/doc/sqstdlib2.html#d0e2580 * Этот формат не поддерживает некоторые возможности формата PCRE, используемого в servers.xml. * @var int start - с какой позиции в строке начинать поиск) * @return string - возвращает текст, захваченный первой подмаской (subpattern). **/ function regex_simple(data,regStr,start) { local ex = regexp(regStr); local res = ex.capture(data, start); local resultStr = ""; if(res != null){ resultStr = data.slice(res[1].begin, res[1].end); } return resultStr; } /** * Необязательные функции: * Получение списка альбомов(папок, галерей) на сервере * @var CFolderList list * @return int - success(1), failure(0) **/ function GetFolderList(list) { // Ваш код return 1; //успех } /** * Create an folder or an album * @var CFolderItem parentAlbum * @var CFolderItem album * @return int - success(1), failure(0) **/ function CreateFolder(parentAlbum,album) { // Ваш код return 1; //успех } /** Modify a folder or an album (update name, description) * @var CFolderItem album * @return int - success(1), failure(0) **/ function ModifyFolder(album) { // Ваш код return 1; //успех } // Функция, возвращающая список видов ограничений доступа к альбому: // приватный, общедоступный, только для друзей и т.п. // @return array function GetFolderAccessTypeList() { return ["ТипДоступа1", "ТипДоступа2"]; }
В общем случае необходимо реализовать 1 функцию — UploadFile
.
Если нужна поддержка серверных альбомов, то необходимо реализовать еще 4 функции — GetFolderList
, CreateFolder
,
ModifyFolder
, GetFolderAccessTypeList
.