<?php
class EtherpadLiteClient {
const API_VERSION = 1;
const CODE_OK = 0;
const CODE_INVALID_PARAMETERS = 1;
const CODE_INTERNAL_ERROR = 2;
const CODE_INVALID_FUNCTION = 3;
const CODE_INVALID_API_KEY = 4;
protected $apiKey = "";
protected $baseUrl = "http://localhost:9001/api";
public function __construct($apiKey, $baseUrl = null){
$this->apiKey = $apiKey;
if (isset($baseUrl)){
$this->baseUrl = $baseUrl;
}
if (!filter_var($this->baseUrl, FILTER_VALIDATE_URL)){
throw new InvalidArgumentException("[{$this->baseUrl}] is not a valid URL");
}
}
protected function call($function, array $arguments = array()){
$query = array_merge(
array('apikey' => $this->apiKey),
$arguments
);
$url = $this->baseUrl."/".self::API_VERSION."/".$function."?".http_build_query($query);
// not all PHP installs have access to curl
if (function_exists('curl_init')){
$c = curl_init($url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_TIMEOUT, 20);
$result = curl_exec($c);
curl_close($c);
} else {
$result = file_get_contents($url);
}
if($result == ""){
throw new UnexpectedValueException("Empty or No Response from the server");
}
$result = json_decode($result);
if ($result === null){
throw new UnexpectedValueException("JSON response could not be decoded");
}
return $this->handleResult($result);
}
protected function handleResult($result){
if (!isset($result->code)){
throw new RuntimeException("API response has no code");
}
if (!isset($result->message)){
throw new RuntimeException("API response has no message");
}
if (!isset($result->data)){
$result->data = null;
}
switch ($result->code){
case self::CODE_OK:
return $result->data;
case self::CODE_INVALID_PARAMETERS:
case self::CODE_INVALID_API_KEY:
throw new InvalidArgumentException($result->message);
case self::CODE_INTERNAL_ERROR:
throw new RuntimeException($result->message);
case self::CODE_INVALID_FUNCTION:
throw new BadFunctionCallException($result->message);
default:
throw new RuntimeException("An unexpected error occurred whilst handling the response");
}
}
// GROUPS
// Pads can belong to a group. There will always be public pads that doesnt belong to a group (or we give this group the id 0)
// creates a new group
public function createGroup(){
return $this->call("createGroup");
}
// this functions helps you to map your application group ids to etherpad lite group ids
public function createGroupIfNotExistsFor($groupMapper){
return $this->call("createGroupIfNotExistsFor", array(
"groupMapper" => $groupMapper
));
}
// deletes a group
public function deleteGroup($groupID){
return $this->call("deleteGroup", array(
"groupID" => $groupID
));
}
// returns all pads of this group
public function listPads($groupID){
return $this->call("listPads", array(
"groupID" => $groupID
));
}
// creates a new pad in this group
public function createGroupPad($groupID, $padName, $text){
return $this->call("createGroupPad", array(
"groupID" => $groupID,
"padName" => $padName,
"text" => $text
));
}
// AUTHORS
// Theses authors are bind to the attributes the users choose (color and name).
// creates a new author
public function createAuthor($name){
return $this->call("createAuthor", array(
"name" => $name
));
}
// this functions helps you to map your application author ids to etherpad lite author ids
public function createAuthorIfNotExistsFor($authorMapper, $name){
return $this->call("createAuthorIfNotExistsFor", array(
"authorMapper" => $authorMapper,
"name" => $name
));
}
// SESSIONS
// Sessions can be created between a group and a author. This allows
// an author to access more than one group. The sessionID will be set as
// a cookie to the client and is valid until a certian date.
// creates a new session
public function createSession($groupID, $authorID, $validUntil){
return $this->call("createSession", array(
"groupID" => $groupID,
"authorID" => $authorID,
"validUntil" => $validUntil
));
}
// deletes a session
public function deleteSession($sessionID){
return $this->call("deleteSession", array(
"sessionID" => $sessionID
));
}
// returns informations about a session
public function getSessionInfo($sessionID){
return $this->call("getSessionInfo", array(
"sessionID" => $sessionID
));
}
// returns all sessions of a group
public function listSessionsOfGroup($groupID){
return $this->call("listSessionsOfGroup", array(
"groupID" => $groupID
));
}
// returns all sessions of an author
public function listSessionsOfAuthor($authorID){
return $this->call("listSessionsOfAuthor", array(
"authorID" => $authorID
));
}
// PAD CONTENT
// Pad content can be updated and retrieved through the API
// returns the text of a pad
// should take optional $rev
public function getText($padID){
return $this->call("getText", array(
"padID" => $padID
));
}
// sets the text of a pad
public function setText($padID, $text){
return $this->call("setText", array(
"padID" => $padID,
"text" => $text
));
}
// PAD
// Group pads are normal pads, but with the name schema
// GROUPID$PADNAME. A security manager controls access of them and its
// forbidden for normal pads to include a $ in the name.
// creates a new pad
public function createPad($padID, $text){
return $this->call("createPad", array(
"padID" => $padID,
"text" => $text
));
}
// returns the number of revisions of this pad
public function getRevisionsCount($padID){
return $this->call("getRevisionsCount", array(
"padID" => $padID
));
}
// deletes a pad
public function deletePad($padID){
return $this->call("deletePad", array(
"padID" => $padID
));
}
// returns the read only link of a pad
public function getReadOnlyID($padID){
return $this->call("getReadOnlyID", array(
"padID" => $padID
));
}
// sets a boolean for the public status of a pad
public function setPublicStatus($padID, $publicStatus){
return $this->call("setPublicStatus", array(
"padID" => $padID,
"publicStatus" => $publicStatus
));
}
// return true of false
public function getPublicStatus($padID){
return $this->call("getPublicStatus", array(
"padID" => $padID
));
}
// returns ok or a error message
public function setPassword($padID, $password){
return $this->call("setPassword", array(
"padID" => $padID,
"password" => $password
));
}
// returns true or false
public function isPasswordProtected($padID){
return $this->call("isPasswordProtected", array(
"padID" => $padID
));
}
}
分享到:
相关推荐
Etherpad是一款开源的在线协作编辑工具...理解这些知识点对于成功部署和维护一个稳定的Etherpad实例至关重要。在实践中,你可能还需要学习如何调试、优化性能以及与其他服务集成,这些都是提升Etherpad使用体验的关键。
这个“Etherpad在线协同文档”压缩包是专门为Windows用户设计的版本,包含了一切必要的组件来在本地运行一个 Etherpad 服务器。 首先,让我们详细了解一下 Etherpad 的核心特性: 1. **实时协作**:Etherpad 的...
Etherpad-Lite API PHP 客户端它是什么? Etherpad-Lite API 的 PHP 客户端。 目前不完整且不稳定。先决条件您必须使用 Etherpad-Lite >= 1.2.1。安装作曲家在根目录中,运行: $ curl -s ...
Etherpad 是一个线上共制平台,三、四个人可以坐在自己电脑前,同时对一份文件修改,也同时看到其他人的修改,不必锁文件或什么的。 Etherpad 号称是「Really Real-time Collaboration」
实时在线文档协作工具Etherpad源码 下载001、002、003文件以后,用7-zip解压。
etherpad乳胶一组用于将 etherpad-lite 与 LaTeX 结合的 php 和 javascript 文件。设置安装并从 APIKEY.txt 中获取 api 密钥。 在服务器上安装 TeX 发行版(例如 )。服务器端配置应在后端文件夹中编辑两个文件: ...
Etherpad 用于多人环境下富文本协作的软件,十分适用于限定范围内的知识共创。 新功能包括: 相比原始版本,显著降低硬件资源消耗。 支持 Win, OSX 和 Linux 三种系统下的部署。 界面得到了美化。 无限制的颜色选择...
基本配置选项: ETHERPAD_TITLE (默认: Etherpad ) 此Etherpad实例的标题。 ETHERPAD_FAVICON (默认值: favicon.ico ) 此实例要使用的Favicon。 ETHERPAD_IP (默认: 0.0.0.0 ) 要监听的IP地址。 ETHERPAD_...
还有一个功能齐全的插件框架,可让您轻松添加自己的功能。 默认情况下,您的Etherpad相当稀疏,并且因为Etherpad从Wordpress插件中汲取了很多灵感,所以它们的安装和更新确实非常容易。 一旦安装了Etherpad,您应该...
用于 Etherpad Lite API 的 .Net 库 它实现了 Etherpad Lite API,API 的。 它在结构上尽可能地匹配 API。 它将返回的 JSON 解析为强类型对象,以允许使用智能感知并减少魔术字符串的使用。 该库是用 C# 编写的,...
还有一个可以帮助您将 Pads 嵌入您的网站。 还有一个功能齐全的插件框架,允许您轻松添加自己的功能。 默认情况下,您的 Etherpad 相当稀疏,因为 Etherpad 从 Wordpress 插件中汲取了很多灵感,因此非常易于安装和...
该插件被设计为恶意软件,如果已安装,则其目的是使您的Etherpad实例崩溃并使其不可用。 安装 npm install ep_kaput 或使用Etherpad /admin界面。 测验 前端 访问来运行前端测试。 后端 键入cd src && npm run ...
在 Etherpad 中,用户可以创建多个文档(或称为"pads"),每个pad都是一个实时的共享编辑空间。团队成员可以在同一个pad上输入文字、格式化文本、插入图片、链接和其他多媒体元素,所有这些操作都会立即对其他所有...
etherpad-泊坞窗 这或多或少是当前版本(截至编写此文件时),其中包括大量有用的插件。 要从Docker索引下载映像,请运行: docker pull toeirei/etherpad-docker 环境变量: ETHERPAD_TITLE =您的记事本标题 ...
实时在线文档协作工具Etherpad源代码 实时在线文档协作工具Etherpad源代码 实时在线文档协作工具Etherpad源代码 下载001、002、003文件以后,用7-zip解压。
还有一个可以帮助您将 Pads 嵌入您的网站。 还有一个功能齐全的插件框架,允许您轻松添加自己的功能。 默认情况下,您的 Etherpad 相当稀疏,因为 Etherpad 从 Wordpress 插件中汲取了很多灵感,因此非常易于安装...
在Etherpad中绘画 您必须正在运行实例 。 在您的settings.json ,添加: 更改主机 设置可从用户浏览器访问的主机。 " ep_draw " : { " host " : " your.etherdrawhost.com " } # Example " ep_draw " :{ " ...
网络实时协作编辑器关于Etherpad是一种实时协作编辑器,。 它提供了功能,并在您的控制下在您的服务器上运行。安装要求nodejs > = 10.17.0 。... 作为任何用户(我们建议创建一个单独的用户,称为ether
在可能的情况下使用 Etherpad-Lite 的 API,并辅以直接数据库调用以在需要时扩展功能 特征 列出作者、垫组、垫和会话* 添加和删除作者、垫组、垫和会话* 显示作者、pad 和会话信息* 查看板内容 修改作者地图...
Etherpad-Lite 插件Linkify:添加内部链接(ep_linkify) 标题:标题支持(ep_headings)安装 cd [your etherpad installation]; npm install [path-to-etherpad-plugins]/[plugin-name]其中plugin-name是 ep_...